<?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>142556</bug_id>
          
          <creation_ts>2015-03-10 18:55:09 -0700</creation_ts>
          <short_desc>Integrate MapData into JSMap and JSSet</short_desc>
          <delta_ts>2015-03-12 16:04:16 -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>New Bugs</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>
          
          <blocked>142408</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076168</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-10 18:55:09 -0700</bug_when>
    <thetext>Integrate MapData into JSMap and JSSet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076169</commentid>
    <comment_count>1</comment_count>
      <attachid>248382</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-10 18:58:29 -0700</bug_when>
    <thetext>Created attachment 248382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076173</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-10 19:03:10 -0700</bug_when>
    <thetext>Created the prototype to integrate MapData into JSMap / JSSet.
In the current patch, MapData is not splitted into MapData / SetData.

MapData&apos;s operations are similar to SetData.
If splitting MapData into SetData and MapData is preferable, one possible solution is template parameterizing MapData such as MapData&lt;ValueType, ValueTraits&gt; and using MapData&lt;Pair&lt;Key, Value&gt;, Traits&gt; in JSMap and MapData&lt;Value, Traits&gt; in JSSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076256</commentid>
    <comment_count>3</comment_count>
      <attachid>248406</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-10 23:23:15 -0700</bug_when>
    <thetext>Created attachment 248406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076258</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-10 23:25:37 -0700</bug_when>
    <thetext>Attachment 248406 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/MapData.h:191:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:212:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 16 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>1076275</commentid>
    <comment_count>5</comment_count>
      <attachid>248407</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-11 02:11:30 -0700</bug_when>
    <thetext>Created attachment 248407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076276</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-11 02:13:19 -0700</bug_when>
    <thetext>Attachment 248407 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/MapData.h:191:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:212:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 3 in 21 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>1076338</commentid>
    <comment_count>7</comment_count>
      <attachid>248422</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-11 09:22:09 -0700</bug_when>
    <thetext>Created attachment 248422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076342</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-11 09:24:22 -0700</bug_when>
    <thetext>Attachment 248422 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/MapData.h:193:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:214:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 21 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>1076344</commentid>
    <comment_count>9</comment_count>
      <attachid>248425</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-11 09:27:26 -0700</bug_when>
    <thetext>Created attachment 248425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076345</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-11 09:29:26 -0700</bug_when>
    <thetext>Attachment 248425 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/MapData.h:194:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:215:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 21 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>1076357</commentid>
    <comment_count>11</comment_count>
      <attachid>248430</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-11 10:18:24 -0700</bug_when>
    <thetext>Created attachment 248430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076360</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-11 10:22:37 -0700</bug_when>
    <thetext>Attachment 248430 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/MapData.h:194:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:215:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 22 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>1076706</commentid>
    <comment_count>13</comment_count>
      <attachid>248532</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 12:47:44 -0700</bug_when>
    <thetext>Created attachment 248532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076707</commentid>
    <comment_count>14</comment_count>
      <attachid>248533</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 12:49:23 -0700</bug_when>
    <thetext>Created attachment 248533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076708</commentid>
    <comment_count>15</comment_count>
      <attachid>248533</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 12:50:10 -0700</bug_when>
    <thetext>Comment on attachment 248533
Patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076709</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-12 12:51:18 -0700</bug_when>
    <thetext>Attachment 248533 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSMap.h:119:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/MapData.h:193:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:214:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 19 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>1076712</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 12:59:24 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Attachment 248533 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/runtime/JSMap.h:119:  The parameter name
&gt; &quot;value&quot; adds no information, so it should be removed. 

I think that the style bot is wrong here; you&apos;re using the word &quot;value&quot; to distinguish from &quot;key&quot;.  So, please ignore this style feedback.

&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/MapData.h:193: 
&gt; MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use
&gt; underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; ERROR: Source/JavaScriptCore/runtime/MapData.h:214: 
&gt; MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores
&gt; in your identifier names.  [readability/naming/underscores] [4]

These errors are wrong.  You&apos;re right to use const_iterator as the name of a const iterator. ;-)

&gt; Total errors found: 3 in 19 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076714</commentid>
    <comment_count>18</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 13:09:05 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I think that the style bot is wrong here; you&apos;re using the word &quot;value&quot; to
&gt; distinguish from &quot;key&quot;.  So, please ignore this style feedback.
&gt; 
&gt; &gt; [readability/parameter_name] [5]
&gt; &gt; ERROR: Source/JavaScriptCore/runtime/MapData.h:193: 
&gt; &gt; MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use
&gt; &gt; underscores in your identifier names.  [readability/naming/underscores] [4]
&gt; &gt; ERROR: Source/JavaScriptCore/runtime/MapData.h:214: 
&gt; &gt; MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores
&gt; &gt; in your identifier names.  [readability/naming/underscores] [4]
&gt; 
&gt; These errors are wrong.  You&apos;re right to use const_iterator as the name of a
&gt; const iterator. ;-)
&gt; 
&gt; &gt; Total errors found: 3 in 19 files
&gt; &gt; 
&gt; &gt; 
&gt; &gt; If any of these errors are false positives, please file a bug against
&gt; &gt; check-webkit-style.

Thank you for your review.

Oops, one build failure is raised.
This is because JSMap::get conflicts with JSObject::get.
I needed to rebuild with --clean for MapConstructor.cpp, this is because it doesn&apos;t use JSMap::get, so rebuild doesn&apos;t occur.
I&apos;ll fix it with speciflying explicitly by `map-&gt;JSObject::get`. And update the patch with it.

The change will become only this from the reviewed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076724</commentid>
    <comment_count>19</comment_count>
      <attachid>248536</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 13:26:28 -0700</bug_when>
    <thetext>Created attachment 248536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076726</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-12 13:28:58 -0700</bug_when>
    <thetext>Attachment 248536 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSMap.h:119:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/MapData.h:193:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:214:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 20 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>1076731</commentid>
    <comment_count>21</comment_count>
      <attachid>248536</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 13:36:21 -0700</bug_when>
    <thetext>Comment on attachment 248536
Patch

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

I&apos;ve updated the patch with a few build fix.
I&apos;ve only annotated the changes from the previous reviewed patch.

To land it safely, I&apos;ve updated the patch again.
Could you take a look?

&gt; Source/JavaScriptCore/runtime/MapConstructor.cpp:63
&gt; +    JSValue adderFunction = map-&gt;JSObject::get(exec, exec-&gt;propertyNames().set);

Explicitly specifying JSObject::get since JSMap also has JSMap::get which signature is different from JSObject::get.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2555
&gt; +            set-&gt;add(m_exec, outValue);

I&apos;ve missed that changing this from set-&gt;set to set-&gt;add.
Now I&apos;ve built whole WebKit and make sure that build passed, run-webkit-tests for structured-cloning passed, run-javascriptcore-tests passed on GTK environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076734</commentid>
    <comment_count>22</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 13:39:12 -0700</bug_when>
    <thetext>Ah, sorry, I&apos;ll update once more for windows build.
Dropping MapData.cpp from vcxproj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076735</commentid>
    <comment_count>23</comment_count>
      <attachid>248539</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 13:43:22 -0700</bug_when>
    <thetext>Created attachment 248539
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076737</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 13:44:44 -0700</bug_when>
    <thetext>This probably doesn&apos;t need to be reviewed again even if you have to make small changes to pacify the various builds.  That&apos;s how we usually work - it&apos;s a given that after an r+, additional changes may be necessary, and if they are small, we don&apos;t request additional review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076739</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-12 13:46:21 -0700</bug_when>
    <thetext>Attachment 248539 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSMap.h:119:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/MapData.h:193:  MapDataImpl::const_iterator::const_iterator is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/runtime/MapData.h:214:  MapDataImpl::const_iterator::end is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 22 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>1076740</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 13:50:36 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; This probably doesn&apos;t need to be reviewed again even if you have to make
&gt; small changes to pacify the various builds.  That&apos;s how we usually work -
&gt; it&apos;s a given that after an r+, additional changes may be necessary, and if
&gt; they are small, we don&apos;t request additional review.

Thank you :)
I&apos;ve checked build on gtk, but maybe, iOS seems failed due to the lack of JS_EXPORT_PRIVATE.
So I&apos;ll move this patch from my GTK environment to OSX, eusured that build/test passed and land it.

Does Tools/Scripts/webkit-patch land-safely works fine?
If it works, I&apos;m planning to use it to land it safely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076755</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 14:22:07 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #24)
&gt; &gt; This probably doesn&apos;t need to be reviewed again even if you have to make
&gt; &gt; small changes to pacify the various builds.  That&apos;s how we usually work -
&gt; &gt; it&apos;s a given that after an r+, additional changes may be necessary, and if
&gt; &gt; they are small, we don&apos;t request additional review.
&gt; 
&gt; Thank you :)
&gt; I&apos;ve checked build on gtk, but maybe, iOS seems failed due to the lack of
&gt; JS_EXPORT_PRIVATE.
&gt; So I&apos;ll move this patch from my GTK environment to OSX, eusured that
&gt; build/test passed and land it.
&gt; 
&gt; Does Tools/Scripts/webkit-patch land-safely works fine?
&gt; If it works, I&apos;m planning to use it to land it safely.

I don&apos;t know. I just svn commit. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076773</commentid>
    <comment_count>28</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 15:57:53 -0700</bug_when>
    <thetext>Committed r181458: &lt;http://trac.webkit.org/changeset/181458&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076777</commentid>
    <comment_count>29</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-12 16:04:16 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; I don&apos;t know. I just svn commit. ;-)

I see. I&apos;ve landed with Tools/Scripts/webkit-patch land. Thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248382</attachid>
            <date>2015-03-10 18:58:29 -0700</date>
            <delta_ts>2015-03-10 23:23:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150311105804.patch</filename>
            <type>text/plain</type>
            <size>26668</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
M2Q4MjQ4YzYzNTAxYzU3MzJhMzY5MjFmNzhlM2NjNTYxYWFkYmQ5Li4zYWI3NzFlN2ZhMzQwYTJj
MThhOWI4NjU5YTY4MTI3NWZmZTI5M2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NyBAQAorMjAxNS0wMy0xMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRlZ3JhdGUgTWFwRGF0YSBpbnRvIEpTTWFwIGFuZCBKU1NldAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRlZ3JhdGVzIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQuCisgICAgICAgIFRoaXMg
cmVtb3ZlcyAyIG9iamVjdCBhbGxvY2F0aW9uIHBlciBvbmUgSlNNYXAgLyBKU1NldC4KKworICAg
ICAgICBBbmQgYXQgdGhlIHNhbWUgdGltZSwgdGhpcyBwYXRjaCBmaXhlcyBtaXNzaW5nIGRlc3Ry
b3kgZnVuY3Rpb25zCisgICAgICAgIGluIEpTTWFwSXRlcmF0b3IgYW5kIEpTU2V0SXRlcmF0b3Iu
CisgICAgICAgIFRoZXkgYXJlIG5lZWRlZCBiZWNhdXNlIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
IGlzIGEgbm9uLXRyaXZpYWwgZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIHJ1bnRpbWUvSlNNYXAu
Y3BwOgorICAgICAgICAoSlNDOjpKU01hcDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTTWFw
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNvcHlCYWNraW5nU3RvcmUp
OgorICAgICAgICAoSlNDOjpKU01hcDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKEpTQzo6SlNNYXA6Om1hcERhdGEpOgorICAg
ICAgICAoSlNDOjpKU01hcDo6SlNNYXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTTWFw
SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuY3BwOgorICAgICAgICAoSlNDOjpKU1NldDo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTU2V0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjpKU1NldDo6Zmlu
aXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuaDoKKyAgICAg
ICAgKEpTQzo6SlNTZXQ6Om1hcERhdGEpOgorICAgICAgICAoSlNDOjpKU1NldDo6SlNTZXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvTWFw
RGF0YS5jcHA6CisgICAgICAgIChKU0M6Ok1hcERhdGE6Ok1hcERhdGEpOgorICAgICAgICAoSlND
OjpNYXBEYXRhOjpmaW5kKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29udGFpbnMpOgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjphZGQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpzZXQpOgor
ICAgICAgICAoSlNDOjpNYXBEYXRhOjpnZXQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZW1v
dmUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAg
ICAgIChKU0M6Ok1hcERhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpNYXBEYXRh
Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6ZGVzdHJveSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9NYXBEYXRhLmg6CisgICAgICAgIChKU0M6Ok1hcERh
dGE6OnNpemUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2V0
KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNl
dFByb3RvRnVuY0FkZCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAzLTEwICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpIGluc3RlYWQgb2YgKHVuc2lnbmVkKS0xLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCmluZGV4IGMwOGE5NzA4YmU0NWE5MzQ5NTUyMzRiMzA1
NzY2MGQ3ODE2NzUwZjQuLjFmMGE4OTJmMzM5NzI4ZTllMTIwMDY4MjBjZmVkNzc5MTFmNDg4MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKQEAgLTMyLDIxICszMiwy
NCBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci0g
ICAgCisKIGNvbnN0IENsYXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTTWFwKj4oY2VsbCktPn5KU01hcCgp
OworfQorCiB2b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsK
LSAgICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU01hcCo+KGNl
bGwpLT5tX21hcERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBK
U01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBKU01hcDo6Y29weUJhY2tpbmdTdG9y
ZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFwRGF0YS5zZXQodm0sIHRo
aXMsIE1hcERhdGE6OmNyZWF0ZSh2bSkpOworICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2Vs
bCwgdmlzaXRvciwgdG9rZW4pOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEu
Y29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKLQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwLmgKaW5kZXggNDMxNTI3NGRlM2U5ODU3YzViYmUwODM1MTM3NTY5
YTc3MTY0NmUwNS4uYWY1YmI0MzYyNmUxNTBkZDJlMTNlMTBjYmE5Mzg0MjVlZWFmNjA2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCkBAIC0yNiwxNSArMjYsMTUgQEAKICNp
Zm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJs
ZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNNYXAgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJs
ZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Cisg
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIApAQCAtNTUsMTkgKzU1LDIwIEBAIGNsYXNzIEpTTWFwIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSk7CiAgICAgfQogCi0gICAgTWFwRGF0YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5n
ZXQoKTsgfQorICAgIE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiAmbV9tYXBEYXRhOyB9CiAK
IHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9tYXBEYXRhKCkKICAgICB7CiAg
ICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwot
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJh
Y2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAKLSAgICBXcml0
ZUJhcnJpZXI8TWFwRGF0YT4gbV9tYXBEYXRhOworICAgIE1hcERhdGEgbV9tYXBEYXRhOwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAppbmRleCBjMTY3YWNiY2YzYTNhOWI3YzRjZTVjYTcyOGEzODE1Y2JiOTZjYmJlLi5lOWQ3ZDQy
ZmI0ZTM4ZWQzMTdjZDYyYmYwNjQyY2MxMTVmMWU2M2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQwLDE5IEBAIHZv
aWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU01hcCogaXRlcmF0ZWRP
YmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNldCh2
bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3REYXRhLnNldCh2
bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7Cit9CisKK3ZvaWQgSlNNYXBJdGVy
YXRvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTTWFwSXRlcmF0b3Iq
PihjZWxsKS0+fkpTTWFwSXRlcmF0b3IoKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNN
YXBJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7Ci0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOyAgICAgICAg
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmplY3REYXRhKTsKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9tYXApOwogfQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNy
ZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCmluZGV4
IDYzZGQ1ZThiMTFmOTZhNDQ2MWFkZDVjZWEzYzQ0N2FkYzYwMDQwY2MuLjgzNmQ2NDljZTdlNDM4
ODdjODY2NzdkMzhkNzg2MDFhN2U0NDVmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgKQEAgLTg3LDEyICs4NywxMiBAQCBjbGFzcyBKU01hcEl0
ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICB7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1
ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsKLSAgICBXcml0ZUJh
cnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERhdGE7CiAgICAgTWFwRGF0YTo6Y29uc3Rf
aXRlcmF0b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKaW5kZXggM2MxZDEyNGJjNTYyZGI2
ZGMxYmEwMGM5NjNiYTU0OTNlNjAzNzM3Ny4uNDg0ZjFkZjQwMmY5YWU4MWE0NGM4YTBiMTZiMDJm
NWRhYjAwNGEyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcApAQCAt
MzUsMTcgKzM1LDIxIEBACiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAordm9p
ZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTU2V0Kj4oY2Vs
bCktPn5KU1NldCgpOworfQorCiB2b2lkIEpTU2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwp
OwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2Fz
dDxKU1NldCo+KGNlbGwpLT5tX21hcERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsK
IH0KIAotdm9pZCBKU1NldDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBKU1NldDo6Y29w
eUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9r
ZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFwRGF0
YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNyZWF0ZSh2bSkpOworICAgIEJhc2U6OmNvcHlCYWNr
aW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwp
LT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCmluZGV4IGZjMGFhMzBmYjk1N2NiODlmOTVl
NTY3ZWYxNjBjZjgxNTAzZTI1MmUuLmE0M2EzMGY4NDUxYzk2Nzc3ZDEyMDQwYTcwNmQ0Mjc1NzIx
N2Y4YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaApAQCAtMjYsMTUgKzI2
LDE1IEBACiAjaWZuZGVmIEpTU2V0X2gKICNkZWZpbmUgSlNTZXRfaAogCisjaW5jbHVkZSAiSlNE
ZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIk1h
cERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hcERhdGE7Ci0KLWNsYXNzIEpT
U2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNE
ZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAogICAgIERF
Q0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTU1LDE5ICs1NSwyMCBAQCBjbGFzcyBKU1NldCA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgp
LCBzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiBt
X21hcERhdGEuZ2V0KCk7IH0KKyAgICBNYXBEYXRhKiBtYXBEYXRhKCkgeyByZXR1cm4gJm1fbWFw
RGF0YTsgfQogCiBwcml2YXRlOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fbWFwRGF0YSgp
CiAgICAgewogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKLSAgICAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKLSAg
ICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9tYXBEYXRhOworICAgIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgTWFw
RGF0YSBtX21hcERhdGE7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCmluZGV4IDJmYzI5ODkwMTc2ODczZTQ0YmI5MzE1MjRjNWYw
M2VkYTA0ZjM3NWUuLjVlY2FjMTJkOWM0Y2EyMjc1ZWRkYWQ5ZTc4OTc4NTQ4Yzk3ZTdhNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCkBA
IC00MCwxNSArNDAsMTkgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEpTU2V0KiBpdGVyYXRlZE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgbV9pdGVy
YXRlZE9iamVjdERhdGEuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdC0+bWFwRGF0YSgpKTsK
IH0KIAogdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNTZXRJdGVyYXRvciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOyAgICAgICAgCisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0
ZWRPYmplY3REYXRhKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zZXQpOwor
fQorCit2b2lkIEpTU2V0SXRlcmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpz
Q2FzdDxKU1NldEl0ZXJhdG9yKj4oY2VsbCktPn5KU1NldEl0ZXJhdG9yKCk7CiB9CiAKIEpTVmFs
dWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldEl0ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmgKaW5kZXggOWM3MGMyNmU1MGEyYjVkOTVlOGRjODFkZmQxOWRhYWQ0MjUw
N2JkNy4uZGY4NDIxNDg4MzlmMTY0MGQzNWQ1NGRjZDA3MjA0YWQzM2I3Y2ZjNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaApAQCAtODUsMTIgKzg1
LDEyIEBAIGNsYXNzIEpTU2V0SXRlcmF0b3IgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qg
ewogICAgIHsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCopOwogICAgIEpTVmFsdWUgY3JlYXRlUGFp
cihDYWxsRnJhbWUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNTZXQ+
IG1fc2V0OwotICAgIFdyaXRlQmFycmllcjxNYXBEYXRhPiBtX2l0ZXJhdGVkT2JqZWN0RGF0YTsK
ICAgICBNYXBEYXRhOjpjb25zdF9pdGVyYXRvciBtX2l0ZXJhdG9yOwogICAgIFNldEl0ZXJhdGlv
bktpbmQgbV9raW5kOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5j
cHAKaW5kZXggYjA1NjkxYzg1MmFiMmZkMmJiM2U1NDdhNGNkYzA5ZGUzNmNiMTdmZS4uYzQxZTc4
MjEwOTZjZDVjZDNlYTlhNzExNGQ3NmVmNzc3NGZiYmY4NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKQEAgLTM4LDEzICszOCwxMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIE1hcERhdGE6OnNfaW5mbyA9IHsgIk1hcERhdGEiLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1hcERhdGEpIH07Ci0KIHN0YXRpYyBjb25zdCBpbnQz
Ml90IG1pbmltdW1NYXBTaXplID0gODsKIAotTWFwRGF0YTo6TWFwRGF0YShWTSYgdm0pCi0gICAg
OiBCYXNlKHZtLCB2bS5tYXBEYXRhU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9jYXBhY2l0eSgw
KQorTWFwRGF0YTo6TWFwRGF0YSgpCisgICAgOiBtX2NhcGFjaXR5KDApCiAgICAgLCBtX3NpemUo
MCkKICAgICAsIG1fZGVsZXRlZENvdW50KDApCiAgICAgLCBtX2l0ZXJhdG9yQ291bnQoMCkKQEAg
LTUyLDEwICs0OSwxMCBAQAogewogfQogCi1NYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6ZmluZChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCitNYXBEYXRhOjpFbnRyeSogTWFwRGF0
YTo6ZmluZChFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQogewogICAgIGlmIChrZXkudmFs
dWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUu
ZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSk7CisgICAg
ICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1
ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSk7CiAgICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5
ZWRUYWJsZS5lbmQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gJm1f
ZW50cmllc1tpdGVyLT52YWx1ZV07CkBAIC03OSw1OSArNzYsNTkgQEAKICAgICByZXR1cm4gJm1f
ZW50cmllc1tpdGVyLT52YWx1ZV07CiB9CiAKLWJvb2wgTWFwRGF0YTo6Y29udGFpbnMoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQorYm9vbCBNYXBEYXRhOjpjb250YWlucyhFeGVj
U3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQogewotICAgIHJldHVybiBmaW5kKGNhbGxGcmFtZSwg
a2V5KTsKKyAgICByZXR1cm4gZmluZChleGVjLCBrZXkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgTWFwLCB0eXBlbmFtZSBLZXk+IE1hcERhdGE6OkVudHJ5KiBNYXBEYXRhOjphZGQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtleVZhbHVlKQordGVt
cGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PiBNYXBEYXRhOjpFbnRyeSogTWFwRGF0
YTo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgTWFwJiBtYXAsIEtleSBrZXks
IEtleVR5cGUga2V5VmFsdWUpCiB7CiAgICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlv
biA9IG1hcC5maW5kKGtleSk7CiAgICAgaWYgKGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKICAgICAg
ICAgcmV0dXJuICZtX2VudHJpZXNbbG9jYXRpb24tPnZhbHVlXTsKLSAgICAKLSAgICBpZiAoIWVu
c3VyZVNwYWNlRm9yQXBwZW5kKGNhbGxGcmFtZSkpCisKKyAgICBpZiAoIWVuc3VyZVNwYWNlRm9y
QXBwZW5kKGV4ZWMsIG93bmVyKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhdXRvIHJlc3Vs
dCA9IG1hcC5hZGQoa2V5LCBtX3NpemUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05l
d0VudHJ5KTsKICAgICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzW21fc2l6ZSsrXTsKICAgICBu
ZXcgKGVudHJ5KSBFbnRyeSgpOwotICAgIGVudHJ5LT5rZXkuc2V0KGNhbGxGcmFtZS0+dm0oKSwg
dGhpcywga2V5VmFsdWUudmFsdWUpOworICAgIGVudHJ5LT5rZXkuc2V0KGV4ZWMtPnZtKCksIG93
bmVyLCBrZXlWYWx1ZS52YWx1ZSk7CiAgICAgcmV0dXJuIGVudHJ5OwogfQogCi12b2lkIE1hcERh
dGE6OnNldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXksIEpTVmFsdWUgdmFsdWUp
Cit2b2lkIE1hcERhdGE6OnNldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIsIEtleVR5
cGUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEVudHJ5KiBsb2NhdGlvbiA9IGFkZChjYWxs
RnJhbWUsIGtleSk7CisgICAgRW50cnkqIGxvY2F0aW9uID0gYWRkKGV4ZWMsIG93bmVyLCBrZXkp
OwogICAgIGlmICghbG9jYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBsb2NhdGlvbi0+dmFs
dWUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgdGhpcywgdmFsdWUpOworICAgIGxvY2F0aW9uLT52YWx1
ZS5zZXQoZXhlYy0+dm0oKSwgb3duZXIsIHZhbHVlKTsKIH0KLSAgICAKLU1hcERhdGE6OkVudHJ5
KiBNYXBEYXRhOjphZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQorCitNYXBE
YXRhOjpFbnRyeSogTWFwRGF0YTo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwg
S2V5VHlwZSBrZXkpCiB7CiAgICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQotICAgICAgICBy
ZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9zdHJpbmdLZXllZFRhYmxlLCBhc1N0cmluZyhrZXkudmFs
dWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSwga2V5KTsKKyAgICAgICAgcmV0dXJuIGFkZChl
eGVjLCBvd25lciwgbV9zdHJpbmdLZXllZFRhYmxlLCBhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1
ZShleGVjKS5pbXBsKCksIGtleSk7CiAgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKQotICAg
ICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9zeW1ib2xLZXllZFRhYmxlLCBhc1N5bWJvbChr
ZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpLCBrZXkpOworICAgICAgICByZXR1cm4gYWRk
KGV4ZWMsIG93bmVyLCBtX3N5bWJvbEtleWVkVGFibGUsIGFzU3ltYm9sKGtleS52YWx1ZSktPnBy
aXZhdGVOYW1lKCkudWlkKCksIGtleSk7CiAgICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkKLSAg
ICAgICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1ZS5h
c0NlbGwoKSwga2V5KTsKLSAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV92YWx1ZUtleWVkVGFi
bGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOworICAgICAgICByZXR1cm4gYWRk
KGV4ZWMsIG93bmVyLCBtX2NlbGxLZXllZFRhYmxlLCBrZXkudmFsdWUuYXNDZWxsKCksIGtleSk7
CisgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwgbV92YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6
OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOwogfQogCi1KU1ZhbHVlIE1hcERhdGE6OmdldChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCitKU1ZhbHVlIE1hcERhdGE6OmdldChFeGVj
U3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQogewotICAgIGlmIChFbnRyeSogZW50cnkgPSBmaW5k
KGNhbGxGcmFtZSwga2V5KSkKKyAgICBpZiAoRW50cnkqIGVudHJ5ID0gZmluZChleGVjLCBrZXkp
KQogICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlLmdldCgpOwogICAgIHJldHVybiBKU1ZhbHVl
KCk7CiB9CiAKLWJvb2wgTWFwRGF0YTo6cmVtb3ZlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlU
eXBlIGtleSkKK2Jvb2wgTWFwRGF0YTo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBr
ZXkpCiB7CiAgICAgaW50MzJfdCBsb2NhdGlvbjsKICAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJp
bmcoa2V5LnZhbHVlKS0+dmFsdWUoY2FsbEZyYW1lKS5pbXBsKCkpOworICAgICAgICBhdXRvIGl0
ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShl
eGVjKS5pbXBsKCkpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5k
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGxvY2F0aW9uID0gaXRlci0+
dmFsdWU7CkBAIC0yMDksMTYgKzIwNiwxNiBAQCB2b2lkIE1hcERhdGE6OnJlcGxhY2VCYWNraW5n
U3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQogICAgIG1fZW50
cmllcyA9IGRlc3RpbmF0aW9uOwogfQogCi1DaGVja2VkQm9vbGVhbiBNYXBEYXRhOjplbnN1cmVT
cGFjZUZvckFwcGVuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK0NoZWNrZWRCb29sZWFuIE1hcERh
dGE6OmVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lcikK
IHsKICAgICBpZiAobV9jYXBhY2l0eSA+IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFj
aXR5IC8gMikgKyAxLCBtaW5pbXVtTWFwU2l6ZSk7CiAgICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7
Ci0gICAgRGVmZXJHQyBkZWZlcigqY2FsbEZyYW1lLT5oZWFwKCkpOwotICAgIGlmICghY2FsbEZy
YW1lLT5oZWFwKCktPnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCByZXF1aXJlZFNpemUgKiBzaXpl
b2YoRW50cnkpLCAmbmV3U3RvcmFnZSkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGNhbGxGcmFtZSk7CisgICAgRGVmZXJHQyBkZWZlcigqZXhlYy0+aGVhcCgpKTsKKyAgICBpZiAo
IWV4ZWMtPmhlYXAoKS0+dHJ5QWxsb2NhdGVTdG9yYWdlKG93bmVyLCByZXF1aXJlZFNpemUgKiBz
aXplb2YoRW50cnkpLCAmbmV3U3RvcmFnZSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGV4ZWMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIEVudHJ5KiBuZXdF
bnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKQEAgLTIyNiw0OSArMjIz
LDM5IEBAIENoZWNrZWRCb29sZWFuIE1hcERhdGE6OmVuc3VyZVNwYWNlRm9yQXBwZW5kKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdF
bnRyaWVzLCByZXF1aXJlZFNpemUpOwogICAgIGVsc2UKICAgICAgICAgcmVwbGFjZUJhY2tpbmdT
dG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGNhbGxGcmFtZS0+aGVhcCgpLT53
cml0ZUJhcnJpZXIodGhpcyk7CisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIE1hcERhdGE6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgTWFwRGF0YTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIE1hcERhdGEqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8TWFwRGF0YSo+KGNlbGwpOwotICAgIEVudHJ5KiBlbnRyaWVzID0gdGhpc09iamVjdC0+
bV9lbnRyaWVzOworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRyaWVzOwogICAgIGlmICghZW50
cmllcykKICAgICAgICAgcmV0dXJuOwotICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+bV9z
aXplOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX2RlbGV0ZWRDb3VudCkgewotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIGlmIChtX2RlbGV0ZWRDb3VudCkg
eworICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgewogICAgICAg
ICAgICAgaWYgKCFlbnRyaWVzW2ldLmtleSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyaWVzW2ldLmtleSk7CiAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmZW50cmllc1tpXS52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UK
LSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoJmVudHJpZXNbMF0ua2V5LCBzaXplICogKHNp
emVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5rZXksIG1fc2l6ZSAqIChzaXplb2YoRW50
cnkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKIAotICAgIHZpc2l0b3IuY29w
eUxhdGVyKHRoaXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmllcywgdGhp
c09iamVjdC0+Y2FwYWNpdHlJbkJ5dGVzKCkpOworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVy
LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsK
IH0KIAotdm9pZCBNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZp
c2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3ZvaWQgTWFwRGF0YTo6Y29weUJhY2tp
bmdTdG9yZShDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIE1h
cERhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TWFwRGF0YSo+KGNlbGwpOwotICAgIGlmICh0b2tl
biA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29w
eSh0aGlzT2JqZWN0LT5tX2VudHJpZXMpKSB7Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0g
dGhpc09iamVjdC0+bV9lbnRyaWVzOwotICAgICAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRp
Y19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmNhcGFj
aXR5SW5CeXRlcygpKSk7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5zaG91bGRQYWNrKCkpCi0g
ICAgICAgICAgICB0aGlzT2JqZWN0LT5yZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCB0aGlzT2JqZWN0LT5tX2NhcGFjaXR5KTsKKyAgICBpZiAodG9rZW4gPT0gTWFwQmFja2lu
Z1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRyaWVzKSkg
eworICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllczsKKyAgICAgICAgRW50cnkq
IG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFj
ZShjYXBhY2l0eUluQnl0ZXMoKSkpOworICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQorICAgICAg
ICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlcGxhY2VCYWNraW5nU3Rv
cmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAgICAgIHZpc2l0b3Iu
ZGlkQ29weShvbGRFbnRyaWVzLCB0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSk7CisgICAg
ICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIG1fY2FwYWNpdHkpOworICAg
ICAgICB2aXNpdG9yLmRpZENvcHkob2xkRW50cmllcywgY2FwYWNpdHlJbkJ5dGVzKCkpOwogICAg
IH0KLSAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLX0K
LQotdm9pZCBNYXBEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBzdGF0aWNfY2Fz
dDxNYXBEYXRhKj4oY2VsbCktPn5NYXBEYXRhKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcERhdGEuaAppbmRleCBiMWQ1MzA2Mjk2ZTUwNDZiZDQwNzNlZTk5OTE4ZWE2
ZmU0ZmIxOTQ1Li4xODU2YjU4MjBmMzJjY2ViNTBmYjI3N2ZmMDE4MTg4MjNlNzYwMTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCkBAIC0yNywxNyArMjcsMTYgQEAK
ICNkZWZpbmUgTWFwRGF0YV9oCiAKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxsIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVm
IEpTQ2VsbCBCYXNlOworY2xhc3MgRXhlY1N0YXRlOwogCitjbGFzcyBNYXBEYXRhIHsKK3B1Ymxp
YzoKICAgICBzdHJ1Y3QgY29uc3RfaXRlcmF0b3IgewogICAgICAgICBjb25zdF9pdGVyYXRvcihj
b25zdCBNYXBEYXRhKik7CiAgICAgICAgIH5jb25zdF9pdGVyYXRvcigpOwpAQCAtNzAsMzQgKzY5
LDIxIEBAIGNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgSlNWYWx1ZSB2
YWx1ZTsKICAgICB9OwogCi0gICAgc3RhdGljIE1hcERhdGEqIGNyZWF0ZShWTSYgdm0pCi0gICAg
ewotICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
TWFwRGF0YT4odm0uaGVhcCkpIE1hcERhdGEodm0pOwotICAgICAgICBtYXBEYXRhLT5maW5pc2hD
cmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBtYXBEYXRhOwotICAgIH0KLQotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9CisgICAgTWFwRGF0YSgpOwogCi0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOwotCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXQoQ2FsbEZyYW1lKiwgS2V5VHlwZSwgSlNWYWx1ZSk7Ci0gICAgSlNW
YWx1ZSBnZXQoQ2FsbEZyYW1lKiwgS2V5VHlwZSk7Ci0gICAgYm9vbCByZW1vdmUoQ2FsbEZyYW1l
KiwgS2V5VHlwZSk7Ci0gICAgYm9vbCBjb250YWlucyhDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAg
ICBzaXplX3Qgc2l6ZShDYWxsRnJhbWUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2RlbGV0
ZWRDb3VudDsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpT
Q2VsbCogb3duZXIsIEtleVR5cGUsIEpTVmFsdWUpOworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0
ZSosIEtleVR5cGUpOworICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEtleVR5cGUpOworICAg
IGJvb2wgY29udGFpbnMoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgc2l6ZV90IHNpemUoRXhl
Y1N0YXRlKikgY29uc3QgeyByZXR1cm4gbV9zaXplIC0gbV9kZWxldGVkQ291bnQ7IH0KIAogICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhp
cyk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVy
YXRvcjo6ZW5kKHRoaXMpOyB9CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJl
SXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgY29weUJhY2tpbmdTdG9y
ZShDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+IEluZGV4VHJhaXRzOwpAQCAt
MTE2LDE4ICsxMDIsMTIgQEAgY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAg
c2l6ZV90IGNhcGFjaXR5SW5CeXRlcygpIHsgcmV0dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoRW50
cnkpOyB9CiAKLSAgICBNYXBEYXRhKFZNJik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRv
ciYsIENvcHlUb2tlbik7Ci0KLQotICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQoQ2FsbEZy
YW1lKiwgS2V5VHlwZSk7Ci0gICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKENhbGxGcmFtZSos
IEtleVR5cGUpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4gQUxX
QVlTX0lOTElORSBFbnRyeSogYWRkKENhbGxGcmFtZSosIE1hcCYsIEtleSwgS2V5VHlwZSk7Cisg
ICAgQUxXQVlTX0lOTElORSBFbnRyeSogZmluZChFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAgICBB
TFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlw
ZSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PiBBTFdBWVNfSU5M
SU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgTWFwJiwgS2V5LCBLZXlU
eXBlKTsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRQYWNrKCkgY29uc3QgeyByZXR1
cm4gbV9kZWxldGVkQ291bnQgJiYgIW1faXRlcmF0b3JDb3VudDsgfQotICAgIENoZWNrZWRCb29s
ZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKENhbGxGcmFtZSopOworICAgIENoZWNrZWRCb29sZWFu
IGVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3duZXIpOwogCiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0
aW5hdGlvbiwgaW50MzJfdCBuZXdTaXplKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVwbGFj
ZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CkBAIC0x
ODMsNyArMTYzLDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
OjppbnRlcm5hbEluY3JlbWVudCgpCiAgICAgICAgIGluZGV4Kys7CiAgICAgbV9pbmRleCA9IGlu
ZGV4OwogfQotICAgIAorCiBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6Y29uc3RfaXRlcmF0
b3I6OmVuc3VyZVNsb3QoKQogewogICAgIC8vIFdoZW4gYW4gaXRlcmF0b3IgZXhpc3RzIG91dHNp
ZGUgb2YgaG9zdCBjb3N0IGl0IGlzIHBvc3NpYmxlIGZvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKaW5kZXggNTQ4MjIyNzY5NDAwYjcxODUyYWY3
ZGI4Yjc1ZWY1MDc1NDRlZGQ0Zi4uZmEwODE1MjZhZTcyYTJlNmM1NWQ3NjY5YmVkZjJlMjM4YzFm
NjFiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUu
Y3BwCkBAIC0xNjAsMTEgKzE2MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
cFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7Cisg
ICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwogICAg
IGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBkYXRhLT5zZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTTWFwKiBtYXAgPSBqc0Nhc3Q8SlNNYXAqPih0aGlzVmFs
dWUpOworICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIG1hcCwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aGlzVmFsdWUpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y1NpemUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcAppbmRleCBmODhlYTdjZjk4NjhmNjY4YjhjMmU4ODgxNWZm
NjVjZjM5OTI3YjQ5Li4zMjllNTQ3MWE5MTliODdkNzk5YmI2MDgxMmZiMjVmMTY3NmNkODk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKQEAg
LTkxLDExICs5MSwxMyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBNYXBEYXRhKiBnZXRNYXBEYXRh
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
LSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUo
KTsKKyAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7
CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCks
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNTZXQqIHNldCA9IGpzQ2FzdDxKU1NldCo+KHRo
aXNWYWx1ZSk7CisgICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgc2V0LCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRoaXNWYWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJv
dG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKaW5kZXggYTczMjRiNGFkZjFkZTg3N2I3NDYwNjhkYTU0MTNkYWJmNTNiNTU0Yy4u
ZThmYzBlMzIwYjVjYTNhZTEzM2JhOGY0NmFhNThlYzU5YzdlMWQyOCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjMzLDcgKzIzMyw2IEBAIHN0YXRpYyBib29sIGVuYWJs
ZUFzc2VtYmxlcihFeGVjdXRhYmxlQWxsb2NhdG9yJiBleGVjdXRhYmxlQWxsb2NhdG9yKQogICAg
IHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRXZhbENv
ZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJv
cGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBtYXBEYXRhU3RydWN0dXJlLnNldCgqdGhp
cywgTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHdl
YWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlz
ZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CmluZGV4IDk0YzQ4M2I3MjM2MDIyODNlZDQwZGE1NWRlZDI5NTUzYTAzMTc4MjUuLjdlNzFkZWY5
YzdhNTBmOTdmY2U2YTFiOTk3YjYwN2M2YWFmYjljNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaApAQCAtMjY4LDcgKzI2OCw2IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFZNPiB7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRFdmFsQ29kZUJs
b2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0cnVj
dHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBtYXBEYXRhU3RydWN0dXJlOwogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogI2lmIEVOQUJMRShQUk9NSVNFUykK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248406</attachid>
            <date>2015-03-10 23:23:15 -0700</date>
            <delta_ts>2015-03-11 02:11:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150311152249.patch</filename>
            <type>text/plain</type>
            <size>62408</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
M2Q4MjQ4YzYzNTAxYzU3MzJhMzY5MjFmNzhlM2NjNTYxYWFkYmQ5Li5kODk2MzczZjk3ZGJlYzNi
ODk0OWE0NWI5YmMzZmRmZDg4ZTc0NTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzQgQEAKKzIwMTUtMDMtMTAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggZml4ZXMgbWlzc2luZyBkZXN0
cm95IGZ1bmN0aW9ucworICAgICAgICBpbiBKU01hcEl0ZXJhdG9yIGFuZCBKU1NldEl0ZXJhdG9y
LgorICAgICAgICBUaGV5IGFyZSBuZWVkZWQgYmVjYXVzZSBNYXBEYXRhOjpjb25zdF9pdGVyYXRv
ciBpcyBhIG5vbi10cml2aWFsIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNN
YXA6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU01hcDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OkpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmg6Cisg
ICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVu
dHJ5Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNN
YXA6OkVudHJ5OjpzZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpKU01hcDo6bWFwRGF0YSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0
ZXJhdG9yOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9KU1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50
cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAo
SlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6
RW50cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6c2V0VmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6
Om1hcERhdGEpOgorICAgICAgICAoSlNDOjpKU1NldDo6SlNTZXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcERhdGE6Ok1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29udGFpbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjphZGQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXBEYXRhOjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpnZXQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZW1vdmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcERhdGE6OnJlcGxhY2VCYWNraW5nU3RvcmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcERhdGE6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFwRGF0YTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9NYXBEYXRhLmg6
CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpjb25zdF9pdGVyYXRvcjo6a2V5KToKKyAgICAg
ICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAgIChK
U0M6Ok1hcERhdGFJbXBsOjpzaXplKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+
OjpNYXBEYXRhSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OktleVR5cGU6OktleVR5cGUpOgor
ICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjppbnRlcm5h
bEluY3JlbWVudCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRl
cmF0b3I6OmVuc3VyZVNsb3QpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNv
bnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
PEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6
Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6PSk6CisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjprZXkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6dmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXBEYXRhOjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y2xlYXIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5j
cmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6
OmVuc3VyZVNsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVy
YXRvcjo6Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpj
b25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL01hcERhdGFJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OmZpbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnRh
aW5zKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjphZGQpOgorICAgICAgICAo
SlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnNldCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
PEVudHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZv
ckFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZSk6
CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRN
YXBEYXRhKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlND
OjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNGb3JFYWNo
KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJv
dG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2V0KToKKyAgICAgICAgKEpT
Qzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpnZXRNYXBEYXRhKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5j
QWRkKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjpz
ZXRQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNoKToK
KyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9G
dW5jU2l6ZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAzLTEwICBNYXJrIExhbSAgPG1h
cmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2Ugc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpIGluc3RlYWQgb2YgKHVuc2lnbmVkKS0xLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IGMxNGU2NThkMDg5NjhkMjg3ZGQ3ZDMzZWI5MjA1M2I5MmQxNjk3
M2EuLjkzYTYxZmQ3N2UyY2RhODU2NGQyZGY0NDE3OTVmNGMwZDFjNjhlNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTUwNSw3ICs1MDUsNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAgcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAogICAg
IHJ1bnRpbWUvTG9va3VwLmNwcAogICAgIHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCi0gICAg
cnVudGltZS9NYXBEYXRhLmNwcAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5j
cHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFw
UHJvdG90eXBlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXgg
Nzk0Mzc1ZmU1MTc4MTg4MDgwMzdjOTg3NzU1NWYzMzQ1ZGZjOGYxMy4uMDAxNTNjYWUxYWI1MjVk
OThlMjM0MWYxYTMxZGQ5NGI3NzliODUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCkBAIC03NzIsNyArNzcyLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcTGl0ZXJhbFBhcnNlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXExvb2t1cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXE1hcENvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcTWFwRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XE1hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlwZS5jcHAiIC8+CkBAIC0xNTcyLDYgKzE1NzEs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29rdXAuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwRGF0YS5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhSW5saW5lcy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJvdG90eXBlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlwZS5oIiAv
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IDVmNmExZjRiZGM5MTllNWZmZTBhZTljZWNlODg5OTFmYzFhNTAxN2YuLjdmNjcxNmMzOTc4
MWYxYWIyMWIyMDg4Njk5OWM1ODRkZmVkZWY3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTcyOSw5ICs3MjksNiBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBQcm90b3R5cGUuY3BwIj4KICAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcTWFwQ29uc3RydWN0b3IuY3BwIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgpAQCAtMzMxMCw2ICszMzA3LDkgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwRGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxNYXBEYXRhSW5saW5lcy5oIj4KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgor
ICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRQ
cm90b3R5cGUuaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5j
bHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTlhMTk2ZjY2MDk1ZmNkMTFh
MzBiZGY1MjdhMDhhNGNkOWRmZjJiNi4uNTY5ZWFkM2Q3MjI2YWFmZWQxNDUyY2MxYjYzMDQzMjc0
YjI2ZjM5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzAsOCArMTMzMCw4
IEBACiAJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MjQxNjQxOTI1NDAw
NjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0
MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5
bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4NTA3RDYxN0NCQzZG
RDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTc4NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwICov
OyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFG
NkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5M0Q0M0NDQTBC
QkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAvKiBT
cGlsbFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg4
NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcyNjI5
MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CiAJCUE3ODg1M0ZB
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAxNDQw
RTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMDM4LDggKzMwMzgsOCBAQAogCQlBNzdGMTgxRjE2
NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg1MDdE
NDE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYXBEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
OTNENDNDQ0EwQkJFMDZEODlDNTk3MDcgLyogTWFwRGF0YUlubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODg1M0Y4
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxl
ZEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdG
YWlsZWRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDgxLDggKzQ0ODEsOCBAQAogCQkJCUY2OTJB
ODY5MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKIAkJCQlBNzAwODczNzE3Q0JFODUz
MDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3MDA4NzM4MTdDQkU4NTMw
MEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oICovLAotCQkJCUE3ODUwN0Q0MTdDQkM2RkQwMDEx
RjZFNyAvKiBNYXBEYXRhLmNwcCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyog
TWFwRGF0YS5oICovLAorCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5s
aW5lcy5oICovLAogCQkJCUE3NERFRjhCMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvckNv
bnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzRERUY4QzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRl
cmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5MTQwMDUyMkMyMiAvKiBN
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCkBAIC02MTAzLDYgKzYxMDMsNyBAQAogCQkJCTBG
OTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEE2NDQxNTE5NDIwQTZDNjFBRDE4ODJFIC8qIE1hcERhdGFJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5MjE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRl
cmF0b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkxNDAw
NTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAw
ODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAg
LTcyNDgsNyArNzI0OSw2IEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRC
QTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4
NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzRERUY5MTE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFw
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThE
MzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAppbmRleCBjMDhhOTcwOGJlNDVhOTM0OTU1MjM0YjMw
NTc2NjBkNzgxNjc1MGY0Li5iNjhlOWFmMjIzOThmYTE0YzUwOTc5MmJlZTAxY2JhNDI3MjQ3ODMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCkBAIC0yNywyNiArMjcs
MjkgQEAKICNpbmNsdWRlICJKU01hcC5oIgogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6OnNf
aW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNN
YXApIH07CiAKK3ZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2Fz
dDxKU01hcCo+KGNlbGwpLT5+SlNNYXAoKTsKK30KKwogdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNNYXAqPihjZWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXBEYXRh
KTsKKyAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2Vs
bCwgdmlzaXRvcik7CiB9CiAKLXZvaWQgSlNNYXA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3Zv
aWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlz
aXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICBtX21hcERhdGEuc2V0KHZtLCB0aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAgICBC
YXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKyAgICBqc0Nhc3Q8
SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4p
OwogfQogCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCmluZGV4IDQzMTUy
NzRkZTNlOTg1N2M1YmJlMDgzNTEzNzU2OWE3NzE2NDZlMDUuLmFhNDBjZTVjMjczZTcxMmViYzA1
Y2EwM2Y5MTAxZmJlNWMyMjQ2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAu
aApAQCAtMjYsMTUgKzI2LDU4IEBACiAjaWZuZGVmIEpTTWFwX2gKICNkZWZpbmUgSlNNYXBfaAog
CisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hcERh
dGE7Ci0KLWNsYXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworY2xhc3MgSlNN
YXAgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3Qg
QmFzZTsKKworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFp
bnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJh
cnJpZXI8VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4gbV92YWx1ZTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBrZXkoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9rZXk7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7CisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmbV92YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtleShWTSYgdm0s
IGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBz
ZXRWYWx1ZShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fdmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fa2V5
LmNsZWFyKCk7CisgICAgICAgICAgICBtX3ZhbHVlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdHlwZWRlZiBNYXBEYXRhSW1wbDxFbnRyeT4gTWFwRGF0YTsKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKQEAgLTU1LDE5ICs5OCwyMCBAQCBjbGFzcyBKU01hcCA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBz
dHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiBtX21h
cERhdGEuZ2V0KCk7IH0KKyAgICBNYXBEYXRhKiBtYXBEYXRhKCkgeyByZXR1cm4gJm1fbWFwRGF0
YTsgfQogCiBwcml2YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fbWFwRGF0YSgpCiAg
ICAgewogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKLQorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lk
IGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCi0g
ICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1fbWFwRGF0YTsKKyAgICBNYXBEYXRhIG1fbWFwRGF0
YTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5jcHAKaW5kZXggYzE2N2FjYmNmM2EzYTliN2M0Y2U1Y2E3MjhhMzgxNWNiYjk2Y2JiZS4u
ZTlkN2Q0MmZiNGUzOGVkMzE3Y2Q2MmJmMDY0MmNjMTE1ZjFlNjNmMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKQEAgLTQwLDE1ICs0MCwx
OSBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNNYXAqIGl0
ZXJhdGVkT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX21h
cC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0RGF0
YS5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCkpOworfQorCit2b2lkIEpT
TWFwSXRlcmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU01hcEl0
ZXJhdG9yKj4oY2VsbCktPn5KU01hcEl0ZXJhdG9yKCk7CiB9CiAKIHZvaWQgSlNNYXBJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEpTTWFwSXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsg
ICAgICAgIAorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0YSk7CisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbWFwKTsKIH0KIAogSlNWYWx1ZSBKU01hcEl0ZXJh
dG9yOjpjcmVhdGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1
ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3Iu
aAppbmRleCA2M2RkNWU4YjExZjk2YTQ0NjFhZGQ1Y2VhM2M0NDdhZGM2MDA0MGNjLi41OGYxYWJm
YWEwNTFiZGVjNzgyMzdmNTk1Zjk1OGE2YWZhODlhOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCkBAIC04NywxMyArODcsMTMgQEAgY2xhc3Mg
SlNNYXBJdGVyYXRvciA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgewogICAg
IH0KIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTTWFwKik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSos
IEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAg
V3JpdGVCYXJyaWVyPE1hcERhdGE+IG1faXRlcmF0ZWRPYmplY3REYXRhOwotICAgIE1hcERhdGE6
OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CisgICAgSlNNYXA6Ok1hcERhdGE6OmNvbnN0X2l0
ZXJhdG9yIG1faXRlcmF0b3I7CiAgICAgTWFwSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKaW5kZXggM2MxZDEyNGJjNTYyZGI2
ZGMxYmEwMGM5NjNiYTU0OTNlNjAzNzM3Ny4uY2RmMWRkMTQwMDExNmFhZGE4Njg1MmJhYTE1ZjBk
YzdhNjMxMGU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcApAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkpTU2V0LmgiCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5l
cy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKIApAQCAtMzUsMTcgKzM1LDIxIEBACiAKIGNvbnN0IENsYXNzSW5mbyBKU1Nl
dDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1NldCkgfTsKIAordm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAg
anNDYXN0PEpTU2V0Kj4oY2VsbCktPn5KU1NldCgpOworfQorCiB2b2lkIEpTU2V0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21h
cERhdGEpOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX21hcERhdGEudmlzaXRDaGlsZHJl
bihjZWxsLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBKU1NldDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQordm9pZCBKU1NldDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9y
JiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwotICAgIG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNyZWF0ZSh2bSkpOwor
ICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworICAgIGpz
Q2FzdDxKU1NldCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0
b2tlbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCmluZGV4IGZj
MGFhMzBmYjk1N2NiODlmOTVlNTY3ZWYxNjBjZjgxNTAzZTI1MmUuLjljZWMyZWI3NzA4NDA3Y2Ey
ZDRkOWYyOWJlMzZjNTU4YWExOTc1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXQuaApAQCAtMjYsMTUgKzI2LDU1IEBACiAjaWZuZGVmIEpTU2V0X2gKICNkZWZpbmUgSlNTZXRf
aAogCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1h
cERhdGE7Ci0KLWNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworY2xhc3Mg
SlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAgIHR5cGVk
ZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgQmFzZTsKKworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8g
bWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZpZWxkcyBiZSBXcml0
ZUJhcnJpZXI8VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OworCisgICAgcHVibGljOgorICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3du
PiYgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9rZXk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIs
IEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVy
LCBrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpT
Q2VsbCosIEpTVmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9rZXkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0eXBlZGVmIE1hcERhdGFJ
bXBsPEVudHJ5PiBNYXBEYXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApAQCAtNTUs
MTkgKzk1LDIwIEBAIGNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAg
ICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAg
TWFwRGF0YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAgIE1hcERh
dGEqIG1hcERhdGEoKSB7IHJldHVybiAmbV9tYXBEYXRhOyB9CiAKIHByaXZhdGU6CiAgICAgSlNT
ZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCisgICAgICAgICwgbV9tYXBEYXRhKCkKICAgICB7CiAgICAgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIAorICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwotICAgIAotICAgIFdyaXRlQmFycmllcjxNYXBEYXRhPiBtX21h
cERhdGE7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5Vmlz
aXRvciYsIENvcHlUb2tlbik7CisKKyAgICBNYXBEYXRhIG1fbWFwRGF0YTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKaW5kZXgg
MmZjMjk4OTAxNzY4NzNlNDRiYjkzMTUyNGM1ZjAzZWRhMDRmMzc1ZS4uNWVjYWMxMmQ5YzRjYTIy
NzVlZGRhZDllNzg5Nzg1NDhjOTdlN2E0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKQEAgLTQwLDE1ICs0MCwxOSBAQCB2b2lkIEpTU2V0
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0KQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX3NldC5zZXQodm0sIHRoaXMs
IGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0RGF0YS5zZXQodm0sIHRoaXMs
IGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCkpOwogfQogCiB2b2lkIEpTU2V0SXRlcmF0b3I6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBK
U1NldEl0ZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7ICAgICAg
ICAKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyYXRlZE9iamVjdERhdGEpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NldCk7Cit9CisKK3ZvaWQgSlNTZXRJdGVyYXRvcjo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKS0+
fkpTU2V0SXRlcmF0b3IoKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWly
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAppbmRleCA5YzcwYzI2
ZTUwYTJiNWQ5NWU4ZGM4MWRmZDE5ZGFhZDQyNTA3YmQ3Li4zMDBlNmVhNjBiYjEwNTAxYWVkZTcy
NWUzODMzMTJlYjFiNDFmOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5oCkBAIC04NSwxMyArODUsMTMgQEAgY2xhc3MgSlNTZXRJdGVyYXRvciA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgewogICAgIH0KIAorICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
U2V0Kik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFs
dWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAogICAgIFdyaXRlQmFycmllcjxKU1NldD4gbV9zZXQ7Ci0gICAgV3JpdGVCYXJyaWVyPE1h
cERhdGE+IG1faXRlcmF0ZWRPYmplY3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
IG1faXRlcmF0b3I7CisgICAgSlNTZXQ6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0
b3I7CiAgICAgU2V0SXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCmluZGV4IGIwNTY5MWM4NTJhYjJmZDJiYjNlNTQ3YTRj
ZGMwOWRlMzZjYjE3ZmUuLjQxZDgxMTZkMjE1N2Y3MmJmMzQ5MzE1ZGU4ZThhM2E3NzA0MTU5ZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCkBAIC0yMywyNTIg
KzIzLDMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgotCi0jaW5jbHVkZSAiQ29waWVk
QWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uSGVscGVycy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8gTWFwRGF0YTo6c19pbmZvID0geyAiTWFw
RGF0YSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoTWFwRGF0YSkgfTsKLQotc3RhdGljIGNv
bnN0IGludDMyX3QgbWluaW11bU1hcFNpemUgPSA4OwotCi1NYXBEYXRhOjpNYXBEYXRhKFZNJiB2
bSkKLSAgICA6IEJhc2Uodm0sIHZtLm1hcERhdGFTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2Nh
cGFjaXR5KDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAg
LCBtX2l0ZXJhdG9yQ291bnQoMCkKLSAgICAsIG1fZW50cmllcygwKQotewotfQotCi1NYXBEYXRh
OjpFbnRyeSogTWFwRGF0YTo6ZmluZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkp
Ci17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGNhbGxG
cmFtZSkuaW1wbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVu
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0
ZXItPnZhbHVlXTsKLSAgICB9Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7Ci0gICAg
ICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1
ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtl
eWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZt
X2VudHJpZXNbaXRlci0+dmFsdWVdOwotICAgIH0KLSAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgp
KSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUu
YXNDZWxsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZh
bHVlXTsKLSAgICB9Ci0KLSAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpT
VmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKLSAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRU
YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICZtX2VudHJpZXNbaXRl
ci0+dmFsdWVdOwotfQotCi1ib29sIE1hcERhdGE6OmNvbnRhaW5zKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICByZXR1cm4gZmluZChjYWxsRnJhbWUsIGtleSk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4gTWFwRGF0YTo6RW50cnkq
IE1hcERhdGE6OmFkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgTWFwJiBtYXAsIEtleSBrZXksIEtl
eVR5cGUga2V5VmFsdWUpCi17Ci0gICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlvbiA9
IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKLSAgICAgICAg
cmV0dXJuICZtX2VudHJpZXNbbG9jYXRpb24tPnZhbHVlXTsKLSAgICAKLSAgICBpZiAoIWVuc3Vy
ZVNwYWNlRm9yQXBwZW5kKGNhbGxGcmFtZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0
byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9zaXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNOZXdFbnRyeSk7Ci0gICAgRW50cnkqIGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107
Ci0gICAgbmV3IChlbnRyeSkgRW50cnkoKTsKLSAgICBlbnRyeS0+a2V5LnNldChjYWxsRnJhbWUt
PnZtKCksIHRoaXMsIGtleVZhbHVlLnZhbHVlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXZv
aWQgTWFwRGF0YTo6c2V0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBFbnRyeSogbG9jYXRpb24gPSBhZGQoY2FsbEZyYW1lLCBrZXkpOwot
ICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICBsb2NhdGlvbi0+dmFsdWUu
c2V0KGNhbGxGcmFtZS0+dm0oKSwgdGhpcywgdmFsdWUpOwotfQotICAgIAotTWFwRGF0YTo6RW50
cnkqIE1hcERhdGE6OmFkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0g
ICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxGcmFt
ZSwgbV9zdHJpbmdLZXllZFRhYmxlLCBhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJh
bWUpLmltcGwoKSwga2V5KTsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAg
IHJldHVybiBhZGQoY2FsbEZyYW1lLCBtX3N5bWJvbEtleWVkVGFibGUsIGFzU3ltYm9sKGtleS52
YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCksIGtleSk7Ci0gICAgaWYgKGtleS52YWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fY2VsbEtleWVkVGFibGUsIGtl
eS52YWx1ZS5hc0NlbGwoKSwga2V5KTsKLSAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV92YWx1
ZUtleWVkVGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOwotfQotCi1KU1Zh
bHVlIE1hcERhdGE6OmdldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0g
ICAgaWYgKEVudHJ5KiBlbnRyeSA9IGZpbmQoY2FsbEZyYW1lLCBrZXkpKQotICAgICAgICByZXR1
cm4gZW50cnktPnZhbHVlLmdldCgpOwotICAgIHJldHVybiBKU1ZhbHVlKCk7Ci19Ci0KLWJvb2wg
TWFwRGF0YTo6cmVtb3ZlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAg
ICBpbnQzMl90IGxvY2F0aW9uOwotICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgewotICAg
ICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFs
dWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3Ry
aW5nS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
bG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92
ZShpdGVyKTsKLSAgICB9ICBlbHNlIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewotICAgICAg
ICBhdXRvIGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUp
LT5wcml2YXRlTmFtZSgpLnVpZCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXll
ZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlv
biA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3N5bWJvbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIp
OwotICAgIH0gZWxzZSBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRl
ciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBp
ZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX2NlbGxLZXll
ZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGl0ZXIgPSBt
X3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fdmFs
dWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9Ci0gICAgbV9lbnRyaWVzW2xvY2F0aW9u
XS5rZXkuY2xlYXIoKTsKLSAgICBtX2VudHJpZXNbbG9jYXRpb25dLnZhbHVlLmNsZWFyKCk7Ci0g
ICAgbV9kZWxldGVkQ291bnQrKzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRh
OjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3Qg
bmV3Q2FwYWNpdHkpCi17Ci0gICAgQVNTRVJUKHNob3VsZFBhY2soKSk7Ci0gICAgaW50MzJfdCBu
ZXdFbmQgPSAwOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7Ci0gICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKLSAgICAgICAgRW50cnkmIGVudHJ5
ID0gbV9lbnRyaWVzW2ldOwotICAgICAgICBpZiAoIWVudHJ5LmtleSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBBU1NFUlQobmV3RW5kIDwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBk
ZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7Ci0KLSAgICAgICAgLy8gV2Ugb3ZlcndyaXRlIHRo
ZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5kZXggZm9yIHRoZSBuZXcgZW50cnksCi0g
ICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBvdXIgaGFzaCB0YWJsZXMgYmVsb3cgd2l0
aG91dCBkb2luZyBhZGRpdGlvbmFsCi0gICAgICAgIC8vIGhhc2ggbG9va3VwcwotICAgICAgICBl
bnRyeS52YWx1ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKG5ld0VuZCkpOwotICAg
ICAgICBuZXdFbmQrKzsKLSAgICB9Ci0KLSAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCi0g
ICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3Zh
bHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJp
ZXNbcHRyLT52YWx1ZV0udmFsdWUuZ2V0KCkuYXNJbnQzMigpOwotICAgIGZvciAoYXV0byBwdHIg
PSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgp
OyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1
ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJs
ZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAg
ICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMy
KCk7Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIg
IT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9
IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0KLSAgICBBU1NF
UlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQpOwotICAgIG1fZGVsZXRlZENv
dW50ID0gMDsKLQotICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX3NpemUgPSBu
ZXdFbmQ7Ci0gICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Ci0KLX0KLQotdm9pZCBNYXBEYXRh
OjpyZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBh
Y2l0eSkKLXsKLSAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
bmV3Q2FwYWNpdHkgPiAwKTsKLSAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7
Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBtX3Np
emUpOwotICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0
aW5hdGlvbjsKLX0KLQotQ2hlY2tlZEJvb2xlYW4gTWFwRGF0YTo6ZW5zdXJlU3BhY2VGb3JBcHBl
bmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6
bWF4KG1fY2FwYWNpdHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgbWluaW11bU1hcFNpemUpOwot
ICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIERlZmVyR0MgZGVmZXIoKmNhbGxGcmFtZS0+
aGVhcCgpKTsKLSAgICBpZiAoIWNhbGxGcmFtZS0+aGVhcCgpLT50cnlBbGxvY2F0ZVN0b3JhZ2Uo
dGhpcywgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSwgJm5ld1N0b3JhZ2UpKSB7Ci0gICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihu
ZXdTdG9yYWdlKTsKLSAgICBpZiAoc2hvdWxkUGFjaygpKQotICAgICAgICByZXBsYWNlQW5kUGFj
a0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGVsc2UKLSAgICAg
ICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGNh
bGxGcmFtZS0+aGVhcCgpLT53cml0ZUJhcnJpZXIodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgTWFwRGF0YTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0g
ICAgTWFwRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxNYXBEYXRhKj4oY2VsbCk7Ci0gICAgRW50
cnkqIGVudHJpZXMgPSB0aGlzT2JqZWN0LT5tX2VudHJpZXM7Ci0gICAgaWYgKCFlbnRyaWVzKQot
ICAgICAgICByZXR1cm47Ci0gICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5tX3NpemU7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPm1fZGVsZXRlZENvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWVudHJpZXNbaV0ua2V5
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQo
JmVudHJpZXNbaV0ua2V5KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyaWVzW2ld
LnZhbHVlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcygmZW50cmllc1swXS5rZXksIHNpemUgKiAoc2l6ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0KLSAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0
LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIHRoaXNPYmplY3QtPmNhcGFjaXR5
SW5CeXRlcygpKTsKLX0KLQotdm9pZCBNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCog
Y2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBNYXBE
YXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1hcERhdGEqPihjZWxsKTsKLSAgICBpZiAodG9rZW4g
PT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHko
dGhpc09iamVjdC0+bV9lbnRyaWVzKSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IHRo
aXNPYmplY3QtPm1fZW50cmllczsKLSAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNf
Y2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5jYXBhY2l0
eUluQnl0ZXMoKSkpOwotICAgICAgICBpZiAodGhpc09iamVjdC0+c2hvdWxkUGFjaygpKQotICAg
ICAgICAgICAgdGhpc09iamVjdC0+cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmll
cywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRo
aXNPYmplY3QtPnJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9j
YXBhY2l0eSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCB0aGlzT2JqZWN0
LT5jYXBhY2l0eUluQnl0ZXMoKSk7Ci0gICAgfQotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUo
Y2VsbCwgdmlzaXRvciwgdG9rZW4pOwotfQotCi12b2lkIE1hcERhdGE6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PE1hcERhdGEqPihjZWxsKS0+fk1hcERhdGEoKTsK
LX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCmluZGV4IGIxZDUz
MDYyOTZlNTA0NmJkNDA3M2VlOTk5MThlYTZmZTRmYjE5NDUuLjM2NDlmNzgxZGYyNTgxMDNjN2Vk
Y2RjMjA5NGZlYjE4NDQ0MDQyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBE
YXRhLmgKQEAgLTI3LDI1ICsyNywyNyBAQAogI2RlZmluZSBNYXBEYXRhX2gKIAogI2luY2x1ZGUg
IkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVu
Y3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0Nl
bGwgeworY2xhc3MgRXhlY1N0YXRlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2NsYXNz
IE1hcERhdGFJbXBsIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0
YXRpYyBjb25zdCBpbnQzMl90IG1pbmltdW1NYXBTaXplID0gODsKIAogICAgIHN0cnVjdCBjb25z
dF9pdGVyYXRvciB7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAg
ICAgICAgY29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0
X2l0ZXJhdG9yKCk7CiAgICAgICAgIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpT
VmFsdWU+IG9wZXJhdG9yKigpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsg
UkVMRUFTRV9BU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9p
bmRleF0ua2V5LmdldCgpOyB9Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVB
U0VfQVNTRVJUKCFhdEVuZCgpKTsgcmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhd
LnZhbHVlLmdldCgpOyB9CisgICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FT
U0VSVCghYXRFbmQoKSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXko
KS5nZXQoKTsgfQorICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VS
VCghYXRFbmQoKSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgp
LmdldCgpOyB9CiAgICAgICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsg
aW50ZXJuYWxJbmNyZW1lbnQoKTsgfQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5k
KGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25z
dCBNYXBEYXRhSW1wbCopOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRl
cmF0b3ImIG90aGVyKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJh
dG9yJiBvdGhlcik7CiAgICAgICAgIHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCk7IH0KQEAgLTYwLDcgKzYyLDcgQEAgY2xhc3MgTWFw
RGF0YSA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0
RW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVy
bmFsSW5jcmVtZW50KCk7Ci0gICAgICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAg
ICAgY29uc3QgTWFwRGF0YUltcGwqIG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4
OwogICAgIH07CiAKQEAgLTcwLDQ1ICs3MiwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBE
YXRhKiBjcmVhdGUoVk0mIHZtKQotICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsK
LSAgICAgICAgbWFwRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFw
RGF0YTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0g
ICAgfQorICAgIE1hcERhdGFJbXBsKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVj
dHVyZSA9IHRydWU7Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUq
LCBLZXlUeXBlLCBKU1ZhbHVlKTsKLSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBl
KTsKLSAgICBib29sIHJlbW92ZShDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRh
aW5zKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZSAtIG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1
ZSk7CisgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1v
dmUoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBL
ZXlUeXBlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3Np
emUgLSBtX2RlbGV0ZWRDb3VudDsgfQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZv
aWQgY2xlYXIoKTsKIAotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9y
Jik7CisgICAgdm9pZCBjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsK
IAogcHJpdmF0ZToKICAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8aW50MzJfdD4gSW5kZXhUcmFpdHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMg
ZXhwZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAv
LyBmaWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IHZhbHVlOwotICAgIH07Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50
MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNo
VHJhaXRzPEpTQ2VsbCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYg
SGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNv
ZGVkSlNWYWx1ZUhhc2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0
SGFzaDxTdHJpbmdJbXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIElu
ZGV4VHJhaXRzPiBTdHJpbmdLZXllZE1hcDsKQEAgLTExNiwxOCArOTgsMTIgQEAgY2xhc3MgTWFw
RGF0YSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcygpIHsg
cmV0dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoRW50cnkpOyB9CiAKLSAgICBNYXBEYXRhKFZNJik7
Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJh
Y2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7Ci0KLQotICAgIEFM
V0FZU19JTkxJTkUgRW50cnkqIGZpbmQoQ2FsbEZyYW1lKiwgS2V5VHlwZSk7Ci0gICAgQUxXQVlT
X0lOTElORSBFbnRyeSogYWRkKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKENhbGxG
cmFtZSosIE1hcCYsIEtleSwgS2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogZmlu
ZChFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAgICBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhl
Y1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IE1hcCwgdHlwZW5hbWUgS2V5PiBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwg
SlNDZWxsKiBvd25lciwgTWFwJiwgS2V5LCBLZXlUeXBlKTsKIAogICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBzaG91bGRQYWNrKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkQ291bnQgJiYgIW1faXRl
cmF0b3JDb3VudDsgfQotICAgIENoZWNrZWRCb29sZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKENh
bGxGcmFtZSopOworICAgIENoZWNrZWRCb29sZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNT
dGF0ZSosIEpTQ2VsbCogb3duZXIpOwogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlcGxhY2VB
bmRQYWNrQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdTaXplKTsK
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVwbGFjZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGlu
YXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CkBAIC0xNDMsNyArMTE5LDE4IEBAIGNsYXNzIE1hcERh
dGEgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBFbnRyeSogbV9lbnRyaWVzOwogfTsKIAotQUxXQVlT
X0lOTElORSB2b2lkIE1hcERhdGE6OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
QUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46Ok1hcERhdGFJbXBsKCkKKyAgICA6IG1f
Y2FwYWNpdHkoMCkKKyAgICAsIG1fc2l6ZSgwKQorICAgICwgbV9kZWxldGVkQ291bnQoMCkKKyAg
ICAsIG1faXRlcmF0b3JDb3VudCgwKQorICAgICwgbV9lbnRyaWVzKG51bGxwdHIpCit7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5Pjo6Y2xlYXIoKQogewogICAgIG1fY2VsbEtleWVkVGFibGUuY2xlYXIoKTsKICAgICBt
X3ZhbHVlS2V5ZWRUYWJsZS5jbGVhcigpOwpAQCAtMTU1LDcgKzE0Miw4IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBNYXBEYXRhOjpjbGVhcigpCiAgICAgbV9lbnRyaWVzID0gbnVsbHB0cjsKIH0KIAot
QUxXQVlTX0lOTElORSBNYXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKEpTVmFsdWUgdikKK3RlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46Oktl
eVR5cGU6OktleVR5cGUoSlNWYWx1ZSB2KQogewogICAgIGlmICghdi5pc0RvdWJsZSgpKSB7CiAg
ICAgICAgIHZhbHVlID0gdjsKQEAgLTE3NCw1NSArMTYyLDYyIEBAIEFMV0FZU19JTkxJTkUgTWFw
RGF0YTo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCiAgICAgICAgIHZhbHVlID0ganNOdW1i
ZXIoaSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6
aW50ZXJuYWxJbmNyZW1lbnQoKQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5M
SU5FIHZvaWQgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNy
ZW1lbnQoKQogewogICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2VudHJpZXM7CiAg
ICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleCArIDE7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFwRGF0
YS0+bV9zaXplOwotICAgIHdoaWxlIChpbmRleCA8IGVuZCAmJiAhZW50cmllc1tpbmRleF0ua2V5
KQorICAgIHdoaWxlIChpbmRleCA8IGVuZCAmJiAhZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAg
ICAgIGluZGV4Kys7CiAgICAgbV9pbmRleCA9IGluZGV4OwogfQotICAgIAotQUxXQVlTX0lOTElO
RSBib29sIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbnN1cmVTbG90KCkKKwordGVtcGxhdGU8
dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+Ojpj
b25zdF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCgpCiB7CiAgICAgLy8gV2hlbiBhbiBpdGVyYXRvciBl
eGlzdHMgb3V0c2lkZSBvZiBob3N0IGNvc3QgaXQgaXMgcG9zc2libGUgZm9yCiAgICAgLy8gdGhl
IGNvbnRhaW5pbmcgbWFwIHRvIGJlIG1vZGlmaWVkCiAgICAgRW50cnkqIGVudHJpZXMgPSBtX21h
cERhdGEtPm1fZW50cmllczsKICAgICBzaXplX3QgaW5kZXggPSBtX2luZGV4OwogICAgIHNpemVf
dCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsKLSAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmll
c1tpbmRleF0ua2V5KQorICAgIGlmIChpbmRleCA8IGVuZCAmJiBlbnRyaWVzW2luZGV4XS5rZXko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaW50ZXJuYWxJbmNyZW1lbnQoKTsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA8IGVuZDsKIH0KIAotQUxXQVlTX0lO
TElORSBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0
YSogbWFwRGF0YSkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBE
YXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcihjb25zdCBNYXBE
YXRhSW1wbDxFbnRyeT4qIG1hcERhdGEpCiAgICAgOiBtX21hcERhdGEobWFwRGF0YSkKICAgICAs
IG1faW5kZXgoLTEpCiB7CiAgICAgaW50ZXJuYWxJbmNyZW1lbnQoKTsKIH0KIAotQUxXQVlTX0lO
TElORSBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKCkKK3RlbXBsYXRl
PHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0
X2l0ZXJhdG9yOjp+Y29uc3RfaXRlcmF0b3IoKQogewogICAgIG1fbWFwRGF0YS0+bV9pdGVyYXRv
ckNvdW50LS07CiB9CiAKLUFMV0FZU19JTkxJTkUgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8SlNW
YWx1ZSwgSlNWYWx1ZT4gTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgY29uc3QgV1RGOjpLZXlW
YWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVy
YXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKIHsKICAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRh
LT5tX2VudHJpZXNbbV9pbmRleF07Ci0gICAgcmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFs
dWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkuZ2V0KCksIGVudHJ5LT52YWx1ZS5nZXQoKSk7CisgICAg
cmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5n
ZXQoKSwgZW50cnktPnZhbHVlKCkuZ2V0KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcERhdGE6
OmNvbnN0X2l0ZXJhdG9yIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0
YSogbWFwRGF0YSkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBhdXRv
IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmVuZChjb25zdCBNYXBEYXRhSW1w
bDxFbnRyeT4qIG1hcERhdGEpIC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgY29uc3RfaXRlcmF0
b3IgcmVzdWx0KG1hcERhdGEpOwogICAgIHJlc3VsdC5tX2luZGV4ID0gLTE7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
OjpvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVu
YW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3Rf
aXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKQogewogICAg
IEFTU0VSVChvdGhlci5tX21hcERhdGEgPT0gbV9tYXBEYXRhKTsKICAgICBpZiAoYXRFbmQoKSAm
JiBvdGhlci5hdEVuZCgpKQpAQCAtMjMwLDcgKzIyNSw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoCiAgICAgcmV0dXJuIG1faW5kZXggIT0gb3RoZXIubV9pbmRleDsKIH0KIAotQUxXQVlTX0lO
TElORSBib29sIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElO
RSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0oY29u
c3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKQogewogICAgIHJldHVybiAhKCp0aGlzICE9IG90aGVy
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVkNDc2MDEyMzBiZTI0MDEzMmU4NjFmOTM4NGRkZThiZWEwOThlODEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5s
aW5lcy5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ29w
aWVkQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorCisj
aW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKworCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRW50cnk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5Pjo6ZmluZChFeGVjU3Rh
dGUqIGV4ZWMsIEtleVR5cGUga2V5KQoreworICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkg
eworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhr
ZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N0
cmluZ0tleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVlLmlz
U3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQo
YXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChp
dGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgfQorICAgIGlmIChr
ZXkudmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJs
ZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtl
eWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZt
X2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKworICAgIGF1dG8gaXRlciA9IG1fdmFsdWVL
ZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOworICAgIGlmIChpdGVy
ID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgoraW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+Ojpjb250YWlucyhFeGVjU3RhdGUqIGV4
ZWMsIEtleVR5cGUga2V5KQoreworICAgIHJldHVybiBmaW5kKGV4ZWMsIGtleSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEVudHJ5PgordGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUg
S2V5PgoraW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmFkZChFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3duZXIsIE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtleVZhbHVlKQor
eworICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOwor
ICAgIGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAmbV9lbnRyaWVz
W2xvY2F0aW9uLT52YWx1ZV07CisKKyAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGV4ZWMs
IG93bmVyKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQo
a2V5LCBtX3NpemUpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzW21fc2l6ZSsrXTsKKyAgICBuZXcgKGVudHJ5KSBF
bnRyeSgpOworICAgIGVudHJ5LT5zZXRLZXkoZXhlYy0+dm0oKSwgb3duZXIsIGtleVZhbHVlLnZh
bHVlKTsKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
aW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnk+OjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIG93bmVyLCBLZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBFbnRyeSogbG9j
YXRpb24gPSBhZGQoZXhlYywgb3duZXIsIGtleSk7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIGxvY2F0aW9uLT5zZXRWYWx1ZShleGVjLT52bSgpLCBvd25lciwgdmFs
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBFbnRyeSogTWFwRGF0
YUltcGw8RW50cnk+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBl
IGtleSkKK3sKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBh
ZGQoZXhlYywgb3duZXIsIG1fc3RyaW5nS2V5ZWRUYWJsZSwgYXNTdHJpbmcoa2V5LnZhbHVlKS0+
dmFsdWUoZXhlYykuaW1wbCgpLCBrZXkpOworICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkK
KyAgICAgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwgbV9zeW1ib2xLZXllZFRhYmxlLCBhc1N5
bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpLCBrZXkpOworICAgIGlmIChrZXku
dmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fY2VsbEtl
eWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwga2V5KTsKKyAgICByZXR1cm4gYWRkKGV4ZWMs
IG93bmVyLCBtX3ZhbHVlS2V5ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSksIGtl
eSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIEpTVmFsdWUgTWFwRGF0
YUltcGw8RW50cnk+OjpnZXQoRXhlY1N0YXRlKiBleGVjLCBLZXlUeXBlIGtleSkKK3sKKyAgICBp
ZiAoRW50cnkqIGVudHJ5ID0gZmluZChleGVjLCBrZXkpKQorICAgICAgICByZXR1cm4gZW50cnkt
PnZhbHVlKCkuZ2V0KCk7CisgICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRW50cnk+CitpbmxpbmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OnJlbW92ZShFeGVj
U3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQoreworICAgIGludDMyX3QgbG9jYXRpb247CisgICAg
aWYgKGtleS52YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5n
S2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSk7
CisgICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAg
ICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9ICBlbHNlIGlmIChrZXku
dmFsdWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFi
bGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpKTsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOworICAgICAgICBtX3N5
bWJvbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOworICAgIH0gZWxzZSBpZiAoa2V5LnZhbHVlLmlz
Q2VsbCgpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXku
dmFsdWUuYXNDZWxsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXIt
PnZhbHVlOworICAgICAgICBtX2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6
OmVuY29kZShrZXkudmFsdWUpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFi
bGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0g
aXRlci0+dmFsdWU7CisgICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAg
ICB9CisgICAgbV9lbnRyaWVzW2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZGVsZXRlZENvdW50
Kys7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5s
aW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShF
bnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKHNo
b3VsZFBhY2soKSk7CisgICAgaW50MzJfdCBuZXdFbmQgPSAwOworICAgIFJFTEVBU0VfQVNTRVJU
KG5ld0NhcGFjaXR5ID4gMCk7CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBp
KyspIHsKKyAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOworICAgICAgICBpZiAo
IWVudHJ5LmtleSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVChuZXdF
bmQgPCBuZXdDYXBhY2l0eSk7CisgICAgICAgIGRlc3RpbmF0aW9uW25ld0VuZF0gPSBlbnRyeTsK
KworICAgICAgICAvLyBXZSBvdmVyd3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRoIGEgZm9yd2FyZGlu
ZyBpbmRleCBmb3IgdGhlIG5ldyBlbnRyeSwKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZml4
IHVwIG91ciBoYXNoIHRhYmxlcyBiZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0aW9uYWwKKyAgICAg
ICAgLy8gaGFzaCBsb29rdXBzCisgICAgICAgIGVudHJ5LmtleSgpLnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoanNOdW1iZXIobmV3RW5kKSk7CisgICAgICAgIG5ld0VuZCsrOworICAgIH0KKworICAg
IC8vIEZpeHVwIGZvciB0aGUgaGFzaG1hcHMKKyAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtl
eWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikK
KyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5h
c0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsg
cHRyICE9IG1fY2VsbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBwdHItPnZhbHVl
ID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICBmb3Ig
KGF1dG8gcHRyID0gbV9zdHJpbmdLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tl
eWVkVGFibGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0
ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICBmb3IgKGF1dG8gcHRyID0gbV9z
eW1ib2xLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCk7
ICsrcHRyKQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgp
LmdldCgpLmFzSW50MzIoKTsKKworICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2Rl
bGV0ZWRDb3VudCk7CisgICAgbV9kZWxldGVkQ291bnQgPSAwOworCisgICAgbV9jYXBhY2l0eSA9
IG5ld0NhcGFjaXR5OworICAgIG1fc2l6ZSA9IG5ld0VuZDsKKyAgICBtX2VudHJpZXMgPSBkZXN0
aW5hdGlvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBE
YXRhSW1wbDxFbnRyeT46OnJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBp
bnQzMl90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOworICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+
PSBtX2NhcGFjaXR5KTsKKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9m
KEVudHJ5KSAqIG1fc2l6ZSk7CisgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgIG1f
ZW50cmllcyA9IGRlc3RpbmF0aW9uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lu
bGluZSBDaGVja2VkQm9vbGVhbiBNYXBEYXRhSW1wbDxFbnRyeT46OmVuc3VyZVNwYWNlRm9yQXBw
ZW5kKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lcikKK3sKKyAgICBpZiAobV9jYXBhY2l0
eSA+IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzaXplX3QgcmVxdWlyZWRT
aXplID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBtaW5pbXVt
TWFwU2l6ZSk7CisgICAgdm9pZCogbmV3U3RvcmFnZSA9IG51bGxwdHI7CisgICAgRGVmZXJHQyBk
ZWZlcigqZXhlYy0+aGVhcCgpKTsKKyAgICBpZiAoIWV4ZWMtPmhlYXAoKS0+dHJ5QWxsb2NhdGVT
dG9yYWdlKG93bmVyLCByZXF1aXJlZFNpemUgKiBzaXplb2YoRW50cnkpLCAmbmV3U3RvcmFnZSkp
IHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkq
PihuZXdTdG9yYWdlKTsKKyAgICBpZiAoc2hvdWxkUGFjaygpKQorICAgICAgICByZXBsYWNlQW5k
UGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOworICAgIGVsc2UKKyAg
ICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOworICAg
IGV4ZWMtPmhlYXAoKS0+d3JpdGVCYXJyaWVyKG93bmVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRy
eT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBvd25lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgRW50cnkqIGVudHJpZXMgPSBtX2VudHJpZXM7CisgICAgaWYgKCFlbnRyaWVzKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1fZGVsZXRlZENvdW50KSB7CisgICAgICAgIGZvciAoaW50
MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWVudHJpZXNb
aV0ua2V5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbnRyaWVz
W2ldLnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoJmVudHJpZXNbMF0ua2V5KCksIG1fc2l6ZSAqIChzaXpl
b2YoRW50cnkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIHZpc2l0
b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIGNh
cGFjaXR5SW5CeXRlcygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUg
dm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvcHlCYWNraW5nU3RvcmUoQ29weVZpc2l0b3ImIHZp
c2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0
b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRyaWVzKSkgewor
ICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllczsKKyAgICAgICAgRW50cnkqIG5l
d0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShj
YXBhY2l0eUluQnl0ZXMoKSkpOworICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQorICAgICAgICAg
ICAgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywg
bV9jYXBhY2l0eSk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCBjYXBhY2l0
eUluQnl0ZXMoKSk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmNwcAppbmRleCA1NDgyMjI3Njk0MDBiNzE4NTJhZjdkYjhiNzVl
ZjUwNzU0NGVkZDRmLi4zNGIwZTk4ODQ5N2RlNTU4OGNlMWM1MDE2ZjA1ZjA1YTY2MGYwOTc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKQEAg
LTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgotI2luY2x1ZGUgIk1hcERhdGEu
aCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgTWFwUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c2l6
ZSwgYWNjZXNzb3IsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0
YXRpYyBNYXBEYXRhKiBnZXRNYXBEYXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRo
aXNWYWx1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwOjpNYXBEYXRhKiBnZXRNYXBEYXRh
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRo
aXNWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNy
ZWF0ZU5vdEFuT2JqZWN0RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKQEAgLTkyLDcgKzky
LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBE
YXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIEpTTWFwOjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhLT5jbGVhcigpOwpAQCAtMTAxLDcg
KzEwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFw
UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRh
dGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAg
SlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGRhdGEtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0x
MDksNyArMTA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNE
ZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBE
YXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIEpTTWFwOjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0KENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBE
YXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gZGF0YS0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7
CkBAIC0xNTIsNyArMTUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90
b0Z1bmNHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERh
dGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGRhdGEtPmNvbnRhaW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkp
KTsKQEAgLTE2MCwxNiArMTYwLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFw
UHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBN
YXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKyAg
ICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCB0aGlzVmFsdWUp
OwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBkYXRhLT5zZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTTWFwKiBtYXAgPSBqc0Nhc3Q8SlNNYXAqPih0
aGlzVmFsdWUpOworICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIG1hcCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aGlzVmFsdWUpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFBy
b3RvRnVuY1NpemUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9
IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU01h
cDo6TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkYXRh
LT5zaXplKGNhbGxGcmFtZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NldFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
ZXRQcm90b3R5cGUuY3BwCmluZGV4IGY4OGVhN2NmOTg2OGY2NjhiOGMyZTg4ODE1ZmY2NWNmMzk5
MjdiNDkuLjgxNjQyMDQ1YjM4YTZiYzFhMGQ0OWI5ZmY3NDJmZmFiYzQ2YTM5ZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcApAQCAtMzQsNyAr
MzQsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQu
aCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2lu
Y2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBw
dXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBhY2Nl
c3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIE1h
cERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVl
KQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTZXQ6Ok1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIGlmICghdGhpc1ZhbHVl
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlTm90
QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwpAQCAtOTEsMTYgKzkxLDE4IEBA
IEFMV0FZU19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c2V0UHJvdG9GdW5jQWRkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRh
dGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOworICAgIEpTU2V0OjpN
YXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CiAgICAgaWYg
KCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgSlNTZXQqIHNldCA9IGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7
CisgICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgc2V0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNW
YWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xl
YXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERh
dGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldDo6TWFwRGF0
YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
ICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgZGF0YS0+Y2xlYXIoKTsKQEAgLTEwOSw3ICsxMTEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0RlbGV0ZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTU2V0OjpNYXBEYXRhKiBkYXRh
ID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlm
ICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5yZW1vdmUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwpAQCAtMTE3LDcgKzExOSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0ZvckVh
Y2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERh
dGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldDo6TWFwRGF0
YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
ICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgSlNWYWx1ZSBjYWxsQmFjayA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CkBA
IC0xNDcsNyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1
bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBE
YXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIEpTU2V0OjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihkYXRhLT5jb250YWlucyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkp
KSk7CkBAIC0xNTUsNyArMTU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQ
cm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc2V0UHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBN
YXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIEpTU2V0OjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGRhdGEtPnNpemUoY2FsbEZyYW1lKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IGE3MzI0YjRhZGYxZGU4NzdiNzQ2MDY4ZGE1NDEzZGFiZjUzYjU1NGMu
LmU4ZmMwZTMyMGI1Y2EzYWUxMzNiYThmNDZhYTU4ZWM1OWM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIzMyw3ICsyMzMsNiBAQCBzdGF0aWMgYm9vbCBlbmFi
bGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRvciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKICAg
ICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxD
b2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHBy
b3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgbWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRo
aXMsIE1hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3
ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21p
c2VEZWZlcnJlZFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAppbmRleCA5NGM0ODNiNzIzNjAyMjgzZWQ0MGRhNTVkZWQyOTU1M2EwMzE3ODI1Li43ZTcxZGVm
OWM3YTUwZjk3ZmNlNmExYjk5N2I2MDdjNmFhZmI5YzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKQEAgLTI2OCw3ICsyNjgsNiBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxWTT4gewogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVC
bG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmU7Ci0gICAgU3Ryb25nPFN0cnVjdHVyZT4gbWFwRGF0YVN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiB3ZWFrTWFwRGF0YVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJPTUlTRVMp
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248407</attachid>
            <date>2015-03-11 02:11:30 -0700</date>
            <delta_ts>2015-03-11 09:22:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150311181104.patch</filename>
            <type>text/plain</type>
            <size>83350</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
M2Q4MjQ4YzYzNTAxYzU3MzJhMzY5MjFmNzhlM2NjNTYxYWFkYmQ5Li5hOTBmNjZmYTJjMGU5MmUy
NTk5ODE0OGU2ODc5ODVhODE3ZTQ4YWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNTQgQEAKKzIwMTUtMDMtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggZml4ZXMgbWlzc2luZyBkZXN0
cm95IGZ1bmN0aW9ucworICAgICAgICBpbiBKU01hcEl0ZXJhdG9yIGFuZCBKU1NldEl0ZXJhdG9y
LgorICAgICAgICBUaGV5IGFyZSBuZWVkZWQgYmVjYXVzZSBNYXBEYXRhOjpjb25zdF9pdGVyYXRv
ciBpcyBhIG5vbi10cml2aWFsIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNN
YXA6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU01hcDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OkpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmg6Cisg
ICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVu
dHJ5Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNN
YXA6OkVudHJ5OjpzZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpKU01hcDo6bWFwRGF0YSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0
ZXJhdG9yOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9KU1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50
cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAo
SlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6
RW50cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6c2V0VmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6
Om1hcERhdGEpOgorICAgICAgICAoSlNDOjpKU1NldDo6SlNTZXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6Ok1hcERhdGE6Ok1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29udGFpbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjphZGQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXBEYXRhOjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpnZXQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZW1vdmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcERhdGE6OnJlcGxhY2VCYWNraW5nU3RvcmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcERhdGE6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFwRGF0YTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9NYXBEYXRhLmg6
CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpjb25zdF9pdGVyYXRvcjo6a2V5KToKKyAgICAg
ICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAgIChK
U0M6Ok1hcERhdGFJbXBsOjpzaXplKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+
OjpNYXBEYXRhSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OktleVR5cGU6OktleVR5cGUpOgor
ICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjppbnRlcm5h
bEluY3JlbWVudCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRl
cmF0b3I6OmVuc3VyZVNsb3QpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNv
bnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
PEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6
Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6PSk6CisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjprZXkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6dmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXBEYXRhOjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y2xlYXIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5j
cmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6
OmVuc3VyZVNsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVy
YXRvcjo6Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpj
b25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL01hcERhdGFJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OmZpbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnRh
aW5zKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjphZGQpOgorICAgICAgICAo
SlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnNldCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
PEVudHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZv
ckFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZSk6
CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRN
YXBEYXRhKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlND
OjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNGb3JFYWNo
KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJv
dG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2V0KToKKyAgICAgICAgKEpT
Qzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpnZXRNYXBEYXRhKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5j
QWRkKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjpz
ZXRQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNoKToK
KyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9G
dW5jU2l6ZSk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcnVudGltZS9KU01hcC5jcHA6CisgICAgICAgIChKU0M6OkpTTWFw
OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpKU01hcDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpm
aW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU01hcC5oOgorICAg
ICAgICAoSlNDOjpKU01hcDo6RW50cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRy
eTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTTWFw
OjpFbnRyeTo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OmNsZWFyKToK
KyAgICAgICAgKEpTQzo6SlNNYXA6Om1hcERhdGEpOgorICAgICAgICAoSlNDOjpKU01hcDo6SlNN
YXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVy
YXRvcjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTZXQuY3BwOgorICAgICAgICAoSlNDOjpKU1NldDo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OkpTU2V0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNvcHlCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoSlNDOjpKU1NldDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5
OjprZXkpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZhbHVlKToKKyAgICAgICAgKEpT
Qzo6SlNTZXQ6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVu
dHJ5OjpzZXRLZXkpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpjbGVhcik6CisgICAgICAgIChKU0M6OkpTU2V0Ojpz
ZXREYXRhKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNT
ZXQ6Om1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
U2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5o
OgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAg
KiBydW50aW1lL01hcERhdGEuY3BwOgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpNYXBEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6ZmluZCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcERhdGE6OmNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0
YTo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6c2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFw
RGF0YTo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6cmVwbGFjZUFu
ZFBhY2tCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZXBs
YWNlQmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6ZW5zdXJl
U3BhY2VGb3JBcHBlbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjp2aXNpdENo
aWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29weUJhY2tpbmdTdG9y
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmRlc3Ryb3kpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YS5oOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDo6
Y29uc3RfaXRlcmF0b3I6OmtleSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpjb25zdF9p
dGVyYXRvcjo6dmFsdWUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDo6c2l6ZSk6CisgICAg
ICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6TWFwRGF0YUltcGwpOgorICAgICAgICAoSlND
OjpNYXBEYXRhSW1wbDxFbnRyeT46OmNsZWFyKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8
RW50cnk+OjpLZXlUeXBlOjpLZXlUeXBlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50
cnk+Ojpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1lbnQpOgorICAgICAgICAoSlNDOjpN
YXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjplbnN1cmVTbG90KToKKyAgICAgICAg
KEpTQzo6TWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3Ip
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjp+Y29u
c3RfaXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0
ZXJhdG9yOjpvcGVyYXRvcik6CisgICAgICAgIChKU0M6Oj0pOgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6a2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0
YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y3JlYXRlU3RydWN0
dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6c2l6ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Ok1hcERhdGE6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFw
RGF0YTo6S2V5VHlwZTo6S2V5VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6
OmNvbnN0X2l0ZXJhdG9yOjppbnRlcm5hbEluY3JlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbnN1cmVTbG90KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVy
YXRvciopOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6
ZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRv
cjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9NYXBEYXRhSW5saW5l
cy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNw
cC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpmaW5kKToKKyAgICAgICAgKEpT
Qzo6TWFwRGF0YUltcGw8RW50cnk+Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6YWRkKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpzZXQp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmdldCk6CisgICAgICAgIChKU0M6
Ok1hcERhdGFJbXBsPEVudHJ5Pjo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8
RW50cnk+OjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6Ok1hcERh
dGFJbXBsPEVudHJ5Pjo6cmVwbGFjZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6Ok1hcERh
dGFJbXBsPEVudHJ5Pjo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQpOgorICAgICAgICAoSlNDOjpNYXBE
YXRhSW1wbDxFbnRyeT46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0TWFwRGF0YSk6CisgICAgICAgIChKU0M6Om1hcFBy
b3RvRnVuY0NsZWFyKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jRGVsZXRlKToKKyAgICAg
ICAgKEpTQzo6bWFwUHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVu
Y0dldCk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0hhcyk6CisgICAgICAgIChKU0M6Om1h
cFByb3RvRnVuY1NldCk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY1NpemUpOgorICAgICAg
ICAqIHJ1bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0U2V0RGF0YSk6
CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0FkZCk6CisgICAgICAgIChKU0M6OnNldFByb3Rv
RnVuY0NsZWFyKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jRGVsZXRlKToKKyAgICAgICAg
KEpTQzo6c2V0UHJvdG9GdW5jRm9yRWFjaCk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0hh
cyk6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY1NpemUpOgorICAgICAgICAoSlNDOjpnZXRN
YXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTUtMDMtMTAgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgaW5zdGVhZCBvZiAodW5zaWduZWQpLTEuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMWUwZGZjM2VlMGM3MGI2ZGZiYWQwYzBkYzc0MDg4NTMyZDk3ZDlhNS4uMDJmMzdjMzZhMWY0
MDY4NWIzZjBjNzc1MDA2ODE5OGM1OTNhZWZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDE1LTAzLTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisg
ICAgICAgIEludGVncmF0ZSBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMh
KS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMu
aDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJt
aW5hdGlvbklmUG9zc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OmRlc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpjb25z
dW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6IERlbGV0ZWQuCisKIDIwMTUtMDMtMTAg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10g
UmVmYWN0b3IgbWVkaWEgY29udHJvbHMgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGMxNGU2NThkMDg5NjhkMjg3ZGQ3ZDMzZWI5MjA1M2I5MmQxNjk3M2EuLjkzYTYx
ZmQ3N2UyY2RhODU2NGQyZGY0NDE3OTVmNGMwZDFjNjhlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTUwNSw3ICs1MDUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVO
VElNRV9TT1VSQ0VTCiAgICAgcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAogICAgIHJ1bnRpbWUv
TG9va3VwLmNwcAogICAgIHJ1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCi0gICAgcnVudGltZS9N
YXBEYXRhLmNwcAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAKICAgICBy
dW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBl
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggNzk0Mzc1ZmU1
MTc4MTg4MDgwMzdjOTg3NzU1NWYzMzQ1ZGZjOGYxMy4uMDAxNTNjYWUxYWI1MjVkOThlMjM0MWYx
YTMxZGQ5NGI3NzliODUwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CkBAIC03NzIsNyArNzcyLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TGl0ZXJhbFBhcnNlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XExvb2t1cC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcENv
bnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFw
RGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJh
dG9yQ29uc3RydWN0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXE1hcFByb3RvdHlwZS5jcHAiIC8+CkBAIC0xNTcyLDYgKzE1NzEsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29rdXAuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwRGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxNYXBEYXRhSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJvdG90eXBlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlwZS5oIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDVmNmEx
ZjRiZGM5MTllNWZmZTBhZTljZWNlODg5OTFmYzFhNTAxN2YuLjdmNjcxNmMzOTc4MWYxYWIyMWIy
MDg4Njk5OWM1ODRkZmVkZWY3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTcyOSw5ICs3MjksNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxNYXBQcm90b3R5cGUuY3BwIj4KICAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxNYXBEYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFw
Q29uc3RydWN0b3IuY3BwIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgpAQCAtMzMxMCw2ICszMzA3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcTWFwRGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBE
YXRhSW5saW5lcy5oIj4KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgorICAgIDwvQ2xJ
bmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRQcm90b3R5cGUu
aCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTlhMTk2ZjY2MDk1ZmNkMTFhMzBiZGY1Mjdh
MDhhNGNkOWRmZjJiNi4uNTY5ZWFkM2Q3MjI2YWFmZWQxNDUyY2MxYjYzMDQzMjc0YjI2ZjM5MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzAsOCArMTMzMCw4IEBACiAJCUE3
N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8q
IFBhcnNlck1vZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQw
MDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRheENoZWNr
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdF
RTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4NTA3RDYxN0NCQzZGRDAwMTFGNkU3
IC8qIE1hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTc4NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwICovOyB9OwogCQlB
Nzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1h
cERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5M0Q0M0NDQTBCQkUwNkQ4OUM1
OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAvKiBTcGlsbFJlZ2lz
dGVyc01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg4NTNGOTE3OTcy
NjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CiAJCUE3ODg1M0ZBMTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDM4LDggKzMwMzgsOCBAQAogCQlBNzdGMTgxRjE2NDA4OEIyMDA2
NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODIw
MTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3N0Yx
ODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJz
ZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg1MDdENDE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYXBEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUx
N0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1OTNENDNDQ0Ew
QkJFMDZEODlDNTk3MDcgLyogTWFwRGF0YUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFwRGF0YUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXpl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGYWlsZWRGaW5h
bGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00NDgxLDggKzQ0ODEsOCBAQAogCQkJCUY2OTJBODY5MDI1NTU5
N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKIAkJCQlBNzAwODczNzE3Q0JFODUzMDBDM0U2NDMg
LyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3MDA4NzM4MTdDQkU4NTMwMEMzRTY0MyAv
KiBNYXBDb25zdHJ1Y3Rvci5oICovLAotCQkJCUE3ODUwN0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBN
YXBEYXRhLmNwcCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5o
ICovLAorCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICov
LAogCQkJCUE3NERFRjhCMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9y
LmNwcCAqLywKIAkJCQlBNzRERUY4QzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JDb25z
dHJ1Y3Rvci5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRv
clByb3RvdHlwZS5jcHAgKi8sCkBAIC02MTAzLDYgKzYxMDMsNyBAQAogCQkJCTBGOTNCNEFBMThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcw
MDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEE2NDQxNTE5NDIwQTZDNjFBRDE4ODJFIC8qIE1hcERhdGFJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzRERUY5MjE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkxNDAwNTIyQzIyIC8q
IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczRTE3Q0JF
OEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNDgsNyAr
NzI0OSw2IEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThDNkRCQTYwMEYxMUU5
MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBNzg1
MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzRERUY5MTE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThEMzAwQzNFNjQz
IC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTWFwLmNwcAppbmRleCBjMDhhOTcwOGJlNDVhOTM0OTU1MjM0YjMwNTc2NjBkNzgx
Njc1MGY0Li5iNjhlOWFmMjIzOThmYTE0YzUwOTc5MmJlZTAxY2JhNDI3MjQ3ODMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCkBAIC0yNywyNiArMjcsMjkgQEAKICNp
bmNsdWRlICJKU01hcC5oIgogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNs
dWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewotICAgIAorCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsg
Ik1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAK
K3ZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU01hcCo+
KGNlbGwpLT5+SlNNYXAoKTsKK30KKwogdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihj
ZWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXBEYXRhKTsKKyAgICBq
c0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRv
cik7CiB9CiAKLXZvaWQgSlNNYXA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3ZvaWQgSlNNYXA6
OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29w
eVRva2VuIHRva2VuKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX21h
cERhdGEuc2V0KHZtLCB0aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAgICBCYXNlOjpjb3B5
QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKyAgICBqc0Nhc3Q8SlNNYXAqPihj
ZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwogfQogCi0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCmluZGV4IDQzMTUyNzRkZTNlOTg1
N2M1YmJlMDgzNTEzNzU2OWE3NzE2NDZlMDUuLmFhNDBjZTVjMjczZTcxMmViYzA1Y2EwM2Y5MTAx
ZmJlNWMyMjQ2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaApAQCAtMjYs
MTUgKzI2LDU4IEBACiAjaWZuZGVmIEpTTWFwX2gKICNkZWZpbmUgSlNNYXBfaAogCisjaW5jbHVk
ZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hcERhdGE7Ci0KLWNs
YXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworY2xhc3MgSlNNYXAgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKwor
ICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhp
cyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5r
bm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IG1fa2V5OworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1
ZTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9rZXk7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92
YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAgICBtX2tleS5z
ZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRWYWx1ZShW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fdmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fa2V5LmNsZWFyKCk7
CisgICAgICAgICAgICBtX3ZhbHVlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dHlwZWRlZiBNYXBEYXRhSW1wbDxFbnRyeT4gTWFwRGF0YTsKIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKQEAgLTU1LDE5ICs5OCwyMCBAQCBjbGFzcyBKU01hcCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
OwogICAgIH0KIAotICAgIE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiBtX21hcERhdGEuZ2V0
KCk7IH0KKyAgICBNYXBEYXRhKiBtYXBEYXRhKCkgeyByZXR1cm4gJm1fbWFwRGF0YTsgfQogCiBw
cml2YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fbWFwRGF0YSgpCiAgICAgewogICAg
IH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLQor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNr
aW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCi0gICAgV3JpdGVC
YXJyaWVyPE1hcERhdGE+IG1fbWFwRGF0YTsKKyAgICBNYXBEYXRhIG1fbWFwRGF0YTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAK
aW5kZXggYzE2N2FjYmNmM2EzYTliN2M0Y2U1Y2E3MjhhMzgxNWNiYjk2Y2JiZS4uZTlkN2Q0MmZi
NGUzOGVkMzE3Y2Q2MmJmMDY0MmNjMTE1ZjFlNjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKQEAgLTQwLDE1ICs0MCwxOSBAQCB2b2lk
IEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNNYXAqIGl0ZXJhdGVkT2Jq
ZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX21hcC5zZXQodm0s
IHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0RGF0YS5zZXQodm0s
IHRoaXMsIGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCkpOworfQorCit2b2lkIEpTTWFwSXRlcmF0
b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4o
Y2VsbCktPn5KU01hcEl0ZXJhdG9yKCk7CiB9CiAKIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTWFw
SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsgICAgICAgIAor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0YSk7CisgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fbWFwKTsKIH0KIAogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVh
dGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAppbmRleCA2
M2RkNWU4YjExZjk2YTQ0NjFhZGQ1Y2VhM2M0NDdhZGM2MDA0MGNjLi41OGYxYWJmYWEwNTFiZGVj
NzgyMzdmNTk1Zjk1OGE2YWZhODlhOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5oCkBAIC04NywxMyArODcsMTMgQEAgY2xhc3MgSlNNYXBJdGVy
YXRvciA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAgICAgewogICAgIH0KIAorICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTTWFwKik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUs
IEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgV3JpdGVCYXJy
aWVyPE1hcERhdGE+IG1faXRlcmF0ZWRPYmplY3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0
ZXJhdG9yIG1faXRlcmF0b3I7CisgICAgSlNNYXA6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1f
aXRlcmF0b3I7CiAgICAgTWFwSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKaW5kZXggM2MxZDEyNGJjNTYyZGI2ZGMxYmEwMGM5
NjNiYTU0OTNlNjAzNzM3Ny4uZGFhOTI4NDBkNWJjMDk2MjI2ODVlMTgwMDUyZjg1ZTMwMWQzN2Fh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcApAQCAtMjcsNyArMjcs
NyBAQAogI2luY2x1ZGUgIkpTU2V0LmgiCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIApAQCAtMzUsMTcgKzM1LDIxIEBACiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZv
ID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkg
fTsKIAordm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpT
U2V0Kj4oY2VsbCktPn5KU1NldCgpOworfQorCiB2b2lkIEpTU2V0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Nl
dCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcERhdGEpOwor
ICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKIH0KIAotdm9pZCBKU1NldDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBK
U1NldDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9y
LCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
IG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNyZWF0ZSh2bSkpOworICAgIEJhc2U6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworICAgIGpzQ2FzdDxKU1Nl
dCo+KGNlbGwpLT5tX3NldERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCmluZGV4IGZjMGFhMzBmYjk1
N2NiODlmOTVlNTY3ZWYxNjBjZjgxNTAzZTI1MmUuLjExMDRiY2ZmYWE0YjVjMGI1MDAxMGEzMTU3
MzA0ZTdlNTg5OGM0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaApAQCAt
MjYsMTUgKzI2LDU1IEBACiAjaWZuZGVmIEpTU2V0X2gKICNkZWZpbmUgSlNTZXRfaAogCisjaW5j
bHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2lu
Y2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIE1hcERhdGE7Ci0K
LWNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworY2xhc3MgSlNTZXQgOiBw
dWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsK
KworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4g
dGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8
VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IG1fa2V5OworCisgICAgcHVibGljOgorICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGtleSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tleTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9rZXk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUg
a2V5KQorICAgICAgICB7CisgICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCosIEpT
VmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuCisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9rZXkuY2xl
YXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5
PiBTZXREYXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApAQCAtNTUsMTkgKzk1LDIw
IEBAIGNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1
cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgTWFwRGF0YSog
bWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAgIFNldERhdGEqIHNldERh
dGEoKSB7IHJldHVybiAmbV9zZXREYXRhOyB9CiAKIHByaXZhdGU6CiAgICAgSlNTZXQoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisg
ICAgICAgICwgbV9zZXREYXRhKCkKICAgICB7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwotICAgIAotICAgIFdyaXRlQmFycmllcjxNYXBEYXRhPiBtX21hcERhdGE7Cisg
ICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENv
cHlUb2tlbik7CisKKyAgICBTZXREYXRhIG1fc2V0RGF0YTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKaW5kZXggMmZjMjk4OTAx
NzY4NzNlNDRiYjkzMTUyNGM1ZjAzZWRhMDRmMzc1ZS4uNWVjYWMxMmQ5YzRjYTIyNzVlZGRhZDll
Nzg5Nzg1NDhjOTdlN2E0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZXRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5jcHAKQEAgLTQwLDE1ICs0MCwxOSBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0KQogewogICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX3NldC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVk
T2JqZWN0KTsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0RGF0YS5zZXQodm0sIHRoaXMsIGl0ZXJhdGVk
T2JqZWN0LT5tYXBEYXRhKCkpOwogfQogCiB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU1NldEl0ZXJh
dG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKTsKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7ICAgICAgICAKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9pdGVyYXRlZE9iamVjdERhdGEpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX3NldCk7Cit9CisKK3ZvaWQgSlNTZXRJdGVyYXRvcjo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTU2V0SXRlcmF0b3IqPihjZWxsKS0+fkpTU2V0SXRl
cmF0b3IoKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAppbmRleCA5YzcwYzI2ZTUwYTJiNWQ5
NWU4ZGM4MWRmZDE5ZGFhZDQyNTA3YmQ3Li42ZTZjMzg0ZDVkMzI5NjY5M2NjMjdhMWQ4MGZmNGY4
MThmNGQ3MjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5oCkBAIC04MCwxOCArODAsMTggQEAgY2xhc3MgSlNTZXRJdGVyYXRvciA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwcml2YXRlOgogICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0LCBTZXRJdGVyYXRp
b25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1f
aXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKS0+YmVnaW4oKSkKKyAgICAgICAgLCBt
X2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5zZXREYXRhKCktPmJlZ2luKCkpCiAgICAgICAgICwg
bV9raW5kKGtpbmQpCiAgICAgewogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0Kik7CiAgICAgSlNWYWx1
ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFy
cmllcjxKU1NldD4gbV9zZXQ7Ci0gICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1faXRlcmF0ZWRP
YmplY3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CisgICAg
SlNTZXQ6OlNldERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CiAgICAgU2V0SXRlcmF0
aW9uS2luZCBtX2tpbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERh
dGEuY3BwCmluZGV4IGIwNTY5MWM4NTJhYjJmZDJiYjNlNTQ3YTRjZGMwOWRlMzZjYjE3ZmUuLjQx
ZDgxMTZkMjE1N2Y3MmJmMzQ5MzE1ZGU4ZThhM2E3NzA0MTU5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCkBAIC0yMywyNTIgKzIzLDMgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTWFwRGF0YS5oIgotCi0jaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCi0jaW5j
bHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
aD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
b25zdCBDbGFzc0luZm8gTWFwRGF0YTo6c19pbmZvID0geyAiTWFwRGF0YSIsIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoTWFwRGF0YSkgfTsKLQotc3RhdGljIGNvbnN0IGludDMyX3QgbWluaW11
bU1hcFNpemUgPSA4OwotCi1NYXBEYXRhOjpNYXBEYXRhKFZNJiB2bSkKLSAgICA6IEJhc2Uodm0s
IHZtLm1hcERhdGFTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2NhcGFjaXR5KDApCi0gICAgLCBt
X3NpemUoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBtX2l0ZXJhdG9yQ291bnQo
MCkKLSAgICAsIG1fZW50cmllcygwKQotewotfQotCi1NYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6
ZmluZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52
YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJs
ZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsKLSAg
ICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9
Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1f
c3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCku
dWlkKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFs
dWVdOwotICAgIH0KLSAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAg
ICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0KLSAg
ICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXku
dmFsdWUpKTsKLSAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotfQotCi1i
b29sIE1hcERhdGE6OmNvbnRhaW5zKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkK
LXsKLSAgICByZXR1cm4gZmluZChjYWxsRnJhbWUsIGtleSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBNYXAsIHR5cGVuYW1lIEtleT4gTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgTWFwJiBtYXAsIEtleSBrZXksIEtleVR5cGUga2V5VmFsdWUpCi17
Ci0gICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlvbiA9IG1hcC5maW5kKGtleSk7Ci0g
ICAgaWYgKGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNb
bG9jYXRpb24tPnZhbHVlXTsKLSAgICAKLSAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGNh
bGxGcmFtZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byByZXN1bHQgPSBtYXAuYWRk
KGtleSwgbV9zaXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgRW50cnkqIGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107Ci0gICAgbmV3IChlbnRyeSkg
RW50cnkoKTsKLSAgICBlbnRyeS0+a2V5LnNldChjYWxsRnJhbWUtPnZtKCksIHRoaXMsIGtleVZh
bHVlLnZhbHVlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6c2V0KENh
bGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBF
bnRyeSogbG9jYXRpb24gPSBhZGQoY2FsbEZyYW1lLCBrZXkpOwotICAgIGlmICghbG9jYXRpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICBsb2NhdGlvbi0+dmFsdWUuc2V0KGNhbGxGcmFtZS0+dm0o
KSwgdGhpcywgdmFsdWUpOwotfQotICAgIAotTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5p
c1N0cmluZygpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9zdHJpbmdLZXllZFRh
YmxlLCBhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSwga2V5KTsK
LSAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBhZGQoY2FsbEZy
YW1lLCBtX3N5bWJvbEtleWVkVGFibGUsIGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1l
KCkudWlkKCksIGtleSk7Ci0gICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0
dXJuIGFkZChjYWxsRnJhbWUsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwg
a2V5KTsKLSAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV92YWx1ZUtleWVkVGFibGUsIEpTVmFs
dWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOwotfQotCi1KU1ZhbHVlIE1hcERhdGE6OmdldChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKEVudHJ5KiBlbnRy
eSA9IGZpbmQoY2FsbEZyYW1lLCBrZXkpKQotICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlLmdl
dCgpOwotICAgIHJldHVybiBKU1ZhbHVlKCk7Ci19Ci0KLWJvb2wgTWFwRGF0YTo6cmVtb3ZlKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpbnQzMl90IGxvY2F0aW9u
OwotICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBt
X3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJh
bWUpLmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52
YWx1ZTsKLSAgICAgICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9ICBl
bHNlIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5
bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVp
ZCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwot
ICAgICAgICBtX3N5bWJvbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxzZSBpZiAo
a2V5LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFi
bGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxL
ZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2Nh
dGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVy
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5m
aW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV92
YWx1ZUtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92
ZShpdGVyKTsKLSAgICB9Ci0gICAgbV9lbnRyaWVzW2xvY2F0aW9uXS5rZXkuY2xlYXIoKTsKLSAg
ICBtX2VudHJpZXNbbG9jYXRpb25dLnZhbHVlLmNsZWFyKCk7Ci0gICAgbV9kZWxldGVkQ291bnQr
KzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0Jh
Y2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17Ci0g
ICAgQVNTRVJUKHNob3VsZFBhY2soKSk7Ci0gICAgaW50MzJfdCBuZXdFbmQgPSAwOwotICAgIFJF
TEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBp
IDwgbV9zaXplOyBpKyspIHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOwot
ICAgICAgICBpZiAoIWVudHJ5LmtleSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBB
U1NFUlQobmV3RW5kIDwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRd
ID0gZW50cnk7Ci0KLSAgICAgICAgLy8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBh
IGZvcndhcmRpbmcgaW5kZXggZm9yIHRoZSBuZXcgZW50cnksCi0gICAgICAgIC8vIHNvIHRoYXQg
d2UgY2FuIGZpeCB1cCBvdXIgaGFzaCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlv
bmFsCi0gICAgICAgIC8vIGhhc2ggbG9va3VwcwotICAgICAgICBlbnRyeS52YWx1ZS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKG5ld0VuZCkpOwotICAgICAgICBuZXdFbmQrKzsKLSAg
ICB9Ci0KLSAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCi0gICAgZm9yIChhdXRvIHB0ciA9
IG1fdmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQo
KTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0udmFs
dWUuZ2V0KCkuYXNJbnQzMigpOwotICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxl
LmJlZ2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAg
cHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7
Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0g
bV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1f
ZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRv
IHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRh
YmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZh
bHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0KLSAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0Vu
ZCkgPT0gbV9kZWxldGVkQ291bnQpOwotICAgIG1fZGVsZXRlZENvdW50ID0gMDsKLQotICAgIG1f
Y2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRy
aWVzID0gZGVzdGluYXRpb247Ci0KLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQmFja2luZ1N0
b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NF
UlQoIXNob3VsZFBhY2soKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsK
LSAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3Rp
bmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwotICAgIG1fY2FwYWNp
dHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKLX0KLQotQ2hl
Y2tlZEJvb2xlYW4gTWFwRGF0YTo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCi17Ci0gICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6bWF4KG1fY2FwYWNpdHkgKyAo
bV9jYXBhY2l0eSAvIDIpICsgMSwgbWluaW11bU1hcFNpemUpOwotICAgIHZvaWQqIG5ld1N0b3Jh
Z2UgPSAwOwotICAgIERlZmVyR0MgZGVmZXIoKmNhbGxGcmFtZS0+aGVhcCgpKTsKLSAgICBpZiAo
IWNhbGxGcmFtZS0+aGVhcCgpLT50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgcmVxdWlyZWRTaXpl
ICogc2l6ZW9mKEVudHJ5KSwgJm5ld1N0b3JhZ2UpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihjYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEVu
dHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKLSAgICBp
ZiAoc2hvdWxkUGFjaygpKQotICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdF
bnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmVwbGFjZUJhY2tpbmdT
dG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGNhbGxGcmFtZS0+aGVhcCgpLT53
cml0ZUJhcnJpZXIodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgTWFwRGF0YSogdGhpc09i
amVjdCA9IGpzQ2FzdDxNYXBEYXRhKj4oY2VsbCk7Ci0gICAgRW50cnkqIGVudHJpZXMgPSB0aGlz
T2JqZWN0LT5tX2VudHJpZXM7Ci0gICAgaWYgKCFlbnRyaWVzKQotICAgICAgICByZXR1cm47Ci0g
ICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5tX3NpemU7Ci0gICAgaWYgKHRoaXNPYmplY3Qt
Pm1fZGVsZXRlZENvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoIWVudHJpZXNbaV0ua2V5KQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJpZXNbaV0ua2V5KTsK
LSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyaWVzW2ldLnZhbHVlKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5r
ZXksIHNpemUgKiAoc2l6ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSk7Ci0KLSAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4sIGVudHJpZXMsIHRoaXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLX0KLQot
dm9pZCBNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3Im
IHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0g
anNDYXN0PE1hcERhdGEqPihjZWxsKTsKLSAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3Jl
Q29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV9lbnRy
aWVzKSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50cmll
czsKLSAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSkpOwotICAg
ICAgICBpZiAodGhpc09iamVjdC0+c2hvdWxkUGFjaygpKQotICAgICAgICAgICAgdGhpc09iamVj
dC0+cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9j
YXBhY2l0eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlcGxhY2VC
YWNraW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAgICAg
IHZpc2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCB0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMo
KSk7Ci0gICAgfQotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9r
ZW4pOwotfQotCi12b2lkIE1hcERhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0
YXRpY19jYXN0PE1hcERhdGEqPihjZWxsKS0+fk1hcERhdGEoKTsKLX0KLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCmluZGV4IGIxZDUzMDYyOTZlNTA0NmJkNDA3M2Vl
OTk5MThlYTZmZTRmYjE5NDUuLjM2NDlmNzgxZGYyNTgxMDNjN2VkY2RjMjA5NGZlYjE4NDQ0MDQy
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKQEAgLTI3LDI1ICsy
NywyNyBAQAogI2RlZmluZSBNYXBEYXRhX2gKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgRXhlY1N0
YXRlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2NsYXNzIE1hcERhdGFJbXBsIHsKIHB1
YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCBpbnQzMl90
IG1pbmltdW1NYXBTaXplID0gODsKIAogICAgIHN0cnVjdCBjb25zdF9pdGVyYXRvciB7Ci0gICAg
ICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgY29uc3RfaXRlcmF0
b3IoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0X2l0ZXJhdG9yKCk7CiAgICAg
ICAgIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IG9wZXJhdG9yKigp
IGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQoIWF0
RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0ua2V5LmdldCgpOyB9
Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFhdEVuZCgp
KTsgcmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlLmdldCgpOyB9Cisg
ICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7IHJl
dHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkoKS5nZXQoKTsgfQorICAgICAg
ICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7IHJldHVy
biBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgpLmdldCgpOyB9CiAgICAgICAg
IHZvaWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsgaW50ZXJuYWxJbmNyZW1lbnQo
KTsgfQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1hcERhdGEqKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRhSW1wbCopOwog
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKTsKICAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcik7CiAgICAg
ICAgIHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWF4KCk7IH0KQEAgLTYwLDcgKzYyLDcgQEAgY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0Nl
bGwgewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
bWFwRGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVybmFsSW5jcmVtZW50KCk7Ci0g
ICAgICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAgICAgY29uc3QgTWFwRGF0YUlt
cGwqIG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4OwogICAgIH07CiAKQEAgLTcw
LDQ1ICs3MiwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIEpT
VmFsdWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBEYXRhKiBjcmVhdGUoVk0mIHZt
KQotICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsKLSAgICAgICAgbWFwRGF0YS0+
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFwRGF0YTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQorICAgIE1hcERhdGFJ
bXBsKCk7CiAKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7Ci0KLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUqLCBLZXlUeXBlLCBKU1ZhbHVl
KTsKLSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIHJlbW92
ZShDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKENhbGxGcmFtZSosIEtl
eVR5cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZSAtIG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXQoRXhl
Y1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CisgICAgSlNWYWx1ZSBn
ZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiwgS2V5
VHlwZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAgICBzaXpl
X3Qgc2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2RlbGV0ZWRDb3Vu
dDsgfQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9p
dGVyYXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAg
IERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjb3B5
QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogcHJpdmF0ZToKICAgICB0
eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4gSW5kZXhU
cmFpdHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVudHJ5IHRvIG1h
aW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMgYmUgV3JpdGVC
YXJyaWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOwotICAg
IH07Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RG
OjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJhaXRzPEpTQ2VsbCo+LCBJ
bmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxFbmNvZGVkSlNW
YWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFp
dHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxTdHJpbmdJbXBsKj46
Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4VHJhaXRzPiBTdHJpbmdL
ZXllZE1hcDsKQEAgLTExNiwxOCArOTgsMTIgQEAgY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0Nl
bGwgewogCiAgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcygpIHsgcmV0dXJuIG1fY2FwYWNpdHkg
KiBzaXplb2YoRW50cnkpOyB9CiAKLSAgICBNYXBEYXRhKFZNJik7Ci0gICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwq
LCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7Ci0KLQotICAgIEFMV0FZU19JTkxJTkUgRW50cnkq
IGZpbmQoQ2FsbEZyYW1lKiwgS2V5VHlwZSk7Ci0gICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRk
KENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVu
YW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKENhbGxGcmFtZSosIE1hcCYsIEtleSwg
S2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogZmluZChFeGVjU3RhdGUqLCBLZXlU
eXBlKTsKKyAgICBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwgSlNDZWxsKiBv
d25lciwgS2V5VHlwZSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5
PiBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgTWFw
JiwgS2V5LCBLZXlUeXBlKTsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRQYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWxldGVkQ291bnQgJiYgIW1faXRlcmF0b3JDb3VudDsgfQotICAg
IENoZWNrZWRCb29sZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKENhbGxGcmFtZSopOworICAgIENo
ZWNrZWRCb29sZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3du
ZXIpOwogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3Jl
KEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdTaXplKTsKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcmVwbGFjZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3
U2l6ZSk7CkBAIC0xNDMsNyArMTE5LDE4IEBAIGNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBFbnRyeSogbV9lbnRyaWVzOwogfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcERh
dGE6OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBE
YXRhSW1wbDxFbnRyeT46Ok1hcERhdGFJbXBsKCkKKyAgICA6IG1fY2FwYWNpdHkoMCkKKyAgICAs
IG1fc2l6ZSgwKQorICAgICwgbV9kZWxldGVkQ291bnQoMCkKKyAgICAsIG1faXRlcmF0b3JDb3Vu
dCgwKQorICAgICwgbV9lbnRyaWVzKG51bGxwdHIpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xlYXIoKQog
ewogICAgIG1fY2VsbEtleWVkVGFibGUuY2xlYXIoKTsKICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5j
bGVhcigpOwpAQCAtMTU1LDcgKzE0Miw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhOjpj
bGVhcigpCiAgICAgbV9lbnRyaWVzID0gbnVsbHB0cjsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBE
YXRhOjpLZXlUeXBlOjpLZXlUeXBlKEpTVmFsdWUgdikKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OktleVR5cGU6OktleVR5cGUoSlNW
YWx1ZSB2KQogewogICAgIGlmICghdi5pc0RvdWJsZSgpKSB7CiAgICAgICAgIHZhbHVlID0gdjsK
QEAgLTE3NCw1NSArMTYyLDYyIEBAIEFMV0FZU19JTkxJTkUgTWFwRGF0YTo6S2V5VHlwZTo6S2V5
VHlwZShKU1ZhbHVlIHYpCiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoaSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1lbnQo
KQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YUlt
cGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1lbnQoKQogewogICAgIEVu
dHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2VudHJpZXM7CiAgICAgc2l6ZV90IGluZGV4ID0g
bV9pbmRleCArIDE7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFwRGF0YS0+bV9zaXplOwotICAgIHdo
aWxlIChpbmRleCA8IGVuZCAmJiAhZW50cmllc1tpbmRleF0ua2V5KQorICAgIHdoaWxlIChpbmRl
eCA8IGVuZCAmJiAhZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAgICAgIGluZGV4Kys7CiAgICAg
bV9pbmRleCA9IGluZGV4OwogfQotICAgIAotQUxXQVlTX0lOTElORSBib29sIE1hcERhdGE6OmNv
bnN0X2l0ZXJhdG9yOjplbnN1cmVTbG90KCkKKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitB
TFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6ZW5z
dXJlU2xvdCgpCiB7CiAgICAgLy8gV2hlbiBhbiBpdGVyYXRvciBleGlzdHMgb3V0c2lkZSBvZiBo
b3N0IGNvc3QgaXQgaXMgcG9zc2libGUgZm9yCiAgICAgLy8gdGhlIGNvbnRhaW5pbmcgbWFwIHRv
IGJlIG1vZGlmaWVkCiAgICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50cmllczsK
ICAgICBzaXplX3QgaW5kZXggPSBtX2luZGV4OwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEt
Pm1fc2l6ZTsKLSAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KQorICAg
IGlmIChpbmRleCA8IGVuZCAmJiBlbnRyaWVzW2luZGV4XS5rZXkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgaW50ZXJuYWxJbmNyZW1lbnQoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2luZGV4KSA8IGVuZDsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25z
dF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YSogbWFwRGF0YSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OmNv
bnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcihjb25zdCBNYXBEYXRhSW1wbDxFbnRyeT4qIG1h
cERhdGEpCiAgICAgOiBtX21hcERhdGEobWFwRGF0YSkKICAgICAsIG1faW5kZXgoLTEpCiB7CiAg
ICAgaW50ZXJuYWxJbmNyZW1lbnQoKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25z
dF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
QUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjp+Y29uc3Rf
aXRlcmF0b3IoKQogewogICAgIG1fbWFwRGF0YS0+bV9pdGVyYXRvckNvdW50LS07CiB9CiAKLUFM
V0FZU19JTkxJTkUgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwg
SlNWYWx1ZT4gTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IqKCkg
Y29uc3QKIHsKICAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRl
eF07Ci0gICAgcmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5
LT5rZXkuZ2V0KCksIGVudHJ5LT52YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIFdURjo6S2V5VmFs
dWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwgZW50cnktPnZhbHVl
KCkuZ2V0KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIE1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YSogbWFwRGF0YSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBhdXRvIE1hcERhdGFJbXBsPEVudHJ5
Pjo6Y29uc3RfaXRlcmF0b3I6OmVuZChjb25zdCBNYXBEYXRhSW1wbDxFbnRyeT4qIG1hcERhdGEp
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0KG1hcERhdGEp
OwogICAgIHJlc3VsdC5tX2luZGV4ID0gLTE7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0
IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlT
X0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9y
IT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKQogewogICAgIEFTU0VSVChvdGhlci5tX21h
cERhdGEgPT0gbV9tYXBEYXRhKTsKICAgICBpZiAoYXRFbmQoKSAmJiBvdGhlci5hdEVuZCgpKQpA
QCAtMjMwLDcgKzIyNSw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVy
YXRvcjo6b3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoCiAgICAgcmV0dXJuIG1f
aW5kZXggIT0gb3RoZXIubV9pbmRleDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIE1hcERhdGE6
OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikK
K3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBs
PEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3Im
IG90aGVyKQogewogICAgIHJldHVybiAhKCp0aGlzICE9IG90aGVyKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkNDc2
MDEyMzBiZTI0MDEzMmU4NjFmOTM4NGRkZThiZWEwOThlODEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCkBAIC0wLDAgKzEs
MjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFwRGF0YS5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorCisjaW5jbHVkZSA8d3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUg
RW50cnkqIE1hcERhdGFJbXBsPEVudHJ5Pjo6ZmluZChFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUg
a2V5KQoreworICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICBhdXRvIGl0
ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShl
eGVjKS5pbXBsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRl
ci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKKyAgICAg
ICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVl
KS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5
ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gJm1f
ZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgfQorICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5h
c0NlbGwoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFs
dWVdOworICAgIH0KKworICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNW
YWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOworICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRh
YmxlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJm1fZW50cmllc1tpdGVy
LT52YWx1ZV07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIGJvb2wgTWFw
RGF0YUltcGw8RW50cnk+Ojpjb250YWlucyhFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQor
eworICAgIHJldHVybiBmaW5kKGV4ZWMsIGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5PgordGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PgoraW5saW5lIEVudHJ5
KiBNYXBEYXRhSW1wbDxFbnRyeT46OmFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIs
IE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtleVZhbHVlKQoreworICAgIHR5cGVuYW1lIE1h
cDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOworICAgIGlmIChsb2NhdGlvbiAh
PSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2xvY2F0aW9uLT52YWx1ZV07
CisKKyAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGV4ZWMsIG93bmVyKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoa2V5LCBtX3NpemUpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBFbnRyeSogZW50cnkgPSAm
bV9lbnRyaWVzW21fc2l6ZSsrXTsKKyAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOworICAgIGVudHJ5
LT5zZXRLZXkoZXhlYy0+dm0oKSwgb3duZXIsIGtleVZhbHVlLnZhbHVlKTsKKyAgICByZXR1cm4g
ZW50cnk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0
YUltcGw8RW50cnk+OjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBFbnRyeSogbG9jYXRpb24gPSBhZGQoZXhlYywg
b3duZXIsIGtleSk7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIGxv
Y2F0aW9uLT5zZXRWYWx1ZShleGVjLT52bSgpLCBvd25lciwgdmFsdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnk+OjphZGQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBlIGtleSkKK3sKKyAgICBpZiAo
a2V5LnZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1f
c3RyaW5nS2V5ZWRUYWJsZSwgYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgp
LCBrZXkpOworICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkKKyAgICAgICAgcmV0dXJuIGFk
ZChleGVjLCBvd25lciwgbV9zeW1ib2xLZXllZFRhYmxlLCBhc1N5bWJvbChrZXkudmFsdWUpLT5w
cml2YXRlTmFtZSgpLnVpZCgpLCBrZXkpOworICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpCisg
ICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1
ZS5hc0NlbGwoKSwga2V5KTsKKyAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX3ZhbHVlS2V5
ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSksIGtleSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIEpTVmFsdWUgTWFwRGF0YUltcGw8RW50cnk+OjpnZXQo
RXhlY1N0YXRlKiBleGVjLCBLZXlUeXBlIGtleSkKK3sKKyAgICBpZiAoRW50cnkqIGVudHJ5ID0g
ZmluZChleGVjLCBrZXkpKQorICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlKCkuZ2V0KCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+Citpbmxp
bmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEtleVR5
cGUga2V5KQoreworICAgIGludDMyX3QgbG9jYXRpb247CisgICAgaWYgKGtleS52YWx1ZS5pc1N0
cmluZygpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFz
U3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSk7CisgICAgICAgIGlmIChpdGVy
ID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zdHJpbmdLZXllZFRh
YmxlLnJlbW92ZShpdGVyKTsKKyAgICB9ICBlbHNlIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkg
eworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChr
ZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9z
eW1ib2xLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOworICAgICAgICBtX3N5bWJvbEtleWVkVGFibGUucmVt
b3ZlKGl0ZXIpOworICAgIH0gZWxzZSBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAg
IGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOworICAgICAgICBt
X2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRv
IGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUp
KTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAg
ICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9CisgICAgbV9lbnRyaWVz
W2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZGVsZXRlZENvdW50Kys7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUlt
cGw8RW50cnk+OjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24s
IGludDMyX3QgbmV3Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKHNob3VsZFBhY2soKSk7CisgICAg
aW50MzJfdCBuZXdFbmQgPSAwOworICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7
CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgRW50
cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOworICAgICAgICBpZiAoIWVudHJ5LmtleSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVChuZXdFbmQgPCBuZXdDYXBhY2l0eSk7
CisgICAgICAgIGRlc3RpbmF0aW9uW25ld0VuZF0gPSBlbnRyeTsKKworICAgICAgICAvLyBXZSBv
dmVyd3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRoIGEgZm9yd2FyZGluZyBpbmRleCBmb3IgdGhlIG5l
dyBlbnRyeSwKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZml4IHVwIG91ciBoYXNoIHRhYmxl
cyBiZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0aW9uYWwKKyAgICAgICAgLy8gaGFzaCBsb29rdXBz
CisgICAgICAgIGVudHJ5LmtleSgpLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNOdW1iZXIobmV3
RW5kKSk7CisgICAgICAgIG5ld0VuZCsrOworICAgIH0KKworICAgIC8vIEZpeHVwIGZvciB0aGUg
aGFzaG1hcHMKKyAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsg
cHRyICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1
ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9y
IChhdXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVk
VGFibGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+
dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJp
bmdLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsr
cHRyKQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdl
dCgpLmFzSW50MzIoKTsKKyAgICBmb3IgKGF1dG8gcHRyID0gbV9zeW1ib2xLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBw
dHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsK
KworICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3VudCk7CisgICAg
bV9kZWxldGVkQ291bnQgPSAwOworCisgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAg
IG1fc2l6ZSA9IG5ld0VuZDsKKyAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OnJl
cGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5
KQoreworICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdD
YXBhY2l0eSA+IDApOworICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKKyAg
ICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7
CisgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgIG1fZW50cmllcyA9IGRlc3RpbmF0
aW9uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBDaGVja2VkQm9vbGVh
biBNYXBEYXRhSW1wbDxFbnRyeT46OmVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBvd25lcikKK3sKKyAgICBpZiAobV9jYXBhY2l0eSA+IG1fc2l6ZSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc3RkOjptYXgobV9j
YXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBtaW5pbXVtTWFwU2l6ZSk7CisgICAgdm9p
ZCogbmV3U3RvcmFnZSA9IG51bGxwdHI7CisgICAgRGVmZXJHQyBkZWZlcigqZXhlYy0+aGVhcCgp
KTsKKyAgICBpZiAoIWV4ZWMtPmhlYXAoKS0+dHJ5QWxsb2NhdGVTdG9yYWdlKG93bmVyLCByZXF1
aXJlZFNpemUgKiBzaXplb2YoRW50cnkpLCAmbmV3U3RvcmFnZSkpIHsKKyAgICAgICAgdGhyb3dP
dXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKKyAg
ICBpZiAoc2hvdWxkUGFjaygpKQorICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShu
ZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOworICAgIGVsc2UKKyAgICAgICAgcmVwbGFjZUJhY2tp
bmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOworICAgIGV4ZWMtPmhlYXAoKS0+d3Jp
dGVCYXJyaWVyKG93bmVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBvd25lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRW50cnkqIGVudHJp
ZXMgPSBtX2VudHJpZXM7CisgICAgaWYgKCFlbnRyaWVzKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fZGVsZXRlZENvdW50KSB7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1f
c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWVudHJpZXNbaV0ua2V5KCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbnRyaWVzW2ldLnZpc2l0Q2hpbGRyZW4o
dmlzaXRvcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoJmVudHJpZXNbMF0ua2V5KCksIG1fc2l6ZSAqIChzaXplb2YoRW50cnkpIC8gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVy
LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxF
bnRyeT46OmNvcHlCYWNraW5nU3RvcmUoQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0
b2tlbikKK3sKKyAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRyaWVzKSkgeworICAgICAgICBFbnRyeSogb2xk
RW50cmllcyA9IG1fZW50cmllczsKKyAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNf
Y2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMoKSkp
OworICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQorICAgICAgICAgICAgcmVwbGFjZUFuZFBhY2tC
YWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAg
ICAgIHZpc2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCBjYXBhY2l0eUluQnl0ZXMoKSk7CisgICAg
fQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQ
cm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmNwcAppbmRleCA1NDgyMjI3Njk0MDBiNzE4NTJhZjdkYjhiNzVlZjUwNzU0NGVkZDRmLi4zNGIw
ZTk4ODQ5N2RlNTU4OGNlMWM1MDE2ZjA1ZjA1YTY2MGYwOTc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBE
YXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcHV0RGlyZWN0Tm9u
SW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwgYWNjZXNzb3IsIERvbnRF
bnVtIHwgQWNjZXNzb3IpOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBNYXBEYXRhKiBnZXRN
YXBEYXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK0FMV0FZU19J
TkxJTkUgc3RhdGljIEpTTWFwOjpNYXBEYXRhKiBnZXRNYXBEYXRhKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgp
KSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJy
b3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKQEAgLTkyLDcgKzkyLDcgQEAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSB0aGlzVmFsdWUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmND
bGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFw
RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTTWFwOjpNYXBE
YXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBkYXRhLT5jbGVhcigpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRh
dGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAg
aWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJlbW92ZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0xMDksNyArMTA5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9y
RWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFw
RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTTWFwOjpNYXBE
YXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
QEAgLTE0MSw3ICsxNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbWFwUHJvdG9GdW5jR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1h
cERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gZGF0YS0+
Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CkBAIC0xNTIsNyArMTUyLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5j
SGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBE
YXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXA6Ok1hcERh
dGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRh
aW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKQEAgLTE2MCwxNiArMTYw
LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0
TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKyAgICBKU01hcDo6TWFwRGF0YSog
ZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwogICAgIGlmICghZGF0YSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBkYXRh
LT5zZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIEpTTWFwKiBtYXAgPSBqc0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOworICAgIGRh
dGEtPnNldChjYWxsRnJhbWUsIG1hcCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1l
LT5hcmd1bWVudCgxKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9
IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAo
IWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkYXRhLT5zaXplKGNhbGxGcmFtZSkp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCmlu
ZGV4IGY4OGVhN2NmOTg2OGY2NjhiOGMyZTg4ODE1ZmY2NWNmMzk5MjdiNDkuLjYzODY5ZjMyZmMy
NGRiMWQzYmEwMDY3NDMyMzIzZjRkYWY2NTc3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
IkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1Nl
dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFj
Y2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBB
Y2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBz
dGF0aWMgSlNTZXQ6OlNldERhdGEqIGdldFNldERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUgdGhpc1ZhbHVlKQogewogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxs
RnJhbWUsIHRoaXNWYWx1ZSkpOwpAQCAtODYsMjEgKzg2LDIzIEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhp
c1ZhbHVlCiAgICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJT
ZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCIpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIHJldHVybiBzZXQtPm1hcERhdGEoKTsKKyAgICByZXR1cm4gc2V0LT5z
ZXREYXRhKCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
QWRkKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBE
YXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOworICAgIEpTU2V0OjpTZXREYXRhKiBkYXRh
ID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFkYXRhKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPnNl
dChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQo
MCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgSlNTZXQqIHNldCA9IGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CisgICAgZGF0YS0+
c2V0KGNhbGxGcmFtZSwgc2V0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldDo6U2V0RGF0YSogZGF0YSA9IGdl
dFNldERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ZGF0YS0+Y2xlYXIoKTsKQEAgLTEwOSw3ICsxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTU2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0
YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKSkpOwpAQCAtMTE3LDcgKzExOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldDo6U2V0RGF0YSogZGF0YSA9IGdl
dFNldERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSBjYWxsQmFjayA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CkBAIC0xNDcsNyArMTQ5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JFYWNoKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFBy
b3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0g
Z2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTU2V0
OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRh
LT5jb250YWlucyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0xNTUs
NyArMTU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0
UHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRh
ID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpT
U2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGRh
dGEtPnNpemUoY2FsbEZyYW1lKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IGE3MzI0YjRhZGYxZGU4NzdiNzQ2MDY4ZGE1NDEzZGFiZjUzYjU1NGMuLmU4ZmMwZTMyMGI1
Y2EzYWUxMzNiYThmNDZhYTU4ZWM1OWM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTIzMyw3ICsyMzMsNiBAQCBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIo
RXhlY3V0YWJsZUFsbG9jYXRvciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKICAgICB1bmxpbmtlZEV2
YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5VGFibGVT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7Ci0gICAgbWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIE1hcERhdGE6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB3ZWFrTWFwRGF0YVN0
cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA5NGM0
ODNiNzIzNjAyMjgzZWQ0MGRhNTVkZWQyOTU1M2EwMzE3ODI1Li43ZTcxZGVmOWM3YTUwZjk3ZmNl
NmExYjk5N2I2MDdjNmFhZmI5YzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAg
LTI2OCw3ICsyNjgsNiBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxW
TT4gewogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVy
ZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7Ci0gICAg
U3Ryb25nPFN0cnVjdHVyZT4gbWFwRGF0YVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiB3ZWFrTWFwRGF0YVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oIGIvU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmEzYWNhNjJkNDM5MmQyNWI2NjQyMjYzODc5MGRjNzQ3MmYyMGQxZWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01h
cERhdGFJbmxpbmVzLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX01hcERh
dGFJbmxpaW5lc19oCisjZGVmaW5lIFdlYkNvcmVfRldEX01hcERhdGFJbmxpaW5lc19oCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvTWFwRGF0YUlubGluZXMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5k
ZXggZGNhNTYwM2Y5YzM5OTYxODMzOGFmN2UwZGIzMWFkZjEwY2I2YjZmOS4uNjBkZjYwZmE0Zjk3
ZTBiNGQ5ODFlZTAyNjlmMWE4MzlhMzhhMGI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC02NCw2ICs2NCw3IEBA
CiAjaW5jbHVkZSA8cnVudGltZS9KU1NldC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTWFwRGF0YS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
TWFwRGF0YUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvUmVnRXhwLmg+CkBAIC04Nyw3ICs4OCw4IEBACiAKIGVudW0gV2Fsa2VyU3RhdGUgeyBTdGF0
ZVVua25vd24sIEFycmF5U3RhcnRTdGF0ZSwgQXJyYXlTdGFydFZpc2l0TWVtYmVyLCBBcnJheUVu
ZFZpc2l0TWVtYmVyLAogICAgIE9iamVjdFN0YXJ0U3RhdGUsIE9iamVjdFN0YXJ0VmlzaXRNZW1i
ZXIsIE9iamVjdEVuZFZpc2l0TWVtYmVyLAotICAgIE1hcERhdGFTdGFydFZpc2l0RW50cnksIE1h
cERhdGFFbmRWaXNpdEtleSwgTWFwRGF0YUVuZFZpc2l0VmFsdWUgfTsKKyAgICBNYXBEYXRhU3Rh
cnRWaXNpdEVudHJ5LCBNYXBEYXRhRW5kVmlzaXRLZXksIE1hcERhdGFFbmRWaXNpdFZhbHVlLAor
ICAgIFNldERhdGFTdGFydFZpc2l0RW50cnksIFNldERhdGFFbmRWaXNpdEtleSB9OwogCiAvLyBU
aGVzZSBjYW4ndCBiZSByZW9yZGVyZWQsIGFuZCBhbnkgbmV3IHR5cGVzIG11c3QgYmUgYWRkZWQg
dG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogZW51bSBTZXJpYWxpemF0aW9uVGFnIHsKQEAgLTEyMiw4
ICsxMjQsOSBAQCBlbnVtIFNlcmlhbGl6YXRpb25UYWcgewogICAgIFNldE9iamVjdFRhZyA9IDI5
LAogICAgIE1hcE9iamVjdFRhZyA9IDMwLAogICAgIE5vbk1hcFByb3BlcnRpZXNUYWcgPSAzMSwK
KyAgICBOb25TZXRQcm9wZXJ0aWVzVGFnID0gMzIsCiAjaWYgRU5BQkxFKFNVQlRMRV9DUllQVE8p
Ci0gICAgQ3J5cHRvS2V5VGFnID0gMzIsCisgICAgQ3J5cHRvS2V5VGFnID0gMzMsCiAjZW5kaWYK
ICAgICBFcnJvclRhZyA9IDI1NQogfTsKQEAgLTI2Niw5ICsyNjksMTAgQEAgc3RhdGljIHVuc2ln
bmVkIGNvdW50VXNhZ2VzKENyeXB0b0tleVVzYWdlIHVzYWdlcykKICAqCiAgKiBNYXAgOi0gTWFw
T2JqZWN0VGFnIE1hcERhdGEKICAqCi0gKiBTZXQgOi0gU2V0T2JqZWN0VGFnIE1hcERhdGEKKyAq
IFNldCA6LSBTZXRPYmplY3RUYWcgU2V0RGF0YQogICoKICAqIE1hcERhdGEgOi0gKDxrZXk6VmFs
dWU+PHZhbHVlOlZhbHVlPikgTm9uTWFwUHJvcGVydGllc1RhZyAoPG5hbWU6U3RyaW5nRGF0YT48
dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZworICogU2V0RGF0YSA6LSAoPGtleTpWYWx1ZT4p
IE5vblNldFByb3BlcnRpZXNUYWcgKDxuYW1lOlN0cmluZ0RhdGE+PHZhbHVlOlZhbHVlPikqIFRl
cm1pbmF0b3JUYWcKICAqCiAgKiBUZXJtaW5hbCA6LQogICogICAgICBVbmRlZmluZWRUYWcKQEAg
LTEyMTYsOSArMTIyMCwxMSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6
ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTY+IGxlbmd0
aFN0YWNrOwogICAgIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwgMTY+IHByb3BlcnR5U3RhY2s7
CiAgICAgVmVjdG9yPEpTT2JqZWN0KiwgMzI+IGlucHV0T2JqZWN0U3RhY2s7Ci0gICAgVmVjdG9y
PE1hcERhdGEqLCA0PiBtYXBEYXRhU3RhY2s7Ci0gICAgVmVjdG9yPE1hcERhdGE6OmNvbnN0X2l0
ZXJhdG9yLCA0PiBpdGVyYXRvclN0YWNrOwotICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBpdGVyYXRv
clZhbHVlU3RhY2s7CisgICAgVmVjdG9yPEpTTWFwKiwgND4gbWFwU3RhY2s7CisgICAgVmVjdG9y
PEpTTWFwOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvciwgND4gbWFwSXRlcmF0b3JTdGFjazsKKyAg
ICBWZWN0b3I8SlNTZXQqLCA0PiBzZXRTdGFjazsKKyAgICBWZWN0b3I8SlNTZXQ6OlNldERhdGE6
OmNvbnN0X2l0ZXJhdG9yLCA0PiBzZXRJdGVyYXRvclN0YWNrOworICAgIFZlY3RvcjxKU1ZhbHVl
LCA0PiBtYXBJdGVyYXRvclZhbHVlU3RhY2s7CiAgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4g
c3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKICAgICBK
U1ZhbHVlIGluVmFsdWUgPSBpbjsKQEAgLTEzNTAsMzYgKzEzNTYsMjEgQEAgU2VyaWFsaXphdGlv
blJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAgICAg
ICAgICAgICAgICBKU01hcCogaW5NYXAgPSBqc0Nhc3Q8SlNNYXAqPihpblZhbHVlKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXJ0TWFwKGluTWFwKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IGluTWFwLT5tYXBEYXRhKCk7
Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBpdGVy
YXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5iZWdpbigpKTsKKyAgICAgICAgICAgICAgICBtX2dj
QnVmZmVyLmFwcGVuZChpbk1hcCk7CisgICAgICAgICAgICAgICAgbWFwU3RhY2suYXBwZW5kKGlu
TWFwKTsKKyAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLmFwcGVuZChpbk1hcC0+bWFw
RGF0YSgpLT5iZWdpbigpKTsKICAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVu
ZChpbk1hcCk7CiAgICAgICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5Owog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0U3RhcnRTdGF0ZTogewotICAgICAgICAgICAg
ICAgIEFTU0VSVChpblZhbHVlLmlzT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1
dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTdGFja092ZXJmbG93RXJyb3I7Ci0gICAgICAgICAgICAgICAgSlNT
ZXQqIGluU2V0ID0ganNDYXN0PEpTU2V0Kj4oaW5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFzdGFydFNldChpblNldCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBpblNldC0+bWFwRGF0YSgpOwotICAgICAgICAgICAg
ICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG1hcERhdGEpOwotICAgICAgICAgICAgICAgIG1hcERhdGFT
dGFjay5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3JTdGFjay5hcHBl
bmQobWFwRGF0YS0+YmVnaW4oKSk7Ci0gICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5h
cHBlbmQoaW5TZXQpOwotICAgICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRy
eTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1hcERhdGFTdGFydFZpc2l0RW50cnk6CiAg
ICAgICAgICAgICBjYXNlIE1hcERhdGFTdGFydFZpc2l0RW50cnk6IHsKLSAgICAgICAgICAgICAg
ICBNYXBEYXRhOjpjb25zdF9pdGVyYXRvciYgcHRyID0gaXRlcmF0b3JTdGFjay5sYXN0KCk7Ci0g
ICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG1hcERhdGFTdGFjay5sYXN0KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHB0ciA9PSBtYXBEYXRhLT5lbmQoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAg
bWFwRGF0YVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBKU01hcDo6TWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3ImIHB0ciA9IG1hcEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAg
ICAgICAgICAgIEpTTWFwKiBtYXAgPSBtYXBTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAg
aWYgKHB0ciA9PSBtYXAtPm1hcERhdGEoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1hcFN0
YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNE
eW5hbWljQ2FzdDxKU1NldCo+KG9iamVjdCkgfHwganNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVj
dCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KG9i
amVjdCkpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0
eU5hbWVBcnJheShtX2V4ZWMpKTsKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNr
Lmxhc3QoKSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CiAgICAgICAgICAgICAgICAgICAg
IHdyaXRlKE5vbk1hcFByb3BlcnRpZXNUYWcpOwpAQCAtMTM4OCwyMiArMTM3OSw2MCBAQCBTZXJp
YWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGlu
KQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpblZhbHVlID0gcHRyLmtleSgp
OwogICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKHB0ci52YWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICBpdGVyYXRvclZhbHVlU3RhY2suYXBwZW5kKHB0ci52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICBtYXBJdGVyYXRvclZhbHVlU3RhY2suYXBwZW5kKHB0ci52YWx1ZSgpKTsKICAg
ICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRLZXkpOwogICAg
ICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRLZXk6IHsKLSAgICAgICAgICAgICAgICBpblZhbHVlID0g
aXRlcmF0b3JWYWx1ZVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvclZhbHVl
U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIGluVmFsdWUgPSBtYXBJdGVyYXRv
clZhbHVlU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yVmFsdWVTdGFj
ay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoTWFwRGF0
YUVuZFZpc2l0VmFsdWUpOwogICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRWYWx1ZTogewotICAg
ICAgICAgICAgICAgIGlmIChpdGVyYXRvclN0YWNrLmxhc3QoKSAhPSBtYXBEYXRhU3RhY2subGFz
dCgpLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgKytpdGVyYXRvclN0YWNrLmxhc3QoKTsK
KyAgICAgICAgICAgICAgICBpZiAobWFwSXRlcmF0b3JTdGFjay5sYXN0KCkgIT0gbWFwU3RhY2su
bGFzdCgpLT5tYXBEYXRhKCktPmVuZCgpKQorICAgICAgICAgICAgICAgICAgICArK21hcEl0ZXJh
dG9yU3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRF
bnRyeTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgc2V0U3RhcnRTdGF0ZTogeworICAg
ICAgICAgICAgICAgIEFTU0VSVChpblZhbHVlLmlzT2JqZWN0KCkpOworICAgICAgICAgICAgICAg
IGlmIChpbnB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja092ZXJmbG93RXJyb3I7CisgICAgICAgICAg
ICAgICAgSlNTZXQqIGluU2V0ID0ganNDYXN0PEpTU2V0Kj4oaW5WYWx1ZSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFzdGFydFNldChpblNldCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKGluU2V0KTsKKyAgICAgICAgICAgICAg
ICBzZXRTdGFjay5hcHBlbmQoaW5TZXQpOworICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3Rh
Y2suYXBwZW5kKGluU2V0LT5zZXREYXRhKCktPmJlZ2luKCkpOworICAgICAgICAgICAgICAgIGlu
cHV0T2JqZWN0U3RhY2suYXBwZW5kKGluU2V0KTsKKyAgICAgICAgICAgICAgICBnb3RvIHNldERh
dGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXREYXRhU3Rh
cnRWaXNpdEVudHJ5OgorICAgICAgICAgICAgY2FzZSBTZXREYXRhU3RhcnRWaXNpdEVudHJ5OiB7
CisgICAgICAgICAgICAgICAgSlNTZXQ6OlNldERhdGE6OmNvbnN0X2l0ZXJhdG9yJiBwdHIgPSBz
ZXRJdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBKU1NldCogc2V0ID0gc2V0
U3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChwdHIgPT0gc2V0LT5zZXREYXRhKCkt
PmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFz
dCgpOworICAgICAgICAgICAgICAgICAgICBzZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihvYmplY3Qp
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1l
QXJyYXkobV9leGVjKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0
KCksIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAgICB3cml0
ZShOb25TZXRQcm9wZXJ0aWVzVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5h
cHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJl
cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHB0ci5rZXko
KTsKKyAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChTZXREYXRhRW5kVmlzaXRLZXkp
OworICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBTZXREYXRhRW5kVmlzaXRLZXk6IHsKKyAgICAgICAgICAgICAgICBpZiAo
c2V0SXRlcmF0b3JTdGFjay5sYXN0KCkgIT0gc2V0U3RhY2subGFzdCgpLT5zZXREYXRhKCktPmVu
ZCgpKQorICAgICAgICAgICAgICAgICAgICArK3NldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAg
ICAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgc3RhdGVVbmtub3duOgogICAgICAgICAgICAgY2FzZSBTdGF0ZVVua25v
d246IHsKICAgICAgICAgICAgICAgICBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSB0ZXJtaW5hbENv
ZGUgPSBTdWNjZXNzZnVsbHlDb21wbGV0ZWQ7CkBAIC0yMzYwLDkgKzIzODksMTAgQEAgY2xhc3Mg
Q2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ym9vbCBjb25zdW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpCisgICAgdGVtcGxhdGU8
U2VyaWFsaXphdGlvblRhZyBUYWc+CisgICAgYm9vbCBjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJt
aW5hdGlvbklmUG9zc2libGUoKQogICAgIHsKLSAgICAgICAgaWYgKHJlYWRUYWcoKSA9PSBOb25N
YXBQcm9wZXJ0aWVzVGFnKQorICAgICAgICBpZiAocmVhZFRhZygpID09IFRhZykKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICBtX3B0ci0tOwogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMzg0LDggKzI0MTQsOSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlh
bGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNr
OwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gcHJvcGVydHlOYW1lU3RhY2s7CiAgICAgVmVj
dG9yPEpTT2JqZWN0KiwgMzI+IG91dHB1dE9iamVjdFN0YWNrOwotICAgIFZlY3RvcjxKU1ZhbHVl
LCA0PiBrZXlTdGFjazsKLSAgICBWZWN0b3I8TWFwRGF0YSosIDQ+IG1hcERhdGFTdGFjazsKKyAg
ICBWZWN0b3I8SlNWYWx1ZSwgND4gbWFwS2V5U3RhY2s7CisgICAgVmVjdG9yPEpTTWFwKiwgND4g
bWFwU3RhY2s7CisgICAgVmVjdG9yPEpTU2V0KiwgND4gc2V0U3RhY2s7CiAgICAgVmVjdG9yPFdh
bGtlclN0YXRlLCAxNj4gc3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0ZSBzdGF0ZSA9IFN0YXRl
VW5rbm93bjsKICAgICBKU1ZhbHVlIG91dFZhbHVlOwpAQCAtMjQ3OCw0MSArMjUwOSw1NCBAQCBE
ZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAg
ICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9i
YWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5k
KG1hcCk7CiAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQobWFwKTsKLSAgICAg
ICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBtYXAtPm1hcERhdGEoKTsKLSAgICAgICAgICAgIG1h
cERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFy
dFZpc2l0RW50cnk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0ZTogewot
ICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJS
ZWN1cnNpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUo
KSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6
Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKHNldCk7Ci0gICAgICAgICAgICBvdXRwdXRPYmpl
Y3RTdGFjay5hcHBlbmQoc2V0KTsKLSAgICAgICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBzZXQt
Pm1hcERhdGEoKTsKLSAgICAgICAgICAgIG1hcERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7Cisg
ICAgICAgICAgICBtYXBTdGFjay5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIGdvdG8gbWFwRGF0
YVN0YXJ0VmlzaXRFbnRyeTsKICAgICAgICAgfQogICAgICAgICBtYXBEYXRhU3RhcnRWaXNpdEVu
dHJ5OgogICAgICAgICBjYXNlIE1hcERhdGFTdGFydFZpc2l0RW50cnk6IHsKLSAgICAgICAgICAg
IGlmIChjb25zdW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgbWFwRGF0YVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGlmIChjb25zdW1l
Q29sbGVjdGlvbkRhdGFUZXJtaW5hdGlvbklmUG9zc2libGU8Tm9uTWFwUHJvcGVydGllc1RhZz4o
KSkgeworICAgICAgICAgICAgICAgIG1hcFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
ICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRLZXkpOwogICAgICAgICAgICAg
Z290byBzdGF0ZVVua25vd247CiAgICAgICAgIH0KLQogICAgICAgICBjYXNlIE1hcERhdGFFbmRW
aXNpdEtleTogewotICAgICAgICAgICAga2V5U3RhY2suYXBwZW5kKG91dFZhbHVlKTsKKyAgICAg
ICAgICAgIG1hcEtleVN0YWNrLmFwcGVuZChvdXRWYWx1ZSk7CiAgICAgICAgICAgICBzdGF0ZVN0
YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRWYWx1ZSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRl
VW5rbm93bjsKICAgICAgICAgfQotCiAgICAgICAgIGNhc2UgTWFwRGF0YUVuZFZpc2l0VmFsdWU6
IHsKLSAgICAgICAgICAgIG1hcERhdGFTdGFjay5sYXN0KCktPnNldChtX2V4ZWMsIGtleVN0YWNr
Lmxhc3QoKSwgb3V0VmFsdWUpOwotICAgICAgICAgICAga2V5U3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgSlNNYXAqIG1hcCA9IG1hcFN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgIG1h
cC0+bWFwRGF0YSgpLT5zZXQobV9leGVjLCBtYXAsIG1hcEtleVN0YWNrLmxhc3QoKSwgb3V0VmFs
dWUpOworICAgICAgICAgICAgbWFwS2V5U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAg
Z290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICB9CisKKyAgICAgICAgc2V0T2Jq
ZWN0U3RhcnRTdGF0ZTogeworICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUo
KSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKKyAgICAgICAgICAgIEpT
U2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNl
dFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKHNldCk7CisgICAg
ICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAgIHNldFN0
YWNrLmFwcGVuZChzZXQpOworICAgICAgICAgICAgZ290byBzZXREYXRhU3RhcnRWaXNpdEVudHJ5
OworICAgICAgICB9CisgICAgICAgIHNldERhdGFTdGFydFZpc2l0RW50cnk6CisgICAgICAgIGNh
c2UgU2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTogeworICAgICAgICAgICAgaWYgKGNvbnN1bWVDb2xs
ZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZTxOb25TZXRQcm9wZXJ0aWVzVGFnPigpKSB7
CisgICAgICAgICAgICAgICAgc2V0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAg
IGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHN0YXRlU3RhY2suYXBwZW5kKFNldERhdGFFbmRWaXNpdEtleSk7CisgICAgICAgICAgICBnb3Rv
IHN0YXRlVW5rbm93bjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFNldERhdGFFbmRWaXNpdEtl
eTogeworICAgICAgICAgICAgSlNTZXQqIHNldCA9IHNldFN0YWNrLmxhc3QoKTsKKyAgICAgICAg
ICAgIHNldC0+c2V0RGF0YSgpLT5zZXQobV9leGVjLCBzZXQsIG91dFZhbHVlLCBvdXRWYWx1ZSk7
CisgICAgICAgICAgICBnb3RvIHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgIH0KKwog
ICAgICAgICBzdGF0ZVVua25vd246CiAgICAgICAgIGNhc2UgU3RhdGVVbmtub3duOgogICAgICAg
ICAgICAgaWYgKEpTVmFsdWUgdGVybWluYWwgPSByZWFkVGVybWluYWwoKSkgewpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdk
NGI1OGU0OTRkZDVjYWI4MDliNDgwMGE5NGNjYzZmNTk5ZDIwMjEuLjc3NDMyZTMwMGY3MWFjMWE4
NTBhMzYyYWNkYTU0OGFkMzhkYmJhZjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wMy0x
MSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBJbnRl
Z3JhdGUgTWFwRGF0YSBpbnRvIEpTTWFwIGFuZCBKU1NldAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3Jp
cHQtdmFsdWUuaHRtbDoKKwogMjAxNS0wMy0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWZhY3RvciBtZWRpYSBjb250cm9scyBjb2Rl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQt
dmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12
YWx1ZS5odG1sCmluZGV4IDQzNWQwN2ZiYmFmNjcwMDk4YjkyZGM4NWJjMWU2NWJkYmJkODliMDMu
LmZiMzEwMzExNGI1NWVkOGI3NDU0YmU2OGJiODcwNzhiNTNiNmY3OTggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sCkBA
IC00MTUsMTYgKzQxNSwxNCBAQAogCiB0ZXN0U2VyaWFsaXphdGlvbihzZXRPYmplY3QsCiBbCi0g
ICAgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNywgMHgwNywgMHgwYSwgMHgwMCwg
Ci0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzZiwgMHgwYSwgMHgw
MCwgCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzZiwgMHgxMywg
MHgwMCwgCi0gICAgMHgxMywgMHgwMCwgMHgxMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2
MiwgMHgwMCwgCi0gICAgMHg2MSwgMHgwMCwgMHg3MiwgMHgwMCwgMHgxMCwgMHhmZSwgMHhmZiwg
MHhmZiwgMHhmZiwgCi0gICAgMHgwMCwgMHgxYSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHgw
MCwgMHgxMywgMHgwMSwgCi0gICAgMHgxZiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NSwg
MHgwMCwgMHg3OCwgMHgwMCwgCi0gICAgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgw
MCwgMHg2NCwgMHgwMCwgMHg2ZiwgCi0gICAgMHgwMCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhmZiwg
MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgCi0gICAgMHhmZgorICAgIDB4MDUsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MWQsIDB4MDcsIDB4MGEsIDB4MDAsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MTMsIDB4MDAsIDB4MTAsIAorICAgIDB4MDMsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzIsIAorICAgIDB4MDAsIDB4
MWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDcsIAorICAgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzgsIDB4MDAsIDB4NzAsIDB4MDAsIAorICAgIDB4
NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDIsIAorICAg
IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKwogXSk7CiAK
IHRlc3RTZXJpYWxpemF0aW9uKGZ1bmN0aW9uKCl7fSwgW10sIG51bGwsIERPTUV4Y2VwdGlvbi5E
QVRBX0NMT05FX0VSUik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248422</attachid>
            <date>2015-03-11 09:22:09 -0700</date>
            <delta_ts>2015-03-11 09:27:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150312012142.patch</filename>
            <type>text/plain</type>
            <size>78395</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
M2Q4MjQ4YzYzNTAxYzU3MzJhMzY5MjFmNzhlM2NjNTYxYWFkYmQ5Li5jMTE2NTJlNDY0M2E1MzJj
ZmM2NjFiMTYzMWUyYjA2YjJmOGRiZjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzcgQEAKKzIwMTUtMDMtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggZml4ZXMgbWlzc2luZyBkZXN0
cm95IGZ1bmN0aW9ucworICAgICAgICBpbiBKU01hcEl0ZXJhdG9yIGFuZCBKU1NldEl0ZXJhdG9y
LgorICAgICAgICBUaGV5IGFyZSBuZWVkZWQgYmVjYXVzZSBNYXBEYXRhOjpjb25zdF9pdGVyYXRv
ciBpcyBhIG5vbi10cml2aWFsIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNN
YXA6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU01hcDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OkpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmg6Cisg
ICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVu
dHJ5Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNN
YXA6OkVudHJ5OjpzZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpKU01hcDo6bWFwRGF0YSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0
ZXJhdG9yOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9KU1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50
cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAo
SlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6
RW50cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6c2V0VmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6
OnNldERhdGEpOgorICAgICAgICAoSlNDOjpKU1NldDo6SlNTZXQpOgorICAgICAgICAoSlNDOjpK
U1NldDo6bWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
SlNTZXRJdGVyYXRvcjo6ZGVzdHJveSk6CisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9y
Lmg6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OkpTU2V0SXRlcmF0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwRGF0YS5jcHA6CisgICAgICAgIChKU0M6Ok1hcERhdGE6Ok1hcERhdGEp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpmaW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFwRGF0YTo6Y29udGFpbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjphZGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpzZXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXBEYXRhOjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZXBsYWNl
QW5kUGFja0JhY2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OnJl
cGxhY2VCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1
cmVTcGFjZUZvckFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OnZpc2l0
Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9NYXBEYXRhLmg6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
Ojpjb25zdF9pdGVyYXRvcjo6a2V5KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0
X2l0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCk6CisgICAgICAgIChK
U0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OktleVR5cGU6OktleVR5cGUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxF
bnRyeT46OmNvbnN0X2l0ZXJhdG9yOjppbnRlcm5hbEluY3JlbWVudCk6CisgICAgICAgIChKU0M6
Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmVuc3VyZVNsb3QpOgorICAgICAg
ICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRv
cik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5j
b25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3Rf
aXRlcmF0b3I6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6PSk6CisgICAgICAgIChKU0M6Ok1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6dmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1
Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpzaXplKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmVuc3VyZVNsb3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJh
dG9yOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL01hcERhdGFJbmxp
bmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEu
Y3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQpOgorICAgICAgICAo
SlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6TWFwRGF0
YUltcGw8RW50cnk+OjphZGQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnNl
dCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpT
Qzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1h
cERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRNYXBEYXRhKToKKyAgICAgICAgKEpTQzo6bWFw
UHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAg
ICAgICAoSlNDOjptYXBQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9G
dW5jR2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6
bWFwUHJvdG9GdW5jU2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAg
ICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRTZXREYXRh
KToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQWRkKToKKyAgICAgICAgKEpTQzo6c2V0UHJv
dG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNEZWxldGUpOgorICAgICAg
ICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5j
SGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6Omdl
dE1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNS0wMy0xMCAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSBpbnN0ZWFkIG9mICh1bnNpZ25lZCktMS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAxZTBkZmMzZWUwYzcwYjZkZmJhZDBjMGRjNzQwODg1MzJkOTdkOWE1Li5iZmZkMjcyMWU3
ODBkMzk1MTBiNjk1NzA4MTgxMDZkYzBiMzgwOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTUtMDMtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisK
KyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJp
YWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OmNvbnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBvc3NpYmxl
KTogRGVsZXRlZC4KKwogMjAxNS0wMy0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWZhY3RvciBtZWRpYSBjb250cm9scyBjb2RlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzE0ZTY1OGQwODk2OGQyODdkZDdk
MzNlYjkyMDUzYjkyZDE2OTczYS4uOTNhNjFmZDc3ZTJjZGE4NTY0ZDJkZjQ0MTc5NWY0YzBkMWM2
OGU1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTA1LDcgKzUwNSw2
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwCiAgICAgcnVudGltZS9Mb29rdXAuY3BwCiAgICAgcnVudGltZS9NYXBDb25z
dHJ1Y3Rvci5jcHAKLSAgICBydW50aW1lL01hcERhdGEuY3BwCiAgICAgcnVudGltZS9NYXBJdGVy
YXRvckNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagppbmRleCA3OTQzNzVmZTUxNzgxODgwODAzN2M5ODc3NTU1ZjMzNDVkZmM4ZjEz
Li4wMDE1M2NhZTFhYjUyNWQ5OGUyMzQxZjFhMzFkZDk0Yjc3OWI4NTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTc3Miw3ICs3NzIsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxMaXRlcmFsUGFyc2VyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTG9va3VwLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwUHJvdG90eXBlLmNwcCIgLz4K
QEAgLTE1NzIsNiArMTU3MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XExvb2t1cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25z
dHJ1Y3Rvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRh
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVz
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yQ29u
c3RydWN0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRl
cmF0b3JQcm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TWFwUHJvdG90eXBlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMKaW5kZXggNWY2YTFmNGJkYzkxOWU1ZmZlMGFlOWNlY2U4ODk5MWZjMWE1
MDE3Zi4uN2Y2NzE2YzM5NzgxZjFhYjIxYjIwODg2OTk5YzU4NGRmZWRlZjcwYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNzI5LDkg
KzcyOSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlw
ZS5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGEuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25zdHJ1Y3Rvci5jcHAiPgogICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0zMzEwLDYgKzMzMDcsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmgiPgogICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNldFByb3RvdHlwZS5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
OWExOTZmNjYwOTVmY2QxMWEzMGJkZjUyN2EwOGE0Y2Q5ZGZmMmI2Li41NjllYWQzZDcyMjZhYWZl
ZDE0NTJjYzFiNjMwNDMyNzRiMjZmMzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTMzMCw4ICsxMzMwLDggQEAKIAkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNl
ck1vZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2
QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2NDExRDE2
NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENo
ZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1MDdENDE3Q0JDNkZEMDAxMUY2RTcg
LyogTWFwRGF0YS5jcHAgKi87IH07CiAJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1
MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBBNjQ0MTUxOTQyMEE2QzYxQUQxODgyRSAvKiBN
YXBEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTkzRDQzQ0NBMEJCRTA2RDg5QzU5NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1
NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNw
aWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAq
LzsgfTsKIAkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1
M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMwMzgsOCArMzAzOCw4
IEBACiAJCUE3N0YxODFGMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1v
ZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE3ODUwN0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0ODEsOCArNDQ4
MSw4IEBACiAJCQkJRjY5MkE4NjkwMjU1NTk3RDAxRkY2MEY3IC8qIExvb2t1cC5oICovLAogCQkJ
CUE3MDA4NzM3MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJ
QTcwMDg3MzgxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggKi8sCi0JCQkJQTc4
NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwICovLAogCQkJCUE3ODUwN0Q1MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8sCisJCQkJNTkzRDQzQ0NBMEJCRTA2RDg5QzU5
NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi8sCiAJCQkJQTc0REVGOEIxODJEOTkxNDAwNTIyQzIy
IC8qIE1hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3NERFRjhDMTgyRDk5MTQw
MDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQTc0REVGOEQxODJE
OTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCAqLywKQEAgLTYxMDMsNiAr
NjEwMyw3IEBACiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAv
KiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUg
LyogTWFwRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjkyMTgyRDk5MTQw
MDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzRERUY5NDE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtNzI0OCw3ICs3MjQ5LDYgQEAKIAkJCQlBN0E0QUUwODE3OTczQjI2
MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUE3ODUwN0Q2MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkxMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJ
dGVyYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5
MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCmluZGV4IGMwOGE5NzA4
YmU0NWE5MzQ5NTUyMzRiMzA1NzY2MGQ3ODE2NzUwZjQuLmI2OGU5YWYyMjM5OGZhMTRjNTA5Nzky
YmVlMDFjYmE0MjcyNDc4MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5j
cHAKQEAgLTI3LDI2ICsyNywyOSBAQAogI2luY2x1ZGUgIkpTTWFwLmgiCiAKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBE
YXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNvbnN0IENs
YXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PEpTTWFwKj4oY2VsbCktPn5KU01hcCgpOworfQorCiB2b2lkIEpT
TWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU01hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBKU01hcDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQordm9pZCBKU01hcDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGws
IENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNy
ZWF0ZSh2bSkpOworICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9r
ZW4pOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9y
ZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmgKaW5kZXggNDMxNTI3NGRlM2U5ODU3YzViYmUwODM1MTM3NTY5YTc3MTY0NmUwNS4uYWE0
MGNlNWMyNzNlNzEyZWJjMDVjYTAzZjkxMDFmYmU1YzIyNDZiOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcC5oCkBAIC0yNiwxNSArMjYsNTggQEAKICNpZm5kZWYgSlNNYXBfaAog
I2RlZmluZSBKU01hcF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4
cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAgLy8g
ZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAgICBw
cml2YXRlOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKKyAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVy
LCB2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5PiBNYXBE
YXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApAQCAtNTUsMTkgKzk4LDIwIEBAIGNs
YXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gY3Jl
YXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgTWFwRGF0YSogbWFwRGF0
YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAgIE1hcERhdGEqIG1hcERhdGEoKSB7
IHJldHVybiAmbV9tYXBEYXRhOyB9CiAKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAg
ICwgbV9tYXBEYXRhKCkKICAgICB7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYs
IENvcHlUb2tlbik7CiAKLSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9tYXBEYXRhOworICAg
IE1hcERhdGEgbV9tYXBEYXRhOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAppbmRleCBjMTY3YWNiY2YzYTNhOWI3YzRjZTVjYTcy
OGEzODE1Y2JiOTZjYmJlLi5lOWQ3ZDQyZmI0ZTM4ZWQzMTdjZDYyYmYwNjQyY2MxMTVmMWU2M2Yz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cApAQCAtNDAsMTUgKzQwLDE5IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU01hcCogaXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1f
aXRlcmF0ZWRPYmplY3REYXRhLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEo
KSk7Cit9CisKK3ZvaWQgSlNNYXBJdGVyYXRvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKS0+fkpTTWFwSXRlcmF0b3IoKTsKIH0KIAog
dm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNYXBJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U01hcEl0ZXJhdG9yKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOyAgICAgICAgCisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmpl
Y3REYXRhKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXApOwogfQogCiBK
U1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5oCmluZGV4IDYzZGQ1ZThiMTFmOTZhNDQ2MWFkZDVjZWEzYzQ0N2Fk
YzYwMDQwY2MuLjU4ZjFhYmZhYTA1MWJkZWM3ODIzN2Y1OTVmOTU4YTZhZmE4OWE4YWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKQEAgLTg3LDEz
ICs4NywxMyBAQCBjbGFzcyBKU01hcEl0ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0
ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
TWFwPiBtX21hcDsKLSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERh
dGE7Ci0gICAgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU01hcDo6
TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5k
IG1fa2luZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAppbmRl
eCAzYzFkMTI0YmM1NjJkYjZkYzFiYTAwYzk2M2JhNTQ5M2U2MDM3Mzc3Li5kYWE5Mjg0MGQ1YmMw
OTYyMjY4NWUxODAwNTJmODVlMzAxZDM3YWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZXQuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKIAogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1
ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCkBAIC0zNSwxNyArMzUsMjEgQEAKIAogY29u
c3QgQ2xhc3NJbmZvIEpTU2V0OjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTU2V0KSB9OwogCit2b2lkIEpTU2V0OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+fkpTU2V0KCk7Cit9CisKIHZv
aWQgSlNTZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIEpTU2V0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fbWFwRGF0YSk7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0
RGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCi12b2lkIEpTU2V0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit2b2lkIEpTU2V0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCog
Y2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKIHsKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgbV9tYXBEYXRhLnNldCh2bSwgdGhpcywgTWFwRGF0
YTo6Y3JlYXRlKHZtKSk7CisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9y
LCB0b2tlbik7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2lu
Z1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmgKaW5kZXggZmMwYWEzMGZiOTU3Y2I4OWY5NWU1NjdlZjE2MGNmODE1MDNlMjUyZS4u
MTEwNGJjZmZhYTRiNWMwYjUwMDEwYTMxNTczMDRlN2U1ODk4YzQyNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldC5oCkBAIC0yNiwxNSArMjYsNTUgQEAKICNpZm5kZWYgSlNTZXRf
aAogI2RlZmluZSBKU1NldF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CitjbGFzcyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBK
U0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25z
IGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAg
Ly8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisKKyAgICBw
dWJsaWM6CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fa2V5OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJm1fa2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
a2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldFZh
bHVlKFZNJiwgY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gRG8gbm90aGluZy4KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2tleS5jbGVhcigpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnk+IFNldERhdGE7CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCkBAIC01NSwxOSArOTUsMjAgQEAgY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJl
KTsKICAgICB9CiAKLSAgICBNYXBEYXRhKiBtYXBEYXRhKCkgeyByZXR1cm4gbV9tYXBEYXRhLmdl
dCgpOyB9CisgICAgU2V0RGF0YSogc2V0RGF0YSgpIHsgcmV0dXJuICZtX3NldERhdGE7IH0KIAog
cHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3NldERhdGEoKQogICAgIHsKICAg
ICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgV3JpdGVCYXJy
aWVyPE1hcERhdGE+IG1fbWFwRGF0YTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3Jl
KEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIFNldERhdGEgbV9zZXRE
YXRhOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcAppbmRleCAyZmMyOTg5MDE3Njg3M2U0NGJiOTMxNTI0YzVmMDNlZGEwNGYzNzVl
Li41ZWNhYzEyZDljNGNhMjI3NWVkZGFkOWU3ODk3ODU0OGM5N2U3YTRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQw
LDE5IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1NldCog
aXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1f
c2V0LnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3RE
YXRhLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7CiB9CiAKIHZvaWQg
SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTU2V0SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJ
dGVyYXRvcio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsgICAgICAgIAorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0
YSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKK30KKwordm9pZCBK
U1NldEl0ZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXRJ
dGVyYXRvcio+KGNlbGwpLT5+SlNTZXRJdGVyYXRvcigpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRl
cmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1Zh
bHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXRJdGVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5oCmluZGV4IDljNzBjMjZlNTBhMmI1ZDk1ZThkYzgxZGZkMTlkYWFkNDI1MDdiZDcuLjZlNmMz
ODRkNWQzMjk2NjkzY2MyN2ExZDgwZmY0ZjgxOGY0ZDcyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKQEAgLTgwLDE4ICs4MCwxOCBAQCBjbGFz
cyBKU1NldEl0ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHByaXZhdGU6
CiAgICAgSlNTZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCog
aXRlcmF0ZWRPYmplY3QsIFNldEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bWFwRGF0
YSgpLT5iZWdpbigpKQorICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPnNldERh
dGEoKS0+YmVnaW4oKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNTZXQqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1
ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBXcml0ZUJh
cnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERhdGE7Ci0gICAgTWFwRGF0YTo6Y29uc3Rf
aXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU1NldDo6U2V0RGF0YTo6Y29uc3RfaXRlcmF0b3Ig
bV9pdGVyYXRvcjsKICAgICBTZXRJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKaW5kZXggYjA1NjkxYzg1MmFiMmZkMmJi
M2U1NDdhNGNkYzA5ZGUzNmNiMTdmZS4uNDFkODExNmQyMTU3ZjcyYmYzNDkzMTVkZThlOGEzYTc3
MDQxNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0
YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKQEAg
LTIzLDI1MiArMjMsMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCi0KLSNpbmNsdWRl
ICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9Dcnlw
dG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBNYXBEYXRhOjpzX2luZm8g
PSB7ICJNYXBEYXRhIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNYXBEYXRhKSB9OwotCi1z
dGF0aWMgY29uc3QgaW50MzJfdCBtaW5pbXVtTWFwU2l6ZSA9IDg7Ci0KLU1hcERhdGE6Ok1hcERh
dGEoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0ubWFwRGF0YVN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAsIG1fY2FwYWNpdHkoMCkKLSAgICAsIG1fc2l6ZSgwKQotICAgICwgbV9kZWxldGVkQ291bnQo
MCkKLSAgICAsIG1faXRlcmF0b3JDb3VudCgwKQotICAgICwgbV9lbnRyaWVzKDApCi17Ci19Ci0K
LU1hcERhdGE6OkVudHJ5KiBNYXBEYXRhOjpmaW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlU
eXBlIGtleSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgYXV0
byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFs
dWUoY2FsbEZyYW1lKS5pbXBsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVk
VGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2Vu
dHJpZXNbaXRlci0+dmFsdWVdOwotICAgIH0KLSAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkp
IHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2wo
a2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1f
c3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Ci0gICAgfQotICAgIGlmIChrZXkudmFsdWUu
aXNDZWxsKCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtl
eS52YWx1ZS5hc0NlbGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNb
aXRlci0+dmFsdWVdOwotICAgIH0KLQotICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxl
LmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOwotICAgIGlmIChpdGVyID09IG1fdmFs
dWVLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50
cmllc1tpdGVyLT52YWx1ZV07Ci19Ci0KLWJvb2wgTWFwRGF0YTo6Y29udGFpbnMoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQotewotICAgIHJldHVybiBmaW5kKGNhbGxGcmFtZSwg
a2V5KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PiBNYXBEYXRh
OjpFbnRyeSogTWFwRGF0YTo6YWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBNYXAmIG1hcCwgS2V5
IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKLXsKLSAgICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGxv
Y2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKLSAgICBpZiAobG9jYXRpb24gIT0gbWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+dmFsdWVdOwotICAgIAotICAgIGlm
ICghZW5zdXJlU3BhY2VGb3JBcHBlbmQoY2FsbEZyYW1lKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoa2V5LCBtX3NpemUpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzW21f
c2l6ZSsrXTsKLSAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOwotICAgIGVudHJ5LT5rZXkuc2V0KGNh
bGxGcmFtZS0+dm0oKSwgdGhpcywga2V5VmFsdWUudmFsdWUpOwotICAgIHJldHVybiBlbnRyeTsK
LX0KLQotdm9pZCBNYXBEYXRhOjpzZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEVudHJ5KiBsb2NhdGlvbiA9IGFkZChjYWxsRnJhbWUs
IGtleSk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIGxvY2F0aW9u
LT52YWx1ZS5zZXQoY2FsbEZyYW1lLT52bSgpLCB0aGlzLCB2YWx1ZSk7Ci19Ci0gICAgCi1NYXBE
YXRhOjpFbnRyeSogTWFwRGF0YTo6YWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtl
eSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBhZGQo
Y2FsbEZyYW1lLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVl
KGNhbGxGcmFtZSkuaW1wbCgpLCBrZXkpOwotICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkK
LSAgICAgICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1i
b2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKLSAgICBpZiAoa2V5LnZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9jZWxsS2V5ZWRU
YWJsZSwga2V5LnZhbHVlLmFzQ2VsbCgpLCBrZXkpOwotICAgIHJldHVybiBhZGQoY2FsbEZyYW1l
LCBtX3ZhbHVlS2V5ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSksIGtleSk7Ci19
Ci0KLUpTVmFsdWUgTWFwRGF0YTo6Z2V0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtl
eSkKLXsKLSAgICBpZiAoRW50cnkqIGVudHJ5ID0gZmluZChjYWxsRnJhbWUsIGtleSkpCi0gICAg
ICAgIHJldHVybiBlbnRyeS0+dmFsdWUuZ2V0KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoKTsKLX0K
LQotYm9vbCBNYXBEYXRhOjpyZW1vdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5
KQotewotICAgIGludDMyX3QgbG9jYXRpb247Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5n
KGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIg
PT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3N0cmluZ0tleWVkVGFi
bGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gIGVsc2UgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7
Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtl
eS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N5
bWJvbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fc3ltYm9sS2V5ZWRUYWJsZS5yZW1v
dmUoaXRlcik7Ci0gICAgfSBlbHNlIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAg
YXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1f
Y2VsbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkp
OwotICAgICAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAg
ICAgbV92YWx1ZUtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0KLSAgICBtX2VudHJpZXNb
bG9jYXRpb25dLmtleS5jbGVhcigpOwotICAgIG1fZW50cmllc1tsb2NhdGlvbl0udmFsdWUuY2xl
YXIoKTsKLSAgICBtX2RlbGV0ZWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IE1hcERhdGE6OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwg
aW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkUGFjaygpKTsKLSAgICBp
bnQzMl90IG5ld0VuZCA9IDA7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsK
LSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgewotICAgICAgICBFbnRy
eSYgZW50cnkgPSBtX2VudHJpZXNbaV07Ci0gICAgICAgIGlmICghZW50cnkua2V5KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIEFTU0VSVChuZXdFbmQgPCBuZXdDYXBhY2l0eSk7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uW25ld0VuZF0gPSBlbnRyeTsKLQotICAgICAgICAvLyBXZSBvdmVy
d3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRoIGEgZm9yd2FyZGluZyBpbmRleCBmb3IgdGhlIG5ldyBl
bnRyeSwKLSAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZml4IHVwIG91ciBoYXNoIHRhYmxlcyBi
ZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0aW9uYWwKLSAgICAgICAgLy8gaGFzaCBsb29rdXBzCi0g
ICAgICAgIGVudHJ5LnZhbHVlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNOdW1iZXIobmV3RW5k
KSk7Ci0gICAgICAgIG5ld0VuZCsrOwotICAgIH0KLQotICAgIC8vIEZpeHVwIGZvciB0aGUgaGFz
aG1hcHMKLSAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsgcHRy
ICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9
IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChh
dXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVkVGFi
bGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFs
dWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJpbmdL
ZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsrcHRy
KQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLnZhbHVlLmdldCgp
LmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zeW1ib2xLZXllZFRhYmxlLmJlZ2lu
KCk7IHB0ciAhPSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLQot
ICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0gICAgbV9k
ZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICAgIG1f
c2l6ZSA9IG5ld0VuZDsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKLQotfQotCi12b2lk
IE1hcERhdGE6OnJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90
IG5ld0NhcGFjaXR5KQotewotICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwotICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2Nh
cGFjaXR5KTsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5
KSAqIG1fc2l6ZSk7Ci0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICAgIG1fZW50cmll
cyA9IGRlc3RpbmF0aW9uOwotfQotCi1DaGVja2VkQm9vbGVhbiBNYXBEYXRhOjplbnN1cmVTcGFj
ZUZvckFwcGVuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAobV9jYXBhY2l0eSA+
IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzaXplX3QgcmVxdWlyZWRTaXpl
ID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBtaW5pbXVtTWFw
U2l6ZSk7Ci0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgRGVmZXJHQyBkZWZlcigqY2Fs
bEZyYW1lLT5oZWFwKCkpOwotICAgIGlmICghY2FsbEZyYW1lLT5oZWFwKCktPnRyeUFsbG9jYXRl
U3RvcmFnZSh0aGlzLCByZXF1aXJlZFNpemUgKiBzaXplb2YoRW50cnkpLCAmbmV3U3RvcmFnZSkp
IHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxF
bnRyeSo+KG5ld1N0b3JhZ2UpOwotICAgIGlmIChzaG91bGRQYWNrKCkpCi0gICAgICAgIHJlcGxh
Y2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7Ci0gICAgZWxz
ZQotICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7
Ci0gICAgY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcih0aGlzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1hcERhdGEqPihjZWxsKTsK
LSAgICBFbnRyeSogZW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50cmllczsKLSAgICBpZiAoIWVu
dHJpZXMpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPm1f
c2l6ZTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9kZWxldGVkQ291bnQpIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZW50cmll
c1tpXS5rZXkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZW50cmllc1tpXS5rZXkpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVu
dHJpZXNbaV0udmFsdWUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKCZlbnRyaWVzWzBdLmtleSwgc2l6ZSAqIChzaXplb2YoRW50cnkpIC8gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLQotICAgIHZpc2l0b3IuY29weUxhdGVyKHRo
aXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmllcywgdGhpc09iamVjdC0+
Y2FwYWNpdHlJbkJ5dGVzKCkpOwotfQotCi12b2lkIE1hcERhdGE6OmNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewot
ICAgIE1hcERhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TWFwRGF0YSo+KGNlbGwpOwotICAgIGlm
ICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weSh0aGlzT2JqZWN0LT5tX2VudHJpZXMpKSB7Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRy
aWVzID0gdGhpc09iamVjdC0+bV9lbnRyaWVzOwotICAgICAgICBFbnRyeSogbmV3RW50cmllcyA9
IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3Qt
PmNhcGFjaXR5SW5CeXRlcygpKSk7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5zaG91bGRQYWNr
KCkpCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5yZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShu
ZXdFbnRyaWVzLCB0aGlzT2JqZWN0LT5tX2NhcGFjaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdGhpc09iamVjdC0+cmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCB0aGlzT2Jq
ZWN0LT5tX2NhcGFjaXR5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJpZXMsIHRo
aXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLSAgICB9Ci0gICAgQmFzZTo6Y29weUJhY2tp
bmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8TWFwRGF0YSo+KGNlbGwpLT5+TWFw
RGF0YSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKaW5k
ZXggYjFkNTMwNjI5NmU1MDQ2YmQ0MDczZWU5OTkxOGVhNmZlNGZiMTk0NS4uZmM3ZGMyZTQ5NGRl
ZjJmNjk5MTg0MTQ0OGM5NmVkNjBiZDEzZjRmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcERhdGEuaApAQCAtMjcsMjUgKzI3LDI5IEBACiAjZGVmaW5lIE1hcERhdGFfaAogCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYXBEYXRhIDogcHVi
bGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKK2NsYXNzIEV4
ZWNTdGF0ZTsKKworY2xhc3MgTWFwRGF0YVN0YXRpY3MgeworICAgIHN0YXRpYyBjb25zdCBpbnQz
Ml90IG1pbmltdW1NYXBTaXplID0gODsKK307CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
Y2xhc3MgTWFwRGF0YUltcGwgeworcHVibGljOgogICAgIHN0cnVjdCBjb25zdF9pdGVyYXRvciB7
Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgY29uc3Rf
aXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0X2l0ZXJhdG9yKCk7
CiAgICAgICAgIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IG9wZXJh
dG9yKigpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgUkVMRUFTRV9BU1NF
UlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0ua2V5Lmdl
dCgpOyB9Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFh
dEVuZCgpKTsgcmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlLmdldCgp
OyB9CisgICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQo
KSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkoKS5nZXQoKTsgfQor
ICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7
IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgpLmdldCgpOyB9CiAg
ICAgICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsgaW50ZXJuYWxJbmNy
ZW1lbnQoKTsgfQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1hcERh
dGEqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRhSW1w
bCopOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVy
KTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcik7
CiAgICAgICAgIHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCk7IH0KQEAgLTYwLDcgKzY0LDcgQEAgY2xhc3MgTWFwRGF0YSA6IHB1Ymxp
YyBKU0NlbGwgewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0RW5kKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVybmFsSW5jcmVtZW50
KCk7Ci0gICAgICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAgICAgY29uc3QgTWFw
RGF0YUltcGwqIG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4OwogICAgIH07CiAK
QEAgLTcwLDQ1ICs3NCwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBEYXRhKiBjcmVhdGUo
Vk0mIHZtKQotICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsKLSAgICAgICAgbWFw
RGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFwRGF0YTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIE1hcERhdGFJbXBsKCk7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUqLCBLZXlUeXBlLCBK
U1ZhbHVlKTsKLSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29s
IHJlbW92ZShDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKENhbGxGcmFt
ZSosIEtleVR5cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZSAtIG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CisgICAgSlNW
YWx1ZSBnZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1vdmUoRXhlY1N0YXRl
KiwgS2V5VHlwZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAg
ICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2RlbGV0
ZWRDb3VudDsgfQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBj
b25zdF9pdGVyYXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogcHJpdmF0ZToK
ICAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4g
SW5kZXhUcmFpdHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVudHJ5
IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMgYmUg
V3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVl
OwotICAgIH07Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJfdCwgdHlwZW5h
bWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJhaXRzPEpTQ2Vs
bCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhh
c2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxTdHJpbmdJ
bXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4VHJhaXRzPiBT
dHJpbmdLZXllZE1hcDsKQEAgLTExNiwxOCArMTAwLDEyIEBAIGNsYXNzIE1hcERhdGEgOiBwdWJs
aWMgSlNDZWxsIHsKIAogICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMoKSB7IHJldHVybiBtX2Nh
cGFjaXR5ICogc2l6ZW9mKEVudHJ5KTsgfQogCi0gICAgTWFwRGF0YShWTSYpOwotICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwotCi0KLSAgICBBTFdBWVNfSU5MSU5F
IEVudHJ5KiBmaW5kKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIEFMV0FZU19JTkxJTkUgRW50
cnkqIGFkZChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTWFw
LCB0eXBlbmFtZSBLZXk+IEFMV0FZU19JTkxJTkUgRW50cnkqIGFkZChDYWxsRnJhbWUqLCBNYXAm
LCBLZXksIEtleVR5cGUpOworICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQoRXhlY1N0YXRl
KiwgS2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpT
Q2VsbCogb3duZXIsIEtleVR5cGUpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVu
YW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3du
ZXIsIE1hcCYsIEtleSwgS2V5VHlwZSk7CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxk
UGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50ICYmICFtX2l0ZXJhdG9yQ291bnQ7
IH0KLSAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChDYWxsRnJhbWUqKTsK
KyAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqLCBKU0Nl
bGwqIG93bmVyKTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXBsYWNlQW5kUGFja0JhY2tp
bmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQz
Ml90IG5ld1NpemUpOwpAQCAtMTQzLDcgKzEyMSwxOCBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgRW50cnkqIG1fZW50cmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBNYXBEYXRhOjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJ
TkUgTWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCgpCisgICAgOiBtX2NhcGFjaXR5KDAp
CisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCisgICAgLCBtX2l0ZXJh
dG9yQ291bnQoMCkKKyAgICAsIG1fZW50cmllcyhudWxscHRyKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNs
ZWFyKCkKIHsKICAgICBtX2NlbGxLZXllZFRhYmxlLmNsZWFyKCk7CiAgICAgbV92YWx1ZUtleWVk
VGFibGUuY2xlYXIoKTsKQEAgLTE1NSw3ICsxNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFw
RGF0YTo6Y2xlYXIoKQogICAgIG1fZW50cmllcyA9IG51bGxwdHI7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgTWFwRGF0YTo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpLZXlUeXBlOjpLZXlU
eXBlKEpTVmFsdWUgdikKIHsKICAgICBpZiAoIXYuaXNEb3VibGUoKSkgewogICAgICAgICB2YWx1
ZSA9IHY7CkBAIC0xNzQsNTUgKzE2NCw2MiBAQCBBTFdBWVNfSU5MSU5FIE1hcERhdGE6OktleVR5
cGU6OktleVR5cGUoSlNWYWx1ZSB2KQogICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5j
cmVtZW50KCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KCkKIHsK
ICAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzOwogICAgIHNpemVfdCBp
bmRleCA9IG1faW5kZXggKyAxOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsK
LSAgICB3aGlsZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSkKKyAgICB3aGls
ZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSgpKQogICAgICAgICBpbmRleCsr
OwogICAgIG1faW5kZXggPSBpbmRleDsKIH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCgpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0
b3I6OmVuc3VyZVNsb3QoKQogewogICAgIC8vIFdoZW4gYW4gaXRlcmF0b3IgZXhpc3RzIG91dHNp
ZGUgb2YgaG9zdCBjb3N0IGl0IGlzIHBvc3NpYmxlIGZvcgogICAgIC8vIHRoZSBjb250YWluaW5n
IG1hcCB0byBiZSBtb2RpZmllZAogICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2Vu
dHJpZXM7CiAgICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleDsKICAgICBzaXplX3QgZW5kID0gbV9t
YXBEYXRhLT5tX3NpemU7Ci0gICAgaWYgKGluZGV4IDwgZW5kICYmIGVudHJpZXNbaW5kZXhdLmtl
eSkKKyAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqIG1hcERhdGEp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50
cnk+Ojpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGw8RW50
cnk+KiBtYXBEYXRhKQogICAgIDogbV9tYXBEYXRhKG1hcERhdGEpCiAgICAgLCBtX2luZGV4KC0x
KQogewogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6
fmNvbnN0X2l0ZXJhdG9yKCkKIHsKICAgICBtX21hcERhdGEtPm1faXRlcmF0b3JDb3VudC0tOwog
fQogCi1BTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFs
dWU+IE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpT
VmFsdWUsIEpTVmFsdWU+IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJh
dG9yKigpIGNvbnN0CiB7CiAgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVz
W21faW5kZXhdOwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVl
PihlbnRyeS0+a2V5LmdldCgpLCBlbnRyeS0+dmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBXVEY6
OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVudHJ5
LT52YWx1ZSgpLmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25zdF9pdGVy
YXRvciBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5kKGNvbnN0IE1hcERhdGEqIG1hcERhdGEp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYXV0byBNYXBEYXRhSW1w
bDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YUltcGw8RW50cnk+KiBt
YXBEYXRhKSAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdCht
YXBEYXRhKTsKICAgICByZXN1bHQubV9pbmRleCA9IC0xOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3Ih
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4K
K0FMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpv
cGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICBBU1NFUlQob3Ro
ZXIubV9tYXBEYXRhID09IG1fbWFwRGF0YSk7CiAgICAgaWYgKGF0RW5kKCkgJiYgb3RoZXIuYXRF
bmQoKSkKQEAgLTIzMCw3ICsyMjcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6Y29u
c3RfaXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aAogICAgIHJl
dHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXg7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYm9vbCBNYXBE
YXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0
ZXJhdG9yJiBvdGhlcikKIHsKICAgICByZXR1cm4gISgqdGhpcyAhPSBvdGhlcik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NTA3ODdiZTAxNmNkYjhiYjQyOTcyOTExZmFkNGY4ZDk4MTEwOWU2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAt
MCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIk1h
cERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
aW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQoRXhlY1N0YXRlKiBleGVjLCBL
ZXlUeXBlIGtleSkKK3sKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
YXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+
dmFsdWUoZXhlYykuaW1wbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRh
YmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRy
aWVzW2l0ZXItPnZhbHVlXTsKKyAgICB9CisgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7
CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtl
eS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N5
bWJvbEtleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVlLmlz
Q2VsbCgpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXku
dmFsdWUuYXNDZWxsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0
ZXItPnZhbHVlXTsKKyAgICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5m
aW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKKyAgICBpZiAoaXRlciA9PSBtX3ZhbHVl
S2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZtX2VudHJp
ZXNbaXRlci0+dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBi
b29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29udGFpbnMoRXhlY1N0YXRlKiBleGVjLCBLZXlUeXBl
IGtleSkKK3sKKyAgICByZXR1cm4gZmluZChleGVjLCBrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBFbnRyeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4KK2lubGlu
ZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnk+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IG93bmVyLCBNYXAmIG1hcCwgS2V5IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKK3sKKyAgICB0eXBl
bmFtZSBNYXA6Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAobG9j
YXRpb24gIT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+
dmFsdWVdOworCisgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25lcikpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9zaXpl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRW50cnkqIGVu
dHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgbmV3IChlbnRyeSkgRW50cnkoKTsKKyAg
ICBlbnRyeS0+c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1ZS52YWx1ZSk7CisgICAg
cmV0dXJuIGVudHJ5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lk
IE1hcERhdGFJbXBsPEVudHJ5Pjo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwg
S2V5VHlwZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgRW50cnkqIGxvY2F0aW9uID0gYWRk
KGV4ZWMsIG93bmVyLCBrZXkpOworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybjsK
KyAgICBsb2NhdGlvbi0+c2V0VmFsdWUoZXhlYy0+dm0oKSwgb3duZXIsIHZhbHVlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5
Pjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgS2V5VHlwZSBrZXkpCit7Cisg
ICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93
bmVyLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMp
LmltcGwoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCisgICAgICAgIHJl
dHVybiBhZGQoZXhlYywgb3duZXIsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1ib2woa2V5LnZh
bHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX2NlbGxLZXllZFRhYmxlLCBr
ZXkudmFsdWUuYXNDZWxsKCksIGtleSk7CisgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwgbV92
YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBKU1ZhbHVlIE1hcERhdGFJbXBsPEVudHJ5
Pjo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKEVudHJ5KiBl
bnRyeSA9IGZpbmQoZXhlYywga2V5KSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT52YWx1ZSgpLmdl
dCgpOworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgoraW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVj
LCBLZXlUeXBlIGtleSkKK3sKKyAgICBpbnQzMl90IGxvY2F0aW9uOworICAgIGlmIChrZXkudmFs
dWUuaXNTdHJpbmcoKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUu
ZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOworICAgICAgICBp
ZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAgICAgIG1fc3RyaW5n
S2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSAgZWxzZSBpZiAoa2V5LnZhbHVlLmlzU3lt
Ym9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNT
eW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChpdGVy
ID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zeW1ib2xLZXllZFRh
YmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVsc2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewor
ICAgICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2Vs
bCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAg
ICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5
LnZhbHVlKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVl
OworICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfQorICAgIG1f
ZW50cmllc1tsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2RlbGV0ZWRDb3VudCsrOworICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5Pjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRlc3Rp
bmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVChzaG91bGRQYWNrKCkp
OworICAgIGludDMyX3QgbmV3RW5kID0gMDsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0
eSA+IDApOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAg
ICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAgaWYgKCFlbnRyeS5rZXko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQobmV3RW5kIDwgbmV3Q2Fw
YWNpdHkpOworICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7CisKKyAgICAgICAg
Ly8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5kZXggZm9y
IHRoZSBuZXcgZW50cnksCisgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBvdXIgaGFz
aCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFsCisgICAgICAgIC8vIGhhc2gg
bG9va3VwcworICAgICAgICBlbnRyeS5rZXkoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVt
YmVyKG5ld0VuZCkpOworICAgICAgICBuZXdFbmQrKzsKKyAgICB9CisKKyAgICAvLyBGaXh1cCBm
b3IgdGhlIGhhc2htYXBzCisgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0
ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwor
ICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2Nl
bGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmll
c1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVu
ZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5r
ZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRU
YWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAg
ICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0lu
dDMyKCk7CisKKyAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQp
OworICAgIG1fZGVsZXRlZENvdW50ID0gMDsKKworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKKyAgICBtX3NpemUgPSBuZXdFbmQ7CisgICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50
cnk+OjpyZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdD
YXBhY2l0eSkKK3sKKyAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQobmV3Q2FwYWNpdHkgPiAwKTsKKyAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0
eSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBt
X3NpemUpOworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX2VudHJpZXMgPSBk
ZXN0aW5hdGlvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIpCit7CisgICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6
bWF4KG1fY2FwYWNpdHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgTWFwRGF0YVN0YXRpY3M6Om1p
bmltdW1NYXBTaXplKTsKKyAgICB2b2lkKiBuZXdTdG9yYWdlID0gbnVsbHB0cjsKKyAgICBEZWZl
ckdDIGRlZmVyKCpleGVjLT5oZWFwKCkpOworICAgIGlmICghZXhlYy0+aGVhcCgpLT50cnlBbGxv
Y2F0ZVN0b3JhZ2Uob3duZXIsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZuZXdTdG9y
YWdlKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxF
bnRyeSo+KG5ld1N0b3JhZ2UpOworICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAgICAgIHJlcGxh
Y2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAgZWxz
ZQorICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7
CisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBpZiAoIWVudHJpZXMp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKKyAgICAgICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghZW50
cmllc1tpXS5rZXkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVu
dHJpZXNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQor
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5rZXkoKSwgbV9zaXplICog
KHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAg
dmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmll
cywgY2FwYWNpdHlJbkJ5dGVzKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lu
bGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZShDb3B5VmlzaXRv
ciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIGlmICh0b2tlbiA9PSBNYXBCYWNr
aW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMp
KSB7CisgICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzOworICAgICAgICBFbnRy
eSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1Nw
YWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CisgICAgICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAg
ICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBtX2NhcGFjaXR5
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCBtX2NhcGFjaXR5KTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJpZXMsIGNh
cGFjaXR5SW5CeXRlcygpKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCmluZGV4IDU0ODIyMjc2OTQwMGI3MTg1MmFmN2Ri
OGI3NWVmNTA3NTQ0ZWRkNGYuLjM0YjBlOTg4NDk3ZGU1NTg4Y2UxYzUwMTZmMDVmMDVhNjYwZjA5
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNw
cApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFw
RGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBNYXBQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNNYXA6Ok1hcERhdGEqIGdldE1h
cERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFt
ZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwpAQCAtOTIs
NyArOTIsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBNYXBEYXRhKiBnZXRNYXBEYXRhKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGRhdGEtPmNsZWFyKCk7CkBAIC0x
MDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmND
bGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0
YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oZGF0YS0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsK
QEAgLTEwOSw3ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOwpAQCAtMTQxLDcgKzE0MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdl
dE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBkYXRhLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
cFByb3RvRnVuY0dldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZGF0YS0+Y29udGFpbnMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKSkpOwpAQCAtMTYwLDE2ICsxNjAsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
OworICAgIEpTTWFwOjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIHRoaXNW
YWx1ZSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9IGpzQ2FzdDxKU01h
cCo+KHRoaXNWYWx1ZSk7CisgICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgbWFwLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBk
YXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IEpTTWFwOjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGRhdGEtPnNpemUoY2FsbEZyYW1lKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NldFByb3RvdHlwZS5jcHAKaW5kZXggZjg4ZWE3Y2Y5ODY4ZjY2OGI4YzJlODg4MTVmZjY1
Y2YzOTkyN2I0OS4uNjM4NjlmMzJmYzI0ZGIxZDNiYTAwNjc0MzIzMjNmNGRhZjY1Nzc1OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJK
U1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgi
CisjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFNldFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNpemUs
IGFjY2Vzc29yLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0
aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlz
VmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1NldDo6U2V0RGF0YSogZ2V0U2V0RGF0YShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgaWYgKCF0aGlz
VmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVh
dGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CkBAIC04NiwyMSArODYs
MjMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2Fs
bEZyYW1lLCBBU0NJSUxpdGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1TZXQgb2Jq
ZWN0IikpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIHNldC0+bWFwRGF0
YSgpOworICAgIHJldHVybiBzZXQtPnNldERhdGEoKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNTZXQ6OlNldERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNhbGxGcmFtZSwgdGhpc1ZhbHVl
KTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldCogc2V0ID0ganNDYXN0PEpTU2V0Kj4o
dGhpc1ZhbHVlKTsKKyAgICBkYXRhLT5zZXQoY2FsbEZyYW1lLCBzZXQsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhpc1ZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQ
cm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRh
ID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpT
U2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhLT5jbGVhcigpOwpAQCAtMTA5LDcgKzExMSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
RGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRN
YXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNTZXQ6OlNl
dERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJl
bW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0xMTcsNyArMTE5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJv
dG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRh
ID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpT
U2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKQEAgLTE0Nyw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNldFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgSlNTZXQ6OlNldERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRhaW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSkpKTsKQEAgLTE1NSw3ICsxNTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgSlNTZXQ6OlNldERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZGF0YS0+c2l6ZShjYWxsRnJhbWUpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggYTczMjRiNGFkZjFkZTg3N2I3NDYwNjhkYTU0MTNk
YWJmNTNiNTU0Yy4uZThmYzBlMzIwYjVjYTNhZTEzM2JhOGY0NmFhNThlYzU5YzdlMWQyOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjMzLDcgKzIzMyw2IEBAIHN0YXRp
YyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxlQWxsb2NhdG9yJiBleGVjdXRhYmxlQWxs
b2NhdG9yKQogICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVu
bGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBtYXBEYXRhU3RydWN0
dXJlLnNldCgqdGhpcywgTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMp
CiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IDk0YzQ4M2I3MjM2MDIyODNlZDQwZGE1NWRlZDI5NTUzYTAzMTc4
MjUuLjdlNzFkZWY5YzdhNTBmOTdmY2U2YTFiOTk3YjYwN2M2YWFmYjljNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjY4LDcgKzI2OCw2IEBAIGNsYXNzIFZNIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiB7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVy
dHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBtYXBEYXRhU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogI2lmIEVOQUJM
RShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1
cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L01hcERhdGFJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL01hcERhdGFJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhY2E2MmQ0MzkyZDI1YjY2NDIyNjM4
NzkwZGM3NDcyZjIwZDFlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfTWFwRGF0YUlubGlpbmVzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0Rf
TWFwRGF0YUlubGlpbmVzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXBEYXRhSW5saW5l
cy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBkY2E1NjAzZjljMzk5NjE4MzM4YWY3ZTBkYjMxYWRm
MTBjYjZiNmY5Li42MGRmNjBmYTRmOTdlMGI0ZDk4MWVlMDI2OWYxYTgzOWEzOGEwYjk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTU2V0Lmg+CiAjaW5j
bHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NYXBEYXRh
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9NYXBEYXRhSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFy
cmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KQEAgLTg3LDcgKzg4LDggQEAKIAog
ZW51bSBXYWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0
YXJ0VmlzaXRNZW1iZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsCiAgICAgT2JqZWN0U3RhcnRTdGF0
ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIsCi0gICAgTWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeSwgTWFwRGF0YUVuZFZpc2l0S2V5LCBNYXBEYXRhRW5kVmlzaXRW
YWx1ZSB9OworICAgIE1hcERhdGFTdGFydFZpc2l0RW50cnksIE1hcERhdGFFbmRWaXNpdEtleSwg
TWFwRGF0YUVuZFZpc2l0VmFsdWUsCisgICAgU2V0RGF0YVN0YXJ0VmlzaXRFbnRyeSwgU2V0RGF0
YUVuZFZpc2l0S2V5IH07CiAKIC8vIFRoZXNlIGNhbid0IGJlIHJlb3JkZXJlZCwgYW5kIGFueSBu
ZXcgdHlwZXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiBlbnVtIFNlcmlh
bGl6YXRpb25UYWcgewpAQCAtMTIyLDggKzEyNCw5IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7
CiAgICAgU2V0T2JqZWN0VGFnID0gMjksCiAgICAgTWFwT2JqZWN0VGFnID0gMzAsCiAgICAgTm9u
TWFwUHJvcGVydGllc1RhZyA9IDMxLAorICAgIE5vblNldFByb3BlcnRpZXNUYWcgPSAzMiwKICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLSAgICBDcnlwdG9LZXlUYWcgPSAzMiwKKyAgICBDcnlw
dG9LZXlUYWcgPSAzMywKICNlbmRpZgogICAgIEVycm9yVGFnID0gMjU1CiB9OwpAQCAtMjY2LDkg
KzI2OSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgY291bnRVc2FnZXMoQ3J5cHRvS2V5VXNhZ2UgdXNh
Z2VzKQogICoKICAqIE1hcCA6LSBNYXBPYmplY3RUYWcgTWFwRGF0YQogICoKLSAqIFNldCA6LSBT
ZXRPYmplY3RUYWcgTWFwRGF0YQorICogU2V0IDotIFNldE9iamVjdFRhZyBTZXREYXRhCiAgKgog
ICogTWFwRGF0YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+KSBOb25NYXBQcm9wZXJ0aWVz
VGFnICg8bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFnCisgKiBT
ZXREYXRhIDotICg8a2V5OlZhbHVlPikgTm9uU2V0UHJvcGVydGllc1RhZyAoPG5hbWU6U3RyaW5n
RGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZwogICoKICAqIFRlcm1pbmFsIDotCiAg
KiAgICAgIFVuZGVmaW5lZFRhZwpAQCAtMTIxNiw5ICsxMjIwLDExIEBAIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgVmVj
dG9yPHVpbnQzMl90LCAxNj4gbGVuZ3RoU3RhY2s7CiAgICAgVmVjdG9yPFByb3BlcnR5TmFtZUFy
cmF5LCAxNj4gcHJvcGVydHlTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4gaW5wdXRP
YmplY3RTdGFjazsKLSAgICBWZWN0b3I8TWFwRGF0YSosIDQ+IG1hcERhdGFTdGFjazsKLSAgICBW
ZWN0b3I8TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IsIDQ+IGl0ZXJhdG9yU3RhY2s7Ci0gICAgVmVj
dG9yPEpTVmFsdWUsIDQ+IGl0ZXJhdG9yVmFsdWVTdGFjazsKKyAgICBWZWN0b3I8SlNNYXAqLCA0
PiBtYXBTdGFjazsKKyAgICBWZWN0b3I8SlNNYXA6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yLCA0
PiBtYXBJdGVyYXRvclN0YWNrOworICAgIFZlY3RvcjxKU1NldCosIDQ+IHNldFN0YWNrOworICAg
IFZlY3RvcjxKU1NldDo6U2V0RGF0YTo6Y29uc3RfaXRlcmF0b3IsIDQ+IHNldEl0ZXJhdG9yU3Rh
Y2s7CisgICAgVmVjdG9yPEpTVmFsdWUsIDQ+IG1hcEl0ZXJhdG9yVmFsdWVTdGFjazsKICAgICBW
ZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwogICAgIFdhbGtlclN0YXRlIHN0YXRl
ID0gU3RhdGVVbmtub3duOwogICAgIEpTVmFsdWUgaW5WYWx1ZSA9IGluOwpAQCAtMTM1MCwzNiAr
MTM1NiwyMSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIEpTTWFwKiBpbk1hcCA9IGpzQ2FzdDxK
U01hcCo+KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghc3RhcnRNYXAoaW5NYXApKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBE
YXRhID0gaW5NYXAtPm1hcERhdGEoKTsKLSAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVu
ZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5kKG1hcERhdGEp
OwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2suYXBwZW5kKG1hcERhdGEtPmJlZ2luKCkp
OworICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKGluTWFwKTsKKyAgICAgICAgICAg
ICAgICBtYXBTdGFjay5hcHBlbmQoaW5NYXApOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9y
U3RhY2suYXBwZW5kKGluTWFwLT5tYXBEYXRhKCktPmJlZ2luKCkpOwogICAgICAgICAgICAgICAg
IGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluTWFwKTsKICAgICAgICAgICAgICAgICBnb3RvIG1h
cERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRTdGFy
dFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmplY3QoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRl
clJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrT3ZlcmZsb3dFcnJv
cjsKLSAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBqc0Nhc3Q8SlNTZXQqPihpblZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGluU2V0KSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IGluU2V0LT5t
YXBEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAg
ICAgICBpdGVyYXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5iZWdpbigpKTsKLSAgICAgICAgICAg
ICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpblNldCk7Ci0gICAgICAgICAgICAgICAgZ290
byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeToKICAgICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0VmlzaXRF
bnRyeTogewotICAgICAgICAgICAgICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yJiBwdHIgPSBp
dGVyYXRvclN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0g
bWFwRGF0YVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAocHRyID09IG1hcERhdGEt
PmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgp
OwotICAgICAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgICAgIEpTTWFwOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvciYgcHRyID0gbWFwSXRlcmF0
b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNNYXAqIG1hcCA9IG1hcFN0YWNrLmxh
c3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IG1hcC0+bWFwRGF0YSgpLT5lbmQoKSkg
eworICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4ob2JqZWN0KSB8fCBqc0R5
bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChq
c0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYykpOwogICAgICAgICAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFwUHJvcGVydGllc1RhZyk7CkBAIC0x
Mzg4LDIyICsxMzc5LDYwIEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXpl
cjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGluVmFsdWUgPSBwdHIua2V5KCk7CiAgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBl
bmQocHRyLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5hcHBl
bmQocHRyLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5h
cHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1h
cERhdGFFbmRWaXNpdEtleSk7CiAgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdEtleTogewotICAg
ICAgICAgICAgICAgIGluVmFsdWUgPSBpdGVyYXRvclZhbHVlU3RhY2subGFzdCgpOwotICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAg
ICAgaW5WYWx1ZSA9IG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAg
ICAgbWFwSXRlcmF0b3JWYWx1ZVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBz
dGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRWYWx1ZSk7CiAgICAgICAgICAgICAgICAg
Z290byBzdGF0ZVVua25vd247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1hcERh
dGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yU3RhY2subGFz
dCgpICE9IG1hcERhdGFTdGFjay5sYXN0KCktPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAr
K2l0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChtYXBJdGVyYXRvclN0
YWNrLmxhc3QoKSAhPSBtYXBTdGFjay5sYXN0KCktPm1hcERhdGEoKS0+ZW5kKCkpCisgICAgICAg
ICAgICAgICAgICAgICsrbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAg
Z290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBzZXRTdGFydFN0YXRlOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4
aW11bUZpbHRlclJlY3Vyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrT3Zl
cmZsb3dFcnJvcjsKKyAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBqc0Nhc3Q8SlNTZXQq
PihpblZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGluU2V0KSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQo
aW5TZXQpOworICAgICAgICAgICAgICAgIHNldFN0YWNrLmFwcGVuZChpblNldCk7CisgICAgICAg
ICAgICAgICAgc2V0SXRlcmF0b3JTdGFjay5hcHBlbmQoaW5TZXQtPnNldERhdGEoKS0+YmVnaW4o
KSk7CisgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5hcHBlbmQoaW5TZXQpOworICAg
ICAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHNldERhdGFTdGFydFZpc2l0RW50cnk6CisgICAgICAgICAgICBjYXNlIFNl
dERhdGFTdGFydFZpc2l0RW50cnk6IHsKKyAgICAgICAgICAgICAgICBKU1NldDo6U2V0RGF0YTo6
Y29uc3RfaXRlcmF0b3ImIHB0ciA9IHNldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAg
ICAgICAgIEpTU2V0KiBzZXQgPSBzZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgaWYg
KHB0ciA9PSBzZXQtPnNldERhdGEoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0
SXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHNldFN0YWNr
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlu
cHV0T2JqZWN0U3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5h
bWljQ2FzdDxKU1NldCo+KG9iamVjdCkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9l
eGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7Cisg
ICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOworICAgICAgICAg
ICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZ290
byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpblZhbHVlID0gcHRyLmtleSgpOworICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBw
ZW5kKFNldERhdGFFbmRWaXNpdEtleSk7CisgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25v
d247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNldERhdGFFbmRWaXNpdEtleTog
eworICAgICAgICAgICAgICAgIGlmIChzZXRJdGVyYXRvclN0YWNrLmxhc3QoKSAhPSBzZXRTdGFj
ay5sYXN0KCktPnNldERhdGEoKS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICsrc2V0SXRl
cmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBzZXREYXRhU3RhcnRWaXNp
dEVudHJ5OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzdGF0ZVVua25vd246CiAgICAg
ICAgICAgICBjYXNlIFN0YXRlVW5rbm93bjogewogICAgICAgICAgICAgICAgIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlIHRlcm1pbmFsQ29kZSA9IFN1Y2Nlc3NmdWxseUNvbXBsZXRlZDsKQEAgLTIz
NjAsOSArMjM4OSwxMCBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBv
c3NpYmxlKCkKKyAgICB0ZW1wbGF0ZTxTZXJpYWxpemF0aW9uVGFnIFRhZz4KKyAgICBib29sIGNv
bnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpCiAgICAgewotICAgICAg
ICBpZiAocmVhZFRhZygpID09IE5vbk1hcFByb3BlcnRpZXNUYWcpCisgICAgICAgIGlmIChyZWFk
VGFnKCkgPT0gVGFnKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIG1fcHRyLS07
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzODQsOCArMjQxNCw5IEBAIERlc2VyaWFsaXph
dGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogICAgIFZlY3Rvcjx1
aW50MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBwcm9w
ZXJ0eU5hbWVTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4gb3V0cHV0T2JqZWN0U3Rh
Y2s7Ci0gICAgVmVjdG9yPEpTVmFsdWUsIDQ+IGtleVN0YWNrOwotICAgIFZlY3RvcjxNYXBEYXRh
KiwgND4gbWFwRGF0YVN0YWNrOworICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBtYXBLZXlTdGFjazsK
KyAgICBWZWN0b3I8SlNNYXAqLCA0PiBtYXBTdGFjazsKKyAgICBWZWN0b3I8SlNTZXQqLCA0PiBz
ZXRTdGFjazsKICAgICBWZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwogICAgIFdh
bGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtub3duOwogICAgIEpTVmFsdWUgb3V0VmFsdWU7CkBA
IC0yNDc4LDQxICsyNTA5LDU0IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFs
aXplcjo6ZGVzZXJpYWxpemUoKQogICAgICAgICAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVh
dGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwogICAgICAg
ICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0
YWNrLmFwcGVuZChtYXApOwotICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG1hcC0+bWFw
RGF0YSgpOwotICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAg
ICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKLSAgICAgICAgfQotICAgICAgICBz
ZXRPYmplY3RTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0U3RhY2su
c2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93RXJyb3IpOwotICAgICAgICAg
ICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVj
dC0+c2V0U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsK
LSAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOwotICAgICAgICAgICAg
TWFwRGF0YSogbWFwRGF0YSA9IHNldC0+bWFwRGF0YSgpOwotICAgICAgICAgICAgbWFwRGF0YVN0
YWNrLmFwcGVuZChtYXBEYXRhKTsKKyAgICAgICAgICAgIG1hcFN0YWNrLmFwcGVuZChtYXApOwog
ICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICB9CiAgICAg
ICAgIG1hcERhdGFTdGFydFZpc2l0RW50cnk6CiAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0Vmlz
aXRFbnRyeTogewotICAgICAgICAgICAgaWYgKGNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBv
c3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgaWYgKGNvbnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJs
ZTxOb25NYXBQcm9wZXJ0aWVzVGFnPigpKSB7CisgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVt
b3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERhdGFFbmRW
aXNpdEtleSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKICAgICAgICAgfQotCiAg
ICAgICAgIGNhc2UgTWFwRGF0YUVuZFZpc2l0S2V5OiB7Ci0gICAgICAgICAgICBrZXlTdGFjay5h
cHBlbmQob3V0VmFsdWUpOworICAgICAgICAgICAgbWFwS2V5U3RhY2suYXBwZW5kKG91dFZhbHVl
KTsKICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERhdGFFbmRWaXNpdFZhbHVlKTsK
ICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9Ci0KICAgICAgICAgY2Fz
ZSBNYXBEYXRhRW5kVmlzaXRWYWx1ZTogewotICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmxhc3Qo
KS0+c2V0KG1fZXhlYywga2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7Ci0gICAgICAgICAgICBr
ZXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBKU01hcCogbWFwID0gbWFwU3RhY2su
bGFzdCgpOworICAgICAgICAgICAgbWFwLT5tYXBEYXRhKCktPnNldChtX2V4ZWMsIG1hcCwgbWFw
S2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBtYXBLZXlTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAg
ICAgIH0KKworICAgICAgICBzZXRPYmplY3RTdGFydFN0YXRlOiB7CisgICAgICAgICAgICBpZiAo
b3V0cHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93
RXJyb3IpOworICAgICAgICAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52
bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChz
ZXQpOworICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKHNldCk7CisgICAgICAgICAgICBnb3Rv
IHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RGF0YVN0YXJ0
VmlzaXRFbnRyeToKKyAgICAgICAgY2FzZSBTZXREYXRhU3RhcnRWaXNpdEVudHJ5OiB7CisgICAg
ICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRpb25JZlBvc3NpYmxlPE5v
blNldFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoU2V0RGF0YUVuZFZpc2l0
S2V5KTsKKyAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOworICAgICAgICB9CisgICAgICAg
IGNhc2UgU2V0RGF0YUVuZFZpc2l0S2V5OiB7CisgICAgICAgICAgICBKU1NldCogc2V0ID0gc2V0
U3RhY2subGFzdCgpOworICAgICAgICAgICAgc2V0LT5zZXREYXRhKCktPnNldChtX2V4ZWMsIHNl
dCwgb3V0VmFsdWUsIG91dFZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0Vmlz
aXRFbnRyeTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRlVW5rbm93bjoKICAgICAgICAgY2Fz
ZSBTdGF0ZVVua25vd246CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5hbCA9IHJlYWRU
ZXJtaW5hbCgpKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2Q0YjU4ZTQ5NGRkNWNhYjgwOWI0ODAwYTk0Y2NjNmY1OTlk
MjAyMS4uOTVlZjEyZjhhYWM3YTRlZTdlOTJmNDE4YmZlNTg4YzNhMTk5OTU1MCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDE1LTAzLTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIEludGVncmF0ZSBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHJ1Y3R1
cmUtY2xvbmUgaW1wbGVtZW50YXRpb24gYmVjb21lcyBhd2FyZSBvZiB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIE1hcCBhbmQgU2V0LgorCisgICAgICAgICogZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQt
c2NyaXB0LXZhbHVlLmh0bWw6CisKIDIwMTUtMDMtMTAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gUmVmYWN0b3IgbWVkaWEgY29udHJvbHMg
Y29kZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2Ny
aXB0LXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3Jp
cHQtdmFsdWUuaHRtbAppbmRleCA0MzVkMDdmYmJhZjY3MDA5OGI5MmRjODViYzFlNjViZGJiZDg5
YjAzLi5mYjMxMDMxMTRiNTVlZDhiNzQ1NGJlNjhiYjg3MDc4YjUzYjZmNzk4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRt
bApAQCAtNDE1LDE2ICs0MTUsMTQgQEAKIAogdGVzdFNlcmlhbGl6YXRpb24oc2V0T2JqZWN0LAog
WwotICAgIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDcsIDB4MDcsIDB4MGEsIDB4
MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MGEs
IDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4
MTMsIDB4MDAsIAotICAgIDB4MTMsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4NjIsIDB4MDAsIAotICAgIDB4NjEsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MTAsIDB4ZmUsIDB4
ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4MDAsIDB4MWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYs
IDB4MDAsIDB4MTMsIDB4MDEsIAotICAgIDB4MWYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
NjUsIDB4MDAsIDB4NzgsIDB4MDAsIAotICAgIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUs
IDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIAotICAgIDB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4
ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4ZmYKKyAgICAweDA1LCAweDAwLCAw
eDAwLCAweDAwLCAweDFkLCAweDA3LCAweDBhLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweGY4LCAweDNmLCAweDEzLCAweDAwLCAweDEwLCAKKyAgICAweDAzLCAw
eDAwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDYxLCAweDAwLCAweDcyLCAKKyAgICAweDAw
LCAweDFhLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDIwLCAweDA3LCAKKyAgICAw
eDAwLCAweDAwLCAweDAwLCAweDY1LCAweDAwLCAweDc4LCAweDAwLCAweDcwLCAweDAwLCAKKyAg
ICAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDY0LCAweDAwLCAweDZmLCAweDAwLCAweDAyLCAK
KyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisKIF0p
OwogCiB0ZXN0U2VyaWFsaXphdGlvbihmdW5jdGlvbigpe30sIFtdLCBudWxsLCBET01FeGNlcHRp
b24uREFUQV9DTE9ORV9FUlIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248425</attachid>
            <date>2015-03-11 09:27:26 -0700</date>
            <delta_ts>2015-03-11 10:18:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150312012701.patch</filename>
            <type>text/plain</type>
            <size>78395</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
M2Q4MjQ4YzYzNTAxYzU3MzJhMzY5MjFmNzhlM2NjNTYxYWFkYmQ5Li5jMTE2NTJlNDY0M2E1MzJj
ZmM2NjFiMTYzMWUyYjA2YjJmOGRiZjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzcgQEAKKzIwMTUtMDMtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggZml4ZXMgbWlzc2luZyBkZXN0
cm95IGZ1bmN0aW9ucworICAgICAgICBpbiBKU01hcEl0ZXJhdG9yIGFuZCBKU1NldEl0ZXJhdG9y
LgorICAgICAgICBUaGV5IGFyZSBuZWVkZWQgYmVjYXVzZSBNYXBEYXRhOjpjb25zdF9pdGVyYXRv
ciBpcyBhIG5vbi10cml2aWFsIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNN
YXA6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU01hcDo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OkpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmg6Cisg
ICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVu
dHJ5Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNN
YXA6OkVudHJ5OjpzZXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpKU01hcDo6bWFwRGF0YSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0
ZXJhdG9yOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVu
dGltZS9KU1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50
cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAo
SlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6
RW50cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6c2V0VmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6
OnNldERhdGEpOgorICAgICAgICAoSlNDOjpKU1NldDo6SlNTZXQpOgorICAgICAgICAoSlNDOjpK
U1NldDo6bWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
SlNTZXRJdGVyYXRvcjo6ZGVzdHJveSk6CisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9y
Lmg6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OkpTU2V0SXRlcmF0b3IpOgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwRGF0YS5jcHA6CisgICAgICAgIChKU0M6Ok1hcERhdGE6Ok1hcERhdGEp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpmaW5kKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6TWFwRGF0YTo6Y29udGFpbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjphZGQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpzZXQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXBEYXRhOjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZXBsYWNl
QW5kUGFja0JhY2tpbmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OnJl
cGxhY2VCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1
cmVTcGFjZUZvckFwcGVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OnZpc2l0
Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6ZGVzdHJveSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9NYXBEYXRhLmg6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
Ojpjb25zdF9pdGVyYXRvcjo6a2V5KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0
X2l0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCk6CisgICAgICAgIChK
U0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OktleVR5cGU6OktleVR5cGUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxF
bnRyeT46OmNvbnN0X2l0ZXJhdG9yOjppbnRlcm5hbEluY3JlbWVudCk6CisgICAgICAgIChKU0M6
Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmVuc3VyZVNsb3QpOgorICAgICAg
ICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRv
cik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5j
b25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3Rf
aXRlcmF0b3I6Om9wZXJhdG9yKToKKyAgICAgICAgKEpTQzo6PSk6CisgICAgICAgIChKU0M6Ok1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6dmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1
Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpzaXplKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmVuc3VyZVNsb3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
OjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6
b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJh
dG9yOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL01hcERhdGFJbmxp
bmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEu
Y3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQpOgorICAgICAgICAo
SlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6TWFwRGF0
YUltcGw8RW50cnk+OjphZGQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnNl
dCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpT
Qzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1h
cERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRNYXBEYXRhKToKKyAgICAgICAgKEpTQzo6bWFw
UHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAg
ICAgICAoSlNDOjptYXBQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9G
dW5jR2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6
bWFwUHJvdG9GdW5jU2V0KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAg
ICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRTZXREYXRh
KToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQWRkKToKKyAgICAgICAgKEpTQzo6c2V0UHJv
dG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNEZWxldGUpOgorICAgICAg
ICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5j
SGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6Omdl
dE1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNS0wMy0xMCAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjptYXgoKSBpbnN0ZWFkIG9mICh1bnNpZ25lZCktMS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAxZTBkZmMzZWUwYzcwYjZkZmJhZDBjMGRjNzQwODg1MzJkOTdkOWE1Li5iZmZkMjcyMWU3
ODBkMzk1MTBiNjk1NzA4MTgxMDZkYzBiMzgwOTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTUtMDMtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisK
KyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJp
YWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OmNvbnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBvc3NpYmxl
KTogRGVsZXRlZC4KKwogMjAxNS0wMy0xMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBSZWZhY3RvciBtZWRpYSBjb250cm9scyBjb2RlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzE0ZTY1OGQwODk2OGQyODdkZDdk
MzNlYjkyMDUzYjkyZDE2OTczYS4uOTNhNjFmZDc3ZTJjZGE4NTY0ZDJkZjQ0MTc5NWY0YzBkMWM2
OGU1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTA1LDcgKzUwNSw2
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwCiAgICAgcnVudGltZS9Mb29rdXAuY3BwCiAgICAgcnVudGltZS9NYXBDb25z
dHJ1Y3Rvci5jcHAKLSAgICBydW50aW1lL01hcERhdGEuY3BwCiAgICAgcnVudGltZS9NYXBJdGVy
YXRvckNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagppbmRleCA3OTQzNzVmZTUxNzgxODgwODAzN2M5ODc3NTU1ZjMzNDVkZmM4ZjEz
Li4wMDE1M2NhZTFhYjUyNWQ5OGUyMzQxZjFhMzFkZDk0Yjc3OWI4NTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTc3Miw3ICs3NzIsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxMaXRlcmFsUGFyc2VyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTG9va3VwLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwUHJvdG90eXBlLmNwcCIgLz4K
QEAgLTE1NzIsNiArMTU3MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XExvb2t1cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25z
dHJ1Y3Rvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRh
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVz
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yQ29u
c3RydWN0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRl
cmF0b3JQcm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TWFwUHJvdG90eXBlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMKaW5kZXggNWY2YTFmNGJkYzkxOWU1ZmZlMGFlOWNlY2U4ODk5MWZjMWE1
MDE3Zi4uN2Y2NzE2YzM5NzgxZjFhYjIxYjIwODg2OTk5YzU4NGRmZWRlZjcwYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNzI5LDkg
KzcyOSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlw
ZS5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGEuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25zdHJ1Y3Rvci5jcHAiPgogICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0zMzEwLDYgKzMzMDcsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmgiPgogICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNldFByb3RvdHlwZS5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
OWExOTZmNjYwOTVmY2QxMWEzMGJkZjUyN2EwOGE0Y2Q5ZGZmMmI2Li41NjllYWQzZDcyMjZhYWZl
ZDE0NTJjYzFiNjMwNDMyNzRiMjZmMzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTMzMCw4ICsxMzMwLDggQEAKIAkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNl
ck1vZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2
QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2NDExRDE2
NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENo
ZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1MDdENDE3Q0JDNkZEMDAxMUY2RTcg
LyogTWFwRGF0YS5jcHAgKi87IH07CiAJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1
MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBBNjQ0MTUxOTQyMEE2QzYxQUQxODgyRSAvKiBN
YXBEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTkzRDQzQ0NBMEJCRTA2RDg5QzU5NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1
NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNw
aWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAq
LzsgfTsKIAkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1
M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMwMzgsOCArMzAzOCw4
IEBACiAJCUE3N0YxODFGMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1v
ZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE3ODUwN0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0ODEsOCArNDQ4
MSw4IEBACiAJCQkJRjY5MkE4NjkwMjU1NTk3RDAxRkY2MEY3IC8qIExvb2t1cC5oICovLAogCQkJ
CUE3MDA4NzM3MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJ
QTcwMDg3MzgxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggKi8sCi0JCQkJQTc4
NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwICovLAogCQkJCUE3ODUwN0Q1MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8sCisJCQkJNTkzRDQzQ0NBMEJCRTA2RDg5QzU5
NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi8sCiAJCQkJQTc0REVGOEIxODJEOTkxNDAwNTIyQzIy
IC8qIE1hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3NERFRjhDMTgyRDk5MTQw
MDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQTc0REVGOEQxODJE
OTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCAqLywKQEAgLTYxMDMsNiAr
NjEwMyw3IEBACiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAv
KiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUg
LyogTWFwRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjkyMTgyRDk5MTQw
MDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzRERUY5NDE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtNzI0OCw3ICs3MjQ5LDYgQEAKIAkJCQlBN0E0QUUwODE3OTczQjI2
MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUE3ODUwN0Q2MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkxMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJ
dGVyYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5
MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCmluZGV4IGMwOGE5NzA4
YmU0NWE5MzQ5NTUyMzRiMzA1NzY2MGQ3ODE2NzUwZjQuLmI2OGU5YWYyMjM5OGZhMTRjNTA5Nzky
YmVlMDFjYmE0MjcyNDc4MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5j
cHAKQEAgLTI3LDI2ICsyNywyOSBAQAogI2luY2x1ZGUgIkpTTWFwLmgiCiAKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBE
YXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNvbnN0IENs
YXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PEpTTWFwKj4oY2VsbCktPn5KU01hcCgpOworfQorCiB2b2lkIEpT
TWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU01hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBKU01hcDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQordm9pZCBKU01hcDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGws
IENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNy
ZWF0ZSh2bSkpOworICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9r
ZW4pOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9y
ZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmgKaW5kZXggNDMxNTI3NGRlM2U5ODU3YzViYmUwODM1MTM3NTY5YTc3MTY0NmUwNS4uYWE0
MGNlNWMyNzNlNzEyZWJjMDVjYTAzZjkxMDFmYmU1YzIyNDZiOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcC5oCkBAIC0yNiwxNSArMjYsNTggQEAKICNpZm5kZWYgSlNNYXBfaAog
I2RlZmluZSBKU01hcF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4
cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAgLy8g
ZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAgICBw
cml2YXRlOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKKyAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVy
LCB2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5PiBNYXBE
YXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApAQCAtNTUsMTkgKzk4LDIwIEBAIGNs
YXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gY3Jl
YXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgTWFwRGF0YSogbWFwRGF0
YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAgIE1hcERhdGEqIG1hcERhdGEoKSB7
IHJldHVybiAmbV9tYXBEYXRhOyB9CiAKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAg
ICwgbV9tYXBEYXRhKCkKICAgICB7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYs
IENvcHlUb2tlbik7CiAKLSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9tYXBEYXRhOworICAg
IE1hcERhdGEgbV9tYXBEYXRhOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAppbmRleCBjMTY3YWNiY2YzYTNhOWI3YzRjZTVjYTcy
OGEzODE1Y2JiOTZjYmJlLi5lOWQ3ZDQyZmI0ZTM4ZWQzMTdjZDYyYmYwNjQyY2MxMTVmMWU2M2Yz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cApAQCAtNDAsMTUgKzQwLDE5IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU01hcCogaXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1f
aXRlcmF0ZWRPYmplY3REYXRhLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEo
KSk7Cit9CisKK3ZvaWQgSlNNYXBJdGVyYXRvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKS0+fkpTTWFwSXRlcmF0b3IoKTsKIH0KIAog
dm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNNYXBJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U01hcEl0ZXJhdG9yKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOyAgICAgICAgCisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmpl
Y3REYXRhKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXApOwogfQogCiBK
U1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5oCmluZGV4IDYzZGQ1ZThiMTFmOTZhNDQ2MWFkZDVjZWEzYzQ0N2Fk
YzYwMDQwY2MuLjU4ZjFhYmZhYTA1MWJkZWM3ODIzN2Y1OTVmOTU4YTZhZmE4OWE4YWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKQEAgLTg3LDEz
ICs4NywxMyBAQCBjbGFzcyBKU01hcEl0ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0
ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
TWFwPiBtX21hcDsKLSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERh
dGE7Ci0gICAgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU01hcDo6
TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5k
IG1fa2luZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAppbmRl
eCAzYzFkMTI0YmM1NjJkYjZkYzFiYTAwYzk2M2JhNTQ5M2U2MDM3Mzc3Li5kYWE5Mjg0MGQ1YmMw
OTYyMjY4NWUxODAwNTJmODVlMzAxZDM3YWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZXQuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKIAogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1
ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCkBAIC0zNSwxNyArMzUsMjEgQEAKIAogY29u
c3QgQ2xhc3NJbmZvIEpTU2V0OjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTU2V0KSB9OwogCit2b2lkIEpTU2V0OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+fkpTU2V0KCk7Cit9CisKIHZv
aWQgSlNTZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIEpTU2V0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fbWFwRGF0YSk7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0
RGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwogfQogCi12b2lkIEpTU2V0OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit2b2lkIEpTU2V0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCog
Y2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKIHsKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgbV9tYXBEYXRhLnNldCh2bSwgdGhpcywgTWFwRGF0
YTo6Y3JlYXRlKHZtKSk7CisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9y
LCB0b2tlbik7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2lu
Z1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0LmgKaW5kZXggZmMwYWEzMGZiOTU3Y2I4OWY5NWU1NjdlZjE2MGNmODE1MDNlMjUyZS4u
MTEwNGJjZmZhYTRiNWMwYjUwMDEwYTMxNTczMDRlN2U1ODk4YzQyNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldC5oCkBAIC0yNiwxNSArMjYsNTUgQEAKICNpZm5kZWYgSlNTZXRf
aAogI2RlZmluZSBKU1NldF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CitjbGFzcyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBK
U0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25z
IGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAg
Ly8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisKKyAgICBw
dWJsaWM6CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fa2V5OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJm1fa2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
a2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldFZh
bHVlKFZNJiwgY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gRG8gbm90aGluZy4KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2tleS5jbGVhcigpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnk+IFNldERhdGE7CiAKICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCkBAIC01NSwxOSArOTUsMjAgQEAgY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJl
KTsKICAgICB9CiAKLSAgICBNYXBEYXRhKiBtYXBEYXRhKCkgeyByZXR1cm4gbV9tYXBEYXRhLmdl
dCgpOyB9CisgICAgU2V0RGF0YSogc2V0RGF0YSgpIHsgcmV0dXJuICZtX3NldERhdGE7IH0KIAog
cHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3NldERhdGEoKQogICAgIHsKICAg
ICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0g
ICAgCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgV3JpdGVCYXJy
aWVyPE1hcERhdGE+IG1fbWFwRGF0YTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3Jl
KEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIFNldERhdGEgbV9zZXRE
YXRhOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZXRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcAppbmRleCAyZmMyOTg5MDE3Njg3M2U0NGJiOTMxNTI0YzVmMDNlZGEwNGYzNzVl
Li41ZWNhYzEyZDljNGNhMjI3NWVkZGFkOWU3ODk3ODU0OGM5N2U3YTRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQw
LDE5IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1NldCog
aXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1f
c2V0LnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3RE
YXRhLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7CiB9CiAKIHZvaWQg
SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIEpTU2V0SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJ
dGVyYXRvcio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsgICAgICAgIAorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0
YSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKK30KKwordm9pZCBK
U1NldEl0ZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXRJ
dGVyYXRvcio+KGNlbGwpLT5+SlNTZXRJdGVyYXRvcigpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRl
cmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1Zh
bHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXRJdGVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5oCmluZGV4IDljNzBjMjZlNTBhMmI1ZDk1ZThkYzgxZGZkMTlkYWFkNDI1MDdiZDcuLjZlNmMz
ODRkNWQzMjk2NjkzY2MyN2ExZDgwZmY0ZjgxOGY0ZDcyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKQEAgLTgwLDE4ICs4MCwxOCBAQCBjbGFz
cyBKU1NldEl0ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHByaXZhdGU6
CiAgICAgSlNTZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCog
aXRlcmF0ZWRPYmplY3QsIFNldEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bWFwRGF0
YSgpLT5iZWdpbigpKQorICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPnNldERh
dGEoKS0+YmVnaW4oKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNTZXQqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1
ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBXcml0ZUJh
cnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERhdGE7Ci0gICAgTWFwRGF0YTo6Y29uc3Rf
aXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU1NldDo6U2V0RGF0YTo6Y29uc3RfaXRlcmF0b3Ig
bV9pdGVyYXRvcjsKICAgICBTZXRJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKaW5kZXggYjA1NjkxYzg1MmFiMmZkMmJi
M2U1NDdhNGNkYzA5ZGUzNmNiMTdmZS4uNDFkODExNmQyMTU3ZjcyYmYzNDkzMTVkZThlOGEzYTc3
MDQxNTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0
YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKQEAg
LTIzLDI1MiArMjMsMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCi0KLSNpbmNsdWRl
ICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLQotI2luY2x1ZGUgPHd0Zi9Dcnlw
dG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBNYXBEYXRhOjpzX2luZm8g
PSB7ICJNYXBEYXRhIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNYXBEYXRhKSB9OwotCi1z
dGF0aWMgY29uc3QgaW50MzJfdCBtaW5pbXVtTWFwU2l6ZSA9IDg7Ci0KLU1hcERhdGE6Ok1hcERh
dGEoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0ubWFwRGF0YVN0cnVjdHVyZS5nZXQoKSkKLSAg
ICAsIG1fY2FwYWNpdHkoMCkKLSAgICAsIG1fc2l6ZSgwKQotICAgICwgbV9kZWxldGVkQ291bnQo
MCkKLSAgICAsIG1faXRlcmF0b3JDb3VudCgwKQotICAgICwgbV9lbnRyaWVzKDApCi17Ci19Ci0K
LU1hcERhdGE6OkVudHJ5KiBNYXBEYXRhOjpmaW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlU
eXBlIGtleSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgYXV0
byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFs
dWUoY2FsbEZyYW1lKS5pbXBsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVk
VGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2Vu
dHJpZXNbaXRlci0+dmFsdWVdOwotICAgIH0KLSAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkp
IHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2wo
a2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1f
c3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBy
ZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Ci0gICAgfQotICAgIGlmIChrZXkudmFsdWUu
aXNDZWxsKCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtl
eS52YWx1ZS5hc0NlbGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNb
aXRlci0+dmFsdWVdOwotICAgIH0KLQotICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxl
LmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOwotICAgIGlmIChpdGVyID09IG1fdmFs
dWVLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gJm1fZW50
cmllc1tpdGVyLT52YWx1ZV07Ci19Ci0KLWJvb2wgTWFwRGF0YTo6Y29udGFpbnMoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQotewotICAgIHJldHVybiBmaW5kKGNhbGxGcmFtZSwg
a2V5KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PiBNYXBEYXRh
OjpFbnRyeSogTWFwRGF0YTo6YWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBNYXAmIG1hcCwgS2V5
IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKLXsKLSAgICB0eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGxv
Y2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKLSAgICBpZiAobG9jYXRpb24gIT0gbWFwLmVuZCgpKQot
ICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+dmFsdWVdOwotICAgIAotICAgIGlm
ICghZW5zdXJlU3BhY2VGb3JBcHBlbmQoY2FsbEZyYW1lKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoa2V5LCBtX3NpemUpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBFbnRyeSogZW50cnkgPSAmbV9lbnRyaWVzW21f
c2l6ZSsrXTsKLSAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOwotICAgIGVudHJ5LT5rZXkuc2V0KGNh
bGxGcmFtZS0+dm0oKSwgdGhpcywga2V5VmFsdWUudmFsdWUpOwotICAgIHJldHVybiBlbnRyeTsK
LX0KLQotdm9pZCBNYXBEYXRhOjpzZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEVudHJ5KiBsb2NhdGlvbiA9IGFkZChjYWxsRnJhbWUs
IGtleSk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIGxvY2F0aW9u
LT52YWx1ZS5zZXQoY2FsbEZyYW1lLT52bSgpLCB0aGlzLCB2YWx1ZSk7Ci19Ci0gICAgCi1NYXBE
YXRhOjpFbnRyeSogTWFwRGF0YTo6YWRkKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtl
eSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBhZGQo
Y2FsbEZyYW1lLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVl
KGNhbGxGcmFtZSkuaW1wbCgpLCBrZXkpOwotICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkK
LSAgICAgICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1i
b2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKLSAgICBpZiAoa2V5LnZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9jZWxsS2V5ZWRU
YWJsZSwga2V5LnZhbHVlLmFzQ2VsbCgpLCBrZXkpOwotICAgIHJldHVybiBhZGQoY2FsbEZyYW1l
LCBtX3ZhbHVlS2V5ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSksIGtleSk7Ci19
Ci0KLUpTVmFsdWUgTWFwRGF0YTo6Z2V0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtl
eSkKLXsKLSAgICBpZiAoRW50cnkqIGVudHJ5ID0gZmluZChjYWxsRnJhbWUsIGtleSkpCi0gICAg
ICAgIHJldHVybiBlbnRyeS0+dmFsdWUuZ2V0KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoKTsKLX0K
LQotYm9vbCBNYXBEYXRhOjpyZW1vdmUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5
KQotewotICAgIGludDMyX3QgbG9jYXRpb247Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5n
KGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIg
PT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3N0cmluZ0tleWVkVGFi
bGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gIGVsc2UgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7
Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtl
eS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N5
bWJvbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fc3ltYm9sS2V5ZWRUYWJsZS5yZW1v
dmUoaXRlcik7Ci0gICAgfSBlbHNlIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAg
YXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1f
Y2VsbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkp
OwotICAgICAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAg
ICAgbV92YWx1ZUtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0KLSAgICBtX2VudHJpZXNb
bG9jYXRpb25dLmtleS5jbGVhcigpOwotICAgIG1fZW50cmllc1tsb2NhdGlvbl0udmFsdWUuY2xl
YXIoKTsKLSAgICBtX2RlbGV0ZWRDb3VudCsrOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IE1hcERhdGE6OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwg
aW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoc2hvdWxkUGFjaygpKTsKLSAgICBp
bnQzMl90IG5ld0VuZCA9IDA7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsK
LSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgewotICAgICAgICBFbnRy
eSYgZW50cnkgPSBtX2VudHJpZXNbaV07Ci0gICAgICAgIGlmICghZW50cnkua2V5KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIEFTU0VSVChuZXdFbmQgPCBuZXdDYXBhY2l0eSk7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uW25ld0VuZF0gPSBlbnRyeTsKLQotICAgICAgICAvLyBXZSBvdmVy
d3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRoIGEgZm9yd2FyZGluZyBpbmRleCBmb3IgdGhlIG5ldyBl
bnRyeSwKLSAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZml4IHVwIG91ciBoYXNoIHRhYmxlcyBi
ZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0aW9uYWwKLSAgICAgICAgLy8gaGFzaCBsb29rdXBzCi0g
ICAgICAgIGVudHJ5LnZhbHVlLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoanNOdW1iZXIobmV3RW5k
KSk7Ci0gICAgICAgIG5ld0VuZCsrOwotICAgIH0KLQotICAgIC8vIEZpeHVwIGZvciB0aGUgaGFz
aG1hcHMKLSAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsgcHRy
ICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9
IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChh
dXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVkVGFi
bGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFs
dWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJpbmdL
ZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsrcHRy
KQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLnZhbHVlLmdldCgp
LmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zeW1ib2xLZXllZFRhYmxlLmJlZ2lu
KCk7IHB0ciAhPSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLQot
ICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0gICAgbV9k
ZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICAgIG1f
c2l6ZSA9IG5ld0VuZDsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKLQotfQotCi12b2lk
IE1hcERhdGE6OnJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90
IG5ld0NhcGFjaXR5KQotewotICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwotICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2Nh
cGFjaXR5KTsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5
KSAqIG1fc2l6ZSk7Ci0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OwotICAgIG1fZW50cmll
cyA9IGRlc3RpbmF0aW9uOwotfQotCi1DaGVja2VkQm9vbGVhbiBNYXBEYXRhOjplbnN1cmVTcGFj
ZUZvckFwcGVuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBpZiAobV9jYXBhY2l0eSA+
IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzaXplX3QgcmVxdWlyZWRTaXpl
ID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBtaW5pbXVtTWFw
U2l6ZSk7Ci0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAgRGVmZXJHQyBkZWZlcigqY2Fs
bEZyYW1lLT5oZWFwKCkpOwotICAgIGlmICghY2FsbEZyYW1lLT5oZWFwKCktPnRyeUFsbG9jYXRl
U3RvcmFnZSh0aGlzLCByZXF1aXJlZFNpemUgKiBzaXplb2YoRW50cnkpLCAmbmV3U3RvcmFnZSkp
IHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxF
bnRyeSo+KG5ld1N0b3JhZ2UpOwotICAgIGlmIChzaG91bGRQYWNrKCkpCi0gICAgICAgIHJlcGxh
Y2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7Ci0gICAgZWxz
ZQotICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7
Ci0gICAgY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcih0aGlzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1hcERhdGEqPihjZWxsKTsK
LSAgICBFbnRyeSogZW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50cmllczsKLSAgICBpZiAoIWVu
dHJpZXMpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPm1f
c2l6ZTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9kZWxldGVkQ291bnQpIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghZW50cmll
c1tpXS5rZXkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZW50cmllc1tpXS5rZXkpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVu
dHJpZXNbaV0udmFsdWUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKCZlbnRyaWVzWzBdLmtleSwgc2l6ZSAqIChzaXplb2YoRW50cnkpIC8gc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLQotICAgIHZpc2l0b3IuY29weUxhdGVyKHRo
aXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmllcywgdGhpc09iamVjdC0+
Y2FwYWNpdHlJbkJ5dGVzKCkpOwotfQotCi12b2lkIE1hcERhdGE6OmNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewot
ICAgIE1hcERhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TWFwRGF0YSo+KGNlbGwpOwotICAgIGlm
ICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weSh0aGlzT2JqZWN0LT5tX2VudHJpZXMpKSB7Ci0gICAgICAgIEVudHJ5KiBvbGRFbnRy
aWVzID0gdGhpc09iamVjdC0+bV9lbnRyaWVzOwotICAgICAgICBFbnRyeSogbmV3RW50cmllcyA9
IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3Qt
PmNhcGFjaXR5SW5CeXRlcygpKSk7Ci0gICAgICAgIGlmICh0aGlzT2JqZWN0LT5zaG91bGRQYWNr
KCkpCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5yZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShu
ZXdFbnRyaWVzLCB0aGlzT2JqZWN0LT5tX2NhcGFjaXR5KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgdGhpc09iamVjdC0+cmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCB0aGlzT2Jq
ZWN0LT5tX2NhcGFjaXR5KTsKLSAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJpZXMsIHRo
aXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLSAgICB9Ci0gICAgQmFzZTo6Y29weUJhY2tp
bmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8TWFwRGF0YSo+KGNlbGwpLT5+TWFw
RGF0YSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKaW5k
ZXggYjFkNTMwNjI5NmU1MDQ2YmQ0MDczZWU5OTkxOGVhNmZlNGZiMTk0NS4uNzI2YjE4YTU5ZjY1
MTZlMmQ2ODRkODNlMGU4YTE4ZDQwZjY4ZDhhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcERhdGEuaApAQCAtMjcsMjUgKzI3LDMwIEBACiAjZGVmaW5lIE1hcERhdGFfaAogCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBNYXBEYXRhIDogcHVi
bGljIEpTQ2VsbCB7CitjbGFzcyBFeGVjU3RhdGU7CisKK2NsYXNzIE1hcERhdGFTdGF0aWNzIHsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCBpbnQz
Ml90IG1pbmltdW1NYXBTaXplID0gODsKK307CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
Y2xhc3MgTWFwRGF0YUltcGwgeworcHVibGljOgogICAgIHN0cnVjdCBjb25zdF9pdGVyYXRvciB7
Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgY29uc3Rf
aXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0X2l0ZXJhdG9yKCk7
CiAgICAgICAgIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IG9wZXJh
dG9yKigpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgUkVMRUFTRV9BU1NF
UlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0ua2V5Lmdl
dCgpOyB9Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFh
dEVuZCgpKTsgcmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlLmdldCgp
OyB9CisgICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQo
KSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkoKS5nZXQoKTsgfQor
ICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7
IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgpLmdldCgpOyB9CiAg
ICAgICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsgaW50ZXJuYWxJbmNy
ZW1lbnQoKTsgfQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1hcERh
dGEqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRhSW1w
bCopOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVy
KTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcik7
CiAgICAgICAgIHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCk7IH0KQEAgLTYwLDcgKzY1LDcgQEAgY2xhc3MgTWFwRGF0YSA6IHB1Ymxp
YyBKU0NlbGwgewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0RW5kKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVybmFsSW5jcmVtZW50
KCk7Ci0gICAgICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAgICAgY29uc3QgTWFw
RGF0YUltcGwqIG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4OwogICAgIH07CiAK
QEAgLTcwLDQ1ICs3NSwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBEYXRhKiBjcmVhdGUo
Vk0mIHZtKQotICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsKLSAgICAgICAgbWFw
RGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFwRGF0YTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIE1hcERhdGFJbXBsKCk7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUqLCBLZXlUeXBlLCBK
U1ZhbHVlKTsKLSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29s
IHJlbW92ZShDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKENhbGxGcmFt
ZSosIEtleVR5cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZSAtIG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CisgICAgSlNW
YWx1ZSBnZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1vdmUoRXhlY1N0YXRl
KiwgS2V5VHlwZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAg
ICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2RlbGV0
ZWRDb3VudDsgfQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBj
b25zdF9pdGVyYXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9p
ZCBjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogcHJpdmF0ZToK
ICAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4g
SW5kZXhUcmFpdHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVudHJ5
IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMgYmUg
V3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVl
OwotICAgIH07Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJfdCwgdHlwZW5h
bWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJhaXRzPEpTQ2Vs
bCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhh
c2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxTdHJpbmdJ
bXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4VHJhaXRzPiBT
dHJpbmdLZXllZE1hcDsKQEAgLTExNiwxOCArMTAxLDEyIEBAIGNsYXNzIE1hcERhdGEgOiBwdWJs
aWMgSlNDZWxsIHsKIAogICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMoKSB7IHJldHVybiBtX2Nh
cGFjaXR5ICogc2l6ZW9mKEVudHJ5KTsgfQogCi0gICAgTWFwRGF0YShWTSYpOwotICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwotCi0KLSAgICBBTFdBWVNfSU5MSU5F
IEVudHJ5KiBmaW5kKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIEFMV0FZU19JTkxJTkUgRW50
cnkqIGFkZChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTWFw
LCB0eXBlbmFtZSBLZXk+IEFMV0FZU19JTkxJTkUgRW50cnkqIGFkZChDYWxsRnJhbWUqLCBNYXAm
LCBLZXksIEtleVR5cGUpOworICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQoRXhlY1N0YXRl
KiwgS2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpT
Q2VsbCogb3duZXIsIEtleVR5cGUpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVu
YW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3du
ZXIsIE1hcCYsIEtleSwgS2V5VHlwZSk7CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxk
UGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50ICYmICFtX2l0ZXJhdG9yQ291bnQ7
IH0KLSAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChDYWxsRnJhbWUqKTsK
KyAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqLCBKU0Nl
bGwqIG93bmVyKTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXBsYWNlQW5kUGFja0JhY2tp
bmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CiAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQz
Ml90IG5ld1NpemUpOwpAQCAtMTQzLDcgKzEyMiwxOCBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgRW50cnkqIG1fZW50cmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBNYXBEYXRhOjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJ
TkUgTWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCgpCisgICAgOiBtX2NhcGFjaXR5KDAp
CisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCisgICAgLCBtX2l0ZXJh
dG9yQ291bnQoMCkKKyAgICAsIG1fZW50cmllcyhudWxscHRyKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNs
ZWFyKCkKIHsKICAgICBtX2NlbGxLZXllZFRhYmxlLmNsZWFyKCk7CiAgICAgbV92YWx1ZUtleWVk
VGFibGUuY2xlYXIoKTsKQEAgLTE1NSw3ICsxNDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFw
RGF0YTo6Y2xlYXIoKQogICAgIG1fZW50cmllcyA9IG51bGxwdHI7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgTWFwRGF0YTo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpLZXlUeXBlOjpLZXlU
eXBlKEpTVmFsdWUgdikKIHsKICAgICBpZiAoIXYuaXNEb3VibGUoKSkgewogICAgICAgICB2YWx1
ZSA9IHY7CkBAIC0xNzQsNTUgKzE2NSw2MiBAQCBBTFdBWVNfSU5MSU5FIE1hcERhdGE6OktleVR5
cGU6OktleVR5cGUoSlNWYWx1ZSB2KQogICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5j
cmVtZW50KCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KCkKIHsK
ICAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzOwogICAgIHNpemVfdCBp
bmRleCA9IG1faW5kZXggKyAxOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsK
LSAgICB3aGlsZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSkKKyAgICB3aGls
ZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSgpKQogICAgICAgICBpbmRleCsr
OwogICAgIG1faW5kZXggPSBpbmRleDsKIH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCgpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0
b3I6OmVuc3VyZVNsb3QoKQogewogICAgIC8vIFdoZW4gYW4gaXRlcmF0b3IgZXhpc3RzIG91dHNp
ZGUgb2YgaG9zdCBjb3N0IGl0IGlzIHBvc3NpYmxlIGZvcgogICAgIC8vIHRoZSBjb250YWluaW5n
IG1hcCB0byBiZSBtb2RpZmllZAogICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2Vu
dHJpZXM7CiAgICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleDsKICAgICBzaXplX3QgZW5kID0gbV9t
YXBEYXRhLT5tX3NpemU7Ci0gICAgaWYgKGluZGV4IDwgZW5kICYmIGVudHJpZXNbaW5kZXhdLmtl
eSkKKyAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqIG1hcERhdGEp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50
cnk+Ojpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGw8RW50
cnk+KiBtYXBEYXRhKQogICAgIDogbV9tYXBEYXRhKG1hcERhdGEpCiAgICAgLCBtX2luZGV4KC0x
KQogewogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6
fmNvbnN0X2l0ZXJhdG9yKCkKIHsKICAgICBtX21hcERhdGEtPm1faXRlcmF0b3JDb3VudC0tOwog
fQogCi1BTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFs
dWU+IE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpT
VmFsdWUsIEpTVmFsdWU+IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJh
dG9yKigpIGNvbnN0CiB7CiAgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVz
W21faW5kZXhdOwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVl
PihlbnRyeS0+a2V5LmdldCgpLCBlbnRyeS0+dmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBXVEY6
OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVudHJ5
LT52YWx1ZSgpLmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25zdF9pdGVy
YXRvciBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5kKGNvbnN0IE1hcERhdGEqIG1hcERhdGEp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYXV0byBNYXBEYXRhSW1w
bDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YUltcGw8RW50cnk+KiBt
YXBEYXRhKSAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdCht
YXBEYXRhKTsKICAgICByZXN1bHQubV9pbmRleCA9IC0xOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3Ih
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4K
K0FMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpv
cGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICBBU1NFUlQob3Ro
ZXIubV9tYXBEYXRhID09IG1fbWFwRGF0YSk7CiAgICAgaWYgKGF0RW5kKCkgJiYgb3RoZXIuYXRF
bmQoKSkKQEAgLTIzMCw3ICsyMjgsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6Y29u
c3RfaXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aAogICAgIHJl
dHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXg7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYm9vbCBNYXBE
YXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0
ZXJhdG9yJiBvdGhlcikKIHsKICAgICByZXR1cm4gISgqdGhpcyAhPSBvdGhlcik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43NTA3ODdiZTAxNmNkYjhiYjQyOTcyOTExZmFkNGY4ZDk4MTEwOWU2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAt
MCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIk1h
cERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
aW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQoRXhlY1N0YXRlKiBleGVjLCBL
ZXlUeXBlIGtleSkKK3sKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
YXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+
dmFsdWUoZXhlYykuaW1wbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRh
YmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRy
aWVzW2l0ZXItPnZhbHVlXTsKKyAgICB9CisgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7
CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtl
eS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N5
bWJvbEtleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVlLmlz
Q2VsbCgpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXku
dmFsdWUuYXNDZWxsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0
ZXItPnZhbHVlXTsKKyAgICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5m
aW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKKyAgICBpZiAoaXRlciA9PSBtX3ZhbHVl
S2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZtX2VudHJp
ZXNbaXRlci0+dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBi
b29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29udGFpbnMoRXhlY1N0YXRlKiBleGVjLCBLZXlUeXBl
IGtleSkKK3sKKyAgICByZXR1cm4gZmluZChleGVjLCBrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBFbnRyeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4KK2lubGlu
ZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnk+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IG93bmVyLCBNYXAmIG1hcCwgS2V5IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKK3sKKyAgICB0eXBl
bmFtZSBNYXA6Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAobG9j
YXRpb24gIT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+
dmFsdWVdOworCisgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25lcikpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9zaXpl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRW50cnkqIGVu
dHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgbmV3IChlbnRyeSkgRW50cnkoKTsKKyAg
ICBlbnRyeS0+c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1ZS52YWx1ZSk7CisgICAg
cmV0dXJuIGVudHJ5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lk
IE1hcERhdGFJbXBsPEVudHJ5Pjo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwg
S2V5VHlwZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgRW50cnkqIGxvY2F0aW9uID0gYWRk
KGV4ZWMsIG93bmVyLCBrZXkpOworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybjsK
KyAgICBsb2NhdGlvbi0+c2V0VmFsdWUoZXhlYy0+dm0oKSwgb3duZXIsIHZhbHVlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5
Pjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgS2V5VHlwZSBrZXkpCit7Cisg
ICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93
bmVyLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMp
LmltcGwoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCisgICAgICAgIHJl
dHVybiBhZGQoZXhlYywgb3duZXIsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1ib2woa2V5LnZh
bHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX2NlbGxLZXllZFRhYmxlLCBr
ZXkudmFsdWUuYXNDZWxsKCksIGtleSk7CisgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwgbV92
YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBKU1ZhbHVlIE1hcERhdGFJbXBsPEVudHJ5
Pjo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKEVudHJ5KiBl
bnRyeSA9IGZpbmQoZXhlYywga2V5KSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT52YWx1ZSgpLmdl
dCgpOworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgoraW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVj
LCBLZXlUeXBlIGtleSkKK3sKKyAgICBpbnQzMl90IGxvY2F0aW9uOworICAgIGlmIChrZXkudmFs
dWUuaXNTdHJpbmcoKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUu
ZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOworICAgICAgICBp
ZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAgICAgIG1fc3RyaW5n
S2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSAgZWxzZSBpZiAoa2V5LnZhbHVlLmlzU3lt
Ym9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNT
eW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChpdGVy
ID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zeW1ib2xLZXllZFRh
YmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVsc2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewor
ICAgICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2Vs
bCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAg
ICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5
LnZhbHVlKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVl
OworICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfQorICAgIG1f
ZW50cmllc1tsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2RlbGV0ZWRDb3VudCsrOworICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1h
cERhdGFJbXBsPEVudHJ5Pjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRlc3Rp
bmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVChzaG91bGRQYWNrKCkp
OworICAgIGludDMyX3QgbmV3RW5kID0gMDsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0
eSA+IDApOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAg
ICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAgaWYgKCFlbnRyeS5rZXko
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQobmV3RW5kIDwgbmV3Q2Fw
YWNpdHkpOworICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7CisKKyAgICAgICAg
Ly8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5kZXggZm9y
IHRoZSBuZXcgZW50cnksCisgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBvdXIgaGFz
aCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFsCisgICAgICAgIC8vIGhhc2gg
bG9va3VwcworICAgICAgICBlbnRyeS5rZXkoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVt
YmVyKG5ld0VuZCkpOworICAgICAgICBuZXdFbmQrKzsKKyAgICB9CisKKyAgICAvLyBGaXh1cCBm
b3IgdGhlIGhhc2htYXBzCisgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0
ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwor
ICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2Nl
bGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmll
c1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVu
ZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5r
ZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRU
YWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAg
ICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0lu
dDMyKCk7CisKKyAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQp
OworICAgIG1fZGVsZXRlZENvdW50ID0gMDsKKworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKKyAgICBtX3NpemUgPSBuZXdFbmQ7CisgICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50
cnk+OjpyZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdD
YXBhY2l0eSkKK3sKKyAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQobmV3Q2FwYWNpdHkgPiAwKTsKKyAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0
eSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBt
X3NpemUpOworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX2VudHJpZXMgPSBk
ZXN0aW5hdGlvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIpCit7CisgICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6
bWF4KG1fY2FwYWNpdHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgTWFwRGF0YVN0YXRpY3M6Om1p
bmltdW1NYXBTaXplKTsKKyAgICB2b2lkKiBuZXdTdG9yYWdlID0gbnVsbHB0cjsKKyAgICBEZWZl
ckdDIGRlZmVyKCpleGVjLT5oZWFwKCkpOworICAgIGlmICghZXhlYy0+aGVhcCgpLT50cnlBbGxv
Y2F0ZVN0b3JhZ2Uob3duZXIsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZuZXdTdG9y
YWdlKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxF
bnRyeSo+KG5ld1N0b3JhZ2UpOworICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAgICAgIHJlcGxh
Y2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAgZWxz
ZQorICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7
CisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBpZiAoIWVudHJpZXMp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKKyAgICAgICAgZm9y
IChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghZW50
cmllc1tpXS5rZXkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVu
dHJpZXNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQor
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5rZXkoKSwgbV9zaXplICog
KHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAg
dmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50cmll
cywgY2FwYWNpdHlJbkJ5dGVzKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lu
bGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZShDb3B5VmlzaXRv
ciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIGlmICh0b2tlbiA9PSBNYXBCYWNr
aW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2VudHJpZXMp
KSB7CisgICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzOworICAgICAgICBFbnRy
eSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1Nw
YWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CisgICAgICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAg
ICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBtX2NhcGFjaXR5
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCBtX2NhcGFjaXR5KTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJpZXMsIGNh
cGFjaXR5SW5CeXRlcygpKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCmluZGV4IDU0ODIyMjc2OTQwMGI3MTg1MmFmN2Ri
OGI3NWVmNTA3NTQ0ZWRkNGYuLjM0YjBlOTg4NDk3ZGU1NTg4Y2UxYzUwMTZmMDVmMDVhNjYwZjA5
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNw
cApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFw
RGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBNYXBQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNNYXA6Ok1hcERhdGEqIGdldE1h
cERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFt
ZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwpAQCAtOTIs
NyArOTIsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBNYXBEYXRhKiBnZXRNYXBEYXRhKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGRhdGEtPmNsZWFyKCk7CkBAIC0x
MDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmND
bGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0
YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oZGF0YS0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsK
QEAgLTEwOSw3ICsxMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOwpAQCAtMTQxLDcgKzE0MSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdl
dE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBkYXRhLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
cFByb3RvRnVuY0dldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZGF0YS0+Y29udGFpbnMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKSkpOwpAQCAtMTYwLDE2ICsxNjAsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
OworICAgIEpTTWFwOjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIHRoaXNW
YWx1ZSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9IGpzQ2FzdDxKU01h
cCo+KHRoaXNWYWx1ZSk7CisgICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgbWFwLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBk
YXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IEpTTWFwOjpNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGRhdGEtPnNpemUoY2FsbEZyYW1lKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NldFByb3RvdHlwZS5jcHAKaW5kZXggZjg4ZWE3Y2Y5ODY4ZjY2OGI4YzJlODg4MTVmZjY1
Y2YzOTkyN2I0OS4uNjM4NjlmMzJmYzI0ZGIxZDNiYTAwNjc0MzIzMjNmNGRhZjY1Nzc1OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJK
U1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgi
CisjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIFNldFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNpemUs
IGFjY2Vzc29yLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0
aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlz
VmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1NldDo6U2V0RGF0YSogZ2V0U2V0RGF0YShD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgaWYgKCF0aGlz
VmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVh
dGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CkBAIC04NiwyMSArODYs
MjMgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2Fs
bEZyYW1lLCBBU0NJSUxpdGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1TZXQgb2Jq
ZWN0IikpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIHNldC0+bWFwRGF0
YSgpOworICAgIHJldHVybiBzZXQtPnNldERhdGEoKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
TWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7Cisg
ICAgSlNTZXQ6OlNldERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNhbGxGcmFtZSwgdGhpc1ZhbHVl
KTsKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldCogc2V0ID0ganNDYXN0PEpTU2V0Kj4o
dGhpc1ZhbHVlKTsKKyAgICBkYXRhLT5zZXQoY2FsbEZyYW1lLCBzZXQsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhpc1ZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQ
cm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRh
ID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpT
U2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhLT5jbGVhcigpOwpAQCAtMTA5LDcgKzExMSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5j
RGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRN
YXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNTZXQ6OlNl
dERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJl
bW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0xMTcsNyArMTE5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJv
dG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRh
ID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpT
U2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhp
c1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKQEAgLTE0Nyw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHNldFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisgICAgSlNTZXQ6OlNldERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRhaW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSkpKTsKQEAgLTE1NSw3ICsxNTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgSlNTZXQ6OlNldERhdGEqIGRhdGEgPSBnZXRTZXREYXRhKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZGF0YS0+c2l6ZShjYWxsRnJhbWUpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggYTczMjRiNGFkZjFkZTg3N2I3NDYwNjhkYTU0MTNk
YWJmNTNiNTU0Yy4uZThmYzBlMzIwYjVjYTNhZTEzM2JhOGY0NmFhNThlYzU5YzdlMWQyOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMjMzLDcgKzIzMyw2IEBAIHN0YXRp
YyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxlQWxsb2NhdG9yJiBleGVjdXRhYmxlQWxs
b2NhdG9yKQogICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVu
bGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBtYXBEYXRhU3RydWN0
dXJlLnNldCgqdGhpcywgTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMp
CiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IDk0YzQ4M2I3MjM2MDIyODNlZDQwZGE1NWRlZDI5NTUzYTAzMTc4
MjUuLjdlNzFkZWY5YzdhNTBmOTdmY2U2YTFiOTk3YjYwN2M2YWFmYjljNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjY4LDcgKzI2OCw2IEBAIGNsYXNzIFZNIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiB7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVy
dHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBtYXBEYXRhU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogI2lmIEVOQUJM
RShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1
cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L01hcERhdGFJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL01hcERhdGFJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhY2E2MmQ0MzkyZDI1YjY2NDIyNjM4
NzkwZGM3NDcyZjIwZDFlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfTWFwRGF0YUlubGlpbmVzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0Rf
TWFwRGF0YUlubGlpbmVzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXBEYXRhSW5saW5l
cy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCBkY2E1NjAzZjljMzk5NjE4MzM4YWY3ZTBkYjMxYWRm
MTBjYjZiNmY5Li42MGRmNjBmYTRmOTdlMGI0ZDk4MWVlMDI2OWYxYTgzOWEzOGEwYjk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTU2V0Lmg+CiAjaW5j
bHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NYXBEYXRh
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9NYXBEYXRhSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFy
cmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KQEAgLTg3LDcgKzg4LDggQEAKIAog
ZW51bSBXYWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0
YXJ0VmlzaXRNZW1iZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsCiAgICAgT2JqZWN0U3RhcnRTdGF0
ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIsCi0gICAgTWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeSwgTWFwRGF0YUVuZFZpc2l0S2V5LCBNYXBEYXRhRW5kVmlzaXRW
YWx1ZSB9OworICAgIE1hcERhdGFTdGFydFZpc2l0RW50cnksIE1hcERhdGFFbmRWaXNpdEtleSwg
TWFwRGF0YUVuZFZpc2l0VmFsdWUsCisgICAgU2V0RGF0YVN0YXJ0VmlzaXRFbnRyeSwgU2V0RGF0
YUVuZFZpc2l0S2V5IH07CiAKIC8vIFRoZXNlIGNhbid0IGJlIHJlb3JkZXJlZCwgYW5kIGFueSBu
ZXcgdHlwZXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiBlbnVtIFNlcmlh
bGl6YXRpb25UYWcgewpAQCAtMTIyLDggKzEyNCw5IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7
CiAgICAgU2V0T2JqZWN0VGFnID0gMjksCiAgICAgTWFwT2JqZWN0VGFnID0gMzAsCiAgICAgTm9u
TWFwUHJvcGVydGllc1RhZyA9IDMxLAorICAgIE5vblNldFByb3BlcnRpZXNUYWcgPSAzMiwKICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLSAgICBDcnlwdG9LZXlUYWcgPSAzMiwKKyAgICBDcnlw
dG9LZXlUYWcgPSAzMywKICNlbmRpZgogICAgIEVycm9yVGFnID0gMjU1CiB9OwpAQCAtMjY2LDkg
KzI2OSwxMCBAQCBzdGF0aWMgdW5zaWduZWQgY291bnRVc2FnZXMoQ3J5cHRvS2V5VXNhZ2UgdXNh
Z2VzKQogICoKICAqIE1hcCA6LSBNYXBPYmplY3RUYWcgTWFwRGF0YQogICoKLSAqIFNldCA6LSBT
ZXRPYmplY3RUYWcgTWFwRGF0YQorICogU2V0IDotIFNldE9iamVjdFRhZyBTZXREYXRhCiAgKgog
ICogTWFwRGF0YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+KSBOb25NYXBQcm9wZXJ0aWVz
VGFnICg8bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFnCisgKiBT
ZXREYXRhIDotICg8a2V5OlZhbHVlPikgTm9uU2V0UHJvcGVydGllc1RhZyAoPG5hbWU6U3RyaW5n
RGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZwogICoKICAqIFRlcm1pbmFsIDotCiAg
KiAgICAgIFVuZGVmaW5lZFRhZwpAQCAtMTIxNiw5ICsxMjIwLDExIEBAIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgVmVj
dG9yPHVpbnQzMl90LCAxNj4gbGVuZ3RoU3RhY2s7CiAgICAgVmVjdG9yPFByb3BlcnR5TmFtZUFy
cmF5LCAxNj4gcHJvcGVydHlTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4gaW5wdXRP
YmplY3RTdGFjazsKLSAgICBWZWN0b3I8TWFwRGF0YSosIDQ+IG1hcERhdGFTdGFjazsKLSAgICBW
ZWN0b3I8TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IsIDQ+IGl0ZXJhdG9yU3RhY2s7Ci0gICAgVmVj
dG9yPEpTVmFsdWUsIDQ+IGl0ZXJhdG9yVmFsdWVTdGFjazsKKyAgICBWZWN0b3I8SlNNYXAqLCA0
PiBtYXBTdGFjazsKKyAgICBWZWN0b3I8SlNNYXA6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yLCA0
PiBtYXBJdGVyYXRvclN0YWNrOworICAgIFZlY3RvcjxKU1NldCosIDQ+IHNldFN0YWNrOworICAg
IFZlY3RvcjxKU1NldDo6U2V0RGF0YTo6Y29uc3RfaXRlcmF0b3IsIDQ+IHNldEl0ZXJhdG9yU3Rh
Y2s7CisgICAgVmVjdG9yPEpTVmFsdWUsIDQ+IG1hcEl0ZXJhdG9yVmFsdWVTdGFjazsKICAgICBW
ZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwogICAgIFdhbGtlclN0YXRlIHN0YXRl
ID0gU3RhdGVVbmtub3duOwogICAgIEpTVmFsdWUgaW5WYWx1ZSA9IGluOwpAQCAtMTM1MCwzNiAr
MTM1NiwyMSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIEpTTWFwKiBpbk1hcCA9IGpzQ2FzdDxK
U01hcCo+KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghc3RhcnRNYXAoaW5NYXApKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBE
YXRhID0gaW5NYXAtPm1hcERhdGEoKTsKLSAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVu
ZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5kKG1hcERhdGEp
OwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2suYXBwZW5kKG1hcERhdGEtPmJlZ2luKCkp
OworICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKGluTWFwKTsKKyAgICAgICAgICAg
ICAgICBtYXBTdGFjay5hcHBlbmQoaW5NYXApOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9y
U3RhY2suYXBwZW5kKGluTWFwLT5tYXBEYXRhKCktPmJlZ2luKCkpOwogICAgICAgICAgICAgICAg
IGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluTWFwKTsKICAgICAgICAgICAgICAgICBnb3RvIG1h
cERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRTdGFy
dFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmplY3QoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRl
clJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrT3ZlcmZsb3dFcnJv
cjsKLSAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBqc0Nhc3Q8SlNTZXQqPihpblZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGluU2V0KSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IGluU2V0LT5t
YXBEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAg
ICAgICBpdGVyYXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5iZWdpbigpKTsKLSAgICAgICAgICAg
ICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpblNldCk7Ci0gICAgICAgICAgICAgICAgZ290
byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeToKICAgICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0VmlzaXRF
bnRyeTogewotICAgICAgICAgICAgICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yJiBwdHIgPSBp
dGVyYXRvclN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0g
bWFwRGF0YVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAocHRyID09IG1hcERhdGEt
PmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgp
OwotICAgICAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgICAgIEpTTWFwOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvciYgcHRyID0gbWFwSXRlcmF0
b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNNYXAqIG1hcCA9IG1hcFN0YWNrLmxh
c3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IG1hcC0+bWFwRGF0YSgpLT5lbmQoKSkg
eworICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4ob2JqZWN0KSB8fCBqc0R5
bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChq
c0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYykpOwogICAgICAgICAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFwUHJvcGVydGllc1RhZyk7CkBAIC0x
Mzg4LDIyICsxMzc5LDYwIEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXpl
cjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGluVmFsdWUgPSBwdHIua2V5KCk7CiAgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBl
bmQocHRyLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5hcHBl
bmQocHRyLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5h
cHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1h
cERhdGFFbmRWaXNpdEtleSk7CiAgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdEtleTogewotICAg
ICAgICAgICAgICAgIGluVmFsdWUgPSBpdGVyYXRvclZhbHVlU3RhY2subGFzdCgpOwotICAgICAg
ICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAg
ICAgaW5WYWx1ZSA9IG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAg
ICAgbWFwSXRlcmF0b3JWYWx1ZVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBz
dGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRWYWx1ZSk7CiAgICAgICAgICAgICAgICAg
Z290byBzdGF0ZVVua25vd247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1hcERh
dGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yU3RhY2subGFz
dCgpICE9IG1hcERhdGFTdGFjay5sYXN0KCktPmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAr
K2l0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChtYXBJdGVyYXRvclN0
YWNrLmxhc3QoKSAhPSBtYXBTdGFjay5sYXN0KCktPm1hcERhdGEoKS0+ZW5kKCkpCisgICAgICAg
ICAgICAgICAgICAgICsrbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAg
Z290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBzZXRTdGFydFN0YXRlOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4
aW11bUZpbHRlclJlY3Vyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrT3Zl
cmZsb3dFcnJvcjsKKyAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBqc0Nhc3Q8SlNTZXQq
PihpblZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGluU2V0KSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQo
aW5TZXQpOworICAgICAgICAgICAgICAgIHNldFN0YWNrLmFwcGVuZChpblNldCk7CisgICAgICAg
ICAgICAgICAgc2V0SXRlcmF0b3JTdGFjay5hcHBlbmQoaW5TZXQtPnNldERhdGEoKS0+YmVnaW4o
KSk7CisgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5hcHBlbmQoaW5TZXQpOworICAg
ICAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHNldERhdGFTdGFydFZpc2l0RW50cnk6CisgICAgICAgICAgICBjYXNlIFNl
dERhdGFTdGFydFZpc2l0RW50cnk6IHsKKyAgICAgICAgICAgICAgICBKU1NldDo6U2V0RGF0YTo6
Y29uc3RfaXRlcmF0b3ImIHB0ciA9IHNldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAg
ICAgICAgIEpTU2V0KiBzZXQgPSBzZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgaWYg
KHB0ciA9PSBzZXQtPnNldERhdGEoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0
SXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHNldFN0YWNr
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlu
cHV0T2JqZWN0U3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5h
bWljQ2FzdDxKU1NldCo+KG9iamVjdCkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9l
eGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7Cisg
ICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOworICAgICAgICAg
ICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZ290
byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpblZhbHVlID0gcHRyLmtleSgpOworICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBw
ZW5kKFNldERhdGFFbmRWaXNpdEtleSk7CisgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25v
d247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNldERhdGFFbmRWaXNpdEtleTog
eworICAgICAgICAgICAgICAgIGlmIChzZXRJdGVyYXRvclN0YWNrLmxhc3QoKSAhPSBzZXRTdGFj
ay5sYXN0KCktPnNldERhdGEoKS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICsrc2V0SXRl
cmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBzZXREYXRhU3RhcnRWaXNp
dEVudHJ5OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzdGF0ZVVua25vd246CiAgICAg
ICAgICAgICBjYXNlIFN0YXRlVW5rbm93bjogewogICAgICAgICAgICAgICAgIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlIHRlcm1pbmFsQ29kZSA9IFN1Y2Nlc3NmdWxseUNvbXBsZXRlZDsKQEAgLTIz
NjAsOSArMjM4OSwxMCBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBv
c3NpYmxlKCkKKyAgICB0ZW1wbGF0ZTxTZXJpYWxpemF0aW9uVGFnIFRhZz4KKyAgICBib29sIGNv
bnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpCiAgICAgewotICAgICAg
ICBpZiAocmVhZFRhZygpID09IE5vbk1hcFByb3BlcnRpZXNUYWcpCisgICAgICAgIGlmIChyZWFk
VGFnKCkgPT0gVGFnKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIG1fcHRyLS07
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzODQsOCArMjQxNCw5IEBAIERlc2VyaWFsaXph
dGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogICAgIFZlY3Rvcjx1
aW50MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBwcm9w
ZXJ0eU5hbWVTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4gb3V0cHV0T2JqZWN0U3Rh
Y2s7Ci0gICAgVmVjdG9yPEpTVmFsdWUsIDQ+IGtleVN0YWNrOwotICAgIFZlY3RvcjxNYXBEYXRh
KiwgND4gbWFwRGF0YVN0YWNrOworICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBtYXBLZXlTdGFjazsK
KyAgICBWZWN0b3I8SlNNYXAqLCA0PiBtYXBTdGFjazsKKyAgICBWZWN0b3I8SlNTZXQqLCA0PiBz
ZXRTdGFjazsKICAgICBWZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwogICAgIFdh
bGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtub3duOwogICAgIEpTVmFsdWUgb3V0VmFsdWU7CkBA
IC0yNDc4LDQxICsyNTA5LDU0IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFs
aXplcjo6ZGVzZXJpYWxpemUoKQogICAgICAgICAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVh
dGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwogICAgICAg
ICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0
YWNrLmFwcGVuZChtYXApOwotICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG1hcC0+bWFw
RGF0YSgpOwotICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAg
ICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKLSAgICAgICAgfQotICAgICAgICBz
ZXRPYmplY3RTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0U3RhY2su
c2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93RXJyb3IpOwotICAgICAgICAg
ICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVj
dC0+c2V0U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsK
LSAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOwotICAgICAgICAgICAg
TWFwRGF0YSogbWFwRGF0YSA9IHNldC0+bWFwRGF0YSgpOwotICAgICAgICAgICAgbWFwRGF0YVN0
YWNrLmFwcGVuZChtYXBEYXRhKTsKKyAgICAgICAgICAgIG1hcFN0YWNrLmFwcGVuZChtYXApOwog
ICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICB9CiAgICAg
ICAgIG1hcERhdGFTdGFydFZpc2l0RW50cnk6CiAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0Vmlz
aXRFbnRyeTogewotICAgICAgICAgICAgaWYgKGNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBv
c3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgaWYgKGNvbnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJs
ZTxOb25NYXBQcm9wZXJ0aWVzVGFnPigpKSB7CisgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVt
b3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERhdGFFbmRW
aXNpdEtleSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKICAgICAgICAgfQotCiAg
ICAgICAgIGNhc2UgTWFwRGF0YUVuZFZpc2l0S2V5OiB7Ci0gICAgICAgICAgICBrZXlTdGFjay5h
cHBlbmQob3V0VmFsdWUpOworICAgICAgICAgICAgbWFwS2V5U3RhY2suYXBwZW5kKG91dFZhbHVl
KTsKICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERhdGFFbmRWaXNpdFZhbHVlKTsK
ICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9Ci0KICAgICAgICAgY2Fz
ZSBNYXBEYXRhRW5kVmlzaXRWYWx1ZTogewotICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmxhc3Qo
KS0+c2V0KG1fZXhlYywga2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7Ci0gICAgICAgICAgICBr
ZXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBKU01hcCogbWFwID0gbWFwU3RhY2su
bGFzdCgpOworICAgICAgICAgICAgbWFwLT5tYXBEYXRhKCktPnNldChtX2V4ZWMsIG1hcCwgbWFw
S2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBtYXBLZXlTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAg
ICAgIH0KKworICAgICAgICBzZXRPYmplY3RTdGFydFN0YXRlOiB7CisgICAgICAgICAgICBpZiAo
b3V0cHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93
RXJyb3IpOworICAgICAgICAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52
bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChz
ZXQpOworICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKHNldCk7CisgICAgICAgICAgICBnb3Rv
IHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RGF0YVN0YXJ0
VmlzaXRFbnRyeToKKyAgICAgICAgY2FzZSBTZXREYXRhU3RhcnRWaXNpdEVudHJ5OiB7CisgICAg
ICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRpb25JZlBvc3NpYmxlPE5v
blNldFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoU2V0RGF0YUVuZFZpc2l0
S2V5KTsKKyAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOworICAgICAgICB9CisgICAgICAg
IGNhc2UgU2V0RGF0YUVuZFZpc2l0S2V5OiB7CisgICAgICAgICAgICBKU1NldCogc2V0ID0gc2V0
U3RhY2subGFzdCgpOworICAgICAgICAgICAgc2V0LT5zZXREYXRhKCktPnNldChtX2V4ZWMsIHNl
dCwgb3V0VmFsdWUsIG91dFZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0Vmlz
aXRFbnRyeTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRlVW5rbm93bjoKICAgICAgICAgY2Fz
ZSBTdGF0ZVVua25vd246CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5hbCA9IHJlYWRU
ZXJtaW5hbCgpKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2Q0YjU4ZTQ5NGRkNWNhYjgwOWI0ODAwYTk0Y2NjNmY1OTlk
MjAyMS4uOTVlZjEyZjhhYWM3YTRlZTdlOTJmNDE4YmZlNTg4YzNhMTk5OTU1MCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDE1LTAzLTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIEludGVncmF0ZSBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdHJ1Y3R1
cmUtY2xvbmUgaW1wbGVtZW50YXRpb24gYmVjb21lcyBhd2FyZSBvZiB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIE1hcCBhbmQgU2V0LgorCisgICAgICAgICogZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQt
c2NyaXB0LXZhbHVlLmh0bWw6CisKIDIwMTUtMDMtMTAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gUmVmYWN0b3IgbWVkaWEgY29udHJvbHMg
Y29kZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2Ny
aXB0LXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3Jp
cHQtdmFsdWUuaHRtbAppbmRleCA0MzVkMDdmYmJhZjY3MDA5OGI5MmRjODViYzFlNjViZGJiZDg5
YjAzLi5mYjMxMDMxMTRiNTVlZDhiNzQ1NGJlNjhiYjg3MDc4YjUzYjZmNzk4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRt
bApAQCAtNDE1LDE2ICs0MTUsMTQgQEAKIAogdGVzdFNlcmlhbGl6YXRpb24oc2V0T2JqZWN0LAog
WwotICAgIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDcsIDB4MDcsIDB4MGEsIDB4
MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MGEs
IDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4
MTMsIDB4MDAsIAotICAgIDB4MTMsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4NjIsIDB4MDAsIAotICAgIDB4NjEsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MTAsIDB4ZmUsIDB4
ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4MDAsIDB4MWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYs
IDB4MDAsIDB4MTMsIDB4MDEsIAotICAgIDB4MWYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
NjUsIDB4MDAsIDB4NzgsIDB4MDAsIAotICAgIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUs
IDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIAotICAgIDB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4
ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4ZmYKKyAgICAweDA1LCAweDAwLCAw
eDAwLCAweDAwLCAweDFkLCAweDA3LCAweDBhLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweGY4LCAweDNmLCAweDEzLCAweDAwLCAweDEwLCAKKyAgICAweDAzLCAw
eDAwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDYxLCAweDAwLCAweDcyLCAKKyAgICAweDAw
LCAweDFhLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDIwLCAweDA3LCAKKyAgICAw
eDAwLCAweDAwLCAweDAwLCAweDY1LCAweDAwLCAweDc4LCAweDAwLCAweDcwLCAweDAwLCAKKyAg
ICAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDY0LCAweDAwLCAweDZmLCAweDAwLCAweDAyLCAK
KyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisKIF0p
OwogCiB0ZXN0U2VyaWFsaXphdGlvbihmdW5jdGlvbigpe30sIFtdLCBudWxsLCBET01FeGNlcHRp
b24uREFUQV9DTE9ORV9FUlIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248430</attachid>
            <date>2015-03-11 10:18:24 -0700</date>
            <delta_ts>2015-03-12 12:47:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150312021758.patch</filename>
            <type>text/plain</type>
            <size>75781</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NTRiNTA0ZDczOTRiNzlhNGI4Y2Y2NDE1NzMwMjg0ODMxMWI4ZjNiLi5lYTVmZTMyODZlMjU2YTZk
YTFkOTk5NmQ5YzlhYjJjYzMyMzNhZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzYgQEAKKzIwMTUtMDMtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgQW5kIGF0IHRoZSBzYW1lIHRpbWUsIHRoaXMgcGF0Y2ggZml4ZXMgbWlzc2luZyBkZXN0
cm95IGZ1bmN0aW9ucworICAgICAgICBpbiBKU01hcEl0ZXJhdG9yIGFuZCBKU1NldEl0ZXJhdG9y
LgorICAgICAgICBUaGV5IGFyZSBuZWVkZWQgYmVjYXVzZSBNYXBEYXRhOjpjb25zdF9pdGVyYXRv
ciBpcyBhIG5vbi10cml2aWFsIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1l
L0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpKU01hcDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTTWFwOjpjb3B5QmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTTWFwLmg6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6
a2V5KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6
OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRy
eTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpKU01hcDo6bWFw
RGF0YSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAgICogcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpkZXN0cm95KToKKyAgICAgICAg
KEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9K
U01hcEl0ZXJhdG9yLmg6CisgICAgICAgICogcnVudGltZS9KU1NldC5jcHA6CisgICAgICAgIChK
U0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1Nl
dC5oOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpT
U2V0OjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleSk6CisgICAgICAgIChK
U0M6OkpTU2V0OjpFbnRyeTo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6
OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnNldERhdGEpOgorICAgICAgICAoSlNDOjpK
U1NldDo6SlNTZXQpOgorICAgICAgICAoSlNDOjpKU1NldDo6bWFwRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJ
dGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZGVzdHJveSk6Cisg
ICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTU2V0SXRl
cmF0b3I6OkpTU2V0SXRlcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YS5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcERhdGE6Ok1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXBEYXRhOjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29udGFpbnMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjphZGQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXBEYXRhOjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpn
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZW1vdmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OnJlcGxhY2VCYWNraW5nU3RvcmUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcERhdGE6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFwRGF0YTo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9NYXBEYXRh
Lmg6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpjb25zdF9pdGVyYXRvcjo6a2V5KToKKyAg
ICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjp2YWx1ZSk6CisgICAgICAg
IChKU0M6Ok1hcERhdGFJbXBsOjpzaXplKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50
cnk+OjpNYXBEYXRhSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OktleVR5cGU6OktleVR5cGUp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjppbnRl
cm5hbEluY3JlbWVudCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3Rf
aXRlcmF0b3I6OmVuc3VyZVNsb3QpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46
OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcik6CisgICAgICAgIChK
U0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6PSk6CisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjprZXkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6dmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXBEYXRhOjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y2xl
YXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFs
SW5jcmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0
b3I6OmVuc3VyZVNsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9p
dGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRh
Ojpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL01hcERhdGFJbmxpbmVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRh
SW1wbDxFbnRyeT46OmZpbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNv
bnRhaW5zKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjphZGQpOgorICAgICAg
ICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnNldCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1v
dmUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFj
ZUZvckFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpn
ZXRNYXBEYXRhKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAo
SlNDOjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNGb3JF
YWNoKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jR2V0KToKKyAgICAgICAgKEpTQzo6bWFw
UHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2V0KToKKyAgICAgICAg
KEpTQzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpnZXRTZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9G
dW5jQWRkKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlND
OjpzZXRQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNo
KToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJv
dG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6OmdldE1hcERhdGEpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uaDoKKwogMjAxNS0wMy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgU29tZSBldmVudCBoYW5kbGVyIGZpeGVzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA3YjQ5
MjAxMjZjZGQ5OGEzZjQ1ZDViNGRmMmQzZTA5NDZiMjAzMS4uOTJmMzM1NjQwNzExN2EwZGI2MzU4
ZGJhOTNkMTUxNzUwN2Q3ZDk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1LTAz
LTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIElu
dGVncmF0ZSBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
TWFwRGF0YUlubGluZXMuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpjb25zdW1lQ29s
bGVjdGlvbkRhdGFUZXJtaW5hdGlvbklmUG9zc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVz
ZXJpYWxpemVyOjpjb25zdW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6IERlbGV0ZWQu
CisKIDIwMTUtMDMtMTEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODEzNjcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCA3OTQzNzVmZTUxNzgxODgwODAzN2M5ODc3NTU1
ZjMzNDVkZmM4ZjEzLi4yODU2M2IwZTAyNjRiNmRjYTM5ZjEyMjgzYWVjMzZiOTUxNjI2MjVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTE1NzIsNiArMTU3Miw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXExvb2t1cC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25zdHJ1Y3Rvci5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmgiIC8+CisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yQ29uc3RydWN0b3IuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JQcm90b3R5cGUuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwUHJvdG90eXBlLmgiIC8+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5k
ZXggNWY2YTFmNGJkYzkxOWU1ZmZlMGFlOWNlY2U4ODk5MWZjMWE1MDE3Zi4uYTRiYWY4Y2I5OWFi
NGE4YzZlYWY4N2YyNDg0YzU4ZWU2M2JhMWE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzMxMCw2ICszMzEwLDkgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwRGF0YS5oIj4KICAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxNYXBEYXRhSW5saW5lcy5oIj4KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxTZXRQcm90b3R5cGUuaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTlhMTk2ZjY2
MDk1ZmNkMTFhMzBiZGY1MjdhMDhhNGNkOWRmZjJiNi4uY2ViMmUwODk2NDA2MjFiY2VmZjMzNWRh
ZDFkNjMzMzBhNmFkNmVkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzIs
NiArMTMzMiw3IEBACiAJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3
NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODUwN0Q2MTdDQkM2RkQwMDExRjZFNyAv
KiBNYXBEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3ODUwN0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLzsgfTsKIAkJQTc4
NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEE2NDQxNTE5NDIwQTZDNjFBRDE4ODJFIC8qIE1hcERhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTNENDNDQ0EwQkJFMDZEODlDNTk3
MDcgLyogTWFwRGF0YUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzg1RjZCQzE4QzU1M0ZFMDBGMTA2MjYgLyogU3BpbGxSZWdpc3Rl
cnNNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0ZGNjQ3QTE4QzUyRTg1MDBCNTUzMDcgLyogU3BpbGxSZWdpc3RlcnNNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4ODUzRjkxNzk3MjYy
OTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQlBNzg4NTNGQTE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzA0MCw2ICszMDQxLDcgQEAKIAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQw
QTQ3IC8qIFBhcnNlck1vZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODUwN0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcERhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcg
LyogTWFwRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAv
KiBNYXBEYXRhSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBE
YXRhSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg4NTNGNzE3OTcy
NjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhB
OTc2QzE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGgg
PSBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTQ0ODMsNiArNDQ4NSw3IEBACiAJCQkJQTcwMDg3MzgxN0NCRTg1MzAwQzNFNjQzIC8qIE1h
cENvbnN0cnVjdG9yLmggKi8sCiAJCQkJQTc4NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERh
dGEuY3BwICovLAogCQkJCUE3ODUwN0Q1MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8s
CisJCQkJNTkzRDQzQ0NBMEJCRTA2RDg5QzU5NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi8sCiAJ
CQkJQTc0REVGOEIxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3Bw
ICovLAogCQkJCUE3NERFRjhDMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVj
dG9yLmggKi8sCiAJCQkJQTc0REVGOEQxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJv
dG90eXBlLmNwcCAqLywKQEAgLTYxMDMsNiArNjEwNiw3IEBACiAJCQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODcz
QTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3NERFRjkyMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NDE4MkQ5OTE0MDA1MjJDMjIgLyogTWFw
SXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4RDMw
MEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuY3BwCmluZGV4IGMwOGE5NzA4YmU0NWE5MzQ5NTUyMzRiMzA1NzY2
MGQ3ODE2NzUwZjQuLmI2OGU5YWYyMjM5OGZhMTRjNTA5NzkyYmVlMDFjYmE0MjcyNDc4MzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKQEAgLTI3LDI2ICsyNywyOSBA
QAogI2luY2x1ZGUgIkpTTWFwLmgiCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgot
I2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2luY2x1
ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNvbnN0IENsYXNzSW5mbyBKU01hcDo6c19pbmZv
ID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU01hcCkg
fTsKIAordm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpT
TWFwKj4oY2VsbCktPn5KU01hcCgpOworfQorCiB2b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01h
cCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcERhdGEpOwor
ICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKIH0KIAotdm9pZCBKU01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBK
U01hcDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9y
LCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAg
IG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNyZWF0ZSh2bSkpOworICAgIEJhc2U6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworICAgIGpzQ2FzdDxKU01h
cCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7CiB9
CiAKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKaW5kZXggNDMxNTI3NGRl
M2U5ODU3YzViYmUwODM1MTM3NTY5YTc3MTY0NmUwNS4uYWE0MGNlNWMyNzNlNzEyZWJjMDVjYTAz
ZjkxMDFmYmU1YzIyNDZiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCkBA
IC0yNiwxNSArMjYsNTggQEAKICNpZm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9oCiAKKyNp
bmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisj
aW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFwRGF0YTsK
LQotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitjbGFzcyBKU01hcCA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNl
OworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFp
biB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmll
cjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAgICBwcml2YXRlOgorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBt
X3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtl
eSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgeworICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZtX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
a2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldFZh
bHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9rZXkuY2xl
YXIoKTsKKyAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5PiBNYXBEYXRhOwogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIApAQCAtNTUsMTkgKzk4LDIwIEBAIGNsYXNzIEpTTWFwIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSk7CiAgICAgfQogCi0gICAgTWFwRGF0YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0
YS5nZXQoKTsgfQorICAgIE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiAmbV9tYXBEYXRhOyB9
CiAKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9tYXBEYXRhKCkKICAgICB7
CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwotCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29w
eUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAKLSAgICBX
cml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9tYXBEYXRhOworICAgIE1hcERhdGEgbV9tYXBEYXRhOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJ
dGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9y
LmNwcAppbmRleCBjMTY3YWNiY2YzYTNhOWI3YzRjZTVjYTcyOGEzODE1Y2JiOTZjYmJlLi5lOWQ3
ZDQyZmI0ZTM4ZWQzMTdjZDYyYmYwNjQyY2MxMTVmMWU2M2YzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQwLDE5IEBA
IHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU01hcCogaXRlcmF0
ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNl
dCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3REYXRhLnNl
dCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7Cit9CisKK3ZvaWQgSlNNYXBJ
dGVyYXRvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTTWFwSXRlcmF0
b3IqPihjZWxsKS0+fkpTTWFwSXRlcmF0b3IoKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNNYXBJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOyAgICAg
ICAgCisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmplY3REYXRhKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXApOwogfQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6
OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZh
bHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCmlu
ZGV4IDYzZGQ1ZThiMTFmOTZhNDQ2MWFkZDVjZWEzYzQ0N2FkYzYwMDQwY2MuLjU4ZjFhYmZhYTA1
MWJkZWM3ODIzN2Y1OTVmOTU4YTZhZmE4OWE4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKQEAgLTg3LDEzICs4NywxMyBAQCBjbGFzcyBKU01h
cEl0ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKICAgICB7CiAgICAgfQog
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNW
YWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsKLSAgICBXcml0
ZUJhcnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERhdGE7Ci0gICAgTWFwRGF0YTo6Y29u
c3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU01hcDo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0
b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAppbmRleCAzYzFkMTI0YmM1NjJkYjZkYzFi
YTAwYzk2M2JhNTQ5M2U2MDM3Mzc3Li5kYWE5Mjg0MGQ1YmMwOTYyMjY4NWUxODAwNTJmODVlMzAx
ZDM3YWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCkBAIC0zNSwxNyArMzUsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAordm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPn5KU1NldCgpOworfQorCiB2b2lkIEpT
U2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1NldCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBKU1NldDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQordm9pZCBKU1NldDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGws
IENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNy
ZWF0ZSh2bSkpOworICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9r
ZW4pOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEuY29weUJhY2tpbmdTdG9y
ZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dC5oCmluZGV4IGZjMGFhMzBmYjk1N2NiODlmOTVlNTY3ZWYxNjBjZjgxNTAzZTI1MmUuLjExMDRi
Y2ZmYWE0YjVjMGI1MDAxMGEzMTU3MzA0ZTdlNTg5OGM0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXQuaApAQCAtMjYsMTUgKzI2LDU1IEBACiAjaWZuZGVmIEpTU2V0X2gKICNk
ZWZpbmUgSlNTZXRfaAogCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIE1hcERhdGE7Ci0KLWNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgeworY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGlj
OgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0
cnVjdGlibGVPYmplY3QgQmFzZTsKKworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBl
Y3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZp
ZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OworCisgICAgcHVibGlj
OgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFy
cmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9rZXk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZt
X2tleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpT
Q2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAgICBtX2tleS5z
ZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRWYWx1ZShW
TSYsIGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERv
IG5vdGhpbmcuCisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0eXBl
ZGVmIE1hcERhdGFJbXBsPEVudHJ5PiBTZXREYXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIApAQCAtNTUsMTkgKzk1LDIwIEBAIGNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAg
ICAgfQogCi0gICAgTWFwRGF0YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsg
fQorICAgIFNldERhdGEqIHNldERhdGEoKSB7IHJldHVybiAmbV9zZXREYXRhOyB9CiAKIHByaXZh
dGU6CiAgICAgSlNTZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zZXREYXRhKCkKICAgICB7CiAgICAgfQog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwotICAgIAor
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAotICAgIFdyaXRlQmFycmllcjxN
YXBEYXRhPiBtX21hcERhdGE7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0Nl
bGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisKKyAgICBTZXREYXRhIG1fc2V0RGF0YTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5jcHAKaW5kZXggMmZjMjk4OTAxNzY4NzNlNDRiYjkzMTUyNGM1ZjAzZWRhMDRmMzc1ZS4uNWVj
YWMxMmQ5YzRjYTIyNzVlZGRhZDllNzg5Nzg1NDhjOTdlN2E0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKQEAgLTQwLDE1ICs0MCwxOSBA
QCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNTZXQqIGl0ZXJh
dGVkT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX3NldC5z
ZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0RGF0YS5z
ZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCkpOwogfQogCiB2b2lkIEpTU2V0
SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBKU1NldEl0ZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0SXRlcmF0
b3IqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7ICAgICAgICAKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
LSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyYXRlZE9iamVjdERhdGEpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NldCk7Cit9CisKK3ZvaWQgSlNTZXRJ
dGVyYXRvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTU2V0SXRlcmF0
b3IqPihjZWxsKS0+fkpTU2V0SXRlcmF0b3IoKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9y
OjpjcmVhdGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2
YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRl
cmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaApp
bmRleCA5YzcwYzI2ZTUwYTJiNWQ5NWU4ZGM4MWRmZDE5ZGFhZDQyNTA3YmQ3Li42ZTZjMzg0ZDVk
MzI5NjY5M2NjMjdhMWQ4MGZmNGY4MThmNGQ3MjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCkBAIC04MCwxOCArODAsMTggQEAgY2xhc3MgSlNT
ZXRJdGVyYXRvciA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwcml2YXRlOgogICAg
IEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTZXQqIGl0ZXJh
dGVkT2JqZWN0LCBTZXRJdGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKS0+
YmVnaW4oKSkKKyAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5zZXREYXRhKCkt
PmJlZ2luKCkpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgewogICAgIH0KIAorICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTU2V0Kik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpT
VmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU1NldD4gbV9zZXQ7Ci0gICAgV3JpdGVCYXJyaWVy
PE1hcERhdGE+IG1faXRlcmF0ZWRPYmplY3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJh
dG9yIG1faXRlcmF0b3I7CisgICAgSlNTZXQ6OlNldERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRl
cmF0b3I7CiAgICAgU2V0SXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCmluZGV4IGIwNTY5MWM4NTJhYjJmZDJiYjNlNTQ3
YTRjZGMwOWRlMzZjYjE3ZmUuLmNlNTg3NjBlNjNjNjMyYmVlNzEyNWRjNDA0ZTlkMjdiNmQ0Y2Qx
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCkBAIC0yNSwy
NTAgKzI1LDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXBEYXRhLmgi
Ci0KLSNpbmNsdWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklu
bGluZXMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLQotI2luY2x1
ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0KKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIE1hcERhdGE6OnNfaW5mbyA9IHsgIk1hcERhdGEiLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1hcERhdGEpIH07Ci0KLXN0YXRpYyBjb25zdCBpbnQz
Ml90IG1pbmltdW1NYXBTaXplID0gODsKLQotTWFwRGF0YTo6TWFwRGF0YShWTSYgdm0pCi0gICAg
OiBCYXNlKHZtLCB2bS5tYXBEYXRhU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9jYXBhY2l0eSgw
KQotICAgICwgbV9zaXplKDApCi0gICAgLCBtX2RlbGV0ZWRDb3VudCgwKQotICAgICwgbV9pdGVy
YXRvckNvdW50KDApCi0gICAgLCBtX2VudHJpZXMoMCkKLXsKLX0KLQotTWFwRGF0YTo6RW50cnkq
IE1hcERhdGE6OmZpbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQotewotICAg
IGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmlu
Z0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmlt
cGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1
ZV07Ci0gICAgfQotICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewotICAgICAgICBhdXRv
IGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2
YXRlTmFtZSgpLnVpZCgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxl
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVz
W2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0gICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewotICAg
ICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgp
KTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Ci0g
ICAgfQotCi0gICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjpl
bmNvZGUoa2V5LnZhbHVlKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5k
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVl
XTsKLX0KLQotYm9vbCBNYXBEYXRhOjpjb250YWlucyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5
VHlwZSBrZXkpCi17Ci0gICAgcmV0dXJuIGZpbmQoY2FsbEZyYW1lLCBrZXkpOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgTWFwLCB0eXBlbmFtZSBLZXk+IE1hcERhdGE6OkVudHJ5KiBNYXBEYXRh
OjphZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtl
eVZhbHVlKQotewotICAgIHR5cGVuYW1lIE1hcDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmlu
ZChrZXkpOwotICAgIGlmIChsb2NhdGlvbiAhPSBtYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAm
bV9lbnRyaWVzW2xvY2F0aW9uLT52YWx1ZV07Ci0gICAgCi0gICAgaWYgKCFlbnN1cmVTcGFjZUZv
ckFwcGVuZChjYWxsRnJhbWUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGF1dG8gcmVzdWx0
ID0gbWFwLmFkZChrZXksIG1fc2l6ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzTmV3
RW50cnkpOwotICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXNbbV9zaXplKytdOwotICAgIG5l
dyAoZW50cnkpIEVudHJ5KCk7Ci0gICAgZW50cnktPmtleS5zZXQoY2FsbEZyYW1lLT52bSgpLCB0
aGlzLCBrZXlWYWx1ZS52YWx1ZSk7Ci0gICAgcmV0dXJuIGVudHJ5OwotfQotCi12b2lkIE1hcERh
dGE6OnNldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXksIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgRW50cnkqIGxvY2F0aW9uID0gYWRkKGNhbGxGcmFtZSwga2V5KTsKLSAgICBpZiAo
IWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgbG9jYXRpb24tPnZhbHVlLnNldChjYWxs
RnJhbWUtPnZtKCksIHRoaXMsIHZhbHVlKTsKLX0KLSAgICAKLU1hcERhdGE6OkVudHJ5KiBNYXBE
YXRhOjphZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQotewotICAgIGlmIChr
ZXkudmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fc3Ry
aW5nS2V5ZWRUYWJsZSwgYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoY2FsbEZyYW1lKS5pbXBs
KCksIGtleSk7Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKQotICAgICAgICByZXR1cm4g
YWRkKGNhbGxGcmFtZSwgbV9zeW1ib2xLZXllZFRhYmxlLCBhc1N5bWJvbChrZXkudmFsdWUpLT5w
cml2YXRlTmFtZSgpLnVpZCgpLCBrZXkpOwotICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpCi0g
ICAgICAgIHJldHVybiBhZGQoY2FsbEZyYW1lLCBtX2NlbGxLZXllZFRhYmxlLCBrZXkudmFsdWUu
YXNDZWxsKCksIGtleSk7Ci0gICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fdmFsdWVLZXllZFRh
YmxlLCBKU1ZhbHVlOjplbmNvZGUoa2V5LnZhbHVlKSwga2V5KTsKLX0KLQotSlNWYWx1ZSBNYXBE
YXRhOjpnZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQotewotICAgIGlmIChF
bnRyeSogZW50cnkgPSBmaW5kKGNhbGxGcmFtZSwga2V5KSkKLSAgICAgICAgcmV0dXJuIGVudHJ5
LT52YWx1ZS5nZXQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZSgpOwotfQotCi1ib29sIE1hcERhdGE6
OnJlbW92ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaW50MzJf
dCBsb2NhdGlvbjsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgYXV0
byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFs
dWUoY2FsbEZyYW1lKS5pbXBsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVk
VGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9u
ID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fc3RyaW5nS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7
Ci0gICAgfSAgZWxzZSBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKLSAgICAgICAgYXV0byBp
dGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0
ZU5hbWUoKS51aWQoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVy
LT52YWx1ZTsKLSAgICAgICAgbV9zeW1ib2xLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9
IGVsc2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX2Nl
bGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIg
PT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5y
ZW1vdmUoaXRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV92YWx1ZUtl
eWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5LnZhbHVlKSk7Ci0gICAgICAgIGlmIChp
dGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3ZhbHVlS2V5ZWRU
YWJsZS5yZW1vdmUoaXRlcik7Ci0gICAgfQotICAgIG1fZW50cmllc1tsb2NhdGlvbl0ua2V5LmNs
ZWFyKCk7Ci0gICAgbV9lbnRyaWVzW2xvY2F0aW9uXS52YWx1ZS5jbGVhcigpOwotICAgIG1fZGVs
ZXRlZENvdW50Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6cmVwbGFj
ZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFj
aXR5KQotewotICAgIEFTU0VSVChzaG91bGRQYWNrKCkpOwotICAgIGludDMyX3QgbmV3RW5kID0g
MDsKLSAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwotICAgIGZvciAoaW50MzJf
dCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50
cmllc1tpXTsKLSAgICAgICAgaWYgKCFlbnRyeS5rZXkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgQVNTRVJUKG5ld0VuZCA8IG5ld0NhcGFjaXR5KTsKLSAgICAgICAgZGVzdGluYXRp
b25bbmV3RW5kXSA9IGVudHJ5OwotCi0gICAgICAgIC8vIFdlIG92ZXJ3cml0ZSB0aGUgb2xkIGVu
dHJ5IHdpdGggYSBmb3J3YXJkaW5nIGluZGV4IGZvciB0aGUgbmV3IGVudHJ5LAotICAgICAgICAv
LyBzbyB0aGF0IHdlIGNhbiBmaXggdXAgb3VyIGhhc2ggdGFibGVzIGJlbG93IHdpdGhvdXQgZG9p
bmcgYWRkaXRpb25hbAotICAgICAgICAvLyBoYXNoIGxvb2t1cHMKLSAgICAgICAgZW50cnkudmFs
dWUuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc051bWJlcihuZXdFbmQpKTsKLSAgICAgICAgbmV3
RW5kKys7Ci0gICAgfQotCi0gICAgLy8gRml4dXAgZm9yIHRoZSBoYXNobWFwcwotICAgIGZvciAo
YXV0byBwdHIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV92YWx1ZUtleWVk
VGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+
dmFsdWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9jZWxs
S2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIp
Ci0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0udmFsdWUuZ2V0KCku
YXNJbnQzMigpOwotICAgIGZvciAoYXV0byBwdHIgPSBtX3N0cmluZ0tleWVkVGFibGUuYmVnaW4o
KTsgcHRyICE9IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+
dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0udmFsdWUuZ2V0KCkuYXNJbnQzMigpOwotICAg
IGZvciAoYXV0byBwdHIgPSBtX3N5bWJvbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fc3lt
Ym9sS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJp
ZXNbcHRyLT52YWx1ZV0udmFsdWUuZ2V0KCkuYXNJbnQzMigpOwotCi0gICAgQVNTRVJUKChtX3Np
emUgLSBuZXdFbmQpID09IG1fZGVsZXRlZENvdW50KTsKLSAgICBtX2RlbGV0ZWRDb3VudCA9IDA7
Ci0KLSAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci0gICAgbV9zaXplID0gbmV3RW5kOwot
ICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOwotCi19Ci0KLXZvaWQgTWFwRGF0YTo6cmVwbGFj
ZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17
Ci0gICAgQVNTRVJUKCFzaG91bGRQYWNrKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFj
aXR5ID4gMCk7Ci0gICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fY2FwYWNpdHkpOwotICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgbV9lbnRyaWVzLCBzaXplb2YoRW50cnkpICogbV9zaXplKTsKLSAg
ICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7Ci0gICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247
Ci19Ci0KLUNoZWNrZWRCb29sZWFuIE1hcERhdGE6OmVuc3VyZVNwYWNlRm9yQXBwZW5kKENhbGxG
cmFtZSogY2FsbEZyYW1lKQotewotICAgIGlmIChtX2NhcGFjaXR5ID4gbV9zaXplKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzdGQ6Om1heChtX2Nh
cGFjaXR5ICsgKG1fY2FwYWNpdHkgLyAyKSArIDEsIG1pbmltdW1NYXBTaXplKTsKLSAgICB2b2lk
KiBuZXdTdG9yYWdlID0gMDsKLSAgICBEZWZlckdDIGRlZmVyKCpjYWxsRnJhbWUtPmhlYXAoKSk7
Ci0gICAgaWYgKCFjYWxsRnJhbWUtPmhlYXAoKS0+dHJ5QWxsb2NhdGVTdG9yYWdlKHRoaXMsIHJl
cXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZuZXdTdG9yYWdlKSkgewotICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4obmV3U3RvcmFn
ZSk7Ci0gICAgaWYgKHNob3VsZFBhY2soKSkKLSAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5n
U3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcGxh
Y2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKLSAgICBjYWxsRnJhbWUt
PmhlYXAoKS0+d3JpdGVCYXJyaWVyKHRoaXMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IE1hcERhdGE6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIE1hcERh
dGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TWFwRGF0YSo+KGNlbGwpOwotICAgIEVudHJ5KiBlbnRy
aWVzID0gdGhpc09iamVjdC0+bV9lbnRyaWVzOwotICAgIGlmICghZW50cmllcykKLSAgICAgICAg
cmV0dXJuOwotICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+bV9zaXplOwotICAgIGlmICh0
aGlzT2JqZWN0LT5tX2RlbGV0ZWRDb3VudCkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgaWYgKCFlbnRyaWVzW2ldLmtleSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyaWVz
W2ldLmtleSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50cmllc1tpXS52YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoJmVu
dHJpZXNbMF0ua2V5LCBzaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOwotCi0gICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgTWFwQmFj
a2luZ1N0b3JlQ29weVRva2VuLCBlbnRyaWVzLCB0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMo
KSk7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENv
cHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgTWFwRGF0YSogdGhp
c09iamVjdCA9IGpzQ2FzdDxNYXBEYXRhKj4oY2VsbCk7Ci0gICAgaWYgKHRva2VuID09IE1hcEJh
Y2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmpl
Y3QtPm1fZW50cmllcykpIHsKLSAgICAgICAgRW50cnkqIG9sZEVudHJpZXMgPSB0aGlzT2JqZWN0
LT5tX2VudHJpZXM7Ci0gICAgICAgIEVudHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50
cnkqPih2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Y2FwYWNpdHlJbkJ5dGVz
KCkpKTsKLSAgICAgICAgaWYgKHRoaXNPYmplY3QtPnNob3VsZFBhY2soKSkKLSAgICAgICAgICAg
IHRoaXNPYmplY3QtPnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHRoaXNP
YmplY3QtPm1fY2FwYWNpdHkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzT2JqZWN0
LT5yZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHRoaXNPYmplY3QtPm1fY2FwYWNpdHkp
OwotICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkRW50cmllcywgdGhpc09iamVjdC0+Y2FwYWNp
dHlJbkJ5dGVzKCkpOwotICAgIH0KLSAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZp
c2l0b3IsIHRva2VuKTsKLX0KLQotdm9pZCBNYXBEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
LXsKLSAgICBzdGF0aWNfY2FzdDxNYXBEYXRhKj4oY2VsbCktPn5NYXBEYXRhKCk7Ci19Citjb25z
dCBpbnQzMl90IE1hcERhdGFTdGF0aWNzOjptaW5pbXVtTWFwU2l6ZTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCmluZGV4IGIxZDUzMDYyOTZlNTA0NmJkNDA3M2Vl
OTk5MThlYTZmZTRmYjE5NDUuLjcyNmIxOGE1OWY2NTE2ZTJkNjg0ZDgzZTBlOGExOGQ0MGY2OGQ4
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKQEAgLTI3LDI1ICsy
NywzMCBAQAogI2RlZmluZSBNYXBEYXRhX2gKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgRXhlY1N0
YXRlOworCitjbGFzcyBNYXBEYXRhU3RhdGljcyB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Nl
bGwgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgaW50MzJfdCBtaW5pbXVtTWFwU2l6ZSA9IDg7Cit9
OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2NsYXNzIE1hcERhdGFJbXBsIHsKK3B1Ymxp
YzoKICAgICBzdHJ1Y3QgY29uc3RfaXRlcmF0b3IgewotICAgICAgICBjb25zdF9pdGVyYXRvcihj
b25zdCBNYXBEYXRhKik7CisgICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGFJbXBs
Kik7CiAgICAgICAgIH5jb25zdF9pdGVyYXRvcigpOwogICAgICAgICBjb25zdCBXVEY6OktleVZh
bHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBvcGVyYXRvciooKSBjb25zdDsKLSAgICAgICAgSlNW
YWx1ZSBrZXkoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFhdEVuZCgpKTsgcmV0dXJuIG1fbWFw
RGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLmtleS5nZXQoKTsgfQotICAgICAgICBKU1ZhbHVlIHZh
bHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7IHJldHVybiBtX21hcERhdGEt
Pm1fZW50cmllc1ttX2luZGV4XS52YWx1ZS5nZXQoKTsgfQorICAgICAgICBKU1ZhbHVlIGtleSgp
IGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2Vu
dHJpZXNbbV9pbmRleF0ua2V5KCkuZ2V0KCk7IH0KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSgpIGNv
bnN0IHsgUkVMRUFTRV9BU1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJp
ZXNbbV9pbmRleF0udmFsdWUoKS5nZXQoKTsgfQogICAgICAgICB2b2lkIG9wZXJhdG9yKysoKSB7
IEFTU0VSVCghYXRFbmQoKSk7IGludGVybmFsSW5jcmVtZW50KCk7IH0KLSAgICAgICAgc3RhdGlj
IGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRhKik7CisgICAgICAgIHN0YXRpYyBjb25z
dF9pdGVyYXRvciBlbmQoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcik7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpOwogICAgICAgICB2b2lkIGZpbmlzaCgpIHsg
bV9pbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpOyB9CkBAIC02MCw3
ICs2NSw3IEBAIGNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgLy8gZmFz
dC4KICAgICAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4obV9pbmRleCkgPj0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX21hcERhdGEtPm1fc2l6ZSk7IH0K
ICAgICAgICAgdm9pZCBpbnRlcm5hbEluY3JlbWVudCgpOwotICAgICAgICBjb25zdCBNYXBEYXRh
KiBtX21hcERhdGE7CisgICAgICAgIGNvbnN0IE1hcERhdGFJbXBsKiBtX21hcERhdGE7CiAgICAg
ICAgIGludDMyX3QgbV9pbmRleDsKICAgICB9OwogCkBAIC03MCw0NSArNzUsMjUgQEAgY2xhc3Mg
TWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIH07
CiAKLSAgICBzdGF0aWMgTWFwRGF0YSogY3JlYXRlKFZNJiB2bSkKLSAgICB7Ci0gICAgICAgIE1h
cERhdGEqIG1hcERhdGEgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNYXBEYXRhPih2bS5o
ZWFwKSkgTWFwRGF0YSh2bSk7Ci0gICAgICAgIG1hcERhdGEtPmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICAgICAgcmV0dXJuIG1hcERhdGE7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVz
dHJ1Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0
dXJlID0gdHJ1ZTsKKyAgICBNYXBEYXRhSW1wbCgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXQoQ2FsbEZyYW1lKiwgS2V5VHlwZSwgSlNWYWx1ZSk7Ci0gICAgSlNWYWx1ZSBnZXQo
Q2FsbEZyYW1lKiwgS2V5VHlwZSk7Ci0gICAgYm9vbCByZW1vdmUoQ2FsbEZyYW1lKiwgS2V5VHlw
ZSk7Ci0gICAgYm9vbCBjb250YWlucyhDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBzaXplX3Qg
c2l6ZShDYWxsRnJhbWUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2RlbGV0ZWRDb3VudDsg
fQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3du
ZXIsIEtleVR5cGUsIEpTVmFsdWUpOworICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEtleVR5
cGUpOworICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEtleVR5cGUpOworICAgIGJvb2wgY29u
dGFpbnMoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKikg
Y29uc3QgeyByZXR1cm4gbV9zaXplIC0gbV9kZWxldGVkQ291bnQ7IH0KIAogICAgIGNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IodGhpcyk7IH0KICAg
ICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvcjo6ZW5k
KHRoaXMpOyB9CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICBERUNMQVJFX0lORk87Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRh
bCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
IG93bmVyLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZShDb3B5Vmlz
aXRvciYsIENvcHlUb2tlbik7CiAKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPGludDMyX3Q+IEluZGV4VHJhaXRzOwogCi0gICAgLy8gT3Vy
IG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwg
YW5kIGhhdmUgYWxsCi0gICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAg
IHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBrZXk7Ci0gICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZTsKLSAgICB9OwotCiAgICAgdHlwZWRlZiBI
YXNoTWFwPEpTQ2VsbCosIGludDMyX3QsIHR5cGVuYW1lIFdURjo6RGVmYXVsdEhhc2g8SlNDZWxs
Kj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxKU0NlbGwqPiwgSW5kZXhUcmFpdHM+IENlbGxLZXll
ZE1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIEVuY29k
ZWRKU1ZhbHVlSGFzaCwgRW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRzLCBJbmRleFRyYWl0cz4gVmFs
dWVLZXllZE1hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIGludDMyX3QsIHR5
cGVuYW1lIFdURjo6RGVmYXVsdEhhc2g8U3RyaW5nSW1wbCo+OjpIYXNoLCBXVEY6Okhhc2hUcmFp
dHM8U3RyaW5nSW1wbCo+LCBJbmRleFRyYWl0cz4gU3RyaW5nS2V5ZWRNYXA7CkBAIC0xMTYsMTgg
KzEwMSwxMiBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICBzaXplX3Qg
Y2FwYWNpdHlJbkJ5dGVzKCkgeyByZXR1cm4gbV9jYXBhY2l0eSAqIHNpemVvZihFbnRyeSk7IH0K
IAotICAgIE1hcERhdGEoVk0mKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29w
eVRva2VuKTsKLQotCi0gICAgQUxXQVlTX0lOTElORSBFbnRyeSogZmluZChDYWxsRnJhbWUqLCBL
ZXlUeXBlKTsKLSAgICBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoQ2FsbEZyYW1lKiwgS2V5VHlw
ZSk7Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PiBBTFdBWVNfSU5M
SU5FIEVudHJ5KiBhZGQoQ2FsbEZyYW1lKiwgTWFwJiwgS2V5LCBLZXlUeXBlKTsKKyAgICBBTFdB
WVNfSU5MSU5FIEVudHJ5KiBmaW5kKEV4ZWNTdGF0ZSosIEtleVR5cGUpOworICAgIEFMV0FZU19J
TkxJTkUgRW50cnkqIGFkZChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBlKTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTWFwLCB0eXBlbmFtZSBLZXk+IEFMV0FZU19JTkxJTkUgRW50
cnkqIGFkZChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVyLCBNYXAmLCBLZXksIEtleVR5cGUpOwog
CiAgICAgQUxXQVlTX0lOTElORSBib29sIHNob3VsZFBhY2soKSBjb25zdCB7IHJldHVybiBtX2Rl
bGV0ZWRDb3VudCAmJiAhbV9pdGVyYXRvckNvdW50OyB9Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZW5z
dXJlU3BhY2VGb3JBcHBlbmQoQ2FsbEZyYW1lKik7CisgICAgQ2hlY2tlZEJvb2xlYW4gZW5zdXJl
U3BhY2VGb3JBcHBlbmQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lcik7CiAKICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9u
LCBpbnQzMl90IG5ld1NpemUpOwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXBsYWNlQmFja2lu
Z1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdTaXplKTsKQEAgLTE0Myw3ICsx
MjIsMTggQEAgY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgewogICAgIEVudHJ5KiBtX2Vu
dHJpZXM7CiB9OwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YTo6Y2xlYXIoKQordGVtcGxh
dGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIE1hcERhdGFJbXBsPEVudHJ5Pjo6TWFw
RGF0YUltcGwoKQorICAgIDogbV9jYXBhY2l0eSgwKQorICAgICwgbV9zaXplKDApCisgICAgLCBt
X2RlbGV0ZWRDb3VudCgwKQorICAgICwgbV9pdGVyYXRvckNvdW50KDApCisgICAgLCBtX2VudHJp
ZXMobnVsbHB0cikKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5M
SU5FIHZvaWQgTWFwRGF0YUltcGw8RW50cnk+OjpjbGVhcigpCiB7CiAgICAgbV9jZWxsS2V5ZWRU
YWJsZS5jbGVhcigpOwogICAgIG1fdmFsdWVLZXllZFRhYmxlLmNsZWFyKCk7CkBAIC0xNTUsNyAr
MTQ1LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIE1hcERhdGE6OmNsZWFyKCkKICAgICBtX2VudHJp
ZXMgPSBudWxscHRyOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcERhdGE6OktleVR5cGU6OktleVR5
cGUoSlNWYWx1ZSB2KQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIE1h
cERhdGFJbXBsPEVudHJ5Pjo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCiB7CiAgICAgaWYg
KCF2LmlzRG91YmxlKCkpIHsKICAgICAgICAgdmFsdWUgPSB2OwpAQCAtMTc0LDU1ICsxNjUsNjIg
QEAgQUxXQVlTX0lOTElORSBNYXBEYXRhOjpLZXlUeXBlOjpLZXlUeXBlKEpTVmFsdWUgdikKICAg
ICAgICAgdmFsdWUgPSBqc051bWJlcihpKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcERh
dGE6OmNvbnN0X2l0ZXJhdG9yOjppbnRlcm5hbEluY3JlbWVudCgpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0
ZXJhdG9yOjppbnRlcm5hbEluY3JlbWVudCgpCiB7CiAgICAgRW50cnkqIGVudHJpZXMgPSBtX21h
cERhdGEtPm1fZW50cmllczsKICAgICBzaXplX3QgaW5kZXggPSBtX2luZGV4ICsgMTsKICAgICBz
aXplX3QgZW5kID0gbV9tYXBEYXRhLT5tX3NpemU7Ci0gICAgd2hpbGUgKGluZGV4IDwgZW5kICYm
ICFlbnRyaWVzW2luZGV4XS5rZXkpCisgICAgd2hpbGUgKGluZGV4IDwgZW5kICYmICFlbnRyaWVz
W2luZGV4XS5rZXkoKSkKICAgICAgICAgaW5kZXgrKzsKICAgICBtX2luZGV4ID0gaW5kZXg7CiB9
Ci0gICAgCi1BTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmVuc3Vy
ZVNsb3QoKQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjplbnN1cmVTbG90KCkKIHsKICAgICAv
LyBXaGVuIGFuIGl0ZXJhdG9yIGV4aXN0cyBvdXRzaWRlIG9mIGhvc3QgY29zdCBpdCBpcyBwb3Nz
aWJsZSBmb3IKICAgICAvLyB0aGUgY29udGFpbmluZyBtYXAgdG8gYmUgbW9kaWZpZWQKICAgICBF
bnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzOwogICAgIHNpemVfdCBpbmRleCA9
IG1faW5kZXg7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFwRGF0YS0+bV9zaXplOwotICAgIGlmIChp
bmRleCA8IGVuZCAmJiBlbnRyaWVzW2luZGV4XS5rZXkpCisgICAgaWYgKGluZGV4IDwgZW5kICYm
IGVudHJpZXNbaW5kZXhdLmtleSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpbnRlcm5h
bEluY3JlbWVudCgpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5kZXgpIDwg
ZW5kOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9p
dGVyYXRvcihjb25zdCBNYXBEYXRhKiBtYXBEYXRhKQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+
CitBTFdBWVNfSU5MSU5FIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0
X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGFJbXBsPEVudHJ5PiogbWFwRGF0YSkKICAgICA6IG1fbWFw
RGF0YShtYXBEYXRhKQogICAgICwgbV9pbmRleCgtMSkKIHsKICAgICBpbnRlcm5hbEluY3JlbWVu
dCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjp+Y29uc3Rf
aXRlcmF0b3IoKQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIE1hcERh
dGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcigpCiB7CiAgICAg
bV9tYXBEYXRhLT5tX2l0ZXJhdG9yQ291bnQtLTsKIH0KIAotQUxXQVlTX0lOTElORSBjb25zdCBX
VEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBNYXBEYXRhOjpjb25zdF9pdGVyYXRv
cjo6b3BlcmF0b3IqKCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lO
TElORSBjb25zdCBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBNYXBEYXRhSW1w
bDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAogewogICAgIEVudHJ5
KiBlbnRyeSA9ICZtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XTsKLSAgICByZXR1cm4gV1RG
OjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4oZW50cnktPmtleS5nZXQoKSwgZW50cnkt
PnZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNW
YWx1ZT4oZW50cnktPmtleSgpLmdldCgpLCBlbnRyeS0+dmFsdWUoKS5nZXQoKSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgTWFwRGF0YTo6Y29uc3RfaXRlcmF0
b3I6OmVuZChjb25zdCBNYXBEYXRhKiBtYXBEYXRhKQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+
CitBTFdBWVNfSU5MSU5FIGF1dG8gTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6
ZW5kKGNvbnN0IE1hcERhdGFJbXBsPEVudHJ5PiogbWFwRGF0YSkgLT4gY29uc3RfaXRlcmF0b3IK
IHsKICAgICBjb25zdF9pdGVyYXRvciByZXN1bHQobWFwRGF0YSk7CiAgICAgcmVzdWx0Lm1faW5k
ZXggPSAtMTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0
YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVy
YXRvciYgb3RoZXIpCiB7CiAgICAgQVNTRVJUKG90aGVyLm1fbWFwRGF0YSA9PSBtX21hcERhdGEp
OwogICAgIGlmIChhdEVuZCgpICYmIG90aGVyLmF0RW5kKCkpCkBAIC0yMzAsNyArMjI4LDggQEAg
QUxXQVlTX0lOTElORSBib29sIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGgKICAgICByZXR1cm4gbV9pbmRleCAhPSBvdGhlci5tX2lu
ZGV4OwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUg
RW50cnk+CitBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVy
YXRvcjo6b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCiB7CiAgICAgcmV0
dXJuICEoKnRoaXMgIT0gb3RoZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcERhdGFJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzUwNzg3YmUwMTZjZGI4YmI0Mjk3Mjkx
MWZhZDRmOGQ5ODExMDllNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCisKKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21O
dW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBFbnRyeSogTWFwRGF0YUltcGw8
RW50cnk+OjpmaW5kKEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKGtl
eS52YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRU
YWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSk7CisgICAg
ICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgfQor
ICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5
bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVp
ZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVl
XTsKKyAgICB9CisgICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBhdXRvIGl0
ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgfQorCisgICAg
YXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5LnZh
bHVlKSk7CisgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OmNv
bnRhaW5zKEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgcmV0dXJuIGZpbmQo
ZXhlYywga2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTWFwLCB0eXBlbmFtZSBLZXk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5
Pjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgTWFwJiBtYXAsIEtleSBrZXks
IEtleVR5cGUga2V5VmFsdWUpCit7CisgICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlv
biA9IG1hcC5maW5kKGtleSk7CisgICAgaWYgKGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuICZtX2VudHJpZXNbbG9jYXRpb24tPnZhbHVlXTsKKworICAgIGlmICghZW5zdXJl
U3BhY2VGb3JBcHBlbmQoZXhlYywgb3duZXIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1
dG8gcmVzdWx0ID0gbWFwLmFkZChrZXksIG1fc2l6ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmlzTmV3RW50cnkpOworICAgIEVudHJ5KiBlbnRyeSA9ICZtX2VudHJpZXNbbV9zaXplKytd
OworICAgIG5ldyAoZW50cnkpIEVudHJ5KCk7CisgICAgZW50cnktPnNldEtleShleGVjLT52bSgp
LCBvd25lciwga2V5VmFsdWUudmFsdWUpOworICAgIHJldHVybiBlbnRyeTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OnNldChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIsIEtleVR5cGUga2V5LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIEVudHJ5KiBsb2NhdGlvbiA9IGFkZChleGVjLCBvd25lciwga2V5KTsKKyAgICBp
ZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbG9jYXRpb24tPnNldFZhbHVlKGV4
ZWMtPnZtKCksIG93bmVyLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
aW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmFkZChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogb3duZXIsIEtleVR5cGUga2V5KQoreworICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmco
KSkKKyAgICAgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwgbV9zdHJpbmdLZXllZFRhYmxlLCBh
c1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCksIGtleSk7CisgICAgaWYgKGtl
eS52YWx1ZS5pc1N5bWJvbCgpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX3N5
bWJvbEtleWVkVGFibGUsIGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCks
IGtleSk7CisgICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIGFkZChl
eGVjLCBvd25lciwgbV9jZWxsS2V5ZWRUYWJsZSwga2V5LnZhbHVlLmFzQ2VsbCgpLCBrZXkpOwor
ICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fdmFsdWVLZXllZFRhYmxlLCBKU1ZhbHVlOjpl
bmNvZGUoa2V5LnZhbHVlKSwga2V5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+Citp
bmxpbmUgSlNWYWx1ZSBNYXBEYXRhSW1wbDxFbnRyeT46OmdldChFeGVjU3RhdGUqIGV4ZWMsIEtl
eVR5cGUga2V5KQoreworICAgIGlmIChFbnRyeSogZW50cnkgPSBmaW5kKGV4ZWMsIGtleSkpCisg
ICAgICAgIHJldHVybiBlbnRyeS0+dmFsdWUoKS5nZXQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZSgp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBib29sIE1hcERhdGFJbXBs
PEVudHJ5Pjo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaW50
MzJfdCBsb2NhdGlvbjsKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
YXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+
dmFsdWUoZXhlYykuaW1wbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRh
YmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9
IGl0ZXItPnZhbHVlOworICAgICAgICBtX3N0cmluZ0tleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwor
ICAgIH0gIGVsc2UgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIGF1dG8gaXRl
ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVO
YW1lKCkudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+
dmFsdWU7CisgICAgICAgIG1fc3ltYm9sS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSBl
bHNlIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9jZWxs
S2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIGlmIChpdGVyID09
IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAgICAgIG1fY2VsbEtleWVkVGFibGUucmVt
b3ZlKGl0ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXll
ZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOworICAgICAgICBpZiAoaXRl
ciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV92YWx1ZUtleWVkVGFi
bGUucmVtb3ZlKGl0ZXIpOworICAgIH0KKyAgICBtX2VudHJpZXNbbG9jYXRpb25dLmNsZWFyKCk7
CisgICAgbV9kZWxldGVkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VB
bmRQYWNrQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0
eSkKK3sKKyAgICBBU1NFUlQoc2hvdWxkUGFjaygpKTsKKyAgICBpbnQzMl90IG5ld0VuZCA9IDA7
CisgICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKKyAgICBmb3IgKGludDMyX3Qg
aSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeworICAgICAgICBFbnRyeSYgZW50cnkgPSBtX2VudHJp
ZXNbaV07CisgICAgICAgIGlmICghZW50cnkua2V5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgQVNTRVJUKG5ld0VuZCA8IG5ld0NhcGFjaXR5KTsKKyAgICAgICAgZGVzdGluYXRp
b25bbmV3RW5kXSA9IGVudHJ5OworCisgICAgICAgIC8vIFdlIG92ZXJ3cml0ZSB0aGUgb2xkIGVu
dHJ5IHdpdGggYSBmb3J3YXJkaW5nIGluZGV4IGZvciB0aGUgbmV3IGVudHJ5LAorICAgICAgICAv
LyBzbyB0aGF0IHdlIGNhbiBmaXggdXAgb3VyIGhhc2ggdGFibGVzIGJlbG93IHdpdGhvdXQgZG9p
bmcgYWRkaXRpb25hbAorICAgICAgICAvLyBoYXNoIGxvb2t1cHMKKyAgICAgICAgZW50cnkua2V5
KCkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc051bWJlcihuZXdFbmQpKTsKKyAgICAgICAgbmV3
RW5kKys7CisgICAgfQorCisgICAgLy8gRml4dXAgZm9yIHRoZSBoYXNobWFwcworICAgIGZvciAo
YXV0byBwdHIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV92YWx1ZUtleWVk
VGFibGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+
dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICBmb3IgKGF1dG8gcHRyID0gbV9jZWxs
S2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIp
CisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCku
YXNJbnQzMigpOworICAgIGZvciAoYXV0byBwdHIgPSBtX3N0cmluZ0tleWVkVGFibGUuYmVnaW4o
KTsgcHRyICE9IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0ci0+
dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAg
IGZvciAoYXV0byBwdHIgPSBtX3N5bWJvbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fc3lt
Ym9sS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJp
ZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworCisgICAgQVNTRVJUKChtX3Np
emUgLSBuZXdFbmQpID09IG1fZGVsZXRlZENvdW50KTsKKyAgICBtX2RlbGV0ZWRDb3VudCA9IDA7
CisKKyAgICBtX2NhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7CisgICAgbV9zaXplID0gbmV3RW5kOwor
ICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eT4KK2lubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6cmVwbGFjZUJhY2tpbmdTdG9yZShF
bnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKCFz
aG91bGRQYWNrKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7CisgICAg
QVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fY2FwYWNpdHkpOworICAgIG1lbWNweShkZXN0aW5hdGlv
biwgbV9lbnRyaWVzLCBzaXplb2YoRW50cnkpICogbV9zaXplKTsKKyAgICBtX2NhcGFjaXR5ID0g
bmV3Q2FwYWNpdHk7CisgICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIENoZWNrZWRCb29sZWFuIE1hcERhdGFJbXBsPEVudHJ5
Pjo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyKQor
eworICAgIGlmIChtX2NhcGFjaXR5ID4gbV9zaXplKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzdGQ6Om1heChtX2NhcGFjaXR5ICsgKG1fY2FwYWNp
dHkgLyAyKSArIDEsIE1hcERhdGFTdGF0aWNzOjptaW5pbXVtTWFwU2l6ZSk7CisgICAgdm9pZCog
bmV3U3RvcmFnZSA9IG51bGxwdHI7CisgICAgRGVmZXJHQyBkZWZlcigqZXhlYy0+aGVhcCgpKTsK
KyAgICBpZiAoIWV4ZWMtPmhlYXAoKS0+dHJ5QWxsb2NhdGVTdG9yYWdlKG93bmVyLCByZXF1aXJl
ZFNpemUgKiBzaXplb2YoRW50cnkpLCAmbmV3U3RvcmFnZSkpIHsKKyAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEVu
dHJ5KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKKyAgICBp
ZiAoc2hvdWxkUGFjaygpKQorICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdF
bnRyaWVzLCByZXF1aXJlZFNpemUpOworICAgIGVsc2UKKyAgICAgICAgcmVwbGFjZUJhY2tpbmdT
dG9yZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOworICAgIGV4ZWMtPmhlYXAoKS0+d3JpdGVC
YXJyaWVyKG93bmVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBvd25lciwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgRW50cnkqIGVudHJpZXMg
PSBtX2VudHJpZXM7CisgICAgaWYgKCFlbnRyaWVzKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KG1fZGVsZXRlZENvdW50KSB7CisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6
ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWVudHJpZXNbaV0ua2V5KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbnRyaWVzW2ldLnZpc2l0Q2hpbGRyZW4odmlz
aXRvcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXMoJmVudHJpZXNbMF0ua2V5KCksIG1fc2l6ZSAqIChzaXplb2YoRW50cnkpIC8gc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBN
YXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRy
eT46OmNvcHlCYWNraW5nU3RvcmUoQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tl
bikKK3sKKyAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0
b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRyaWVzKSkgeworICAgICAgICBFbnRyeSogb2xkRW50
cmllcyA9IG1fZW50cmllczsKKyAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2Fz
dDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMoKSkpOwor
ICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQorICAgICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNr
aW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAg
IHZpc2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCBjYXBhY2l0eUluQnl0ZXMoKSk7CisgICAgfQor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNw
cAppbmRleCA1NDgyMjI3Njk0MDBiNzE4NTJhZjdkYjhiNzVlZjUwNzU0NGVkZDRmLi4zNGIwZTk4
ODQ5N2RlNTU4OGNlMWM1MDE2ZjA1ZjA1YTY2MGYwOTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAi
SlNNYXBJdGVyYXRvci5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRh
SW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcHV0RGlyZWN0Tm9uSW5k
ZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwgYWNjZXNzb3IsIERvbnRFbnVt
IHwgQWNjZXNzb3IpOwogfQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBNYXBEYXRhKiBnZXRNYXBE
YXRhKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIEpTTWFwOjpNYXBEYXRhKiBnZXRNYXBEYXRhKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7
CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3Io
Y2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKQEAgLTkyLDcgKzkyLDcgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0
aGlzVmFsdWUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVh
cihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0
YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTTWFwOjpNYXBEYXRh
KiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBkYXRhLT5jbGVhcigpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEg
PSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYg
KCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJlbW92ZShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0xMDksNyArMTA5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFj
aChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0
YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTTWFwOjpNYXBEYXRh
KiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKQEAg
LTE0MSw3ICsxNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFwUHJvdG9GdW5jR2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERh
dGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgSlNNYXA6Ok1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gZGF0YS0+Z2V0
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7CkBAIC0xNTIsNyArMTUyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFz
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRh
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNNYXA6Ok1hcERhdGEq
IGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAg
ICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRhaW5z
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKQEAgLTE2MCwxNiArMTYwLDE4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFw
RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0
YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwogICAgIGlmICghZGF0YSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBkYXRhLT5z
ZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIEpTTWFwKiBtYXAgPSBqc0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOworICAgIGRhdGEt
PnNldChjYWxsRnJhbWUsIG1hcCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgxKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU01hcDo6TWFwRGF0YSogZGF0YSA9IGdl
dE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkYXRhLT5zaXplKGNhbGxGcmFtZSkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCmluZGV4
IGY4OGVhN2NmOTg2OGY2NjhiOGMyZTg4ODE1ZmY2NWNmMzk5MjdiNDkuLjYzODY5ZjMyZmMyNGRi
MWQzYmEwMDY3NDMyMzIzZjRkYWY2NTc3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkpT
RnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTc1LDcgKzc1LDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vz
c29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nl
c3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0
aWMgSlNTZXQ6OlNldERhdGEqIGdldFNldERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgdGhpc1ZhbHVlKQogewogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAg
ICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJh
bWUsIHRoaXNWYWx1ZSkpOwpAQCAtODYsMjEgKzg2LDIzIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1Zh
bHVlCiAgICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJTZXQg
b3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCIpKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotICAgIHJldHVybiBzZXQtPm1hcERhdGEoKTsKKyAgICByZXR1cm4gc2V0LT5zZXRE
YXRhKCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQWRk
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRh
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOworICAgIEpTU2V0OjpTZXREYXRhKiBkYXRhID0g
Z2V0U2V0RGF0YShjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFkYXRhKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPnNldChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Cisg
ICAgSlNTZXQqIHNldCA9IGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CisgICAgZGF0YS0+c2V0
KGNhbGxGcmFtZSwgc2V0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldDo6U2V0RGF0YSogZGF0YSA9IGdldFNl
dERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRhdGEp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZGF0
YS0+Y2xlYXIoKTsKQEAgLTEwOSw3ICsxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHNldFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTU2V0OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKSkpOwpAQCAtMTE3LDcgKzExOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBKU1NldDo6U2V0RGF0YSogZGF0YSA9IGdldFNl
dERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWRhdGEp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNW
YWx1ZSBjYWxsQmFjayA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CkBAIC0xNDcsNyArMTQ5LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JFYWNoKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3Rv
RnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0
TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTU2V0OjpT
ZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5j
b250YWlucyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CkBAIC0xNTUsNyAr
MTU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJv
dG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0g
Z2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIEpTU2V0
OjpTZXREYXRhKiBkYXRhID0gZ2V0U2V0RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGRhdGEt
PnNpemUoY2FsbEZyYW1lKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4
IGE3MzI0YjRhZGYxZGU4NzdiNzQ2MDY4ZGE1NDEzZGFiZjUzYjU1NGMuLmU4ZmMwZTMyMGI1Y2Ez
YWUxMzNiYThmNDZhYTU4ZWM1OWM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKQEAgLTIzMyw3ICsyMzMsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywg
VW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIG1hcERhdGFTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShQUk9NSVNF
UykKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKaW5kZXggOTRjNDgzYjcyMzYwMjI4M2VkNDBkYTU1ZGVkMjk1NTNhMDMx
NzgyNS4uN2U3MWRlZjljN2E1MGY5N2ZjZTZhMWI5OTdiNjA3YzZhYWZiOWM0OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0yNjgsNyArMjY4LDYgQEAgY2xhc3MgVk0gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+IHsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxp
bmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9w
ZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG1hcERhdGFTdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAjaWYgRU5B
QkxFKFBST01JU0VTKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVj
dHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvTWFwRGF0YUlubGluZXMuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2FjYTYyZDQzOTJkMjViNjY0MjI2
Mzg3OTBkYzc0NzJmMjBkMWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCkBAIC0wLDAgKzEsNCBAQAor
I2lmbmRlZiBXZWJDb3JlX0ZXRF9NYXBEYXRhSW5saWluZXNfaAorI2RlZmluZSBXZWJDb3JlX0ZX
RF9NYXBEYXRhSW5saWluZXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hcERhdGFJbmxp
bmVzLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDlmOWYyNTljZTY3OTI4NDI0Nzg5YTNkMzRiZWYz
OTJhNTc4OWFjYWUuLjM0Y2I4ZjQ2NDQ1NGQ5MWZiZGQ5OGU3NWYwNzhkOGE4Zjg5NmZkNjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZXQuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL01hcERh
dGEuaD4KKyNpbmNsdWRlIDxydW50aW1lL01hcERhdGFJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1l
QXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cC5oPgpAQCAtODcsNyArODgsOCBAQCBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUZpbHRlclJlY3Vyc2lvbiA9IDQwMDAwOwogCiBl
bnVtIFdhbGtlclN0YXRlIHsgU3RhdGVVbmtub3duLCBBcnJheVN0YXJ0U3RhdGUsIEFycmF5U3Rh
cnRWaXNpdE1lbWJlciwgQXJyYXlFbmRWaXNpdE1lbWJlciwKICAgICBPYmplY3RTdGFydFN0YXRl
LCBPYmplY3RTdGFydFZpc2l0TWVtYmVyLCBPYmplY3RFbmRWaXNpdE1lbWJlciwKLSAgICBNYXBE
YXRhU3RhcnRWaXNpdEVudHJ5LCBNYXBEYXRhRW5kVmlzaXRLZXksIE1hcERhdGFFbmRWaXNpdFZh
bHVlIH07CisgICAgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeSwgTWFwRGF0YUVuZFZpc2l0S2V5LCBN
YXBEYXRhRW5kVmlzaXRWYWx1ZSwKKyAgICBTZXREYXRhU3RhcnRWaXNpdEVudHJ5LCBTZXREYXRh
RW5kVmlzaXRLZXkgfTsKIAogLy8gVGhlc2UgY2FuJ3QgYmUgcmVvcmRlcmVkLCBhbmQgYW55IG5l
dyB0eXBlcyBtdXN0IGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKIGVudW0gU2VyaWFs
aXphdGlvblRhZyB7CkBAIC0xMjIsOCArMTI0LDkgQEAgZW51bSBTZXJpYWxpemF0aW9uVGFnIHsK
ICAgICBTZXRPYmplY3RUYWcgPSAyOSwKICAgICBNYXBPYmplY3RUYWcgPSAzMCwKICAgICBOb25N
YXBQcm9wZXJ0aWVzVGFnID0gMzEsCisgICAgTm9uU2V0UHJvcGVydGllc1RhZyA9IDMyLAogI2lm
IEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotICAgIENyeXB0b0tleVRhZyA9IDMyLAorICAgIENyeXB0
b0tleVRhZyA9IDMzLAogI2VuZGlmCiAgICAgRXJyb3JUYWcgPSAyNTUKIH07CkBAIC0yNjYsOSAr
MjY5LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBOb25JbmRleFByb3BlcnRpZXNUYWcgPSAw
eEZGRkZGRkZEOwogICoKICAqIE1hcCA6LSBNYXBPYmplY3RUYWcgTWFwRGF0YQogICoKLSAqIFNl
dCA6LSBTZXRPYmplY3RUYWcgTWFwRGF0YQorICogU2V0IDotIFNldE9iamVjdFRhZyBTZXREYXRh
CiAgKgogICogTWFwRGF0YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+KSBOb25NYXBQcm9w
ZXJ0aWVzVGFnICg8bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFn
CisgKiBTZXREYXRhIDotICg8a2V5OlZhbHVlPikgTm9uU2V0UHJvcGVydGllc1RhZyAoPG5hbWU6
U3RyaW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZwogICoKICAqIFRlcm1pbmFs
IDotCiAgKiAgICAgIFVuZGVmaW5lZFRhZwpAQCAtMTIxNiw5ICsxMjIwLDExIEBAIFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAg
ICAgVmVjdG9yPHVpbnQzMl90LCAxNj4gbGVuZ3RoU3RhY2s7CiAgICAgVmVjdG9yPFByb3BlcnR5
TmFtZUFycmF5LCAxNj4gcHJvcGVydHlTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4g
aW5wdXRPYmplY3RTdGFjazsKLSAgICBWZWN0b3I8TWFwRGF0YSosIDQ+IG1hcERhdGFTdGFjazsK
LSAgICBWZWN0b3I8TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IsIDQ+IGl0ZXJhdG9yU3RhY2s7Ci0g
ICAgVmVjdG9yPEpTVmFsdWUsIDQ+IGl0ZXJhdG9yVmFsdWVTdGFjazsKKyAgICBWZWN0b3I8SlNN
YXAqLCA0PiBtYXBTdGFjazsKKyAgICBWZWN0b3I8SlNNYXA6Ok1hcERhdGE6OmNvbnN0X2l0ZXJh
dG9yLCA0PiBtYXBJdGVyYXRvclN0YWNrOworICAgIFZlY3RvcjxKU1NldCosIDQ+IHNldFN0YWNr
OworICAgIFZlY3RvcjxKU1NldDo6U2V0RGF0YTo6Y29uc3RfaXRlcmF0b3IsIDQ+IHNldEl0ZXJh
dG9yU3RhY2s7CisgICAgVmVjdG9yPEpTVmFsdWUsIDQ+IG1hcEl0ZXJhdG9yVmFsdWVTdGFjazsK
ICAgICBWZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwogICAgIFdhbGtlclN0YXRl
IHN0YXRlID0gU3RhdGVVbmtub3duOwogICAgIEpTVmFsdWUgaW5WYWx1ZSA9IGluOwpAQCAtMTM1
MCwzNiArMTM1NiwyMSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIEpTTWFwKiBpbk1hcCA9IGpz
Q2FzdDxKU01hcCo+KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghc3RhcnRNYXAoaW5N
YXApKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBNYXBEYXRh
KiBtYXBEYXRhID0gaW5NYXAtPm1hcERhdGEoKTsKLSAgICAgICAgICAgICAgICBtX2djQnVmZmVy
LmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5kKG1h
cERhdGEpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2suYXBwZW5kKG1hcERhdGEtPmJl
Z2luKCkpOworICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKGluTWFwKTsKKyAgICAg
ICAgICAgICAgICBtYXBTdGFjay5hcHBlbmQoaW5NYXApOworICAgICAgICAgICAgICAgIG1hcEl0
ZXJhdG9yU3RhY2suYXBwZW5kKGluTWFwLT5tYXBEYXRhKCktPmJlZ2luKCkpOwogICAgICAgICAg
ICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluTWFwKTsKICAgICAgICAgICAgICAgICBn
b3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBz
ZXRTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmplY3Qo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11
bUZpbHRlclJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrT3ZlcmZs
b3dFcnJvcjsKLSAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBqc0Nhc3Q8SlNTZXQqPihp
blZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGluU2V0KSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IGlu
U2V0LT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwRGF0
YSk7Ci0gICAgICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAg
ICAgICAgICAgICBpdGVyYXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5iZWdpbigpKTsKLSAgICAg
ICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpblNldCk7Ci0gICAgICAgICAgICAg
ICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwotICAgICAgICAgICAgfQogICAgICAgICAg
ICAgbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeToKICAgICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0
VmlzaXRFbnRyeTogewotICAgICAgICAgICAgICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yJiBw
dHIgPSBpdGVyYXRvclN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBE
YXRhID0gbWFwRGF0YVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAocHRyID09IG1h
cERhdGEtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2sucmVtb3Zl
TGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgIEpTTWFwOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvciYgcHRyID0gbWFw
SXRlcmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNNYXAqIG1hcCA9IG1hcFN0
YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IG1hcC0+bWFwRGF0YSgpLT5l
bmQoKSkgeworICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4ob2JqZWN0KSB8
fCBqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYykpOwogICAgICAg
ICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFeGNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFwUHJvcGVydGllc1RhZyk7
CkBAIC0xMzg4LDIyICsxMzc5LDYwIEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2Vy
aWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGluVmFsdWUgPSBwdHIua2V5KCk7CiAgICAgICAgICAgICAgICAgbV9nY0J1ZmZl
ci5hcHBlbmQocHRyLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFj
ay5hcHBlbmQocHRyLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yVmFsdWVT
dGFjay5hcHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBw
ZW5kKE1hcERhdGFFbmRWaXNpdEtleSk7CiAgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25v
d247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdEtleTog
ewotICAgICAgICAgICAgICAgIGluVmFsdWUgPSBpdGVyYXRvclZhbHVlU3RhY2subGFzdCgpOwot
ICAgICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAg
ICAgICAgICAgaW5WYWx1ZSA9IG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5sYXN0KCk7CisgICAgICAg
ICAgICAgICAgbWFwSXRlcmF0b3JWYWx1ZVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAg
ICAgICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IE1hcERhdGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yU3Rh
Y2subGFzdCgpICE9IG1hcERhdGFTdGFjay5sYXN0KCktPmVuZCgpKQotICAgICAgICAgICAgICAg
ICAgICArK2l0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChtYXBJdGVy
YXRvclN0YWNrLmxhc3QoKSAhPSBtYXBTdGFjay5sYXN0KCktPm1hcERhdGEoKS0+ZW5kKCkpCisg
ICAgICAgICAgICAgICAgICAgICsrbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CiAgICAgICAgICAg
ICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICBzZXRTdGFydFN0YXRlOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUu
aXNPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2suc2l6ZSgp
ID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0
YWNrT3ZlcmZsb3dFcnJvcjsKKyAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBqc0Nhc3Q8
SlNTZXQqPihpblZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGluU2V0KSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5h
cHBlbmQoaW5TZXQpOworICAgICAgICAgICAgICAgIHNldFN0YWNrLmFwcGVuZChpblNldCk7Cisg
ICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JTdGFjay5hcHBlbmQoaW5TZXQtPnNldERhdGEoKS0+
YmVnaW4oKSk7CisgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5hcHBlbmQoaW5TZXQp
OworICAgICAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHNldERhdGFTdGFydFZpc2l0RW50cnk6CisgICAgICAgICAgICBj
YXNlIFNldERhdGFTdGFydFZpc2l0RW50cnk6IHsKKyAgICAgICAgICAgICAgICBKU1NldDo6U2V0
RGF0YTo6Y29uc3RfaXRlcmF0b3ImIHB0ciA9IHNldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAg
ICAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBzZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHB0ciA9PSBzZXQtPnNldERhdGEoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0SXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHNl
dFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
anNEeW5hbWljQ2FzdDxKU1NldCo+KG9iamVjdCkpOworICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOworICAg
ICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpblZhbHVlID0gcHRyLmtleSgpOworICAgICAgICAgICAgICAgIHN0YXRlU3Rh
Y2suYXBwZW5kKFNldERhdGFFbmRWaXNpdEtleSk7CisgICAgICAgICAgICAgICAgZ290byBzdGF0
ZVVua25vd247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNldERhdGFFbmRWaXNp
dEtleTogeworICAgICAgICAgICAgICAgIGlmIChzZXRJdGVyYXRvclN0YWNrLmxhc3QoKSAhPSBz
ZXRTdGFjay5sYXN0KCktPnNldERhdGEoKS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgICAgICsr
c2V0SXRlcmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBzZXREYXRhU3Rh
cnRWaXNpdEVudHJ5OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzdGF0ZVVua25vd246
CiAgICAgICAgICAgICBjYXNlIFN0YXRlVW5rbm93bjogewogICAgICAgICAgICAgICAgIFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlIHRlcm1pbmFsQ29kZSA9IFN1Y2Nlc3NmdWxseUNvbXBsZXRlZDsK
QEAgLTIzNjAsOSArMjM4OSwxMCBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFz
ZSB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGNvbnN1bWVNYXBEYXRhVGVybWluYXRp
b25JZlBvc3NpYmxlKCkKKyAgICB0ZW1wbGF0ZTxTZXJpYWxpemF0aW9uVGFnIFRhZz4KKyAgICBi
b29sIGNvbnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpCiAgICAgewot
ICAgICAgICBpZiAocmVhZFRhZygpID09IE5vbk1hcFByb3BlcnRpZXNUYWcpCisgICAgICAgIGlm
IChyZWFkVGFnKCkgPT0gVGFnKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIG1f
cHRyLS07CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzODQsOCArMjQxNCw5IEBAIERlc2Vy
aWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogICAgIFZl
Y3Rvcjx1aW50MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2
PiBwcm9wZXJ0eU5hbWVTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4gb3V0cHV0T2Jq
ZWN0U3RhY2s7Ci0gICAgVmVjdG9yPEpTVmFsdWUsIDQ+IGtleVN0YWNrOwotICAgIFZlY3RvcjxN
YXBEYXRhKiwgND4gbWFwRGF0YVN0YWNrOworICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBtYXBLZXlT
dGFjazsKKyAgICBWZWN0b3I8SlNNYXAqLCA0PiBtYXBTdGFjazsKKyAgICBWZWN0b3I8SlNTZXQq
LCA0PiBzZXRTdGFjazsKICAgICBWZWN0b3I8V2Fsa2VyU3RhdGUsIDE2PiBzdGF0ZVN0YWNrOwog
ICAgIFdhbGtlclN0YXRlIHN0YXRlID0gU3RhdGVVbmtub3duOwogICAgIEpTVmFsdWUgb3V0VmFs
dWU7CkBAIC0yNDc4LDQxICsyNTA5LDU0IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURl
c2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogICAgICAgICAgICAgSlNNYXAqIG1hcCA9IEpTTWFw
OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwog
ICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIG91dHB1dE9i
amVjdFN0YWNrLmFwcGVuZChtYXApOwotICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG1h
cC0+bWFwRGF0YSgpOwotICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsK
LSAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKLSAgICAgICAgfQotICAg
ICAgICBzZXRPYmplY3RTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0
U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93RXJyb3IpOwotICAg
ICAgICAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2Jh
bE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQo
c2V0KTsKLSAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOwotICAgICAg
ICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IHNldC0+bWFwRGF0YSgpOwotICAgICAgICAgICAgbWFw
RGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKKyAgICAgICAgICAgIG1hcFN0YWNrLmFwcGVuZCht
YXApOwogICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwogICAgICAgICB9
CiAgICAgICAgIG1hcERhdGFTdGFydFZpc2l0RW50cnk6CiAgICAgICAgIGNhc2UgTWFwRGF0YVN0
YXJ0VmlzaXRFbnRyeTogewotICAgICAgICAgICAgaWYgKGNvbnN1bWVNYXBEYXRhVGVybWluYXRp
b25JZlBvc3NpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2sucmVtb3ZlTGFz
dCgpOworICAgICAgICAgICAgaWYgKGNvbnN1bWVDb2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQ
b3NzaWJsZTxOb25NYXBQcm9wZXJ0aWVzVGFnPigpKSB7CisgICAgICAgICAgICAgICAgbWFwU3Rh
Y2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1l
bWJlcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERh
dGFFbmRWaXNpdEtleSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKICAgICAgICAg
fQotCiAgICAgICAgIGNhc2UgTWFwRGF0YUVuZFZpc2l0S2V5OiB7Ci0gICAgICAgICAgICBrZXlT
dGFjay5hcHBlbmQob3V0VmFsdWUpOworICAgICAgICAgICAgbWFwS2V5U3RhY2suYXBwZW5kKG91
dFZhbHVlKTsKICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERhdGFFbmRWaXNpdFZh
bHVlKTsKICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9Ci0KICAgICAg
ICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRWYWx1ZTogewotICAgICAgICAgICAgbWFwRGF0YVN0YWNr
Lmxhc3QoKS0+c2V0KG1fZXhlYywga2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7Ci0gICAgICAg
ICAgICBrZXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBKU01hcCogbWFwID0gbWFw
U3RhY2subGFzdCgpOworICAgICAgICAgICAgbWFwLT5tYXBEYXRhKCktPnNldChtX2V4ZWMsIG1h
cCwgbWFwS2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBtYXBLZXlTdGFj
ay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7
CiAgICAgICAgIH0KKworICAgICAgICBzZXRPYmplY3RTdGFydFN0YXRlOiB7CisgICAgICAgICAg
ICBpZiAob3V0cHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092
ZXJmbG93RXJyb3IpOworICAgICAgICAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9l
eGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAg
bV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFw
cGVuZChzZXQpOworICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKHNldCk7CisgICAgICAgICAg
ICBnb3RvIHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RGF0
YVN0YXJ0VmlzaXRFbnRyeToKKyAgICAgICAgY2FzZSBTZXREYXRhU3RhcnRWaXNpdEVudHJ5OiB7
CisgICAgICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRpb25JZlBvc3Np
YmxlPE5vblNldFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRTdGFjay5y
ZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoU2V0RGF0YUVu
ZFZpc2l0S2V5KTsKKyAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgU2V0RGF0YUVuZFZpc2l0S2V5OiB7CisgICAgICAgICAgICBKU1NldCogc2V0
ID0gc2V0U3RhY2subGFzdCgpOworICAgICAgICAgICAgc2V0LT5zZXREYXRhKCktPnNldChtX2V4
ZWMsIHNldCwgb3V0VmFsdWUsIG91dFZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0
YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRlVW5rbm93bjoKICAgICAg
ICAgY2FzZSBTdGF0ZVVua25vd246CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5hbCA9
IHJlYWRUZXJtaW5hbCgpKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzU0MTZmNGU3OWIwMzFjOTI4YmZjOWY5YzBlMGMw
ODAxNWRiNmRkMS4uMDM2OWYwOWE3MzFhZjA1YWM3YmM1M2U1MjM1MzEyMTE5ZDAxODViZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAzLTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludGVncmF0ZSBNYXBEYXRhIGludG8gSlNNYXAgYW5k
IEpTU2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDI1NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
dHJ1Y3R1cmUtY2xvbmUgaW1wbGVtZW50YXRpb24gYmVjb21lcyBhd2FyZSBvZiB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIE1hcCBhbmQgU2V0LgorCisgICAgICAgICogZmFzdC9zdG9yYWdlL3Nlcmlh
bGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWw6CisKIDIwMTUtMDMtMTEgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBUZXN0IGdhcmRlbmluZyBh
ZnRlciByMTgxMjYwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFs
aXplZC1zY3JpcHQtdmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxp
emVkLXNjcmlwdC12YWx1ZS5odG1sCmluZGV4IDQzNWQwN2ZiYmFmNjcwMDk4YjkyZGM4NWJjMWU2
NWJkYmJkODliMDMuLmZiMzEwMzExNGI1NWVkOGI3NDU0YmU2OGJiODcwNzhiNTNiNmY3OTggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12YWx1
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12
YWx1ZS5odG1sCkBAIC00MTUsMTYgKzQxNSwxNCBAQAogCiB0ZXN0U2VyaWFsaXphdGlvbihzZXRP
YmplY3QsCiBbCi0gICAgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNywgMHgwNywg
MHgwYSwgMHgwMCwgCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgz
ZiwgMHgwYSwgMHgwMCwgCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwg
MHgzZiwgMHgxMywgMHgwMCwgCi0gICAgMHgxMywgMHgwMCwgMHgxMCwgMHgwMywgMHgwMCwgMHgw
MCwgMHgwMCwgMHg2MiwgMHgwMCwgCi0gICAgMHg2MSwgMHgwMCwgMHg3MiwgMHgwMCwgMHgxMCwg
MHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgCi0gICAgMHgwMCwgMHgxYSwgMHhmZSwgMHhmZiwgMHhm
ZiwgMHhmZiwgMHgwMCwgMHgxMywgMHgwMSwgCi0gICAgMHgxZiwgMHgwNywgMHgwMCwgMHgwMCwg
MHgwMCwgMHg2NSwgMHgwMCwgMHg3OCwgMHgwMCwgCi0gICAgMHg3MCwgMHgwMCwgMHg2MSwgMHgw
MCwgMHg2ZSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2ZiwgCi0gICAgMHgwMCwgMHgwMiwgMHhmZiwg
MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgCi0gICAgMHhmZgorICAgIDB4MDUs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDcsIDB4MGEsIDB4MDAsIDB4MDAsIAorICAgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MTMsIDB4MDAsIDB4MTAsIAorICAg
IDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzIsIAor
ICAgIDB4MDAsIDB4MWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDcs
IAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzgsIDB4MDAsIDB4NzAsIDB4
MDAsIAorICAgIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIDB4MDAs
IDB4MDIsIAorICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4
ZmYKKwogXSk7CiAKIHRlc3RTZXJpYWxpemF0aW9uKGZ1bmN0aW9uKCl7fSwgW10sIG51bGwsIERP
TUV4Y2VwdGlvbi5EQVRBX0NMT05FX0VSUik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248532</attachid>
            <date>2015-03-12 12:47:44 -0700</date>
            <delta_ts>2015-03-12 12:49:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150313044717.patch</filename>
            <type>text/plain</type>
            <size>82745</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NTRiNTA0ZDczOTRiNzlhNGI4Y2Y2NDE1NzMwMjg0ODMxMWI4ZjNiLi4yMGU4OTJhZWI4NGE4N2Q5
YWI2ZmIyNjc2ZGMzMzU3OTA2Y2JhNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDcgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgTWFwRGF0YUltcGwgaXMgc3BlY2lhbGl6ZWQgaW50byBNYXBEYXRhIGFuZCBTZXREYXRh
LgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBTZXREYXRhLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBk
dW1teSB2YWx1ZXMKKyAgICAgICAgcHJldmlvdXNseSBzdG9yZWQgaW4gdGhlIE1hcERhdGFJbXBs
LiBTbyB0aGUgc3RvcmFnZSBzaXplIG9mIFNldERhdGEKKyAgICAgICAgYmVjb21lcyB0aGUgaGFs
ZiBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQW5kIG5vdyBNYXBE
YXRhIGFuZCBTZXREYXRhIGFyZSBjb21wbGV0ZWx5IGludGVncmF0ZWQgaW50byBKU01hcCBhbmQg
SlNTZXQsCisgICAgICAgIHRoZXNlIHN0cnVjdHVyZXMgYXJlIG5vdCBleHBvc2VkIHRvIHRoZSBv
dGhlciBjb2RlIGV2ZW4gaW4gV2ViQ29yZSB3b3JsZC4KKworICAgICAgICBBbmQgYXQgdGhlIHNh
bWUgdGltZSwgdGhpcyBwYXRjaCBmaXhlcyBtaXNzaW5nIGRlc3Ryb3kgZnVuY3Rpb25zCisgICAg
ICAgIGluIEpTTWFwSXRlcmF0b3IgYW5kIEpTU2V0SXRlcmF0b3IuCisgICAgICAgIFRoZXkgYXJl
IG5lZWRlZCBiZWNhdXNlIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIGlzIGEgbm9uLXRyaXZpYWwg
ZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9K
U01hcC5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6
SlNNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU01hcDo6Y29weUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpoYXMpOgorICAgICAgICAoSlNDOjpKU01hcDo6
c2l6ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpnZXQpOgorICAgICAgICAoSlNDOjpKU01hcDo6
c2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU01hcC5oOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6
OmtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAoSlND
OjpKU01hcDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50
cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5V2l0aG91dFdy
aXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0VmFsdWUpOgorICAg
ICAgICAoSlNDOjpKU01hcDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmVuZCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjptYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6
SlNNYXBJdGVyYXRvcik6CisgICAgICAgICogcnVudGltZS9KU1NldC5jcHA6CisgICAgICAgIChK
U0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjpoYXMpOgorICAgICAgICAoSlNDOjpKU1NldDo6c2l6ZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpKU1NldDo6Y2xlYXIpOgorICAgICAgICAoSlND
OjpKU1NldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmZpbmlzaENyZWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2V0Lmg6CisgICAgICAgIChKU0M6OkpTU2V0
OjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
U2V0OjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXlX
aXRob3V0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpK
U1NldDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6ZW5kKToKKyAgICAgICAgKEpTQzo6
SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6Om1hcERhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGEuaDoKKyAg
ICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjprZXkpOgorICAgICAgICAo
SlNDOjpNYXBEYXRhSW1wbDo6Y29uc3RfaXRlcmF0b3I6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6
TWFwRGF0YUltcGw6OnNpemUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46Ok1h
cERhdGFJbXBsKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpjbGVhcik6Cisg
ICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6S2V5VHlwZTo6S2V5VHlwZSk6CisgICAg
ICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5j
cmVtZW50KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRv
cjo6ZW5zdXJlU2xvdCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3Rf
aXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50
cnk+Ojpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IpOgorICAgICAgICAoSlND
Ojo9KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmtleSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjp2YWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
cERhdGE6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjbGVhcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OktleVR5cGU6OktleVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5z
dXJlU2xvdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
Ojpjb25zdF9pdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0
X2l0ZXJhdG9yOjp+Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IqKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwRGF0YUlubGluZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxF
bnRyeT46OmZpbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnRhaW5z
KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjphZGQpOgorICAgICAgICAoSlND
OjpNYXBEYXRhSW1wbDxFbnRyeT46OnNldCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVu
dHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFw
cGVuZCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRNYXAp
OgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6Om1hcFBy
b3RvRnVuY0RlbGV0ZSk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0ZvckVhY2gpOgorICAg
ICAgICAoSlNDOjptYXBQcm90b0Z1bmNHZXQpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNI
YXMpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjptYXBQ
cm90b0Z1bmNTaXplKToKKyAgICAgICAgKEpTQzo6Z2V0TWFwRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRTZXQpOgor
ICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNBZGQpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1
bmNDbGVhcik6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0RlbGV0ZSk6CisgICAgICAgIChK
U0M6OnNldFByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNIYXMp
OgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNTaXplKToKKyAgICAgICAgKEpTQzo6Z2V0TWFw
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAzLTEwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIGV2ZW50IGhhbmRsZXIgZml4
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAxMDdiNDkyMDEyNmNkZDk4YTNmNDVkNWI0ZGYyZDNlMDk0NmIyMDMx
Li5iYTVjMDI3NTI1OGYwOTczYTdlNGNlZjI4OGQzNmQwMWE3NjYwMDBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNT
ZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBT
ZXQgaGFzIFNldERhdGEgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gTWFwRGF0YS4KKyAgICAgICAg
QW5kIE1hcERhdGEvU2V0RGF0YSBhcmUgY29tcGxldGVseSBpbnRlZ3JhdGVkIGludG8gSlNTZXQg
YW5kIEpTTWFwLgorICAgICAgICBTdHJ1Y3R1cmVkLWNsb25pbmcgYWxnb3JpdGhtIG5lZWQgdG8g
YmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcy4KKyAgICAgICAgQW5kIGluIHRoZSBjYXNlIG9mIEpT
U2V0LCBzaW5jZSBKU1NldCBkb2Vzbid0IG5lZWQgZHVtbXkgdmFsdWUgZm9yIGNvbnN0cnVjdGlv
biwKKyAgICAgICAgU3RydWN0dXJlZC1jbG9uaW5nIG9ubHkgc2VyaWFsaXplIHRoZSBrZXlzIGlu
IEpTU2V0LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBEYXRhSW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmNvbnN1bWVDb2xsZWN0aW9uRGF0
YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OmNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBvc3NpYmxlKTogRGVsZXRlZC4KKwogMjAxNS0w
My0xMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE4MTM2Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjMTRlNjU4ZDA4OTY4ZDI4N2RkN2QzM2ViOTIwNTNiOTJkMTY5NzNhLi45
M2E2MWZkNzdlMmNkYTg1NjRkMmRmNDQxNzk1ZjRjMGQxYzY4ZTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC01MDUsNyArNTA1LDYgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKICAgICBydW50
aW1lL0xvb2t1cC5jcHAKICAgICBydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAotICAgIHJ1bnRp
bWUvTWFwRGF0YS5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwCiAg
ICAgcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL01hcFByb3Rv
dHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTlhMTk2ZjY2MDk1ZmNk
MTFhMzBiZGY1MjdhMDhhNGNkOWRmZjJiNi4uNTY5ZWFkM2Q3MjI2YWFmZWQxNDUyY2MxYjYzMDQz
Mjc0YjI2ZjM5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzAsOCArMTMz
MCw4IEBACiAJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MjQxNjQxOTI1
NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdF
RTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4NTA3RDYxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3Bw
ICovOyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAw
MTFGNkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5M0Q0M0ND
QTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAv
KiBTcGlsbFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcy
NjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CiAJCUE3ODg1
M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMDM4LDggKzMwMzgsOCBAQAogCQlBNzdGMTgx
RjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg1
MDdENDE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYXBEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1OTNENDNDQ0EwQkJFMDZEODlDNTk3MDcgLyogTWFwRGF0YUlubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODg1
M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0Zh
aWxlZEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDgxLDggKzQ0ODEsOCBAQAogCQkJCUY2
OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKIAkJCQlBNzAwODczNzE3Q0JF
ODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3MDA4NzM4MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oICovLAotCQkJCUE3ODUwN0Q0MTdDQkM2RkQw
MDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcg
LyogTWFwRGF0YS5oICovLAorCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRh
SW5saW5lcy5oICovLAogCQkJCUE3NERFRjhCMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRv
ckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzRERUY4QzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFw
SXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCkBAIC02MTAzLDYgKzYxMDMsNyBAQAogCQkJ
CTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEE2NDQxNTE5NDIwQTZDNjFBRDE4ODJFIC8qIE1hcERhdGFJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5MjE4MkQ5OTE0MDA1MjJDMjIgLyogTWFw
SXRlcmF0b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkx
NDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
QEAgLTcyNDgsNyArNzI0OSw2IEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThD
NkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDA4NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzRERUY5MTE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyog
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NC
RThEMzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAppbmRleCBjMDhhOTcwOGJlNDVhOTM0OTU1MjM0
YjMwNTc2NjBkNzgxNjc1MGY0Li40NDEwMDZkYjM4YWYzMjE4MDA1ZGFhZjYzNmFmMTNiOWI3M2Yw
OWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCkBAIC0yNywyNiAr
MjcsNjIgQEAKICNpbmNsdWRlICJKU01hcC5oIgogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6
OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNNYXApIH07CiAKK3ZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpz
Q2FzdDxKU01hcCo+KGNlbGwpLT5+SlNNYXAoKTsKK30KKwogdm9pZCBKU01hcDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNNYXAqPihjZWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXBE
YXRhKTsKKyAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7CiB9CiAKLXZvaWQgSlNNYXA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3ZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYg
dmlzaXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICBtX21hcERhdGEuc2V0KHZtLCB0aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAg
ICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKyAgICBqc0Nh
c3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9r
ZW4pOwogfQogCitib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
K3sKKyAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Cit9CisKK3NpemVf
dCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIG1fbWFwRGF0YS5z
aXplKGV4ZWMpOworfQorCitKU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlz
LCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKK3sKKyAg
ICBtX21hcERhdGEuY2xlYXIoKTsKK30KKworYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCit7CisgICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywg
a2V5KTsKK30KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKaW5kZXggNDMx
NTI3NGRlM2U5ODU3YzViYmUwODM1MTM3NTY5YTc3MTY0NmUwNS4uZDZmMjU5YmYzMTAzOWZiNzgw
OGFmYjRhOGRhNmY5ZWQwYWM0ZWY4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cC5oCkBAIC0yNiwxNSArMjYsNjMgQEAKICNpZm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9o
CiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFw
RGF0YTsKLQotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitjbGFzcyBK
U01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVj
dCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBt
YWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAgLy8gZmllbGRzIGJlIFdyaXRl
QmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBtX3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGtleSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tl
eTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
KyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKKyAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
c2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93
bmVyLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3ZhbHVlLnNldCh2
bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2tleS5jbGVhcigpOworICAgICAgICAgICAgbV92YWx1ZS5j
bGVhcigpOworICAgICAgICB9CisgICAgfTsKKworICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50
cnk+IE1hcERhdGE7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkBAIC01NSwxOSArMTAz
LDM1IEBAIGNsYXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBy
ZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgTWFwRGF0
YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAgIHR5cGVkZWYgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBEYXRhLmJlZ2luKCk7
CisgICAgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tYXBEYXRhLmVuZCgpOworICAgIH0KKyAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVlIGdldChF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtl
eSwgSlNWYWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKKyAgICBib29s
IHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogcHJpdmF0ZToKICAgICBKU01hcChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
KyAgICAgICAgLCBtX21hcERhdGEoKQogICAgIHsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0KKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlW
aXNpdG9yJiwgQ29weVRva2VuKTsKIAotICAgIFdyaXRlQmFycmllcjxNYXBEYXRhPiBtX21hcERh
dGE7CisgICAgTWFwRGF0YSBtX21hcERhdGE7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCmluZGV4IGMxNjdhY2JjZjNhM2E5Yjdj
NGNlNWNhNzI4YTM4MTVjYmI5NmNiYmUuLmU5ZDdkNDJmYjRlMzhlZDMxN2NkNjJiZjA2NDJjYzEx
NWYxZTYzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRl
cmF0b3IuY3BwCkBAIC00MCwxNSArNDAsMTkgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTTWFwKiBpdGVyYXRlZE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7
Ci0gICAgbV9pdGVyYXRlZE9iamVjdERhdGEuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdC0+
bWFwRGF0YSgpKTsKK30KKwordm9pZCBKU01hcEl0ZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpLT5+SlNNYXBJdGVyYXRvcigp
OwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01hcEl0ZXJhdG9yKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7ICAgICAgICAKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVy
YXRlZE9iamVjdERhdGEpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7
CiB9CiAKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKaW5kZXggNjNkZDVlOGIxMWY5NmE0NDYxYWRkNWNl
YTNjNDQ3YWRjNjAwNDBjYy4uYWI4N2IzYWZlY2Y0Y2I3NWU4ZDlkOTgwZTk4MWQ2YThhYTY4MTNl
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaApA
QCAtODIsMTggKzgyLDE4IEBAIGNsYXNzIEpTTWFwSXRlcmF0b3IgOiBwdWJsaWMgSlNEZXN0cnVj
dGlibGVPYmplY3QgewogcHJpdmF0ZToKICAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgTWFwSXRlcmF0aW9uS2luZCBr
aW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9y
KGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCktPmJlZ2luKCkpCisgICAgICAgICwgbV9pdGVyYXRv
cihpdGVyYXRlZE9iamVjdC0+YmVnaW4oKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7
CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZy
YW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsK
LSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERhdGE7Ci0gICAgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU01hcDo6Y29uc3RfaXRlcmF0
b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAppbmRleCAzYzFkMTI0YmM1NjJkYjZkYzFi
YTAwYzk2M2JhNTQ5M2U2MDM3Mzc3Li44ZmM1NjM3Njk2M2E1Nzc3ZmEyNTRmY2RlNTk3ODZmNWQ0
YTIwMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCkBAIC0zNSwxNyArMzUsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAordm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPn5KU1NldCgpOworfQorCiB2b2lkIEpT
U2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1NldCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKK30KKwordm9pZCBKU1NldDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9r
ZW4pCit7CisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7
CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2luZ1N0b3JlKHZp
c2l0b3IsIHRva2VuKTsKK30KKworYm9vbCBKU1NldDo6aGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9zZXREYXRhLmNvbnRhaW5zKGV4ZWMsIHZhbHVl
KTsKK30KKworc2l6ZV90IEpTU2V0OjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gbV9zZXREYXRhLnNpemUoZXhlYyk7Cit9CisKK3ZvaWQgSlNTZXQ6OmFkZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgbV9zZXREYXRhLnNldChleGVjLCB0aGlzLCB2
YWx1ZSwgdmFsdWUpOworfQorCit2b2lkIEpTU2V0OjpjbGVhcihFeGVjU3RhdGUqKQoreworICAg
IG1fc2V0RGF0YS5jbGVhcigpOwogfQogCi12b2lkIEpTU2V0OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCitib29sIEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX21hcERhdGEuc2V0KHZtLCB0
aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAgICByZXR1cm4gbV9zZXREYXRhLnJlbW92ZShl
eGVjLCB2YWx1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCmlu
ZGV4IGZjMGFhMzBmYjk1N2NiODlmOTVlNTY3ZWYxNjBjZjgxNTAzZTI1MmUuLjNlM2MwZWMyYTRi
YjM4ZmFiZjY0ZmNkNzE1NjM2ZTM2Y2RlNzczZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZXQuaApAQCAtMjYsMTUgKzI2LDU5IEBACiAjaWZuZGVmIEpTU2V0X2gKICNkZWZpbmUg
SlNTZXRfaAogCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIE1hcERhdGE7Ci0KLWNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewor
Y2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGli
bGVPYmplY3QgQmFzZTsKKworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50
cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZpZWxkcyBi
ZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJpdmF0ZToK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OworCisgICAgcHVibGljOgorICAg
ICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9rZXk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZtX2tleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAgICBt
X2tleS5zZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRL
ZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtleSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldFZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fa2V5LmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdHlwZWRlZiBNYXBEYXRh
SW1wbDxFbnRyeT4gU2V0RGF0YTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTU1
LDE5ICs5OSwzNCBAQCBjbGFzcyBKU1NldCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAg
IE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiBtX21hcERhdGEuZ2V0KCk7IH0KKyAgICB0eXBl
ZGVmIFNldERhdGE6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0RGF0YS5i
ZWdpbigpOworICAgIH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0RGF0YS5lbmQoKTsKKyAgICB9CisgICAgYm9vbCBoYXMoRXhlY1N0
YXRlKiwgSlNWYWx1ZSk7CisgICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKik7CisgICAgdm9pZCBh
ZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKKyAg
ICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogcHJpdmF0ZToKICAgICBKU1Nl
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKKyAgICAgICAgLCBtX3NldERhdGEoKQogICAgIHsKICAgICB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCisgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1fbWFw
RGF0YTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNp
dG9yJiwgQ29weVRva2VuKTsKKworICAgIFNldERhdGEgbV9zZXREYXRhOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAppbmRleCAy
ZmMyOTg5MDE3Njg3M2U0NGJiOTMxNTI0YzVmMDNlZGEwNGYzNzVlLi41ZWNhYzEyZDljNGNhMjI3
NWVkZGFkOWU3ODk3ODU0OGM5N2U3YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQwLDE5IEBAIHZvaWQgSlNTZXRJ
dGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1NldCogaXRlcmF0ZWRPYmplY3QpCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fc2V0LnNldCh2bSwgdGhpcywg
aXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3REYXRhLnNldCh2bSwgdGhpcywg
aXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7CiB9CiAKIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
U2V0SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsgICAgICAg
IAorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0YSk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKK30KKwordm9pZCBKU1NldEl0ZXJhdG9yOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpLT5+
SlNTZXRJdGVyYXRvcigpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCmluZGV4IDljNzBjMjZl
NTBhMmI1ZDk1ZThkYzgxZGZkMTlkYWFkNDI1MDdiZDcuLmIwNjNjNTEwOTZiMDlkN2VhZGNiOTRi
OGZmNGY5ZDRjNDFiZmNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmgKQEAgLTgwLDE4ICs4MCwxOCBAQCBjbGFzcyBKU1NldEl0ZXJhdG9yIDog
cHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHByaXZhdGU6CiAgICAgSlNTZXRJdGVyYXRv
cihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0ZWRPYmplY3QsIFNl
dEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
ICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bWFwRGF0YSgpLT5iZWdpbigpKQorICAg
ICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPmJlZ2luKCkpCiAgICAgICAgICwgbV9r
aW5kKGtpbmQpCiAgICAgewogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0Kik7CiAgICAgSlNWYWx1ZSBj
cmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmll
cjxKU1NldD4gbV9zZXQ7Ci0gICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1faXRlcmF0ZWRPYmpl
Y3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CisgICAgSlNT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CiAgICAgU2V0SXRlcmF0aW9uS2luZCBtX2tp
bmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU2OTFjODUyYWIyZmQyYmIzZTU0N2E0Y2RjMDlk
ZTM2Y2IxN2ZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTWFwRGF0YS5oIgotCi0jaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCi0jaW5jbHVk
ZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25z
dCBDbGFzc0luZm8gTWFwRGF0YTo6c19pbmZvID0geyAiTWFwRGF0YSIsIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoTWFwRGF0YSkgfTsKLQotc3RhdGljIGNvbnN0IGludDMyX3QgbWluaW11bU1h
cFNpemUgPSA4OwotCi1NYXBEYXRhOjpNYXBEYXRhKFZNJiB2bSkKLSAgICA6IEJhc2Uodm0sIHZt
Lm1hcERhdGFTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2NhcGFjaXR5KDApCi0gICAgLCBtX3Np
emUoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBtX2l0ZXJhdG9yQ291bnQoMCkK
LSAgICAsIG1fZW50cmllcygwKQotewotfQotCi1NYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6Zmlu
ZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1
ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5m
aW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0g
ICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3lt
Ym9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlk
KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVd
OwotICAgIH0KLSAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRl
ciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBp
ZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0KLSAgICBh
dXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFs
dWUpKTsKLSAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotfQotCi1ib29s
IE1hcERhdGE6OmNvbnRhaW5zKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsK
LSAgICByZXR1cm4gZmluZChjYWxsRnJhbWUsIGtleSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBNYXAsIHR5cGVuYW1lIEtleT4gTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgTWFwJiBtYXAsIEtleSBrZXksIEtleVR5cGUga2V5VmFsdWUpCi17Ci0g
ICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlvbiA9IG1hcC5maW5kKGtleSk7Ci0gICAg
aWYgKGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbbG9j
YXRpb24tPnZhbHVlXTsKLSAgICAKLSAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGNhbGxG
cmFtZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtl
eSwgbV9zaXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAg
RW50cnkqIGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107Ci0gICAgbmV3IChlbnRyeSkgRW50
cnkoKTsKLSAgICBlbnRyeS0+a2V5LnNldChjYWxsRnJhbWUtPnZtKCksIHRoaXMsIGtleVZhbHVl
LnZhbHVlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6c2V0KENhbGxG
cmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBFbnRy
eSogbG9jYXRpb24gPSBhZGQoY2FsbEZyYW1lLCBrZXkpOwotICAgIGlmICghbG9jYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBsb2NhdGlvbi0+dmFsdWUuc2V0KGNhbGxGcmFtZS0+dm0oKSwg
dGhpcywgdmFsdWUpOwotfQotICAgIAotTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0
cmluZygpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9zdHJpbmdLZXllZFRhYmxl
LCBhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSwga2V5KTsKLSAg
ICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBhZGQoY2FsbEZyYW1l
LCBtX3N5bWJvbEtleWVkVGFibGUsIGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCku
dWlkKCksIGtleSk7Ci0gICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJu
IGFkZChjYWxsRnJhbWUsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwga2V5
KTsKLSAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV92YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6
OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOwotfQotCi1KU1ZhbHVlIE1hcERhdGE6OmdldChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKEVudHJ5KiBlbnRyeSA9
IGZpbmQoY2FsbEZyYW1lLCBrZXkpKQotICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlLmdldCgp
OwotICAgIHJldHVybiBKU1ZhbHVlKCk7Ci19Ci0KLWJvb2wgTWFwRGF0YTo6cmVtb3ZlKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpbnQzMl90IGxvY2F0aW9uOwot
ICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0
cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUp
LmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1
ZTsKLSAgICAgICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9ICBlbHNl
IGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJv
bEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgp
KTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAg
ICAgICBtX3N5bWJvbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxzZSBpZiAoa2V5
LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUu
ZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXll
ZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlv
biA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5k
KEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV92YWx1
ZUtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxv
Y2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShp
dGVyKTsKLSAgICB9Ci0gICAgbV9lbnRyaWVzW2xvY2F0aW9uXS5rZXkuY2xlYXIoKTsKLSAgICBt
X2VudHJpZXNbbG9jYXRpb25dLnZhbHVlLmNsZWFyKCk7Ci0gICAgbV9kZWxldGVkQ291bnQrKzsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0JhY2tp
bmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17Ci0gICAg
QVNTRVJUKHNob3VsZFBhY2soKSk7Ci0gICAgaW50MzJfdCBuZXdFbmQgPSAwOwotICAgIFJFTEVB
U0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwg
bV9zaXplOyBpKyspIHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOwotICAg
ICAgICBpZiAoIWVudHJ5LmtleSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NF
UlQobmV3RW5kIDwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0g
ZW50cnk7Ci0KLSAgICAgICAgLy8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZv
cndhcmRpbmcgaW5kZXggZm9yIHRoZSBuZXcgZW50cnksCi0gICAgICAgIC8vIHNvIHRoYXQgd2Ug
Y2FuIGZpeCB1cCBvdXIgaGFzaCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFs
Ci0gICAgICAgIC8vIGhhc2ggbG9va3VwcwotICAgICAgICBlbnRyeS52YWx1ZS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGpzTnVtYmVyKG5ld0VuZCkpOwotICAgICAgICBuZXdFbmQrKzsKLSAgICB9
Ci0KLSAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCi0gICAgZm9yIChhdXRvIHB0ciA9IG1f
dmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsg
KytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0udmFsdWUu
Z2V0KCkuYXNJbnQzMigpOwotICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRy
LT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0g
ICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9z
dHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50
cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0
ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxl
LmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVl
XS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0KLSAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkg
PT0gbV9kZWxldGVkQ291bnQpOwotICAgIG1fZGVsZXRlZENvdW50ID0gMDsKLQotICAgIG1fY2Fw
YWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVz
ID0gZGVzdGluYXRpb247Ci0KLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQmFja2luZ1N0b3Jl
KEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQo
IXNob3VsZFBhY2soKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKLSAg
ICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0
aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwotICAgIG1fY2FwYWNpdHkg
PSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKLX0KLQotQ2hlY2tl
ZEJvb2xlYW4gTWFwRGF0YTo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCi17Ci0gICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6bWF4KG1fY2FwYWNpdHkgKyAobV9j
YXBhY2l0eSAvIDIpICsgMSwgbWluaW11bU1hcFNpemUpOwotICAgIHZvaWQqIG5ld1N0b3JhZ2Ug
PSAwOwotICAgIERlZmVyR0MgZGVmZXIoKmNhbGxGcmFtZS0+aGVhcCgpKTsKLSAgICBpZiAoIWNh
bGxGcmFtZS0+aGVhcCgpLT50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgcmVxdWlyZWRTaXplICog
c2l6ZW9mKEVudHJ5KSwgJm5ld1N0b3JhZ2UpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihjYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEVudHJ5
KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKLSAgICBpZiAo
c2hvdWxkUGFjaygpKQotICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCByZXF1aXJlZFNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9y
ZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGNhbGxGcmFtZS0+aGVhcCgpLT53cml0
ZUJhcnJpZXIodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgTWFwRGF0YSogdGhpc09iamVj
dCA9IGpzQ2FzdDxNYXBEYXRhKj4oY2VsbCk7Ci0gICAgRW50cnkqIGVudHJpZXMgPSB0aGlzT2Jq
ZWN0LT5tX2VudHJpZXM7Ci0gICAgaWYgKCFlbnRyaWVzKQotICAgICAgICByZXR1cm47Ci0gICAg
c2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5tX3NpemU7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1f
ZGVsZXRlZENvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoIWVudHJpZXNbaV0ua2V5KQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJpZXNbaV0ua2V5KTsKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyaWVzW2ldLnZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5rZXks
IHNpemUgKiAoc2l6ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7
Ci0KLSAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5
VG9rZW4sIGVudHJpZXMsIHRoaXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLX0KLQotdm9p
ZCBNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZp
c2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0ganND
YXN0PE1hcERhdGEqPihjZWxsKTsKLSAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29w
eVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV9lbnRyaWVz
KSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50cmllczsK
LSAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3Iu
YWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSkpOwotICAgICAg
ICBpZiAodGhpc09iamVjdC0+c2hvdWxkUGFjaygpKQotICAgICAgICAgICAgdGhpc09iamVjdC0+
cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBh
Y2l0eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlcGxhY2VCYWNr
aW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAgICAgIHZp
c2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCB0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSk7
Ci0gICAgfQotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4p
OwotfQotCi12b2lkIE1hcERhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRp
Y19jYXN0PE1hcERhdGEqPihjZWxsKS0+fk1hcERhdGEoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCmluZGV4IGIxZDUzMDYyOTZlNTA0NmJkNDA3M2VlOTk5
MThlYTZmZTRmYjE5NDUuLmQzNDY2MzRhNTA3NGY0NDgzOWE2MGFiMzhkYzIyYTE3YTRkMmQwMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKQEAgLTI3LDI1ICsyNywy
OSBAQAogI2RlZmluZSBNYXBEYXRhX2gKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgRXhlY1N0YXRl
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2NsYXNzIE1hcERhdGFJbXBsIHsKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIGVudW0gOiBpbnQzMl90IHsKKyAgICAg
ICAgbWluaW11bU1hcFNpemUgPSA4CisgICAgfTsKIAogICAgIHN0cnVjdCBjb25zdF9pdGVyYXRv
ciB7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgY29u
c3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0X2l0ZXJhdG9y
KCk7CiAgICAgICAgIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IG9w
ZXJhdG9yKigpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgUkVMRUFTRV9B
U1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0ua2V5
LmdldCgpOyB9Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJU
KCFhdEVuZCgpKTsgcmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlLmdl
dCgpOyB9CisgICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRF
bmQoKSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkoKS5nZXQoKTsg
fQorICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQo
KSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgpLmdldCgpOyB9
CiAgICAgICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsgaW50ZXJuYWxJ
bmNyZW1lbnQoKTsgfQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1h
cERhdGEqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRh
SW1wbCopOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhl
cik7CiAgICAgICAgIHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCk7IH0KQEAgLTYwLDcgKzY0LDcgQEAgY2xhc3MgTWFwRGF0YSA6IHB1
YmxpYyBKU0NlbGwgewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0RW5kKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVybmFsSW5jcmVt
ZW50KCk7Ci0gICAgICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAgICAgY29uc3Qg
TWFwRGF0YUltcGwqIG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4OwogICAgIH07
CiAKQEAgLTcwLDQ1ICs3NCwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBEYXRhKiBjcmVh
dGUoVk0mIHZtKQotICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsKLSAgICAgICAg
bWFwRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFwRGF0YTsKLSAg
ICB9CisgICAgTWFwRGF0YUltcGwoKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRy
dWU7Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUqLCBLZXlUeXBl
LCBKU1ZhbHVlKTsKLSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBi
b29sIHJlbW92ZShDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKENhbGxG
cmFtZSosIEtleVR5cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZSAtIG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CisgICAg
SlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1vdmUoRXhlY1N0
YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBLZXlUeXBlKTsK
KyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2Rl
bGV0ZWRDb3VudDsgfQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZvaWQgY2xlYXIo
KTsKIAotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cisg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogcHJpdmF0
ZToKICAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJf
dD4gSW5kZXhUcmFpdHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVu
dHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMg
YmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZh
bHVlOwotICAgIH07Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJfdCwgdHlw
ZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJhaXRzPEpT
Q2VsbCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1
ZUhhc2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxTdHJp
bmdJbXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4VHJhaXRz
PiBTdHJpbmdLZXllZE1hcDsKQEAgLTExNiwxOCArMTAwLDEyIEBAIGNsYXNzIE1hcERhdGEgOiBw
dWJsaWMgSlNDZWxsIHsKIAogICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMoKSB7IHJldHVybiBt
X2NhcGFjaXR5ICogc2l6ZW9mKEVudHJ5KTsgfQogCi0gICAgTWFwRGF0YShWTSYpOwotICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3Rv
cmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwotCi0KLSAgICBBTFdBWVNfSU5M
SU5FIEVudHJ5KiBmaW5kKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIEFMV0FZU19JTkxJTkUg
RW50cnkqIGFkZChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TWFwLCB0eXBlbmFtZSBLZXk+IEFMV0FZU19JTkxJTkUgRW50cnkqIGFkZChDYWxsRnJhbWUqLCBN
YXAmLCBLZXksIEtleVR5cGUpOworICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQoRXhlY1N0
YXRlKiwgS2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSos
IEpTQ2VsbCogb3duZXIsIEtleVR5cGUpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5
cGVuYW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCog
b3duZXIsIE1hcCYsIEtleSwgS2V5VHlwZSk7CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hv
dWxkUGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50ICYmICFtX2l0ZXJhdG9yQ291
bnQ7IH0KLSAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChDYWxsRnJhbWUq
KTsKKyAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqLCBK
U0NlbGwqIG93bmVyKTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXBsYWNlQW5kUGFja0Jh
Y2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBp
bnQzMl90IG5ld1NpemUpOwpAQCAtMTQzLDcgKzEyMSwxOCBAQCBjbGFzcyBNYXBEYXRhIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgRW50cnkqIG1fZW50cmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBNYXBEYXRhOjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19J
TkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCgpCisgICAgOiBtX2NhcGFjaXR5
KDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCisgICAgLCBtX2l0
ZXJhdG9yQ291bnQoMCkKKyAgICAsIG1fZW50cmllcyhudWxscHRyKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46
OmNsZWFyKCkKIHsKICAgICBtX2NlbGxLZXllZFRhYmxlLmNsZWFyKCk7CiAgICAgbV92YWx1ZUtl
eWVkVGFibGUuY2xlYXIoKTsKQEAgLTE1NSw3ICsxNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
TWFwRGF0YTo6Y2xlYXIoKQogICAgIG1fZW50cmllcyA9IG51bGxwdHI7CiB9CiAKLUFMV0FZU19J
TkxJTkUgTWFwRGF0YTo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpLZXlUeXBlOjpL
ZXlUeXBlKEpTVmFsdWUgdikKIHsKICAgICBpZiAoIXYuaXNEb3VibGUoKSkgewogICAgICAgICB2
YWx1ZSA9IHY7CkBAIC0xNzQsNTUgKzE2NCw2MiBAQCBBTFdBWVNfSU5MSU5FIE1hcERhdGE6Oktl
eVR5cGU6OktleVR5cGUoSlNWYWx1ZSB2KQogICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFs
SW5jcmVtZW50KCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lk
IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KCkK
IHsKICAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzOwogICAgIHNpemVf
dCBpbmRleCA9IG1faW5kZXggKyAxOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6
ZTsKLSAgICB3aGlsZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSkKKyAgICB3
aGlsZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSgpKQogICAgICAgICBpbmRl
eCsrOwogICAgIG1faW5kZXggPSBpbmRleDsKIH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCgpCisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVudHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRl
cmF0b3I6OmVuc3VyZVNsb3QoKQogewogICAgIC8vIFdoZW4gYW4gaXRlcmF0b3IgZXhpc3RzIG91
dHNpZGUgb2YgaG9zdCBjb3N0IGl0IGlzIHBvc3NpYmxlIGZvcgogICAgIC8vIHRoZSBjb250YWlu
aW5nIG1hcCB0byBiZSBtb2RpZmllZAogICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5t
X2VudHJpZXM7CiAgICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleDsKICAgICBzaXplX3QgZW5kID0g
bV9tYXBEYXRhLT5tX3NpemU7Ci0gICAgaWYgKGluZGV4IDwgZW5kICYmIGVudHJpZXNbaW5kZXhd
LmtleSkKKyAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqIG1hcERh
dGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8
RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGw8
RW50cnk+KiBtYXBEYXRhKQogICAgIDogbV9tYXBEYXRhKG1hcERhdGEpCiAgICAgLCBtX2luZGV4
KC0xKQogewogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRv
cjo6fmNvbnN0X2l0ZXJhdG9yKCkKIHsKICAgICBtX21hcERhdGEtPm1faXRlcmF0b3JDb3VudC0t
OwogfQogCi1BTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpT
VmFsdWU+IE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWly
PEpTVmFsdWUsIEpTVmFsdWU+IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yKigpIGNvbnN0CiB7CiAgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRy
aWVzW21faW5kZXhdOwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1Zh
bHVlPihlbnRyeS0+a2V5LmdldCgpLCBlbnRyeS0+dmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBX
VEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVu
dHJ5LT52YWx1ZSgpLmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25zdF9p
dGVyYXRvciBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5kKGNvbnN0IE1hcERhdGEqIG1hcERh
dGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYXV0byBNYXBEYXRh
SW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YUltcGw8RW50cnk+
KiBtYXBEYXRhKSAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3Vs
dChtYXBEYXRhKTsKICAgICByZXN1bHQubV9pbmRleCA9IC0xOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0
b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eT4KK0FMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9y
OjpvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICBBU1NFUlQo
b3RoZXIubV9tYXBEYXRhID09IG1fbWFwRGF0YSk7CiAgICAgaWYgKGF0RW5kKCkgJiYgb3RoZXIu
YXRFbmQoKSkKQEAgLTIzMCw3ICsyMjcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6
Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aAogICAg
IHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXg7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9v
bCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRv
ciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICByZXR1cm4gISgqdGhpcyAhPSBvdGhlcik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mYjJjNTNhMmI3NTZkMDhhODlmMWVkYWRjNWE4NmE0Yjc1YWE3N2U3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApA
QCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvcGllZEFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
Ik1hcERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworI2luY2x1ZGUg
PHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgoraW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQoRXhlY1N0YXRlKiBleGVj
LCBLZXlUeXBlIGtleSkKK3sKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAg
ICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVl
KS0+dmFsdWUoZXhlYykuaW1wbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXll
ZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9l
bnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICB9CisgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgp
KSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9s
KGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBt
X3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVl
LmlzQ2VsbCgpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChr
ZXkudmFsdWUuYXNDZWxsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxl
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVz
W2l0ZXItPnZhbHVlXTsKKyAgICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJs
ZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKKyAgICBpZiAoaXRlciA9PSBtX3Zh
bHVlS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZtX2Vu
dHJpZXNbaXRlci0+dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGlu
ZSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29udGFpbnMoRXhlY1N0YXRlKiBleGVjLCBLZXlU
eXBlIGtleSkKK3sKKyAgICByZXR1cm4gZmluZChleGVjLCBrZXkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4KK2lu
bGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnk+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIG93bmVyLCBNYXAmIG1hcCwgS2V5IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKK3sKKyAgICB0
eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAo
bG9jYXRpb24gIT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlv
bi0+dmFsdWVdOworCisgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25lcikp
CisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9z
aXplKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRW50cnkq
IGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgbmV3IChlbnRyeSkgRW50cnkoKTsK
KyAgICBlbnRyeS0+c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1ZS52YWx1ZSk7Cisg
ICAgcmV0dXJuIGVudHJ5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2
b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25l
ciwgS2V5VHlwZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgRW50cnkqIGxvY2F0aW9uID0g
YWRkKGV4ZWMsIG93bmVyLCBrZXkpOworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICBsb2NhdGlvbi0+c2V0VmFsdWUoZXhlYy0+dm0oKSwgb3duZXIsIHZhbHVlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVu
dHJ5Pjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgS2V5VHlwZSBrZXkpCit7
CisgICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMs
IG93bmVyLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4
ZWMpLmltcGwoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCisgICAgICAg
IHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1ib2woa2V5
LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX2NlbGxLZXllZFRhYmxl
LCBrZXkudmFsdWUuYXNDZWxsKCksIGtleSk7CisgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwg
bV92YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBKU1ZhbHVlIE1hcERhdGFJbXBsPEVu
dHJ5Pjo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKEVudHJ5
KiBlbnRyeSA9IGZpbmQoZXhlYywga2V5KSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT52YWx1ZSgp
LmdldCgpOworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5PgoraW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUoRXhlY1N0YXRlKiBl
eGVjLCBLZXlUeXBlIGtleSkKK3sKKyAgICBpbnQzMl90IGxvY2F0aW9uOworICAgIGlmIChrZXku
dmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFi
bGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOworICAgICAg
ICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAgICAgIG1fc3Ry
aW5nS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSAgZWxzZSBpZiAoa2V5LnZhbHVlLmlz
U3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQo
YXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChp
dGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zeW1ib2xLZXll
ZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVsc2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkg
eworICAgICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFz
Q2VsbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsK
KyAgICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUo
a2V5LnZhbHVlKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZh
bHVlOworICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfQorICAg
IG1fZW50cmllc1tsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2RlbGV0ZWRDb3VudCsrOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lk
IE1hcERhdGFJbXBsPEVudHJ5Pjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRl
c3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVChzaG91bGRQYWNr
KCkpOworICAgIGludDMyX3QgbmV3RW5kID0gMDsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBh
Y2l0eSA+IDApOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Cisg
ICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAgaWYgKCFlbnRyeS5r
ZXkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQobmV3RW5kIDwgbmV3
Q2FwYWNpdHkpOworICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7CisKKyAgICAg
ICAgLy8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5kZXgg
Zm9yIHRoZSBuZXcgZW50cnksCisgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBvdXIg
aGFzaCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFsCisgICAgICAgIC8vIGhh
c2ggbG9va3VwcworICAgICAgICBlbnRyeS5zZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVt
YmVyKG5ld0VuZCkpOworICAgICAgICBuZXdFbmQrKzsKKyAgICB9CisKKyAgICAvLyBGaXh1cCBm
b3IgdGhlIGhhc2htYXBzCisgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0
ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwor
ICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2Nl
bGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmll
c1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVu
ZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5r
ZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRU
YWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAg
ICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0lu
dDMyKCk7CisKKyAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQp
OworICAgIG1fZGVsZXRlZENvdW50ID0gMDsKKworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKKyAgICBtX3NpemUgPSBuZXdFbmQ7CisgICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50
cnk+OjpyZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdD
YXBhY2l0eSkKK3sKKyAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQobmV3Q2FwYWNpdHkgPiAwKTsKKyAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0
eSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBt
X3NpemUpOworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX2VudHJpZXMgPSBk
ZXN0aW5hdGlvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIpCit7CisgICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6
bWF4KG1fY2FwYWNpdHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4obWluaW11bU1hcFNpemUpKTsKKyAgICB2b2lkKiBuZXdTdG9yYWdlID0gbnVsbHB0cjsKKyAg
ICBEZWZlckdDIGRlZmVyKCpleGVjLT5oZWFwKCkpOworICAgIGlmICghZXhlYy0+aGVhcCgpLT50
cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZu
ZXdTdG9yYWdlKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNf
Y2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOworICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAgICAg
IHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7Cisg
ICAgZWxzZQorICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVk
U2l6ZSk7CisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERh
dGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBpZiAoIWVu
dHJpZXMpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKKyAgICAg
ICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlm
ICghZW50cmllc1tpXS5rZXkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGVudHJpZXNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEd1YXJhbnRlZWQgdGhhdCBhbGwgZmllbGRzIG9mIEVudHJ5IHR5
cGUgaXMgV3JpdGVCYXJyaWVyPFVua25vd24+LgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwg
bV9zaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
OworICAgIH0KKworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvcHlCYWNraW5n
U3RvcmUoQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBpZiAo
dG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3Vs
ZENvcHkobV9lbnRyaWVzKSkgeworICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmll
czsKKyAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMoKSkpOworICAgICAgICBpZiAoc2hv
dWxkUGFjaygpKQorICAgICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50
cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxhY2VCYWNr
aW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29w
eShvbGRFbnRyaWVzLCBjYXBhY2l0eUluQnl0ZXMoKSk7CisgICAgfQorfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAppbmRleCA1NDgyMjI3
Njk0MDBiNzE4NTJhZjdkYjhiNzVlZjUwNzU0NGVkZDRmLi5lNjVhYmQwOGQ5MDA0MzAzMzNjZjM5
MDI0OWJkZGJiNTE3ODEyYWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcFByb3RvdHlwZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9u
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5o
IgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Niw3ICs3
Niw3IEBAIHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+c2l6ZSwgYWNjZXNzb3IsIERvbnRFbnVtIHwgQWNjZXNzb3IpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBNYXBEYXRhKiBnZXRNYXBEYXRhKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK0FMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFw
KiBnZXRNYXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewogICAg
IGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxG
cmFtZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwpAQCAt
ODcsMzAgKzg3LDMwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlCiAgICAgICAgIHRocm93VHlw
ZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBu
b24tTWFwIG9iamVjdCIpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBt
YXAtPm1hcERhdGEoKTsKKyAgICByZXR1cm4gbWFwOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAg
IE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBkYXRhLT5jbGVhcigpOworICAg
IG1hcC0+Y2xlYXIoY2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0
TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0
YSkKKyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZGF0YS0+
cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFw
UHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBk
YXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAg
IGlmICghZGF0YSkKKyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBjYWxsQmFjayA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xMjIsMTQgKzEyMiwxNCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0ZvckVhY2goQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKICAgICAg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxCYWNrKTsK
ICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGNhbGxGcmFtZSwgZnVuY3Rpb24sIDIpOwot
ICAgICAgICBmb3IgKGF1dG8gcHRyID0gZGF0YS0+YmVnaW4oKSwgZW5kID0gZGF0YS0+ZW5kKCk7
IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRpb24oKTsgKytwdHIpIHsKKyAgICAgICAgZm9yIChh
dXRvIHB0ciA9IG1hcC0+YmVnaW4oKSwgZW5kID0gbWFwLT5lbmQoKTsgcHRyICE9IGVuZCAmJiAh
dm0tPmV4Y2VwdGlvbigpOyArK3B0cikgewogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlz
KHRoaXNWYWx1ZSk7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHB0ci52
YWx1ZSgpKTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgcHRyLmtleSgp
KTsKICAgICAgICAgICAgIGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yIChhdXRvIHB0ciA9IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVu
ZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZv
ciAoYXV0byBwdHIgPSBtYXAtPmJlZ2luKCksIGVuZCA9IG1hcC0+ZW5kKCk7IHB0ciAhPSBlbmQg
JiYgIXZtLT5leGNlcHRpb24oKTsgKytwdHIpIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3M7CiAgICAgICAgICAgICBhcmdzLmFwcGVuZChwdHIudmFsdWUoKSk7CiAgICAg
ICAgICAgICBhcmdzLmFwcGVuZChwdHIua2V5KCkpOwpAQCAtMTQxLDM4ICsxNDEsMzYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dl
dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0
YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAg
ICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBkYXRhLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmVzdWx0ID0ganNV
bmRlZmluZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShtYXAtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1l
bnQoMCkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNI
YXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERh
dGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisg
ICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRh
aW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9G
dW5jU2V0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRN
YXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRh
KQorICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKyAgICBK
U01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKTsKKyAgICBpZiAoIW1hcCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBkYXRh
LT5zZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDEpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIG1hcC0+c2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFs
dWUpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAg
SlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZGF0YS0+c2l6ZShjYWxs
RnJhbWUpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihtYXAtPnNpemUo
Y2FsbEZyYW1lKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY1ZhbHVlcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCmluZGV4IGY4OGVhN2NmOTg2OGY2NjhiOGMyZTg4
ODE1ZmY2NWNmMzk5MjdiNDkuLjZhNmM0OWI0OGUwYzZhOTBjOTMwNzY5OWQ4Y2Q3OWI0Yzk1ZDJj
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlw
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNw
cApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFw
RGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc1LDUwICs3NSw1MSBAQCB2b2lkIFNl
dFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnNpemUsIGFjY2Vzc29yLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAotQUxXQVlTX0lO
TElORSBzdGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNW
YWx1ZSB0aGlzVmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1NldCogZ2V0U2V0KENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRoaXNWYWx1
ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZU5v
dEFuT2JqZWN0RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBKU1NldCogc2V0ID0ganNEeW5h
bWljQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFzZXQpIHsKICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVk
IG9uIG5vbi1TZXQgb2JqZWN0IikpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBzZXQtPm1hcERhdGEoKTsKKyAgICByZXR1cm4g
c2V0OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CisgICAgSlNTZXQqIHNl
dCA9IGdldFNldChjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZGF0YS0+c2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAg
ICBzZXQtPmFkZChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzZXRQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBN
YXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZGF0YS0+Y2xlYXIoKTsKKyAgICBz
ZXQtPmNsZWFyKGNhbGxGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNE
ZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1h
cERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEp
CisgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJl
bW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc2V0LT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFBy
b3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0
YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBp
ZiAoIWRhdGEpCisgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMTMwLDEzICsxMzEsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7CiAgICAgICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsQmFjayk7CiAg
ICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCAxKTsKLSAg
ICAgICAgZm9yIChhdXRvIHB0ciA9IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBw
dHIgIT0gZW5kICYmICF2bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0
byBwdHIgPSBzZXQtPmJlZ2luKCksIGVuZCA9IHNldC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZt
LT5leGNlcHRpb24oKTsgKytwdHIpIHsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyh0
aGlzVmFsdWUpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBwdHIua2V5
KCkpOwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5jYWxsKCk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKGF1dG8gcHRyID0gZGF0YS0+YmVnaW4oKSwgZW5kID0gZGF0YS0+
ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRpb24oKTsgKytwdHIpIHsKKyAgICAgICAg
Zm9yIChhdXRvIHB0ciA9IHNldC0+YmVnaW4oKSwgZW5kID0gc2V0LT5lbmQoKTsgcHRyICE9IGVu
ZCAmJiAhdm0tPmV4Y2VwdGlvbigpOyArK3B0cikgewogICAgICAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHB0ci5rZXkoKSk7CiAgICAg
ICAgICAgICBKU0M6OmNhbGwoY2FsbEZyYW1lLCBjYWxsQmFjaywgY2FsbFR5cGUsIGNhbGxEYXRh
LCB0aGlzVmFsdWUsIGFyZ3MpOwpAQCAtMTQ3LDE4ICsxNDgsMTggQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1NldCogc2V0
ID0gZ2V0U2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFz
ZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZGF0YS0+Y29udGFpbnMoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHNldC0+aGFzKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTU2V0
KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIXNldCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGRhdGEtPnNpemUoY2FsbEZyYW1l
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc2V0LT5zaXplKGNhbGxG
cmFtZSkpKTsKIH0KICAgICAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9G
dW5jVmFsdWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCmluZGV4IGE3MzI0YjRhZGYxZGU4NzdiNzQ2MDY4ZGE1NDEzZGFiZjUzYjU1NGMuLmU4
ZmMwZTMyMGI1Y2EzYWUxMzNiYThmNDZhYTU4ZWM1OWM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKQEAgLTIzMyw3ICsyMzMsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJl
LnNldCgqdGhpcywgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5z
ZXQoKnRoaXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywg
UHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAg
IG1hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBX
ZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVO
QUJMRShQUk9NSVNFUykKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggOTRjNDgzYjcyMzYwMjI4M2VkNDBkYTU1
ZGVkMjk1NTNhMDMxNzgyNS4uN2U3MWRlZjljN2E1MGY5N2ZjZTZhMWI5OTdiNjA3YzZhYWZiOWM0
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0yNjgsNyArMjY4LDYgQEAgY2xh
c3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+IHsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG1h
cERhdGFTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1
cmU7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VE
ZWZlcnJlZFN0cnVjdHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2FjYTYyZDQz
OTJkMjViNjY0MjI2Mzg3OTBkYzc0NzJmMjBkMWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCkBAIC0w
LDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9NYXBEYXRhSW5saWluZXNfaAorI2RlZmlu
ZSBXZWJDb3JlX0ZXRF9NYXBEYXRhSW5saWluZXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L01hcERhdGFJbmxpbmVzLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDlmOWYyNTljZTY3OTI4NDI0
Nzg5YTNkMzRiZWYzOTJhNTc4OWFjYWUuLjcxY2M1MjZkMGY2MWQzYWI4ZjQxZDczM2I1MGUyYTRk
Y2VjYWRkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNTZXQuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxy
dW50aW1lL01hcERhdGEuaD4KKyNpbmNsdWRlIDxydW50aW1lL01hcERhdGFJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
UHJvcGVydHlOYW1lQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cC5oPgpAQCAtODcs
NyArODgsOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUZpbHRlclJlY3Vyc2lvbiA9
IDQwMDAwOwogCiBlbnVtIFdhbGtlclN0YXRlIHsgU3RhdGVVbmtub3duLCBBcnJheVN0YXJ0U3Rh
dGUsIEFycmF5U3RhcnRWaXNpdE1lbWJlciwgQXJyYXlFbmRWaXNpdE1lbWJlciwKICAgICBPYmpl
Y3RTdGFydFN0YXRlLCBPYmplY3RTdGFydFZpc2l0TWVtYmVyLCBPYmplY3RFbmRWaXNpdE1lbWJl
ciwKLSAgICBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5LCBNYXBEYXRhRW5kVmlzaXRLZXksIE1hcERh
dGFFbmRWaXNpdFZhbHVlIH07CisgICAgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeSwgTWFwRGF0YUVu
ZFZpc2l0S2V5LCBNYXBEYXRhRW5kVmlzaXRWYWx1ZSwKKyAgICBTZXREYXRhU3RhcnRWaXNpdEVu
dHJ5LCBTZXREYXRhRW5kVmlzaXRLZXkgfTsKIAogLy8gVGhlc2UgY2FuJ3QgYmUgcmVvcmRlcmVk
LCBhbmQgYW55IG5ldyB0eXBlcyBtdXN0IGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QK
IGVudW0gU2VyaWFsaXphdGlvblRhZyB7CkBAIC0xMjIsOCArMTI0LDkgQEAgZW51bSBTZXJpYWxp
emF0aW9uVGFnIHsKICAgICBTZXRPYmplY3RUYWcgPSAyOSwKICAgICBNYXBPYmplY3RUYWcgPSAz
MCwKICAgICBOb25NYXBQcm9wZXJ0aWVzVGFnID0gMzEsCisgICAgTm9uU2V0UHJvcGVydGllc1Rh
ZyA9IDMyLAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQotICAgIENyeXB0b0tleVRhZyA9IDMy
LAorICAgIENyeXB0b0tleVRhZyA9IDMzLAogI2VuZGlmCiAgICAgRXJyb3JUYWcgPSAyNTUKIH07
CkBAIC0yNjYsOSArMjY5LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBOb25JbmRleFByb3Bl
cnRpZXNUYWcgPSAweEZGRkZGRkZEOwogICoKICAqIE1hcCA6LSBNYXBPYmplY3RUYWcgTWFwRGF0
YQogICoKLSAqIFNldCA6LSBTZXRPYmplY3RUYWcgTWFwRGF0YQorICogU2V0IDotIFNldE9iamVj
dFRhZyBTZXREYXRhCiAgKgotICogTWFwRGF0YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+
KSBOb25NYXBQcm9wZXJ0aWVzVGFnICg8bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBU
ZXJtaW5hdG9yVGFnCisgKiBNYXBEYXRhIDotICg8a2V5OlZhbHVlPjx2YWx1ZTpWYWx1ZT4pKiBO
b25NYXBQcm9wZXJ0aWVzVGFnICg8bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJt
aW5hdG9yVGFnCisgKiBTZXREYXRhIDotICg8a2V5OlZhbHVlPikqIE5vblNldFByb3BlcnRpZXNU
YWcgKDxuYW1lOlN0cmluZ0RhdGE+PHZhbHVlOlZhbHVlPikqIFRlcm1pbmF0b3JUYWcKICAqCiAg
KiBUZXJtaW5hbCA6LQogICogICAgICBVbmRlZmluZWRUYWcKQEAgLTEyMTYsOSArMTIyMCwxMSBA
QCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1Zh
bHVlIGluKQogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTY+IGxlbmd0aFN0YWNrOwogICAgIFZlY3Rv
cjxQcm9wZXJ0eU5hbWVBcnJheSwgMTY+IHByb3BlcnR5U3RhY2s7CiAgICAgVmVjdG9yPEpTT2Jq
ZWN0KiwgMzI+IGlucHV0T2JqZWN0U3RhY2s7Ci0gICAgVmVjdG9yPE1hcERhdGEqLCA0PiBtYXBE
YXRhU3RhY2s7Ci0gICAgVmVjdG9yPE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yLCA0PiBpdGVyYXRv
clN0YWNrOwotICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBpdGVyYXRvclZhbHVlU3RhY2s7CisgICAg
VmVjdG9yPEpTTWFwKiwgND4gbWFwU3RhY2s7CisgICAgVmVjdG9yPEpTTWFwOjpjb25zdF9pdGVy
YXRvciwgND4gbWFwSXRlcmF0b3JTdGFjazsKKyAgICBWZWN0b3I8SlNTZXQqLCA0PiBzZXRTdGFj
azsKKyAgICBWZWN0b3I8SlNTZXQ6OmNvbnN0X2l0ZXJhdG9yLCA0PiBzZXRJdGVyYXRvclN0YWNr
OworICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBtYXBJdGVyYXRvclZhbHVlU3RhY2s7CiAgICAgVmVj
dG9yPFdhbGtlclN0YXRlLCAxNj4gc3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0ZSBzdGF0ZSA9
IFN0YXRlVW5rbm93bjsKICAgICBKU1ZhbHVlIGluVmFsdWUgPSBpbjsKQEAgLTEzNTAsMzYgKzEz
NTYsMjEgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxp
emUoSlNWYWx1ZSBpbikKICAgICAgICAgICAgICAgICBKU01hcCogaW5NYXAgPSBqc0Nhc3Q8SlNN
YXAqPihpblZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0TWFwKGluTWFwKSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0
YSA9IGluTWFwLT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQo
bWFwRGF0YSk7Ci0gICAgICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsK
LSAgICAgICAgICAgICAgICBpdGVyYXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5iZWdpbigpKTsK
KyAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChpbk1hcCk7CisgICAgICAgICAgICAg
ICAgbWFwU3RhY2suYXBwZW5kKGluTWFwKTsKKyAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0
YWNrLmFwcGVuZChpbk1hcC0+YmVnaW4oKSk7CiAgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RT
dGFjay5hcHBlbmQoaW5NYXApOwogICAgICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0Vmlz
aXRFbnRyeTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFN0YXJ0U3RhdGU6IHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoaW5wdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tPdmVyZmxvd0Vycm9yOwotICAgICAgICAg
ICAgICAgIEpTU2V0KiBpblNldCA9IGpzQ2FzdDxKU1NldCo+KGluVmFsdWUpOwotICAgICAgICAg
ICAgICAgIGlmICghc3RhcnRTZXQoaW5TZXQpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0gaW5TZXQtPm1hcERhdGEoKTsKLSAg
ICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAg
ICBtYXBEYXRhU3RhY2suYXBwZW5kKG1hcERhdGEpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9y
U3RhY2suYXBwZW5kKG1hcERhdGEtPmJlZ2luKCkpOwotICAgICAgICAgICAgICAgIGlucHV0T2Jq
ZWN0U3RhY2suYXBwZW5kKGluU2V0KTsKLSAgICAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFy
dFZpc2l0RW50cnk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBtYXBEYXRhU3RhcnRWaXNp
dEVudHJ5OgogICAgICAgICAgICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7Ci0gICAg
ICAgICAgICAgICAgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3ImIHB0ciA9IGl0ZXJhdG9yU3RhY2su
bGFzdCgpOwotICAgICAgICAgICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBtYXBEYXRhU3RhY2su
bGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChwdHIgPT0gbWFwRGF0YS0+ZW5kKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1hcERhdGFTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgSlNN
YXA6OmNvbnN0X2l0ZXJhdG9yJiBwdHIgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICBKU01hcCogbWFwID0gbWFwU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAg
IGlmIChwdHIgPT0gbWFwLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRv
clN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmpl
Y3RTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0
PEpTU2V0Kj4ob2JqZWN0KSB8fCBqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5
KG1fZXhlYykpOwogICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBF
eGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9u
TWFwUHJvcGVydGllc1RhZyk7CkBAIC0xMzg4LDIyICsxMzc5LDYwIEBAIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGluVmFsdWUgPSBwdHIua2V5KCk7CiAgICAgICAg
ICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQocHRyLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IGl0ZXJhdG9yVmFsdWVTdGFjay5hcHBlbmQocHRyLnZhbHVlKCkpOworICAgICAgICAgICAgICAg
IG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5hcHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAg
ICAgIHN0YXRlU3RhY2suYXBwZW5kKE1hcERhdGFFbmRWaXNpdEtleSk7CiAgICAgICAgICAgICAg
ICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1h
cERhdGFFbmRWaXNpdEtleTogewotICAgICAgICAgICAgICAgIGluVmFsdWUgPSBpdGVyYXRvclZh
bHVlU3RhY2subGFzdCgpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IG1hcEl0ZXJhdG9yVmFsdWVTdGFj
ay5sYXN0KCk7CisgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JWYWx1ZVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGl0ZXJhdG9yU3RhY2subGFzdCgpICE9IG1hcERhdGFTdGFjay5sYXN0KCktPmVuZCgp
KQotICAgICAgICAgICAgICAgICAgICArK2l0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAg
ICAgICAgIGlmIChtYXBJdGVyYXRvclN0YWNrLmxhc3QoKSAhPSBtYXBTdGFjay5sYXN0KCktPmVu
ZCgpKQorICAgICAgICAgICAgICAgICAgICArK21hcEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAg
ICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgc2V0U3RhcnRTdGF0ZTogeworICAgICAgICAgICAgICAgIEFTU0VSVChp
blZhbHVlLmlzT2JqZWN0KCkpOworICAgICAgICAgICAgICAgIGlmIChpbnB1dE9iamVjdFN0YWNr
LnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTdGFja092ZXJmbG93RXJyb3I7CisgICAgICAgICAgICAgICAgSlNTZXQqIGluU2V0ID0g
anNDYXN0PEpTU2V0Kj4oaW5WYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydFNldChp
blNldCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1fZ2NC
dWZmZXIuYXBwZW5kKGluU2V0KTsKKyAgICAgICAgICAgICAgICBzZXRTdGFjay5hcHBlbmQoaW5T
ZXQpOworICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3RhY2suYXBwZW5kKGluU2V0LT5iZWdp
bigpKTsKKyAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpblNldCk7Cisg
ICAgICAgICAgICAgICAgZ290byBzZXREYXRhU3RhcnRWaXNpdEVudHJ5OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeToKKyAgICAgICAgICAgIGNhc2Ug
U2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTogeworICAgICAgICAgICAgICAgIEpTU2V0Ojpjb25zdF9p
dGVyYXRvciYgcHRyID0gc2V0SXRlcmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAg
SlNTZXQqIHNldCA9IHNldFN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09
IHNldC0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHNldFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFz
dCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KG9i
amVjdCkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0
eU5hbWVBcnJheShtX2V4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNr
Lmxhc3QoKSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgICAg
IHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOworICAgICAgICAgICAgICAgICAgICBpbmRleFN0
YWNrLmFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0
TWVtYmVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpblZhbHVlID0gcHRy
LmtleSgpOworICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5kKFNldERhdGFFbmRWaXNp
dEtleSk7CisgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlIFNldERhdGFFbmRWaXNpdEtleTogeworICAgICAgICAgICAgICAg
IGlmIChzZXRJdGVyYXRvclN0YWNrLmxhc3QoKSAhPSBzZXRTdGFjay5sYXN0KCktPmVuZCgpKQor
ICAgICAgICAgICAgICAgICAgICArK3NldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAg
ICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgc3RhdGVVbmtub3duOgogICAgICAgICAgICAgY2FzZSBTdGF0ZVVua25vd246IHsK
ICAgICAgICAgICAgICAgICBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSB0ZXJtaW5hbENvZGUgPSBT
dWNjZXNzZnVsbHlDb21wbGV0ZWQ7CkBAIC0yMzYwLDkgKzIzODksMTAgQEAgY2xhc3MgQ2xvbmVE
ZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBj
b25zdW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpCisgICAgdGVtcGxhdGU8U2VyaWFs
aXphdGlvblRhZyBUYWc+CisgICAgYm9vbCBjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJtaW5hdGlv
bklmUG9zc2libGUoKQogICAgIHsKLSAgICAgICAgaWYgKHJlYWRUYWcoKSA9PSBOb25NYXBQcm9w
ZXJ0aWVzVGFnKQorICAgICAgICBpZiAocmVhZFRhZygpID09IFRhZykKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBtX3B0ci0tOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
Mzg0LDggKzI0MTQsOSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6
OmRlc2VyaWFsaXplKCkKICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAg
IFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gcHJvcGVydHlOYW1lU3RhY2s7CiAgICAgVmVjdG9yPEpT
T2JqZWN0KiwgMzI+IG91dHB1dE9iamVjdFN0YWNrOwotICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBr
ZXlTdGFjazsKLSAgICBWZWN0b3I8TWFwRGF0YSosIDQ+IG1hcERhdGFTdGFjazsKKyAgICBWZWN0
b3I8SlNWYWx1ZSwgND4gbWFwS2V5U3RhY2s7CisgICAgVmVjdG9yPEpTTWFwKiwgND4gbWFwU3Rh
Y2s7CisgICAgVmVjdG9yPEpTU2V0KiwgND4gc2V0U3RhY2s7CiAgICAgVmVjdG9yPFdhbGtlclN0
YXRlLCAxNj4gc3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0ZSBzdGF0ZSA9IFN0YXRlVW5rbm93
bjsKICAgICBKU1ZhbHVlIG91dFZhbHVlOwpAQCAtMjQ3OCw0MSArMjUwOSw1MyBAQCBEZXNlcmlh
bGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAg
ICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmpl
Y3QtPm1hcFN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG1hcCk7
CiAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQobWFwKTsKLSAgICAgICAgICAg
IE1hcERhdGEqIG1hcERhdGEgPSBtYXAtPm1hcERhdGEoKTsKLSAgICAgICAgICAgIG1hcERhdGFT
dGFjay5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0
RW50cnk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0ZTogewotICAgICAg
ICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNp
b24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3Rh
Y2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRl
KG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICAgICAg
ICAgIG1fZ2NCdWZmZXIuYXBwZW5kKHNldCk7Ci0gICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFj
ay5hcHBlbmQoc2V0KTsKLSAgICAgICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBzZXQtPm1hcERh
dGEoKTsKLSAgICAgICAgICAgIG1hcERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7CisgICAgICAg
ICAgICBtYXBTdGFjay5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0
VmlzaXRFbnRyeTsKICAgICAgICAgfQogICAgICAgICBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5Ogog
ICAgICAgICBjYXNlIE1hcERhdGFTdGFydFZpc2l0RW50cnk6IHsKLSAgICAgICAgICAgIGlmIChj
b25zdW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAg
bWFwRGF0YVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGlmIChjb25zdW1lQ29sbGVj
dGlvbkRhdGFUZXJtaW5hdGlvbklmUG9zc2libGU8Tm9uTWFwUHJvcGVydGllc1RhZz4oKSkgewor
ICAgICAgICAgICAgICAgIG1hcFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBn
b3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
dGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRLZXkpOwogICAgICAgICAgICAgZ290byBz
dGF0ZVVua25vd247CiAgICAgICAgIH0KLQogICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdEtl
eTogewotICAgICAgICAgICAga2V5U3RhY2suYXBwZW5kKG91dFZhbHVlKTsKKyAgICAgICAgICAg
IG1hcEtleVN0YWNrLmFwcGVuZChvdXRWYWx1ZSk7CiAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFw
cGVuZChNYXBEYXRhRW5kVmlzaXRWYWx1ZSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93
bjsKICAgICAgICAgfQotCiAgICAgICAgIGNhc2UgTWFwRGF0YUVuZFZpc2l0VmFsdWU6IHsKLSAg
ICAgICAgICAgIG1hcERhdGFTdGFjay5sYXN0KCktPnNldChtX2V4ZWMsIGtleVN0YWNrLmxhc3Qo
KSwgb3V0VmFsdWUpOwotICAgICAgICAgICAga2V5U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgbWFwU3RhY2subGFzdCgpLT5zZXQobV9leGVjLCBtYXBLZXlTdGFjay5sYXN0KCksIG91
dFZhbHVlKTsKKyAgICAgICAgICAgIG1hcEtleVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAg
ICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKICAgICAgICAgfQorCisgICAgICAgIHNl
dE9iamVjdFN0YXJ0U3RhdGU6IHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5z
aXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dFcnJvcik7CisgICAgICAgICAg
ICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0
LT5zZXRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChzZXQpOwor
ICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKHNldCk7CisgICAgICAgICAgICBz
ZXRTdGFjay5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRF
bnRyeTsKKyAgICAgICAgfQorICAgICAgICBzZXREYXRhU3RhcnRWaXNpdEVudHJ5OgorICAgICAg
ICBjYXNlIFNldERhdGFTdGFydFZpc2l0RW50cnk6IHsKKyAgICAgICAgICAgIGlmIChjb25zdW1l
Q29sbGVjdGlvbkRhdGFUZXJtaW5hdGlvbklmUG9zc2libGU8Tm9uU2V0UHJvcGVydGllc1RhZz4o
KSkgeworICAgICAgICAgICAgICAgIHNldFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAg
ICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBzdGF0ZVN0YWNrLmFwcGVuZChTZXREYXRhRW5kVmlzaXRLZXkpOworICAgICAgICAgICAg
Z290byBzdGF0ZVVua25vd247CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTZXREYXRhRW5kVmlz
aXRLZXk6IHsKKyAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBzZXRTdGFjay5sYXN0KCk7CisgICAg
ICAgICAgICBzZXQtPnNldChtX2V4ZWMsIG91dFZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gc2V0
RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRlVW5rbm93bjoK
ICAgICAgICAgY2FzZSBTdGF0ZVVua25vd246CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJt
aW5hbCA9IHJlYWRUZXJtaW5hbCgpKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzU0MTZmNGU3OWIwMzFjOTI4YmZjOWY5
YzBlMGMwODAxNWRiNmRkMS4uMjA3ZmIwZTExN2Y4ZTliZDliZDQ3YjBhZmJhYTk1YmNlMTdlMTQ5
MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTAzLTEyICBZdXN1a2UgU3V6dWtpICA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludGVncmF0ZSBNYXBEYXRhIGludG8gSlNN
YXAgYW5kIEpTU2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI1NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0IHN0cnVjdHVyZS1jbG9uZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGJlY29tZXMgYXdh
cmUgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBNYXAgYW5kIFNldC4KKworICAgICAgICAqIGZh
c3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sOgorCiAyMDE1LTAzLTExICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0g
VGVzdCBnYXJkZW5pbmcgYWZ0ZXIgcjE4MTI2MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbAppbmRleCA0MzVkMDdmYmJhZjY3
MDA5OGI5MmRjODViYzFlNjViZGJiZDg5YjAzLi5jYmM1MjRiYTZkZmU0OWQ4YTRiZjA5NTQxODVj
YmRkZTRlNTJjYjc4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFs
aXplZC1zY3JpcHQtdmFsdWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2Vy
aWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbApAQCAtNDE1LDE2ICs0MTUsMTQgQEAKIAogdGVzdFNl
cmlhbGl6YXRpb24oc2V0T2JqZWN0LAogWwotICAgIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MWQsIDB4MDcsIDB4MDcsIDB4MGEsIDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4ZjgsIDB4M2YsIDB4MGEsIDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MTMsIDB4MDAsIAotICAgIDB4MTMsIDB4MDAsIDB4MTAs
IDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIAotICAgIDB4NjEsIDB4MDAsIDB4
NzIsIDB4MDAsIDB4MTAsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4MDAsIDB4MWEs
IDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTMsIDB4MDEsIAotICAgIDB4MWYsIDB4
MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzgsIDB4MDAsIAotICAgIDB4NzAs
IDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIAotICAgIDB4
MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIAotICAg
IDB4ZmYKKyAgICAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDA3LCAweDBhLCAweDAw
LCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MTMsIDB4
MDAsIDB4MTAsCisgICAgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg2MSwg
MHgwMCwgMHg3MiwKKyAgICAweDAwLCAweDFhLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweDAw
LCAweDIwLCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzgsIDB4
MDAsIDB4NzAsIDB4MDAsCisgICAgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NCwgMHgwMCwg
MHg2ZiwgMHgwMCwgMHgwMiwKKyAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm
LCAweGZmLCAweGZmCisKIF0pOwogCiB0ZXN0U2VyaWFsaXphdGlvbihmdW5jdGlvbigpe30sIFtd
LCBudWxsLCBET01FeGNlcHRpb24uREFUQV9DTE9ORV9FUlIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248533</attachid>
            <date>2015-03-12 12:49:23 -0700</date>
            <delta_ts>2015-03-12 13:26:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150313044856.patch</filename>
            <type>text/plain</type>
            <size>82791</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NTRiNTA0ZDczOTRiNzlhNGI4Y2Y2NDE1NzMwMjg0ODMxMWI4ZjNiLi4yMGU4OTJhZWI4NGE4N2Q5
YWI2ZmIyNjc2ZGMzMzU3OTA2Y2JhNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDcgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgTWFwRGF0YUltcGwgaXMgc3BlY2lhbGl6ZWQgaW50byBNYXBEYXRhIGFuZCBTZXREYXRh
LgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBTZXREYXRhLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBk
dW1teSB2YWx1ZXMKKyAgICAgICAgcHJldmlvdXNseSBzdG9yZWQgaW4gdGhlIE1hcERhdGFJbXBs
LiBTbyB0aGUgc3RvcmFnZSBzaXplIG9mIFNldERhdGEKKyAgICAgICAgYmVjb21lcyB0aGUgaGFs
ZiBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQW5kIG5vdyBNYXBE
YXRhIGFuZCBTZXREYXRhIGFyZSBjb21wbGV0ZWx5IGludGVncmF0ZWQgaW50byBKU01hcCBhbmQg
SlNTZXQsCisgICAgICAgIHRoZXNlIHN0cnVjdHVyZXMgYXJlIG5vdCBleHBvc2VkIHRvIHRoZSBv
dGhlciBjb2RlIGV2ZW4gaW4gV2ViQ29yZSB3b3JsZC4KKworICAgICAgICBBbmQgYXQgdGhlIHNh
bWUgdGltZSwgdGhpcyBwYXRjaCBmaXhlcyBtaXNzaW5nIGRlc3Ryb3kgZnVuY3Rpb25zCisgICAg
ICAgIGluIEpTTWFwSXRlcmF0b3IgYW5kIEpTU2V0SXRlcmF0b3IuCisgICAgICAgIFRoZXkgYXJl
IG5lZWRlZCBiZWNhdXNlIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIGlzIGEgbm9uLXRyaXZpYWwg
ZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9K
U01hcC5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6
SlNNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU01hcDo6Y29weUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpoYXMpOgorICAgICAgICAoSlNDOjpKU01hcDo6
c2l6ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpnZXQpOgorICAgICAgICAoSlNDOjpKU01hcDo6
c2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU01hcC5oOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6
OmtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAoSlND
OjpKU01hcDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50
cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5V2l0aG91dFdy
aXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0VmFsdWUpOgorICAg
ICAgICAoSlNDOjpKU01hcDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmVuZCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjptYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6
SlNNYXBJdGVyYXRvcik6CisgICAgICAgICogcnVudGltZS9KU1NldC5jcHA6CisgICAgICAgIChK
U0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjpoYXMpOgorICAgICAgICAoSlNDOjpKU1NldDo6c2l6ZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpKU1NldDo6Y2xlYXIpOgorICAgICAgICAoSlND
OjpKU1NldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmZpbmlzaENyZWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2V0Lmg6CisgICAgICAgIChKU0M6OkpTU2V0
OjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
U2V0OjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXlX
aXRob3V0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpK
U1NldDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6ZW5kKToKKyAgICAgICAgKEpTQzo6
SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6Om1hcERhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL01hcERhdGEuaDoKKyAg
ICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjprZXkpOgorICAgICAgICAo
SlNDOjpNYXBEYXRhSW1wbDo6Y29uc3RfaXRlcmF0b3I6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6
TWFwRGF0YUltcGw6OnNpemUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46Ok1h
cERhdGFJbXBsKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpjbGVhcik6Cisg
ICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6S2V5VHlwZTo6S2V5VHlwZSk6CisgICAg
ICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5j
cmVtZW50KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRv
cjo6ZW5zdXJlU2xvdCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3Rf
aXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50
cnk+Ojpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IpOgorICAgICAgICAoSlND
Ojo9KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmtleSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjp2YWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
cERhdGE6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjbGVhcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OktleVR5cGU6OktleVR5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5z
dXJlU2xvdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9y
Ojpjb25zdF9pdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0
X2l0ZXJhdG9yOjp+Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IqKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmVuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvTWFwRGF0YUlubGluZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwLgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxF
bnRyeT46OmZpbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnRhaW5z
KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjphZGQpOgorICAgICAgICAoSlND
OjpNYXBEYXRhSW1wbDxFbnRyeT46OnNldCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVu
dHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUpOgor
ICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFw
cGVuZCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZSk6Cisg
ICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRNYXAp
OgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6Om1hcFBy
b3RvRnVuY0RlbGV0ZSk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0ZvckVhY2gpOgorICAg
ICAgICAoSlNDOjptYXBQcm90b0Z1bmNHZXQpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNI
YXMpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjptYXBQ
cm90b0Z1bmNTaXplKToKKyAgICAgICAgKEpTQzo6Z2V0TWFwRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpnZXRTZXQpOgor
ICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNBZGQpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1
bmNDbGVhcik6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0RlbGV0ZSk6CisgICAgICAgIChK
U0M6OnNldFByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNIYXMp
OgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNTaXplKToKKyAgICAgICAgKEpTQzo6Z2V0TWFw
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAzLTEwICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIGV2ZW50IGhhbmRsZXIgZml4
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAxMDdiNDkyMDEyNmNkZDk4YTNmNDVkNWI0ZGYyZDNlMDk0NmIyMDMx
Li5iYTVjMDI3NTI1OGYwOTczYTdlNGNlZjI4OGQzNmQwMWE3NjYwMDBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNT
ZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyBT
ZXQgaGFzIFNldERhdGEgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gTWFwRGF0YS4KKyAgICAgICAg
QW5kIE1hcERhdGEvU2V0RGF0YSBhcmUgY29tcGxldGVseSBpbnRlZ3JhdGVkIGludG8gSlNTZXQg
YW5kIEpTTWFwLgorICAgICAgICBTdHJ1Y3R1cmVkLWNsb25pbmcgYWxnb3JpdGhtIG5lZWQgdG8g
YmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcy4KKyAgICAgICAgQW5kIGluIHRoZSBjYXNlIG9mIEpT
U2V0LCBzaW5jZSBKU1NldCBkb2Vzbid0IG5lZWQgZHVtbXkgdmFsdWUgZm9yIGNvbnN0cnVjdGlv
biwKKyAgICAgICAgU3RydWN0dXJlZC1jbG9uaW5nIG9ubHkgc2VyaWFsaXplIHRoZSBrZXlzIGlu
IEpTU2V0LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBEYXRhSW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmNvbnN1bWVDb2xsZWN0aW9uRGF0
YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6
OmNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBvc3NpYmxlKTogRGVsZXRlZC4KKwogMjAxNS0w
My0xMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE4MTM2Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjMTRlNjU4ZDA4OTY4ZDI4N2RkN2QzM2ViOTIwNTNiOTJkMTY5NzNhLi45
M2E2MWZkNzdlMmNkYTg1NjRkMmRmNDQxNzk1ZjRjMGQxYzY4ZTUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC01MDUsNyArNTA1LDYgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKICAgICBydW50
aW1lL0xvb2t1cC5jcHAKICAgICBydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAotICAgIHJ1bnRp
bWUvTWFwRGF0YS5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwCiAg
ICAgcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL01hcFByb3Rv
dHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTlhMTk2ZjY2MDk1ZmNk
MTFhMzBiZGY1MjdhMDhhNGNkOWRmZjJiNi4uNTY5ZWFkM2Q3MjI2YWFmZWQxNDUyY2MxYjYzMDQz
Mjc0YjI2ZjM5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzMzAsOCArMTMz
MCw4IEBACiAJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RjE4MjQxNjQxOTI1
NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdF
RTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8q
IFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTc4NTA3RDYxN0NC
QzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3Bw
ICovOyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDUxN0NCQzZGRDAw
MTFGNkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFwRGF0YUlubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5M0Q0M0ND
QTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUzRkUwMEYxMDYyNiAv
KiBTcGlsbFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGlsbFJlZ2lzdGVyc01v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
Nzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGNzE3OTcy
NjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CiAJCUE3ODg1
M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNGODE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMDM4LDggKzMwMzgsOCBAQAogCQlBNzdGMTgx
RjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzg1
MDdENDE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBNYXBEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1OTNENDNDQ0EwQkJFMDZEODlDNTk3MDcgLyogTWFwRGF0YUlubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3ODg1
M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURGNzQ0IC8qIERGR0Zh
aWxlZEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDgxLDggKzQ0ODEsOCBAQAogCQkJCUY2
OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKIAkJCQlBNzAwODczNzE3Q0JF
ODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3MDA4NzM4MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oICovLAotCQkJCUE3ODUwN0Q0MTdDQkM2RkQw
MDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcg
LyogTWFwRGF0YS5oICovLAorCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRh
SW5saW5lcy5oICovLAogCQkJCUE3NERFRjhCMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRv
ckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzRERUY4QzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFw
SXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCkBAIC02MTAzLDYgKzYxMDMsNyBAQAogCQkJ
CTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEE2NDQxNTE5NDIwQTZDNjFBRDE4ODJFIC8qIE1hcERhdGFJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5MjE4MkQ5OTE0MDA1MjJDMjIgLyogTWFw
SXRlcmF0b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVGOTQxODJEOTkx
NDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
QEAgLTcyNDgsNyArNzI0OSw2IEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QjZBNzREMThD
NkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDA4NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzRERUY5MTE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyog
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NC
RThEMzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAppbmRleCBjMDhhOTcwOGJlNDVhOTM0OTU1MjM0
YjMwNTc2NjBkNzgxNjc1MGY0Li40NDEwMDZkYjM4YWYzMjE4MDA1ZGFhZjYzNmFmMTNiOWI3M2Yw
OWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCkBAIC0yNywyNiAr
MjcsNjIgQEAKICNpbmNsdWRlICJKU01hcC5oIgogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6
OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNNYXApIH07CiAKK3ZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpz
Q2FzdDxKU01hcCo+KGNlbGwpLT5+SlNNYXAoKTsKK30KKwogdm9pZCBKU01hcDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNNYXAqPihjZWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXBE
YXRhKTsKKyAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7CiB9CiAKLXZvaWQgSlNNYXA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3ZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYg
dmlzaXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICBtX21hcERhdGEuc2V0KHZtLCB0aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAg
ICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKyAgICBqc0Nh
c3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9r
ZW4pOwogfQogCitib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
K3sKKyAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Cit9CisKK3NpemVf
dCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIG1fbWFwRGF0YS5z
aXplKGV4ZWMpOworfQorCitKU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlz
LCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKK3sKKyAg
ICBtX21hcERhdGEuY2xlYXIoKTsKK30KKworYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCit7CisgICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywg
a2V5KTsKK30KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKaW5kZXggNDMx
NTI3NGRlM2U5ODU3YzViYmUwODM1MTM3NTY5YTc3MTY0NmUwNS4uZDZmMjU5YmYzMTAzOWZiNzgw
OGFmYjRhOGRhNmY5ZWQwYWM0ZWY4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cC5oCkBAIC0yNiwxNSArMjYsNjMgQEAKICNpZm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9o
CiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgTWFw
RGF0YTsKLQotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitjbGFzcyBK
U01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVj
dCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBt
YWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAgLy8gZmllbGRzIGJlIFdyaXRl
QmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBtX3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGtleSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tl
eTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
KyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKKyAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
c2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93
bmVyLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3ZhbHVlLnNldCh2
bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2tleS5jbGVhcigpOworICAgICAgICAgICAgbV92YWx1ZS5j
bGVhcigpOworICAgICAgICB9CisgICAgfTsKKworICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50
cnk+IE1hcERhdGE7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkBAIC01NSwxOSArMTAz
LDM1IEBAIGNsYXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBy
ZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgTWFwRGF0
YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAgIHR5cGVkZWYgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBEYXRhLmJlZ2luKCk7
CisgICAgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tYXBEYXRhLmVuZCgpOworICAgIH0KKyAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKKyAgICBKU1ZhbHVlIGdldChF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtl
eSwgSlNWYWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKKyAgICBib29s
IHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogcHJpdmF0ZToKICAgICBKU01hcChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
KyAgICAgICAgLCBtX21hcERhdGEoKQogICAgIHsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0KKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlW
aXNpdG9yJiwgQ29weVRva2VuKTsKIAotICAgIFdyaXRlQmFycmllcjxNYXBEYXRhPiBtX21hcERh
dGE7CisgICAgTWFwRGF0YSBtX21hcERhdGE7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCmluZGV4IGMxNjdhY2JjZjNhM2E5Yjdj
NGNlNWNhNzI4YTM4MTVjYmI5NmNiYmUuLmU5ZDdkNDJmYjRlMzhlZDMxN2NkNjJiZjA2NDJjYzEx
NWYxZTYzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRl
cmF0b3IuY3BwCkBAIC00MCwxNSArNDAsMTkgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTTWFwKiBpdGVyYXRlZE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7
Ci0gICAgbV9pdGVyYXRlZE9iamVjdERhdGEuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdC0+
bWFwRGF0YSgpKTsKK30KKwordm9pZCBKU01hcEl0ZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpLT5+SlNNYXBJdGVyYXRvcigp
OwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01hcEl0ZXJhdG9yKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7ICAgICAgICAKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVy
YXRlZE9iamVjdERhdGEpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7
CiB9CiAKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKaW5kZXggNjNkZDVlOGIxMWY5NmE0NDYxYWRkNWNl
YTNjNDQ3YWRjNjAwNDBjYy4uYWI4N2IzYWZlY2Y0Y2I3NWU4ZDlkOTgwZTk4MWQ2YThhYTY4MTNl
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRv
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaApA
QCAtODIsMTggKzgyLDE4IEBAIGNsYXNzIEpTTWFwSXRlcmF0b3IgOiBwdWJsaWMgSlNEZXN0cnVj
dGlibGVPYmplY3QgewogcHJpdmF0ZToKICAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgTWFwSXRlcmF0aW9uS2luZCBr
aW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9y
KGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCktPmJlZ2luKCkpCisgICAgICAgICwgbV9pdGVyYXRv
cihpdGVyYXRlZE9iamVjdC0+YmVnaW4oKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7
CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZy
YW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsK
LSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERhdGE7Ci0gICAgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU01hcDo6Y29uc3RfaXRlcmF0
b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAppbmRleCAzYzFkMTI0YmM1NjJkYjZkYzFi
YTAwYzk2M2JhNTQ5M2U2MDM3Mzc3Li44ZmM1NjM3Njk2M2E1Nzc3ZmEyNTRmY2RlNTk3ODZmNWQ0
YTIwMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCkBAIC0zNSwxNyArMzUsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAordm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPn5KU1NldCgpOworfQorCiB2b2lkIEpT
U2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU1NldCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKK30KKwordm9pZCBKU1NldDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9r
ZW4pCit7CisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7
CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2luZ1N0b3JlKHZp
c2l0b3IsIHRva2VuKTsKK30KKworYm9vbCBKU1NldDo6aGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9zZXREYXRhLmNvbnRhaW5zKGV4ZWMsIHZhbHVl
KTsKK30KKworc2l6ZV90IEpTU2V0OjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gbV9zZXREYXRhLnNpemUoZXhlYyk7Cit9CisKK3ZvaWQgSlNTZXQ6OmFkZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgbV9zZXREYXRhLnNldChleGVjLCB0aGlzLCB2
YWx1ZSwgdmFsdWUpOworfQorCit2b2lkIEpTU2V0OjpjbGVhcihFeGVjU3RhdGUqKQoreworICAg
IG1fc2V0RGF0YS5jbGVhcigpOwogfQogCi12b2lkIEpTU2V0OjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCitib29sIEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX21hcERhdGEuc2V0KHZtLCB0
aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAgICByZXR1cm4gbV9zZXREYXRhLnJlbW92ZShl
eGVjLCB2YWx1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCmlu
ZGV4IGZjMGFhMzBmYjk1N2NiODlmOTVlNTY3ZWYxNjBjZjgxNTAzZTI1MmUuLjNlM2MwZWMyYTRi
YjM4ZmFiZjY0ZmNkNzE1NjM2ZTM2Y2RlNzczZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZXQuaApAQCAtMjYsMTUgKzI2LDU5IEBACiAjaWZuZGVmIEpTU2V0X2gKICNkZWZpbmUg
SlNTZXRfaAogCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIE1hcERhdGE7Ci0KLWNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewor
Y2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgotICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYgSlNEZXN0cnVjdGli
bGVPYmplY3QgQmFzZTsKKworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50
cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAgIC8vIGZpZWxkcyBi
ZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7CisgICAgcHJpdmF0ZToK
KyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OworCisgICAgcHVibGljOgorICAg
ICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9rZXk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZtX2tleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAgICBt
X2tleS5zZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRL
ZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtleSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHNldFZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fa2V5LmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdHlwZWRlZiBNYXBEYXRh
SW1wbDxFbnRyeT4gU2V0RGF0YTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKQEAgLTU1
LDE5ICs5OSwzNCBAQCBjbGFzcyBKU1NldCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAg
IE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiBtX21hcERhdGEuZ2V0KCk7IH0KKyAgICB0eXBl
ZGVmIFNldERhdGE6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0RGF0YS5i
ZWdpbigpOworICAgIH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0RGF0YS5lbmQoKTsKKyAgICB9CisgICAgYm9vbCBoYXMoRXhlY1N0
YXRlKiwgSlNWYWx1ZSk7CisgICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKik7CisgICAgdm9pZCBh
ZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKKyAg
ICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogcHJpdmF0ZToKICAgICBKU1Nl
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKKyAgICAgICAgLCBtX3NldERhdGEoKQogICAgIHsKICAgICB9CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCisgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1fbWFw
RGF0YTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNp
dG9yJiwgQ29weVRva2VuKTsKKworICAgIFNldERhdGEgbV9zZXREYXRhOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAppbmRleCAy
ZmMyOTg5MDE3Njg3M2U0NGJiOTMxNTI0YzVmMDNlZGEwNGYzNzVlLi41ZWNhYzEyZDljNGNhMjI3
NWVkZGFkOWU3ODk3ODU0OGM5N2U3YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQwLDE5IEBAIHZvaWQgSlNTZXRJ
dGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1NldCogaXRlcmF0ZWRPYmplY3QpCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fc2V0LnNldCh2bSwgdGhpcywg
aXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3REYXRhLnNldCh2bSwgdGhpcywg
aXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7CiB9CiAKIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
U2V0SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpOwot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsgICAgICAg
IAorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0YSk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKK30KKwordm9pZCBKU1NldEl0ZXJhdG9yOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXRJdGVyYXRvcio+KGNlbGwpLT5+
SlNTZXRJdGVyYXRvcigpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCmluZGV4IDljNzBjMjZl
NTBhMmI1ZDk1ZThkYzgxZGZkMTlkYWFkNDI1MDdiZDcuLmIwNjNjNTEwOTZiMDlkN2VhZGNiOTRi
OGZmNGY5ZDRjNDFiZmNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1NldEl0ZXJhdG9yLmgKQEAgLTgwLDE4ICs4MCwxOCBAQCBjbGFzcyBKU1NldEl0ZXJhdG9yIDog
cHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHByaXZhdGU6CiAgICAgSlNTZXRJdGVyYXRv
cihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0ZWRPYmplY3QsIFNl
dEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
ICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bWFwRGF0YSgpLT5iZWdpbigpKQorICAg
ICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPmJlZ2luKCkpCiAgICAgICAgICwgbV9r
aW5kKGtpbmQpCiAgICAgewogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0Kik7CiAgICAgSlNWYWx1ZSBj
cmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmll
cjxKU1NldD4gbV9zZXQ7Ci0gICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1faXRlcmF0ZWRPYmpl
Y3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CisgICAgSlNT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CiAgICAgU2V0SXRlcmF0aW9uS2luZCBtX2tp
bmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU2OTFjODUyYWIyZmQyYmIzZTU0N2E0Y2RjMDlk
ZTM2Y2IxN2ZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTWFwRGF0YS5oIgotCi0jaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCi0jaW5jbHVk
ZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVzLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25z
dCBDbGFzc0luZm8gTWFwRGF0YTo6c19pbmZvID0geyAiTWFwRGF0YSIsIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoTWFwRGF0YSkgfTsKLQotc3RhdGljIGNvbnN0IGludDMyX3QgbWluaW11bU1h
cFNpemUgPSA4OwotCi1NYXBEYXRhOjpNYXBEYXRhKFZNJiB2bSkKLSAgICA6IEJhc2Uodm0sIHZt
Lm1hcERhdGFTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2NhcGFjaXR5KDApCi0gICAgLCBtX3Np
emUoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBtX2l0ZXJhdG9yQ291bnQoMCkK
LSAgICAsIG1fZW50cmllcygwKQotewotfQotCi1NYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6Zmlu
ZChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1
ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5m
aW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsKLSAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0g
ICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3lt
Ym9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlk
KCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVd
OwotICAgIH0KLSAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRl
ciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBp
ZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0KLSAgICBh
dXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFs
dWUpKTsKLSAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotfQotCi1ib29s
IE1hcERhdGE6OmNvbnRhaW5zKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsK
LSAgICByZXR1cm4gZmluZChjYWxsRnJhbWUsIGtleSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBNYXAsIHR5cGVuYW1lIEtleT4gTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgTWFwJiBtYXAsIEtleSBrZXksIEtleVR5cGUga2V5VmFsdWUpCi17Ci0g
ICAgdHlwZW5hbWUgTWFwOjppdGVyYXRvciBsb2NhdGlvbiA9IG1hcC5maW5kKGtleSk7Ci0gICAg
aWYgKGxvY2F0aW9uICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbbG9j
YXRpb24tPnZhbHVlXTsKLSAgICAKLSAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGNhbGxG
cmFtZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtl
eSwgbV9zaXplKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAg
RW50cnkqIGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107Ci0gICAgbmV3IChlbnRyeSkgRW50
cnkoKTsKLSAgICBlbnRyeS0+a2V5LnNldChjYWxsRnJhbWUtPnZtKCksIHRoaXMsIGtleVZhbHVl
LnZhbHVlKTsKLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6c2V0KENhbGxG
cmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBFbnRy
eSogbG9jYXRpb24gPSBhZGQoY2FsbEZyYW1lLCBrZXkpOwotICAgIGlmICghbG9jYXRpb24pCi0g
ICAgICAgIHJldHVybjsKLSAgICBsb2NhdGlvbi0+dmFsdWUuc2V0KGNhbGxGcmFtZS0+dm0oKSwg
dGhpcywgdmFsdWUpOwotfQotICAgIAotTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0
cmluZygpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9zdHJpbmdLZXllZFRhYmxl
LCBhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSwga2V5KTsKLSAg
ICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBhZGQoY2FsbEZyYW1l
LCBtX3N5bWJvbEtleWVkVGFibGUsIGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCku
dWlkKCksIGtleSk7Ci0gICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJu
IGFkZChjYWxsRnJhbWUsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwga2V5
KTsKLSAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV92YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6
OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOwotfQotCi1KU1ZhbHVlIE1hcERhdGE6OmdldChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKEVudHJ5KiBlbnRyeSA9
IGZpbmQoY2FsbEZyYW1lLCBrZXkpKQotICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlLmdldCgp
OwotICAgIHJldHVybiBKU1ZhbHVlKCk7Ci19Ci0KLWJvb2wgTWFwRGF0YTo6cmVtb3ZlKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpbnQzMl90IGxvY2F0aW9uOwot
ICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0
cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUp
LmltcGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1
ZTsKLSAgICAgICAgbV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9ICBlbHNl
IGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJv
bEtleWVkVGFibGUuZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgp
KTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAg
ICAgICBtX3N5bWJvbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxzZSBpZiAoa2V5
LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUu
ZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXll
ZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlv
biA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5k
KEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV92YWx1
ZUtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxv
Y2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShp
dGVyKTsKLSAgICB9Ci0gICAgbV9lbnRyaWVzW2xvY2F0aW9uXS5rZXkuY2xlYXIoKTsKLSAgICBt
X2VudHJpZXNbbG9jYXRpb25dLnZhbHVlLmNsZWFyKCk7Ci0gICAgbV9kZWxldGVkQ291bnQrKzsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0JhY2tp
bmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17Ci0gICAg
QVNTRVJUKHNob3VsZFBhY2soKSk7Ci0gICAgaW50MzJfdCBuZXdFbmQgPSAwOwotICAgIFJFTEVB
U0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwg
bV9zaXplOyBpKyspIHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOwotICAg
ICAgICBpZiAoIWVudHJ5LmtleSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NF
UlQobmV3RW5kIDwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0g
ZW50cnk7Ci0KLSAgICAgICAgLy8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZv
cndhcmRpbmcgaW5kZXggZm9yIHRoZSBuZXcgZW50cnksCi0gICAgICAgIC8vIHNvIHRoYXQgd2Ug
Y2FuIGZpeCB1cCBvdXIgaGFzaCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFs
Ci0gICAgICAgIC8vIGhhc2ggbG9va3VwcwotICAgICAgICBlbnRyeS52YWx1ZS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGpzTnVtYmVyKG5ld0VuZCkpOwotICAgICAgICBuZXdFbmQrKzsKLSAgICB9
Ci0KLSAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2htYXBzCi0gICAgZm9yIChhdXRvIHB0ciA9IG1f
dmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsg
KytwdHIpCi0gICAgICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0udmFsdWUu
Z2V0KCkuYXNJbnQzMigpOwotICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRy
LT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0g
ICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9z
dHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50
cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0
ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxl
LmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVl
XS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0KLSAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkg
PT0gbV9kZWxldGVkQ291bnQpOwotICAgIG1fZGVsZXRlZENvdW50ID0gMDsKLQotICAgIG1fY2Fw
YWNpdHkgPSBuZXdDYXBhY2l0eTsKLSAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVz
ID0gZGVzdGluYXRpb247Ci0KLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQmFja2luZ1N0b3Jl
KEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQo
IXNob3VsZFBhY2soKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKLSAg
ICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0
aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwotICAgIG1fY2FwYWNpdHkg
PSBuZXdDYXBhY2l0eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKLX0KLQotQ2hlY2tl
ZEJvb2xlYW4gTWFwRGF0YTo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCi17Ci0gICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6bWF4KG1fY2FwYWNpdHkgKyAobV9j
YXBhY2l0eSAvIDIpICsgMSwgbWluaW11bU1hcFNpemUpOwotICAgIHZvaWQqIG5ld1N0b3JhZ2Ug
PSAwOwotICAgIERlZmVyR0MgZGVmZXIoKmNhbGxGcmFtZS0+aGVhcCgpKTsKLSAgICBpZiAoIWNh
bGxGcmFtZS0+aGVhcCgpLT50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgcmVxdWlyZWRTaXplICog
c2l6ZW9mKEVudHJ5KSwgJm5ld1N0b3JhZ2UpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihjYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEVudHJ5
KiBuZXdFbnRyaWVzID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKLSAgICBpZiAo
c2hvdWxkUGFjaygpKQotICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRy
aWVzLCByZXF1aXJlZFNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9y
ZShuZXdFbnRyaWVzLCByZXF1aXJlZFNpemUpOwotICAgIGNhbGxGcmFtZS0+aGVhcCgpLT53cml0
ZUJhcnJpZXIodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgTWFwRGF0YSogdGhpc09iamVj
dCA9IGpzQ2FzdDxNYXBEYXRhKj4oY2VsbCk7Ci0gICAgRW50cnkqIGVudHJpZXMgPSB0aGlzT2Jq
ZWN0LT5tX2VudHJpZXM7Ci0gICAgaWYgKCFlbnRyaWVzKQotICAgICAgICByZXR1cm47Ci0gICAg
c2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5tX3NpemU7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1f
ZGVsZXRlZENvdW50KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBpZiAoIWVudHJpZXNbaV0ua2V5KQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJpZXNbaV0ua2V5KTsKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZlbnRyaWVzW2ldLnZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZQotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5rZXks
IHNpemUgKiAoc2l6ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7
Ci0KLSAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5
VG9rZW4sIGVudHJpZXMsIHRoaXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLX0KLQotdm9p
ZCBNYXBEYXRhOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZp
c2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0ganND
YXN0PE1hcERhdGEqPihjZWxsKTsKLSAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29w
eVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV9lbnRyaWVz
KSkgewotICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50cmllczsK
LSAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3Iu
YWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSkpOwotICAgICAg
ICBpZiAodGhpc09iamVjdC0+c2hvdWxkUGFjaygpKQotICAgICAgICAgICAgdGhpc09iamVjdC0+
cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBh
Y2l0eSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlcGxhY2VCYWNr
aW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAgICAgIHZp
c2l0b3IuZGlkQ29weShvbGRFbnRyaWVzLCB0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSk7
Ci0gICAgfQotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4p
OwotfQotCi12b2lkIE1hcERhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRp
Y19jYXN0PE1hcERhdGEqPihjZWxsKS0+fk1hcERhdGEoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCmluZGV4IGIxZDUzMDYyOTZlNTA0NmJkNDA3M2VlOTk5
MThlYTZmZTRmYjE5NDUuLmQzNDY2MzRhNTA3NGY0NDgzOWE2MGFiMzhkYzIyYTE3YTRkMmQwMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKQEAgLTI3LDI1ICsyNywy
OSBAQAogI2RlZmluZSBNYXBEYXRhX2gKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgRXhlY1N0YXRl
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2NsYXNzIE1hcERhdGFJbXBsIHsKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIGVudW0gOiBpbnQzMl90IHsKKyAgICAg
ICAgbWluaW11bU1hcFNpemUgPSA4CisgICAgfTsKIAogICAgIHN0cnVjdCBjb25zdF9pdGVyYXRv
ciB7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgY29u
c3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0X2l0ZXJhdG9y
KCk7CiAgICAgICAgIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IG9w
ZXJhdG9yKigpIGNvbnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgUkVMRUFTRV9B
U1NFUlQoIWF0RW5kKCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0ua2V5
LmdldCgpOyB9Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJU
KCFhdEVuZCgpKTsgcmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlLmdl
dCgpOyB9CisgICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRF
bmQoKSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkoKS5nZXQoKTsg
fQorICAgICAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQo
KSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgpLmdldCgpOyB9
CiAgICAgICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsgaW50ZXJuYWxJ
bmNyZW1lbnQoKTsgfQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1h
cERhdGEqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRh
SW1wbCopOwogICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90
aGVyKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhl
cik7CiAgICAgICAgIHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCk7IH0KQEAgLTYwLDcgKzY0LDcgQEAgY2xhc3MgTWFwRGF0YSA6IHB1
YmxpYyBKU0NlbGwgewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0RW5kKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fbWFwRGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVybmFsSW5jcmVt
ZW50KCk7Ci0gICAgICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAgICAgY29uc3Qg
TWFwRGF0YUltcGwqIG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4OwogICAgIH07
CiAKQEAgLTcwLDQ1ICs3NCwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBEYXRhKiBjcmVh
dGUoVk0mIHZtKQotICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsKLSAgICAgICAg
bWFwRGF0YS0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFwRGF0YTsKLSAg
ICB9CisgICAgTWFwRGF0YUltcGwoKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRy
dWU7Ci0KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUqLCBLZXlUeXBl
LCBKU1ZhbHVlKTsKLSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBi
b29sIHJlbW92ZShDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKENhbGxG
cmFtZSosIEtleVR5cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZSAtIG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CisgICAg
SlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1vdmUoRXhlY1N0
YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBLZXlUeXBlKTsK
KyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2Rl
bGV0ZWRDb3VudDsgfQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBjb25zdF9pdGVyYXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZvaWQgY2xlYXIo
KTsKIAotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cisg
ICAgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJik7CisgICAg
dm9pZCBjb3B5QmFja2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogcHJpdmF0
ZToKICAgICB0eXBlZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJf
dD4gSW5kZXhUcmFpdHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVu
dHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMg
YmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZh
bHVlOwotICAgIH07Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJfdCwgdHlw
ZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJhaXRzPEpT
Q2VsbCo+LCBJbmRleFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1
ZUhhc2hUcmFpdHMsIEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmdJbXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxTdHJp
bmdJbXBsKj46Okhhc2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4VHJhaXRz
PiBTdHJpbmdLZXllZE1hcDsKQEAgLTExNiwxOCArMTAwLDEyIEBAIGNsYXNzIE1hcERhdGEgOiBw
dWJsaWMgSlNDZWxsIHsKIAogICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMoKSB7IHJldHVybiBt
X2NhcGFjaXR5ICogc2l6ZW9mKEVudHJ5KTsgfQogCi0gICAgTWFwRGF0YShWTSYpOwotICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3Rv
cmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwotCi0KLSAgICBBTFdBWVNfSU5M
SU5FIEVudHJ5KiBmaW5kKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIEFMV0FZU19JTkxJTkUg
RW50cnkqIGFkZChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TWFwLCB0eXBlbmFtZSBLZXk+IEFMV0FZU19JTkxJTkUgRW50cnkqIGFkZChDYWxsRnJhbWUqLCBN
YXAmLCBLZXksIEtleVR5cGUpOworICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQoRXhlY1N0
YXRlKiwgS2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSos
IEpTQ2VsbCogb3duZXIsIEtleVR5cGUpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5
cGVuYW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCog
b3duZXIsIE1hcCYsIEtleSwgS2V5VHlwZSk7CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hv
dWxkUGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50ICYmICFtX2l0ZXJhdG9yQ291
bnQ7IH0KLSAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChDYWxsRnJhbWUq
KTsKKyAgICBDaGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqLCBK
U0NlbGwqIG93bmVyKTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXBsYWNlQW5kUGFja0Jh
Y2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBp
bnQzMl90IG5ld1NpemUpOwpAQCAtMTQzLDcgKzEyMSwxOCBAQCBjbGFzcyBNYXBEYXRhIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgRW50cnkqIG1fZW50cmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBNYXBEYXRhOjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19J
TkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCgpCisgICAgOiBtX2NhcGFjaXR5
KDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCisgICAgLCBtX2l0
ZXJhdG9yQ291bnQoMCkKKyAgICAsIG1fZW50cmllcyhudWxscHRyKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46
OmNsZWFyKCkKIHsKICAgICBtX2NlbGxLZXllZFRhYmxlLmNsZWFyKCk7CiAgICAgbV92YWx1ZUtl
eWVkVGFibGUuY2xlYXIoKTsKQEAgLTE1NSw3ICsxNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
TWFwRGF0YTo6Y2xlYXIoKQogICAgIG1fZW50cmllcyA9IG51bGxwdHI7CiB9CiAKLUFMV0FZU19J
TkxJTkUgTWFwRGF0YTo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpLZXlUeXBlOjpL
ZXlUeXBlKEpTVmFsdWUgdikKIHsKICAgICBpZiAoIXYuaXNEb3VibGUoKSkgewogICAgICAgICB2
YWx1ZSA9IHY7CkBAIC0xNzQsNTUgKzE2NCw2MiBAQCBBTFdBWVNfSU5MSU5FIE1hcERhdGE6Oktl
eVR5cGU6OktleVR5cGUoSlNWYWx1ZSB2KQogICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOwog
fQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFs
SW5jcmVtZW50KCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lk
IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KCkK
IHsKICAgICBFbnRyeSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzOwogICAgIHNpemVf
dCBpbmRleCA9IG1faW5kZXggKyAxOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6
ZTsKLSAgICB3aGlsZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSkKKyAgICB3
aGlsZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSgpKQogICAgICAgICBpbmRl
eCsrOwogICAgIG1faW5kZXggPSBpbmRleDsKIH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCgpCisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVudHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRl
cmF0b3I6OmVuc3VyZVNsb3QoKQogewogICAgIC8vIFdoZW4gYW4gaXRlcmF0b3IgZXhpc3RzIG91
dHNpZGUgb2YgaG9zdCBjb3N0IGl0IGlzIHBvc3NpYmxlIGZvcgogICAgIC8vIHRoZSBjb250YWlu
aW5nIG1hcCB0byBiZSBtb2RpZmllZAogICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5t
X2VudHJpZXM7CiAgICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleDsKICAgICBzaXplX3QgZW5kID0g
bV9tYXBEYXRhLT5tX3NpemU7Ci0gICAgaWYgKGluZGV4IDwgZW5kICYmIGVudHJpZXNbaW5kZXhd
LmtleSkKKyAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4obV9pbmRleCkgPCBlbmQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqIG1hcERh
dGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8
RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGw8
RW50cnk+KiBtYXBEYXRhKQogICAgIDogbV9tYXBEYXRhKG1hcERhdGEpCiAgICAgLCBtX2luZGV4
KC0xKQogewogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRv
cjo6fmNvbnN0X2l0ZXJhdG9yKCkKIHsKICAgICBtX21hcERhdGEtPm1faXRlcmF0b3JDb3VudC0t
OwogfQogCi1BTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpT
VmFsdWU+IE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWly
PEpTVmFsdWUsIEpTVmFsdWU+IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yKigpIGNvbnN0CiB7CiAgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRy
aWVzW21faW5kZXhdOwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1Zh
bHVlPihlbnRyeS0+a2V5LmdldCgpLCBlbnRyeS0+dmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBX
VEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVu
dHJ5LT52YWx1ZSgpLmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25zdF9p
dGVyYXRvciBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5kKGNvbnN0IE1hcERhdGEqIG1hcERh
dGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYXV0byBNYXBEYXRh
SW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YUltcGw8RW50cnk+
KiBtYXBEYXRhKSAtPiBjb25zdF9pdGVyYXRvcgogewogICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3Vs
dChtYXBEYXRhKTsKICAgICByZXN1bHQubV9pbmRleCA9IC0xOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0
b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eT4KK0FMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9y
OjpvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICBBU1NFUlQo
b3RoZXIubV9tYXBEYXRhID09IG1fbWFwRGF0YSk7CiAgICAgaWYgKGF0RW5kKCkgJiYgb3RoZXIu
YXRFbmQoKSkKQEAgLTIzMCw3ICsyMjcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6
Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aAogICAg
IHJldHVybiBtX2luZGV4ICE9IG90aGVyLm1faW5kZXg7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9v
bCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRv
ciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYm9vbCBN
YXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICByZXR1cm4gISgqdGhpcyAhPSBvdGhlcik7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mYjJjNTNhMmI3NTZkMDhhODlmMWVkYWRjNWE4NmE0Yjc1YWE3N2U3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApA
QCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvcGllZEFsbG9j
YXRvci5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
Ik1hcERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworI2luY2x1ZGUg
PHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgoraW5saW5lIEVudHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQoRXhlY1N0YXRlKiBleGVj
LCBLZXlUeXBlIGtleSkKK3sKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAg
ICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVl
KS0+dmFsdWUoZXhlYykuaW1wbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXll
ZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9l
bnRyaWVzW2l0ZXItPnZhbHVlXTsKKyAgICB9CisgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgp
KSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9s
KGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBt
X3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVl
LmlzQ2VsbCgpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChr
ZXkudmFsdWUuYXNDZWxsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxl
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVz
W2l0ZXItPnZhbHVlXTsKKyAgICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJs
ZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKKyAgICBpZiAoaXRlciA9PSBtX3Zh
bHVlS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZtX2Vu
dHJpZXNbaXRlci0+dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGlu
ZSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29udGFpbnMoRXhlY1N0YXRlKiBleGVjLCBLZXlU
eXBlIGtleSkKK3sKKyAgICByZXR1cm4gZmluZChleGVjLCBrZXkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4KK2lu
bGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnk+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIG93bmVyLCBNYXAmIG1hcCwgS2V5IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKK3sKKyAgICB0
eXBlbmFtZSBNYXA6Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAo
bG9jYXRpb24gIT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlv
bi0+dmFsdWVdOworCisgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25lcikp
CisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9z
aXplKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRW50cnkq
IGVudHJ5ID0gJm1fZW50cmllc1ttX3NpemUrK107CisgICAgbmV3IChlbnRyeSkgRW50cnkoKTsK
KyAgICBlbnRyeS0+c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1ZS52YWx1ZSk7Cisg
ICAgcmV0dXJuIGVudHJ5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2
b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25l
ciwgS2V5VHlwZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgRW50cnkqIGxvY2F0aW9uID0g
YWRkKGV4ZWMsIG93bmVyLCBrZXkpOworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICBsb2NhdGlvbi0+c2V0VmFsdWUoZXhlYy0+dm0oKSwgb3duZXIsIHZhbHVlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVu
dHJ5Pjo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgS2V5VHlwZSBrZXkpCit7
CisgICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMs
IG93bmVyLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4
ZWMpLmltcGwoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCisgICAgICAg
IHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1ib2woa2V5
LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX2NlbGxLZXllZFRhYmxl
LCBrZXkudmFsdWUuYXNDZWxsKCksIGtleSk7CisgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwg
bV92YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBKU1ZhbHVlIE1hcERhdGFJbXBsPEVu
dHJ5Pjo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKEVudHJ5
KiBlbnRyeSA9IGZpbmQoZXhlYywga2V5KSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT52YWx1ZSgp
LmdldCgpOworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5PgoraW5saW5lIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUoRXhlY1N0YXRlKiBl
eGVjLCBLZXlUeXBlIGtleSkKK3sKKyAgICBpbnQzMl90IGxvY2F0aW9uOworICAgIGlmIChrZXku
dmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFi
bGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOworICAgICAg
ICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAgICAgIG1fc3Ry
aW5nS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSAgZWxzZSBpZiAoa2V5LnZhbHVlLmlz
U3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQo
YXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChp
dGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zeW1ib2xLZXll
ZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVsc2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkg
eworICAgICAgICBhdXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFz
Q2VsbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsK
KyAgICAgICAgbV9jZWxsS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYXV0byBpdGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUo
a2V5LnZhbHVlKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZh
bHVlOworICAgICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfQorICAg
IG1fZW50cmllc1tsb2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2RlbGV0ZWRDb3VudCsrOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lk
IE1hcERhdGFJbXBsPEVudHJ5Pjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRl
c3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVChzaG91bGRQYWNr
KCkpOworICAgIGludDMyX3QgbmV3RW5kID0gMDsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBh
Y2l0eSA+IDApOworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Cisg
ICAgICAgIEVudHJ5JiBlbnRyeSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAgaWYgKCFlbnRyeS5r
ZXkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQobmV3RW5kIDwgbmV3
Q2FwYWNpdHkpOworICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7CisKKyAgICAg
ICAgLy8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5kZXgg
Zm9yIHRoZSBuZXcgZW50cnksCisgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBvdXIg
aGFzaCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFsCisgICAgICAgIC8vIGhh
c2ggbG9va3VwcworICAgICAgICBlbnRyeS5zZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVt
YmVyKG5ld0VuZCkpOworICAgICAgICBuZXdFbmQrKzsKKyAgICB9CisKKyAgICAvLyBGaXh1cCBm
b3IgdGhlIGhhc2htYXBzCisgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJl
Z2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0
ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOwor
ICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2Nl
bGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmll
c1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9
IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVu
ZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5r
ZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRU
YWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAg
ICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0lu
dDMyKCk7CisKKyAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQp
OworICAgIG1fZGVsZXRlZENvdW50ID0gMDsKKworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKKyAgICBtX3NpemUgPSBuZXdFbmQ7CisgICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50
cnk+OjpyZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdD
YXBhY2l0eSkKK3sKKyAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQobmV3Q2FwYWNpdHkgPiAwKTsKKyAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0
eSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBt
X3NpemUpOworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX2VudHJpZXMgPSBk
ZXN0aW5hdGlvbjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gTWFwRGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIpCit7CisgICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6
bWF4KG1fY2FwYWNpdHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4obWluaW11bU1hcFNpemUpKTsKKyAgICB2b2lkKiBuZXdTdG9yYWdlID0gbnVsbHB0cjsKKyAg
ICBEZWZlckdDIGRlZmVyKCpleGVjLT5oZWFwKCkpOworICAgIGlmICghZXhlYy0+aGVhcCgpLT50
cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZu
ZXdTdG9yYWdlKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNf
Y2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOworICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAgICAg
IHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7Cisg
ICAgZWxzZQorICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVk
U2l6ZSk7CisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERh
dGFJbXBsPEVudHJ5Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBpZiAoIWVu
dHJpZXMpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKKyAgICAg
ICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlm
ICghZW50cmllc1tpXS5rZXkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGVudHJpZXNbaV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEd1YXJhbnRlZWQgdGhhdCBhbGwgZmllbGRzIG9mIEVudHJ5IHR5
cGUgaXMgV3JpdGVCYXJyaWVyPFVua25vd24+LgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwg
bV9zaXplICogKHNpemVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkp
OworICAgIH0KKworICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVD
b3B5VG9rZW4sIGVudHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvcHlCYWNraW5n
U3RvcmUoQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBpZiAo
dG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3Vs
ZENvcHkobV9lbnRyaWVzKSkgeworICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmll
czsKKyAgICAgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMoKSkpOworICAgICAgICBpZiAoc2hv
dWxkUGFjaygpKQorICAgICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50
cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxhY2VCYWNr
aW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29w
eShvbGRFbnRyaWVzLCBjYXBhY2l0eUluQnl0ZXMoKSk7CisgICAgfQorfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAppbmRleCA1NDgyMjI3
Njk0MDBiNzE4NTJhZjdkYjhiNzVlZjUwNzU0NGVkZDRmLi42ZDdhMTFkOGZiYmI0ZTE1YTQzMTZm
ZTU4ODFhZDBkNzE0MDUwOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcFByb3RvdHlwZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9u
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5o
IgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Niw0MSAr
NzYsNDEgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7
CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNN
YXAqIGdldE1hcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAg
ICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2Fs
bEZyYW1lLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7Ci0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgSlNN
YXAqIG1hcCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwogICAgIGlmICghbWFw
KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJNYXAg
b3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbWFwLT5tYXBEYXRh
KCk7CisgICAgcmV0dXJuIG1hcDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBk
YXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAg
IGlmICghZGF0YSkKKyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZGF0YS0+Y2xlYXIoKTsKKyAgICBtYXAtPmNsZWFy
KGNhbGxGcmFtZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNN
YXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJlbW92ZShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4obWFwLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0Zv
ckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1h
cERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEp
CisgICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMTIyLDE0ICsxMjIsMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7CiAgICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsQmFjayk7CiAgICAgICAgIENh
Y2hlZENhbGwgY2FjaGVkQ2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCAyKTsKLSAgICAgICAgZm9y
IChhdXRvIHB0ciA9IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBwdHIgIT0gZW5k
ICYmICF2bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0byBwdHIgPSBt
YXAtPmJlZ2luKCksIGVuZCA9IG1hcC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRp
b24oKTsgKytwdHIpIHsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyh0aGlzVmFsdWUp
OwogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBwdHIudmFsdWUoKSk7CiAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIHB0ci5rZXkoKSk7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAoYXV0byBwdHIgPSBkYXRhLT5iZWdpbigpLCBlbmQgPSBkYXRhLT5lbmQoKTsgcHRyICE9
IGVuZCAmJiAhdm0tPmV4Y2VwdGlvbigpOyArK3B0cikgeworICAgICAgICBmb3IgKGF1dG8gcHRy
ID0gbWFwLT5iZWdpbigpLCBlbmQgPSBtYXAtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhj
ZXB0aW9uKCk7ICsrcHRyKSB7CiAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdz
OwogICAgICAgICAgICAgYXJncy5hcHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAgYXJn
cy5hcHBlbmQocHRyLmtleSgpKTsKQEAgLTE0MSwzOCArMTQxLDM2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNNYXAqIG1h
cCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICgh
bWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gZGF0YS0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUobWFwLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTTWFwKiBt
YXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAo
IW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5jb250YWlucyhjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4obWFwLT5oYXMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CisgICAgSlNNYXAqIG1hcCA9
IGdldE1hcChjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZGF0YS0+c2V0KGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBt
YXAtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTaXplKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTTWFwKiBtYXAg
PSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIW1h
cCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGRhdGEtPnNpemUoY2FsbEZyYW1lKSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobWFwLT5zaXplKGNhbGxGcmFtZSkp
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNWYWx1ZXMo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0UHJvdG90eXBlLmNwcAppbmRleCBmODhlYTdjZjk4NjhmNjY4YjhjMmU4ODgxNWZmNjVjZjM5
OTI3YjQ5Li42YTZjNDliNDhlMGM2YTkwYzkzMDc2OTlkOGNkNzliNGM5NWQyYzUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2V0
LmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNp
bmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CkBAIC03NSw1MCArNzUsNTEgQEAgdm9pZCBTZXRQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAg
ICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBh
Y2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGlj
IE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1Zh
bHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTZXQqIGdldFNldChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3Qo
KSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVOb3RBbk9iamVjdEVy
cm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgSlNTZXQqIHNldCA9IGpzRHluYW1pY0Nhc3Q8SlNT
ZXQqPih0aGlzVmFsdWUpOwogICAgIGlmICghc2V0KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9y
KGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0
IG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KLSAgICByZXR1cm4gc2V0LT5tYXBEYXRhKCk7CisgICAgcmV0dXJuIHNldDsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOworICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQo
Y2FsbEZyYW1lLCB0aGlzVmFsdWUpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgc2V0LT5hZGQo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRoaXNWYWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0
UHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0
YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBp
ZiAoIWRhdGEpCisgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPmNsZWFyKCk7CisgICAgc2V0LT5jbGVhcihj
YWxsRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTU2V0
KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIXNldCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5yZW1vdmUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHNldC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JF
YWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBE
YXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQor
ICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIXNldCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTEzMCwxMyArMTMxLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewogICAgICAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEJhY2spOwogICAgICAgICBDYWNo
ZWRDYWxsIGNhY2hlZENhbGwoY2FsbEZyYW1lLCBmdW5jdGlvbiwgMSk7Ci0gICAgICAgIGZvciAo
YXV0byBwdHIgPSBkYXRhLT5iZWdpbigpLCBlbmQgPSBkYXRhLT5lbmQoKTsgcHRyICE9IGVuZCAm
JiAhdm0tPmV4Y2VwdGlvbigpOyArK3B0cikgeworICAgICAgICBmb3IgKGF1dG8gcHRyID0gc2V0
LT5iZWdpbigpLCBlbmQgPSBzZXQtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhjZXB0aW9u
KCk7ICsrcHRyKSB7CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXModGhpc1ZhbHVlKTsK
ICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcHRyLmtleSgpKTsKICAgICAg
ICAgICAgIGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZm9yIChhdXRvIHB0ciA9IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBwdHIg
IT0gZW5kICYmICF2bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0byBw
dHIgPSBzZXQtPmJlZ2luKCksIGVuZCA9IHNldC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5l
eGNlcHRpb24oKTsgKytwdHIpIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CiAgICAgICAgICAgICBhcmdzLmFwcGVuZChwdHIua2V5KCkpOwogICAgICAgICAgICAgSlND
OjpjYWxsKGNhbGxGcmFtZSwgY2FsbEJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVl
LCBhcmdzKTsKQEAgLTE0NywxOCArMTQ4LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc2V0UHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNTZXQqIHNldCA9IGdldFNldChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRhaW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihz
ZXQtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1NldCogc2V0ID0gZ2V0
U2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFzZXQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihkYXRhLT5zaXplKGNhbGxGcmFtZSkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHNldC0+c2l6ZShjYWxsRnJhbWUpKSk7CiB9
CiAgICAgCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1ZhbHVlcyhD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRl
eCBhNzMyNGI0YWRmMWRlODc3Yjc0NjA2OGRhNTQxM2RhYmY1M2I1NTRjLi5lOGZjMGUzMjBiNWNh
M2FlMTMzYmE4ZjQ2YWE1OGVjNTljN2UxZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCkBAIC0yMzMsNyArMjMzLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMs
IFVubGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBV
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBtYXBEYXRhU3Ry
dWN0dXJlLnNldCgqdGhpcywgTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlT
RVMpCiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCmluZGV4IDk0YzQ4M2I3MjM2MDIyODNlZDQwZGE1NWRlZDI5NTUzYTAz
MTc4MjUuLjdlNzFkZWY5YzdhNTBmOTdmY2U2YTFiOTk3YjYwN2M2YWFmYjljNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjY4LDcgKzI2OCw2IEBAIGNsYXNzIFZNIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiB7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5s
aW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJv
cGVydHlUYWJsZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBtYXBEYXRhU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogI2lmIEVO
QUJMRShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1
Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL01hcERhdGFJbmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL01hcERhdGFJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhY2E2MmQ0MzkyZDI1YjY2NDIy
NjM4NzkwZGM3NDcyZjIwZDFlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAtMCwwICsxLDQgQEAK
KyNpZm5kZWYgV2ViQ29yZV9GV0RfTWFwRGF0YUlubGlpbmVzX2gKKyNkZWZpbmUgV2ViQ29yZV9G
V0RfTWFwRGF0YUlubGlpbmVzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXBEYXRhSW5s
aW5lcy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5ZjlmMjU5Y2U2NzkyODQyNDc4OWEzZDM0YmVm
MzkyYTU3ODlhY2FlLi43MWNjNTI2ZDBmNjFkM2FiOGY0MWQ3MzNiNTBlMmE0ZGNlY2FkZGUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTU2V0Lmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NYXBE
YXRhLmg+CisjaW5jbHVkZSA8cnVudGltZS9NYXBEYXRhSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KQEAgLTg3LDcgKzg4LDggQEAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1GaWx0ZXJSZWN1cnNpb24gPSA0MDAwMDsKIAog
ZW51bSBXYWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0
YXJ0VmlzaXRNZW1iZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsCiAgICAgT2JqZWN0U3RhcnRTdGF0
ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIsCi0gICAgTWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeSwgTWFwRGF0YUVuZFZpc2l0S2V5LCBNYXBEYXRhRW5kVmlzaXRW
YWx1ZSB9OworICAgIE1hcERhdGFTdGFydFZpc2l0RW50cnksIE1hcERhdGFFbmRWaXNpdEtleSwg
TWFwRGF0YUVuZFZpc2l0VmFsdWUsCisgICAgU2V0RGF0YVN0YXJ0VmlzaXRFbnRyeSwgU2V0RGF0
YUVuZFZpc2l0S2V5IH07CiAKIC8vIFRoZXNlIGNhbid0IGJlIHJlb3JkZXJlZCwgYW5kIGFueSBu
ZXcgdHlwZXMgbXVzdCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiBlbnVtIFNlcmlh
bGl6YXRpb25UYWcgewpAQCAtMTIyLDggKzEyNCw5IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7
CiAgICAgU2V0T2JqZWN0VGFnID0gMjksCiAgICAgTWFwT2JqZWN0VGFnID0gMzAsCiAgICAgTm9u
TWFwUHJvcGVydGllc1RhZyA9IDMxLAorICAgIE5vblNldFByb3BlcnRpZXNUYWcgPSAzMiwKICNp
ZiBFTkFCTEUoU1VCVExFX0NSWVBUTykKLSAgICBDcnlwdG9LZXlUYWcgPSAzMiwKKyAgICBDcnlw
dG9LZXlUYWcgPSAzMywKICNlbmRpZgogICAgIEVycm9yVGFnID0gMjU1CiB9OwpAQCAtMjY2LDkg
KzI2OSwxMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgTm9uSW5kZXhQcm9wZXJ0aWVzVGFnID0g
MHhGRkZGRkZGRDsKICAqCiAgKiBNYXAgOi0gTWFwT2JqZWN0VGFnIE1hcERhdGEKICAqCi0gKiBT
ZXQgOi0gU2V0T2JqZWN0VGFnIE1hcERhdGEKKyAqIFNldCA6LSBTZXRPYmplY3RUYWcgU2V0RGF0
YQogICoKLSAqIE1hcERhdGEgOi0gKDxrZXk6VmFsdWU+PHZhbHVlOlZhbHVlPikgTm9uTWFwUHJv
cGVydGllc1RhZyAoPG5hbWU6U3RyaW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRh
ZworICogTWFwRGF0YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+KSogTm9uTWFwUHJvcGVy
dGllc1RhZyAoPG5hbWU6U3RyaW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZwor
ICogU2V0RGF0YSA6LSAoPGtleTpWYWx1ZT4pKiBOb25TZXRQcm9wZXJ0aWVzVGFnICg8bmFtZTpT
dHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFnCiAgKgogICogVGVybWluYWwg
Oi0KICAqICAgICAgVW5kZWZpbmVkVGFnCkBAIC0xMjE2LDkgKzEyMjAsMTEgQEAgU2VyaWFsaXph
dGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAg
ICBWZWN0b3I8dWludDMyX3QsIDE2PiBsZW5ndGhTdGFjazsKICAgICBWZWN0b3I8UHJvcGVydHlO
YW1lQXJyYXksIDE2PiBwcm9wZXJ0eVN0YWNrOwogICAgIFZlY3RvcjxKU09iamVjdCosIDMyPiBp
bnB1dE9iamVjdFN0YWNrOwotICAgIFZlY3RvcjxNYXBEYXRhKiwgND4gbWFwRGF0YVN0YWNrOwot
ICAgIFZlY3RvcjxNYXBEYXRhOjpjb25zdF9pdGVyYXRvciwgND4gaXRlcmF0b3JTdGFjazsKLSAg
ICBWZWN0b3I8SlNWYWx1ZSwgND4gaXRlcmF0b3JWYWx1ZVN0YWNrOworICAgIFZlY3RvcjxKU01h
cCosIDQ+IG1hcFN0YWNrOworICAgIFZlY3RvcjxKU01hcDo6Y29uc3RfaXRlcmF0b3IsIDQ+IG1h
cEl0ZXJhdG9yU3RhY2s7CisgICAgVmVjdG9yPEpTU2V0KiwgND4gc2V0U3RhY2s7CisgICAgVmVj
dG9yPEpTU2V0Ojpjb25zdF9pdGVyYXRvciwgND4gc2V0SXRlcmF0b3JTdGFjazsKKyAgICBWZWN0
b3I8SlNWYWx1ZSwgND4gbWFwSXRlcmF0b3JWYWx1ZVN0YWNrOwogICAgIFZlY3RvcjxXYWxrZXJT
dGF0ZSwgMTY+IHN0YXRlU3RhY2s7CiAgICAgV2Fsa2VyU3RhdGUgc3RhdGUgPSBTdGF0ZVVua25v
d247CiAgICAgSlNWYWx1ZSBpblZhbHVlID0gaW47CkBAIC0xMzUwLDM2ICsxMzU2LDIxIEBAIFNl
cmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUg
aW4pCiAgICAgICAgICAgICAgICAgSlNNYXAqIGluTWFwID0ganNDYXN0PEpTTWFwKj4oaW5WYWx1
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE1hcChpbk1hcCkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBpbk1hcC0+
bWFwRGF0YSgpOwotICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG1hcERhdGEpOwot
ICAgICAgICAgICAgICAgIG1hcERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgaXRlcmF0b3JTdGFjay5hcHBlbmQobWFwRGF0YS0+YmVnaW4oKSk7CisgICAgICAgICAg
ICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoaW5NYXApOworICAgICAgICAgICAgICAgIG1hcFN0YWNr
LmFwcGVuZChpbk1hcCk7CisgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5hcHBlbmQo
aW5NYXAtPmJlZ2luKCkpOwogICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5k
KGluTWFwKTsKICAgICAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKGluVmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0
T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrT3ZlcmZsb3dFcnJvcjsKLSAgICAgICAgICAgICAgICBKU1Nl
dCogaW5TZXQgPSBqc0Nhc3Q8SlNTZXQqPihpblZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXN0YXJ0U2V0KGluU2V0KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IGluU2V0LT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICAg
ICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAgICAgICAgbWFwRGF0YVN0
YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvclN0YWNrLmFwcGVu
ZChtYXBEYXRhLT5iZWdpbigpKTsKLSAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFw
cGVuZChpblNldCk7Ci0gICAgICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5
OwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeToKICAg
ICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTogewotICAgICAgICAgICAgICAg
IE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yJiBwdHIgPSBpdGVyYXRvclN0YWNrLmxhc3QoKTsKLSAg
ICAgICAgICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0gbWFwRGF0YVN0YWNrLmxhc3QoKTsKLSAg
ICAgICAgICAgICAgICBpZiAocHRyID09IG1hcERhdGEtPmVuZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBt
YXBEYXRhU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIEpTTWFwOjpjb25zdF9p
dGVyYXRvciYgcHRyID0gbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAg
SlNNYXAqIG1hcCA9IG1hcFN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09
IG1hcC0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1hcFN0YWNrLnJlbW92ZUxhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFz
dCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KG9i
amVjdCkgfHwganNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOwogICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsK
ICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRp
ZXNUYWcpOwpAQCAtMTM4OCwyMiArMTM3OSw2MCBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBD
bG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpblZhbHVlID0gcHRyLmtleSgpOwogICAgICAgICAgICAgICAgIG1f
Z2NCdWZmZXIuYXBwZW5kKHB0ci52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvclZh
bHVlU3RhY2suYXBwZW5kKHB0ci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXBJdGVyYXRv
clZhbHVlU3RhY2suYXBwZW5kKHB0ci52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBzdGF0ZVN0
YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRLZXkpOwogICAgICAgICAgICAgICAgIGdvdG8gc3Rh
dGVVbmtub3duOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBNYXBEYXRhRW5kVmlz
aXRLZXk6IHsKLSAgICAgICAgICAgICAgICBpblZhbHVlID0gaXRlcmF0b3JWYWx1ZVN0YWNrLmxh
c3QoKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvclZhbHVlU3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgIGluVmFsdWUgPSBtYXBJdGVyYXRvclZhbHVlU3RhY2subGFzdCgpOwor
ICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAg
ICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoTWFwRGF0YUVuZFZpc2l0VmFsdWUpOwogICAg
ICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRWYWx1ZTogewotICAgICAgICAgICAgICAgIGlmIChpdGVy
YXRvclN0YWNrLmxhc3QoKSAhPSBtYXBEYXRhU3RhY2subGFzdCgpLT5lbmQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgKytpdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAo
bWFwSXRlcmF0b3JTdGFjay5sYXN0KCkgIT0gbWFwU3RhY2subGFzdCgpLT5lbmQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgKyttYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAg
ICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAg
ICAgIHNldFN0YXJ0U3RhdGU6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09i
amVjdCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5wdXRPYmplY3RTdGFjay5zaXplKCkgPiBt
YXhpbXVtRmlsdGVyUmVjdXJzaW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tP
dmVyZmxvd0Vycm9yOworICAgICAgICAgICAgICAgIEpTU2V0KiBpblNldCA9IGpzQ2FzdDxKU1Nl
dCo+KGluVmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghc3RhcnRTZXQoaW5TZXQpKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVu
ZChpblNldCk7CisgICAgICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKGluU2V0KTsKKyAgICAg
ICAgICAgICAgICBzZXRJdGVyYXRvclN0YWNrLmFwcGVuZChpblNldC0+YmVnaW4oKSk7CisgICAg
ICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5hcHBlbmQoaW5TZXQpOworICAgICAgICAgICAg
ICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNldERhdGFTdGFydFZpc2l0RW50cnk6CisgICAgICAgICAgICBjYXNlIFNldERhdGFTdGFy
dFZpc2l0RW50cnk6IHsKKyAgICAgICAgICAgICAgICBKU1NldDo6Y29uc3RfaXRlcmF0b3ImIHB0
ciA9IHNldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIEpTU2V0KiBzZXQg
PSBzZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHB0ciA9PSBzZXQtPmVuZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAgICAgICAgICAgICBzZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihvYmplY3QpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXko
bV9leGVjKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0KCksIEV4
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25T
ZXRQcm9wZXJ0aWVzVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQo
MCk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHB0ci5rZXkoKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChTZXREYXRhRW5kVmlzaXRLZXkpOworICAg
ICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBTZXREYXRhRW5kVmlzaXRLZXk6IHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0SXRl
cmF0b3JTdGFjay5sYXN0KCkgIT0gc2V0U3RhY2subGFzdCgpLT5lbmQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgKytzZXRJdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBnb3Rv
IHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHN0
YXRlVW5rbm93bjoKICAgICAgICAgICAgIGNhc2UgU3RhdGVVbmtub3duOiB7CiAgICAgICAgICAg
ICAgICAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgdGVybWluYWxDb2RlID0gU3VjY2Vzc2Z1bGx5
Q29tcGxldGVkOwpAQCAtMjM2MCw5ICsyMzg5LDEwIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVy
IDogQ2xvbmVCYXNlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY29uc3VtZU1hcERh
dGFUZXJtaW5hdGlvbklmUG9zc2libGUoKQorICAgIHRlbXBsYXRlPFNlcmlhbGl6YXRpb25UYWcg
VGFnPgorICAgIGJvb2wgY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRpb25JZlBvc3NpYmxl
KCkKICAgICB7Ci0gICAgICAgIGlmIChyZWFkVGFnKCkgPT0gTm9uTWFwUHJvcGVydGllc1RhZykK
KyAgICAgICAgaWYgKHJlYWRUYWcoKSA9PSBUYWcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgbV9wdHItLTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM4NCw4ICsyNDE0
LDkgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6
ZSgpCiAgICAgVmVjdG9yPHVpbnQzMl90LCAxNj4gaW5kZXhTdGFjazsKICAgICBWZWN0b3I8SWRl
bnRpZmllciwgMTY+IHByb3BlcnR5TmFtZVN0YWNrOwogICAgIFZlY3RvcjxKU09iamVjdCosIDMy
PiBvdXRwdXRPYmplY3RTdGFjazsKLSAgICBWZWN0b3I8SlNWYWx1ZSwgND4ga2V5U3RhY2s7Ci0g
ICAgVmVjdG9yPE1hcERhdGEqLCA0PiBtYXBEYXRhU3RhY2s7CisgICAgVmVjdG9yPEpTVmFsdWUs
IDQ+IG1hcEtleVN0YWNrOworICAgIFZlY3RvcjxKU01hcCosIDQ+IG1hcFN0YWNrOworICAgIFZl
Y3RvcjxKU1NldCosIDQ+IHNldFN0YWNrOwogICAgIFZlY3RvcjxXYWxrZXJTdGF0ZSwgMTY+IHN0
YXRlU3RhY2s7CiAgICAgV2Fsa2VyU3RhdGUgc3RhdGUgPSBTdGF0ZVVua25vd247CiAgICAgSlNW
YWx1ZSBvdXRWYWx1ZTsKQEAgLTI0NzgsNDEgKzI1MDksNTMgQEAgRGVzZXJpYWxpemF0aW9uUmVz
dWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgICAgICAgICBKU01hcCog
bWFwID0gSlNNYXA6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1
Y3R1cmUoKSk7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChtYXApOwogICAgICAgICAg
ICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG1hcCk7Ci0gICAgICAgICAgICBNYXBEYXRhKiBt
YXBEYXRhID0gbWFwLT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5k
KG1hcERhdGEpOwotICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwotICAg
ICAgICB9Ci0gICAgICAgIHNldE9iamVjdFN0YXJ0U3RhdGU6IHsKLSAgICAgICAgICAgIGlmIChv
dXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dF
cnJvcik7Ci0gICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMtPnZt
KCksIG1fZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZChzZXQpOwotICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKHNl
dCk7Ci0gICAgICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0gc2V0LT5tYXBEYXRhKCk7Ci0gICAg
ICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5kKG1hcERhdGEpOworICAgICAgICAgICAgbWFwU3Rh
Y2suYXBwZW5kKG1hcCk7CiAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7
CiAgICAgICAgIH0KICAgICAgICAgbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeToKICAgICAgICAgY2Fz
ZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7Ci0gICAgICAgICAgICBpZiAoY29uc3VtZU1hcERh
dGFUZXJtaW5hdGlvbklmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIG1hcERhdGFTdGFj
ay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVy
bWluYXRpb25JZlBvc3NpYmxlPE5vbk1hcFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAgICAgICAg
ICAgICBtYXBTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgZ290byBvYmplY3RT
dGFydFZpc2l0TWVtYmVyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdGVTdGFjay5h
cHBlbmQoTWFwRGF0YUVuZFZpc2l0S2V5KTsKICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3du
OwogICAgICAgICB9Ci0KICAgICAgICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRLZXk6IHsKLSAgICAg
ICAgICAgIGtleVN0YWNrLmFwcGVuZChvdXRWYWx1ZSk7CisgICAgICAgICAgICBtYXBLZXlTdGFj
ay5hcHBlbmQob3V0VmFsdWUpOwogICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoTWFwRGF0
YUVuZFZpc2l0VmFsdWUpOwogICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAg
IH0KLQogICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICBt
YXBEYXRhU3RhY2subGFzdCgpLT5zZXQobV9leGVjLCBrZXlTdGFjay5sYXN0KCksIG91dFZhbHVl
KTsKLSAgICAgICAgICAgIGtleVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIG1hcFN0
YWNrLmxhc3QoKS0+c2V0KG1fZXhlYywgbWFwS2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7Cisg
ICAgICAgICAgICBtYXBLZXlTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBnb3RvIG1h
cERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgIH0KKworICAgICAgICBzZXRPYmplY3RTdGFy
dFN0YXRlOiB7CisgICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4
aW11bUZpbHRlclJlY3Vyc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93RXJyb3IpOworICAgICAgICAgICAgSlNTZXQqIHNl
dCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0
dXJlKCkpOworICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAg
IG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOworICAgICAgICAgICAgc2V0U3RhY2suYXBw
ZW5kKHNldCk7CisgICAgICAgICAgICBnb3RvIHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAg
ICAgIH0KKyAgICAgICAgc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeToKKyAgICAgICAgY2FzZSBTZXRE
YXRhU3RhcnRWaXNpdEVudHJ5OiB7CisgICAgICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25E
YXRhVGVybWluYXRpb25JZlBvc3NpYmxlPE5vblNldFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBv
YmplY3RTdGFydFZpc2l0TWVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVT
dGFjay5hcHBlbmQoU2V0RGF0YUVuZFZpc2l0S2V5KTsKKyAgICAgICAgICAgIGdvdG8gc3RhdGVV
bmtub3duOworICAgICAgICB9CisgICAgICAgIGNhc2UgU2V0RGF0YUVuZFZpc2l0S2V5OiB7Cisg
ICAgICAgICAgICBKU1NldCogc2V0ID0gc2V0U3RhY2subGFzdCgpOworICAgICAgICAgICAgc2V0
LT5zZXQobV9leGVjLCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBnb3RvIHNldERhdGFTdGFydFZp
c2l0RW50cnk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0ZVVua25vd246CiAgICAgICAgIGNh
c2UgU3RhdGVVbmtub3duOgogICAgICAgICAgICAgaWYgKEpTVmFsdWUgdGVybWluYWwgPSByZWFk
VGVybWluYWwoKSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM1NDE2ZjRlNzliMDMxYzkyOGJmYzlmOWMwZTBjMDgwMTVk
YjZkZDEuLjIwN2ZiMGUxMTdmOGU5YmQ5YmQ0N2IwYWZiYWE5NWJjZTE3ZTE0OTIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxNS0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KKworICAgICAgICBJbnRlZ3JhdGUgTWFwRGF0YSBpbnRvIEpTTWFwIGFuZCBKU1Nl
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTU2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBz
dHJ1Y3R1cmUtY2xvbmUgaW1wbGVtZW50YXRpb24gdGhhdCBiZWNvbWVzIGF3YXJlIG9mIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gTWFwIGFuZCBTZXQuCisKKyAgICAgICAgKiBmYXN0L3N0b3JhZ2Uv
c2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRtbDoKKwogMjAxNS0wMy0xMSAgTXlsZXMgQy4gTWF4
ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFRlc3QgZ2FyZGVu
aW5nIGFmdGVyIHIxODEyNjAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9z
ZXJpYWxpemVkLXNjcmlwdC12YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3Nl
cmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwKaW5kZXggNDM1ZDA3ZmJiYWY2NzAwOThiOTJkYzg1
YmMxZTY1YmRiYmQ4OWIwMy4uY2JjNTI0YmE2ZGZlNDlkOGE0YmYwOTU0MTg1Y2JkZGU0ZTUyY2I3
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0
LXZhbHVlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2Ny
aXB0LXZhbHVlLmh0bWwKQEAgLTQxNSwxNiArNDE1LDE0IEBACiAKIHRlc3RTZXJpYWxpemF0aW9u
KHNldE9iamVjdCwKIFsKLSAgICAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDA3LCAw
eDA3LCAweDBhLCAweDAwLCAKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4
LCAweDNmLCAweDBhLCAweDAwLCAKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eGY4LCAweDNmLCAweDEzLCAweDAwLCAKLSAgICAweDEzLCAweDAwLCAweDEwLCAweDAzLCAweDAw
LCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAKLSAgICAweDYxLCAweDAwLCAweDcyLCAweDAwLCAw
eDEwLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAKLSAgICAweDAwLCAweDFhLCAweGZlLCAweGZm
LCAweGZmLCAweGZmLCAweDAwLCAweDEzLCAweDAxLCAKLSAgICAweDFmLCAweDA3LCAweDAwLCAw
eDAwLCAweDAwLCAweDY1LCAweDAwLCAweDc4LCAweDAwLCAKLSAgICAweDcwLCAweDAwLCAweDYx
LCAweDAwLCAweDZlLCAweDAwLCAweDY0LCAweDAwLCAweDZmLCAKLSAgICAweDAwLCAweDAyLCAw
eGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAKLSAgICAweGZmCisgICAg
MHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNywgMHgwYSwgMHgwMCwgMHgwMCwKKyAg
ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDNmLCAweDEzLCAweDAwLCAweDEwLAor
ICAgIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzIs
CisgICAgMHgwMCwgMHgxYSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgyMCwgMHgw
NywKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDY1LCAweDAwLCAweDc4LCAweDAwLCAweDcwLCAw
eDAwLAorICAgIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIDB4MDAs
IDB4MDIsCisgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhm
ZgorCiBdKTsKIAogdGVzdFNlcmlhbGl6YXRpb24oZnVuY3Rpb24oKXt9LCBbXSwgbnVsbCwgRE9N
RXhjZXB0aW9uLkRBVEFfQ0xPTkVfRVJSKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248536</attachid>
            <date>2015-03-12 13:26:28 -0700</date>
            <delta_ts>2015-03-12 13:43:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150313052601.patch</filename>
            <type>text/plain</type>
            <size>83577</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NTRiNTA0ZDczOTRiNzlhNGI4Y2Y2NDE1NzMwMjg0ODMxMWI4ZjNiLi5iZmI3ZDU0NTk5NTI1ZWFi
MTIyMGU1OWI2MDNiNTk2NWU3Y2E0MTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDkgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgTWFwRGF0YUltcGwgaXMgc3BlY2lhbGl6ZWQgaW50byBNYXBEYXRhIGFuZCBTZXREYXRh
LgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBTZXREYXRhLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBk
dW1teSB2YWx1ZXMKKyAgICAgICAgcHJldmlvdXNseSBzdG9yZWQgaW4gdGhlIE1hcERhdGFJbXBs
LiBTbyB0aGUgc3RvcmFnZSBzaXplIG9mIFNldERhdGEKKyAgICAgICAgYmVjb21lcyB0aGUgaGFs
ZiBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQW5kIG5vdyBNYXBE
YXRhIGFuZCBTZXREYXRhIGFyZSBjb21wbGV0ZWx5IGludGVncmF0ZWQgaW50byBKU01hcCBhbmQg
SlNTZXQsCisgICAgICAgIHRoZXNlIHN0cnVjdHVyZXMgYXJlIG5vdCBleHBvc2VkIHRvIHRoZSBv
dGhlciBjb2RlIGV2ZW4gaW4gV2ViQ29yZSB3b3JsZC4KKworICAgICAgICBBbmQgYXQgdGhlIHNh
bWUgdGltZSwgdGhpcyBwYXRjaCBmaXhlcyBtaXNzaW5nIGRlc3Ryb3kgZnVuY3Rpb25zCisgICAg
ICAgIGluIEpTTWFwSXRlcmF0b3IgYW5kIEpTU2V0SXRlcmF0b3IuCisgICAgICAgIFRoZXkgYXJl
IG5lZWRlZCBiZWNhdXNlIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIGlzIGEgbm9uLXRyaXZpYWwg
ZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9K
U01hcC5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6
SlNNYXA6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU01hcDo6Y29weUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpoYXMpOgorICAgICAgICAoSlNDOjpKU01hcDo6
c2l6ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpnZXQpOgorICAgICAgICAoSlNDOjpKU01hcDo6
c2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNNYXA6
OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU01hcC5oOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6
OmtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmFsdWUpOgorICAgICAgICAoSlND
OjpKU01hcDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50
cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5V2l0aG91dFdy
aXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0VmFsdWUpOgorICAg
ICAgICAoSlNDOjpKU01hcDo6RW50cnk6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmVuZCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpK
U01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjptYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9y
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6
SlNNYXBJdGVyYXRvcik6CisgICAgICAgICogcnVudGltZS9KU1NldC5jcHA6CisgICAgICAgIChK
U0M6OkpTU2V0OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU1NldDo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjpoYXMpOgorICAgICAgICAoSlNDOjpKU1NldDo6c2l6ZSk6CisgICAgICAgIChKU0M6
OkpTU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpKU1NldDo6Y2xlYXIpOgorICAgICAgICAoSlND
OjpKU1NldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmZpbmlzaENyZWF0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2V0Lmg6CisgICAgICAgIChKU0M6OkpTU2V0
OjpFbnRyeTo6a2V5KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
U2V0OjpFbnRyeTo6c2V0S2V5KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXlX
aXRob3V0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpK
U1NldDo6YmVnaW4pOgorICAgICAgICAoSlNDOjpKU1NldDo6ZW5kKToKKyAgICAgICAgKEpTQzo6
SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6Om1hcERhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL01hcENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAgICAgICAgKiBydW50aW1lL01h
cERhdGEuaDoKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjprZXkp
OgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDo6Y29uc3RfaXRlcmF0b3I6OnZhbHVlKToKKyAg
ICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OnNpemUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1w
bDxFbnRyeT46Ok1hcERhdGFJbXBsKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+
OjpjbGVhcik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6S2V5VHlwZTo6S2V5
VHlwZSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6
OmludGVybmFsSW5jcmVtZW50KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+Ojpj
b25zdF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVu
dHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6TWFw
RGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IpOgor
ICAgICAgICAoSlNDOjo9KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6
OmtleSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjp2
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcERhdGE6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRh
OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OktleVR5cGU6OktleVR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6aW50
ZXJuYWxJbmNyZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9p
dGVyYXRvcjo6ZW5zdXJlU2xvdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNv
bnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjp+Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IqKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmVuZCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0pOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvTWFwRGF0YUlubGluZXMuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwLgorICAgICAgICAoSlNDOjpN
YXBEYXRhSW1wbDxFbnRyeT46OmZpbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRy
eT46OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjphZGQpOgor
ICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnNldCk6CisgICAgICAgIChKU0M6Ok1h
cERhdGFJbXBsPEVudHJ5Pjo6Z2V0KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxhY2VBbmRQ
YWNrQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpyZXBs
YWNlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjplbnN1
cmVTcGFjZUZvckFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tp
bmdTdG9yZSk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpnZXRNYXApOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNDbGVhcik6CisgICAgICAg
IChKU0M6Om1hcFByb3RvRnVuY0RlbGV0ZSk6CisgICAgICAgIChKU0M6Om1hcFByb3RvRnVuY0Zv
ckVhY2gpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNHZXQpOgorICAgICAgICAoSlNDOjpt
YXBQcm90b0Z1bmNIYXMpOgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNTZXQpOgorICAgICAg
ICAoSlNDOjptYXBQcm90b0Z1bmNTaXplKToKKyAgICAgICAgKEpTQzo6Z2V0TWFwRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpnZXRTZXQpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNBZGQpOgorICAgICAgICAoSlND
OjpzZXRQcm90b0Z1bmNDbGVhcik6CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0RlbGV0ZSk6
CisgICAgICAgIChKU0M6OnNldFByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjpzZXRQ
cm90b0Z1bmNIYXMpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNTaXplKToKKyAgICAgICAg
KEpTQzo6Z2V0TWFwRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAz
LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIGV2ZW50
IGhhbmRsZXIgZml4ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMDdiNDkyMDEyNmNkZDk4YTNmNDVkNWI0ZGYy
ZDNlMDk0NmIyMDMxLi5iYTVjMDI3NTI1OGYwOTczYTdlNGNlZjI4OGQzNmQwMWE3NjYwMDBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBK
U01hcCBhbmQgSlNTZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MjU1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE5vdyBTZXQgaGFzIFNldERhdGEgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gTWFwRGF0
YS4KKyAgICAgICAgQW5kIE1hcERhdGEvU2V0RGF0YSBhcmUgY29tcGxldGVseSBpbnRlZ3JhdGVk
IGludG8gSlNTZXQgYW5kIEpTTWFwLgorICAgICAgICBTdHJ1Y3R1cmVkLWNsb25pbmcgYWxnb3Jp
dGhtIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlc2UgY2hhbmdlcy4KKyAgICAgICAgQW5kIGluIHRo
ZSBjYXNlIG9mIEpTU2V0LCBzaW5jZSBKU1NldCBkb2Vzbid0IG5lZWQgZHVtbXkgdmFsdWUgZm9y
IGNvbnN0cnVjdGlvbiwKKyAgICAgICAgU3RydWN0dXJlZC1jbG9uaW5nIG9ubHkgc2VyaWFsaXpl
IHRoZSBrZXlzIGluIEpTU2V0LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9NYXBEYXRhSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpz
ZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmNvbnN1bWVD
b2xsZWN0aW9uRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OmNvbnN1bWVNYXBEYXRhVGVybWluYXRpb25JZlBvc3NpYmxlKTogRGVsZXRl
ZC4KKwogMjAxNS0wMy0xMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE4MTM2Ny4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjMTRlNjU4ZDA4OTY4ZDI4N2RkN2QzM2ViOTIwNTNi
OTJkMTY5NzNhLi45M2E2MWZkNzdlMmNkYTg1NjRkMmRmNDQxNzk1ZjRjMGQxYzY4ZTUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01MDUsNyArNTA1LDYgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5j
cHAKICAgICBydW50aW1lL0xvb2t1cC5jcHAKICAgICBydW50aW1lL01hcENvbnN0cnVjdG9yLmNw
cAotICAgIHJ1bnRpbWUvTWFwRGF0YS5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50
aW1lL01hcFByb3RvdHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTlh
MTk2ZjY2MDk1ZmNkMTFhMzBiZGY1MjdhMDhhNGNkOWRmZjJiNi4uNTY5ZWFkM2Q3MjI2YWFmZWQx
NDUyY2MxYjYzMDQzMjc0YjI2ZjM5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEzMzAsOCArMTMzMCw4IEBACiAJCUE3N0YxODI1MTY0MTkyQzcwMDY0MEE0NyAvKiBQYXJzZXJN
b2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3
RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFD
IC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NEEyNjQxMUQxNjYy
MjAwNTc3NkFDIC8qIFN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QTdFRTc3MTFCOThCOEQwMDY1QTE0RiAvKiBTeW50YXhDaGVj
a2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
QTc4NTA3RDYxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuY3BwICovOyB9OwogCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc4NTA3
RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUgLyogTWFw
RGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODVGNkJDMThDNTUz
RkUwMEYxMDYyNiAvKiBTcGlsbFJlZ2lzdGVyc01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RkY2NDdBMThDNTJFODUwMEI1NTMwNyAvKiBTcGls
bFJlZ2lzdGVyc01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
Nzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87
IH07CiAJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg4NTNG
ODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMDM4LDggKzMwMzgsOCBA
QAogCQlBNzdGMTgxRjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3N0YxODIwMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJNb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBNzg1MDdENDE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTc4NTA3RDUxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1OTNENDNDQ0EwQkJFMDZEODlDNTk3MDcgLyogTWFwRGF0YUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwRGF0YUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc4QTk3NkMxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdGYWlsZWRGaW5hbGl6ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0ZhaWxlZEZp
bmFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDgxLDggKzQ0ODEs
OCBAQAogCQkJCUY2OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKIAkJCQlB
NzAwODczNzE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3
MDA4NzM4MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oICovLAotCQkJCUE3ODUw
N0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLywKIAkJCQlBNzg1MDdENTE3Q0JD
NkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLAorCQkJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcw
NyAvKiBNYXBEYXRhSW5saW5lcy5oICovLAogCQkJCUE3NERFRjhCMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzRERUY4QzE4MkQ5OTE0MDA1
MjJDMjIgLyogTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3NERFRjhEMTgyRDk5
MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgKi8sCkBAIC02MTAzLDYgKzYx
MDMsNyBAQAogCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyog
TWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEE2NDQxNTE5NDIwQTZDNjFBRDE4ODJFIC8q
IE1hcERhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5MjE4MkQ5OTE0MDA1
MjJDMjIgLyogTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
REVGOTQxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTcyNDgsNyArNzI0OSw2IEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAw
NTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE1QjZBNzREMThDNkRCQTYwMEYxMUU5MSAvKiBDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDA4NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MTE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRl
cmF0b3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0
MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTcwMDg3M0QxN0NCRThEMzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAppbmRleCBjMDhhOTcwOGJl
NDVhOTM0OTU1MjM0YjMwNTc2NjBkNzgxNjc1MGY0Li40NDEwMDZkYjM4YWYzMjE4MDA1ZGFhZjYz
NmFmMTNiOWI3M2YwOWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3Bw
CkBAIC0yNywyNiArMjcsNjIgQEAKICNpbmNsdWRlICJKU01hcC5oIgogCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFwRGF0
YUlubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIAorCiBjb25zdCBDbGFz
c0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNNYXApIH07CiAKK3ZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQoreworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5+SlNNYXAoKTsKK30KKwogdm9pZCBKU01h
cDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgSlNNYXAqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9tYXBEYXRhKTsKKyAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CiB9CiAKLXZvaWQgSlNNYXA6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3ZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBD
b3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQogewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKLSAgICBtX21hcERhdGEuc2V0KHZtLCB0aGlzLCBNYXBEYXRhOjpjcmVh
dGUodm0pKTsKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2Vu
KTsKKyAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUo
dmlzaXRvciwgdG9rZW4pOwogfQogCitib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGtleSkKK3sKKyAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7
Cit9CisKK3NpemVfdCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IG1fbWFwRGF0YS5zaXplKGV4ZWMpOworfQorCitKU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSkKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5n
ZXQoZXhlYywga2V5KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgbV9tYXBEYXRhLnNl
dChleGVjLCB0aGlzLCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0
YXRlKikKK3sKKyAgICBtX21hcERhdGEuY2xlYXIoKTsKK30KKworYm9vbCBKU01hcDo6cmVtb3Zl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCit7CisgICAgcmV0dXJuIG1fbWFwRGF0YS5y
ZW1vdmUoZXhlYywga2V5KTsKK30KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
LmgKaW5kZXggNDMxNTI3NGRlM2U5ODU3YzViYmUwODM1MTM3NTY5YTc3MTY0NmUwNS4uZDZmMjU5
YmYzMTAzOWZiNzgwOGFmYjRhOGRhNmY5ZWQwYWM0ZWY4MyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcC5oCkBAIC0yNiwxNSArMjYsNjMgQEAKICNpZm5kZWYgSlNNYXBfaAogI2Rl
ZmluZSBKU01hcF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVj
dCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisgICAgLy8gZmll
bGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsKKyAgICBwcml2
YXRlOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworCisgICAgcHVibGljOgorICAgICAgICBjb25zdCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxV
bmtub3duPiYgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92
YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5
KTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBr
ZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1
ZSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoa2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mIHZtLCBjb25z
dCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBt
X3ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
Y2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2tleS5jbGVhcigpOworICAgICAgICAg
ICAgbV92YWx1ZS5jbGVhcigpOworICAgICAgICB9CisgICAgfTsKKworICAgIHR5cGVkZWYgTWFw
RGF0YUltcGw8RW50cnk+IE1hcERhdGE7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCkBA
IC01NSwxOSArMTAzLDM1IEBAIGNsYXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQog
Ci0gICAgTWFwRGF0YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQoKTsgfQorICAg
IHR5cGVkZWYgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBE
YXRhLmJlZ2luKCk7CisgICAgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXBEYXRhLmVuZCgpOworICAgIH0KKyAgICBib29sIGhhcyhF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKKyAgICBK
U1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICB2b2lkIHNldChFeGVjU3RhdGUq
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUq
KTsKKyAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogcHJpdmF0ZToKICAg
ICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX21hcERhdGEoKQogICAgIHsKICAgICB9CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0KKyAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAotICAgIFdyaXRlQmFycmllcjxNYXBE
YXRhPiBtX21hcERhdGE7CisgICAgTWFwRGF0YSBtX21hcERhdGE7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCmluZGV4IGMxNjdh
Y2JjZjNhM2E5YjdjNGNlNWNhNzI4YTM4MTVjYmI5NmNiYmUuLmU5ZDdkNDJmYjRlMzhlZDMxN2Nk
NjJiZjA2NDJjYzExNWYxZTYzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCkBAIC00MCwxNSArNDAsMTkgQEAgdm9pZCBKU01hcEl0ZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTTWFwKiBpdGVyYXRlZE9iamVjdCkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBpdGVy
YXRlZE9iamVjdCk7Ci0gICAgbV9pdGVyYXRlZE9iamVjdERhdGEuc2V0KHZtLCB0aGlzLCBpdGVy
YXRlZE9iamVjdC0+bWFwRGF0YSgpKTsKK30KKwordm9pZCBKU01hcEl0ZXJhdG9yOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpLT5+SlNN
YXBJdGVyYXRvcigpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU01hcEl0ZXJhdG9yKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihjZWxsKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7ICAgICAgICAKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9pdGVyYXRlZE9iamVjdERhdGEpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX21hcCk7CiB9CiAKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgKaW5kZXggNjNkZDVlOGIxMWY5
NmE0NDYxYWRkNWNlYTNjNDQ3YWRjNjAwNDBjYy4uYWI4N2IzYWZlY2Y0Y2I3NWU4ZDlkOTgwZTk4
MWQ2YThhYTY4MTNlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuaApAQCAtODIsMTggKzgyLDE4IEBAIGNsYXNzIEpTTWFwSXRlcmF0b3IgOiBwdWJs
aWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHJpdmF0ZToKICAgICBKU01hcEl0ZXJhdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgTWFwSXRl
cmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAg
LCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCktPmJlZ2luKCkpCisgICAgICAg
ICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+YmVnaW4oKSkKICAgICAgICAgLCBtX2tpbmQo
a2luZCkKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0
ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
TWFwPiBtX21hcDsKLSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4gbV9pdGVyYXRlZE9iamVjdERh
dGE7Ci0gICAgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKKyAgICBKU01hcDo6
Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKICAgICBNYXBJdGVyYXRpb25LaW5kIG1fa2luZDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAppbmRleCAzYzFkMTI0
YmM1NjJkYjZkYzFiYTAwYzk2M2JhNTQ5M2U2MDM3Mzc3Li44ZmM1NjM3Njk2M2E1Nzc3ZmEyNTRm
Y2RlNTk3ODZmNWQ0YTIwMmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
Y3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNTZXQuaCIKIAogI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERh
dGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlSW5saW5lcy5oIgogCkBAIC0zNSwxNyArMzUsNDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAordm9pZCBKU1NldDo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPn5KU1NldCgpOwor
fQorCiB2b2lkIEpTU2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAg
ICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwp
LT5tX3NldERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKK30KKwordm9pZCBKU1Nl
dDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBD
b3B5VG9rZW4gdG9rZW4pCit7CisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNp
dG9yLCB0b2tlbik7CisgICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFj
a2luZ1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKK30KKworYm9vbCBKU1NldDo6aGFzKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9zZXREYXRhLmNvbnRhaW5z
KGV4ZWMsIHZhbHVlKTsKK30KKworc2l6ZV90IEpTU2V0OjpzaXplKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gbV9zZXREYXRhLnNpemUoZXhlYyk7Cit9CisKK3ZvaWQgSlNTZXQ6OmFk
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgbV9zZXREYXRhLnNldChl
eGVjLCB0aGlzLCB2YWx1ZSwgdmFsdWUpOworfQorCit2b2lkIEpTU2V0OjpjbGVhcihFeGVjU3Rh
dGUqKQoreworICAgIG1fc2V0RGF0YS5jbGVhcigpOwogfQogCi12b2lkIEpTU2V0OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCitib29sIEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBtX21hcERh
dGEuc2V0KHZtLCB0aGlzLCBNYXBEYXRhOjpjcmVhdGUodm0pKTsKKyAgICByZXR1cm4gbV9zZXRE
YXRhLnJlbW92ZShleGVjLCB2YWx1ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NldC5oCmluZGV4IGZjMGFhMzBmYjk1N2NiODlmOTVlNTY3ZWYxNjBjZjgxNTAzZTI1MmUu
LjNlM2MwZWMyYTRiYjM4ZmFiZjY0ZmNkNzE1NjM2ZTM2Y2RlNzczZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXQuaApAQCAtMjYsMTUgKzI2LDU5IEBACiAjaWZuZGVmIEpTU2V0
X2gKICNkZWZpbmUgSlNTZXRfaAogCisjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIE1hcERhdGE7Ci0KLWNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qgewog
cHVibGljOgotICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHR5cGVkZWYg
SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKworICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9u
cyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAorICAg
IC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KKyAgICBjbGFzcyBFbnRyeSB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OworCisgICAg
cHVibGljOgorICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9rZXk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEtl
eShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5KQorICAgICAgICB7
CisgICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtleSk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fa2V5LmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdHlw
ZWRlZiBNYXBEYXRhSW1wbDxFbnRyeT4gU2V0RGF0YTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKQEAgLTU1LDE5ICs5OSwzNCBAQCBjbGFzcyBKU1NldCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwog
ICAgIH0KIAotICAgIE1hcERhdGEqIG1hcERhdGEoKSB7IHJldHVybiBtX21hcERhdGEuZ2V0KCk7
IH0KKyAgICB0eXBlZGVmIFNldERhdGE6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwor
CisgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc2V0RGF0YS5iZWdpbigpOworICAgIH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0RGF0YS5lbmQoKTsKKyAgICB9CisgICAgYm9v
bCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKik7
CisgICAgdm9pZCBhZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgdm9pZCBjbGVhcihFeGVj
U3RhdGUqKTsKKyAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKIAogcHJpdmF0
ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3NldERhdGEoKQogICAgIHsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Ci0gICAgCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgV3JpdGVCYXJyaWVyPE1h
cERhdGE+IG1fbWFwRGF0YTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2Vs
bCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIFNldERhdGEgbV9zZXREYXRhOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9y
LmNwcAppbmRleCAyZmMyOTg5MDE3Njg3M2U0NGJiOTMxNTI0YzVmMDNlZGEwNGYzNzVlLi41ZWNh
YzEyZDljNGNhMjI3NWVkZGFkOWU3ODk3ODU0OGM5N2U3YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcApAQCAtNDAsMTUgKzQwLDE5IEBA
IHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1NldCogaXRlcmF0
ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fc2V0LnNl
dCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIG1faXRlcmF0ZWRPYmplY3REYXRhLnNl
dCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKSk7CiB9CiAKIHZvaWQgSlNTZXRJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIEpTU2V0SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXRJdGVyYXRv
cio+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsgICAgICAgIAorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwot
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0YSk7Cisg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKK30KKwordm9pZCBKU1NldEl0
ZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXRJdGVyYXRv
cio+KGNlbGwpLT5+SlNTZXRJdGVyYXRvcigpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6
OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZh
bHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCmlu
ZGV4IDljNzBjMjZlNTBhMmI1ZDk1ZThkYzgxZGZkMTlkYWFkNDI1MDdiZDcuLmIwNjNjNTEwOTZi
MDlkN2VhZGNiOTRiOGZmNGY5ZDRjNDFiZmNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKQEAgLTgwLDE4ICs4MCwxOCBAQCBjbGFzcyBKU1Nl
dEl0ZXJhdG9yIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHByaXZhdGU6CiAgICAg
SlNTZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0
ZWRPYmplY3QsIFNldEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCi0gICAgICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bWFwRGF0YSgpLT5i
ZWdpbigpKQorICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPmJlZ2luKCkpCiAg
ICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgewogICAgIH0KIAorICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0Kik7CiAg
ICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAg
IFdyaXRlQmFycmllcjxKU1NldD4gbV9zZXQ7Ci0gICAgV3JpdGVCYXJyaWVyPE1hcERhdGE+IG1f
aXRlcmF0ZWRPYmplY3REYXRhOwotICAgIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0
b3I7CisgICAgSlNTZXQ6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3I7CiAgICAgU2V0SXRlcmF0
aW9uS2luZCBtX2tpbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYWVkNDZkYzMwZmM2YTNkYTMwYmZhNTY0YTA3Yzgx
MDczODlmY2RhNS4uYWI1NTgzOTQ5MGI4ZWZjMDAyMTZlYzJkOWVmMWQyZGZhOTFiMzZiNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcApA
QCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RNYXAoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CiAKLSAgICBKU1Zh
bHVlIGFkZGVyRnVuY3Rpb24gPSBtYXAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
c2V0KTsKKyAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMDU2OTFjODUyYWIyZmQyYmIzZTU0N2E0Y2RjMDlkZTM2Y2IxN2ZlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWFwRGF0
YS5oIgotCi0jaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0
b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgotI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0KLSNp
bmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8g
TWFwRGF0YTo6c19pbmZvID0geyAiTWFwRGF0YSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
TWFwRGF0YSkgfTsKLQotc3RhdGljIGNvbnN0IGludDMyX3QgbWluaW11bU1hcFNpemUgPSA4Owot
Ci1NYXBEYXRhOjpNYXBEYXRhKFZNJiB2bSkKLSAgICA6IEJhc2Uodm0sIHZtLm1hcERhdGFTdHJ1
Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2NhcGFjaXR5KDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAs
IG1fZGVsZXRlZENvdW50KDApCi0gICAgLCBtX2l0ZXJhdG9yQ291bnQoMCkKLSAgICAsIG1fZW50
cmllcygwKQotewotfQotCi1NYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6ZmluZChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygp
KSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFzU3RyaW5n
KGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsKLSAgICAgICAgaWYgKGl0ZXIg
PT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0gICAgaWYgKGtleS52
YWx1ZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJs
ZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwotICAgICAg
ICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotICAgIH0KLSAg
ICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtl
eWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBt
X2NlbGxLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVlXTsKLSAgICB9Ci0KLSAgICBhdXRvIGl0ZXIgPSBt
X3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpKTsKLSAgICBp
ZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotfQotCi1ib29sIE1hcERhdGE6OmNv
bnRhaW5zKENhbGxGcmFtZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICByZXR1cm4g
ZmluZChjYWxsRnJhbWUsIGtleSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVu
YW1lIEtleT4gTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgTWFwJiBtYXAsIEtleSBrZXksIEtleVR5cGUga2V5VmFsdWUpCi17Ci0gICAgdHlwZW5hbWUg
TWFwOjppdGVyYXRvciBsb2NhdGlvbiA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGxvY2F0aW9u
ICE9IG1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbbG9jYXRpb24tPnZhbHVl
XTsKLSAgICAKLSAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGNhbGxGcmFtZSkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9zaXplKTsK
LSAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgRW50cnkqIGVudHJ5
ID0gJm1fZW50cmllc1ttX3NpemUrK107Ci0gICAgbmV3IChlbnRyeSkgRW50cnkoKTsKLSAgICBl
bnRyeS0+a2V5LnNldChjYWxsRnJhbWUtPnZtKCksIHRoaXMsIGtleVZhbHVlLnZhbHVlKTsKLSAg
ICByZXR1cm4gZW50cnk7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6c2V0KENhbGxGcmFtZSogY2FsbEZy
YW1lLCBLZXlUeXBlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBFbnRyeSogbG9jYXRpb24g
PSBhZGQoY2FsbEZyYW1lLCBrZXkpOwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVy
bjsKLSAgICBsb2NhdGlvbi0+dmFsdWUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgdGhpcywgdmFsdWUp
OwotfQotICAgIAotTWFwRGF0YTo6RW50cnkqIE1hcERhdGE6OmFkZChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKGtleS52YWx1ZS5pc1N0cmluZygpKQotICAg
ICAgICByZXR1cm4gYWRkKGNhbGxGcmFtZSwgbV9zdHJpbmdLZXllZFRhYmxlLCBhc1N0cmluZyhr
ZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSwga2V5KTsKLSAgICBpZiAoa2V5LnZh
bHVlLmlzU3ltYm9sKCkpCi0gICAgICAgIHJldHVybiBhZGQoY2FsbEZyYW1lLCBtX3N5bWJvbEtl
eWVkVGFibGUsIGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCksIGtleSk7
Ci0gICAgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIGFkZChjYWxsRnJh
bWUsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1ZS5hc0NlbGwoKSwga2V5KTsKLSAgICByZXR1
cm4gYWRkKGNhbGxGcmFtZSwgbV92YWx1ZUtleWVkVGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXku
dmFsdWUpLCBrZXkpOwotfQotCi1KU1ZhbHVlIE1hcERhdGE6OmdldChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgS2V5VHlwZSBrZXkpCi17Ci0gICAgaWYgKEVudHJ5KiBlbnRyeSA9IGZpbmQoY2FsbEZy
YW1lLCBrZXkpKQotICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlLmdldCgpOwotICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci19Ci0KLWJvb2wgTWFwRGF0YTo6cmVtb3ZlKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpbnQzMl90IGxvY2F0aW9uOwotICAgIGlmIChrZXku
dmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFi
bGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShjYWxsRnJhbWUpLmltcGwoKSk7Ci0g
ICAgICAgIGlmIChpdGVyID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKLSAgICAgICAg
bV9zdHJpbmdLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9ICBlbHNlIGlmIChrZXkudmFs
dWUuaXNTeW1ib2woKSkgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFibGUu
ZmluZChhc1N5bWJvbChrZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpKTsKLSAgICAgICAg
aWYgKGl0ZXIgPT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAgICBtX3N5bWJv
bEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxzZSBpZiAoa2V5LnZhbHVlLmlzQ2Vs
bCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFs
dWUuYXNDZWxsKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZh
bHVlOwotICAgICAgICBtX2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVu
Y29kZShrZXkudmFsdWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9uID0gaXRl
ci0+dmFsdWU7Ci0gICAgICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKLSAgICB9
Ci0gICAgbV9lbnRyaWVzW2xvY2F0aW9uXS5rZXkuY2xlYXIoKTsKLSAgICBtX2VudHJpZXNbbG9j
YXRpb25dLnZhbHVlLmNsZWFyKCk7Ci0gICAgbV9kZWxldGVkQ291bnQrKzsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShFbnRy
eSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3Q2FwYWNpdHkpCi17Ci0gICAgQVNTRVJUKHNob3Vs
ZFBhY2soKSk7Ci0gICAgaW50MzJfdCBuZXdFbmQgPSAwOwotICAgIFJFTEVBU0VfQVNTRVJUKG5l
d0NhcGFjaXR5ID4gMCk7Ci0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKysp
IHsKLSAgICAgICAgRW50cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOwotICAgICAgICBpZiAoIWVu
dHJ5LmtleSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQobmV3RW5kIDwg
bmV3Q2FwYWNpdHkpOwotICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7Ci0KLSAg
ICAgICAgLy8gV2Ugb3ZlcndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5k
ZXggZm9yIHRoZSBuZXcgZW50cnksCi0gICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBv
dXIgaGFzaCB0YWJsZXMgYmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFsCi0gICAgICAgIC8v
IGhhc2ggbG9va3VwcwotICAgICAgICBlbnRyeS52YWx1ZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGpzTnVtYmVyKG5ld0VuZCkpOwotICAgICAgICBuZXdFbmQrKzsKLSAgICB9Ci0KLSAgICAvLyBG
aXh1cCBmb3IgdGhlIGhhc2htYXBzCi0gICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRh
YmxlLmJlZ2luKCk7IHB0ciAhPSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCi0gICAg
ICAgIHB0ci0+dmFsdWUgPSBtX2VudHJpZXNbcHRyLT52YWx1ZV0udmFsdWUuZ2V0KCkuYXNJbnQz
MigpOwotICAgIGZvciAoYXV0byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAh
PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1f
ZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRv
IHB0ciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRh
YmxlLmVuZCgpOyArK3B0cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZh
bHVlXS52YWx1ZS5nZXQoKS5hc0ludDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9s
S2V5ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0
cikKLSAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQo
KS5hc0ludDMyKCk7Ci0KLSAgICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVk
Q291bnQpOwotICAgIG1fZGVsZXRlZENvdW50ID0gMDsKLQotICAgIG1fY2FwYWNpdHkgPSBuZXdD
YXBhY2l0eTsKLSAgICBtX3NpemUgPSBuZXdFbmQ7Ci0gICAgbV9lbnRyaWVzID0gZGVzdGluYXRp
b247Ci0KLX0KLQotdm9pZCBNYXBEYXRhOjpyZXBsYWNlQmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0
aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoIXNob3VsZFBhY2so
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNpdHkgPiAwKTsKLSAgICBBU1NFUlQobmV3
Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2VudHJp
ZXMsIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOwotICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0
eTsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKLX0KLQotQ2hlY2tlZEJvb2xlYW4gTWFw
RGF0YTo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
aWYgKG1fY2FwYWNpdHkgPiBtX3NpemUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgc2l6
ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6bWF4KG1fY2FwYWNpdHkgKyAobV9jYXBhY2l0eSAvIDIp
ICsgMSwgbWluaW11bU1hcFNpemUpOwotICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSAwOwotICAgIERl
ZmVyR0MgZGVmZXIoKmNhbGxGcmFtZS0+aGVhcCgpKTsKLSAgICBpZiAoIWNhbGxGcmFtZS0+aGVh
cCgpLT50cnlBbGxvY2F0ZVN0b3JhZ2UodGhpcywgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5
KSwgJm5ld1N0b3JhZ2UpKSB7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJh
bWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEVudHJ5KiBuZXdFbnRyaWVz
ID0gc3RhdGljX2Nhc3Q8RW50cnkqPihuZXdTdG9yYWdlKTsKLSAgICBpZiAoc2hvdWxkUGFjaygp
KQotICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCByZXF1aXJl
ZFNpemUpOwotICAgIGVsc2UKLSAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShuZXdFbnRyaWVz
LCByZXF1aXJlZFNpemUpOwotICAgIGNhbGxGcmFtZS0+aGVhcCgpLT53cml0ZUJhcnJpZXIodGhp
cyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWFwRGF0YTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAgTWFwRGF0YSogdGhpc09iamVjdCA9IGpzQ2FzdDxN
YXBEYXRhKj4oY2VsbCk7Ci0gICAgRW50cnkqIGVudHJpZXMgPSB0aGlzT2JqZWN0LT5tX2VudHJp
ZXM7Ci0gICAgaWYgKCFlbnRyaWVzKQotICAgICAgICByZXR1cm47Ci0gICAgc2l6ZV90IHNpemUg
PSB0aGlzT2JqZWN0LT5tX3NpemU7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1fZGVsZXRlZENvdW50
KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
ICAgICBpZiAoIWVudHJpZXNbaV0ua2V5KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmVudHJpZXNbaV0ua2V5KTsKLSAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZlbnRyaWVzW2ldLnZhbHVlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygmZW50cmllc1swXS5rZXksIHNpemUgKiAoc2l6
ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0KLSAgICB2aXNp
dG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVudHJp
ZXMsIHRoaXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLX0KLQotdm9pZCBNYXBEYXRhOjpj
b3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlU
b2tlbiB0b2tlbikKLXsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1hcERhdGEq
PihjZWxsKTsKLSAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV9lbnRyaWVzKSkgewotICAgICAg
ICBFbnRyeSogb2xkRW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50cmllczsKLSAgICAgICAgRW50
cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdT
cGFjZSh0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSkpOwotICAgICAgICBpZiAodGhpc09i
amVjdC0+c2hvdWxkUGFjaygpKQotICAgICAgICAgICAgdGhpc09iamVjdC0+cmVwbGFjZUFuZFBh
Y2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPnJlcGxhY2VCYWNraW5nU3RvcmUobmV3
RW50cmllcywgdGhpc09iamVjdC0+bV9jYXBhY2l0eSk7Ci0gICAgICAgIHZpc2l0b3IuZGlkQ29w
eShvbGRFbnRyaWVzLCB0aGlzT2JqZWN0LT5jYXBhY2l0eUluQnl0ZXMoKSk7Ci0gICAgfQotICAg
IEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotfQotCi12b2lk
IE1hcERhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PE1hcERh
dGEqPihjZWxsKS0+fk1hcERhdGEoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwRGF0YS5oCmluZGV4IGIxZDUzMDYyOTZlNTA0NmJkNDA3M2VlOTk5MThlYTZmZTRmYjE5
NDUuLmQzNDY2MzRhNTA3NGY0NDgzOWE2MGFiMzhkYzIyYTE3YTRkMmQwMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmgKQEAgLTI3LDI1ICsyNywyOSBAQAogI2RlZmlu
ZSBNYXBEYXRhX2gKIAogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xh
c3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwgeworY2xhc3MgRXhlY1N0YXRlOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK2NsYXNzIE1hcERhdGFJbXBsIHsKIHB1YmxpYzoKLSAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOworICAgIGVudW0gOiBpbnQzMl90IHsKKyAgICAgICAgbWluaW11bU1h
cFNpemUgPSA4CisgICAgfTsKIAogICAgIHN0cnVjdCBjb25zdF9pdGVyYXRvciB7Ci0gICAgICAg
IGNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqKTsKKyAgICAgICAgY29uc3RfaXRlcmF0b3Io
Y29uc3QgTWFwRGF0YUltcGwqKTsKICAgICAgICAgfmNvbnN0X2l0ZXJhdG9yKCk7CiAgICAgICAg
IGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IG9wZXJhdG9yKigpIGNv
bnN0OwotICAgICAgICBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQoIWF0RW5k
KCkpOyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0ua2V5LmdldCgpOyB9Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFhdEVuZCgpKTsg
cmV0dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlLmdldCgpOyB9CisgICAg
ICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7IHJldHVy
biBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkoKS5nZXQoKTsgfQorICAgICAgICBK
U1ZhbHVlIHZhbHVlKCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRFbmQoKSk7IHJldHVybiBt
X21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS52YWx1ZSgpLmdldCgpOyB9CiAgICAgICAgIHZv
aWQgb3BlcmF0b3IrKygpIHsgQVNTRVJUKCFhdEVuZCgpKTsgaW50ZXJuYWxJbmNyZW1lbnQoKTsg
fQotICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1hcERhdGEqKTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0X2l0ZXJhdG9yIGVuZChjb25zdCBNYXBEYXRhSW1wbCopOwogICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKTsKICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcik7CiAgICAgICAg
IHZvaWQgZmluaXNoKCkgeyBtX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6
bWF4KCk7IH0KQEAgLTYwLDcgKzY0LDcgQEAgY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0NlbGwg
ewogICAgICAgICAvLyBmYXN0LgogICAgICAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2luZGV4KSA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbWFw
RGF0YS0+bV9zaXplKTsgfQogICAgICAgICB2b2lkIGludGVybmFsSW5jcmVtZW50KCk7Ci0gICAg
ICAgIGNvbnN0IE1hcERhdGEqIG1fbWFwRGF0YTsKKyAgICAgICAgY29uc3QgTWFwRGF0YUltcGwq
IG1fbWFwRGF0YTsKICAgICAgICAgaW50MzJfdCBtX2luZGV4OwogICAgIH07CiAKQEAgLTcwLDQ1
ICs3NCwyNSBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWU7CiAgICAgfTsKIAotICAgIHN0YXRpYyBNYXBEYXRhKiBjcmVhdGUoVk0mIHZtKQot
ICAgIHsKLSAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPE1hcERhdGE+KHZtLmhlYXApKSBNYXBEYXRhKHZtKTsKLSAgICAgICAgbWFwRGF0YS0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gbWFwRGF0YTsKLSAgICB9CisgICAgTWFw
RGF0YUltcGwoKTsKIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7Ci0KLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChDYWxsRnJhbWUqLCBLZXlUeXBlLCBKU1ZhbHVlKTsK
LSAgICBKU1ZhbHVlIGdldChDYWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIHJlbW92ZShD
YWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICBib29sIGNvbnRhaW5zKENhbGxGcmFtZSosIEtleVR5
cGUpOwotICAgIHNpemVfdCBzaXplKENhbGxGcmFtZSopIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSAt
IG1fZGVsZXRlZENvdW50OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXQoRXhlY1N0
YXRlKiwgSlNDZWxsKiBvd25lciwgS2V5VHlwZSwgSlNWYWx1ZSk7CisgICAgSlNWYWx1ZSBnZXQo
RXhlY1N0YXRlKiwgS2V5VHlwZSk7CisgICAgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiwgS2V5VHlw
ZSk7CisgICAgYm9vbCBjb250YWlucyhFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAgICBzaXplX3Qg
c2l6ZShFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiBtX3NpemUgLSBtX2RlbGV0ZWRDb3VudDsg
fQogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVy
YXRvcih0aGlzKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yOjplbmQodGhpcyk7IH0KIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjb3B5QmFj
a2luZ1N0b3JlKENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAogcHJpdmF0ZToKICAgICB0eXBl
ZGVmIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50MzJfdD4gSW5kZXhUcmFp
dHM7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVudHJ5IHRvIG1haW50
YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMgYmUgV3JpdGVCYXJy
aWVyPFVua25vd24+Ci0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IGtleTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOwotICAgIH07
Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDZWxsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpE
ZWZhdWx0SGFzaDxKU0NlbGwqPjo6SGFzaCwgV1RGOjpIYXNoVHJhaXRzPEpTQ2VsbCo+LCBJbmRl
eFRyYWl0cz4gQ2VsbEtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxFbmNvZGVkSlNWYWx1
ZSwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHMs
IEluZGV4VHJhaXRzPiBWYWx1ZUtleWVkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJ
bXBsKiwgaW50MzJfdCwgdHlwZW5hbWUgV1RGOjpEZWZhdWx0SGFzaDxTdHJpbmdJbXBsKj46Okhh
c2gsIFdURjo6SGFzaFRyYWl0czxTdHJpbmdJbXBsKj4sIEluZGV4VHJhaXRzPiBTdHJpbmdLZXll
ZE1hcDsKQEAgLTExNiwxOCArMTAwLDEyIEBAIGNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxs
IHsKIAogICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMoKSB7IHJldHVybiBtX2NhcGFjaXR5ICog
c2l6ZW9mKEVudHJ5KTsgfQogCi0gICAgTWFwRGF0YShWTSYpOwotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwg
Q29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwotCi0KLSAgICBBTFdBWVNfSU5MSU5FIEVudHJ5KiBm
aW5kKENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGFkZChD
YWxsRnJhbWUqLCBLZXlUeXBlKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTWFwLCB0eXBlbmFt
ZSBLZXk+IEFMV0FZU19JTkxJTkUgRW50cnkqIGFkZChDYWxsRnJhbWUqLCBNYXAmLCBLZXksIEtl
eVR5cGUpOworICAgIEFMV0FZU19JTkxJTkUgRW50cnkqIGZpbmQoRXhlY1N0YXRlKiwgS2V5VHlw
ZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3du
ZXIsIEtleVR5cGUpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4g
QUxXQVlTX0lOTElORSBFbnRyeSogYWRkKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3duZXIsIE1hcCYs
IEtleSwgS2V5VHlwZSk7CiAKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxkUGFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsZXRlZENvdW50ICYmICFtX2l0ZXJhdG9yQ291bnQ7IH0KLSAgICBD
aGVja2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChDYWxsRnJhbWUqKTsKKyAgICBDaGVj
a2VkQm9vbGVhbiBlbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqLCBKU0NlbGwqIG93bmVy
KTsKIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShF
bnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3U2l6ZSk7CiAgICAgQUxXQVlTX0lOTElORSB2
b2lkIHJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld1Np
emUpOwpAQCAtMTQzLDcgKzEyMSwxOCBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7
CiAgICAgRW50cnkqIG1fZW50cmllczsKIH07CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRh
OjpjbGVhcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0
YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCgpCisgICAgOiBtX2NhcGFjaXR5KDApCisgICAgLCBt
X3NpemUoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCisgICAgLCBtX2l0ZXJhdG9yQ291bnQo
MCkKKyAgICAsIG1fZW50cmllcyhudWxscHRyKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bnRyeT4KK0FMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNsZWFyKCkKIHsK
ICAgICBtX2NlbGxLZXllZFRhYmxlLmNsZWFyKCk7CiAgICAgbV92YWx1ZUtleWVkVGFibGUuY2xl
YXIoKTsKQEAgLTE1NSw3ICsxNDQsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YTo6Y2xl
YXIoKQogICAgIG1fZW50cmllcyA9IG51bGxwdHI7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0
YTo6S2V5VHlwZTo6S2V5VHlwZShKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4K
K0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+OjpLZXlUeXBlOjpLZXlUeXBlKEpTVmFs
dWUgdikKIHsKICAgICBpZiAoIXYuaXNEb3VibGUoKSkgewogICAgICAgICB2YWx1ZSA9IHY7CkBA
IC0xNzQsNTUgKzE2NCw2MiBAQCBBTFdBWVNfSU5MSU5FIE1hcERhdGE6OktleVR5cGU6OktleVR5
cGUoSlNWYWx1ZSB2KQogICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmludGVybmFsSW5jcmVtZW50KCkKIHsKICAgICBFbnRy
eSogZW50cmllcyA9IG1fbWFwRGF0YS0+bV9lbnRyaWVzOwogICAgIHNpemVfdCBpbmRleCA9IG1f
aW5kZXggKyAxOwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEtPm1fc2l6ZTsKLSAgICB3aGls
ZSAoaW5kZXggPCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSkKKyAgICB3aGlsZSAoaW5kZXgg
PCBlbmQgJiYgIWVudHJpZXNbaW5kZXhdLmtleSgpKQogICAgICAgICBpbmRleCsrOwogICAgIG1f
aW5kZXggPSBpbmRleDsKIH0KLSAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25z
dF9pdGVyYXRvcjo6ZW5zdXJlU2xvdCgpCisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxX
QVlTX0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmVuc3Vy
ZVNsb3QoKQogewogICAgIC8vIFdoZW4gYW4gaXRlcmF0b3IgZXhpc3RzIG91dHNpZGUgb2YgaG9z
dCBjb3N0IGl0IGlzIHBvc3NpYmxlIGZvcgogICAgIC8vIHRoZSBjb250YWluaW5nIG1hcCB0byBi
ZSBtb2RpZmllZAogICAgIEVudHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2VudHJpZXM7CiAg
ICAgc2l6ZV90IGluZGV4ID0gbV9pbmRleDsKICAgICBzaXplX3QgZW5kID0gbV9tYXBEYXRhLT5t
X3NpemU7Ci0gICAgaWYgKGluZGV4IDwgZW5kICYmIGVudHJpZXNbaW5kZXhdLmtleSkKKyAgICBp
ZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGludGVybmFsSW5jcmVtZW50KCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNp
emVfdD4obV9pbmRleCkgPCBlbmQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0YTo6Y29uc3Rf
aXRlcmF0b3I6OmNvbnN0X2l0ZXJhdG9yKGNvbnN0IE1hcERhdGEqIG1hcERhdGEpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25z
dF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YUltcGw8RW50cnk+KiBtYXBE
YXRhKQogICAgIDogbV9tYXBEYXRhKG1hcERhdGEpCiAgICAgLCBtX2luZGV4KC0xKQogewogICAg
IGludGVybmFsSW5jcmVtZW50KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgTWFwRGF0YTo6Y29uc3Rf
aXRlcmF0b3I6On5jb25zdF9pdGVyYXRvcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FM
V0FZU19JTkxJTkUgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0
ZXJhdG9yKCkKIHsKICAgICBtX21hcERhdGEtPm1faXRlcmF0b3JDb3VudC0tOwogfQogCi1BTFdB
WVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IE1hcERh
dGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
RW50cnk+CitBTFdBWVNfSU5MSU5FIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpT
VmFsdWU+IE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNv
bnN0CiB7CiAgICAgRW50cnkqIGVudHJ5ID0gJm1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhd
OwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+
a2V5LmdldCgpLCBlbnRyeS0+dmFsdWUuZ2V0KCkpOworICAgIHJldHVybiBXVEY6OktleVZhbHVl
UGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPihlbnRyeS0+a2V5KCkuZ2V0KCksIGVudHJ5LT52YWx1ZSgp
LmdldCgpKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25zdF9pdGVyYXRvciBNYXBE
YXRhOjpjb25zdF9pdGVyYXRvcjo6ZW5kKGNvbnN0IE1hcERhdGEqIG1hcERhdGEpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYXV0byBNYXBEYXRhSW1wbDxFbnRyeT46
OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YUltcGw8RW50cnk+KiBtYXBEYXRhKSAt
PiBjb25zdF9pdGVyYXRvcgogewogICAgIGNvbnN0X2l0ZXJhdG9yIHJlc3VsdChtYXBEYXRhKTsK
ICAgICByZXN1bHQubV9pbmRleCA9IC0xOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBj
b25zdF9pdGVyYXRvciYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19J
TkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9
KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKIHsKICAgICBBU1NFUlQob3RoZXIubV9tYXBE
YXRhID09IG1fbWFwRGF0YSk7CiAgICAgaWYgKGF0RW5kKCkgJiYgb3RoZXIuYXRFbmQoKSkKQEAg
LTIzMCw3ICsyMjcsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YTo6Y29uc3RfaXRlcmF0
b3I6Om9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aAogICAgIHJldHVybiBtX2lu
ZGV4ICE9IG90aGVyLm1faW5kZXg7CiB9CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpj
b25zdF9pdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhSW1wbDxF
bnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBv
dGhlcikKIHsKICAgICByZXR1cm4gISgqdGhpcyAhPSBvdGhlcik7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjJjNTNh
MmI3NTZkMDhhODlmMWVkYWRjNWE4NmE0Yjc1YWE3N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAtMCwwICsxLDI2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvcGllZEFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMu
aCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIk1hcERhdGEuaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworI2luY2x1ZGUgPHd0Zi9DcnlwdG9n
cmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
KworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIEVu
dHJ5KiBNYXBEYXRhSW1wbDxFbnRyeT46OmZpbmQoRXhlY1N0YXRlKiBleGVjLCBLZXlUeXBlIGtl
eSkKK3sKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgYXV0byBpdGVy
ID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhl
YykuaW1wbCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXIt
PnZhbHVlXTsKKyAgICB9CisgICAgaWYgKGtleS52YWx1ZS5pc1N5bWJvbCgpKSB7CisgICAgICAg
IGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSkt
PnByaXZhdGVOYW1lKCkudWlkKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVk
VGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2Vu
dHJpZXNbaXRlci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7
CisgICAgICAgIGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXND
ZWxsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2l0ZXItPnZhbHVl
XTsKKyAgICB9CisKKyAgICBhdXRvIGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFs
dWU6OmVuY29kZShrZXkudmFsdWUpKTsKKyAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJs
ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+
dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBib29sIE1hcERh
dGFJbXBsPEVudHJ5Pjo6Y29udGFpbnMoRXhlY1N0YXRlKiBleGVjLCBLZXlUeXBlIGtleSkKK3sK
KyAgICByZXR1cm4gZmluZChleGVjLCBrZXkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVuYW1lIEtleT4KK2lubGluZSBFbnRyeSog
TWFwRGF0YUltcGw8RW50cnk+OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBN
YXAmIG1hcCwgS2V5IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKK3sKKyAgICB0eXBlbmFtZSBNYXA6
Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKKyAgICBpZiAobG9jYXRpb24gIT0g
bWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+dmFsdWVdOwor
CisgICAgaWYgKCFlbnN1cmVTcGFjZUZvckFwcGVuZChleGVjLCBvd25lcikpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKGtleSwgbV9zaXplKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgRW50cnkqIGVudHJ5ID0gJm1f
ZW50cmllc1ttX3NpemUrK107CisgICAgbmV3IChlbnRyeSkgRW50cnkoKTsKKyAgICBlbnRyeS0+
c2V0S2V5KGV4ZWMtPnZtKCksIG93bmVyLCBrZXlWYWx1ZS52YWx1ZSk7CisgICAgcmV0dXJuIGVu
dHJ5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERhdGFJ
bXBsPEVudHJ5Pjo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgS2V5VHlwZSBr
ZXksIEpTVmFsdWUgdmFsdWUpCit7CisgICAgRW50cnkqIGxvY2F0aW9uID0gYWRkKGV4ZWMsIG93
bmVyLCBrZXkpOworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBsb2Nh
dGlvbi0+c2V0VmFsdWUoZXhlYy0+dm0oKSwgb3duZXIsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgRW50cnkqIE1hcERhdGFJbXBsPEVudHJ5Pjo6YWRkKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKGtl
eS52YWx1ZS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX3N0
cmluZ0tleWVkVGFibGUsIGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwg
a2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpCisgICAgICAgIHJldHVybiBhZGQo
ZXhlYywgb3duZXIsIG1fc3ltYm9sS2V5ZWRUYWJsZSwgYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJp
dmF0ZU5hbWUoKS51aWQoKSwga2V5KTsKKyAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX2NlbGxLZXllZFRhYmxlLCBrZXkudmFsdWUu
YXNDZWxsKCksIGtleSk7CisgICAgcmV0dXJuIGFkZChleGVjLCBvd25lciwgbV92YWx1ZUtleWVk
VGFibGUsIEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUpLCBrZXkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeT4KK2lubGluZSBKU1ZhbHVlIE1hcERhdGFJbXBsPEVudHJ5Pjo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgS2V5VHlwZSBrZXkpCit7CisgICAgaWYgKEVudHJ5KiBlbnRyeSA9IGZp
bmQoZXhlYywga2V5KSkKKyAgICAgICAgcmV0dXJuIGVudHJ5LT52YWx1ZSgpLmdldCgpOworICAg
IHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5l
IGJvb2wgTWFwRGF0YUltcGw8RW50cnk+OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBLZXlUeXBl
IGtleSkKK3sKKyAgICBpbnQzMl90IGxvY2F0aW9uOworICAgIGlmIChrZXkudmFsdWUuaXNTdHJp
bmcoKSkgeworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0
cmluZyhrZXkudmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCkpOworICAgICAgICBpZiAoaXRlciA9
PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAgICAgIG1fc3RyaW5nS2V5ZWRUYWJs
ZS5yZW1vdmUoaXRlcik7CisgICAgfSAgZWxzZSBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsK
KyAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5
LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fc3lt
Ym9sS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
bG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zeW1ib2xLZXllZFRhYmxlLnJlbW92
ZShpdGVyKTsKKyAgICB9IGVsc2UgaWYgKGtleS52YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBh
dXRvIGl0ZXIgPSBtX2NlbGxLZXllZFRhYmxlLmZpbmQoa2V5LnZhbHVlLmFzQ2VsbCgpKTsKKyAg
ICAgICAgaWYgKGl0ZXIgPT0gbV9jZWxsS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9j
ZWxsS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBp
dGVyID0gbV92YWx1ZUtleWVkVGFibGUuZmluZChKU1ZhbHVlOjplbmNvZGUoa2V5LnZhbHVlKSk7
CisgICAgICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOworICAgICAg
ICBtX3ZhbHVlS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7CisgICAgfQorICAgIG1fZW50cmllc1ts
b2NhdGlvbl0uY2xlYXIoKTsKKyAgICBtX2RlbGV0ZWRDb3VudCsrOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERhdGFJbXBs
PEVudHJ5Pjo6cmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBp
bnQzMl90IG5ld0NhcGFjaXR5KQoreworICAgIEFTU0VSVChzaG91bGRQYWNrKCkpOworICAgIGlu
dDMyX3QgbmV3RW5kID0gMDsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwor
ICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgIEVudHJ5
JiBlbnRyeSA9IG1fZW50cmllc1tpXTsKKyAgICAgICAgaWYgKCFlbnRyeS5rZXkoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQobmV3RW5kIDwgbmV3Q2FwYWNpdHkpOwor
ICAgICAgICBkZXN0aW5hdGlvbltuZXdFbmRdID0gZW50cnk7CisKKyAgICAgICAgLy8gV2Ugb3Zl
cndyaXRlIHRoZSBvbGQgZW50cnkgd2l0aCBhIGZvcndhcmRpbmcgaW5kZXggZm9yIHRoZSBuZXcg
ZW50cnksCisgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGZpeCB1cCBvdXIgaGFzaCB0YWJsZXMg
YmVsb3cgd2l0aG91dCBkb2luZyBhZGRpdGlvbmFsCisgICAgICAgIC8vIGhhc2ggbG9va3Vwcwor
ICAgICAgICBlbnRyeS5zZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKG5ld0VuZCkp
OworICAgICAgICBuZXdFbmQrKzsKKyAgICB9CisKKyAgICAvLyBGaXh1cCBmb3IgdGhlIGhhc2ht
YXBzCisgICAgZm9yIChhdXRvIHB0ciA9IG1fdmFsdWVLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAh
PSBtX3ZhbHVlS2V5ZWRUYWJsZS5lbmQoKTsgKytwdHIpCisgICAgICAgIHB0ci0+dmFsdWUgPSBt
X2VudHJpZXNbcHRyLT52YWx1ZV0ua2V5KCkuZ2V0KCkuYXNJbnQzMigpOworICAgIGZvciAoYXV0
byBwdHIgPSBtX2NlbGxLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX2NlbGxLZXllZFRhYmxl
LmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVl
XS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fc3RyaW5nS2V5
ZWRUYWJsZS5iZWdpbigpOyBwdHIgIT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpOyArK3B0cikK
KyAgICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5h
c0ludDMyKCk7CisgICAgZm9yIChhdXRvIHB0ciA9IG1fc3ltYm9sS2V5ZWRUYWJsZS5iZWdpbigp
OyBwdHIgIT0gbV9zeW1ib2xLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52
YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisKKyAg
ICBBU1NFUlQoKG1fc2l6ZSAtIG5ld0VuZCkgPT0gbV9kZWxldGVkQ291bnQpOworICAgIG1fZGVs
ZXRlZENvdW50ID0gMDsKKworICAgIG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX3Np
emUgPSBuZXdFbmQ7CisgICAgbV9lbnRyaWVzID0gZGVzdGluYXRpb247Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50cnk+OjpyZXBsYWNl
QmFja2luZ1N0b3JlKEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0eSkKK3sK
KyAgICBBU1NFUlQoIXNob3VsZFBhY2soKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3Q2FwYWNp
dHkgPiAwKTsKKyAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7CisgICAgbWVt
Y3B5KGRlc3RpbmF0aW9uLCBtX2VudHJpZXMsIHNpemVvZihFbnRyeSkgKiBtX3NpemUpOworICAg
IG1fY2FwYWNpdHkgPSBuZXdDYXBhY2l0eTsKKyAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gTWFw
RGF0YUltcGw8RW50cnk+OjplbnN1cmVTcGFjZUZvckFwcGVuZChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogb3duZXIpCit7CisgICAgaWYgKG1fY2FwYWNpdHkgPiBtX3NpemUpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHN0ZDo6bWF4KG1fY2FwYWNp
dHkgKyAobV9jYXBhY2l0eSAvIDIpICsgMSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obWluaW11bU1h
cFNpemUpKTsKKyAgICB2b2lkKiBuZXdTdG9yYWdlID0gbnVsbHB0cjsKKyAgICBEZWZlckdDIGRl
ZmVyKCpleGVjLT5oZWFwKCkpOworICAgIGlmICghZXhlYy0+aGVhcCgpLT50cnlBbGxvY2F0ZVN0
b3JhZ2Uob3duZXIsIHJlcXVpcmVkU2l6ZSAqIHNpemVvZihFbnRyeSksICZuZXdTdG9yYWdlKSkg
eworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgRW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+
KG5ld1N0b3JhZ2UpOworICAgIGlmIChzaG91bGRQYWNrKCkpCisgICAgICAgIHJlcGxhY2VBbmRQ
YWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAgZWxzZQorICAg
ICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVpcmVkU2l6ZSk7CisgICAg
ZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJpZXIob3duZXIpOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5
Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIG93bmVyLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBFbnRyeSogZW50cmllcyA9IG1fZW50cmllczsKKyAgICBpZiAoIWVudHJpZXMpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAobV9kZWxldGVkQ291bnQpIHsKKyAgICAgICAgZm9yIChpbnQz
Ml90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghZW50cmllc1tp
XS5rZXkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVudHJpZXNb
aV0udmlzaXRDaGlsZHJlbih2aXNpdG9yKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIEd1YXJhbnRlZWQgdGhhdCBhbGwgZmllbGRzIG9mIEVudHJ5IHR5cGUgaXMgV3JpdGVC
YXJyaWVyPFVua25vd24+LgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhyZWludGVycHJl
dF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZlbnRyaWVzWzBdKSwgbV9zaXplICogKHNp
emVvZihFbnRyeSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworICAgIH0KKwor
ICAgIHZpc2l0b3IuY29weUxhdGVyKG93bmVyLCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIGVu
dHJpZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+
CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OmNvcHlCYWNraW5nU3RvcmUoQ29weVZp
c2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBpZiAodG9rZW4gPT0gTWFw
QmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkobV9lbnRy
aWVzKSkgeworICAgICAgICBFbnRyeSogb2xkRW50cmllcyA9IG1fZW50cmllczsKKyAgICAgICAg
RW50cnkqIG5ld0VudHJpZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KHZpc2l0b3IuYWxsb2NhdGVO
ZXdTcGFjZShjYXBhY2l0eUluQnl0ZXMoKSkpOworICAgICAgICBpZiAoc2hvdWxkUGFjaygpKQor
ICAgICAgICAgICAgcmVwbGFjZUFuZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgbV9jYXBh
Y2l0eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3
RW50cmllcywgbV9jYXBhY2l0eSk7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRFbnRyaWVz
LCBjYXBhY2l0eUluQnl0ZXMoKSk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAppbmRleCA1NDgyMjI3Njk0MDBiNzE4NTJh
ZjdkYjhiNzVlZjUwNzU0NGVkZDRmLi42ZDdhMTFkOGZiYmI0ZTE1YTQzMTZmZTU4ODFhZDBkNzE0
MDUwOTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgotI2luY2x1ZGUg
Ik1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03Niw0MSArNzYsNDEgQEAgdm9p
ZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICBwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5zaXplLCBhY2Nlc3NvciwgRG9udEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdldE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUgdGhpc1ZhbHVlKQorQUxXQVlTX0lOTElORSBzdGF0aWMgSlNNYXAqIGdldE1hcChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7CiAgICAgaWYgKCF0aGlz
VmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVh
dGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7Ci0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgSlNNYXAqIG1hcCA9IGpz
RHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwogICAgIGlmICghbWFwKSB7CiAgICAgICAg
IHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNh
bGxlZCBvbiBub24tTWFwIG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbWFwLT5tYXBEYXRhKCk7CisgICAgcmV0
dXJuIG1hcDsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmND
bGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFw
RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkK
KyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgZGF0YS0+Y2xlYXIoKTsKKyAgICBtYXAtPmNsZWFyKGNhbGxGcmFtZSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNNYXAqIG1hcCA9IGdl
dE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbWFwKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4obWFwLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0ZvckVhY2goQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNNYXAq
IG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlm
ICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwpAQCAtMTIyLDE0ICsxMjIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsQmFjayk7CiAgICAgICAgIENhY2hlZENhbGwgY2Fj
aGVkQ2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCAyKTsKLSAgICAgICAgZm9yIChhdXRvIHB0ciA9
IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhj
ZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0byBwdHIgPSBtYXAtPmJlZ2luKCks
IGVuZCA9IG1hcC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRpb24oKTsgKytwdHIp
IHsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyh0aGlzVmFsdWUpOwogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBwdHIudmFsdWUoKSk7CiAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIHB0ci5rZXkoKSk7CiAgICAgICAgICAgICBjYWNoZWRD
YWxsLmNhbGwoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoYXV0byBw
dHIgPSBkYXRhLT5iZWdpbigpLCBlbmQgPSBkYXRhLT5lbmQoKTsgcHRyICE9IGVuZCAmJiAhdm0t
PmV4Y2VwdGlvbigpOyArK3B0cikgeworICAgICAgICBmb3IgKGF1dG8gcHRyID0gbWFwLT5iZWdp
bigpLCBlbmQgPSBtYXAtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhjZXB0aW9uKCk7ICsr
cHRyKSB7CiAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgICAgICAg
ICAgYXJncy5hcHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAgYXJncy5hcHBlbmQocHRy
LmtleSgpKTsKQEAgLTE0MSwzOCArMTQxLDM2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNHZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNNYXAqIG1hcCA9IGdldE1hcChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbWFwKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gZGF0YS0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobWFw
LT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKENhbGxGcmFtZSogY2FsbEZyYW1l
KQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIW1hcCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5jb250YWlucyhjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
bWFwLT5oYXMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CisgICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxs
RnJhbWUsIHRoaXNWYWx1ZSk7CisgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBtYXAtPnNldChjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2Fs
bEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIW1hcCkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGRhdGEtPnNpemUoY2FsbEZyYW1lKSkpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobWFwLT5zaXplKGNhbGxGcmFtZSkpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNWYWx1ZXMoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQ
cm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBl
LmNwcAppbmRleCBmODhlYTdjZjk4NjhmNjY4YjhjMmU4ODgxNWZmNjVjZjM5OTI3YjQ5Li42YTZj
NDliNDhlMGM2YTkwYzkzMDc2OTlkOGNkNzliNGM5NWQyYzUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVk
ZSAiSlNTZXRJdGVyYXRvci5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBE
YXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC03NSw1MCArNzUsNTEgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBwdXREaXJlY3RO
b25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zaXplLCBhY2Nlc3NvciwgRG9u
dEVudW0gfCBBY2Nlc3Nvcik7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIE1hcERhdGEqIGdl
dE1hcERhdGEoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQorQUxXQVlT
X0lOTElORSBzdGF0aWMgSlNTZXQqIGdldFNldChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSB0aGlzVmFsdWUpCiB7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAg
ICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFt
ZSwgdGhpc1ZhbHVlKSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgSlNTZXQqIHNldCA9IGpzRHluYW1pY0Nhc3Q8SlNTZXQqPih0aGlzVmFs
dWUpOwogICAgIGlmICghc2V0KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwg
QVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCIpKTsK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBy
ZXR1cm4gc2V0LT5tYXBEYXRhKCk7CisgICAgcmV0dXJuIHNldDsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpOworICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCB0
aGlzVmFsdWUpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIGRhdGEtPnNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgc2V0LT5hZGQoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNW
YWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQ2xl
YXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERh
dGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisg
ICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGRhdGEtPmNsZWFyKCk7CisgICAgc2V0LT5jbGVhcihjYWxsRnJhbWUpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2FsbEZy
YW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTU2V0KiBzZXQgPSBnZXRT
ZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXNldCkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkYXRhLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHNldC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTU2V0KiBz
ZXQgPSBnZXRTZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAo
IXNldCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBKU1ZhbHVlIGNhbGxCYWNrID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKQEAgLTEzMCwxMyArMTMxLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc2V0UHJvdG9GdW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgewogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEJhY2spOwogICAgICAgICBDYWNoZWRDYWxsIGNhY2hl
ZENhbGwoY2FsbEZyYW1lLCBmdW5jdGlvbiwgMSk7Ci0gICAgICAgIGZvciAoYXV0byBwdHIgPSBk
YXRhLT5iZWdpbigpLCBlbmQgPSBkYXRhLT5lbmQoKTsgcHRyICE9IGVuZCAmJiAhdm0tPmV4Y2Vw
dGlvbigpOyArK3B0cikgeworICAgICAgICBmb3IgKGF1dG8gcHRyID0gc2V0LT5iZWdpbigpLCBl
bmQgPSBzZXQtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7
CiAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXModGhpc1ZhbHVlKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMCwgcHRyLmtleSgpKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuY2FsbCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRv
IHB0ciA9IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2
bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0byBwdHIgPSBzZXQtPmJl
Z2luKCksIGVuZCA9IHNldC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRpb24oKTsg
KytwdHIpIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgICAg
ICAgICBhcmdzLmFwcGVuZChwdHIua2V5KCkpOwogICAgICAgICAgICAgSlNDOjpjYWxsKGNhbGxG
cmFtZSwgY2FsbEJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKQEAg
LTE0NywxOCArMTQ4LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9G
dW5jRm9yRWFjaChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzZXRQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFw
RGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKGRhdGEtPmNvbnRhaW5zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgw
KSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihzZXQtPmhhcyhjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jU2l6ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAg
ICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihkYXRhLT5zaXplKGNhbGxGcmFtZSkpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHNldC0+c2l6ZShjYWxsRnJhbWUpKSk7CiB9CiAgICAgCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY1ZhbHVlcyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBhNzMyNGI0YWRm
MWRlODc3Yjc0NjA2OGRhNTQxM2RhYmY1M2I1NTRjLi5lOGZjMGUzMjBiNWNhM2FlMTMzYmE4ZjQ2
YWE1OGVjNTljN2UxZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0y
MzMsNyArMjMzLDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRXZh
bENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAg
cHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBtYXBEYXRhU3RydWN0dXJlLnNldCgq
dGhpcywgTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHdlYWtNYXBEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJv
bWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCmluZGV4IDk0YzQ4M2I3MjM2MDIyODNlZDQwZGE1NWRlZDI5NTUzYTAzMTc4MjUuLjdlNzFk
ZWY5YzdhNTBmOTdmY2U2YTFiOTk3YjYwN2M2YWFmYjljNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaApAQCAtMjY4LDcgKzI2OCw2IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFZNPiB7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRFdmFsQ29k
ZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0
cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiBtYXBEYXRhU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOwogI2lmIEVOQUJMRShQUk9NSVNF
UykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcERhdGFJ
bmxpbmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcERh
dGFJbmxpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhY2E2MmQ0MzkyZDI1YjY2NDIyNjM4NzkwZGM3NDcy
ZjIwZDFlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaApAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2Vi
Q29yZV9GV0RfTWFwRGF0YUlubGlpbmVzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfTWFwRGF0YUlu
bGlpbmVzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXBEYXRhSW5saW5lcy5oPgorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAppbmRleCA5ZjlmMjU5Y2U2NzkyODQyNDc4OWEzZDM0YmVmMzkyYTU3ODlhY2Fl
Li43NTdlY2Q5MGE2Y2FiMzc4OTBjNjJhYzY4MzMyZDNjOTlmYjYzNjE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAg
LTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTU2V0Lmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9NYXBEYXRhLmg+CisjaW5j
bHVkZSA8cnVudGltZS9NYXBEYXRhSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0
Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAj
aW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KQEAgLTg3LDcgKzg4LDggQEAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heGltdW1GaWx0ZXJSZWN1cnNpb24gPSA0MDAwMDsKIAogZW51bSBXYWxrZXJT
dGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0YXJ0VmlzaXRNZW1i
ZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsCiAgICAgT2JqZWN0U3RhcnRTdGF0ZSwgT2JqZWN0U3Rh
cnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIsCi0gICAgTWFwRGF0YVN0YXJ0Vmlz
aXRFbnRyeSwgTWFwRGF0YUVuZFZpc2l0S2V5LCBNYXBEYXRhRW5kVmlzaXRWYWx1ZSB9OworICAg
IE1hcERhdGFTdGFydFZpc2l0RW50cnksIE1hcERhdGFFbmRWaXNpdEtleSwgTWFwRGF0YUVuZFZp
c2l0VmFsdWUsCisgICAgU2V0RGF0YVN0YXJ0VmlzaXRFbnRyeSwgU2V0RGF0YUVuZFZpc2l0S2V5
IH07CiAKIC8vIFRoZXNlIGNhbid0IGJlIHJlb3JkZXJlZCwgYW5kIGFueSBuZXcgdHlwZXMgbXVz
dCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiBlbnVtIFNlcmlhbGl6YXRpb25UYWcg
ewpAQCAtMTIyLDggKzEyNCw5IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7CiAgICAgU2V0T2Jq
ZWN0VGFnID0gMjksCiAgICAgTWFwT2JqZWN0VGFnID0gMzAsCiAgICAgTm9uTWFwUHJvcGVydGll
c1RhZyA9IDMxLAorICAgIE5vblNldFByb3BlcnRpZXNUYWcgPSAzMiwKICNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKLSAgICBDcnlwdG9LZXlUYWcgPSAzMiwKKyAgICBDcnlwdG9LZXlUYWcgPSAz
MywKICNlbmRpZgogICAgIEVycm9yVGFnID0gMjU1CiB9OwpAQCAtMjY2LDkgKzI2OSwxMCBAQCBz
dGF0aWMgY29uc3QgdW5zaWduZWQgTm9uSW5kZXhQcm9wZXJ0aWVzVGFnID0gMHhGRkZGRkZGRDsK
ICAqCiAgKiBNYXAgOi0gTWFwT2JqZWN0VGFnIE1hcERhdGEKICAqCi0gKiBTZXQgOi0gU2V0T2Jq
ZWN0VGFnIE1hcERhdGEKKyAqIFNldCA6LSBTZXRPYmplY3RUYWcgU2V0RGF0YQogICoKLSAqIE1h
cERhdGEgOi0gKDxrZXk6VmFsdWU+PHZhbHVlOlZhbHVlPikgTm9uTWFwUHJvcGVydGllc1RhZyAo
PG5hbWU6U3RyaW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZworICogTWFwRGF0
YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+KSogTm9uTWFwUHJvcGVydGllc1RhZyAoPG5h
bWU6U3RyaW5nRGF0YT48dmFsdWU6VmFsdWU+KSogVGVybWluYXRvclRhZworICogU2V0RGF0YSA6
LSAoPGtleTpWYWx1ZT4pKiBOb25TZXRQcm9wZXJ0aWVzVGFnICg8bmFtZTpTdHJpbmdEYXRhPjx2
YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFnCiAgKgogICogVGVybWluYWwgOi0KICAqICAgICAg
VW5kZWZpbmVkVGFnCkBAIC0xMjE2LDkgKzEyMjAsMTEgQEAgU2VyaWFsaXphdGlvblJldHVybkNv
ZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAgICBWZWN0b3I8dWlu
dDMyX3QsIDE2PiBsZW5ndGhTdGFjazsKICAgICBWZWN0b3I8UHJvcGVydHlOYW1lQXJyYXksIDE2
PiBwcm9wZXJ0eVN0YWNrOwogICAgIFZlY3RvcjxKU09iamVjdCosIDMyPiBpbnB1dE9iamVjdFN0
YWNrOwotICAgIFZlY3RvcjxNYXBEYXRhKiwgND4gbWFwRGF0YVN0YWNrOwotICAgIFZlY3RvcjxN
YXBEYXRhOjpjb25zdF9pdGVyYXRvciwgND4gaXRlcmF0b3JTdGFjazsKLSAgICBWZWN0b3I8SlNW
YWx1ZSwgND4gaXRlcmF0b3JWYWx1ZVN0YWNrOworICAgIFZlY3RvcjxKU01hcCosIDQ+IG1hcFN0
YWNrOworICAgIFZlY3RvcjxKU01hcDo6Y29uc3RfaXRlcmF0b3IsIDQ+IG1hcEl0ZXJhdG9yU3Rh
Y2s7CisgICAgVmVjdG9yPEpTU2V0KiwgND4gc2V0U3RhY2s7CisgICAgVmVjdG9yPEpTU2V0Ojpj
b25zdF9pdGVyYXRvciwgND4gc2V0SXRlcmF0b3JTdGFjazsKKyAgICBWZWN0b3I8SlNWYWx1ZSwg
ND4gbWFwSXRlcmF0b3JWYWx1ZVN0YWNrOwogICAgIFZlY3RvcjxXYWxrZXJTdGF0ZSwgMTY+IHN0
YXRlU3RhY2s7CiAgICAgV2Fsa2VyU3RhdGUgc3RhdGUgPSBTdGF0ZVVua25vd247CiAgICAgSlNW
YWx1ZSBpblZhbHVlID0gaW47CkBAIC0xMzUwLDM2ICsxMzU2LDIxIEBAIFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAg
ICAgICAgICAgSlNNYXAqIGluTWFwID0ganNDYXN0PEpTTWFwKj4oaW5WYWx1ZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFzdGFydE1hcChpbk1hcCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBpbk1hcC0+bWFwRGF0YSgpOwot
ICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG1hcERhdGEpOwotICAgICAgICAgICAg
ICAgIG1hcERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAgICAgICAgaXRlcmF0
b3JTdGFjay5hcHBlbmQobWFwRGF0YS0+YmVnaW4oKSk7CisgICAgICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmQoaW5NYXApOworICAgICAgICAgICAgICAgIG1hcFN0YWNrLmFwcGVuZChpbk1h
cCk7CisgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5hcHBlbmQoaW5NYXAtPmJlZ2lu
KCkpOwogICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluTWFwKTsKICAg
ICAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBzZXRTdGFydFN0YXRlOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlu
VmFsdWUuaXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0T2JqZWN0U3RhY2su
c2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFN0YWNrT3ZlcmZsb3dFcnJvcjsKLSAgICAgICAgICAgICAgICBKU1NldCogaW5TZXQgPSBq
c0Nhc3Q8SlNTZXQqPihpblZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0KGlu
U2V0KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0
YSogbWFwRGF0YSA9IGluU2V0LT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZl
ci5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAgICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZCht
YXBEYXRhKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5i
ZWdpbigpKTsKLSAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpblNldCk7
Ci0gICAgICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeToKICAgICAgICAgICAgIGNh
c2UgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTogewotICAgICAgICAgICAgICAgIE1hcERhdGE6OmNv
bnN0X2l0ZXJhdG9yJiBwdHIgPSBpdGVyYXRvclN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAg
ICBNYXBEYXRhKiBtYXBEYXRhID0gbWFwRGF0YVN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgICAg
ICBpZiAocHRyID09IG1hcERhdGEtPmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXJh
dG9yU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAgIEpTTWFwOjpjb25zdF9pdGVyYXRvciYgcHRy
ID0gbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNNYXAqIG1hcCA9
IG1hcFN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IG1hcC0+ZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1hcFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KG9iamVjdCkgfHwganNE
eW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
anNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOwogICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKICAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRpZXNUYWcpOwpAQCAt
MTM4OCwyMiArMTM3OSw2MCBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6
ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpblZhbHVlID0gcHRyLmtleSgpOwogICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBw
ZW5kKHB0ci52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpdGVyYXRvclZhbHVlU3RhY2suYXBw
ZW5kKHB0ci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclZhbHVlU3RhY2su
YXBwZW5kKHB0ci52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChN
YXBEYXRhRW5kVmlzaXRLZXkpOwogICAgICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRLZXk6IHsKLSAg
ICAgICAgICAgICAgICBpblZhbHVlID0gaXRlcmF0b3JWYWx1ZVN0YWNrLmxhc3QoKTsKLSAgICAg
ICAgICAgICAgICBpdGVyYXRvclZhbHVlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
ICAgIGluVmFsdWUgPSBtYXBJdGVyYXRvclZhbHVlU3RhY2subGFzdCgpOworICAgICAgICAgICAg
ICAgIG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAg
c3RhdGVTdGFjay5hcHBlbmQoTWFwRGF0YUVuZFZpc2l0VmFsdWUpOwogICAgICAgICAgICAgICAg
IGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBNYXBE
YXRhRW5kVmlzaXRWYWx1ZTogewotICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvclN0YWNrLmxh
c3QoKSAhPSBtYXBEYXRhU3RhY2subGFzdCgpLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAg
KytpdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAobWFwSXRlcmF0b3JT
dGFjay5sYXN0KCkgIT0gbWFwU3RhY2subGFzdCgpLT5lbmQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgKyttYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICBnb3RvIG1hcERh
dGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIHNldFN0YXJ0
U3RhdGU6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09iamVjdCgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5wdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVy
UmVjdXJzaW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tPdmVyZmxvd0Vycm9y
OworICAgICAgICAgICAgICAgIEpTU2V0KiBpblNldCA9IGpzQ2FzdDxKU1NldCo+KGluVmFsdWUp
OworICAgICAgICAgICAgICAgIGlmICghc3RhcnRTZXQoaW5TZXQpKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChpblNldCk7Cisg
ICAgICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKGluU2V0KTsKKyAgICAgICAgICAgICAgICBz
ZXRJdGVyYXRvclN0YWNrLmFwcGVuZChpblNldC0+YmVnaW4oKSk7CisgICAgICAgICAgICAgICAg
aW5wdXRPYmplY3RTdGFjay5hcHBlbmQoaW5TZXQpOworICAgICAgICAgICAgICAgIGdvdG8gc2V0
RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldERhdGFT
dGFydFZpc2l0RW50cnk6CisgICAgICAgICAgICBjYXNlIFNldERhdGFTdGFydFZpc2l0RW50cnk6
IHsKKyAgICAgICAgICAgICAgICBKU1NldDo6Y29uc3RfaXRlcmF0b3ImIHB0ciA9IHNldEl0ZXJh
dG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBzZXRTdGFjay5s
YXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKHB0ciA9PSBzZXQtPmVuZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNldEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
ICAgICAgICBzZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPihvYmplY3QpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVjKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0KCksIEV4Y2x1ZGVEb250RW51
bVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25TZXRQcm9wZXJ0aWVz
VGFnKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CisgICAgICAg
ICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHB0ci5rZXkoKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZVN0YWNrLmFwcGVuZChTZXREYXRhRW5kVmlzaXRLZXkpOworICAgICAgICAgICAgICAg
IGdvdG8gc3RhdGVVbmtub3duOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBTZXRE
YXRhRW5kVmlzaXRLZXk6IHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0SXRlcmF0b3JTdGFjay5s
YXN0KCkgIT0gc2V0U3RhY2subGFzdCgpLT5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgKytz
ZXRJdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBnb3RvIHNldERhdGFTdGFy
dFZpc2l0RW50cnk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHN0YXRlVW5rbm93bjoK
ICAgICAgICAgICAgIGNhc2UgU3RhdGVVbmtub3duOiB7CiAgICAgICAgICAgICAgICAgU2VyaWFs
aXphdGlvblJldHVybkNvZGUgdGVybWluYWxDb2RlID0gU3VjY2Vzc2Z1bGx5Q29tcGxldGVkOwpA
QCAtMjM2MCw5ICsyMzg5LDEwIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNl
IHsKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY29uc3VtZU1hcERhdGFUZXJtaW5hdGlv
bklmUG9zc2libGUoKQorICAgIHRlbXBsYXRlPFNlcmlhbGl6YXRpb25UYWcgVGFnPgorICAgIGJv
b2wgY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRpb25JZlBvc3NpYmxlKCkKICAgICB7Ci0g
ICAgICAgIGlmIChyZWFkVGFnKCkgPT0gTm9uTWFwUHJvcGVydGllc1RhZykKKyAgICAgICAgaWYg
KHJlYWRUYWcoKSA9PSBUYWcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgbV9w
dHItLTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM4NCw4ICsyNDE0LDkgQEAgRGVzZXJp
YWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgVmVj
dG9yPHVpbnQzMl90LCAxNj4gaW5kZXhTdGFjazsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+
IHByb3BlcnR5TmFtZVN0YWNrOwogICAgIFZlY3RvcjxKU09iamVjdCosIDMyPiBvdXRwdXRPYmpl
Y3RTdGFjazsKLSAgICBWZWN0b3I8SlNWYWx1ZSwgND4ga2V5U3RhY2s7Ci0gICAgVmVjdG9yPE1h
cERhdGEqLCA0PiBtYXBEYXRhU3RhY2s7CisgICAgVmVjdG9yPEpTVmFsdWUsIDQ+IG1hcEtleVN0
YWNrOworICAgIFZlY3RvcjxKU01hcCosIDQ+IG1hcFN0YWNrOworICAgIFZlY3RvcjxKU1NldCos
IDQ+IHNldFN0YWNrOwogICAgIFZlY3RvcjxXYWxrZXJTdGF0ZSwgMTY+IHN0YXRlU3RhY2s7CiAg
ICAgV2Fsa2VyU3RhdGUgc3RhdGUgPSBTdGF0ZVVua25vd247CiAgICAgSlNWYWx1ZSBvdXRWYWx1
ZTsKQEAgLTI0NzgsNDEgKzI1MDksNTMgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVz
ZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiAgICAgICAgICAgICBKU01hcCogbWFwID0gSlNNYXA6
OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChtYXApOwogICAgICAgICAgICAgb3V0cHV0T2Jq
ZWN0U3RhY2suYXBwZW5kKG1hcCk7Ci0gICAgICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0gbWFw
LT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5kKG1hcERhdGEpOwot
ICAgICAgICAgICAgZ290byBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OwotICAgICAgICB9Ci0gICAg
ICAgIHNldE9iamVjdFN0YXJ0U3RhdGU6IHsKLSAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RT
dGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAg
ICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFs
T2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChz
ZXQpOwotICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKHNldCk7Ci0gICAgICAg
ICAgICBNYXBEYXRhKiBtYXBEYXRhID0gc2V0LT5tYXBEYXRhKCk7Ci0gICAgICAgICAgICBtYXBE
YXRhU3RhY2suYXBwZW5kKG1hcERhdGEpOworICAgICAgICAgICAgbWFwU3RhY2suYXBwZW5kKG1h
cCk7CiAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7CiAgICAgICAgIH0K
ICAgICAgICAgbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeToKICAgICAgICAgY2FzZSBNYXBEYXRhU3Rh
cnRWaXNpdEVudHJ5OiB7Ci0gICAgICAgICAgICBpZiAoY29uc3VtZU1hcERhdGFUZXJtaW5hdGlv
bklmUG9zc2libGUoKSkgewotICAgICAgICAgICAgICAgIG1hcERhdGFTdGFjay5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRpb25JZlBv
c3NpYmxlPE5vbk1hcFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAgICAgICAgICAgICBtYXBTdGFj
ay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVt
YmVyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoTWFwRGF0
YUVuZFZpc2l0S2V5KTsKICAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOwogICAgICAgICB9
Ci0KICAgICAgICAgY2FzZSBNYXBEYXRhRW5kVmlzaXRLZXk6IHsKLSAgICAgICAgICAgIGtleVN0
YWNrLmFwcGVuZChvdXRWYWx1ZSk7CisgICAgICAgICAgICBtYXBLZXlTdGFjay5hcHBlbmQob3V0
VmFsdWUpOwogICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQoTWFwRGF0YUVuZFZpc2l0VmFs
dWUpOwogICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAgIH0KLQogICAgICAg
ICBjYXNlIE1hcERhdGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICBtYXBEYXRhU3RhY2su
bGFzdCgpLT5zZXQobV9leGVjLCBrZXlTdGFjay5sYXN0KCksIG91dFZhbHVlKTsKLSAgICAgICAg
ICAgIGtleVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIG1hcFN0YWNrLmxhc3QoKS0+
c2V0KG1fZXhlYywgbWFwS2V5U3RhY2subGFzdCgpLCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBt
YXBLZXlTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZp
c2l0RW50cnk7CiAgICAgICAgIH0KKworICAgICAgICBzZXRPYmplY3RTdGFydFN0YXRlOiB7Cisg
ICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJl
Y3Vyc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgp
LCBTdGFja092ZXJmbG93RXJyb3IpOworICAgICAgICAgICAgSlNTZXQqIHNldCA9IEpTU2V0Ojpj
cmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsKKyAgICAgICAgICAgIG91dHB1dE9iamVj
dFN0YWNrLmFwcGVuZChzZXQpOworICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKHNldCk7Cisg
ICAgICAgICAgICBnb3RvIHNldERhdGFTdGFydFZpc2l0RW50cnk7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeToKKyAgICAgICAgY2FzZSBTZXREYXRhU3RhcnRWaXNp
dEVudHJ5OiB7CisgICAgICAgICAgICBpZiAoY29uc3VtZUNvbGxlY3Rpb25EYXRhVGVybWluYXRp
b25JZlBvc3NpYmxlPE5vblNldFByb3BlcnRpZXNUYWc+KCkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZp
c2l0TWVtYmVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGVTdGFjay5hcHBlbmQo
U2V0RGF0YUVuZFZpc2l0S2V5KTsKKyAgICAgICAgICAgIGdvdG8gc3RhdGVVbmtub3duOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgU2V0RGF0YUVuZFZpc2l0S2V5OiB7CisgICAgICAgICAgICBK
U1NldCogc2V0ID0gc2V0U3RhY2subGFzdCgpOworICAgICAgICAgICAgc2V0LT5hZGQobV9leGVj
LCBvdXRWYWx1ZSk7CisgICAgICAgICAgICBnb3RvIHNldERhdGFTdGFydFZpc2l0RW50cnk7Cisg
ICAgICAgIH0KKwogICAgICAgICBzdGF0ZVVua25vd246CiAgICAgICAgIGNhc2UgU3RhdGVVbmtu
b3duOgogICAgICAgICAgICAgaWYgKEpTVmFsdWUgdGVybWluYWwgPSByZWFkVGVybWluYWwoKSkg
ewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IGM1NDE2ZjRlNzliMDMxYzkyOGJmYzlmOWMwZTBjMDgwMTVkYjZkZDEuLjIwN2Zi
MGUxMTdmOGU5YmQ5YmQ0N2IwYWZiYWE5NWJjZTE3ZTE0OTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxNS0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwor
ICAgICAgICBJbnRlZ3JhdGUgTWFwRGF0YSBpbnRvIEpTTWFwIGFuZCBKU1NldAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTU2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBzdHJ1Y3R1cmUtY2xv
bmUgaW1wbGVtZW50YXRpb24gdGhhdCBiZWNvbWVzIGF3YXJlIG9mIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gTWFwIGFuZCBTZXQuCisKKyAgICAgICAgKiBmYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1z
Y3JpcHQtdmFsdWUuaHRtbDoKKwogMjAxNS0wMy0xMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFRlc3QgZ2FyZGVuaW5nIGFmdGVyIHIx
ODEyNjAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zZXJpYWxpemVkLXNj
cmlwdC12YWx1ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2Ny
aXB0LXZhbHVlLmh0bWwKaW5kZXggNDM1ZDA3ZmJiYWY2NzAwOThiOTJkYzg1YmMxZTY1YmRiYmQ4
OWIwMy4uY2JjNTI0YmE2ZGZlNDlkOGE0YmYwOTU0MTg1Y2JkZGU0ZTUyY2I3OCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQtc2NyaXB0LXZhbHVlLmh0
bWwKQEAgLTQxNSwxNiArNDE1LDE0IEBACiAKIHRlc3RTZXJpYWxpemF0aW9uKHNldE9iamVjdCwK
IFsKLSAgICAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDA3LCAweDA3LCAweDBhLCAw
eDAwLCAKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDNmLCAweDBh
LCAweDAwLCAKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDNmLCAw
eDEzLCAweDAwLCAKLSAgICAweDEzLCAweDAwLCAweDEwLCAweDAzLCAweDAwLCAweDAwLCAweDAw
LCAweDYyLCAweDAwLCAKLSAgICAweDYxLCAweDAwLCAweDcyLCAweDAwLCAweDEwLCAweGZlLCAw
eGZmLCAweGZmLCAweGZmLCAKLSAgICAweDAwLCAweDFhLCAweGZlLCAweGZmLCAweGZmLCAweGZm
LCAweDAwLCAweDEzLCAweDAxLCAKLSAgICAweDFmLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAw
eDY1LCAweDAwLCAweDc4LCAweDAwLCAKLSAgICAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZl
LCAweDAwLCAweDY0LCAweDAwLCAweDZmLCAKLSAgICAweDAwLCAweDAyLCAweGZmLCAweGZmLCAw
eGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAKLSAgICAweGZmCisgICAgMHgwNSwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgxZCwgMHgwNywgMHgwYSwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweGY4LCAweDNmLCAweDEzLCAweDAwLCAweDEwLAorICAgIDB4MDMsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzIsCisgICAgMHgwMCwg
MHgxYSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgyMCwgMHgwNywKKyAgICAweDAw
LCAweDAwLCAweDAwLCAweDY1LCAweDAwLCAweDc4LCAweDAwLCAweDcwLCAweDAwLAorICAgIDB4
NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDIsCisgICAg
MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCiBdKTsKIAog
dGVzdFNlcmlhbGl6YXRpb24oZnVuY3Rpb24oKXt9LCBbXSwgbnVsbCwgRE9NRXhjZXB0aW9uLkRB
VEFfQ0xPTkVfRVJSKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248539</attachid>
            <date>2015-03-12 13:43:22 -0700</date>
            <delta_ts>2015-03-12 13:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142556-20150313054255.patch</filename>
            <type>text/plain</type>
            <size>86030</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NTRiNTA0ZDczOTRiNzlhNGI4Y2Y2NDE1NzMwMjg0ODMxMWI4ZjNiLi5iYjU3MjdiMzA3NzlmZWZl
OTdiMzRhYmU3OWRlMzE0YTRlMjk3ZDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTEgQEAKKzIwMTUtMDMtMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50ZWdyYXRlIE1hcERhdGEgaW50byBKU01hcCBhbmQgSlNTZXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU1Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggaW50ZWdyYXRlcyBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0LgorICAgICAgICBUaGlz
IHJlbW92ZXMgMiBvYmplY3QgYWxsb2NhdGlvbiBwZXIgb25lIEpTTWFwIC8gSlNTZXQuCisKKyAg
ICAgICAgTWFwRGF0YUltcGwgaXMgc3BlY2lhbGl6ZWQgaW50byBNYXBEYXRhIGFuZCBTZXREYXRh
LgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBTZXREYXRhLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBk
dW1teSB2YWx1ZXMKKyAgICAgICAgcHJldmlvdXNseSBzdG9yZWQgaW4gdGhlIE1hcERhdGFJbXBs
LiBTbyB0aGUgc3RvcmFnZSBzaXplIG9mIFNldERhdGEKKyAgICAgICAgYmVjb21lcyB0aGUgaGFs
ZiBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgQW5kIG5vdyBNYXBE
YXRhIGFuZCBTZXREYXRhIGFyZSBjb21wbGV0ZWx5IGludGVncmF0ZWQgaW50byBKU01hcCBhbmQg
SlNTZXQsCisgICAgICAgIHRoZXNlIHN0cnVjdHVyZXMgYXJlIG5vdCBleHBvc2VkIHRvIHRoZSBv
dGhlciBjb2RlIGV2ZW4gaW4gV2ViQ29yZSB3b3JsZC4KKworICAgICAgICBBbmQgYXQgdGhlIHNh
bWUgdGltZSwgdGhpcyBwYXRjaCBmaXhlcyBtaXNzaW5nIGRlc3Ryb3kgZnVuY3Rpb25zCisgICAg
ICAgIGluIEpTTWFwSXRlcmF0b3IgYW5kIEpTU2V0SXRlcmF0b3IuCisgICAgICAgIFRoZXkgYXJl
IG5lZWRlZCBiZWNhdXNlIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIGlzIGEgbm9uLXRyaXZpYWwg
ZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHJ1bnRpbWUvSlNNYXAuY3BwOgorICAgICAgICAoSlNDOjpKU01hcDo6ZGVzdHJveSk6CisgICAg
ICAgIChKU0M6OkpTTWFwOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNv
cHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjpKU01hcDo6aGFzKToKKyAgICAgICAgKEpT
Qzo6SlNNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAgKEpT
Qzo6SlNNYXA6OnNldCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpjbGVhcik6CisgICAgICAgIChK
U0M6OkpTTWFwOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpKU01hcDo6ZmluaXNoQ3JlYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKEpTQzo6SlNN
YXA6OkVudHJ5OjprZXkpOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnZhbHVlKToKKyAg
ICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
SlNNYXA6OkVudHJ5OjpzZXRLZXkpOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnNldEtl
eVdpdGhvdXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnNldFZh
bHVlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpjbGVhcik6CisgICAgICAgIChKU0M6
OkpTTWFwOjpiZWdpbik6CisgICAgICAgIChKU0M6OkpTTWFwOjplbmQpOgorICAgICAgICAoSlND
OjpKU01hcDo6SlNNYXApOgorICAgICAgICAoSlNDOjpKU01hcDo6bWFwRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNN
YXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9y
OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9KU01hcEl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTTWFw
SXRlcmF0b3I6OkpTTWFwSXRlcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuY3BwOgor
ICAgICAgICAoSlNDOjpKU1NldDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTU2V0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNvcHlCYWNraW5nU3RvcmUpOgorICAg
ICAgICAoSlNDOjpKU1NldDo6aGFzKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OnNpemUpOgorICAg
ICAgICAoSlNDOjpKU1NldDo6YWRkKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNsZWFyKToKKyAg
ICAgICAgKEpTQzo6SlNTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpmaW5pc2hD
cmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldC5oOgorICAgICAgICAo
SlNDOjpKU1NldDo6RW50cnk6OmtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmFs
dWUpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRy
eTo6c2V0S2V5V2l0aG91dFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRy
eTo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmNsZWFyKToKKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmVuZCk6CisgICAg
ICAgIChKU0M6OkpTU2V0OjpKU1NldCk6CisgICAgICAgIChKU0M6OkpTU2V0OjptYXBEYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTU2V0
SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpk
ZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0pTU2V0SXRlcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6SlNTZXRJdGVyYXRvcjo6SlNTZXRJdGVyYXRvcik6CisgICAgICAgICogcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE1hcCk6CisgICAgICAgICog
cnVudGltZS9NYXBEYXRhLmg6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpjb25zdF9pdGVy
YXRvcjo6a2V5KToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw6OmNvbnN0X2l0ZXJhdG9yOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsOjpzaXplKToKKyAgICAgICAgKEpTQzo6
TWFwRGF0YUltcGw8RW50cnk+OjpNYXBEYXRhSW1wbCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46Oktl
eVR5cGU6OktleVR5cGUpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0
X2l0ZXJhdG9yOjppbnRlcm5hbEluY3JlbWVudCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBs
PEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6OmVuc3VyZVNsb3QpOgorICAgICAgICAoSlNDOjpNYXBE
YXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcik6CisgICAgICAg
IChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6On5jb25zdF9pdGVyYXRv
cik6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9w
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6PSk6CisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0
X2l0ZXJhdG9yOjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9p
dGVyYXRvcjo6dmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6TWFwRGF0YTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpLZXlU
eXBlOjpLZXlUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRl
cmF0b3I6OmludGVybmFsSW5jcmVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0
YTo6Y29uc3RfaXRlcmF0b3I6OmVuc3VyZVNsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpN
YXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TWFwRGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRv
cj09KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL01hcERhdGFJbmxpbmVzLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmNwcC4KKyAgICAg
ICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpmaW5kKToKKyAgICAgICAgKEpTQzo6TWFwRGF0
YUltcGw8RW50cnk+Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVudHJ5
Pjo6YWRkKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+OjpzZXQpOgorICAgICAg
ICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46OmdldCk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJ
bXBsPEVudHJ5Pjo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwRGF0YUltcGw8RW50cnk+Ojpy
ZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVu
dHJ5Pjo6cmVwbGFjZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6Ok1hcERhdGFJbXBsPEVu
dHJ5Pjo6ZW5zdXJlU3BhY2VGb3JBcHBlbmQpOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxF
bnRyeT46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpNYXBEYXRhSW1wbDxFbnRyeT46
OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6Z2V0TWFwKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jQ2xlYXIp
OgorICAgICAgICAoSlNDOjptYXBQcm90b0Z1bmNEZWxldGUpOgorICAgICAgICAoSlNDOjptYXBQ
cm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jR2V0KToKKyAgICAg
ICAgKEpTQzo6bWFwUHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2V0
KToKKyAgICAgICAgKEpTQzo6bWFwUHJvdG9GdW5jU2l6ZSk6CisgICAgICAgIChKU0M6OmdldE1h
cERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU2V0UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQWRkKToKKyAg
ICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jQ2xlYXIpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1
bmNEZWxldGUpOgorICAgICAgICAoSlNDOjpzZXRQcm90b0Z1bmNGb3JFYWNoKToKKyAgICAgICAg
KEpTQzo6c2V0UHJvdG9GdW5jSGFzKToKKyAgICAgICAgKEpTQzo6c2V0UHJvdG9GdW5jU2l6ZSk6
CisgICAgICAgIChKU0M6OmdldE1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAxNS0wMy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
U29tZSBldmVudCBoYW5kbGVyIGZpeGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA3YjQ5MjAxMjZjZGQ5OGEz
ZjQ1ZDViNGRmMmQzZTA5NDZiMjAzMS4uYmE1YzAyNzUyNThmMDk3M2E3ZTRjZWYyODhkMzZkMDFh
NzY2MDAwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE1LTAzLTEyICBZdXN1a2Ug
U3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIEludGVncmF0ZSBNYXBE
YXRhIGludG8gSlNNYXAgYW5kIEpTU2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDI1NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBOb3cgU2V0IGhhcyBTZXREYXRhIGFuZCBpdCdzIGRpZmZlcmVudCBm
cm9tIE1hcERhdGEuCisgICAgICAgIEFuZCBNYXBEYXRhL1NldERhdGEgYXJlIGNvbXBsZXRlbHkg
aW50ZWdyYXRlZCBpbnRvIEpTU2V0IGFuZCBKU01hcC4KKyAgICAgICAgU3RydWN0dXJlZC1jbG9u
aW5nIGFsZ29yaXRobSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZXNlIGNoYW5nZXMuCisgICAgICAg
IEFuZCBpbiB0aGUgY2FzZSBvZiBKU1NldCwgc2luY2UgSlNTZXQgZG9lc24ndCBuZWVkIGR1bW15
IHZhbHVlIGZvciBjb25zdHJ1Y3Rpb24sCisgICAgICAgIFN0cnVjdHVyZWQtY2xvbmluZyBvbmx5
IHNlcmlhbGl6ZSB0aGUga2V5cyBpbiBKU1NldC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvTWFwRGF0YUlubGluZXMuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVy
Ojpjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJtaW5hdGlvbklmUG9zc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lRGVzZXJpYWxpemVyOjpjb25zdW1lTWFwRGF0YVRlcm1pbmF0aW9uSWZQb3NzaWJs
ZSk6IERlbGV0ZWQuCisKIDIwMTUtMDMtMTEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODEzNjcuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzE0ZTY1OGQwODk2OGQyODdkZDdk
MzNlYjkyMDUzYjkyZDE2OTczYS4uOTNhNjFmZDc3ZTJjZGE4NTY0ZDJkZjQ0MTc5NWY0YzBkMWM2
OGU1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTA1LDcgKzUwNSw2
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0xpdGVy
YWxQYXJzZXIuY3BwCiAgICAgcnVudGltZS9Mb29rdXAuY3BwCiAgICAgcnVudGltZS9NYXBDb25z
dHJ1Y3Rvci5jcHAKLSAgICBydW50aW1lL01hcERhdGEuY3BwCiAgICAgcnVudGltZS9NYXBJdGVy
YXRvckNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagppbmRleCA3OTQzNzVmZTUxNzgxODgwODAzN2M5ODc3NTU1ZjMzNDVkZmM4ZjEz
Li4wMDE1M2NhZTFhYjUyNWQ5OGUyMzQxZjFhMzFkZDk0Yjc3OWI4NTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTc3Miw3ICs3NzIsNiBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxMaXRlcmFsUGFyc2VyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTG9va3VwLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwUHJvdG90eXBlLmNwcCIgLz4K
QEAgLTE1NzIsNiArMTU3MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XExvb2t1cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25z
dHJ1Y3Rvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRh
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVz
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yQ29u
c3RydWN0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRl
cmF0b3JQcm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TWFwUHJvdG90eXBlLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qLmZpbHRlcnMKaW5kZXggNWY2YTFmNGJkYzkxOWU1ZmZlMGFlOWNlY2U4ODk5MWZjMWE1
MDE3Zi4uN2Y2NzE2YzM5NzgxZjFhYjIxYjIwODg2OTk5YzU4NGRmZWRlZjcwYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNzI5LDkg
KzcyOSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlw
ZS5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGEuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBDb25zdHJ1Y3Rvci5jcHAiPgogICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0zMzEwLDYgKzMzMDcsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmgiPgogICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGFJbmxpbmVzLmgiPgorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNldFByb3RvdHlwZS5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1
OWExOTZmNjYwOTVmY2QxMWEzMGJkZjUyN2EwOGE0Y2Q5ZGZmMmI2Li41NjllYWQzZDcyMjZhYWZl
ZDE0NTJjYzFiNjMwNDMyNzRiMjZmMzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTMzMCw4ICsxMzMwLDggQEAKIAkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNl
ck1vZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzdGMTgyNDE2NDE5MjU0MDA2NDBBNDcgLyogUGFyc2VyTW9kZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2
QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNzg0QTI2NDExRDE2
NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBN0VFNzcxMUI5OEI4RDAwNjVBMTRGIC8qIFN5bnRheENo
ZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1MDdENDE3Q0JDNkZEMDAxMUY2RTcg
LyogTWFwRGF0YS5jcHAgKi87IH07CiAJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzg1
MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBBNjQ0MTUxOTQyMEE2QzYxQUQxODgyRSAvKiBN
YXBEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTkzRDQzQ0NBMEJCRTA2RDg5QzU5NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc4NUY2QkMxOEM1
NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGRjY0N0ExOEM1MkU4NTAwQjU1MzA3IC8qIFNw
aWxsUmVnaXN0ZXJzTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3ODg1M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAq
LzsgfTsKIAkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3ODg1
M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMwMzgsOCArMzAzOCw4
IEBACiAJCUE3N0YxODFGMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjAxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQ2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3RjE4MjQxNjQxOTI1NDAwNjQwQTQ3IC8qIFBhcnNlck1v
ZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlck1vZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE3ODUwN0Q0MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU5M0Q0M0NDQTBCQkUwNkQ4OUM1OTcwNyAvKiBNYXBEYXRhSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBEYXRhSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyog
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzhBOTc2QzE3OTczOEI4MDA5
REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZhaWxlZEZpbmFsaXplci5jcHA7IHBhdGggPSBkZmcvREZHRmFpbGVk
RmluYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0ODEsOCArNDQ4
MSw4IEBACiAJCQkJRjY5MkE4NjkwMjU1NTk3RDAxRkY2MEY3IC8qIExvb2t1cC5oICovLAogCQkJ
CUE3MDA4NzM3MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJ
QTcwMDg3MzgxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggKi8sCi0JCQkJQTc4
NTA3RDQxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuY3BwICovLAogCQkJCUE3ODUwN0Q1MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggKi8sCisJCQkJNTkzRDQzQ0NBMEJCRTA2RDg5QzU5
NzA3IC8qIE1hcERhdGFJbmxpbmVzLmggKi8sCiAJCQkJQTc0REVGOEIxODJEOTkxNDAwNTIyQzIy
IC8qIE1hcEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3NERFRjhDMTgyRDk5MTQw
MDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggKi8sCiAJCQkJQTc0REVGOEQxODJE
OTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCAqLywKQEAgLTYxMDMsNiAr
NjEwMyw3IEBACiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAv
KiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwQTY0NDE1MTk0MjBBNkM2MUFEMTg4MkUg
LyogTWFwRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjkyMTgyRDk5MTQw
MDUyMkMyMiAvKiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzRERUY5NDE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLApAQCAtNzI0OCw3ICs3MjQ5LDYgQEAKIAkJCQlBN0E0QUUwODE3OTczQjI2
MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVCNkE3NEQxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUE3ODUwN0Q2MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkxMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJ
dGVyYXRvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5
MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCmluZGV4IGMwOGE5NzA4
YmU0NWE5MzQ5NTUyMzRiMzA1NzY2MGQ3ODE2NzUwZjQuLjQ0MTAwNmRiMzhhZjMyMTgwMDVkYWFm
NjM2YWYxM2I5YjczZjA5YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5j
cHAKQEAgLTI3LDI2ICsyNyw2MiBAQAogI2luY2x1ZGUgIkpTTWFwLmgiCiAKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBE
YXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgCisKIGNvbnN0IENs
YXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit7CisgICAganNDYXN0PEpTTWFwKj4oY2VsbCktPn5KU01hcCgpOworfQorCiB2b2lkIEpT
TWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBKU01hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcERhdGEpOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKIH0KIAotdm9pZCBKU01hcDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQordm9pZCBKU01hcDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGws
IENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCiB7Ci0gICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFwRGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNy
ZWF0ZSh2bSkpOworICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9r
ZW4pOworICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9y
ZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKK2Jvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQoreworICAgIHJldHVybiBtX21hcERhdGEuY29udGFpbnMoZXhlYywga2V5
KTsKK30KKworc2l6ZV90IEpTTWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gbV9tYXBEYXRhLnNpemUoZXhlYyk7Cit9CisKK0pTVmFsdWUgSlNNYXA6OmdldChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5KQoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9tYXBEYXRh
LmdldChleGVjLCBrZXkpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEpTTWFwOjpzZXQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBtX21hcERhdGEu
c2V0KGV4ZWMsIHRoaXMsIGtleSwgdmFsdWUpOworfQorCit2b2lkIEpTTWFwOjpjbGVhcihFeGVj
U3RhdGUqKQoreworICAgIG1fbWFwRGF0YS5jbGVhcigpOworfQorCitib29sIEpTTWFwOjpyZW1v
dmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK3sKKyAgICByZXR1cm4gbV9tYXBEYXRh
LnJlbW92ZShleGVjLCBrZXkpOworfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXAuaAppbmRleCA0MzE1Mjc0ZGUzZTk4NTdjNWJiZTA4MzUxMzc1NjlhNzcxNjQ2ZTA1Li5kNmYy
NTliZjMxMDM5ZmI3ODA4YWZiNGE4ZGE2ZjllZDBhYzRlZjgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwLmgKQEAgLTI2LDE1ICsyNiw2MyBAQAogI2lmbmRlZiBKU01hcF9oCiAj
ZGVmaW5lIEpTTWFwX2gKIAorI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJNYXBEYXRhLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1jbGFzcyBNYXBEYXRhOwotCi1jbGFzcyBKU01hcCA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKK2NsYXNzIEpTTWFwIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1Ymxp
YzoKLSAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICB0eXBlZGVmIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CisKKyAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhw
ZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKKyAgICAvLyBm
aWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25vd24+CisgICAgY2xhc3MgRW50cnkgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2tleTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7CisKKyAgICBwdWJsaWM6CisgICAgICAgIGNvbnN0
IFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fa2V5OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9r
ZXkpOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fdmFsdWUpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBzZXRLZXkoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVl
IGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9rZXkuc2V0KHZtLCBvd25lciwga2V5KTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0S2V5V2l0aG91dFdyaXRlQmFycmllcihKU1Zh
bHVlIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9rZXkuc2V0V2l0aG91dFdyaXRlQmFy
cmllcihrZXkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYgdm0sIGNv
bnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fdmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fa2V5LmNsZWFyKCk7CisgICAgICAg
ICAgICBtX3ZhbHVlLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdHlwZWRlZiBN
YXBEYXRhSW1wbDxFbnRyeT4gTWFwRGF0YTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
QEAgLTU1LDE5ICsxMDMsMzUgQEAgY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKICAgICB9
CiAKLSAgICBNYXBEYXRhKiBtYXBEYXRhKCkgeyByZXR1cm4gbV9tYXBEYXRhLmdldCgpOyB9Cisg
ICAgdHlwZWRlZiBNYXBEYXRhOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAg
IGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21h
cERhdGEuYmVnaW4oKTsKKyAgICB9CisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcERhdGEuZW5kKCk7CisgICAgfQorICAgIGJvb2wgaGFz
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopOworICAg
IEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIHZvaWQgc2V0KEV4ZWNTdGF0
ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKTsKKyAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSopOworICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogCiBwcml2YXRlOgog
ICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fbWFwRGF0YSgpCiAgICAgewogICAgIH0KIAotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLQorICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCi0gICAgV3JpdGVCYXJyaWVyPE1h
cERhdGE+IG1fbWFwRGF0YTsKKyAgICBNYXBEYXRhIG1fbWFwRGF0YTsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKaW5kZXggYzE2
N2FjYmNmM2EzYTliN2M0Y2U1Y2E3MjhhMzgxNWNiYjk2Y2JiZS4uZTlkN2Q0MmZiNGUzOGVkMzE3
Y2Q2MmJmMDY0MmNjMTE1ZjFlNjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKQEAgLTQwLDE1ICs0MCwxOSBAQCB2b2lkIEpTTWFwSXRl
cmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNNYXAqIGl0ZXJhdGVkT2JqZWN0KQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX21hcC5zZXQodm0sIHRoaXMsIGl0
ZXJhdGVkT2JqZWN0KTsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0RGF0YS5zZXQodm0sIHRoaXMsIGl0
ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCkpOworfQorCit2b2lkIEpTTWFwSXRlcmF0b3I6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2VsbCktPn5K
U01hcEl0ZXJhdG9yKCk7CiB9CiAKIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTTWFwSXRlcmF0b3Iq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsgICAgICAgIAorICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0RGF0YSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fbWFwKTsKIH0KIAogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAppbmRleCA2M2RkNWU4YjEx
Zjk2YTQ0NjFhZGQ1Y2VhM2M0NDdhZGM2MDA0MGNjLi5hYjg3YjNhZmVjZjRjYjc1ZThkOWQ5ODBl
OTgxZDZhOGFhNjgxM2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXBJdGVyYXRvci5oCkBAIC04MiwxOCArODIsMTggQEAgY2xhc3MgSlNNYXBJdGVyYXRvciA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwcml2YXRlOgogICAgIEpTTWFwSXRlcmF0b3Io
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqIGl0ZXJhdGVkT2JqZWN0LCBNYXBJ
dGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAg
ICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1hcERhdGEoKS0+YmVnaW4oKSkKKyAgICAg
ICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5iZWdpbigpKQogICAgICAgICAsIG1fa2lu
ZChraW5kKQogICAgIHsKICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCopOwogICAgIEpTVmFsdWUgY3Jl
YXRlUGFpcihDYWxsRnJhbWUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8
SlNNYXA+IG1fbWFwOwotICAgIFdyaXRlQmFycmllcjxNYXBEYXRhPiBtX2l0ZXJhdGVkT2JqZWN0
RGF0YTsKLSAgICBNYXBEYXRhOjpjb25zdF9pdGVyYXRvciBtX2l0ZXJhdG9yOworICAgIEpTTWFw
Ojpjb25zdF9pdGVyYXRvciBtX2l0ZXJhdG9yOwogICAgIE1hcEl0ZXJhdGlvbktpbmQgbV9raW5k
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCmluZGV4IDNjMWQx
MjRiYzU2MmRiNmRjMWJhMDBjOTYzYmE1NDkzZTYwMzczNzcuLjhmYzU2Mzc2OTYzYTU3NzdmYTI1
NGZjZGU1OTc4NmY1ZDRhMjAyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJKU1NldC5oIgogCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFw
RGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKQEAgLTM1LDE3ICszNSw0NiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2V0OjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2V0KSB9OwogCit2b2lkIEpTU2V0OjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+fkpTU2V0KCk7
Cit9CisKIHZvaWQgSlNTZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwot
ICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbWFwRGF0YSk7CisgICAganNDYXN0PEpTU2V0Kj4oY2Vs
bCktPm1fc2V0RGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworfQorCit2b2lkIEpT
U2V0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3Is
IENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZp
c2l0b3IsIHRva2VuKTsKKyAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLmNvcHlC
YWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOworfQorCitib29sIEpTU2V0OjpoYXMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBtX3NldERhdGEuY29udGFp
bnMoZXhlYywgdmFsdWUpOworfQorCitzaXplX3QgSlNTZXQ6OnNpemUoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBtX3NldERhdGEuc2l6ZShleGVjKTsKK30KKwordm9pZCBKU1NldDo6
YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBtX3NldERhdGEuc2V0
KGV4ZWMsIHRoaXMsIHZhbHVlLCB2YWx1ZSk7Cit9CisKK3ZvaWQgSlNTZXQ6OmNsZWFyKEV4ZWNT
dGF0ZSopCit7CisgICAgbV9zZXREYXRhLmNsZWFyKCk7CiB9CiAKLXZvaWQgSlNTZXQ6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKK2Jvb2wgSlNTZXQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIG1fbWFw
RGF0YS5zZXQodm0sIHRoaXMsIE1hcERhdGE6OmNyZWF0ZSh2bSkpOworICAgIHJldHVybiBtX3Nl
dERhdGEucmVtb3ZlKGV4ZWMsIHZhbHVlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0LmgKaW5kZXggZmMwYWEzMGZiOTU3Y2I4OWY5NWU1NjdlZjE2MGNmODE1MDNlMjUy
ZS4uM2UzYzBlYzJhNGJiMzhmYWJmNjRmY2Q3MTU2MzZlMzZjZGU3NzNkOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldC5oCkBAIC0yNiwxNSArMjYsNTkgQEAKICNpZm5kZWYgSlNT
ZXRfaAogI2RlZmluZSBKU1NldF9oCiAKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotY2xhc3MgTWFwRGF0YTsKLQotY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CitjbGFzcyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworCisgICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rp
b25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCisg
ICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgorICAgIGNsYXNzIEVudHJ5IHsK
KyAgICBwcml2YXRlOgorICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7CisKKyAg
ICBwdWJsaWM6CisgICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5KCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fa2V5OworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2tleTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICAgICAgeworICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0
S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqLCBKU1ZhbHVl
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5PiBTZXREYXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKIApAQCAtNTUsMTkgKzk5LDM0IEBAIGNsYXNzIEpTU2V0IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7
CiAgICAgfQogCi0gICAgTWFwRGF0YSogbWFwRGF0YSgpIHsgcmV0dXJuIG1fbWFwRGF0YS5nZXQo
KTsgfQorICAgIHR5cGVkZWYgU2V0RGF0YTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7
CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9zZXREYXRhLmJlZ2luKCk7CisgICAgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zZXREYXRhLmVuZCgpOworICAgIH0KKyAgICBi
b29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUq
KTsKKyAgICB2b2lkIGFkZChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICB2b2lkIGNsZWFyKEV4
ZWNTdGF0ZSopOworICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogCiBwcml2
YXRlOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fc2V0RGF0YSgpCiAgICAgewogICAgIH0K
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKLSAgICAK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKLSAgICBXcml0ZUJhcnJpZXI8
TWFwRGF0YT4gbV9tYXBEYXRhOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlND
ZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgU2V0RGF0YSBtX3NldERhdGE7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0
b3IuY3BwCmluZGV4IDJmYzI5ODkwMTc2ODczZTQ0YmI5MzE1MjRjNWYwM2VkYTA0ZjM3NWUuLjVl
Y2FjMTJkOWM0Y2EyMjc1ZWRkYWQ5ZTc4OTc4NTQ4Yzk3ZTdhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCkBAIC00MCwxNSArNDAsMTkg
QEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTU2V0KiBpdGVy
YXRlZE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9zZXQu
c2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgbV9pdGVyYXRlZE9iamVjdERhdGEu
c2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdC0+bWFwRGF0YSgpKTsKIH0KIAogdm9pZCBKU1Nl
dEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNTZXRJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldEl0ZXJh
dG9yKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOyAgICAgICAgCisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmplY3REYXRhKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zZXQpOworfQorCit2b2lkIEpTU2V0
SXRlcmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU1NldEl0ZXJh
dG9yKj4oY2VsbCktPn5KU1NldEl0ZXJhdG9yKCk7CiB9CiAKIEpTVmFsdWUgSlNTZXRJdGVyYXRv
cjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUg
dmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgK
aW5kZXggOWM3MGMyNmU1MGEyYjVkOTVlOGRjODFkZmQxOWRhYWQ0MjUwN2JkNy4uYjA2M2M1MTA5
NmIwOWQ3ZWFkY2I5NGI4ZmY0ZjlkNGM0MWJmY2M1NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaApAQCAtODAsMTggKzgwLDE4IEBAIGNsYXNzIEpT
U2V0SXRlcmF0b3IgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHJpdmF0ZToKICAg
ICBKU1NldEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiBpdGVy
YXRlZE9iamVjdCwgU2V0SXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tYXBEYXRhKCkt
PmJlZ2luKCkpCisgICAgICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+YmVnaW4oKSkK
ICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqKTsK
ICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBXcml0ZUJhcnJpZXI8TWFwRGF0YT4g
bV9pdGVyYXRlZE9iamVjdERhdGE7Ci0gICAgTWFwRGF0YTo6Y29uc3RfaXRlcmF0b3IgbV9pdGVy
YXRvcjsKKyAgICBKU1NldDo6Y29uc3RfaXRlcmF0b3IgbV9pdGVyYXRvcjsKICAgICBTZXRJdGVy
YXRpb25LaW5kIG1fa2luZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcENvbnN0cnVjdG9yLmNwcAppbmRleCBhZWQ0NmRjMzBmYzZhM2RhMzBiZmE1NjRhMDdj
ODEwNzM4OWZjZGE1Li5hYjU1ODM5NDkwYjhlZmMwMDIxNmVjMmQ5ZWYxZDJkZmE5MWIzNmI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3Bw
CkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdE1hcChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobWFwKTsKIAotICAgIEpT
VmFsdWUgYWRkZXJGdW5jdGlvbiA9IG1hcC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5zZXQpOworICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IG1hcC0+SlNPYmplY3Q6OmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIwNTY5MWM4NTJhYjJmZDJiYjNlNTQ3YTRjZGMwOWRlMzZjYjE3ZmUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNYXBE
YXRhLmgiCi0KLSNpbmNsdWRlICJDb3BpZWRBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJDb3B5Vmlz
aXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLQot
I2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5m
byBNYXBEYXRhOjpzX2luZm8gPSB7ICJNYXBEYXRhIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShNYXBEYXRhKSB9OwotCi1zdGF0aWMgY29uc3QgaW50MzJfdCBtaW5pbXVtTWFwU2l6ZSA9IDg7
Ci0KLU1hcERhdGE6Ok1hcERhdGEoVk0mIHZtKQotICAgIDogQmFzZSh2bSwgdm0ubWFwRGF0YVN0
cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fY2FwYWNpdHkoMCkKLSAgICAsIG1fc2l6ZSgwKQotICAg
ICwgbV9kZWxldGVkQ291bnQoMCkKLSAgICAsIG1faXRlcmF0b3JDb3VudCgwKQotICAgICwgbV9l
bnRyaWVzKDApCi17Ci19Ci0KLU1hcERhdGE6OkVudHJ5KiBNYXBEYXRhOjpmaW5kKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9zdHJpbmdLZXllZFRhYmxlLmZpbmQoYXNTdHJp
bmcoa2V5LnZhbHVlKS0+dmFsdWUoY2FsbEZyYW1lKS5pbXBsKCkpOwotICAgICAgICBpZiAoaXRl
ciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotICAgIH0KLSAgICBpZiAoa2V5
LnZhbHVlLmlzU3ltYm9sKCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRh
YmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7Ci0gICAg
ICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5ZWRUYWJsZS5lbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Ci0gICAgfQot
ICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9jZWxs
S2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5hc0NlbGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09
IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
cmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFsdWVdOwotICAgIH0KLQotICAgIGF1dG8gaXRlciA9
IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOwotICAg
IGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gJm1fZW50cmllc1tpdGVyLT52YWx1ZV07Ci19Ci0KLWJvb2wgTWFwRGF0YTo6
Y29udGFpbnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEtleVR5cGUga2V5KQotewotICAgIHJldHVy
biBmaW5kKGNhbGxGcmFtZSwga2V5KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlw
ZW5hbWUgS2V5PiBNYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6YWRkKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBNYXAmIG1hcCwgS2V5IGtleSwgS2V5VHlwZSBrZXlWYWx1ZSkKLXsKLSAgICB0eXBlbmFt
ZSBNYXA6Oml0ZXJhdG9yIGxvY2F0aW9uID0gbWFwLmZpbmQoa2V5KTsKLSAgICBpZiAobG9jYXRp
b24gIT0gbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gJm1fZW50cmllc1tsb2NhdGlvbi0+dmFs
dWVdOwotICAgIAotICAgIGlmICghZW5zdXJlU3BhY2VGb3JBcHBlbmQoY2FsbEZyYW1lKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoa2V5LCBtX3NpemUp
OwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBFbnRyeSogZW50
cnkgPSAmbV9lbnRyaWVzW21fc2l6ZSsrXTsKLSAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOwotICAg
IGVudHJ5LT5rZXkuc2V0KGNhbGxGcmFtZS0+dm0oKSwgdGhpcywga2V5VmFsdWUudmFsdWUpOwot
ICAgIHJldHVybiBlbnRyeTsKLX0KLQotdm9pZCBNYXBEYXRhOjpzZXQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEtleVR5cGUga2V5LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEVudHJ5KiBsb2NhdGlv
biA9IGFkZChjYWxsRnJhbWUsIGtleSk7Ci0gICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0
dXJuOwotICAgIGxvY2F0aW9uLT52YWx1ZS5zZXQoY2FsbEZyYW1lLT52bSgpLCB0aGlzLCB2YWx1
ZSk7Ci19Ci0gICAgCi1NYXBEYXRhOjpFbnRyeSogTWFwRGF0YTo6YWRkKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoa2V5LnZhbHVlLmlzU3RyaW5nKCkpCi0g
ICAgICAgIHJldHVybiBhZGQoY2FsbEZyYW1lLCBtX3N0cmluZ0tleWVkVGFibGUsIGFzU3RyaW5n
KGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpLCBrZXkpOwotICAgIGlmIChrZXku
dmFsdWUuaXNTeW1ib2woKSkKLSAgICAgICAgcmV0dXJuIGFkZChjYWxsRnJhbWUsIG1fc3ltYm9s
S2V5ZWRUYWJsZSwgYXNTeW1ib2woa2V5LnZhbHVlKS0+cHJpdmF0ZU5hbWUoKS51aWQoKSwga2V5
KTsKLSAgICBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gYWRkKGNhbGxG
cmFtZSwgbV9jZWxsS2V5ZWRUYWJsZSwga2V5LnZhbHVlLmFzQ2VsbCgpLCBrZXkpOwotICAgIHJl
dHVybiBhZGQoY2FsbEZyYW1lLCBtX3ZhbHVlS2V5ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtl
eS52YWx1ZSksIGtleSk7Ci19Ci0KLUpTVmFsdWUgTWFwRGF0YTo6Z2V0KENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBLZXlUeXBlIGtleSkKLXsKLSAgICBpZiAoRW50cnkqIGVudHJ5ID0gZmluZChjYWxs
RnJhbWUsIGtleSkpCi0gICAgICAgIHJldHVybiBlbnRyeS0+dmFsdWUuZ2V0KCk7Ci0gICAgcmV0
dXJuIEpTVmFsdWUoKTsKLX0KLQotYm9vbCBNYXBEYXRhOjpyZW1vdmUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEtleVR5cGUga2V5KQotewotICAgIGludDMyX3QgbG9jYXRpb247Ci0gICAgaWYgKGtl
eS52YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRU
YWJsZS5maW5kKGFzU3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGNhbGxGcmFtZSkuaW1wbCgpKTsK
LSAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJpbmdLZXllZFRhYmxlLmVuZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOwotICAgICAg
ICBtX3N0cmluZ0tleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gIGVsc2UgaWYgKGtleS52
YWx1ZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fc3ltYm9sS2V5ZWRUYWJs
ZS5maW5kKGFzU3ltYm9sKGtleS52YWx1ZSktPnByaXZhdGVOYW1lKCkudWlkKCkpOwotICAgICAg
ICBpZiAoaXRlciA9PSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7Ci0gICAgICAgIG1fc3lt
Ym9sS2V5ZWRUYWJsZS5yZW1vdmUoaXRlcik7Ci0gICAgfSBlbHNlIGlmIChrZXkudmFsdWUuaXND
ZWxsKCkpIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52
YWx1ZS5hc0NlbGwoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5k
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxvY2F0aW9uID0gaXRlci0+
dmFsdWU7Ci0gICAgICAgIG1fY2VsbEtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNWYWx1ZTo6
ZW5jb2RlKGtleS52YWx1ZSkpOwotICAgICAgICBpZiAoaXRlciA9PSBtX3ZhbHVlS2V5ZWRUYWJs
ZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbG9jYXRpb24gPSBp
dGVyLT52YWx1ZTsKLSAgICAgICAgbV92YWx1ZUtleWVkVGFibGUucmVtb3ZlKGl0ZXIpOwotICAg
IH0KLSAgICBtX2VudHJpZXNbbG9jYXRpb25dLmtleS5jbGVhcigpOwotICAgIG1fZW50cmllc1ts
b2NhdGlvbl0udmFsdWUuY2xlYXIoKTsKLSAgICBtX2RlbGV0ZWRDb3VudCsrOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIE1hcERhdGE6OnJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKEVu
dHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdDYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoc2hv
dWxkUGFjaygpKTsKLSAgICBpbnQzMl90IG5ld0VuZCA9IDA7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
bmV3Q2FwYWNpdHkgPiAwKTsKLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkr
KykgewotICAgICAgICBFbnRyeSYgZW50cnkgPSBtX2VudHJpZXNbaV07Ci0gICAgICAgIGlmICgh
ZW50cnkua2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEFTU0VSVChuZXdFbmQg
PCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uW25ld0VuZF0gPSBlbnRyeTsKLQot
ICAgICAgICAvLyBXZSBvdmVyd3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRoIGEgZm9yd2FyZGluZyBp
bmRleCBmb3IgdGhlIG5ldyBlbnRyeSwKLSAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZml4IHVw
IG91ciBoYXNoIHRhYmxlcyBiZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0aW9uYWwKLSAgICAgICAg
Ly8gaGFzaCBsb29rdXBzCi0gICAgICAgIGVudHJ5LnZhbHVlLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoanNOdW1iZXIobmV3RW5kKSk7Ci0gICAgICAgIG5ld0VuZCsrOwotICAgIH0KLQotICAgIC8v
IEZpeHVwIGZvciB0aGUgaGFzaG1hcHMKLSAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtleWVk
VGFibGUuYmVnaW4oKTsgcHRyICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKLSAg
ICAgICAgcHRyLT52YWx1ZSA9IG1fZW50cmllc1twdHItPnZhbHVlXS52YWx1ZS5nZXQoKS5hc0lu
dDMyKCk7Ci0gICAgZm9yIChhdXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsgcHRy
ICE9IG1fY2VsbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0g
bV9lbnRyaWVzW3B0ci0+dmFsdWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLSAgICBmb3IgKGF1
dG8gcHRyID0gbV9zdHJpbmdLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVk
VGFibGUuZW5kKCk7ICsrcHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+
dmFsdWVdLnZhbHVlLmdldCgpLmFzSW50MzIoKTsKLSAgICBmb3IgKGF1dG8gcHRyID0gbV9zeW1i
b2xLZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCk7ICsr
cHRyKQotICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLnZhbHVlLmdl
dCgpLmFzSW50MzIoKTsKLQotICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0
ZWRDb3VudCk7Ci0gICAgbV9kZWxldGVkQ291bnQgPSAwOwotCi0gICAgbV9jYXBhY2l0eSA9IG5l
d0NhcGFjaXR5OwotICAgIG1fc2l6ZSA9IG5ld0VuZDsKLSAgICBtX2VudHJpZXMgPSBkZXN0aW5h
dGlvbjsKLQotfQotCi12b2lkIE1hcERhdGE6OnJlcGxhY2VCYWNraW5nU3RvcmUoRW50cnkqIGRl
c3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQotewotICAgIEFTU0VSVCghc2hvdWxkUGFj
aygpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBhY2l0eSA+IDApOwotICAgIEFTU0VSVChu
ZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKLSAgICBtZW1jcHkoZGVzdGluYXRpb24sIG1fZW50
cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7Ci0gICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFj
aXR5OwotICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9uOwotfQotCi1DaGVja2VkQm9vbGVhbiBN
YXBEYXRhOjplbnN1cmVTcGFjZUZvckFwcGVuZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAg
ICBpZiAobV9jYXBhY2l0eSA+IG1fc2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBz
aXplX3QgcmVxdWlyZWRTaXplID0gc3RkOjptYXgobV9jYXBhY2l0eSArIChtX2NhcGFjaXR5IC8g
MikgKyAxLCBtaW5pbXVtTWFwU2l6ZSk7Ci0gICAgdm9pZCogbmV3U3RvcmFnZSA9IDA7Ci0gICAg
RGVmZXJHQyBkZWZlcigqY2FsbEZyYW1lLT5oZWFwKCkpOwotICAgIGlmICghY2FsbEZyYW1lLT5o
ZWFwKCktPnRyeUFsbG9jYXRlU3RvcmFnZSh0aGlzLCByZXF1aXJlZFNpemUgKiBzaXplb2YoRW50
cnkpLCAmbmV3U3RvcmFnZSkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxG
cmFtZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgRW50cnkqIG5ld0VudHJp
ZXMgPSBzdGF0aWNfY2FzdDxFbnRyeSo+KG5ld1N0b3JhZ2UpOwotICAgIGlmIChzaG91bGRQYWNr
KCkpCi0gICAgICAgIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3JlKG5ld0VudHJpZXMsIHJlcXVp
cmVkU2l6ZSk7Ci0gICAgZWxzZQotICAgICAgICByZXBsYWNlQmFja2luZ1N0b3JlKG5ld0VudHJp
ZXMsIHJlcXVpcmVkU2l6ZSk7Ci0gICAgY2FsbEZyYW1lLT5oZWFwKCktPndyaXRlQmFycmllcih0
aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNYXBEYXRhOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBNYXBEYXRhKiB0aGlzT2JqZWN0ID0ganNDYXN0
PE1hcERhdGEqPihjZWxsKTsKLSAgICBFbnRyeSogZW50cmllcyA9IHRoaXNPYmplY3QtPm1fZW50
cmllczsKLSAgICBpZiAoIWVudHJpZXMpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplX3Qgc2l6
ZSA9IHRoaXNPYmplY3QtPm1fc2l6ZTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9kZWxldGVkQ291
bnQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAg
ICAgICAgIGlmICghZW50cmllc1tpXS5rZXkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZW50cmllc1tpXS5rZXkpOwotICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmVudHJpZXNbaV0udmFsdWUpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKCZlbnRyaWVzWzBdLmtleSwgc2l6ZSAqIChz
aXplb2YoRW50cnkpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLQotICAgIHZp
c2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwgZW50
cmllcywgdGhpc09iamVjdC0+Y2FwYWNpdHlJbkJ5dGVzKCkpOwotfQotCi12b2lkIE1hcERhdGE6
OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29w
eVRva2VuIHRva2VuKQotewotICAgIE1hcERhdGEqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TWFwRGF0
YSo+KGNlbGwpOwotICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYg
dmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX2VudHJpZXMpKSB7Ci0gICAg
ICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gdGhpc09iamVjdC0+bV9lbnRyaWVzOwotICAgICAgICBF
bnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKHRoaXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKSk7Ci0gICAgICAgIGlmICh0aGlz
T2JqZWN0LT5zaG91bGRQYWNrKCkpCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5yZXBsYWNlQW5k
UGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCB0aGlzT2JqZWN0LT5tX2NhcGFjaXR5KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpc09iamVjdC0+cmVwbGFjZUJhY2tpbmdTdG9yZShu
ZXdFbnRyaWVzLCB0aGlzT2JqZWN0LT5tX2NhcGFjaXR5KTsKLSAgICAgICAgdmlzaXRvci5kaWRD
b3B5KG9sZEVudHJpZXMsIHRoaXNPYmplY3QtPmNhcGFjaXR5SW5CeXRlcygpKTsKLSAgICB9Ci0g
ICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci19Ci0KLXZv
aWQgTWFwRGF0YTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8TWFw
RGF0YSo+KGNlbGwpLT5+TWFwRGF0YSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBEYXRhLmgKaW5kZXggYjFkNTMwNjI5NmU1MDQ2YmQ0MDczZWU5OTkxOGVhNmZlNGZi
MTk0NS4uZDM0NjYzNGE1MDc0ZjQ0ODM5YTYwYWIzOGRjMjJhMTdhNGQyZDAzOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwRGF0YS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGEuaApAQCAtMjcsMjUgKzI3LDI5IEBACiAjZGVm
aW5lIE1hcERhdGFfaAogCiAjaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2VsbCB7CitjbGFzcyBFeGVjU3RhdGU7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgorY2xhc3MgTWFwRGF0YUltcGwgewogcHVibGljOgotICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgZW51bSA6IGludDMyX3QgeworICAgICAgICBtaW5pbXVt
TWFwU2l6ZSA9IDgKKyAgICB9OwogCiAgICAgc3RydWN0IGNvbnN0X2l0ZXJhdG9yIHsKLSAgICAg
ICAgY29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YSopOworICAgICAgICBjb25zdF9pdGVyYXRv
cihjb25zdCBNYXBEYXRhSW1wbCopOwogICAgICAgICB+Y29uc3RfaXRlcmF0b3IoKTsKICAgICAg
ICAgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gb3BlcmF0b3IqKCkg
Y29uc3Q7Ci0gICAgICAgIEpTVmFsdWUga2V5KCkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVCghYXRF
bmQoKSk7IHJldHVybiBtX21hcERhdGEtPm1fZW50cmllc1ttX2luZGV4XS5rZXkuZ2V0KCk7IH0K
LSAgICAgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlQoIWF0RW5kKCkp
OyByZXR1cm4gbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRleF0udmFsdWUuZ2V0KCk7IH0KKyAg
ICAgICAgSlNWYWx1ZSBrZXkoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFhdEVuZCgpKTsgcmV0
dXJuIG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLmtleSgpLmdldCgpOyB9CisgICAgICAg
IEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IFJFTEVBU0VfQVNTRVJUKCFhdEVuZCgpKTsgcmV0dXJu
IG1fbWFwRGF0YS0+bV9lbnRyaWVzW21faW5kZXhdLnZhbHVlKCkuZ2V0KCk7IH0KICAgICAgICAg
dm9pZCBvcGVyYXRvcisrKCkgeyBBU1NFUlQoIWF0RW5kKCkpOyBpbnRlcm5hbEluY3JlbWVudCgp
OyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdF9pdGVyYXRvciBlbmQoY29uc3QgTWFwRGF0YSopOwor
ICAgICAgICBzdGF0aWMgY29uc3RfaXRlcmF0b3IgZW5kKGNvbnN0IE1hcERhdGFJbXBsKik7CiAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpOwogICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKTsKICAgICAg
ICAgdm9pZCBmaW5pc2goKSB7IG1faW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+
OjptYXgoKTsgfQpAQCAtNjAsNyArNjQsNyBAQCBjbGFzcyBNYXBEYXRhIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgICAgIC8vIGZhc3QuCiAgICAgICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faW5kZXgpID49IHN0YXRpY19jYXN0PHNpemVfdD4obV9t
YXBEYXRhLT5tX3NpemUpOyB9CiAgICAgICAgIHZvaWQgaW50ZXJuYWxJbmNyZW1lbnQoKTsKLSAg
ICAgICAgY29uc3QgTWFwRGF0YSogbV9tYXBEYXRhOworICAgICAgICBjb25zdCBNYXBEYXRhSW1w
bCogbV9tYXBEYXRhOwogICAgICAgICBpbnQzMl90IG1faW5kZXg7CiAgICAgfTsKIApAQCAtNzAs
NDUgKzc0LDI1IEBAIGNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZTsKICAgICB9OwogCi0gICAgc3RhdGljIE1hcERhdGEqIGNyZWF0ZShWTSYgdm0p
Ci0gICAgewotICAgICAgICBNYXBEYXRhKiBtYXBEYXRhID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8TWFwRGF0YT4odm0uaGVhcCkpIE1hcERhdGEodm0pOwotICAgICAgICBtYXBEYXRhLT5m
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBtYXBEYXRhOwotICAgIH0KKyAgICBN
YXBEYXRhSW1wbCgpOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKLQotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0KENhbGxGcmFtZSosIEtleVR5cGUsIEpTVmFsdWUp
OwotICAgIEpTVmFsdWUgZ2V0KENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIGJvb2wgcmVtb3Zl
KENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIGJvb2wgY29udGFpbnMoQ2FsbEZyYW1lKiwgS2V5
VHlwZSk7Ci0gICAgc2l6ZV90IHNpemUoQ2FsbEZyYW1lKikgY29uc3QgeyByZXR1cm4gbV9zaXpl
IC0gbV9kZWxldGVkQ291bnQ7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVj
U3RhdGUqLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBlLCBKU1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGdl
dChFeGVjU3RhdGUqLCBLZXlUeXBlKTsKKyAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBLZXlU
eXBlKTsKKyAgICBib29sIGNvbnRhaW5zKEV4ZWNTdGF0ZSosIEtleVR5cGUpOworICAgIHNpemVf
dCBzaXplKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSAtIG1fZGVsZXRlZENvdW50
OyB9CiAKICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2l0
ZXJhdG9yKHRoaXMpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfaXRlcmF0b3I6OmVuZCh0aGlzKTsgfQogCiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAgICB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBvd25lciwgU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCiBwcml2YXRlOgogICAgIHR5
cGVkZWYgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQzMl90PiBJbmRleFRy
YWl0czsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFp
bnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJh
cnJpZXI8VW5rbm93bj4KLSAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4ga2V5OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFsdWU7Ci0gICAg
fTsKLQogICAgIHR5cGVkZWYgSGFzaE1hcDxKU0NlbGwqLCBpbnQzMl90LCB0eXBlbmFtZSBXVEY6
OkRlZmF1bHRIYXNoPEpTQ2VsbCo+OjpIYXNoLCBXVEY6Okhhc2hUcmFpdHM8SlNDZWxsKj4sIElu
ZGV4VHJhaXRzPiBDZWxsS2V5ZWRNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEVuY29kZWRKU1Zh
bHVlLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0
cywgSW5kZXhUcmFpdHM+IFZhbHVlS2V5ZWRNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
Z0ltcGwqLCBpbnQzMl90LCB0eXBlbmFtZSBXVEY6OkRlZmF1bHRIYXNoPFN0cmluZ0ltcGwqPjo6
SGFzaCwgV1RGOjpIYXNoVHJhaXRzPFN0cmluZ0ltcGwqPiwgSW5kZXhUcmFpdHM+IFN0cmluZ0tl
eWVkTWFwOwpAQCAtMTE2LDE4ICsxMDAsMTIgQEAgY2xhc3MgTWFwRGF0YSA6IHB1YmxpYyBKU0Nl
bGwgewogCiAgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcygpIHsgcmV0dXJuIG1fY2FwYWNpdHkg
KiBzaXplb2YoRW50cnkpOyB9CiAKLSAgICBNYXBEYXRhKFZNJik7Ci0gICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwq
LCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7Ci0KLQotICAgIEFMV0FZU19JTkxJTkUgRW50cnkq
IGZpbmQoQ2FsbEZyYW1lKiwgS2V5VHlwZSk7Ci0gICAgQUxXQVlTX0lOTElORSBFbnRyeSogYWRk
KENhbGxGcmFtZSosIEtleVR5cGUpOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBNYXAsIHR5cGVu
YW1lIEtleT4gQUxXQVlTX0lOTElORSBFbnRyeSogYWRkKENhbGxGcmFtZSosIE1hcCYsIEtleSwg
S2V5VHlwZSk7CisgICAgQUxXQVlTX0lOTElORSBFbnRyeSogZmluZChFeGVjU3RhdGUqLCBLZXlU
eXBlKTsKKyAgICBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwgSlNDZWxsKiBv
d25lciwgS2V5VHlwZSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5
PiBBTFdBWVNfSU5MSU5FIEVudHJ5KiBhZGQoRXhlY1N0YXRlKiwgSlNDZWxsKiBvd25lciwgTWFw
JiwgS2V5LCBLZXlUeXBlKTsKIAogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRQYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWxldGVkQ291bnQgJiYgIW1faXRlcmF0b3JDb3VudDsgfQotICAg
IENoZWNrZWRCb29sZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKENhbGxGcmFtZSopOworICAgIENo
ZWNrZWRCb29sZWFuIGVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNTdGF0ZSosIEpTQ2VsbCogb3du
ZXIpOwogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHJlcGxhY2VBbmRQYWNrQmFja2luZ1N0b3Jl
KEVudHJ5KiBkZXN0aW5hdGlvbiwgaW50MzJfdCBuZXdTaXplKTsKICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgcmVwbGFjZUJhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24sIGludDMyX3QgbmV3
U2l6ZSk7CkBAIC0xNDMsNyArMTIxLDE4IEBAIGNsYXNzIE1hcERhdGEgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBFbnRyeSogbV9lbnRyaWVzOwogfTsKIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcERh
dGE6OmNsZWFyKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBE
YXRhSW1wbDxFbnRyeT46Ok1hcERhdGFJbXBsKCkKKyAgICA6IG1fY2FwYWNpdHkoMCkKKyAgICAs
IG1fc2l6ZSgwKQorICAgICwgbV9kZWxldGVkQ291bnQoMCkKKyAgICAsIG1faXRlcmF0b3JDb3Vu
dCgwKQorICAgICwgbV9lbnRyaWVzKG51bGxwdHIpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEVudHJ5PgorQUxXQVlTX0lOTElORSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y2xlYXIoKQog
ewogICAgIG1fY2VsbEtleWVkVGFibGUuY2xlYXIoKTsKICAgICBtX3ZhbHVlS2V5ZWRUYWJsZS5j
bGVhcigpOwpAQCAtMTU1LDcgKzE0NCw4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNYXBEYXRhOjpj
bGVhcigpCiAgICAgbV9lbnRyaWVzID0gbnVsbHB0cjsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBE
YXRhOjpLZXlUeXBlOjpLZXlUeXBlKEpTVmFsdWUgdikKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5
PgorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OktleVR5cGU6OktleVR5cGUoSlNW
YWx1ZSB2KQogewogICAgIGlmICghdi5pc0RvdWJsZSgpKSB7CiAgICAgICAgIHZhbHVlID0gdjsK
QEAgLTE3NCw1NSArMTY0LDYyIEBAIEFMV0FZU19JTkxJTkUgTWFwRGF0YTo6S2V5VHlwZTo6S2V5
VHlwZShKU1ZhbHVlIHYpCiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoaSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBNYXBEYXRhOjpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1lbnQo
KQordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitBTFdBWVNfSU5MSU5FIHZvaWQgTWFwRGF0YUlt
cGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6aW50ZXJuYWxJbmNyZW1lbnQoKQogewogICAgIEVu
dHJ5KiBlbnRyaWVzID0gbV9tYXBEYXRhLT5tX2VudHJpZXM7CiAgICAgc2l6ZV90IGluZGV4ID0g
bV9pbmRleCArIDE7CiAgICAgc2l6ZV90IGVuZCA9IG1fbWFwRGF0YS0+bV9zaXplOwotICAgIHdo
aWxlIChpbmRleCA8IGVuZCAmJiAhZW50cmllc1tpbmRleF0ua2V5KQorICAgIHdoaWxlIChpbmRl
eCA8IGVuZCAmJiAhZW50cmllc1tpbmRleF0ua2V5KCkpCiAgICAgICAgIGluZGV4Kys7CiAgICAg
bV9pbmRleCA9IGluZGV4OwogfQotICAgIAotQUxXQVlTX0lOTElORSBib29sIE1hcERhdGE6OmNv
bnN0X2l0ZXJhdG9yOjplbnN1cmVTbG90KCkKKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitB
TFdBWVNfSU5MSU5FIGJvb2wgTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6ZW5z
dXJlU2xvdCgpCiB7CiAgICAgLy8gV2hlbiBhbiBpdGVyYXRvciBleGlzdHMgb3V0c2lkZSBvZiBo
b3N0IGNvc3QgaXQgaXMgcG9zc2libGUgZm9yCiAgICAgLy8gdGhlIGNvbnRhaW5pbmcgbWFwIHRv
IGJlIG1vZGlmaWVkCiAgICAgRW50cnkqIGVudHJpZXMgPSBtX21hcERhdGEtPm1fZW50cmllczsK
ICAgICBzaXplX3QgaW5kZXggPSBtX2luZGV4OwogICAgIHNpemVfdCBlbmQgPSBtX21hcERhdGEt
Pm1fc2l6ZTsKLSAgICBpZiAoaW5kZXggPCBlbmQgJiYgZW50cmllc1tpbmRleF0ua2V5KQorICAg
IGlmIChpbmRleCA8IGVuZCAmJiBlbnRyaWVzW2luZGV4XS5rZXkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgaW50ZXJuYWxJbmNyZW1lbnQoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2luZGV4KSA8IGVuZDsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25z
dF9pdGVyYXRvcjo6Y29uc3RfaXRlcmF0b3IoY29uc3QgTWFwRGF0YSogbWFwRGF0YSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OmNv
bnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcihjb25zdCBNYXBEYXRhSW1wbDxFbnRyeT4qIG1h
cERhdGEpCiAgICAgOiBtX21hcERhdGEobWFwRGF0YSkKICAgICAsIG1faW5kZXgoLTEpCiB7CiAg
ICAgaW50ZXJuYWxJbmNyZW1lbnQoKTsKIH0KIAotQUxXQVlTX0lOTElORSBNYXBEYXRhOjpjb25z
dF9pdGVyYXRvcjo6fmNvbnN0X2l0ZXJhdG9yKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5Pgor
QUxXQVlTX0lOTElORSBNYXBEYXRhSW1wbDxFbnRyeT46OmNvbnN0X2l0ZXJhdG9yOjp+Y29uc3Rf
aXRlcmF0b3IoKQogewogICAgIG1fbWFwRGF0YS0+bV9pdGVyYXRvckNvdW50LS07CiB9CiAKLUFM
V0FZU19JTkxJTkUgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gTWFw
RGF0YTo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbnRyeT4KK0FMV0FZU19JTkxJTkUgY29uc3QgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwg
SlNWYWx1ZT4gTWFwRGF0YUltcGw8RW50cnk+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IqKCkg
Y29uc3QKIHsKICAgICBFbnRyeSogZW50cnkgPSAmbV9tYXBEYXRhLT5tX2VudHJpZXNbbV9pbmRl
eF07Ci0gICAgcmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5
LT5rZXkuZ2V0KCksIGVudHJ5LT52YWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIFdURjo6S2V5VmFs
dWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+KGVudHJ5LT5rZXkoKS5nZXQoKSwgZW50cnktPnZhbHVl
KCkuZ2V0KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yIE1h
cERhdGE6OmNvbnN0X2l0ZXJhdG9yOjplbmQoY29uc3QgTWFwRGF0YSogbWFwRGF0YSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBhdXRvIE1hcERhdGFJbXBsPEVudHJ5
Pjo6Y29uc3RfaXRlcmF0b3I6OmVuZChjb25zdCBNYXBEYXRhSW1wbDxFbnRyeT4qIG1hcERhdGEp
IC0+IGNvbnN0X2l0ZXJhdG9yCiB7CiAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0KG1hcERhdGEp
OwogICAgIHJlc3VsdC5tX2luZGV4ID0gLTE7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQUxX
QVlTX0lOTElORSBib29sIE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0
IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlT
X0lOTElORSBib29sIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9y
IT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKQogewogICAgIEFTU0VSVChvdGhlci5tX21h
cERhdGEgPT0gbV9tYXBEYXRhKTsKICAgICBpZiAoYXRFbmQoKSAmJiBvdGhlci5hdEVuZCgpKQpA
QCAtMjMwLDcgKzIyNyw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXBEYXRhOjpjb25zdF9pdGVy
YXRvcjo6b3BlcmF0b3IhPShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoCiAgICAgcmV0dXJuIG1f
aW5kZXggIT0gb3RoZXIubV9pbmRleDsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIE1hcERhdGE6
OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikK
K3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgorQUxXQVlTX0lOTElORSBib29sIE1hcERhdGFJbXBs
PEVudHJ5Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3Im
IG90aGVyKQogewogICAgIHJldHVybiAhKCp0aGlzICE9IG90aGVyKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcERhdGFJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiMmM1
M2EyYjc1NmQwOGE4OWYxZWRhZGM1YTg2YTRiNzVhYTc3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCkBAIC0wLDAgKzEs
MjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiQ29waWVkQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVy
cy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFwRGF0YS5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorCisjaW5jbHVkZSA8d3RmL0NyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUg
RW50cnkqIE1hcERhdGFJbXBsPEVudHJ5Pjo6ZmluZChFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUg
a2V5KQoreworICAgIGlmIChrZXkudmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICBhdXRvIGl0
ZXIgPSBtX3N0cmluZ0tleWVkVGFibGUuZmluZChhc1N0cmluZyhrZXkudmFsdWUpLT52YWx1ZShl
eGVjKS5pbXBsKCkpOworICAgICAgICBpZiAoaXRlciA9PSBtX3N0cmluZ0tleWVkVGFibGUuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRl
ci0+dmFsdWVdOworICAgIH0KKyAgICBpZiAoa2V5LnZhbHVlLmlzU3ltYm9sKCkpIHsKKyAgICAg
ICAgYXV0byBpdGVyID0gbV9zeW1ib2xLZXllZFRhYmxlLmZpbmQoYXNTeW1ib2woa2V5LnZhbHVl
KS0+cHJpdmF0ZU5hbWUoKS51aWQoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fc3ltYm9sS2V5
ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gJm1f
ZW50cmllc1tpdGVyLT52YWx1ZV07CisgICAgfQorICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgYXV0byBpdGVyID0gbV9jZWxsS2V5ZWRUYWJsZS5maW5kKGtleS52YWx1ZS5h
c0NlbGwoKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fY2VsbEtleWVkVGFibGUuZW5kKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuICZtX2VudHJpZXNbaXRlci0+dmFs
dWVdOworICAgIH0KKworICAgIGF1dG8gaXRlciA9IG1fdmFsdWVLZXllZFRhYmxlLmZpbmQoSlNW
YWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSkpOworICAgIGlmIChpdGVyID09IG1fdmFsdWVLZXllZFRh
YmxlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJm1fZW50cmllc1tpdGVy
LT52YWx1ZV07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIGJvb2wgTWFw
RGF0YUltcGw8RW50cnk+Ojpjb250YWlucyhFeGVjU3RhdGUqIGV4ZWMsIEtleVR5cGUga2V5KQor
eworICAgIHJldHVybiBmaW5kKGV4ZWMsIGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVu
dHJ5PgordGVtcGxhdGUgPHR5cGVuYW1lIE1hcCwgdHlwZW5hbWUgS2V5PgoraW5saW5lIEVudHJ5
KiBNYXBEYXRhSW1wbDxFbnRyeT46OmFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogb3duZXIs
IE1hcCYgbWFwLCBLZXkga2V5LCBLZXlUeXBlIGtleVZhbHVlKQoreworICAgIHR5cGVuYW1lIE1h
cDo6aXRlcmF0b3IgbG9jYXRpb24gPSBtYXAuZmluZChrZXkpOworICAgIGlmIChsb2NhdGlvbiAh
PSBtYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAmbV9lbnRyaWVzW2xvY2F0aW9uLT52YWx1ZV07
CisKKyAgICBpZiAoIWVuc3VyZVNwYWNlRm9yQXBwZW5kKGV4ZWMsIG93bmVyKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQoa2V5LCBtX3NpemUpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBFbnRyeSogZW50cnkgPSAm
bV9lbnRyaWVzW21fc2l6ZSsrXTsKKyAgICBuZXcgKGVudHJ5KSBFbnRyeSgpOworICAgIGVudHJ5
LT5zZXRLZXkoZXhlYy0+dm0oKSwgb3duZXIsIGtleVZhbHVlLnZhbHVlKTsKKyAgICByZXR1cm4g
ZW50cnk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0
YUltcGw8RW50cnk+OjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBFbnRyeSogbG9jYXRpb24gPSBhZGQoZXhlYywg
b3duZXIsIGtleSk7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIGxv
Y2F0aW9uLT5zZXRWYWx1ZShleGVjLT52bSgpLCBvd25lciwgdmFsdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBFbnRyeSogTWFwRGF0YUltcGw8RW50cnk+OjphZGQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBLZXlUeXBlIGtleSkKK3sKKyAgICBpZiAo
a2V5LnZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1f
c3RyaW5nS2V5ZWRUYWJsZSwgYXNTdHJpbmcoa2V5LnZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgp
LCBrZXkpOworICAgIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkKKyAgICAgICAgcmV0dXJuIGFk
ZChleGVjLCBvd25lciwgbV9zeW1ib2xLZXllZFRhYmxlLCBhc1N5bWJvbChrZXkudmFsdWUpLT5w
cml2YXRlTmFtZSgpLnVpZCgpLCBrZXkpOworICAgIGlmIChrZXkudmFsdWUuaXNDZWxsKCkpCisg
ICAgICAgIHJldHVybiBhZGQoZXhlYywgb3duZXIsIG1fY2VsbEtleWVkVGFibGUsIGtleS52YWx1
ZS5hc0NlbGwoKSwga2V5KTsKKyAgICByZXR1cm4gYWRkKGV4ZWMsIG93bmVyLCBtX3ZhbHVlS2V5
ZWRUYWJsZSwgSlNWYWx1ZTo6ZW5jb2RlKGtleS52YWx1ZSksIGtleSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIEpTVmFsdWUgTWFwRGF0YUltcGw8RW50cnk+OjpnZXQo
RXhlY1N0YXRlKiBleGVjLCBLZXlUeXBlIGtleSkKK3sKKyAgICBpZiAoRW50cnkqIGVudHJ5ID0g
ZmluZChleGVjLCBrZXkpKQorICAgICAgICByZXR1cm4gZW50cnktPnZhbHVlKCkuZ2V0KCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRW50cnk+Citpbmxp
bmUgYm9vbCBNYXBEYXRhSW1wbDxFbnRyeT46OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEtleVR5
cGUga2V5KQoreworICAgIGludDMyX3QgbG9jYXRpb247CisgICAgaWYgKGtleS52YWx1ZS5pc1N0
cmluZygpKSB7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3RyaW5nS2V5ZWRUYWJsZS5maW5kKGFz
U3RyaW5nKGtleS52YWx1ZSktPnZhbHVlKGV4ZWMpLmltcGwoKSk7CisgICAgICAgIGlmIChpdGVy
ID09IG1fc3RyaW5nS2V5ZWRUYWJsZS5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbG9jYXRpb24gPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgbV9zdHJpbmdLZXllZFRh
YmxlLnJlbW92ZShpdGVyKTsKKyAgICB9ICBlbHNlIGlmIChrZXkudmFsdWUuaXNTeW1ib2woKSkg
eworICAgICAgICBhdXRvIGl0ZXIgPSBtX3N5bWJvbEtleWVkVGFibGUuZmluZChhc1N5bWJvbChr
ZXkudmFsdWUpLT5wcml2YXRlTmFtZSgpLnVpZCgpKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9z
eW1ib2xLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOworICAgICAgICBtX3N5bWJvbEtleWVkVGFibGUucmVt
b3ZlKGl0ZXIpOworICAgIH0gZWxzZSBpZiAoa2V5LnZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAg
IGF1dG8gaXRlciA9IG1fY2VsbEtleWVkVGFibGUuZmluZChrZXkudmFsdWUuYXNDZWxsKCkpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX2NlbGxLZXllZFRhYmxlLmVuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBsb2NhdGlvbiA9IGl0ZXItPnZhbHVlOworICAgICAgICBt
X2NlbGxLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRv
IGl0ZXIgPSBtX3ZhbHVlS2V5ZWRUYWJsZS5maW5kKEpTVmFsdWU6OmVuY29kZShrZXkudmFsdWUp
KTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV92YWx1ZUtleWVkVGFibGUuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2F0aW9uID0gaXRlci0+dmFsdWU7CisgICAg
ICAgIG1fdmFsdWVLZXllZFRhYmxlLnJlbW92ZShpdGVyKTsKKyAgICB9CisgICAgbV9lbnRyaWVz
W2xvY2F0aW9uXS5jbGVhcigpOworICAgIG1fZGVsZXRlZENvdW50Kys7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUlt
cGw8RW50cnk+OjpyZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShFbnRyeSogZGVzdGluYXRpb24s
IGludDMyX3QgbmV3Q2FwYWNpdHkpCit7CisgICAgQVNTRVJUKHNob3VsZFBhY2soKSk7CisgICAg
aW50MzJfdCBuZXdFbmQgPSAwOworICAgIFJFTEVBU0VfQVNTRVJUKG5ld0NhcGFjaXR5ID4gMCk7
CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgRW50
cnkmIGVudHJ5ID0gbV9lbnRyaWVzW2ldOworICAgICAgICBpZiAoIWVudHJ5LmtleSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVChuZXdFbmQgPCBuZXdDYXBhY2l0eSk7
CisgICAgICAgIGRlc3RpbmF0aW9uW25ld0VuZF0gPSBlbnRyeTsKKworICAgICAgICAvLyBXZSBv
dmVyd3JpdGUgdGhlIG9sZCBlbnRyeSB3aXRoIGEgZm9yd2FyZGluZyBpbmRleCBmb3IgdGhlIG5l
dyBlbnRyeSwKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4gZml4IHVwIG91ciBoYXNoIHRhYmxl
cyBiZWxvdyB3aXRob3V0IGRvaW5nIGFkZGl0aW9uYWwKKyAgICAgICAgLy8gaGFzaCBsb29rdXBz
CisgICAgICAgIGVudHJ5LnNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoanNOdW1iZXIobmV3RW5k
KSk7CisgICAgICAgIG5ld0VuZCsrOworICAgIH0KKworICAgIC8vIEZpeHVwIGZvciB0aGUgaGFz
aG1hcHMKKyAgICBmb3IgKGF1dG8gcHRyID0gbV92YWx1ZUtleWVkVGFibGUuYmVnaW4oKTsgcHRy
ICE9IG1fdmFsdWVLZXllZFRhYmxlLmVuZCgpOyArK3B0cikKKyAgICAgICAgcHRyLT52YWx1ZSA9
IG1fZW50cmllc1twdHItPnZhbHVlXS5rZXkoKS5nZXQoKS5hc0ludDMyKCk7CisgICAgZm9yIChh
dXRvIHB0ciA9IG1fY2VsbEtleWVkVGFibGUuYmVnaW4oKTsgcHRyICE9IG1fY2VsbEtleWVkVGFi
bGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFs
dWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKyAgICBmb3IgKGF1dG8gcHRyID0gbV9zdHJpbmdL
ZXllZFRhYmxlLmJlZ2luKCk7IHB0ciAhPSBtX3N0cmluZ0tleWVkVGFibGUuZW5kKCk7ICsrcHRy
KQorICAgICAgICBwdHItPnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgp
LmFzSW50MzIoKTsKKyAgICBmb3IgKGF1dG8gcHRyID0gbV9zeW1ib2xLZXllZFRhYmxlLmJlZ2lu
KCk7IHB0ciAhPSBtX3N5bWJvbEtleWVkVGFibGUuZW5kKCk7ICsrcHRyKQorICAgICAgICBwdHIt
PnZhbHVlID0gbV9lbnRyaWVzW3B0ci0+dmFsdWVdLmtleSgpLmdldCgpLmFzSW50MzIoKTsKKwor
ICAgIEFTU0VSVCgobV9zaXplIC0gbmV3RW5kKSA9PSBtX2RlbGV0ZWRDb3VudCk7CisgICAgbV9k
ZWxldGVkQ291bnQgPSAwOworCisgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgIG1f
c2l6ZSA9IG5ld0VuZDsKKyAgICBtX2VudHJpZXMgPSBkZXN0aW5hdGlvbjsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRW50cnk+CitpbmxpbmUgdm9pZCBNYXBEYXRhSW1wbDxFbnRyeT46OnJlcGxh
Y2VCYWNraW5nU3RvcmUoRW50cnkqIGRlc3RpbmF0aW9uLCBpbnQzMl90IG5ld0NhcGFjaXR5KQor
eworICAgIEFTU0VSVCghc2hvdWxkUGFjaygpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdDYXBh
Y2l0eSA+IDApOworICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2NhcGFjaXR5KTsKKyAgICBt
ZW1jcHkoZGVzdGluYXRpb24sIG1fZW50cmllcywgc2l6ZW9mKEVudHJ5KSAqIG1fc2l6ZSk7Cisg
ICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5OworICAgIG1fZW50cmllcyA9IGRlc3RpbmF0aW9u
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeT4KK2lubGluZSBDaGVja2VkQm9vbGVhbiBN
YXBEYXRhSW1wbDxFbnRyeT46OmVuc3VyZVNwYWNlRm9yQXBwZW5kKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBvd25lcikKK3sKKyAgICBpZiAobV9jYXBhY2l0eSA+IG1fc2l6ZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc3RkOjptYXgobV9jYXBh
Y2l0eSArIChtX2NhcGFjaXR5IC8gMikgKyAxLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtaW5pbXVt
TWFwU2l6ZSkpOworICAgIHZvaWQqIG5ld1N0b3JhZ2UgPSBudWxscHRyOworICAgIERlZmVyR0Mg
ZGVmZXIoKmV4ZWMtPmhlYXAoKSk7CisgICAgaWYgKCFleGVjLT5oZWFwKCktPnRyeUFsbG9jYXRl
U3RvcmFnZShvd25lciwgcmVxdWlyZWRTaXplICogc2l6ZW9mKEVudHJ5KSwgJm5ld1N0b3JhZ2Up
KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5
Kj4obmV3U3RvcmFnZSk7CisgICAgaWYgKHNob3VsZFBhY2soKSkKKyAgICAgICAgcmVwbGFjZUFu
ZFBhY2tCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKKyAgICBlbHNlCisg
ICAgICAgIHJlcGxhY2VCYWNraW5nU3RvcmUobmV3RW50cmllcywgcmVxdWlyZWRTaXplKTsKKyAg
ICBleGVjLT5oZWFwKCktPndyaXRlQmFycmllcihvd25lcik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5PgoraW5saW5lIHZvaWQgTWFwRGF0YUltcGw8RW50
cnk+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogb3duZXIsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIEVudHJ5KiBlbnRyaWVzID0gbV9lbnRyaWVzOworICAgIGlmICghZW50cmllcykKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX2RlbGV0ZWRDb3VudCkgeworICAgICAgICBmb3IgKGlu
dDMyX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKCFlbnRyaWVz
W2ldLmtleSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZW50cmll
c1tpXS52aXNpdENoaWxkcmVuKHZpc2l0b3IpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gR3VhcmFudGVlZCB0aGF0IGFsbCBmaWVsZHMgb2YgRW50cnkgdHlwZSBpcyBXcml0
ZUJhcnJpZXI8VW5rbm93bj4uCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHJlaW50ZXJw
cmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4oJmVudHJpZXNbMF0pLCBtX3NpemUgKiAo
c2l6ZW9mKEVudHJ5KSAvIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisgICAgfQor
CisgICAgdmlzaXRvci5jb3B5TGF0ZXIob3duZXIsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwg
ZW50cmllcywgY2FwYWNpdHlJbkJ5dGVzKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRy
eT4KK2lubGluZSB2b2lkIE1hcERhdGFJbXBsPEVudHJ5Pjo6Y29weUJhY2tpbmdTdG9yZShDb3B5
VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIGlmICh0b2tlbiA9PSBN
YXBCYWNraW5nU3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShtX2Vu
dHJpZXMpKSB7CisgICAgICAgIEVudHJ5KiBvbGRFbnRyaWVzID0gbV9lbnRyaWVzOworICAgICAg
ICBFbnRyeSogbmV3RW50cmllcyA9IHN0YXRpY19jYXN0PEVudHJ5Kj4odmlzaXRvci5hbGxvY2F0
ZU5ld1NwYWNlKGNhcGFjaXR5SW5CeXRlcygpKSk7CisgICAgICAgIGlmIChzaG91bGRQYWNrKCkp
CisgICAgICAgICAgICByZXBsYWNlQW5kUGFja0JhY2tpbmdTdG9yZShuZXdFbnRyaWVzLCBtX2Nh
cGFjaXR5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGFjZUJhY2tpbmdTdG9yZShu
ZXdFbnRyaWVzLCBtX2NhcGFjaXR5KTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEVudHJp
ZXMsIGNhcGFjaXR5SW5CeXRlcygpKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCmluZGV4IDU0ODIyMjc2OTQwMGI3MTg1
MmFmN2RiOGI3NWVmNTA3NTQ0ZWRkNGYuLjZkN2ExMWQ4ZmJiYjRlMTVhNDMxNmZlNTg4MWFkMGQ3
MTQwNTA5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFBy
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc2LDQxICs3Niw0MSBAQCB2
b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgIHB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnNpemUsIGFjY2Vzc29yLCBEb250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAotQUxX
QVlTX0lOTElORSBzdGF0aWMgTWFwRGF0YSogZ2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU01hcCogZ2V0TWFw
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRo
aXNWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNy
ZWF0ZU5vdEFuT2JqZWN0RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBKU01hcCogbWFwID0g
anNEeW5hbWljQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7CiAgICAgaWYgKCFtYXApIHsKICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24g
Y2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0IikpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBtYXAtPm1hcERhdGEoKTsKKyAgICBy
ZXR1cm4gbWFwOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRN
YXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRh
KQorICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKKyAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBkYXRhLT5jbGVhcigpOworICAgIG1hcC0+Y2xlYXIoY2FsbEZyYW1l
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU01hcCogbWFwID0g
Z2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFtYXAp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZGF0YS0+cmVtb3ZlKGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihtYXAtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRm9yRWFjaChDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU01h
cCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAg
aWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgSlNWYWx1ZSBjYWxsQmFjayA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CkBAIC0xMjIsMTQgKzEyMiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0ZvckVhY2goQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAg
aWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxCYWNrKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBj
YWNoZWRDYWxsKGNhbGxGcmFtZSwgZnVuY3Rpb24sIDIpOwotICAgICAgICBmb3IgKGF1dG8gcHRy
ID0gZGF0YS0+YmVnaW4oKSwgZW5kID0gZGF0YS0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5l
eGNlcHRpb24oKTsgKytwdHIpIHsKKyAgICAgICAgZm9yIChhdXRvIHB0ciA9IG1hcC0+YmVnaW4o
KSwgZW5kID0gbWFwLT5lbmQoKTsgcHRyICE9IGVuZCAmJiAhdm0tPmV4Y2VwdGlvbigpOyArK3B0
cikgewogICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKHRoaXNWYWx1ZSk7CiAgICAgICAg
ICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHB0ci52YWx1ZSgpKTsKICAgICAgICAgICAg
IGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgcHRyLmtleSgpKTsKICAgICAgICAgICAgIGNhY2hl
ZENhbGwuY2FsbCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRv
IHB0ciA9IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2
bS0+ZXhjZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0byBwdHIgPSBtYXAtPmJl
Z2luKCksIGVuZCA9IG1hcC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRpb24oKTsg
KytwdHIpIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgICAg
ICAgICBhcmdzLmFwcGVuZChwdHIudmFsdWUoKSk7CiAgICAgICAgICAgICBhcmdzLmFwcGVuZChw
dHIua2V5KCkpOwpAQCAtMTQxLDM4ICsxNDEsMzYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXBQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dldChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU01hcCogbWFwID0gZ2V0TWFw
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFtYXApCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBkYXRhLT5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSht
YXAtPmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNNYXAqIG1hcCA9IGdldE1h
cChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbWFwKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPmNvbnRhaW5zKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihtYXAtPmhhcyhjYWxsRnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2V0KENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewotICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gY2FsbEZyYW1lLT50aGlzVmFsdWUoKTsKKyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNh
bGxGcmFtZSwgdGhpc1ZhbHVlKTsKKyAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBkYXRhLT5zZXQoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIG1hcC0+c2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNNYXAqIG1hcCA9IGdldE1hcChj
YWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghbWFwKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZGF0YS0+c2l6ZShjYWxsRnJhbWUpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihtYXAtPnNpemUoY2FsbEZyYW1lKSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1ZhbHVlcyhDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dFByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5
cGUuY3BwCmluZGV4IGY4OGVhN2NmOTg2OGY2NjhiOGMyZTg4ODE1ZmY2NWNmMzk5MjdiNDkuLjZh
NmM0OWI0OGUwYzZhOTBjOTMwNzY5OWQ4Y2Q3OWI0Yzk1ZDJjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcApAQCAtMzQsNyArMzQsNyBAQAog
I2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNs
dWRlICJKU1NldEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1h
cERhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTc1LDUwICs3NSw1MSBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHB1dERpcmVj
dE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPnNpemUsIGFjY2Vzc29yLCBE
b250RW51bSB8IEFjY2Vzc29yKTsKIH0KIAotQUxXQVlTX0lOTElORSBzdGF0aWMgTWFwRGF0YSog
Z2V0TWFwRGF0YShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCitBTFdB
WVNfSU5MSU5FIHN0YXRpYyBKU1NldCogZ2V0U2V0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Zh
bHVlIHRoaXNWYWx1ZSkKIHsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoY2FsbEZy
YW1lLCB0aGlzVmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICBKU1NldCogc2V0ID0ganNEeW5hbWljQ2FzdDxKU1NldCo+KHRoaXNW
YWx1ZSk7CiAgICAgaWYgKCFzZXQpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBBU0NJSUxpdGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1TZXQgb2JqZWN0Iikp
OwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAg
IHJldHVybiBzZXQtPm1hcERhdGEoKTsKKyAgICByZXR1cm4gc2V0OwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCk7CisgICAgSlNTZXQqIHNldCA9IGdldFNldChjYWxsRnJhbWUs
IHRoaXNWYWx1ZSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgZGF0YS0+c2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBzZXQtPmFkZChjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhp
c1ZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmND
bGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBNYXBEYXRhKiBkYXRhID0gZ2V0TWFw
RGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghZGF0YSkK
KyAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgZGF0YS0+Y2xlYXIoKTsKKyAgICBzZXQtPmNsZWFyKGNhbGxGcmFtZSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZyYW1lLCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNTZXQqIHNldCA9IGdl
dFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghc2V0KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRhdGEtPnJlbW92ZShjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oc2V0LT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0ZvckVhY2goQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgTWFwRGF0YSogZGF0YSA9IGdldE1hcERhdGEoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWRhdGEpCisgICAgSlNTZXQq
IHNldCA9IGdldFNldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlm
ICghc2V0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIEpTVmFsdWUgY2FsbEJhY2sgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwpAQCAtMTMwLDEzICsxMzEsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzZXRQcm90b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsQmFjayk7CiAgICAgICAgIENhY2hlZENhbGwgY2Fj
aGVkQ2FsbChjYWxsRnJhbWUsIGZ1bmN0aW9uLCAxKTsKLSAgICAgICAgZm9yIChhdXRvIHB0ciA9
IGRhdGEtPmJlZ2luKCksIGVuZCA9IGRhdGEtPmVuZCgpOyBwdHIgIT0gZW5kICYmICF2bS0+ZXhj
ZXB0aW9uKCk7ICsrcHRyKSB7CisgICAgICAgIGZvciAoYXV0byBwdHIgPSBzZXQtPmJlZ2luKCks
IGVuZCA9IHNldC0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYgIXZtLT5leGNlcHRpb24oKTsgKytwdHIp
IHsKICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyh0aGlzVmFsdWUpOwogICAgICAgICAg
ICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgwLCBwdHIua2V5KCkpOwogICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5jYWxsKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGF1
dG8gcHRyID0gZGF0YS0+YmVnaW4oKSwgZW5kID0gZGF0YS0+ZW5kKCk7IHB0ciAhPSBlbmQgJiYg
IXZtLT5leGNlcHRpb24oKTsgKytwdHIpIHsKKyAgICAgICAgZm9yIChhdXRvIHB0ciA9IHNldC0+
YmVnaW4oKSwgZW5kID0gc2V0LT5lbmQoKTsgcHRyICE9IGVuZCAmJiAhdm0tPmV4Y2VwdGlvbigp
OyArK3B0cikgewogICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICAg
ICAgICAgIGFyZ3MuYXBwZW5kKHB0ci5rZXkoKSk7CiAgICAgICAgICAgICBKU0M6OmNhbGwoY2Fs
bEZyYW1lLCBjYWxsQmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOwpA
QCAtMTQ3LDE4ICsxNDgsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90
b0Z1bmNGb3JFYWNoKENhbGxGcmFtZSogY2FsbEZyYW1lKQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHNldFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKLSAgICBN
YXBEYXRhKiBkYXRhID0gZ2V0TWFwRGF0YShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOwotICAgIGlmICghZGF0YSkKKyAgICBKU1NldCogc2V0ID0gZ2V0U2V0KGNhbGxGcmFtZSwg
Y2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFzZXQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZGF0YS0+Y29udGFpbnMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHNldC0+aGFzKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNTaXplKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewot
ICAgIE1hcERhdGEqIGRhdGEgPSBnZXRNYXBEYXRhKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7Ci0gICAgaWYgKCFkYXRhKQorICAgIEpTU2V0KiBzZXQgPSBnZXRTZXQoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXNldCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGRhdGEtPnNpemUoY2FsbEZyYW1lKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoc2V0LT5zaXplKGNhbGxGcmFtZSkpKTsKIH0KICAgICAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jVmFsdWVzKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGE3MzI0YjRh
ZGYxZGU4NzdiNzQ2MDY4ZGE1NDEzZGFiZjUzYjU1NGMuLmU4ZmMwZTMyMGI1Y2EzYWUxMzNiYThm
NDZhYTU4ZWM1OWM3ZTFkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAg
LTIzMyw3ICsyMzMsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRF
dmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAg
dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIG1hcERhdGFTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBNYXBEYXRhOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShQUk9NSVNFUykKICAgICBw
cm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKaW5kZXggOTRjNDgzYjcyMzYwMjI4M2VkNDBkYTU1ZGVkMjk1NTNhMDMxNzgyNS4uN2U3
MWRlZjljN2E1MGY5N2ZjZTZhMWI5OTdiNjA3YzZhYWZiOWM0OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCkBAIC0yNjgsNyArMjY4LDYgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Vk0+IHsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxD
b2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxl
U3RydWN0dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG1hcERhdGFTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFBST01J
U0VTKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwRGF0
YUlubGluZXMuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFw
RGF0YUlubGluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2FjYTYyZDQzOTJkMjViNjY0MjI2Mzg3OTBkYzc0
NzJmMjBkMWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9NYXBEYXRhSW5saW5lcy5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBX
ZWJDb3JlX0ZXRF9NYXBEYXRhSW5saWluZXNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9NYXBEYXRh
SW5saWluZXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hcERhdGFJbmxpbmVzLmg+Cisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCmluZGV4IDlmOWYyNTljZTY3OTI4NDI0Nzg5YTNkMzRiZWYzOTJhNTc4OWFj
YWUuLjc1N2VjZDkwYTZjYWIzNzg5MGM2MmFjNjgzMzJkM2M5OWZiNjM2MTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApA
QCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTZXQuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL01hcERhdGEuaD4KKyNp
bmNsdWRlIDxydW50aW1lL01hcERhdGFJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4K
ICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cC5oPgpAQCAtODcsNyArODgsOCBAQCBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4aW11bUZpbHRlclJlY3Vyc2lvbiA9IDQwMDAwOwogCiBlbnVtIFdhbGtl
clN0YXRlIHsgU3RhdGVVbmtub3duLCBBcnJheVN0YXJ0U3RhdGUsIEFycmF5U3RhcnRWaXNpdE1l
bWJlciwgQXJyYXlFbmRWaXNpdE1lbWJlciwKICAgICBPYmplY3RTdGFydFN0YXRlLCBPYmplY3RT
dGFydFZpc2l0TWVtYmVyLCBPYmplY3RFbmRWaXNpdE1lbWJlciwKLSAgICBNYXBEYXRhU3RhcnRW
aXNpdEVudHJ5LCBNYXBEYXRhRW5kVmlzaXRLZXksIE1hcERhdGFFbmRWaXNpdFZhbHVlIH07Cisg
ICAgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeSwgTWFwRGF0YUVuZFZpc2l0S2V5LCBNYXBEYXRhRW5k
VmlzaXRWYWx1ZSwKKyAgICBTZXREYXRhU3RhcnRWaXNpdEVudHJ5LCBTZXREYXRhRW5kVmlzaXRL
ZXkgfTsKIAogLy8gVGhlc2UgY2FuJ3QgYmUgcmVvcmRlcmVkLCBhbmQgYW55IG5ldyB0eXBlcyBt
dXN0IGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKIGVudW0gU2VyaWFsaXphdGlvblRh
ZyB7CkBAIC0xMjIsOCArMTI0LDkgQEAgZW51bSBTZXJpYWxpemF0aW9uVGFnIHsKICAgICBTZXRP
YmplY3RUYWcgPSAyOSwKICAgICBNYXBPYmplY3RUYWcgPSAzMCwKICAgICBOb25NYXBQcm9wZXJ0
aWVzVGFnID0gMzEsCisgICAgTm9uU2V0UHJvcGVydGllc1RhZyA9IDMyLAogI2lmIEVOQUJMRShT
VUJUTEVfQ1JZUFRPKQotICAgIENyeXB0b0tleVRhZyA9IDMyLAorICAgIENyeXB0b0tleVRhZyA9
IDMzLAogI2VuZGlmCiAgICAgRXJyb3JUYWcgPSAyNTUKIH07CkBAIC0yNjYsOSArMjY5LDEwIEBA
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBOb25JbmRleFByb3BlcnRpZXNUYWcgPSAweEZGRkZGRkZE
OwogICoKICAqIE1hcCA6LSBNYXBPYmplY3RUYWcgTWFwRGF0YQogICoKLSAqIFNldCA6LSBTZXRP
YmplY3RUYWcgTWFwRGF0YQorICogU2V0IDotIFNldE9iamVjdFRhZyBTZXREYXRhCiAgKgotICog
TWFwRGF0YSA6LSAoPGtleTpWYWx1ZT48dmFsdWU6VmFsdWU+KSBOb25NYXBQcm9wZXJ0aWVzVGFn
ICg8bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFnCisgKiBNYXBE
YXRhIDotICg8a2V5OlZhbHVlPjx2YWx1ZTpWYWx1ZT4pKiBOb25NYXBQcm9wZXJ0aWVzVGFnICg8
bmFtZTpTdHJpbmdEYXRhPjx2YWx1ZTpWYWx1ZT4pKiBUZXJtaW5hdG9yVGFnCisgKiBTZXREYXRh
IDotICg8a2V5OlZhbHVlPikqIE5vblNldFByb3BlcnRpZXNUYWcgKDxuYW1lOlN0cmluZ0RhdGE+
PHZhbHVlOlZhbHVlPikqIFRlcm1pbmF0b3JUYWcKICAqCiAgKiBUZXJtaW5hbCA6LQogICogICAg
ICBVbmRlZmluZWRUYWcKQEAgLTEyMTYsOSArMTIyMCwxMSBAQCBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQogICAgIFZlY3Rvcjx1
aW50MzJfdCwgMTY+IGxlbmd0aFN0YWNrOwogICAgIFZlY3RvcjxQcm9wZXJ0eU5hbWVBcnJheSwg
MTY+IHByb3BlcnR5U3RhY2s7CiAgICAgVmVjdG9yPEpTT2JqZWN0KiwgMzI+IGlucHV0T2JqZWN0
U3RhY2s7Ci0gICAgVmVjdG9yPE1hcERhdGEqLCA0PiBtYXBEYXRhU3RhY2s7Ci0gICAgVmVjdG9y
PE1hcERhdGE6OmNvbnN0X2l0ZXJhdG9yLCA0PiBpdGVyYXRvclN0YWNrOwotICAgIFZlY3RvcjxK
U1ZhbHVlLCA0PiBpdGVyYXRvclZhbHVlU3RhY2s7CisgICAgVmVjdG9yPEpTTWFwKiwgND4gbWFw
U3RhY2s7CisgICAgVmVjdG9yPEpTTWFwOjpjb25zdF9pdGVyYXRvciwgND4gbWFwSXRlcmF0b3JT
dGFjazsKKyAgICBWZWN0b3I8SlNTZXQqLCA0PiBzZXRTdGFjazsKKyAgICBWZWN0b3I8SlNTZXQ6
OmNvbnN0X2l0ZXJhdG9yLCA0PiBzZXRJdGVyYXRvclN0YWNrOworICAgIFZlY3RvcjxKU1ZhbHVl
LCA0PiBtYXBJdGVyYXRvclZhbHVlU3RhY2s7CiAgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4g
c3RhdGVTdGFjazsKICAgICBXYWxrZXJTdGF0ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKICAgICBK
U1ZhbHVlIGluVmFsdWUgPSBpbjsKQEAgLTEzNTAsMzYgKzEzNTYsMjEgQEAgU2VyaWFsaXphdGlv
blJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKICAgICAg
ICAgICAgICAgICBKU01hcCogaW5NYXAgPSBqc0Nhc3Q8SlNNYXAqPihpblZhbHVlKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXJ0TWFwKGluTWFwKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YSogbWFwRGF0YSA9IGluTWFwLT5tYXBEYXRhKCk7
Ci0gICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwRGF0YSk7Ci0gICAgICAgICAg
ICAgICAgbWFwRGF0YVN0YWNrLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBpdGVy
YXRvclN0YWNrLmFwcGVuZChtYXBEYXRhLT5iZWdpbigpKTsKKyAgICAgICAgICAgICAgICBtX2dj
QnVmZmVyLmFwcGVuZChpbk1hcCk7CisgICAgICAgICAgICAgICAgbWFwU3RhY2suYXBwZW5kKGlu
TWFwKTsKKyAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLmFwcGVuZChpbk1hcC0+YmVn
aW4oKSk7CiAgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5hcHBlbmQoaW5NYXApOwog
ICAgICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHNldFN0YXJ0U3RhdGU6IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
aW5WYWx1ZS5pc09iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRPYmplY3RTdGFj
ay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU3RhY2tPdmVyZmxvd0Vycm9yOwotICAgICAgICAgICAgICAgIEpTU2V0KiBpblNldCA9
IGpzQ2FzdDxKU1NldCo+KGluVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghc3RhcnRTZXQo
aW5TZXQpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBNYXBE
YXRhKiBtYXBEYXRhID0gaW5TZXQtPm1hcERhdGEoKTsKLSAgICAgICAgICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZChtYXBEYXRhKTsKLSAgICAgICAgICAgICAgICBtYXBEYXRhU3RhY2suYXBwZW5k
KG1hcERhdGEpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhY2suYXBwZW5kKG1hcERhdGEt
PmJlZ2luKCkpOwotICAgICAgICAgICAgICAgIGlucHV0T2JqZWN0U3RhY2suYXBwZW5kKGluU2V0
KTsKLSAgICAgICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OgogICAgICAgICAgICAg
Y2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7Ci0gICAgICAgICAgICAgICAgTWFwRGF0YTo6
Y29uc3RfaXRlcmF0b3ImIHB0ciA9IGl0ZXJhdG9yU3RhY2subGFzdCgpOwotICAgICAgICAgICAg
ICAgIE1hcERhdGEqIG1hcERhdGEgPSBtYXBEYXRhU3RhY2subGFzdCgpOwotICAgICAgICAgICAg
ICAgIGlmIChwdHIgPT0gbWFwRGF0YS0+ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaXRl
cmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1hcERhdGFTdGFj
ay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgSlNNYXA6OmNvbnN0X2l0ZXJhdG9yJiBw
dHIgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBKU01hcCogbWFw
ID0gbWFwU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChwdHIgPT0gbWFwLT5lbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgbWFwU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAg
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4ob2JqZWN0KSB8fCBq
c0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYykpOwogICAgICAgICAg
ICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFwUHJvcGVydGllc1RhZyk7CkBA
IC0xMzg4LDIyICsxMzc5LDYwIEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFs
aXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGluVmFsdWUgPSBwdHIua2V5KCk7CiAgICAgICAgICAgICAgICAgbV9nY0J1ZmZlci5h
cHBlbmQocHRyLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5h
cHBlbmQocHRyLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yVmFsdWVTdGFj
ay5hcHBlbmQocHRyLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHN0YXRlU3RhY2suYXBwZW5k
KE1hcERhdGFFbmRWaXNpdEtleSk7CiAgICAgICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdEtleTogewot
ICAgICAgICAgICAgICAgIGluVmFsdWUgPSBpdGVyYXRvclZhbHVlU3RhY2subGFzdCgpOwotICAg
ICAgICAgICAgICAgIGl0ZXJhdG9yVmFsdWVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAgICAgaW5WYWx1ZSA9IG1hcEl0ZXJhdG9yVmFsdWVTdGFjay5sYXN0KCk7CisgICAgICAgICAg
ICAgICAgbWFwSXRlcmF0b3JWYWx1ZVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAg
ICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRWYWx1ZSk7CiAgICAgICAgICAgICAg
ICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIE1h
cERhdGFFbmRWaXNpdFZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yU3RhY2su
bGFzdCgpICE9IG1hcERhdGFTdGFjay5sYXN0KCktPmVuZCgpKQotICAgICAgICAgICAgICAgICAg
ICArK2l0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChtYXBJdGVyYXRv
clN0YWNrLmxhc3QoKSAhPSBtYXBTdGFjay5sYXN0KCktPmVuZCgpKQorICAgICAgICAgICAgICAg
ICAgICArK21hcEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIGdvdG8gbWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgc2V0U3Rh
cnRTdGF0ZTogeworICAgICAgICAgICAgICAgIEFTU0VSVChpblZhbHVlLmlzT2JqZWN0KCkpOwor
ICAgICAgICAgICAgICAgIGlmIChpbnB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0
ZXJSZWN1cnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFja092ZXJmbG93RXJy
b3I7CisgICAgICAgICAgICAgICAgSlNTZXQqIGluU2V0ID0ganNDYXN0PEpTU2V0Kj4oaW5WYWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdGFydFNldChpblNldCkpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKGluU2V0KTsK
KyAgICAgICAgICAgICAgICBzZXRTdGFjay5hcHBlbmQoaW5TZXQpOworICAgICAgICAgICAgICAg
IHNldEl0ZXJhdG9yU3RhY2suYXBwZW5kKGluU2V0LT5iZWdpbigpKTsKKyAgICAgICAgICAgICAg
ICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpblNldCk7CisgICAgICAgICAgICAgICAgZ290byBz
ZXREYXRhU3RhcnRWaXNpdEVudHJ5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0RGF0
YVN0YXJ0VmlzaXRFbnRyeToKKyAgICAgICAgICAgIGNhc2UgU2V0RGF0YVN0YXJ0VmlzaXRFbnRy
eTogeworICAgICAgICAgICAgICAgIEpTU2V0Ojpjb25zdF9pdGVyYXRvciYgcHRyID0gc2V0SXRl
cmF0b3JTdGFjay5sYXN0KCk7CisgICAgICAgICAgICAgICAgSlNTZXQqIHNldCA9IHNldFN0YWNr
Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAocHRyID09IHNldC0+ZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2V0SXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICAgICAgICAgIHNldFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KG9iamVjdCkpOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsK
KyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRp
ZXNUYWcpOworICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKKyAgICAg
ICAgICAgICAgICAgICAgZ290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpblZhbHVlID0gcHRyLmtleSgpOworICAgICAgICAgICAg
ICAgIHN0YXRlU3RhY2suYXBwZW5kKFNldERhdGFFbmRWaXNpdEtleSk7CisgICAgICAgICAgICAg
ICAgZ290byBzdGF0ZVVua25vd247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNl
dERhdGFFbmRWaXNpdEtleTogeworICAgICAgICAgICAgICAgIGlmIChzZXRJdGVyYXRvclN0YWNr
Lmxhc3QoKSAhPSBzZXRTdGFjay5sYXN0KCktPmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAr
K3NldEl0ZXJhdG9yU3RhY2subGFzdCgpOworICAgICAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0
YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3RhdGVVbmtub3du
OgogICAgICAgICAgICAgY2FzZSBTdGF0ZVVua25vd246IHsKICAgICAgICAgICAgICAgICBTZXJp
YWxpemF0aW9uUmV0dXJuQ29kZSB0ZXJtaW5hbENvZGUgPSBTdWNjZXNzZnVsbHlDb21wbGV0ZWQ7
CkBAIC0yMzYwLDkgKzIzODksMTAgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJh
c2UgewogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBjb25zdW1lTWFwRGF0YVRlcm1pbmF0
aW9uSWZQb3NzaWJsZSgpCisgICAgdGVtcGxhdGU8U2VyaWFsaXphdGlvblRhZyBUYWc+CisgICAg
Ym9vbCBjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJtaW5hdGlvbklmUG9zc2libGUoKQogICAgIHsK
LSAgICAgICAgaWYgKHJlYWRUYWcoKSA9PSBOb25NYXBQcm9wZXJ0aWVzVGFnKQorICAgICAgICBp
ZiAocmVhZFRhZygpID09IFRhZykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBt
X3B0ci0tOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzg0LDggKzI0MTQsOSBAQCBEZXNl
cmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICBW
ZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAx
Nj4gcHJvcGVydHlOYW1lU3RhY2s7CiAgICAgVmVjdG9yPEpTT2JqZWN0KiwgMzI+IG91dHB1dE9i
amVjdFN0YWNrOwotICAgIFZlY3RvcjxKU1ZhbHVlLCA0PiBrZXlTdGFjazsKLSAgICBWZWN0b3I8
TWFwRGF0YSosIDQ+IG1hcERhdGFTdGFjazsKKyAgICBWZWN0b3I8SlNWYWx1ZSwgND4gbWFwS2V5
U3RhY2s7CisgICAgVmVjdG9yPEpTTWFwKiwgND4gbWFwU3RhY2s7CisgICAgVmVjdG9yPEpTU2V0
KiwgND4gc2V0U3RhY2s7CiAgICAgVmVjdG9yPFdhbGtlclN0YXRlLCAxNj4gc3RhdGVTdGFjazsK
ICAgICBXYWxrZXJTdGF0ZSBzdGF0ZSA9IFN0YXRlVW5rbm93bjsKICAgICBKU1ZhbHVlIG91dFZh
bHVlOwpAQCAtMjQ3OCw0MSArMjUwOSw1MyBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVE
ZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCkKICAgICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01h
cDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG1hcCk7CiAgICAgICAgICAgICBvdXRwdXRP
YmplY3RTdGFjay5hcHBlbmQobWFwKTsKLSAgICAgICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBt
YXAtPm1hcERhdGEoKTsKLSAgICAgICAgICAgIG1hcERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7
Ci0gICAgICAgICAgICBnb3RvIG1hcERhdGFTdGFydFZpc2l0RW50cnk7Ci0gICAgICAgIH0KLSAg
ICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0ZTogewotICAgICAgICAgICAgaWYgKG91dHB1dE9iamVj
dFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAg
ICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9i
YWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5k
KHNldCk7Ci0gICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQoc2V0KTsKLSAgICAg
ICAgICAgIE1hcERhdGEqIG1hcERhdGEgPSBzZXQtPm1hcERhdGEoKTsKLSAgICAgICAgICAgIG1h
cERhdGFTdGFjay5hcHBlbmQobWFwRGF0YSk7CisgICAgICAgICAgICBtYXBTdGFjay5hcHBlbmQo
bWFwKTsKICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTsKICAgICAgICAg
fQogICAgICAgICBtYXBEYXRhU3RhcnRWaXNpdEVudHJ5OgogICAgICAgICBjYXNlIE1hcERhdGFT
dGFydFZpc2l0RW50cnk6IHsKLSAgICAgICAgICAgIGlmIChjb25zdW1lTWFwRGF0YVRlcm1pbmF0
aW9uSWZQb3NzaWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgbWFwRGF0YVN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgIGlmIChjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJtaW5hdGlvbklm
UG9zc2libGU8Tm9uTWFwUHJvcGVydGllc1RhZz4oKSkgeworICAgICAgICAgICAgICAgIG1hcFN0
YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRN
ZW1iZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBE
YXRhRW5kVmlzaXRLZXkpOwogICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247CiAgICAgICAg
IH0KLQogICAgICAgICBjYXNlIE1hcERhdGFFbmRWaXNpdEtleTogewotICAgICAgICAgICAga2V5
U3RhY2suYXBwZW5kKG91dFZhbHVlKTsKKyAgICAgICAgICAgIG1hcEtleVN0YWNrLmFwcGVuZChv
dXRWYWx1ZSk7CiAgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVuZChNYXBEYXRhRW5kVmlzaXRW
YWx1ZSk7CiAgICAgICAgICAgICBnb3RvIHN0YXRlVW5rbm93bjsKICAgICAgICAgfQotCiAgICAg
ICAgIGNhc2UgTWFwRGF0YUVuZFZpc2l0VmFsdWU6IHsKLSAgICAgICAgICAgIG1hcERhdGFTdGFj
ay5sYXN0KCktPnNldChtX2V4ZWMsIGtleVN0YWNrLmxhc3QoKSwgb3V0VmFsdWUpOwotICAgICAg
ICAgICAga2V5U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbWFwU3RhY2subGFzdCgp
LT5zZXQobV9leGVjLCBtYXBLZXlTdGFjay5sYXN0KCksIG91dFZhbHVlKTsKKyAgICAgICAgICAg
IG1hcEtleVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIGdvdG8gbWFwRGF0YVN0YXJ0
VmlzaXRFbnRyeTsKICAgICAgICAgfQorCisgICAgICAgIHNldE9iamVjdFN0YXJ0U3RhdGU6IHsK
KyAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVy
UmVjdXJzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVl
KCksIFN0YWNrT3ZlcmZsb3dFcnJvcik7CisgICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6
OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChzZXQpOworICAgICAgICAgICAgb3V0cHV0T2Jq
ZWN0U3RhY2suYXBwZW5kKHNldCk7CisgICAgICAgICAgICBzZXRTdGFjay5hcHBlbmQoc2V0KTsK
KyAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsKKyAgICAgICAgfQorICAg
ICAgICBzZXREYXRhU3RhcnRWaXNpdEVudHJ5OgorICAgICAgICBjYXNlIFNldERhdGFTdGFydFZp
c2l0RW50cnk6IHsKKyAgICAgICAgICAgIGlmIChjb25zdW1lQ29sbGVjdGlvbkRhdGFUZXJtaW5h
dGlvbklmUG9zc2libGU8Tm9uU2V0UHJvcGVydGllc1RhZz4oKSkgeworICAgICAgICAgICAgICAg
IHNldFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0
VmlzaXRNZW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZVN0YWNrLmFwcGVu
ZChTZXREYXRhRW5kVmlzaXRLZXkpOworICAgICAgICAgICAgZ290byBzdGF0ZVVua25vd247Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBTZXREYXRhRW5kVmlzaXRLZXk6IHsKKyAgICAgICAgICAg
IEpTU2V0KiBzZXQgPSBzZXRTdGFjay5sYXN0KCk7CisgICAgICAgICAgICBzZXQtPmFkZChtX2V4
ZWMsIG91dFZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gc2V0RGF0YVN0YXJ0VmlzaXRFbnRyeTsK
KyAgICAgICAgfQorCiAgICAgICAgIHN0YXRlVW5rbm93bjoKICAgICAgICAgY2FzZSBTdGF0ZVVu
a25vd246CiAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB0ZXJtaW5hbCA9IHJlYWRUZXJtaW5hbCgp
KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggYzU0MTZmNGU3OWIwMzFjOTI4YmZjOWY5YzBlMGMwODAxNWRiNmRkMS4uMjA3
ZmIwZTExN2Y4ZTliZDliZDQ3YjBhZmJhYTk1YmNlMTdlMTQ5MiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE1LTAzLTEyICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgor
CisgICAgICAgIEludGVncmF0ZSBNYXBEYXRhIGludG8gSlNNYXAgYW5kIEpTU2V0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1NTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IHN0cnVjdHVyZS1j
bG9uZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGJlY29tZXMgYXdhcmUgb2YgdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiBNYXAgYW5kIFNldC4KKworICAgICAgICAqIGZhc3Qvc3RvcmFnZS9zZXJpYWxpemVk
LXNjcmlwdC12YWx1ZS5odG1sOgorCiAyMDE1LTAzLTExICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1t
YXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gVGVzdCBnYXJkZW5pbmcgYWZ0ZXIg
cjE4MTI2MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3NlcmlhbGl6ZWQt
c2NyaXB0LXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1z
Y3JpcHQtdmFsdWUuaHRtbAppbmRleCA0MzVkMDdmYmJhZjY3MDA5OGI5MmRjODViYzFlNjViZGJi
ZDg5YjAzLi5jYmM1MjRiYTZkZmU0OWQ4YTRiZjA5NTQxODVjYmRkZTRlNTJjYjc4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc2VyaWFsaXplZC1zY3JpcHQtdmFsdWUu
aHRtbApAQCAtNDE1LDE2ICs0MTUsMTQgQEAKIAogdGVzdFNlcmlhbGl6YXRpb24oc2V0T2JqZWN0
LAogWwotICAgIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDcsIDB4MDcsIDB4MGEs
IDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4
MGEsIDB4MDAsIAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2Ys
IDB4MTMsIDB4MDAsIAotICAgIDB4MTMsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4NjIsIDB4MDAsIAotICAgIDB4NjEsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MTAsIDB4ZmUs
IDB4ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4MDAsIDB4MWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4
ZmYsIDB4MDAsIDB4MTMsIDB4MDEsIAotICAgIDB4MWYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4NjUsIDB4MDAsIDB4NzgsIDB4MDAsIAotICAgIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4
NmUsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NmYsIAotICAgIDB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYs
IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIAotICAgIDB4ZmYKKyAgICAweDA1LCAweDAw
LCAweDAwLCAweDAwLCAweDFkLCAweDA3LCAweDBhLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4M2YsIDB4MTMsIDB4MDAsIDB4MTAsCisgICAgMHgwMywg
MHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MiwKKyAgICAweDAw
LCAweDFhLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDIwLCAweDA3LAorICAgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzgsIDB4MDAsIDB4NzAsIDB4MDAsCisgICAg
MHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMiwKKyAg
ICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisKIF0pOwog
CiB0ZXN0U2VyaWFsaXphdGlvbihmdW5jdGlvbigpe30sIFtdLCBudWxsLCBET01FeGNlcHRpb24u
REFUQV9DTE9ORV9FUlIpOwo=
</data>
<flag name="review"
          id="273418"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>