<?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>98792</bug_id>
          
          <creation_ts>2012-10-09 10:37:41 -0700</creation_ts>
          <short_desc>Copying collection shouldn&apos;t require O(live bytes) memory overhead</short_desc>
          <delta_ts>2012-10-15 08:45:17 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99328</dependson>
    
    <dependson>99331</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>737922</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 10:37:41 -0700</bug_when>
    <thetext>Currently our copying collection occurs simultaneously with the marking phase. We&apos;d like to be able to reuse CopiedBlocks as soon as they become fully evacuated, but this is not currently possible because we don&apos;t know the liveness statistics of each old CopiedBlock until marking/copying has already finished. Instead, we have to allocate additional memory from the OS to use as our working set of CopiedBlocks while copying. We then return the fully evacuated old CopiedBlocks back to the block allocator, thus giving our copying phase an O(live bytes) overhead.

To fix this, we should instead split the copying phase apart from the marking phase. This way we have full liveness data for each CopiedBlock during the copying phase so that we can reuse them the instant they become fully evacuated. With the additional liveness data that each CopiedBlock accumulates, we can add some additional heuristics to the collector. For example, we can calculate our global Heap fragmentation and only choose to do a copying phase if that fragmentation exceeds some limit. As another example, we can skip copying blocks that are already above a particular fragmentation limit, which allows older objects to coalesce into blocks that are rarely copied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738080</commentid>
    <comment_count>1</comment_count>
      <attachid>167822</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 12:34:55 -0700</bug_when>
    <thetext>Created attachment 167822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738081</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 12:38:52 -0700</bug_when>
    <thetext>Attachment 167822 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 28 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>738091</commentid>
    <comment_count>3</comment_count>
      <attachid>167822</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-09 12:48:18 -0700</bug_when>
    <thetext>Comment on attachment 167822
Patch

Attachment 167822 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14250022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738096</commentid>
    <comment_count>4</comment_count>
      <attachid>167825</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 12:53:42 -0700</bug_when>
    <thetext>Created attachment 167825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738100</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 12:56:13 -0700</bug_when>
    <thetext>Attachment 167825 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 32 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>738103</commentid>
    <comment_count>6</comment_count>
      <attachid>167825</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-09 13:00:05 -0700</bug_when>
    <thetext>Comment on attachment 167825
Patch

Attachment 167825 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14223828</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738108</commentid>
    <comment_count>7</comment_count>
      <attachid>167831</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 13:03:29 -0700</bug_when>
    <thetext>Created attachment 167831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738116</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 13:07:33 -0700</bug_when>
    <thetext>Attachment 167831 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 32 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>738119</commentid>
    <comment_count>9</comment_count>
      <attachid>167831</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-09 13:12:14 -0700</bug_when>
    <thetext>Comment on attachment 167831
Patch

Attachment 167831 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14249063</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738128</commentid>
    <comment_count>10</comment_count>
      <attachid>167835</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 13:23:36 -0700</bug_when>
    <thetext>Created attachment 167835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738129</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 13:25:49 -0700</bug_when>
    <thetext>Attachment 167835 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 32 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>738220</commentid>
    <comment_count>12</comment_count>
      <attachid>167853</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-09 14:58:20 -0700</bug_when>
    <thetext>Created attachment 167853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738227</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 15:00:42 -0700</bug_when>
    <thetext>Attachment 167853 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 33 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>739480</commentid>
    <comment_count>14</comment_count>
      <attachid>168115</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-10 18:37:18 -0700</bug_when>
    <thetext>Created attachment 168115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739484</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 18:41:06 -0700</bug_when>
    <thetext>Attachment 168115 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 33 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>739629</commentid>
    <comment_count>16</comment_count>
      <attachid>168115</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-10-10 22:57:04 -0700</bug_when>
    <thetext>Comment on attachment 168115
Patch

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

&gt; Source/JavaScriptCore/runtime/Options.h:120
&gt; +    v(double, maxCopiedSpaceFragmentation, 0.8) \
&gt; +    v(double, maxCopiedBlockFragmentation, 0.9) \

I believe the right word here is &quot;min...Utilization&quot;. &quot;Fragmentation&quot; usually means the wasted space, not the used space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739994</commentid>
    <comment_count>17</comment_count>
      <attachid>168230</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-11 08:28:51 -0700</bug_when>
    <thetext>Created attachment 168230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739997</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 08:32:16 -0700</bug_when>
    <thetext>Attachment 168230 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 33 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>740297</commentid>
    <comment_count>19</comment_count>
      <attachid>168285</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-11 15:18:11 -0700</bug_when>
    <thetext>Created attachment 168285
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740300</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 15:19:43 -0700</bug_when>
    <thetext>Attachment 168285 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSCell.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 33 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>740386</commentid>
    <comment_count>21</comment_count>
      <attachid>168285</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-11 16:18:58 -0700</bug_when>
    <thetext>Comment on attachment 168285
Patch

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

&gt; Source/JavaScriptCore/heap/GCThread.cpp:88
&gt; +    {
&gt; +        MutexLocker locker(m_shared.m_markingLock);
&gt; +    }

Add a comment to say why this trick works.

&gt; Source/JavaScriptCore/heap/GCThread.cpp:94
&gt; +                m_slotVisitor-&gt;drainFromShared(SlotVisitor::SlaveDrain);

One sentence comment about termination condition for marking, please.

&gt; Source/JavaScriptCore/heap/GCThread.cpp:98
&gt; +                m_copyVisitor-&gt;copyFromShared();

One sentence comment about termination condition for copying, please.

&gt; Source/JavaScriptCore/heap/Heap.h:267
&gt; +    struct CopyFunctor : public MarkedBlock::VoidFunctor {

Up to you, but you could rename it to something like MarkedBlockSnapshotFunctor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741118</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-12 12:38:33 -0700</bug_when>
    <thetext>Committed r131213: &lt;http://trac.webkit.org/changeset/131213&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741940</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-15 04:30:56 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Committed r131213: &lt;http://trac.webkit.org/changeset/131213&gt;

... and buildfixes landed in:
https://trac.webkit.org/changeset/131215
https://trac.webkit.org/changeset/131225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742050</commentid>
    <comment_count>24</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-10-15 08:06:25 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Committed r131213: &lt;http://trac.webkit.org/changeset/131213&gt;

And it made all tests crash on Qt ARM - https://bugs.webkit.org/show_bug.cgi?id=99328</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742056</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-15 08:30:45 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #22)
&gt; &gt; Committed r131213: &lt;http://trac.webkit.org/changeset/131213&gt;
&gt; 
&gt; And it made all tests crash on Qt ARM - https://bugs.webkit.org/show_bug.cgi?id=99328

It&apos;s odd that it only made ARMv7 fail. I added a new use of WTF::weakCompareAndSwap which would be called during the marking phase in CopiedBlock::reportLiveBytes. Maybe that&apos;s what&apos;s causing the crash if ARMv7 doesn&apos;t support CAS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742075</commentid>
    <comment_count>26</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-10-15 08:40:13 -0700</bug_when>
    <thetext>I filed bug 99331 as a potential fix for the ARM crashes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167822</attachid>
            <date>2012-10-09 12:34:55 -0700</date>
            <delta_ts>2012-10-09 12:53:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121009123358.patch</filename>
            <type>text/plain</type>
            <size>79985</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIGRvaW5nIAorICAgICAgICBzb21lIHNldCBvZiBHQyB0YXNrcy4gQ3VycmVudGx5LCB0
aGF0IHNldCBvZiB0YXNrcyBpbmNsdWRlcyBNYXJrLCBDb3B5LCBTeW5jaHJvbml6ZSwgYW5kIEV4
aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBoYXMgYW4gaW5kaXZpZHVhbCBxdWV1ZSBvZiB0YXNr
cyB3aGljaCBpdCBwb2xscyBmcm9tIGFuZCBleGVjdXRlcyBpbiBvcmRlci4gQW55IHRocmVhZCBj
YW4gaXNzdWUgYW55IG90aGVyIAorICAgICAgICB0aHJlYWQgYSBuZXcgdGFzay4gRm9yIGV4YW1w
bGUsIHdoZW4gYSB0aHJlYWQgdGhhdCBpcyBkb2luZyBtYXJraW5nIHJlYWxpemVzIGl0IG1pZ2h0
IGJlIHByb2ZpdGFibGUgZm9yIAorICAgICAgICBvdGhlciB0aHJlYWRzIHRvIHdha2UgdXAgYW5k
IHN0YXJ0IGRvaW5nIG1hcmtpbmcsIGl0IHdpbGwgaXNzdWUgYSB0YXNrIHRvIHRoZW0uCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjp0aHJlYWRJRCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpp
bml0aWFsaXplVGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6c2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6Y29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpH
Q1RocmVhZDo6c3luY2hyb25pemVXaXRoKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OndhaXRG
b3JOZXh0VGFzayk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMpOgorICAgICAgICAqIGhlYXAv
R0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWQpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZDo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcDogVGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBub3cgaGFzIGEgbGlz
dCBvZiBHQ1RocmVhZCBvYmplY3RzIHJhdGhlciB0aGFuIHJhdyAKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllcnMuCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Y2hpbGRWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
R0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMpOiBUaGlzIGZ1
bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyB0YXNrcyAKKyAgICAgICAgdG8g
dGhlIHdvcmtlciB0aHJlYWRzIHRoYXQgdGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBvYmplY3RzIGtu
b3dzIGFib3V0LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6R0NUaHJl
YWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcpOiBDYWxsYmFjayB0byBsZXQgdGhlIEdDVGhy
ZWFkU2hhcmVkRGF0YSBrbm93IHRoYXQgbWFya2luZyBoYXMgCisgICAgICAgIHN0YXJ0ZWQuCisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRv
IGZvciBmaW5pc2hpbmcgbWFya2luZy4gV2UgZG9uJ3QgbmVlZCB0byB3YWl0IG9uIHRoZSBvdGhl
ciAKKyAgICAgICAgbWFya2luZyB0aHJlYWRzIHRvIGZpbmlzaCB1bmxlc3Mgd2Ugd2FudCBhY2N1
cmF0ZSBvYmplY3QgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmtpbmcgcGhhc2UuCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nKTogRGl0dG8gZm9y
IHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmluaXNoaW5nIGNvcHlpbmcuIEFn
YWluLCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgb24gdGhlIAorICAgICAgICBvdGhlciB0aHJlYWRz
IHRvIGZpbmlzaCBjb3B5aW5nIGJlY2F1c2Ugd2UgY2FuIHJlbHkgb24gQ29waWVkU3BhY2U6OmRv
bmVDb3B5aW5nIHRvIHdhaXQgdW50aWwgY29weWluZyBpcyAKKyAgICAgICAgZmluaXNoZWQuCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChHQ1RocmVhZFNoYXJlZERhdGEpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERh
dGE6OmdldE5leHRCbG9ja3NUb0NvcHkpOiBBdG9taWNhbGx5IGdldHMgdGhlIG5leHQgY2h1bmsg
b2Ygd29yayBmb3IgYSBjb3B5aW5nIHRocmVhZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3Rz
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KTogUmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvcHlpbmcgcGhhc2UsIG5vdGlmeWlu
ZyB0aGUgY29weWluZyB0aHJlYWRzLCAKKyAgICAgICAgYW5kIGRvaW5nIGFueSBjb3B5aW5nIHdv
cmsgaWYgbmVjZXNzYXJ5LgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6Q29weUZ1bmN0b3I6OkNvcHlGdW5jdG9yKToKKyAgICAgICAgKENvcHlGdW5jdG9yKToK
KyAgICAgICAgKEpTQzo6Q29weUZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcDogQ2hhbmdlZCB0aGUgaW5jcmVtZW50YWwgc3dlZXBlciB0
byBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IG9mIE1hcmtlZEJsb2NrcyAKKyAgICAgICAg
dGhhdCBuZWVkIHN3ZWVwaW5nLCBzaW5jZSB0aGlzIG5vdyByZXNpZGVzIGluIHRoZSBIZWFwIHNv
IHRoYXQgaXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgYnkgdGhlIEdDVGhyZWFkcy4KKyAgICAgICAg
KEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAo
SlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OnNldHVwKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZUtub3duUGFyYWxsZWwpOiBOb3cgdXNlcyB0aGUgZGlzcGF0Y2ggbWVjaGFuaXNtIGluIEdDVGhy
ZWFkU2hhcmVkRGF0YSBmb3IgdGVsbGluZyAKKyAgICAgICAgdGhlIEdDVGhyZWFkcyB0byB3YWtl
IHVwIGFuZCBzdGFydCBtYXJraW5nLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29weUxhdGVyKTogTm90aWZpZXMgdGhlIENvcGllZEJsb2NrIHRoYXQgdGhlcmUgYXJlIHNvbWUg
bGl2ZSBieXRlcyB0aGF0IG1heSBuZWVkIAorICAgICAgICB0byBiZSBjb3BpZWQuCisgICAgICAg
ICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChCdXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKTog
VXNlcyB0aGUgbmV3IENvcHlWaXNpdG9yLgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6
CisgICAgICAgIChNZXRob2RUYWJsZSk6IEFkZGVkIG5ldyAidmlydHVhbCIgZnVuY3Rpb24gY29w
eUJhY2tpbmdTdG9yZSB0byBtZXRob2QgdGFibGUuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90aGluZy4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29weUJ1dHRlcmZseSk6IERvZXMgdGhlIGFjdHVhbCBjb3B5aW5nIG9m
IHRoZSBidXR0ZXJmbHkuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkpOiBDYWxscyBjb3B5TGF0ZXIgZm9yIHRoZSBidXR0ZXJmbHkuCisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTogCisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1ldGhvZFRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmhlcml0cyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6IEFkZGVkIHR3byBuZXcgY29uc3RhbnRzLCBtYXhIZWFwRnJh
Z21lbnRhdGlvbiBhbmQgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAKKyAgICAgICAgdG8g
Z292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUgZG9pbmcg
Y29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMDkgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWZ0ZXIgcjEzMDM0NCwgT3BhcXVlSlNTdHJp
bmc6OmlkZW50aWZpZXIoKSBhZGRzIHdyYXBwZWQgU3RyaW5nIHRvIGlkZW50aWZpZXIgdGFibGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzA2NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiwxMSBAQAogCQlDMjExMjJFMTE1REQ5
QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBH
Q1RocmVhZFNoYXJlZERhdGEuY3BwICovOyB9OwogCQlDMjExMjJFMjE1REQ5QUIzMDA3OTBFM0Eg
LyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWRE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkUwMTVERDlB
QjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjcxNjFGOTlFMDAwMjM2OUVE
IC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5jcHAgKi87
IH07CisJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMzIxRjMxNjFGOTlFMDAw
MjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjkxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9y
SW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9k
cy5oICovOyB9OworCQlDMjEzMjFGQTE2MUY5OUUwMDAyMzY5RUQgLyogR0NUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMzIxRjUxNjFG
OTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLzsgfTsKKwkJQzIxMzIxRkIxNjFGOTlFMDAw
MjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjEzMjFGNjE2MUY5OUUwMDAyMzY5RUQgLyogR0NUaHJlYWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjE2MEZFNzE1RjdF
OTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIg
LyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RW
aXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi87IH07CiAJCUMy
MkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIz
OSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTQ4Niw2ICsxNDkxLDExIEBACiAJCUMyMTEyMkRFMTVERDlBQjMw
MDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyRTAxNUREOUFCMzAwNzkwRTNB
IC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjEzMjFGMjE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMzE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbG90VmlzaXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBD
b3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3Bp
ZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUwMTYxQ0Q2
OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xODE5LDYgKzE4MjksMTEgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8q
IGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMy
MTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8sCisJCQkJQzIxMzIx
RjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi8sCisJCQkJQzIxMzIxRjQxNjFG
OTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovLAorCQkJCUMyMTMy
MUY1MTYxRjk5RTAwMDIzNjlFRCAvKiBHQ1RocmVhZC5jcHAgKi8sCisJCQkJQzIxMzIxRjYxNjFG
OTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzI0RDMxRTAxNjFDRDY5NTAwMkFB
NERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKIAkJCQlDMjREMzFFMTE2MUNENjk1MDAyQUE0
REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtMjU3OCw2ICsyNTkzLDggQEAKIAkJCQk4NkFERDE0
NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMzIxRkIxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVh
cFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5
OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUx
NUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2OCw2
ICsyOTg1LDcgQEAKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5k
ZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyog
SlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8q
IFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjEzMjFGOTE2MUY5OUUwMDAy
MzY5RUQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM1
NzQsNiArMzU5Miw4IEBACiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNp
YWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTRE
QiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjEzMjFGNzE2MUY5
OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzIxMzIx
RkExNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lvbiAxMzA2NDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCiAjaW5jbHVkZSAi
SlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAi
T3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC00MSw2ICs0MywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVh
dGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAgc3RhdGljIENvcGllZEJsb2Nr
KiBjcmVhdGVOb1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYpOwogCisgICAg
Ym9vbCBpc1Bpbm5lZCgpOworCisgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7CisgICAgdm9pZCBy
ZXBvcnRMaXZlQnl0ZXModW5zaWduZWQpOworICAgIHZvaWQgZGlkU3Vydml2ZUdDKCk7CisgICAg
Ym9vbCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKKyAgICBib29sIHNob3VsZEV2YWN1YXRl
KCk7CisgICAgYm9vbCBjYW5CZVJlY3ljbGVkKCk7CisKICAgICAvLyBUaGUgcGF5bG9hZCBpcyB0
aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2NhdGlvbnMuCiAg
ICAgY2hhciogcGF5bG9hZCgpOwogICAgIGNoYXIqIHBheWxvYWRFbmQoKTsKQEAgLTY2LDYgKzc3
LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX3JlbWFpbmluZzsKICAgICB1aW50cHRyX3Qg
bV9pc1Bpbm5lZDsKKyAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsKIH07CiAKIGlubGluZSBDb3Bp
ZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwoY29uc3QgUGFnZUFsbG9jYXRp
b25BbGlnbmVkJiBhbGxvY2F0aW9uKQpAQCAtOTYsMTAgKzEwOCw2MCBAQCBpbmxpbmUgQ29waWVk
QmxvY2s6OkNvcGllZEJsb2NrKGNvbnN0IFBhCiAgICAgOiBIZWFwQmxvY2s8Q29waWVkQmxvY2s+
KGFsbG9jYXRpb24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKICAgICAs
IG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBtX2xpdmVCeXRlcygwKQogewogICAgIEFTU0VSVChp
czhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3JlbWFpbmluZykpKTsKIH0K
IAoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyh1bnNpZ25lZCBieXRl
cykKK3sKKyAgICB1bnNpZ25lZCBvbGRWYWx1ZSA9IDA7CisgICAgdW5zaWduZWQgbmV3VmFsdWUg
PSAwOworICAgIGRvIHsKKyAgICAgICAgb2xkVmFsdWUgPSBtX2xpdmVCeXRlczsKKyAgICAgICAg
bmV3VmFsdWUgPSBvbGRWYWx1ZSArIGJ5dGVzOworICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21w
YXJlQW5kU3dhcCgmbV9saXZlQnl0ZXMsIG9sZFZhbHVlLCBuZXdWYWx1ZSkpOworfQorCitpbmxp
bmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKK3sKKyAgICBtX2xpdmVCeXRlcyA9
IDA7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9j
azo6ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICBBU1NFUlQobV9saXZl
Qnl0ZXMgPj0gYnl0ZXMpOworICAgIHVuc2lnbmVkIG9sZFZhbHVlID0gMDsKKyAgICB1bnNpZ25l
ZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fbGl2ZUJ5dGVz
OworICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gYnl0ZXM7CisgICAgfSB3aGlsZSAoIVdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2xpdmVCeXRlcywgb2xkVmFsdWUsIG5ld1ZhbHVlKSk7
CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDwgb2xkVmFsdWUpOworICAgIHJldHVybiAhbmV3VmFs
dWU7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5CZVJlY3ljbGVkKCkKK3sKKyAg
ICByZXR1cm4gIW1fbGl2ZUJ5dGVzOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hv
dWxkRXZhY3VhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fbGl2ZUJ5
dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4ocGF5bG9hZENhcGFjaXR5KCkpIDw9IE9wdGlvbnM6
Om1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbigpOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRC
bG9jazo6aXNQaW5uZWQoKQoreworICAgIHJldHVybiBtX2lzUGlubmVkOworfQorCitpbmxpbmUg
dW5zaWduZWQgQ29waWVkQmxvY2s6OmxpdmVCeXRlcygpCit7CisgICAgcmV0dXJuIG1fbGl2ZUJ5
dGVzOworfQorCiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQogewogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgoc2l6ZW9mKENvcGllZEJsb2Nr
KSArIDcpICYgfjcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlLmNwcAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0z
Niw2ICszNyw3IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAgICwg
bV90b1NwYWNlKDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQogICAgICwgbV9pbkNvcHlpbmdQaGFz
ZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJl
ck9mTG9hbmVkQmxvY2tzKDApCiB7CiAgICAgbV90b1NwYWNlTG9jay5Jbml0KCk7CkBAIC0xNTIs
MTUgKzE1NCwxOCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2so
Q29waWVkQmxvY2sqIGJsb2NrKQordm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhD
b3BpZWRCbG9jayogYmxvY2ssIENvcGllZEJsb2NrKiogZXhjaGFuZ2UpCiB7CiAgICAgQVNTRVJU
KG1faW5Db3B5aW5nUGhhc2UpOwogICAgIAorICAgIGlmIChleGNoYW5nZSkKKyAgICAgICAgKmV4
Y2hhbmdlID0gYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOworCiAgICAgaWYgKCFibG9j
aykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFibG9jay0+ZGF0YVNpemUoKSkgewotICAg
ICAgICByZWN5Y2xlQmxvY2soYmxvY2spOworICAgICAgICByZWN5Y2xlQm9ycm93ZWRCbG9jayhi
bG9jayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4Miw2ICsxODcsMzggQEAgdm9p
ZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0KIAordm9pZCBD
b3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFj
ZSwgbV90b1NwYWNlKTsKKworICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKKyAgICBtX2FsbG9j
YXRvci5yZXNldEN1cnJlbnRCbG9jaygpOworCisgICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOwor
ICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0
ZXMgPSAwOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPmhlYWQo
KTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsK
KyAgICAgICAgaWYgKCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVSZWN5Y2xlZCgp
KSB7CisgICAgICAgICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2st
PmxpdmVCeXRlcygpOworICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2Fk
Q2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVh
cC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRp
b24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gKChkb3Vi
bGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOworICAgIG1fc2hvdWxkRG9D
b3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWF4Q29waWVkU3BhY2VG
cmFnbWVudGF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29weVBoYXNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7CisgICAgQVNTRVJUKCFt
X2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwor
ICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB2b2lkIENvcGllZFNwYWNlOjpkb25l
Q29weWluZygpCiB7CiAgICAgewpAQCAtMTkwLDEyICsyMjcsMTMgQEAgdm9pZCBDb3BpZWRTcGFj
ZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24ud2Fp
dChtX2xvYW5lZEJsb2Nrc0xvY2spOwogICAgIH0KIAotICAgIEFTU0VSVChtX2luQ29weWluZ1Bo
YXNlKTsKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBtX3Nob3VsZERvQ29weVBoYXNl
KTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CisKICAgICB3aGlsZSAoIW1fZnJvbVNw
YWNlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3Bh
Y2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5tX2lzUGlubmVkKSB7Ci0gICAg
ICAgICAgICBibG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOworICAgICAgICBpZiAoYmxvY2stPmlz
UGlubmVkKCkgfHwgIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAgICAgICAgICAgIGJsb2NrLT5k
aWRTdXJ2aXZlR0MoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8g
dGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92ZWQuCiAgICAgICAgICAgICBB
U1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAgICAgICAgICAgbV9ibG9ja0Zp
bHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwpAQCAtMjEwLDEzICsyNDgs
MTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgIENvcGllZEJsb2NrKiBj
dXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7CiAgICAgd2hpbGUgKGN1cnIpIHsKICAgICAg
ICAgQ29waWVkQmxvY2sqIG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0gICAgICAgIGlmICghY3Vyci0+
bV9pc1Bpbm5lZCkgeworICAgICAgICBpZiAoIWN1cnItPmlzUGlubmVkKCkpIHsKICAgICAgICAg
ICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGN1cnIpOwogICAgICAgICAgICAgbV9ibG9ja1Nl
dC5yZW1vdmUoY3Vycik7CiAgICAgICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveShjdXJyKS5k
ZWFsbG9jYXRlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2Jsb2NrRmlsdGVy
LmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGN1cnIpKTsKLSAgICAgICAgICAgIGN1cnItPm1f
aXNQaW5uZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnItPmRpZFN1cnZpdmVHQygpOwogICAg
ICAgICB9CiAgICAgICAgIGN1cnIgPSBuZXh0OwogICAgIH0KQEAgLTIyNSw2ICsyNjMsOCBAQCB2
b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAgIGFsbG9jYXRlQmxvY2soKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3RvU3BhY2Ut
PmhlYWQoKSk7CisKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gZmFsc2U7CiB9CiAKIHNpemVf
dCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3Mg
SGVhcDsKIGNsYXNzIENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3BpZWRTcGFjZSB7CisgICAgZnJp
ZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAg
ICBmcmllbmQgY2xhc3MgSklUOwogcHVibGljOgpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRs
aW5lKTsKKyAgICBib29sIHNob3VsZERvQ29weVBoYXNlKCkgeyByZXR1cm4gbV9zaG91bGREb0Nv
cHlQaGFzZTsgfQogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2b2lkKik7CiAK
QEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFsbG9jYXRlQmxvY2soKTsKICAg
ICBDb3BpZWRCbG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwogCi0gICAgdm9p
ZCBkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKik7Ci0gICAgdm9pZCByZWN5Y2xlQmxvY2so
Q29waWVkQmxvY2sqKTsKKyAgICB2b2lkIGRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqLCBD
b3BpZWRCbG9jayoqKTsKKyAgICB2b2lkIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9j
ayopOworICAgIHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqKTsKIAogICAg
IEhlYXAqIG1faGVhcDsKIApAQCAtMTA4LDYgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgRG91Ymx5
TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9vdmVyc2l6ZUJsb2NrczsKICAgIAogICAgIGJvb2wg
bV9pbkNvcHlpbmdQaGFzZTsKKyAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CiAKICAgICBN
dXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENvbmRpdGlvbiBtX2xvYW5lZEJs
b2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIwIEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5J
Zk5lY2Vzc2FyeSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVk
U3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xl
RXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewotICAgIHN0ZDo6c3dhcChtX2Zy
b21TcGFjZSwgbV90b1NwYWNlKTsKLQotICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICBt
X2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAgQVNTRVJUKCFtX2luQ29weWlu
Z1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIG1faW5D
b3B5aW5nUGhhc2UgPSB0cnVlOworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKGJsb2Nr
LT5jYW5CZVJlY3ljbGVkKCkpOworICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOworICAg
IHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAg
ICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICBtX2Zyb21TcGFjZS0+cmVtb3Zl
KGJsb2NrKTsKKyAgICB9CisgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUo
Q29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3Bh
Y2U6OnJlY3ljbGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCitpbmxpbmUgdm9pZCBDb3BpZWRT
cGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewogICAgIG1f
aGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJs
b2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRv
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvcHlW
aXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworQ29weVZpc2l0b3I6OkNvcHlWaXNp
dG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQorICAgIDogbV9zaGFyZWQoc2hhcmVkKQor
eworfQorCit2b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJlZCgpCit7CisgICAgR0NDb3B5
UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBi
bG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5tX2Jsb2Nrc1RvQ29weTsKKyAgICBzaXplX3Qgc3RhcnRJ
bmRleCwgZW5kSW5kZXg7CisKKyAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0
SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGVuZEluZGV4KSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykKKyAg
ICAgICAgICAgIGJsb2Nrc1RvQ29weVtpXS0+Zm9yRWFjaExpdmVDZWxsKGZ1bmN0b3IpOworICAg
ICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsK
KyAgICB9CisgICAgQVNTRVJUKHN0YXJ0SW5kZXggPT0gZW5kSW5kZXgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENv
cHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JfaAorCisjaW5jbHVkZSAiQ29waWVkU3Bh
Y2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKwor
Y2xhc3MgQ29weVZpc2l0b3IgeworcHVibGljOgorICAgIENvcHlWaXNpdG9yKEdDVGhyZWFkU2hh
cmVkRGF0YSYpOworCisgICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgpOworCisgICAgdm9pZCBzdGFy
dENvcHlpbmcoKTsKKyAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CisKKyAgICAvLyBMb3ctbGV2ZWwg
QVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdz
IGhlYXAgcmVmZXJlbmNlcworICAgIC8vIGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmpl
Y3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24KKyAg
ICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hv
b3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCisgICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weSh2b2lk
Kiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7CisgICAgdm9p
ZCBkaWRDb3B5KHZvaWQqLCBzaXplX3QpOworCitwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRl
TmV3U3BhY2VTbG93KHNpemVfdCk7CisKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVk
OworICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5VmlzaXRv
cklubGluZU1ldGhvZHNfaAorI2RlZmluZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorCisj
aW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRl
ICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NDb3B5
UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CitwdWJsaWM6
CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6
IG1fdmlzaXRvcih2aXNpdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCko
SlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgJiYgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBOb25BcnJheSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRh
YmxlLmNvcHlCYWNraW5nU3RvcmUgPT0gSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUpOworICAg
ICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCBtX3Zpc2l0b3IpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBDb3B5VmlzaXRvciYgbV92aXNpdG9yOworfTsKKworaW5saW5lIGJv
b2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQqIG9sZFB0ciwgc2l6ZV90IGJ5
dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpIHsKKyAgICAg
ICAgQVNTRVJUKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKG9sZFB0ciktPmlzUGlubmVk
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKENvcGllZFNwYWNl
OjpibG9ja0ZvcihvbGRQdHIpLT5pc1Bpbm5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQqIENvcHlWaXNpdG9yOjphbGxvY2F0
ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21w
aWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KKyAgICBpZiAo
TElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFj
ZVNsb3coYnl0ZXMpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
ICAgICAgIAorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93
KHNpemVfdCBieXRlcykKK3sKKyAgICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSAwOworICAgIG1f
c2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3Iu
cmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKKyAgICBtX2NvcGllZEFsbG9jYXRvci5z
ZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOworCisgICAgdm9pZCogcmVzdWx0ID0gMDsKKyAgICBD
aGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUo
Ynl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKK3sKKyAg
ICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7CisgICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2Nr
KG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7CisgICAgbV9j
b3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKK30KKworaW5saW5lIHZvaWQg
Q29weVZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKK3sKKyAgICBpZiAoIW1fY29waWVkQWxsb2NhdG9y
LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFj
ZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygp
LCAwKTsKK30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRpZENvcHkodm9pZCogcHRyLCBz
aXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKCFDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRl
cykpOworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIp
OworICAgIEFTU0VSVCghYmxvY2stPmlzUGlubmVkKCkpOworCisgICAgaWYgKGJsb2NrLT5kaWRF
dmFjdWF0ZUJ5dGVzKGJ5dGVzKSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cmVj
eWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKKworI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCisjaW5j
bHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiR0NUaHJlYWRTaGFy
ZWREYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitHQ1RocmVhZDo6R0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQsIFNsb3RWaXNp
dG9yKiBzbG90VmlzaXRvciwgQ29weVZpc2l0b3IqIGNvcHlWaXNpdG9yLCBzaXplX3QgaW5kZXgp
CisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3NoYXJlZChzaGFyZWQpCisgICAgLCBtX3Ns
b3RWaXNpdG9yKFdURjo6YWRvcHRQdHIoc2xvdFZpc2l0b3IpKQorICAgICwgbV9jb3B5VmlzaXRv
cihXVEY6OmFkb3B0UHRyKGNvcHlWaXNpdG9yKSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9
CisKK1RocmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVhZElEKCkKK3sKKyAgICBBU1NFUlQo
bV90aHJlYWRJRCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cit9CisKK3ZvaWQgR0NUaHJlYWQ6
OmluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQoreworICAgIEFT
U0VSVCghbV90aHJlYWRJRCk7CisgICAgbV90aHJlYWRJRCA9IHRocmVhZElEOworfQorCitTbG90
VmlzaXRvciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKK3sKKyAgICBBU1NFUlQobV9zbG90Vmlz
aXRvcik7CisgICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0KCk7Cit9CisKK0NvcHlWaXNpdG9y
KiBHQ1RocmVhZDo6Y29weVZpc2l0b3IoKQoreworICAgIEFTU0VSVChtX2NvcHlWaXNpdG9yKTsK
KyAgICByZXR1cm4gbV9jb3B5VmlzaXRvci5nZXQoKTsKK30KKwordm9pZCBHQ1RocmVhZDo6c3lu
Y2hyb25pemVXaXRoKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90YXNrUXVldWVMb2Nr
KTsKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgbV90YXNrUXVl
dWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworfQorCitHQ1Rhc2sgR0NUaHJlYWQ6
OndhaXRGb3JOZXh0VGFzaygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGFza1F1ZXVl
TG9jayk7CisgICAgd2hpbGUgKG1fdGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBtX3Rh
c2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgbV90YXNrUXVldWVDb25kaXRpb24u
d2FpdChtX3Rhc2tRdWV1ZUxvY2spOworICAgIH0KKyAgICBHQ1Rhc2sgbmV4dFRhc2sgPSAqbV90
YXNrUXVldWUuYmVnaW4oKTsKKyAgICBtX3Rhc2tRdWV1ZS5yZW1vdmVGaXJzdCgpOworICAgIHJl
dHVybiBuZXh0VGFzazsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NUaHJlYWRNYWluKCkKK3sKKyAg
ICBHQ1Rhc2sgY3VycmVudFRhc2s7CisgICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKCk7CisgICAg
Ly8gV2FpdCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGZpbmlzaCBjcmVhdGluZyB1cy4KKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAg
ICB9CisgICAgeworICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoKm1fc2xvdFZp
c2l0b3IpOworICAgICAgICB3aGlsZSAoKGN1cnJlbnRUYXNrID0gd2FpdEZvck5leHRUYXNrKCkp
ICE9IEV4aXQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudFRhc2spIHsKKyAgICAgICAg
ICAgIGNhc2UgTWFyazoKKyAgICAgICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLT5kcmFpbkZyb21T
aGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBSZXNldFNsb3RWaXNpdG9yOgorICAgICAgICAgICAgICAgIG1fc2xv
dFZpc2l0b3ItPnJlc2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENvcHk6CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHN0YXJ0
Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJvbVNoYXJlZCgpOworICAgICAg
ICAgICAgICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFN5bmNocm9uaXplOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFeGl0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdDVGhyZWFkOjpnY1RocmVh
ZFN0YXJ0RnVuYyh2b2lkKiBkYXRhKQoreworICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNf
Y2FzdDxHQ1RocmVhZCo+KGRhdGEpOworICAgIHRocmVhZC0+Z2NUaHJlYWRNYWluKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVh
ZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0NU
aHJlYWRfaAorI2RlZmluZSBHQ1RocmVhZF9oCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBHQ1RocmVhZFNoYXJlZERh
dGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworZW51bSBHQ1Rhc2sgeworICAgIE1hcmssCisgICAg
UmVzZXRTbG90VmlzaXRvciwKKyAgICBDb3B5LAorICAgIFN5bmNocm9uaXplLAorICAgIEV4aXQK
K307CisKK2NsYXNzIEdDVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBHQ1RocmVhZChHQ1RocmVhZFNo
YXJlZERhdGEmLCBTbG90VmlzaXRvciosIENvcHlWaXNpdG9yKiwgc2l6ZV90KTsKKworICAgIFNs
b3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOworICAgIENvcHlWaXNpdG9yKiBjb3B5VmlzaXRvcigp
OworICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVU
aHJlYWRJRChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGVucXVldWVUYXNrKEdDVGFzayk7
CisgICAgdm9pZCBzeW5jaHJvbml6ZVdpdGgoKTsKKworICAgIHN0YXRpYyB2b2lkIGdjVGhyZWFk
U3RhcnRGdW5jKHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGdjVGhyZWFkTWFpbigpOwor
ICAgIEdDVGFzayB3YWl0Rm9yTmV4dFRhc2soKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90
aHJlYWRJRDsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworICAgIE93blB0cjxT
bG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKKyAgICBPd25QdHI8Q29weVZpc2l0b3I+IG1fY29w
eVZpc2l0b3I7CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAgTXV0ZXggbV90YXNrUXVldWVMb2Nr
OworICAgIFRocmVhZENvbmRpdGlvbiBtX3Rhc2tRdWV1ZUNvbmRpdGlvbjsKKyAgICBEZXF1ZTxH
Q1Rhc2s+IG1fdGFza1F1ZXVlOworfTsKKworaW5saW5lIHZvaWQgR0NUaHJlYWQ6OmVucXVldWVU
YXNrKEdDVGFzayB0YXNrKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rhc2tRdWV1ZUxv
Y2spOworICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1ZUNvbmRp
dGlvbi5zaWduYWwoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5j
cHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhy
ZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQ1ICsyNiwyOSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogCisjaW5j
bHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2lu
Y2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiB2b2lkIEdDVGhy
ZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJlbigpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
bWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnJlc2V0KCk7CisgICAgZGlzcGF0Y2hUYXNrVG9X
b3JrZXJUaHJlYWRzKFJlc2V0U2xvdFZpc2l0b3IpOwogfQogCiBzaXplX3QgR0NUaHJlYWRTaGFy
ZWREYXRhOjpjaGlsZFZpc2l0Q291bnQoKQogeyAgICAgICAKICAgICB1bnNpZ25lZCBsb25nIHJl
c3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1RocmVhZHNN
YXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX21hcmtpbmdUaHJlYWRz
TWFya1N0YWNrW2ldLT52aXNpdENvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNb
aV0tPnNsb3RWaXNpdG9yKCktPnZpc2l0Q291bnQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQot
Ci12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3Iq
IHNsb3RWaXNpdG9yKQotewotICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIHsKLSAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCpzbG90VmlzaXRvcik7Ci0gICAgICAg
IHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwot
ICAgIH0KLSAgICBkZWxldGUgc2xvdFZpc2l0b3I7Ci19Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWRE
YXRhOjptYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIG15VmlzaXRvcikKLXsgICAgICAgICAg
ICAgICAKLSAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBzdGF0aWNfY2FzdDxTbG90Vmlz
aXRvcio+KG15VmlzaXRvcik7Ci0KLSAgICBzbG90VmlzaXRvci0+c2hhcmVkRGF0YSgpLm1hcmtp
bmdUaHJlYWRNYWluKHNsb3RWaXNpdG9yKTsKLX0KICNlbmRpZgogCiBHQ1RocmVhZFNoYXJlZERh
dGE6OkdDVGhyZWFkU2hhcmVkRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC03NCwx
MyArNTgsMjEgQEAgR0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEoSgogICAg
ICwgbV9zaGFyZWRNYXJrU3RhY2sobV9zZWdtZW50QWxsb2NhdG9yKQogICAgICwgbV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KGZhbHNlKQorICAgICwgbV9ibG9ja3NUb0NvcHkoZ2xvYmFsRGF0YS0+aGVhcC5tX2Jsb2Nr
U25hcHNob3QpCisgICAgLCBtX2NvcHlJbmRleCgwKQogeworICAgIG1fY29weUxvY2suSW5pdCgp
OwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFiIHRoZSBsb2NrIHNvIHRoZSBu
ZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgc3Rh
cnQgcnVubmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsr
aSkgewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZpc2l0b3Io
KnRoaXMpOwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChzbG90Vmlz
aXRvcik7Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZChtYXJr
aW5nVGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5n
IikpOwotICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5sYXN0KCkpOworICAgICAgICBD
b3B5VmlzaXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0b3IoKnRoaXMpOworICAgICAg
ICBzaXplX3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7CisgICAgICAgIEdDVGhyZWFkKiBu
ZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNpdG9yLCBjb3B5VmlzaXRvciwg
aW5kZXgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFk
KEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlwdENvcmU6
Ok1hcmtpbmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFsaXplVGhyZWFkSUQodGhyZWFk
SUQpOworICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKICAgICB9CiAjZW5k
aWYKIH0KQEAgLTkyLDE2ICs4NCwxNyBAQCBHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNo
YXJlZERhdGEoCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9j
ayk7CiAgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRydWU7Ci0gICAgICAg
IG1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICAgICAgZGlzcGF0Y2hUYXNrVG9X
b3JrZXJUaHJlYWRzKEV4aXQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOworICAgICAgICBkZWxldGUgbV9nY1RocmVh
ZHNbaV07CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hcmtpbmdUaHJl
YWRzLnNpemUoKTsgKytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX21hcmtp
bmdUaHJlYWRzW2ldKTsKICNlbmRpZgogfQogICAgIAogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6
OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMp
OwogICAgIEFTU0VSVCghbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KTsKICAgICBBU1NFUlQo
bV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKICAgICAKQEAgLTExOSw0ICsxMTIsNTggQEAg
dm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICB9CiB9CiAKK3ZvaWQgR0NUaHJl
YWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoR0NUYXNrIHRhc2spCit7
CisgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkSUQgPSBXVEY6OmN1cnJlbnRUaHJl
YWQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsr
KSB7CisgICAgICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBtX2djVGhyZWFkc1tpXTsKKyAgICAgICAg
aWYgKHRocmVhZC0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFkSUQpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgdGhyZWFkLT5lbnF1ZXVlVGFzayh0YXNrKTsKKyAgICB9Cit9CisK
K3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKCkK
K3sKKyAgICBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoU3luY2hyb25pemUpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
R0NUaHJlYWQqIHRocmVhZCA9IG1fZ2NUaHJlYWRzW2ldOworICAgICAgICBBU1NFUlQodGhyZWFk
LT50aHJlYWRJRCgpICE9IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgdGhyZWFkLT5z
eW5jaHJvbml6ZVdpdGgoKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpk
aWRTdGFydE1hcmtpbmcoKQoreworICAgIGRpc3BhdGNoVGFza1RvV29ya2VyVGhyZWFkcyhNYXJr
KTsKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaE1hcmtpbmcoKQorewor
ICAgIC8vIFdlIG5lZWQgdG8gc3luY2hyb25pemUgaWYgd2UgY2FyZSBhYm91dCBhY2N1cmF0ZSBs
b2dnaW5nIGNvdW50cy4KKyNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKKyAgICBzeW5j
aHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKCk7CisjZW5kaWYKK30KKwordm9pZCBHQ1RocmVhZFNo
YXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCit7CisgICAgeworICAgICAgICBTcGluTG9ja0hv
bGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBtX2Jsb2Nrc1RvQ29weSA9IG1fZ2xv
YmFsRGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3Q7CisgICAgICAgIG1fY29weUluZGV4ID0gMDsK
KyAgICB9CisgICAgLy8gV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgYSByYWNlIGNv
bmRpdGlvbiB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgY2FuIAorICAgIC8vIGJsb3cgdGhyb3VnaCBh
bGwgb2YgdGhlIGNvcHlpbmcgd29yayBiZWZvcmUgdGhlIEdDVGhyZWFkcyBmdWxseSB3YWtlIHVw
LiAKKyAgICAvLyBUaGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBhIGJsb2NrIGZyb20gdGhlIENv
cGllZFNwYWNlIHdoZW4gdGhlIGNvcHlpbmcgcGhhc2UgCisgICAgLy8gaGFzIGNvbXBsZXRlZCwg
d2hpY2ggaXNuJ3QgYWxsb3dlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJl
YWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX2djVGhyZWFkc1tpXS0+Y29weVZpc2l0b3IoKS0+
c3RhcnRDb3B5aW5nKCk7CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKENvcHkpOwor
fQorCit2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoQ29weWluZygpCit7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMSArMjYsMTQgQEAKICNpZm5kZWYgR0NUaHJlYWRTaGFyZWREYXRhX2gKICNkZWZpbmUgR0NU
aHJlYWRTaGFyZWREYXRhX2gKIAorI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGlz
dGFibGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAi
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBKU0dsb2JhbERhdGE7CiBjbGFzcyBDb3BpZWRTcGFjZTsKK2NsYXNzIENvcHlWaXNp
dG9yOwogCiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGEgewogcHVibGljOgpAQCAtNDYsNiArNTAs
MTEgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgZGlkU3Rh
cnRNYXJraW5nKCk7CisgICAgdm9pZCBkaWRGaW5pc2hNYXJraW5nKCk7CisgICAgdm9pZCBkaWRT
dGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRpZEZpbmlzaENvcHlpbmcoKTsKKwogI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKICAgICB2b2lkIHJlc2V0Q2hpbGRyZW4oKTsKICAgICBzaXplX3QgY2hp
bGRWaXNpdENvdW50KCk7CkBAIC01MywxMiArNjIsMTMgQEAgcHVibGljOgogI2VuZGlmCiAgICAg
CiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsKICAgICBmcmllbmQgY2xhc3Mg
U2xvdFZpc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogCi0jaWYgRU5BQkxF
KFBBUkFMTEVMX0dDKQotICAgIHZvaWQgbWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3IqKTsK
LSAgICBzdGF0aWMgdm9pZCBtYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXApOwotI2Vu
ZGlmCisgICAgdm9pZCBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoR0NUYXNrKTsKKyAgICB2
b2lkIHN5bmNocm9uaXplV2l0aFdvcmtlclRocmVhZHMoKTsKKyAgICB2b2lkIGdldE5leHRCbG9j
a3NUb0NvcHkoc2l6ZV90Jiwgc2l6ZV90Jik7CiAKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFs
RGF0YTsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsKQEAgLTY3LDkgKzc3LDggQEAg
cHJpdmF0ZToKICAgICAKICAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OwogCi0gICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IG1fbWFya2luZ1RocmVhZHM7Ci0gICAgVmVjdG9yPFNsb3RWaXNp
dG9yKj4gbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjazsKLSAgICAKKyAgICBWZWN0b3I8R0NUaHJl
YWQqPiBtX2djVGhyZWFkczsKKwogICAgIE11dGV4IG1fbWFya2luZ0xvY2s7CiAgICAgVGhyZWFk
Q29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvbjsKICAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJl
ZE1hcmtTdGFjazsKQEAgLTc5LDEwICs4OCwyMyBAQCBwcml2YXRlOgogICAgIE11dGV4IG1fb3Bh
cXVlUm9vdHNMb2NrOwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKKyAgICBT
cGluTG9jayBtX2NvcHlMb2NrOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1Rv
Q29weTsKKyAgICBzaXplX3QgbV9jb3B5SW5kZXg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
X2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKKwogICAgIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwogICAgIExp
c3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpnZXRO
ZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAgIFNwaW5M
b2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsK
KyAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsg
c19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRleCA9IGVuZDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2Uu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5
VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
ICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5o
IgpAQCAtMjUyLDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBIZWEKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShn
bG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAgLCBtX2Nv
cHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERhdGEpCiAg
ICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQpAQCAtNDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdD
KQogICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsKICAgICB9CiAKLSAgICBtX3N0
b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydE1h
cmtpbmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAg
dmlzaXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3Iodmlz
aXRvcik7CkBAIC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxs
R0MpCiAKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3Vu
dCgpKTsKIAotICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICBtX3NoYXJlZERhdGEuZGlk
RmluaXNoTWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQogICAgIHNp
emVfdCB2aXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7CiAjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQpAQCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1
bGxHQykKICAgICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwogI2VuZGlmCiAgICAgbV9z
aGFyZWREYXRhLnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQor
eworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgaWYgKG1fc3RvcmFn
ZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0
YXJ0Q29weWluZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlzaXRvciA9IG1fY29weVZpc2l0
b3I7CisgICAgICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAgIHZpc2l0b3IuY29w
eUZyb21TaGFyZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICBt
X3NoYXJlZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0gCiAgICAgbV9zdG9yYWdlU3Bh
Y2UuZG9uZUNvcHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwxNCBAQCB2b2lkIEhlYXA6OmNv
bGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VE
KCk7CiAKICAgICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFj
ZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5RnVuY3RvciBmdW5jdG9yKG1f
YmxvY2tTbmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2NrKGZ1bmN0
b3IpOworICAgIH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CisKKyAgICB7CiAgICAgICAg
IEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAgIGZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBAIC03NTUsNyArNzc4LDcgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVj
dFNwYWNlLnNocmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyht
X29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBp
bmcobV9ibG9ja1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKIAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiAr
MjMsNyBAQAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5j
bHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0x
ODIsNyArMTgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRBbGxvY2F0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0
b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIEluY3JlbWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0
aWNzOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFs
bG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxsR0MpOwogICAgICAgICB2b2lk
IG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1h
cmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgY29weUJh
Y2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIzOSw2ICsyNDMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJl
ZERhdGE7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgICAgIENvcHlW
aXNpdG9yIG1fY29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0Owog
ICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtMjU2LDYgKzI2MSwyMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9h
Y3Rpdml0eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsK
KyAgICAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBzaG90OworICAgIH07CisK
KyAgICBzdHJ1Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9y
IHsKKyAgICAgICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisg
ICAgICAgICAgICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykK
KyAgICAgICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJr
ZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgCisg
ICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9i
bG9ja3M7CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuY3BwCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAKIEluY3JlbWVudGFsU3dlZXBl
cjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5Mb29wKQog
ICAgIDogSGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKICAgICAsIG1fY3Vy
cmVudEJsb2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9i
bG9ja1NuYXBzaG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5IEBAIHZvaWQgSW5jcmVtZW50
YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAKLXZvaWQgSW5jcmVtZW50YWxT
d2VlcGVyOjpzdGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tT
bmFwc2hvdCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxN
YXJrZWRCbG9jayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1fYmxvY2tzVG9Td2VlcC5yZXNp
emUoYmxvY2tTbmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5jdG9yIGZ1bmN0b3IobV9ibG9j
a3NUb1N3ZWVwKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNo
QmxvY2soZnVuY3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2tTbmFwc2hvdDsKICAg
ICBtX2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAgc2NoZWR1bGVUaW1lcigpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lu
Y3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywyMyArMzcsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLXN0cnVjdCBDb3B5RnVuY3RvciA6IHB1Ymxp
YyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIENvcHlGdW5jdG9yKFZlY3RvcjxNYXJr
ZWRCbG9jayo+JiBibG9ja3MpIAotICAgICAgICA6IG1faW5kZXgoMCkgCi0gICAgICAgICwgbV9i
bG9ja3MoYmxvY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2Vk
QmxvY2sqIGJsb2NrKSB7IG1fYmxvY2tzW21faW5kZXgrK10gPSBibG9jazsgfQotCi0gICAgc2l6
ZV90IG1faW5kZXg7Ci0gICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4mIG1fYmxvY2tzOwotfTsKLQog
Y2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBUaW1lciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIEluY3JlbWVudGFsU3dlZXBlciogY3JlYXRlKEhlYXAqKTsKLSAgICB2b2lkIHN0
YXJ0U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+JiBibG9ja1NuYXBzaG90KTsK
KyAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKTsKICAgICB2aXJ0
dWFsIHZvaWQgZG9Xb3JrKCk7CiAgICAgdm9pZCBzd2VlcE5leHRCbG9jaygpOwogICAgIHZvaWQg
d2lsbEZpbmlzaFN3ZWVwaW5nKCk7CkBAIC03MSw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjYW5jZWxUaW1lcigpOwogICAgIAogICAgIHVuc2lnbmVkIG1fY3VycmVudEJsb2NrVG9Td2Vl
cEluZGV4OwotICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxvY2tzVG9Td2VlcDsKKyAgICBW
ZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3NUb1N3ZWVwOwogI2Vsc2UKICAgICAKICAgICBJ
bmNyZW1lbnRhbFN3ZWVwZXIoSlNHbG9iYWxEYXRhKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDggKzM1LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6c2V0dXAoKQogICAgIG1fc2hhcmVkLm1fc2hv
dWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9nbG9iYWxEYXRhLT5oYXZlRW5vdWdoTmV3U3RyaW5n
c1RvSGFzaENvbnN0KCk7CiAgICAgbV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3Vs
ZEhhc2hDb25zdDsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fc2hhcmVkLm1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPm1fc2hvdWxk
SGFzaENvbnN0ID0gbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3Q7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICBt
X3NoYXJlZC5tX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+bV9zaG91bGRIYXNoQ29uc3Qg
PSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNlbmRpZgogfQogCkBAIC0xMTIsOCArMTEy
LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgIC8vIE90
aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25h
dGUuCiAgICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJlZE1hcmtT
dGFjayk7CiAKLSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vy
cyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpCi0gICAgICAgIG1fc2hhcmVkLm1fbWFy
a2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpIHsKKyAg
ICAgICAgbV9zaGFyZWQuZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKE1hcmspOworICAgICAg
ICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CisgICAgfQogfQogCiB2b2lk
IFNsb3RWaXNpdG9yOjpkcmFpbigpCkBAIC0xODEsOCArMTgzLDYgQEAgdm9pZCBTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUg
Zm9yIHRoZW0gdG8gZ2l2ZSB0aGVpciBwcml2YXRlIENvcGllZEJsb2NrcyBiYWNrCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0xOTYsMjEgKzE5NiwxNiBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRGlkIHdlIGRldGVjdCB0ZXJtaW5hdGlvbj8g
SWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCi0gICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJl
ZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFy
a1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5n
Q29uZGl0aW9uLmJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkgJiYgIW1fc2hhcmVk
Lm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9z
aGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZG9uZUNv
cHlpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9u
LndhaXQobV9zaGFyZWQubV9tYXJraW5nTG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1fc2hh
cmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGxvb2tzIGxpa2UgdGhlIGVuZCBvZiB0aGlzIGxpdHRsZSBiaXQgb2Ygd29yaywgc28g
bm90aWZ5IHRoZSBtYXN0ZXIgdGhyZWFkLgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hh
cmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMpCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gSXMgdGhlIFZNIGV4aXRpbmc/IElmIHNvLCBleGl0IHRoaXMgdGhyZWFk
LgotICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9uZUNvcHlpbmcoKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAKICAgICAgICAgICAgIHNpemVfdCBpZGxlVGhyZWFkQ291bnQgPSBPcHRpb25zOjpudW1i
ZXJPZkdDTWFya2VycygpIC0gbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vy
czsKQEAgLTIzNiwzMCArMjMxLDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290
cygpCiAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpz
dGFydENvcHlpbmcoKQotewotICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgp
KTsKLX0KLQotdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBi
eXRlcykKLXsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1f
Y29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwotICAgIG1fY29waWVkQWxsb2Nh
dG9yLnNldEN1cnJlbnRCbG9jayhtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5hbGxvY2F0ZUJsb2Nr
Rm9yQ29weWluZ1BoYXNlKCkpOwotCi0gICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2Vk
Qm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMs
ICZyZXN1bHQpOwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZU9yUGluKHZvaWQqIHB0ciwg
c2l6ZV90IGJ5dGVzKQotewotICAgIGlmICghY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndp
c2UocHRyLCBieXRlcykpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBhbGxv
Y2F0ZU5ld1NwYWNlKGJ5dGVzKTsKLX0KLQogQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjp0
cnlIYXNoQ29uc3RMb2NrKCkKIHsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCkBAIC0zMzUsMzYg
KzMwNiw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWwKICAgICBp
bnRlcm5hbEFwcGVuZChjZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVu
ZCh2b2lkKiogcHRyLCBzaXplX3QgYnl0ZXMsIEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7Ci0gICAgdm9pZCogbmV3UHRyID0gYWxs
b2NhdGVOZXdTcGFjZU9yUGluKG9sZFB0ciwgYnl0ZXMpOwotICAgIGlmIChuZXdQdHIpIHsKLSAg
ICAgICAgc2l6ZV90IGpzVmFsdWVzT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWludGVy
cHJldF9jYXN0PGNoYXIqPih2YWx1ZXMpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9sZFB0cikpOwot
Ci0gICAgICAgIEpTVmFsdWUqIG5ld1ZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpTVmFs
dWUqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3UHRyKSArIGpzVmFsdWVzT2Zmc2V0KTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpXTsKLSAgICAgICAgICAgIG5ld1ZhbHVlc1tpXSA9IHZh
bHVlOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGludGVybmFsQXBwZW5kKCZuZXdWYWx1ZXNbaV0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgbWVtY3B5KG5ld1B0ciwgb2xkUHRyLCBqc1ZhbHVlc09mZnNldCk7Ci0gICAgICAg
ICpwdHIgPSBuZXdQdHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFwcGVuZCh2YWx1ZXMsIGxlbmd0
aCk7Ci19Ci0gICAgCi12b2lkIFNsb3RWaXNpdG9yOjpkb25lQ29weWluZygpCi17Ci0gICAgaWYg
KCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3Iu
cmVzZXRDdXJyZW50QmxvY2soKSk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpCiB7CiAgICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50
ID0gbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1
cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNp
Zm5kZWYgU2xvdFZpc2l0b3JfaAogI2RlZmluZSBTbG90VmlzaXRvcl9oCiAKLSNpbmNsdWRlICJD
b3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiTWFya1N0
YWNrSW5saW5lTWV0aG9kcy5oIgogCkBAIC04MCwyMSArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKIAotICAgIHZvaWQgc3RhcnRDb3B5aW5nKCk7CisgICAgdm9pZCBjb3B5
TGF0ZXIodm9pZCosIHNpemVfdCk7CiAgICAgCi0gICAgLy8gSGlnaC1sZXZlbCBBUEkgZm9yIGNv
cHlpbmcsIGFwcHJvcHJpYXRlIGZvciBjYXNlcyB3aGVyZSB0aGUgb2JqZWN0J3MgaGVhcCByZWZl
cmVuY2VzCi0gICAgLy8gZmFsbCBpbnRvIGEgY29udGlndW91cyByZWdpb24gb2YgdGhlIHN0b3Jh
Z2UgY2h1bmsgYW5kIGlmIHRoZSBvYmplY3QgZm9yIHdoaWNoIHlvdSdyZQotICAgIC8vIGRvaW5n
IGNvcHlpbmcgZG9lcyBub3Qgb2NjdXIgZnJlcXVlbnRseS4KLSAgICB2b2lkIGNvcHlBbmRBcHBl
bmQodm9pZCoqLCBzaXplX3QsIEpTVmFsdWUqLCB1bnNpZ25lZCk7Ci0gICAgCi0gICAgLy8gTG93
LWxldmVsIEFQSSBmb3IgY29weWluZywgYXBwcm9wcmlhdGUgZm9yIGNhc2VzIHdoZXJlIHRoZSBv
YmplY3QncyBoZWFwIHJlZmVyZW5jZXMKLSAgICAvLyBhcmUgZGlzY29udGlndW91cyBvciBpZiB0
aGUgb2JqZWN0IG9jY3VycyBmcmVxdWVudGx5IGVub3VnaCB0aGF0IHlvdSBuZWVkIHRvIGZvY3Vz
IG9uCi0gICAgLy8gcGVyZm9ybWFuY2UuIFVzZSB0aGlzIHdpdGggY2FyZSBhcyBpdCBpcyBlYXN5
IHRvIHNob290IHlvdXJzZWxmIGluIHRoZSBmb290LgotICAgIGJvb2wgY2hlY2tJZlNob3VsZENv
cHlBbmRQaW5PdGhlcndpc2Uodm9pZCogb2xkUHRyLCBzaXplX3QpOwotICAgIHZvaWQqIGFsbG9j
YXRlTmV3U3BhY2Uoc2l6ZV90KTsKLSAgICAKLSAgICB2b2lkIGRvbmVDb3B5aW5nKCk7IAotICAg
ICAgICAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQogICAgIFZUYWJsZVNwZWN0
cnVtIG1fdmlzaXRlZFR5cGVDb3VudHM7CiAjZW5kaWYKQEAgLTEyNSw5ICsxMTEsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CiAgICAgCi0gICAgdm9pZCogYWxsb2NhdGVO
ZXdTcGFjZU9yUGluKHZvaWQqLCBzaXplX3QpOwotICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VT
bG93KHNpemVfdCk7Ci0KICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIAogICAgIE1h
cmtTdGFja0FycmF5IG1fc3RhY2s7CkBAIC0xNDYsOCArMTI5LDYgQEAgcHJpdmF0ZToKICAgICB1
bnNpZ25lZCBtX2xvZ0NoaWxkQ291bnQ7CiAjZW5kaWYKIAotICAgIENvcGllZEFsbG9jYXRvciBt
X2NvcGllZEFsbG9jYXRvcjsKLQogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBi
b29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJ
KHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsMzAgKzEzNiw2IEBAIGlu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3QKICAgICBtZXJnZU9wYXF1ZVJv
b3RzKCk7CiB9CiAgICAgCi1BTFdBWVNfSU5MSU5FIGJvb2wgU2xvdFZpc2l0b3I6OmNoZWNrSWZT
aG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHZvaWQqIG9sZFB0ciwgc2l6ZV90IGJ5dGVzKQotewot
ICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpIHsKLSAgICAgICAgbV9zaGFy
ZWQubV9jb3BpZWRTcGFjZS0+cGluKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKG9sZFB0
cikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmlzUGlubmVkKG9sZFB0cikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkKiBTbG90VmlzaXRv
cjo6YWxsb2NhdGVOZXdTcGFjZShzaXplX3QgYnl0ZXMpCi17Ci0gICAgdm9pZCogcmVzdWx0ID0g
MDsgLy8gQ29tcGlsZXJzIGRvbid0IHJlYWxpemUgdGhhdCB0aGlzIHdpbGwgYmUgYXNzaWduZWQu
Ci0gICAgaWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJl
c3VsdCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHJlc3VsdCA9IGFsbG9j
YXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfSAgICAgICAKLQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiB7
CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CkBAIC0xNzUsNiArMTUxLDIzIEBAIGlu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigKICAgICBkcmFpbigpOwogfQog
CitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKHZvaWQqIHB0ciwgc2l6ZV90IGJ5
dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykpIHsKKyAgICAg
ICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2Nr
Rm9yKHB0cikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ29waWVkQmxvY2sqIGJs
b2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgaWYgKGJsb2NrLT5pc1Bpbm5l
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBibG9jay0+cmVwb3J0TGl2ZUJ5dGVzKGJ5dGVz
KTsKKworICAgIGlmICghYmxvY2stPnNob3VsZEV2YWN1YXRlKCkpCisgICAgICAgIG1fc2hhcmVk
Lm1fY29waWVkU3BhY2UtPnBpbihibG9jayk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbERhdGE7Ci1j
bGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIENvcHlWaXNpdG9yOwogc3RydWN0IEFycmF5U3RvcmFn
ZTsKIAogY2xhc3MgQnV0dGVyZmx5IHsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0
IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAg
ICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7Ci0g
ICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24o
U2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5
LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xs
ZWN0aW9uKENvcHlWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKICAgICAKICAgICBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSB7
IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQogICAgIGNvbnN0IEluZGV4aW5n
SGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpm
cm9tKHRoaXMpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJBcnJheVN0b3JhZ2UuaCIKICNp
bmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgot
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6
OmNyZWF0ZShKU0dsCiAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxEYXRhLCAwLCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVyKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKIH0KIAotaW5saW5lIEJ1dHRlcmZseSog
QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRv
ciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5n
Q29sbGVjdGlvbihDb3B5VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJh
c2UoCiAgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0b3RhbFNpemUocHJlQ2FwYWNp
dHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJ
bmZvLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIpKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIFZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0ciB2
aXNpdENoaWxkcmVuOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAoKkNvcHlCYWNraW5nU3RvcmVG
dW5jdGlvblB0cikoSlNDZWxsKiwgQ29weVZpc2l0b3ImKTsKKyAgICAgICAgQ29weUJhY2tpbmdT
dG9yZUZ1bmN0aW9uUHRyIGNvcHlCYWNraW5nU3RvcmU7CisKICAgICAgICAgdHlwZWRlZiBDYWxs
VHlwZSAoKkdldENhbGxEYXRhRnVuY3Rpb25QdHIpKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAg
ICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgZ2V0Q2FsbERhdGE7CiAKQEAgLTExNiw2ICsxMTks
NyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICNkZWZpbmUgQ1JFQVRFX01FVEhP
RF9UQUJMRShDbGFzc05hbWUpIHsgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZXN0cm95LCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6
Y29weUJhY2tpbmdTdG9yZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDYWxsRGF0YSwgXAog
ICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OnB1dCwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMCBAQCB2b2lkIEpTQ2VsbDo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiAgICAgY2VsbC0+SlNDZWxsOjp+SlNDZWxsKCk7CiB9CiAKK3Zv
aWQgSlNDZWxsOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJikKK3sKK30K
KwogYm9vbCBKU0NlbGw6OmdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZyYgc3RyaW5n
VmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N0cmluZygpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgQ29weVZpc2l0b3I7CiAgICAgY2xh
c3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMTEyLDYgKzExMyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdG9PYmplY3QoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogICAgICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3Im
KTsKIAogICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9PYmplY3Qgb3Bl
cmF0aW9uIGluY2x1ZGVkLgogICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
cmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJCdXR0
ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0
ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJH
ZXR0ZXJTZXR0ZXIuaCIKQEAgLTk0LDEwICs5NSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0
Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpj
b3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwg
c2l6ZV90IHN0b3JhZ2VTaXplKQogewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAorCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKICAgICAKICAgICBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsK
QEAgLTExMSw1MSArMTEyLDY2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRC
dXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZSgKLSAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYg
KHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCi0gICAgICAgICAgICBi
dXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUlu
Qnl0ZXMpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpj
cmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNpdG9yLCBwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIHByb3BlcnRp
ZXMuCisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHko
YnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJ
bkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oCisgICAgICAgICAgICB2aXNpdG9y
LCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKwogICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVu
dFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7CiAgICAgICAgIFByb3Bl
cnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsK
ICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6ZTsgY291bnQtLTspIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291cmNlKS0+Z2V0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJyZW50VGFyZ2V0KS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
IChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKICAgICAgICAgICAgICpuZXdCdXR0ZXJm
bHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHBy
b3ByaWF0ZS4KICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewog
ICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPmNvcHlIZWFkZXJG
cm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yOwogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiogY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
OwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAoY3VycmVu
dFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCkKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0
aCgpOyBjb3VudC0tOykKKyAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRUYXJnZXQrKyktPnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoKGN1cnJlbnRTb3VyY2UrKyktPmdldCgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisK
KyAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJv
cGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAgICAgIG1fYnV0dGVyZmx5ID0g
bmV3QnV0dGVyZmx5OworICAgIH0KK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHNp
emVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwor
ICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFk
ZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4
aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdI
ZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTWFyayB0
aGUgcHJvcGVydGllcy4KLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIAor
ICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzID0gMDsKKyAgICB9CisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6
dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgLy8gTWFyayB0aGUgcHJvcGVy
dGllcy4KKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICB2aXNpdG9yLmNvcHlMYXRlcihi
dXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUlu
Qnl0ZXMpOworCisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewogICAgICAg
ICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICAgICAgc3dpdGNoIChzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6CkBAIC0xODksNiArMjA1LDE2IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCit2b2lkIEpTT2JqZWN0Ojpjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOworCisgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KQorICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwg
dGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7Cit9CisKIHZvaWQgSlNG
aW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGaW5hbE9i
amVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgICAgIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogCkBAIC01OTEsNiAr
NTkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVzZXRJbmhlcml0b3JJRChK
U0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHkoU2xv
dFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOworICAgICAgICB2b2lk
IGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNp
emUpOwogCiAgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25vdyB0aGF0IHRoZSBvYmplY3Qg
aXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgICAgICAvLyBzdG9yYWdlLiBUaGlz
IHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTg1NCwxNCArODU2LDE0IEBAIGlubGluZSBKU1Zh
bHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb24KICAgICByZXR1cm4gc3RydWN0dXJlKCktPnN0
b3JlZFByb3RvdHlwZSgpOwogfQogCi1pbmxpbmUgYm9vbCBKU0NlbGw6OmluaGVyaXRzKGNvbnN0
IENsYXNzSW5mbyogaW5mbykgY29uc3QKK2lubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxs
OjptZXRob2RUYWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5mbygpLT5pc1N1YkNs
YXNzT2YoaW5mbyk7CisgICAgcmV0dXJuICZjbGFzc0luZm8oKS0+bWV0aG9kVGFibGU7CiB9CiAK
LWlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgpIGNvbnN0Citp
bmxpbmUgYm9vbCBKU0NlbGw6OmluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyogaW5mbykgY29uc3QK
IHsKLSAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZTsKKyAgICByZXR1cm4gY2xh
c3NJbmZvKCktPmlzU3ViQ2xhc3NPZihpbmZvKTsKIH0KIAogLy8gdGhpcyBtZXRob2QgaXMgaGVy
ZSB0byBiZSBhZnRlciB0aGUgaW5saW5lIGRlY2xhcmF0aW9uIG9mIEpTQ2VsbDo6aW5oZXJpdHMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDEz
MDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYodW5zaWdu
ZWQsIGdjTWFya1N0YWNrU2VnbWVudFNpemUsIHBhZ2VTaXplKCkpIFwKICAgICB2KHVuc2lnbmVk
LCBudW1iZXJPZkdDTWFya2VycywgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKDcpKSBcCiAgICAg
dih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAxMDAwKSBcCisgICAgdihkb3Vi
bGUsIG1heENvcGllZFNwYWNlRnJhZ21lbnRhdGlvbiwgMC44KSBcCisgICAgdihkb3VibGUsIG1h
eENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbiwgMC45KSBcCiAgICAgXAogICAgIHYoYm9vbCwgZm9y
Y2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBmb3JjZWRXZWFrUmFu
ZG9tU2VlZCwgMCkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167825</attachid>
            <date>2012-10-09 12:53:42 -0700</date>
            <delta_ts>2012-10-09 13:03:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121009125246.patch</filename>
            <type>text/plain</type>
            <size>83366</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIGRvaW5nIAorICAgICAgICBzb21lIHNldCBvZiBHQyB0YXNrcy4gQ3VycmVudGx5LCB0
aGF0IHNldCBvZiB0YXNrcyBpbmNsdWRlcyBNYXJrLCBDb3B5LCBTeW5jaHJvbml6ZSwgYW5kIEV4
aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBoYXMgYW4gaW5kaXZpZHVhbCBxdWV1ZSBvZiB0YXNr
cyB3aGljaCBpdCBwb2xscyBmcm9tIGFuZCBleGVjdXRlcyBpbiBvcmRlci4gQW55IHRocmVhZCBj
YW4gaXNzdWUgYW55IG90aGVyIAorICAgICAgICB0aHJlYWQgYSBuZXcgdGFzay4gRm9yIGV4YW1w
bGUsIHdoZW4gYSB0aHJlYWQgdGhhdCBpcyBkb2luZyBtYXJraW5nIHJlYWxpemVzIGl0IG1pZ2h0
IGJlIHByb2ZpdGFibGUgZm9yIAorICAgICAgICBvdGhlciB0aHJlYWRzIHRvIHdha2UgdXAgYW5k
IHN0YXJ0IGRvaW5nIG1hcmtpbmcsIGl0IHdpbGwgaXNzdWUgYSB0YXNrIHRvIHRoZW0uCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjp0aHJlYWRJRCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpp
bml0aWFsaXplVGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6c2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6Y29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpH
Q1RocmVhZDo6c3luY2hyb25pemVXaXRoKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OndhaXRG
b3JOZXh0VGFzayk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMpOgorICAgICAgICAqIGhlYXAv
R0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWQpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZDo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcDogVGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBub3cgaGFzIGEgbGlz
dCBvZiBHQ1RocmVhZCBvYmplY3RzIHJhdGhlciB0aGFuIHJhdyAKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllcnMuCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Y2hpbGRWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
R0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMpOiBUaGlzIGZ1
bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyB0YXNrcyAKKyAgICAgICAgdG8g
dGhlIHdvcmtlciB0aHJlYWRzIHRoYXQgdGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBvYmplY3RzIGtu
b3dzIGFib3V0LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6R0NUaHJl
YWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcpOiBDYWxsYmFjayB0byBsZXQgdGhlIEdDVGhy
ZWFkU2hhcmVkRGF0YSBrbm93IHRoYXQgbWFya2luZyBoYXMgCisgICAgICAgIHN0YXJ0ZWQuCisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRv
IGZvciBmaW5pc2hpbmcgbWFya2luZy4gV2UgZG9uJ3QgbmVlZCB0byB3YWl0IG9uIHRoZSBvdGhl
ciAKKyAgICAgICAgbWFya2luZyB0aHJlYWRzIHRvIGZpbmlzaCB1bmxlc3Mgd2Ugd2FudCBhY2N1
cmF0ZSBvYmplY3QgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmtpbmcgcGhhc2UuCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nKTogRGl0dG8gZm9y
IHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmluaXNoaW5nIGNvcHlpbmcuIEFn
YWluLCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgb24gdGhlIAorICAgICAgICBvdGhlciB0aHJlYWRz
IHRvIGZpbmlzaCBjb3B5aW5nIGJlY2F1c2Ugd2UgY2FuIHJlbHkgb24gQ29waWVkU3BhY2U6OmRv
bmVDb3B5aW5nIHRvIHdhaXQgdW50aWwgY29weWluZyBpcyAKKyAgICAgICAgZmluaXNoZWQuCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChHQ1RocmVhZFNoYXJlZERhdGEpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERh
dGE6OmdldE5leHRCbG9ja3NUb0NvcHkpOiBBdG9taWNhbGx5IGdldHMgdGhlIG5leHQgY2h1bmsg
b2Ygd29yayBmb3IgYSBjb3B5aW5nIHRocmVhZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3Rz
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KTogUmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvcHlpbmcgcGhhc2UsIG5vdGlmeWlu
ZyB0aGUgY29weWluZyB0aHJlYWRzLCAKKyAgICAgICAgYW5kIGRvaW5nIGFueSBjb3B5aW5nIHdv
cmsgaWYgbmVjZXNzYXJ5LgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6Q29weUZ1bmN0b3I6OkNvcHlGdW5jdG9yKToKKyAgICAgICAgKENvcHlGdW5jdG9yKToK
KyAgICAgICAgKEpTQzo6Q29weUZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcDogQ2hhbmdlZCB0aGUgaW5jcmVtZW50YWwgc3dlZXBlciB0
byBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IG9mIE1hcmtlZEJsb2NrcyAKKyAgICAgICAg
dGhhdCBuZWVkIHN3ZWVwaW5nLCBzaW5jZSB0aGlzIG5vdyByZXNpZGVzIGluIHRoZSBIZWFwIHNv
IHRoYXQgaXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgYnkgdGhlIEdDVGhyZWFkcy4KKyAgICAgICAg
KEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAo
SlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OnNldHVwKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZUtub3duUGFyYWxsZWwpOiBOb3cgdXNlcyB0aGUgZGlzcGF0Y2ggbWVjaGFuaXNtIGluIEdDVGhy
ZWFkU2hhcmVkRGF0YSBmb3IgdGVsbGluZyAKKyAgICAgICAgdGhlIEdDVGhyZWFkcyB0byB3YWtl
IHVwIGFuZCBzdGFydCBtYXJraW5nLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29weUxhdGVyKTogTm90aWZpZXMgdGhlIENvcGllZEJsb2NrIHRoYXQgdGhlcmUgYXJlIHNvbWUg
bGl2ZSBieXRlcyB0aGF0IG1heSBuZWVkIAorICAgICAgICB0byBiZSBjb3BpZWQuCisgICAgICAg
ICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChCdXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKTog
VXNlcyB0aGUgbmV3IENvcHlWaXNpdG9yLgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6
CisgICAgICAgIChNZXRob2RUYWJsZSk6IEFkZGVkIG5ldyAidmlydHVhbCIgZnVuY3Rpb24gY29w
eUJhY2tpbmdTdG9yZSB0byBtZXRob2QgdGFibGUuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90aGluZy4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29weUJ1dHRlcmZseSk6IERvZXMgdGhlIGFjdHVhbCBjb3B5aW5nIG9m
IHRoZSBidXR0ZXJmbHkuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkpOiBDYWxscyBjb3B5TGF0ZXIgZm9yIHRoZSBidXR0ZXJmbHkuCisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTogCisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1ldGhvZFRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmhlcml0cyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6IEFkZGVkIHR3byBuZXcgY29uc3RhbnRzLCBtYXhIZWFwRnJh
Z21lbnRhdGlvbiBhbmQgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAKKyAgICAgICAgdG8g
Z292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUgZG9pbmcg
Y29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMDkgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWZ0ZXIgcjEzMDM0NCwgT3BhcXVlSlNTdHJp
bmc6OmlkZW50aWZpZXIoKSBhZGRzIHdyYXBwZWQgU3RyaW5nIHRvIGlkZW50aWZpZXIgdGFibGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMDY0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDggKzEwNiwxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgaGVh
cC9CbG9ja0FsbG9jYXRvci5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAorICAgIGhlYXAv
Q29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFw
L0RGR0NvZGVCbG9ja3MuY3BwCisgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhy
ZWFkU2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDkgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCBcCisgICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ2FyZFNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmggXApAQCAtMjc4LDYgKzI4MSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmggXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAgXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAgXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggXAogICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTdGF0aXN0aWNzLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAgXAogICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvV2Vha1NldC5jcHAg
XApAQCAtODEsNiArODIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cCBcCiAgICAgaGVhcC9CbG9ja0FsbG9jYXRvci5jcHAgXAogICAgIGhlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmNwcCBcCisgICAgaGVhcC9HQ1RocmVhZC5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzM4LDYgKzIzMzgsMTggQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcQ29weVZpc2l0b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxERkdD
b2RlQmxvY2tzLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNDM0LDYgKzI0NDYsMTQgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVh
cFxHQ1RocmVhZC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcR0NUaHJlYWQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiwxMSBA
QAogCQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRFMTVE
RDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovOyB9OwogCQlDMjExMjJF
MjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERjE1REQ5QUIzMDA3OTBFM0Eg
LyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIx
RjcxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBD
b3B5VmlzaXRvci5jcHAgKi87IH07CisJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5
VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjkxNjFGOTlFMDAwMjM2
OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlW
aXNpdG9ySW5saW5lTWV0aG9kcy5oICovOyB9OworCQlDMjEzMjFGQTE2MUY5OUUwMDAyMzY5RUQg
LyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLzsgfTsKKwkJ
QzIxMzIxRkIxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjEzMjFGNjE2MUY5OUUwMDAyMzY5RUQgLyog
R0NUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4
NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi87IH07CiAJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ4Niw2ICsxNDkxLDExIEBACiAJ
CUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8q
IEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIy
RTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMjE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMzE2MUY5OUUwMDAy
MzY5RUQgLyogQ29weVZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29weVZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjQxNjFG
OTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8q
IEdDVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAv
KiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
bG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRC
NDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE5LDYgKzE4MjksMTEgQEAKIAkJMTQyRTMxMkEx
MzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5j
cHAgKi8sCisJCQkJQzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi8s
CisJCQkJQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9k
cy5oICovLAorCQkJCUMyMTMyMUY1MTYxRjk5RTAwMDIzNjlFRCAvKiBHQ1RocmVhZC5jcHAgKi8s
CisJCQkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzI0
RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKIAkJCQlDMjRE
MzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMjI1NDk0
MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtMjU3OCw2ICsyNTkz
LDggQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMTMyMUY4MTYxRjk5RTAwMDIz
NjlFRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMzIxRkIxNjFGOTlF
MDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNE
Njk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdG
Njg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2OCw2ICsyOTg1LDcgQEAKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
MjEzMjFGOTE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTM1NzQsNiArMzU5Miw4IEBACiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFG
QjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNEQz
MUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDMjEzMjFGNzE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQzIxMzIxRkExNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5o
CShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSGVhcEJs
b2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSw2ICs0MywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IENvcGllZEJsb2NrKiBjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAg
c3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCYpOwogCisgICAgYm9vbCBpc1Bpbm5lZCgpOworCisgICAgdW5zaWduZWQgbGl2ZUJ5
dGVzKCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXModW5zaWduZWQpOworICAgIHZvaWQgZGlk
U3Vydml2ZUdDKCk7CisgICAgYm9vbCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKKyAgICBi
b29sIHNob3VsZEV2YWN1YXRlKCk7CisgICAgYm9vbCBjYW5CZVJlY3ljbGVkKCk7CisKICAgICAv
LyBUaGUgcGF5bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBm
b3IgYWxsb2NhdGlvbnMuCiAgICAgY2hhciogcGF5bG9hZCgpOwogICAgIGNoYXIqIHBheWxvYWRF
bmQoKTsKQEAgLTY2LDYgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX3JlbWFpbmlu
ZzsKICAgICB1aW50cHRyX3QgbV9pc1Bpbm5lZDsKKyAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsK
IH07CiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwo
Y29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uKQpAQCAtOTYsMTAgKzEwOCw2
MCBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKGNvbnN0IFBhCiAgICAgOiBIZWFw
QmxvY2s8Q29waWVkQmxvY2s+KGFsbG9jYXRpb24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2Fk
Q2FwYWNpdHkoKSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBtX2xpdmVCeXRlcygw
KQogewogICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPiht
X3JlbWFpbmluZykpKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVC
eXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICB1bnNpZ25lZCBvbGRWYWx1ZSA9IDA7CisgICAg
dW5zaWduZWQgbmV3VmFsdWUgPSAwOworICAgIGRvIHsKKyAgICAgICAgb2xkVmFsdWUgPSBtX2xp
dmVCeXRlczsKKyAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIGJ5dGVzOworICAgIH0gd2hp
bGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmbV9saXZlQnl0ZXMsIG9sZFZhbHVlLCBuZXdW
YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKK3sK
KyAgICBtX2xpdmVCeXRlcyA9IDA7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCitpbmxp
bmUgYm9vbCBDb3BpZWRCbG9jazo6ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sK
KyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPj0gYnl0ZXMpOworICAgIHVuc2lnbmVkIG9sZFZhbHVl
ID0gMDsKKyAgICB1bnNpZ25lZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8geworICAgICAgICBvbGRW
YWx1ZSA9IG1fbGl2ZUJ5dGVzOworICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gYnl0ZXM7
CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2xpdmVCeXRlcywgb2xk
VmFsdWUsIG5ld1ZhbHVlKSk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDwgb2xkVmFsdWUpOwor
ICAgIHJldHVybiAhbmV3VmFsdWU7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5C
ZVJlY3ljbGVkKCkKK3sKKyAgICByZXR1cm4gIW1fbGl2ZUJ5dGVzOworfQorCitpbmxpbmUgYm9v
bCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3VhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fbGl2ZUJ5dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4ocGF5bG9hZENhcGFj
aXR5KCkpIDw9IE9wdGlvbnM6Om1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbigpOworfQorCitp
bmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQoKQoreworICAgIHJldHVybiBtX2lzUGlu
bmVkOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29waWVkQmxvY2s6OmxpdmVCeXRlcygpCit7Cisg
ICAgcmV0dXJuIG1fbGl2ZUJ5dGVzOworfQorCiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBh
eWxvYWQoKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgo
c2l6ZW9mKENvcGllZEJsb2NrKSArIDcpICYgfjcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0zNiw2ICszNyw3IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShI
ZWFwKiBoZWFwKQogICAgICwgbV90b1NwYWNlKDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQogICAg
ICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFs
c2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCiB7CiAgICAgbV90b1NwYWNlTG9j
ay5Jbml0KCk7CkBAIC0xNTIsMTUgKzE1NCwxOCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFj
ZTo6dHJ5UmVhbGxvY2F0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQordm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayogYmxvY2ssIENvcGllZEJsb2NrKiogZXhjaGFu
Z2UpCiB7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOwogICAgIAorICAgIGlmIChleGNo
YW5nZSkKKyAgICAgICAgKmV4Y2hhbmdlID0gYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgp
OworCiAgICAgaWYgKCFibG9jaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFibG9jay0+
ZGF0YVNpemUoKSkgewotICAgICAgICByZWN5Y2xlQmxvY2soYmxvY2spOworICAgICAgICByZWN5
Y2xlQm9ycm93ZWRCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4
Miw2ICsxODcsMzggQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQog
ICAgIH0KIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIHN0
ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKKworICAgIG1fYmxvY2tGaWx0ZXIucmVz
ZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOworCisgICAgQ29waWVk
QmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgc2l6
ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
bV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0
ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9j
ay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAgICAgICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2so
YmxvY2spOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdG90YWxM
aXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOworICAgICAgICB0b3RhbFVzYWJsZUJ5dGVz
ICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2Vk
U3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJs
ZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNw
YWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMp
OworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9u
czo6bWF4Q29waWVkU3BhY2VGcmFnbWVudGF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29w
eVBoYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFz
ZSk7CisgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVy
T2ZMb2FuZWRCbG9ja3MpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB2b2lk
IENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiB7CiAgICAgewpAQCAtMTkwLDEyICsyMjcsMTMg
QEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICAgICAgbV9sb2FuZWRC
bG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwogICAgIH0KIAotICAgIEFT
U0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBt
X3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CisKICAg
ICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5t
X2lzUGlubmVkKSB7Ci0gICAgICAgICAgICBibG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOworICAg
ICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAg
ICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0
IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92
ZWQuCiAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAg
ICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwpAQCAtMjEwLDEzICsyNDgsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQog
ICAgIENvcGllZEJsb2NrKiBjdXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7CiAgICAgd2hp
bGUgKGN1cnIpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5lZCkgeworICAgICAgICBpZiAoIWN1cnItPmlzUGlu
bmVkKCkpIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGN1cnIpOwogICAg
ICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoY3Vycik7CiAgICAgICAgICAgICBDb3BpZWRCbG9j
azo6ZGVzdHJveShjdXJyKS5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGN1cnIpKTsKLSAg
ICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnItPmRp
ZFN1cnZpdmVHQygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBuZXh0OwogICAgIH0KQEAg
LTIyNSw2ICsyNjMsOCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAg
IGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCiAgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJl
bnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0g
ZmFsc2U7CiB9CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3Bp
ZWRTcGFjZSB7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFz
cyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVibGljOgpAQCAtNzQsNiAr
NzUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKKyAgICBib29sIHNob3VsZERvQ29weVBoYXNlKCkgeyBy
ZXR1cm4gbV9zaG91bGREb0NvcHlQaGFzZTsgfQogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBi
bG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFs
bG9jYXRlQmxvY2soKTsKICAgICBDb3BpZWRCbG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQ
aGFzZSgpOwogCi0gICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKik7Ci0gICAg
dm9pZCByZWN5Y2xlQmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICB2b2lkIGRvbmVGaWxsaW5nQmxv
Y2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKKyAgICB2b2lkIHJlY3ljbGVFdmFjdWF0
ZWRCbG9jayhDb3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2soQ29w
aWVkQmxvY2sqKTsKIAogICAgIEhlYXAqIG1faGVhcDsKIApAQCAtMTA4LDYgKzExMSw3IEBAIHBy
aXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9vdmVyc2l6ZUJsb2Nr
czsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKKyAgICBib29sIG1fc2hvdWxkRG9D
b3B5UGhhc2U7CiAKICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENv
bmRpdGlvbiBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIwIEBAIGlubGluZSB2b2lk
IENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAot
aW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENv
cGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewot
ICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKLQotICAgIG1fYmxvY2tGaWx0
ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAg
QVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRC
bG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAgIEFTU0VSVChibG9jayk7
CisgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOworICAgIEFTU0VSVCghYmxvY2st
Pm1faXNQaW5uZWQpOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3Rv
U3BhY2VMb2NrKTsKKyAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICBt
X2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICB9CisgICAgbV9oZWFwLT5ibG9ja0FsbG9j
YXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KIAotaW5s
aW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCitp
bmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sq
IGJsb2NrKQogewogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGll
ZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIK
KworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkdDVGhy
ZWFkU2hhcmVkRGF0YS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworQ29w
eVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQorICAgIDog
bV9zaGFyZWQoc2hhcmVkKQoreworfQorCit2b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJl
ZCgpCit7CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIFZlY3Rv
cjxNYXJrZWRCbG9jayo+JiBibG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5tX2Jsb2Nrc1RvQ29weTsK
KyAgICBzaXplX3Qgc3RhcnRJbmRleCwgZW5kSW5kZXg7CisKKyAgICBtX3NoYXJlZC5nZXROZXh0
QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3aGlsZSAoc3RhcnRJbmRl
eCA8IGVuZEluZGV4KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kSW5kZXg7IGkrKykKKyAgICAgICAgICAgIGJsb2Nrc1RvQ29weVtpXS0+Zm9yRWFjaExpdmVD
ZWxsKGZ1bmN0b3IpOworICAgICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0
SW5kZXgsIGVuZEluZGV4KTsKKyAgICB9CisgICAgQVNTRVJUKHN0YXJ0SW5kZXggPT0gZW5kSW5k
ZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JfaAorCisj
aW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDVGhy
ZWFkU2hhcmVkRGF0YTsKKworY2xhc3MgQ29weVZpc2l0b3IgeworcHVibGljOgorICAgIENvcHlW
aXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOworCisgICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgp
OworCisgICAgdm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CisK
KyAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMg
d2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcworICAgIC8vIGFyZSBkaXNjb250aWd1
b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5l
ZWQgdG8gZm9jdXMgb24KKyAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFz
IGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCisgICAgYm9vbCBjaGVj
a0lmU2hvdWxkQ29weSh2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCk7CisgICAgdm9pZCBkaWRDb3B5KHZvaWQqLCBzaXplX3QpOworCitwcml2YXRlOgor
ICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CisKKyAgICBHQ1RocmVhZFNo
YXJlZERhdGEmIG1fc2hhcmVkOworICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRv
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBDb3B5VmlzaXRvcklu
bGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJKU0Nl
bGwuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgR0NDb3B5UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7CitwdWJsaWM6CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2
aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgJiYgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBOb25B
cnJheSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmNvcHlCYWNraW5nU3RvcmUgPT0gSlNPYmplY3Q6OmNvcHlC
YWNraW5nU3RvcmUpOworICAgICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCBt
X3Zpc2l0b3IpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb3B5VmlzaXRvciYgbV92aXNpdG9y
OworfTsKKworaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQq
IG9sZFB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShieXRlcykpIHsKKyAgICAgICAgQVNTRVJUKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9y
KG9sZFB0ciktPmlzUGlubmVkKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpLT5pc1Bpbm5lZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQqIENv
cHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBy
ZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBh
c3NpZ25lZC4KKyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5
dGVzLCAmcmVzdWx0KSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0
ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOworICAgIEFTU0VSVChyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9ICAgICAgIAorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFs
bG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBieXRlcykKK3sKKyAgICBDb3BpZWRCbG9jayogbmV3
QmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2so
bV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKKyAgICBt
X2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOworCisgICAgdm9pZCog
cmVzdWx0ID0gMDsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxv
Y2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVk
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3Rh
cnRDb3B5aW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7
CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNl
LT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCks
ICZibG9jayk7CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsK
K30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKK3sKKyAgICBpZiAo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
aGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5y
ZXNldEN1cnJlbnRCbG9jaygpLCAwKTsKK30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRp
ZENvcHkodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKCFDb3BpZWRTcGFj
ZTo6aXNPdmVyc2l6ZShieXRlcykpOworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNw
YWNlOjpibG9ja0ZvcihwdHIpOworICAgIEFTU0VSVCghYmxvY2stPmlzUGlubmVkKCkpOworCisg
ICAgaWYgKGJsb2NrLT5kaWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKSkKKyAgICAgICAgbV9zaGFyZWQu
bV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKKworI2luY2x1ZGUgIkNv
cHlWaXNpdG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitHQ1RocmVhZDo6R0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRh
JiBzaGFyZWQsIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvciwgQ29weVZpc2l0b3IqIGNvcHlWaXNp
dG9yLCBzaXplX3QgaW5kZXgpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3NoYXJlZChz
aGFyZWQpCisgICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6YWRvcHRQdHIoc2xvdFZpc2l0b3IpKQor
ICAgICwgbV9jb3B5VmlzaXRvcihXVEY6OmFkb3B0UHRyKGNvcHlWaXNpdG9yKSkKKyAgICAsIG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK1RocmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVhZElE
KCkKK3sKKyAgICBBU1NFUlQobV90aHJlYWRJRCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cit9
CisKK3ZvaWQgR0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQoreworICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgbV90aHJlYWRJRCA9IHRo
cmVhZElEOworfQorCitTbG90VmlzaXRvciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKK3sKKyAg
ICBBU1NFUlQobV9zbG90VmlzaXRvcik7CisgICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0KCk7
Cit9CisKK0NvcHlWaXNpdG9yKiBHQ1RocmVhZDo6Y29weVZpc2l0b3IoKQoreworICAgIEFTU0VS
VChtX2NvcHlWaXNpdG9yKTsKKyAgICByZXR1cm4gbV9jb3B5VmlzaXRvci5nZXQoKTsKK30KKwor
dm9pZCBHQ1RocmVhZDo6c3luY2hyb25pemVXaXRoKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90YXNrUXVldWVMb2NrKTsKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSkK
KyAgICAgICAgbV90YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworfQor
CitHQ1Rhc2sgR0NUaHJlYWQ6OndhaXRGb3JOZXh0VGFzaygpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdGFza1F1ZXVlTG9jayk7CisgICAgd2hpbGUgKG1fdGFza1F1ZXVlLmlzRW1wdHko
KSkgeworICAgICAgICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgbV90
YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworICAgIH0KKyAgICBHQ1Rh
c2sgbmV4dFRhc2sgPSAqbV90YXNrUXVldWUuYmVnaW4oKTsKKyAgICBtX3Rhc2tRdWV1ZS5yZW1v
dmVGaXJzdCgpOworICAgIHJldHVybiBuZXh0VGFzazsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NU
aHJlYWRNYWluKCkKK3sKKyAgICBHQ1Rhc2sgY3VycmVudFRhc2s7CisgICAgV1RGOjpyZWdpc3Rl
ckdDVGhyZWFkKCk7CisgICAgLy8gV2FpdCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGZpbmlzaCBj
cmVhdGluZyB1cy4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5t
X21hcmtpbmdMb2NrKTsKKyAgICB9CisgICAgeworICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fc2xvdFZpc2l0b3IpOworICAgICAgICB3aGlsZSAoKGN1cnJlbnRUYXNrID0g
d2FpdEZvck5leHRUYXNrKCkpICE9IEV4aXQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVu
dFRhc2spIHsKKyAgICAgICAgICAgIGNhc2UgTWFyazoKKyAgICAgICAgICAgICAgICBtX3Nsb3RW
aXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZXNldFNsb3RWaXNpdG9yOgorICAg
ICAgICAgICAgICAgIG1fc2xvdFZpc2l0b3ItPnJlc2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENvcHk6CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
aGF2ZSB0byBjYWxsIHN0YXJ0Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9u
IHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJv
bVNoYXJlZCgpOworICAgICAgICAgICAgICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN5bmNocm9uaXplOgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFeGl0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBkYXRhKQoreworICAgIEdDVGhyZWFk
KiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxHQ1RocmVhZCo+KGRhdGEpOworICAgIHRocmVhZC0+Z2NU
aHJlYWRNYWluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgR0NUaHJlYWRfaAorI2RlZmluZSBHQ1RocmVhZF9oCisKKyNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29weVZpc2l0b3I7CitjbGFz
cyBHQ1RocmVhZFNoYXJlZERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworZW51bSBHQ1Rhc2sg
eworICAgIE1hcmssCisgICAgUmVzZXRTbG90VmlzaXRvciwKKyAgICBDb3B5LAorICAgIFN5bmNo
cm9uaXplLAorICAgIEV4aXQKK307CisKK2NsYXNzIEdDVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBH
Q1RocmVhZChHQ1RocmVhZFNoYXJlZERhdGEmLCBTbG90VmlzaXRvciosIENvcHlWaXNpdG9yKiwg
c2l6ZV90KTsKKworICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOworICAgIENvcHlWaXNp
dG9yKiBjb3B5VmlzaXRvcigpOworICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGVu
cXVldWVUYXNrKEdDVGFzayk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVdpdGgoKTsKKworICAgIHN0
YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGdjVGhyZWFkTWFpbigpOworICAgIEdDVGFzayB3YWl0Rm9yTmV4dFRhc2soKTsKKworICAgIFRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hh
cmVkOworICAgIE93blB0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKKyAgICBPd25QdHI8
Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAgTXV0
ZXggbV90YXNrUXVldWVMb2NrOworICAgIFRocmVhZENvbmRpdGlvbiBtX3Rhc2tRdWV1ZUNvbmRp
dGlvbjsKKyAgICBEZXF1ZTxHQ1Rhc2s+IG1fdGFza1F1ZXVlOworfTsKKworaW5saW5lIHZvaWQg
R0NUaHJlYWQ6OmVucXVldWVUYXNrKEdDVGFzayB0YXNrKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3Rhc2tRdWV1ZUxvY2spOworICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAg
ICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDQ1ICsyNiwyOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hh
cmVkRGF0YS5oIgogCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJlbigpCiB7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnJlc2V0KCk7Cisg
ICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKFJlc2V0U2xvdFZpc2l0b3IpOwogfQogCiBz
aXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZFZpc2l0Q291bnQoKQogeyAgICAgICAKICAg
ICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCAr
PSBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrW2ldLT52aXNpdENvdW50KCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1
bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnZpc2l0Q291bnQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVh
ZE1haW4oU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yKQotewotICAgIFdURjo6cmVnaXN0ZXJHQ1Ro
cmVhZCgpOwotICAgIHsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCpzbG90
VmlzaXRvcik7Ci0gICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6OlNsYXZlRHJhaW4pOwotICAgIH0KLSAgICBkZWxldGUgc2xvdFZpc2l0b3I7Ci19Ci0KLXZv
aWQgR0NUaHJlYWRTaGFyZWREYXRhOjptYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIG15Vmlz
aXRvcikKLXsgICAgICAgICAgICAgICAKLSAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBz
dGF0aWNfY2FzdDxTbG90VmlzaXRvcio+KG15VmlzaXRvcik7Ci0KLSAgICBzbG90VmlzaXRvci0+
c2hhcmVkRGF0YSgpLm1hcmtpbmdUaHJlYWRNYWluKHNsb3RWaXNpdG9yKTsKLX0KICNlbmRpZgog
CiBHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkBAIC03NCwxMyArNTgsMjEgQEAgR0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVh
ZFNoYXJlZERhdGEoSgogICAgICwgbV9zaGFyZWRNYXJrU3RhY2sobV9zZWdtZW50QWxsb2NhdG9y
KQogICAgICwgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0KGZhbHNlKQorICAgICwgbV9ibG9ja3NUb0NvcHkoZ2xvYmFs
RGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3QpCisgICAgLCBtX2NvcHlJbmRleCgwKQogeworICAg
IG1fY29weUxvY2suSW5pdCgpOwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFi
IHRoZSBsb2NrIHNvIHRoZSBuZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6
ZWQgYmVmb3JlIHRoZXkgc3RhcnQgcnVubmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9t
YXJraW5nTG9jayk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKCk7ICsraSkgewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3Ig
PSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMpOwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0
YWNrLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5k
KGNyZWF0ZVRocmVhZChtYXJraW5nVGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFT
Y3JpcHRDb3JlOjpNYXJraW5nIikpOwotICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5s
YXN0KCkpOworICAgICAgICBDb3B5VmlzaXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0
b3IoKnRoaXMpOworICAgICAgICBzaXplX3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7Cisg
ICAgICAgIEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNp
dG9yLCBjb3B5VmlzaXRvciwgaW5kZXgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFk
LCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFs
aXplVGhyZWFkSUQodGhyZWFkSUQpOworICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhy
ZWFkKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTkyLDE2ICs4NCwxNyBAQCBHQ1RocmVhZFNoYXJl
ZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEoCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dCA9IHRydWU7Ci0gICAgICAgIG1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICAg
ICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKEV4aXQpOworICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOworICAgICAg
ICBkZWxldGUgbV9nY1RocmVhZHNbaV07CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX21hcmtpbmdUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX21hcmtpbmdUaHJlYWRzW2ldKTsKICNlbmRpZgogfQogICAgIAogdm9pZCBH
Q1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMpOwogICAgIEFTU0VSVCghbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KTsKICAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKICAgICAKQEAg
LTExOSw0ICsxMTIsNTggQEAgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICB9
CiB9CiAKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVh
ZHMoR0NUYXNrIHRhc2spCit7CisgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkSUQg
PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NU
aHJlYWRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBtX2djVGhy
ZWFkc1tpXTsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFk
SUQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdGhyZWFkLT5lbnF1ZXVlVGFzayh0
YXNrKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpzeW5jaHJvbml6ZVdp
dGhXb3JrZXJUaHJlYWRzKCkKK3sKKyAgICBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoU3lu
Y2hyb25pemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgR0NUaHJlYWQqIHRocmVhZCA9IG1fZ2NUaHJlYWRzW2ldOworICAg
ICAgICBBU1NFUlQodGhyZWFkLT50aHJlYWRJRCgpICE9IFdURjo6Y3VycmVudFRocmVhZCgpKTsK
KyAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZVdpdGgoKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NU
aHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcoKQoreworICAgIGRpc3BhdGNoVGFza1Rv
V29ya2VyVGhyZWFkcyhNYXJrKTsKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZp
bmlzaE1hcmtpbmcoKQoreworICAgIC8vIFdlIG5lZWQgdG8gc3luY2hyb25pemUgaWYgd2UgY2Fy
ZSBhYm91dCBhY2N1cmF0ZSBsb2dnaW5nIGNvdW50cy4KKyNpZiBFTkFCTEUoT0JKRUNUX01BUktf
TE9HR0lORykKKyAgICBzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKCk7CisjZW5kaWYKK30K
Kwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCit7CisgICAgewor
ICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBtX2Js
b2Nrc1RvQ29weSA9IG1fZ2xvYmFsRGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3Q7CisgICAgICAg
IG1fY29weUluZGV4ID0gMDsKKyAgICB9CisgICAgLy8gV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQg
d2UgYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgY2FuIAorICAg
IC8vIGJsb3cgdGhyb3VnaCBhbGwgb2YgdGhlIGNvcHlpbmcgd29yayBiZWZvcmUgdGhlIEdDVGhy
ZWFkcyBmdWxseSB3YWtlIHVwLiAKKyAgICAvLyBUaGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBh
IGJsb2NrIGZyb20gdGhlIENvcGllZFNwYWNlIHdoZW4gdGhlIGNvcHlpbmcgcGhhc2UgCisgICAg
Ly8gaGFzIGNvbXBsZXRlZCwgd2hpY2ggaXNuJ3QgYWxsb3dlZC4KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX2djVGhyZWFkc1tp
XS0+Y29weVZpc2l0b3IoKS0+c3RhcnRDb3B5aW5nKCk7CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3Jr
ZXJUaHJlYWRzKENvcHkpOworfQorCit2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNo
Q29weWluZygpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDEzMDY0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTQgQEAKICNpZm5kZWYgR0NUaHJlYWRTaGFyZWRE
YXRhX2gKICNkZWZpbmUgR0NUaHJlYWRTaGFyZWREYXRhX2gKIAorI2luY2x1ZGUgIkdDVGhyZWFk
LmgiCiAjaW5jbHVkZSAiTGlzdGFibGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgi
CisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOCw2ICs0MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbERhdGE7CiBjbGFzcyBDb3BpZWRTcGFj
ZTsKK2NsYXNzIENvcHlWaXNpdG9yOwogCiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGEgewogcHVi
bGljOgpAQCAtNDYsNiArNTAsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKTsK
IAorICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CisgICAgdm9pZCBkaWRGaW5pc2hNYXJraW5n
KCk7CisgICAgdm9pZCBkaWRTdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRpZEZpbmlzaENvcHlp
bmcoKTsKKwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICB2b2lkIHJlc2V0Q2hpbGRyZW4o
KTsKICAgICBzaXplX3QgY2hpbGRWaXNpdENvdW50KCk7CkBAIC01MywxMiArNjIsMTMgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsK
ICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNp
dG9yOwogCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHZvaWQgbWFya2luZ1RocmVhZE1h
aW4oU2xvdFZpc2l0b3IqKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJraW5nVGhyZWFkU3RhcnRGdW5j
KHZvaWQqIGhlYXApOwotI2VuZGlmCisgICAgdm9pZCBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVh
ZHMoR0NUYXNrKTsKKyAgICB2b2lkIHN5bmNocm9uaXplV2l0aFdvcmtlclRocmVhZHMoKTsKKyAg
ICB2b2lkIGdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90Jiwgc2l6ZV90Jik7CiAKICAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsK
QEAgLTY3LDkgKzc3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIG1fc2hvdWxkSGFzaENv
bnN0OwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fbWFya2luZ1RocmVhZHM7Ci0g
ICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjazsKLSAgICAK
KyAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhyZWFkczsKKwogICAgIE11dGV4IG1fbWFya2lu
Z0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvbjsKICAgICBNYXJr
U3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsKQEAgLTc5LDEwICs4OCwyMyBAQCBwcml2YXRl
OgogICAgIE11dGV4IG1fb3BhcXVlUm9vdHNMb2NrOwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3Bh
cXVlUm9vdHM7CiAKKyAgICBTcGluTG9jayBtX2NvcHlMb2NrOworICAgIFZlY3RvcjxNYXJrZWRC
bG9jayo+JiBtX2Jsb2Nrc1RvQ29weTsKKyAgICBzaXplX3QgbV9jb3B5SW5kZXg7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKKwogICAgIExpc3Rh
YmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzOwogICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6
TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJl
YWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYg
ZW5kKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3Rh
cnQgPSBtX2NvcHlJbmRleDsKKyAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXpl
KCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRl
eCA9IGVuZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJD
b3BpZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRl
ICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMjUyLDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAg
ICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJl
ZERhdGEpCisgICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxl
U2V0KGdsb2JhbERhdGEpCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtNDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFy
a1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsK
ICAgICB9CiAKLSAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hh
cmVkRGF0YS5kaWRTdGFydE1hcmtpbmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1f
c2xvdFZpc2l0b3I7CiAgICAgdmlzaXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBo
ZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7CkBAIC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjpt
YXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQs
IHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAotICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAg
ICBtX3NoYXJlZERhdGEuZGlkRmluaXNoTWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFS
S19MT0dHSU5HKQogICAgIHNpemVfdCB2aXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7
CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6
Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigp
OwogI2VuZGlmCiAgICAgbV9zaGFyZWREYXRhLnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29w
eUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7
CisgICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAg
bV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29weWluZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlz
aXRvciA9IG1fY29weVZpc2l0b3I7CisgICAgICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7Cisg
ICAgICAgIHZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29w
eWluZygpOworICAgICAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0g
CiAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwx
NCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVND
UklQVENPUkVfR0NfTUFSS0VEKCk7CiAKICAgICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5y
ZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5
RnVuY3RvciBmdW5jdG9yKG1fYmxvY2tTbmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2Uu
Zm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7
CisKKyAgICB7CiAgICAgICAgIEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVy
cyk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBA
IC03NTUsNyArNzc4LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgICAgICBtX29iamVjdFNwYWNlLnNocmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBl
ci0+c3RhcnRTd2VlcGluZyhtX29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3
ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRv
bmVkID0gMDsKIAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJs
b2NrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdD
b2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAi
SGFuZGxlU2V0LmgiCkBAIC0xODIsNyArMTgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmll
bmQgY2xhc3MgQ29weVZpc2l0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmll
bmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsy
MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxs
R0MpOwogICAgICAgICB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYp
OwogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7Cisg
ICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzKCk7CiAgICAgICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIz
OSw2ICsyNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFk
U2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0
b3I7CisgICAgICAgIENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxl
U2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAt
MjU2LDYgKzI2MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0
aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3
ZWVwZXIqIG1fc3dlZXBlcjsKKyAgICAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1Nu
YXBzaG90OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICAgICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJs
b2NrKj4mIGJsb2NrcykgCisgICAgICAgICAgICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAs
IG1fYmxvY2tzKGJsb2NrcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZv
aWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9
IGJsb2NrOyB9CisgICAgCisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8
TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6
OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw3IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAK
IEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVu
TG9vcFJlZiBydW5Mb29wKQogICAgIDogSGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVu
TG9vcCkKICAgICAsIG1fY3VycmVudEJsb2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nr
c1RvU3dlZXAoaGVhcC0+bV9ibG9ja1NuYXBzaG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5
IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAK
LXZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFy
a2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFy
dFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1f
YmxvY2tzVG9Td2VlcC5yZXNpemUoYmxvY2tTbmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5j
dG9yIGZ1bmN0b3IobV9ibG9ja3NUb1N3ZWVwKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2Jq
ZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0g
YmxvY2tTbmFwc2hvdDsKICAgICBtX2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAg
c2NoZWR1bGVUaW1lcigpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5j
cmVtZW50YWxTd2VlcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywyMyArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhlYXA7CiAKLXN0cnVjdCBD
b3B5RnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIENvcHlG
dW5jdG9yKFZlY3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja3MpIAotICAgICAgICA6IG1faW5kZXgo
MCkgCi0gICAgICAgICwgbV9ibG9ja3MoYmxvY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKSB7IG1fYmxvY2tzW21faW5kZXgrK10gPSBi
bG9jazsgfQotCi0gICAgc2l6ZV90IG1faW5kZXg7Ci0gICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4m
IG1fYmxvY2tzOwotfTsKLQogY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGljIEhlYXBU
aW1lciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEluY3JlbWVudGFsU3dlZXBlciogY3JlYXRlKEhl
YXAqKTsKLSAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoY29uc3QgSGFzaFNldDxNYXJrZWRCbG9jayo+
JiBibG9ja1NuYXBzaG90KTsKKyAgICB2b2lkIHN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJs
b2NrKj4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZG9Xb3JrKCk7CiAgICAgdm9pZCBzd2VlcE5leHRC
bG9jaygpOwogICAgIHZvaWQgd2lsbEZpbmlzaFN3ZWVwaW5nKCk7CkBAIC03MSw3ICs1OCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjYW5jZWxUaW1lcigpOwogICAgIAogICAgIHVuc2lnbmVkIG1f
Y3VycmVudEJsb2NrVG9Td2VlcEluZGV4OwotICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+IG1fYmxv
Y2tzVG9Td2VlcDsKKyAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3NUb1N3ZWVwOwog
I2Vsc2UKICAgICAKICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIoSlNHbG9iYWxEYXRhKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAx
MzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6c2V0dXAoKQog
ICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9nbG9iYWxEYXRhLT5o
YXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KCk7CiAgICAgbV9zaG91bGRIYXNoQ29uc3Qg
PSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2tbaV0tPm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3Q7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fZ2NUaHJlYWRzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3NoYXJlZC5tX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+
bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNlbmRpZgog
fQogCkBAIC0xMTIsOCArMTEyLDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFy
YWxsZWwoKQogICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBp
ZGxlIHNvb24sIGFuZCBkb25hdGUuCiAgICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3No
YXJlZC5tX3NoYXJlZE1hcmtTdGFjayk7CiAKLSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpCi0gICAg
ICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICBpZiAobV9z
aGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkpIHsKKyAgICAgICAgbV9zaGFyZWQuZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJl
YWRzKE1hcmspOworICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uc2lnbmFsKCk7
CisgICAgfQogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCkBAIC0xODEsOCArMTgzLDYg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0
ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2
ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gZ2l2ZSB0aGVpciBwcml2YXRlIENvcGllZEJs
b2NrcyBiYWNrCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25k
aXRpb24uYnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xOTYsMjEgKzE5Niwx
NiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xh
dmVEcmFpbik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRGlkIHdlIGRl
dGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCi0gICAgICAgICAg
ICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAg
bV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkgJiYgIW1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtl
cnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZG9uZUNvcHlpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQu
bV9tYXJraW5nQ29uZGl0aW9uLndhaXQobV9zaGFyZWQubV9tYXJraW5nTG9jayk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgdGhlIGVuZCBvZiB0aGlzIGxpdHRs
ZSBiaXQgb2Ygd29yaywgc28gbm90aWZ5IHRoZSBtYXN0ZXIgdGhyZWFkLgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uc2lnbmFs
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhlIFZNIGV4aXRpbmc/IElmIHNv
LCBleGl0IHRoaXMgdGhyZWFkLgotICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFs
bGVsTWFya2Vyc1Nob3VsZEV4aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9uZUNvcHlpbmco
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgIHNpemVfdCBpZGxlVGhyZWFkQ291
bnQgPSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpIC0gbV9zaGFyZWQubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VyczsKQEAgLTIzNiwzMCArMjMxLDYgQEAgdm9pZCBTbG90VmlzaXRv
cjo6bWVyZ2VPcGFxdWVSb290cygpCiAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpzdGFydENvcHlpbmcoKQotewotICAgIEFTU0VSVCghbV9jb3BpZWRB
bGxvY2F0b3IuaXNWYWxpZCgpKTsKLX0KLQotdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3
U3BhY2VTbG93KHNpemVfdCBieXRlcykKLXsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5k
b25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwot
ICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3NoYXJlZC5tX2NvcGllZFNw
YWNlLT5hbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkpOwotCi0gICAgdm9pZCogcmVzdWx0
ID0gMDsKLSAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3Iu
dHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFj
ZU9yUGluKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQotewotICAgIGlmICghY2hlY2tJZlNob3Vs
ZENvcHlBbmRQaW5PdGhlcndpc2UocHRyLCBieXRlcykpCi0gICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIHJldHVybiBhbGxvY2F0ZU5ld1NwYWNlKGJ5dGVzKTsKLX0KLQogQUxXQVlTX0lOTElO
RSBib29sIEpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKCkKIHsKICNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCkBAIC0zMzUsMzYgKzMwNiw2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6aW50ZXJuYWwKICAgICBpbnRlcm5hbEFwcGVuZChjZWxsKTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcHRyLCBzaXplX3QgYnl0ZXMsIEpTVmFsdWUqIHZh
bHVlcywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7Ci0gICAg
dm9pZCogbmV3UHRyID0gYWxsb2NhdGVOZXdTcGFjZU9yUGluKG9sZFB0ciwgYnl0ZXMpOwotICAg
IGlmIChuZXdQdHIpIHsKLSAgICAgICAgc2l6ZV90IGpzVmFsdWVzT2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihyZWludGVycHJldF9jYXN0PGNoYXIqPih2YWx1ZXMpIC0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG9sZFB0cikpOwotCi0gICAgICAgIEpTVmFsdWUqIG5ld1ZhbHVlcyA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPEpTVmFsdWUqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3UHRyKSArIGpzVmFs
dWVzT2Zmc2V0KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpXTsKLSAgICAgICAgICAg
IG5ld1ZhbHVlc1tpXSA9IHZhbHVlOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludGVybmFsQXBwZW5kKCZuZXdWYWx1ZXNb
aV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5KG5ld1B0ciwgb2xkUHRyLCBqc1ZhbHVl
c09mZnNldCk7Ci0gICAgICAgICpwdHIgPSBuZXdQdHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFw
cGVuZCh2YWx1ZXMsIGxlbmd0aCk7Ci19Ci0gICAgCi12b2lkIFNsb3RWaXNpdG9yOjpkb25lQ29w
eWluZygpCi17Ci0gICAgaWYgKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2so
bV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7Ci19Ci0KIHZvaWQgU2xvdFZp
c2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCiB7CiAgICAgZm9yIChXZWFrUmVmZXJlbmNl
SGFydmVzdGVyKiBjdXJyZW50ID0gbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgU2xvdFZpc2l0b3JfaAogI2RlZmluZSBTbG90VmlzaXRv
cl9oCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgi
CiAjaW5jbHVkZSAiTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIgogCkBAIC04MCwyMSArNzksOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZp
bmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKIAotICAgIHZvaWQgc3RhcnRDb3B5aW5n
KCk7CisgICAgdm9pZCBjb3B5TGF0ZXIodm9pZCosIHNpemVfdCk7CiAgICAgCi0gICAgLy8gSGln
aC1sZXZlbCBBUEkgZm9yIGNvcHlpbmcsIGFwcHJvcHJpYXRlIGZvciBjYXNlcyB3aGVyZSB0aGUg
b2JqZWN0J3MgaGVhcCByZWZlcmVuY2VzCi0gICAgLy8gZmFsbCBpbnRvIGEgY29udGlndW91cyBy
ZWdpb24gb2YgdGhlIHN0b3JhZ2UgY2h1bmsgYW5kIGlmIHRoZSBvYmplY3QgZm9yIHdoaWNoIHlv
dSdyZQotICAgIC8vIGRvaW5nIGNvcHlpbmcgZG9lcyBub3Qgb2NjdXIgZnJlcXVlbnRseS4KLSAg
ICB2b2lkIGNvcHlBbmRBcHBlbmQodm9pZCoqLCBzaXplX3QsIEpTVmFsdWUqLCB1bnNpZ25lZCk7
Ci0gICAgCi0gICAgLy8gTG93LWxldmVsIEFQSSBmb3IgY29weWluZywgYXBwcm9wcmlhdGUgZm9y
IGNhc2VzIHdoZXJlIHRoZSBvYmplY3QncyBoZWFwIHJlZmVyZW5jZXMKLSAgICAvLyBhcmUgZGlz
Y29udGlndW91cyBvciBpZiB0aGUgb2JqZWN0IG9jY3VycyBmcmVxdWVudGx5IGVub3VnaCB0aGF0
IHlvdSBuZWVkIHRvIGZvY3VzIG9uCi0gICAgLy8gcGVyZm9ybWFuY2UuIFVzZSB0aGlzIHdpdGgg
Y2FyZSBhcyBpdCBpcyBlYXN5IHRvIHNob290IHlvdXJzZWxmIGluIHRoZSBmb290LgotICAgIGJv
b2wgY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2Uodm9pZCogb2xkUHRyLCBzaXplX3Qp
OwotICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90KTsKLSAgICAKLSAgICB2b2lkIGRv
bmVDb3B5aW5nKCk7IAotICAgICAgICAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5H
KQogICAgIFZUYWJsZVNwZWN0cnVtIG1fdmlzaXRlZFR5cGVDb3VudHM7CiAjZW5kaWYKQEAgLTEy
NSw5ICsxMTEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNz
YXJ5KCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CiAgICAgCi0g
ICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZU9yUGluKHZvaWQqLCBzaXplX3QpOwotICAgIHZvaWQq
IGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7Ci0KICAgICB2b2lkIGRvbmF0ZUtub3duUGFy
YWxsZWwoKTsKIAogICAgIE1hcmtTdGFja0FycmF5IG1fc3RhY2s7CkBAIC0xNDYsOCArMTI5LDYg
QEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xvZ0NoaWxkQ291bnQ7CiAjZW5kaWYKIAotICAg
IENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsKLQogcHVibGljOgogI2lmICFBU1NF
UlRfRElTQUJMRUQKICAgICBib29sIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRo
b2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsMzAgKzEzNiw2IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3QK
ICAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7CiB9CiAgICAgCi1BTFdBWVNfSU5MSU5FIGJvb2wgU2xv
dFZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHZvaWQqIG9sZFB0ciwg
c2l6ZV90IGJ5dGVzKQotewotICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykp
IHsKLSAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKENvcGllZFNwYWNlOjpvdmVy
c2l6ZUJsb2NrRm9yKG9sZFB0cikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmlzUGlubmVkKG9sZFB0cikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZShzaXplX3QgYnl0ZXMpCi17Ci0g
ICAgdm9pZCogcmVzdWx0ID0gMDsgLy8gQ29tcGlsZXJzIGRvbid0IHJlYWxpemUgdGhhdCB0aGlz
IHdpbGwgYmUgYXNzaWduZWQuCi0gICAgaWYgKExJS0VMWShtX2NvcGllZEFsbG9jYXRvci50cnlB
bGxvY2F0ZShieXRlcywgJnJlc3VsdCkpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAot
ICAgIHJlc3VsdCA9IGFsbG9jYXRlTmV3U3BhY2VTbG93KGJ5dGVzKTsKLSAgICBBU1NFUlQocmVz
dWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfSAgICAgICAKLQogaW5saW5lIHZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZSgpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CkBAIC0x
NzUsNiArMTUxLDIzIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigK
ICAgICBkcmFpbigpOwogfQogCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6Y29weUxhdGVyKHZv
aWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShieXRlcykpIHsKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKENvcGllZFNw
YWNlOjpvdmVyc2l6ZUJsb2NrRm9yKHB0cikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAg
aWYgKGJsb2NrLT5pc1Bpbm5lZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBibG9jay0+cmVw
b3J0TGl2ZUJ5dGVzKGJ5dGVzKTsKKworICAgIGlmICghYmxvY2stPnNob3VsZEV2YWN1YXRlKCkp
CisgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihibG9jayk7Cit9CisgICAgCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkocmV2aXNp
b24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0dsb2JhbERhdGE7Ci1jbGFzcyBTbG90VmlzaXRvcjsKK2NsYXNzIENvcHlWaXNpdG9yOwog
c3RydWN0IEFycmF5U3RvcmFnZTsKIAogY2xhc3MgQnV0dGVyZmx5IHsKQEAgLTY0LDcgKzY0LDcg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0YSYs
IHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5k
ZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKICAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXpl
ZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5p
dGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5
LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICAKICAgICBJbmRleGluZ0hlYWRlciog
aW5kZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQog
ICAgIGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJu
IEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxp
bmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlICJB
cnJheVN0b3JhZ2UuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHkuaCIKICNpbmNsdWRlICJDb3BpZWRT
cGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTksNyArNTksNyBAQCBpbmxpbmUgQnV0
dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShKU0dsCiAgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxE
YXRhLCAwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCksIGhhc0luZGV4aW5nSGVhZGVy
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpLCBJbmRleGluZ0hlYWRlcigpLCAwKTsKIH0KIAot
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbihTbG90VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3Qg
cHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKQoraW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYgdmlzaXRvciwgc2l6ZV90
IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKQogewogICAgIEJ1dHRlcmZs
eSogcmVzdWx0ID0gZnJvbUJhc2UoCiAgICAgICAgIHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0
b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIHZvaWQgKCpWaXNpdENoaWxk
cmVuRnVuY3Rpb25QdHIpKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgICAgIFZpc2l0Q2hp
bGRyZW5GdW5jdGlvblB0ciB2aXNpdENoaWxkcmVuOwogCisgICAgICAgIHR5cGVkZWYgdm9pZCAo
KkNvcHlCYWNraW5nU3RvcmVGdW5jdGlvblB0cikoSlNDZWxsKiwgQ29weVZpc2l0b3ImKTsKKyAg
ICAgICAgQ29weUJhY2tpbmdTdG9yZUZ1bmN0aW9uUHRyIGNvcHlCYWNraW5nU3RvcmU7CisKICAg
ICAgICAgdHlwZWRlZiBDYWxsVHlwZSAoKkdldENhbGxEYXRhRnVuY3Rpb25QdHIpKEpTQ2VsbCos
IENhbGxEYXRhJik7CiAgICAgICAgIEdldENhbGxEYXRhRnVuY3Rpb25QdHIgZ2V0Q2FsbERhdGE7
CiAKQEAgLTExNiw2ICsxMTksNyBAQCBzdHJ1Y3QgTWVtYmVyQ2hlY2sjI21lbWJlciB7IFwKICNk
ZWZpbmUgQ1JFQVRFX01FVEhPRF9UQUJMRShDbGFzc05hbWUpIHsgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpkZXN0cm95LCBcCiAgICAgICAgICZDbGFzc05hbWU6OnZpc2l0Q2hpbGRyZW4sIFwKKyAg
ICAgICAgJkNsYXNzTmFtZTo6Y29weUJhY2tpbmdTdG9yZSwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRDYWxsRGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRDb25zdHJ1Y3REYXRhLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OnB1dCwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMCBA
QCB2b2lkIEpTQ2VsbDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAgICAgY2VsbC0+SlNDZWxsOjp+
SlNDZWxsKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENv
cHlWaXNpdG9yJikKK3sKK30KKwogYm9vbCBKU0NlbGw6OmdldFN0cmluZyhFeGVjU3RhdGUqIGV4
ZWMsIFN0cmluZyYgc3RyaW5nVmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N0cmluZygpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDEzMDY0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgQ29w
eVZpc2l0b3I7CiAgICAgY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiAgICAgY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMTEyLDYg
KzExMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09i
amVjdCogdG9PYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKIAogICAg
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlND
ZWxsKiwgQ29weVZpc2l0b3ImKTsKIAogICAgICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0
aCB0aGUgdG9PYmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgogICAgICAgICBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKQEAgLTk0LDEwICs5NSwxMCBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgfQogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9y
LCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQorQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0Ojpjb3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQogewogICAgIEFTU0VSVChidXR0
ZXJmbHkpOwotICAgIAorCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUoKTsKICAgICAKICAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKQEAgLTExMSw1MSArMTEyLDY2IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAg
ICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBh
Y2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgKLSAgICAgICAgcHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndp
c2UoCi0gICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbih2aXNp
dG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE1hcmsgYW5k
IGNvcHkgdGhlIHByb3BlcnRpZXMuCisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRl
cmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAgaWYgKHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oCisg
ICAgICAgICAgICB2aXNpdG9yLCBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5k
ZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKwogICAgICAgICBQcm9w
ZXJ0eVN0b3JhZ2UgY3VycmVudFRhcmdldCA9IG5ld0J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdl
KCk7CiAgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBzdG9yYWdlU2l6
ZTsgY291bnQtLTspIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoLS1jdXJyZW50U291
cmNlKS0+Z2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7CiAgICAgICAgICAgICAoLS1jdXJy
ZW50VGFyZ2V0KS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKICAgICAg
ICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgIHN3aXRjaCAoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogewogICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPmNvcHlIZWFkZXJGcm9tRHVyaW5nR0MoKmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkp
OwogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFRhcmdldCA9
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yOwogICAgICAgICAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsrKS0+
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJm5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpOyBjb3VudC0tOykKKyAgICAgICAgICAgICAgICAgICAgKGN1
cnJlbnRUYXJnZXQrKyktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKGN1cnJlbnRTb3VyY2UrKykt
PmdldCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CiAgICAg
ICAgIG1fYnV0dGVyZmx5ID0gbmV3QnV0dGVyZmx5OworICAgIH0KK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0
dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAgICBBU1NFUlQoYnV0
dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVy
ZSgpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpT
Qzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgaWYg
KFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1
dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAg
ICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVy
KCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdl
U2l6ZSk7Ci0gICAgICAgIAorICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKKyAgICB9CisgICAgc2l6ZV90IGNhcGFjaXR5SW5C
eXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5
LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCisgICAg
Ly8gTWFyayB0aGUgcHJvcGVydGllcy4KKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJm
bHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICB2
aXNpdG9yLmNvcHlMYXRlcihidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2Fw
YWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOworCisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5n
SGVhZGVyKSkgewogICAgICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAg
ICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CkBAIC0xODksNiArMjA1LDE2IEBAIHZv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICNlbmRpZgogfQogCit2b2lk
IEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
OworCisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsK
KyAgICBpZiAoYnV0dGVyZmx5KQorICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZp
c2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUo
KSk7Cit9CisKIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTRmluYWxPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAg
ICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImKTsKIAogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVj
dCopOwogCkBAIC01OTEsNiArNTkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
cmVzZXRJbmhlcml0b3JJRChKU0dsb2JhbERhdGEmKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNp
emUpOworICAgICAgICB2b2lkIGNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkq
LCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgICAgIC8vIENhbGwgdGhpcyBpZiB5b3Uga25v
dyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheQogICAgICAg
ICAvLyBzdG9yYWdlLiBUaGlzIHdpbGwgYXNzZXJ0IG90aGVyd2lzZS4KQEAgLTg1NCwxNCArODU2
LDE0IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb24KICAgICByZXR1
cm4gc3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpOwogfQogCi1pbmxpbmUgYm9vbCBKU0Nl
bGw6OmluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyogaW5mbykgY29uc3QKK2lubGluZSBjb25zdCBN
ZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNs
YXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoaW5mbyk7CisgICAgcmV0dXJuICZjbGFzc0luZm8oKS0+
bWV0aG9kVGFibGU7CiB9CiAKLWlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRo
b2RUYWJsZSgpIGNvbnN0CitpbmxpbmUgYm9vbCBKU0NlbGw6OmluaGVyaXRzKGNvbnN0IENsYXNz
SW5mbyogaW5mbykgY29uc3QKIHsKLSAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZTsKKyAgICByZXR1cm4gY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihpbmZvKTsKIH0KIAogLy8g
dGhpcyBtZXRob2QgaXMgaGVyZSB0byBiZSBhZnRlciB0aGUgaW5saW5lIGRlY2xhcmF0aW9uIG9m
IEpTQ2VsbDo6aW5oZXJpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHYodW5zaWduZWQsIGdjTWFya1N0YWNrU2VnbWVudFNpemUsIHBhZ2VTaXplKCkp
IFwKICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkdDTWFya2VycywgY29tcHV0ZU51bWJlck9mR0NN
YXJrZXJzKDcpKSBcCiAgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAx
MDAwKSBcCisgICAgdihkb3VibGUsIG1heENvcGllZFNwYWNlRnJhZ21lbnRhdGlvbiwgMC44KSBc
CisgICAgdihkb3VibGUsIG1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbiwgMC45KSBcCiAgICAg
XAogICAgIHYoYm9vbCwgZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKICAgICB2KHVuc2ln
bmVkLCBmb3JjZWRXZWFrUmFuZG9tU2VlZCwgMCkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167831</attachid>
            <date>2012-10-09 13:03:29 -0700</date>
            <delta_ts>2012-10-09 13:23:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121009130232.patch</filename>
            <type>text/plain</type>
            <size>83629</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIGRvaW5nIAorICAgICAgICBzb21lIHNldCBvZiBHQyB0YXNrcy4gQ3VycmVudGx5LCB0
aGF0IHNldCBvZiB0YXNrcyBpbmNsdWRlcyBNYXJrLCBDb3B5LCBTeW5jaHJvbml6ZSwgYW5kIEV4
aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBoYXMgYW4gaW5kaXZpZHVhbCBxdWV1ZSBvZiB0YXNr
cyB3aGljaCBpdCBwb2xscyBmcm9tIGFuZCBleGVjdXRlcyBpbiBvcmRlci4gQW55IHRocmVhZCBj
YW4gaXNzdWUgYW55IG90aGVyIAorICAgICAgICB0aHJlYWQgYSBuZXcgdGFzay4gRm9yIGV4YW1w
bGUsIHdoZW4gYSB0aHJlYWQgdGhhdCBpcyBkb2luZyBtYXJraW5nIHJlYWxpemVzIGl0IG1pZ2h0
IGJlIHByb2ZpdGFibGUgZm9yIAorICAgICAgICBvdGhlciB0aHJlYWRzIHRvIHdha2UgdXAgYW5k
IHN0YXJ0IGRvaW5nIG1hcmtpbmcsIGl0IHdpbGwgaXNzdWUgYSB0YXNrIHRvIHRoZW0uCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjp0aHJlYWRJRCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpp
bml0aWFsaXplVGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6c2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6Y29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpH
Q1RocmVhZDo6c3luY2hyb25pemVXaXRoKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OndhaXRG
b3JOZXh0VGFzayk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMpOgorICAgICAgICAqIGhlYXAv
R0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWQpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZDo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcDogVGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBub3cgaGFzIGEgbGlz
dCBvZiBHQ1RocmVhZCBvYmplY3RzIHJhdGhlciB0aGFuIHJhdyAKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllcnMuCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Y2hpbGRWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
R0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMpOiBUaGlzIGZ1
bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyB0YXNrcyAKKyAgICAgICAgdG8g
dGhlIHdvcmtlciB0aHJlYWRzIHRoYXQgdGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBvYmplY3RzIGtu
b3dzIGFib3V0LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6R0NUaHJl
YWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcpOiBDYWxsYmFjayB0byBsZXQgdGhlIEdDVGhy
ZWFkU2hhcmVkRGF0YSBrbm93IHRoYXQgbWFya2luZyBoYXMgCisgICAgICAgIHN0YXJ0ZWQuCisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRv
IGZvciBmaW5pc2hpbmcgbWFya2luZy4gV2UgZG9uJ3QgbmVlZCB0byB3YWl0IG9uIHRoZSBvdGhl
ciAKKyAgICAgICAgbWFya2luZyB0aHJlYWRzIHRvIGZpbmlzaCB1bmxlc3Mgd2Ugd2FudCBhY2N1
cmF0ZSBvYmplY3QgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmtpbmcgcGhhc2UuCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nKTogRGl0dG8gZm9y
IHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmluaXNoaW5nIGNvcHlpbmcuIEFn
YWluLCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgb24gdGhlIAorICAgICAgICBvdGhlciB0aHJlYWRz
IHRvIGZpbmlzaCBjb3B5aW5nIGJlY2F1c2Ugd2UgY2FuIHJlbHkgb24gQ29waWVkU3BhY2U6OmRv
bmVDb3B5aW5nIHRvIHdhaXQgdW50aWwgY29weWluZyBpcyAKKyAgICAgICAgZmluaXNoZWQuCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChHQ1RocmVhZFNoYXJlZERhdGEpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERh
dGE6OmdldE5leHRCbG9ja3NUb0NvcHkpOiBBdG9taWNhbGx5IGdldHMgdGhlIG5leHQgY2h1bmsg
b2Ygd29yayBmb3IgYSBjb3B5aW5nIHRocmVhZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3Rz
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KTogUmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvcHlpbmcgcGhhc2UsIG5vdGlmeWlu
ZyB0aGUgY29weWluZyB0aHJlYWRzLCAKKyAgICAgICAgYW5kIGRvaW5nIGFueSBjb3B5aW5nIHdv
cmsgaWYgbmVjZXNzYXJ5LgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6Q29weUZ1bmN0b3I6OkNvcHlGdW5jdG9yKToKKyAgICAgICAgKENvcHlGdW5jdG9yKToK
KyAgICAgICAgKEpTQzo6Q29weUZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcDogQ2hhbmdlZCB0aGUgaW5jcmVtZW50YWwgc3dlZXBlciB0
byBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IG9mIE1hcmtlZEJsb2NrcyAKKyAgICAgICAg
dGhhdCBuZWVkIHN3ZWVwaW5nLCBzaW5jZSB0aGlzIG5vdyByZXNpZGVzIGluIHRoZSBIZWFwIHNv
IHRoYXQgaXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgYnkgdGhlIEdDVGhyZWFkcy4KKyAgICAgICAg
KEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAo
SlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OnNldHVwKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZUtub3duUGFyYWxsZWwpOiBOb3cgdXNlcyB0aGUgZGlzcGF0Y2ggbWVjaGFuaXNtIGluIEdDVGhy
ZWFkU2hhcmVkRGF0YSBmb3IgdGVsbGluZyAKKyAgICAgICAgdGhlIEdDVGhyZWFkcyB0byB3YWtl
IHVwIGFuZCBzdGFydCBtYXJraW5nLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29weUxhdGVyKTogTm90aWZpZXMgdGhlIENvcGllZEJsb2NrIHRoYXQgdGhlcmUgYXJlIHNvbWUg
bGl2ZSBieXRlcyB0aGF0IG1heSBuZWVkIAorICAgICAgICB0byBiZSBjb3BpZWQuCisgICAgICAg
ICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChCdXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKTog
VXNlcyB0aGUgbmV3IENvcHlWaXNpdG9yLgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6
CisgICAgICAgIChNZXRob2RUYWJsZSk6IEFkZGVkIG5ldyAidmlydHVhbCIgZnVuY3Rpb24gY29w
eUJhY2tpbmdTdG9yZSB0byBtZXRob2QgdGFibGUuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90aGluZy4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29weUJ1dHRlcmZseSk6IERvZXMgdGhlIGFjdHVhbCBjb3B5aW5nIG9m
IHRoZSBidXR0ZXJmbHkuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkpOiBDYWxscyBjb3B5TGF0ZXIgZm9yIHRoZSBidXR0ZXJmbHkuCisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTogCisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1ldGhvZFRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmhlcml0cyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6IEFkZGVkIHR3byBuZXcgY29uc3RhbnRzLCBtYXhIZWFwRnJh
Z21lbnRhdGlvbiBhbmQgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAKKyAgICAgICAgdG8g
Z292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUgZG9pbmcg
Y29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMDkgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWZ0ZXIgcjEzMDM0NCwgT3BhcXVlSlNTdHJp
bmc6OmlkZW50aWZpZXIoKSBhZGRzIHdyYXBwZWQgU3RyaW5nIHRvIGlkZW50aWZpZXIgdGFibGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMDY0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDggKzEwNiwxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgaGVh
cC9CbG9ja0FsbG9jYXRvci5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAorICAgIGhlYXAv
Q29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFw
L0RGR0NvZGVCbG9ja3MuY3BwCisgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhy
ZWFkU2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDkgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCBcCisgICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ2FyZFNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmggXApAQCAtMjc4LDYgKzI4MSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmggXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAgXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAgXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggXAogICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTdGF0aXN0aWNzLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAgXAogICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvV2Vha1NldC5jcHAg
XApAQCAtODEsNiArODIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cCBcCiAgICAgaGVhcC9CbG9ja0FsbG9jYXRvci5jcHAgXAogICAgIGhlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmNwcCBcCisgICAgaGVhcC9HQ1RocmVhZC5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzM4LDYgKzIzMzgsMTggQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcQ29weVZpc2l0b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxERkdD
b2RlQmxvY2tzLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNDM0LDYgKzI0NDYsMTQgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVh
cFxHQ1RocmVhZC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcR0NUaHJlYWQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiwxMSBA
QAogCQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRFMTVE
RDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovOyB9OwogCQlDMjExMjJF
MjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERjE1REQ5QUIzMDA3OTBFM0Eg
LyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIx
RjcxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBD
b3B5VmlzaXRvci5jcHAgKi87IH07CisJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5
VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjkxNjFGOTlFMDAwMjM2
OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlW
aXNpdG9ySW5saW5lTWV0aG9kcy5oICovOyB9OworCQlDMjEzMjFGQTE2MUY5OUUwMDAyMzY5RUQg
LyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLzsgfTsKKwkJ
QzIxMzIxRkIxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjEzMjFGNjE2MUY5OUUwMDAyMzY5RUQgLyog
R0NUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4
NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi87IH07CiAJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ4Niw2ICsxNDkxLDExIEBACiAJ
CUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8q
IEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIy
RTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMjE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMzE2MUY5OUUwMDAy
MzY5RUQgLyogQ29weVZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29weVZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjQxNjFG
OTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8q
IEdDVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAv
KiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
bG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRC
NDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE5LDYgKzE4MjksMTEgQEAKIAkJMTQyRTMxMkEx
MzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5j
cHAgKi8sCisJCQkJQzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi8s
CisJCQkJQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9k
cy5oICovLAorCQkJCUMyMTMyMUY1MTYxRjk5RTAwMDIzNjlFRCAvKiBHQ1RocmVhZC5jcHAgKi8s
CisJCQkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzI0
RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKIAkJCQlDMjRE
MzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMjI1NDk0
MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtMjU3OCw2ICsyNTkz
LDggQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMTMyMUY4MTYxRjk5RTAwMDIz
NjlFRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMzIxRkIxNjFGOTlF
MDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNE
Njk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdG
Njg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2OCw2ICsyOTg1LDcgQEAKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
MjEzMjFGOTE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTM1NzQsNiArMzU5Miw4IEBACiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFG
QjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNEQz
MUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDMjEzMjFGNzE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQzIxMzIxRkExNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5o
CShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSGVhcEJs
b2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSw2ICs0MywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IENvcGllZEJsb2NrKiBjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAg
c3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCYpOwogCisgICAgYm9vbCBpc1Bpbm5lZCgpOworCisgICAgdW5zaWduZWQgbGl2ZUJ5
dGVzKCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXModW5zaWduZWQpOworICAgIHZvaWQgZGlk
U3Vydml2ZUdDKCk7CisgICAgYm9vbCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKKyAgICBi
b29sIHNob3VsZEV2YWN1YXRlKCk7CisgICAgYm9vbCBjYW5CZVJlY3ljbGVkKCk7CisKICAgICAv
LyBUaGUgcGF5bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBm
b3IgYWxsb2NhdGlvbnMuCiAgICAgY2hhciogcGF5bG9hZCgpOwogICAgIGNoYXIqIHBheWxvYWRF
bmQoKTsKQEAgLTY2LDYgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX3JlbWFpbmlu
ZzsKICAgICB1aW50cHRyX3QgbV9pc1Bpbm5lZDsKKyAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsK
IH07CiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwo
Y29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uKQpAQCAtOTYsMTAgKzEwOCw2
MCBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKGNvbnN0IFBhCiAgICAgOiBIZWFw
QmxvY2s8Q29waWVkQmxvY2s+KGFsbG9jYXRpb24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2Fk
Q2FwYWNpdHkoKSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBtX2xpdmVCeXRlcygw
KQogewogICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPiht
X3JlbWFpbmluZykpKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVC
eXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICB1bnNpZ25lZCBvbGRWYWx1ZSA9IDA7CisgICAg
dW5zaWduZWQgbmV3VmFsdWUgPSAwOworICAgIGRvIHsKKyAgICAgICAgb2xkVmFsdWUgPSBtX2xp
dmVCeXRlczsKKyAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIGJ5dGVzOworICAgIH0gd2hp
bGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmbV9saXZlQnl0ZXMsIG9sZFZhbHVlLCBuZXdW
YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKK3sK
KyAgICBtX2xpdmVCeXRlcyA9IDA7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCitpbmxp
bmUgYm9vbCBDb3BpZWRCbG9jazo6ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sK
KyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPj0gYnl0ZXMpOworICAgIHVuc2lnbmVkIG9sZFZhbHVl
ID0gMDsKKyAgICB1bnNpZ25lZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8geworICAgICAgICBvbGRW
YWx1ZSA9IG1fbGl2ZUJ5dGVzOworICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gYnl0ZXM7
CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2xpdmVCeXRlcywgb2xk
VmFsdWUsIG5ld1ZhbHVlKSk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDwgb2xkVmFsdWUpOwor
ICAgIHJldHVybiAhbmV3VmFsdWU7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5C
ZVJlY3ljbGVkKCkKK3sKKyAgICByZXR1cm4gIW1fbGl2ZUJ5dGVzOworfQorCitpbmxpbmUgYm9v
bCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3VhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fbGl2ZUJ5dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4ocGF5bG9hZENhcGFj
aXR5KCkpIDw9IE9wdGlvbnM6Om1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbigpOworfQorCitp
bmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQoKQoreworICAgIHJldHVybiBtX2lzUGlu
bmVkOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29waWVkQmxvY2s6OmxpdmVCeXRlcygpCit7Cisg
ICAgcmV0dXJuIG1fbGl2ZUJ5dGVzOworfQorCiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBh
eWxvYWQoKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgo
c2l6ZW9mKENvcGllZEJsb2NrKSArIDcpICYgfjcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0zNiw2ICszNyw3IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShI
ZWFwKiBoZWFwKQogICAgICwgbV90b1NwYWNlKDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQogICAg
ICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFs
c2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCiB7CiAgICAgbV90b1NwYWNlTG9j
ay5Jbml0KCk7CkBAIC0xNTIsMTUgKzE1NCwxOCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFj
ZTo6dHJ5UmVhbGxvY2F0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQordm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayogYmxvY2ssIENvcGllZEJsb2NrKiogZXhjaGFu
Z2UpCiB7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOwogICAgIAorICAgIGlmIChleGNo
YW5nZSkKKyAgICAgICAgKmV4Y2hhbmdlID0gYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgp
OworCiAgICAgaWYgKCFibG9jaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFibG9jay0+
ZGF0YVNpemUoKSkgewotICAgICAgICByZWN5Y2xlQmxvY2soYmxvY2spOworICAgICAgICByZWN5
Y2xlQm9ycm93ZWRCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4
Miw2ICsxODcsMzggQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQog
ICAgIH0KIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIHN0
ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKKworICAgIG1fYmxvY2tGaWx0ZXIucmVz
ZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOworCisgICAgQ29waWVk
QmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgc2l6
ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
bV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0
ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9j
ay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAgICAgICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2so
YmxvY2spOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdG90YWxM
aXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOworICAgICAgICB0b3RhbFVzYWJsZUJ5dGVz
ICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2Vk
U3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJs
ZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNw
YWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMp
OworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9u
czo6bWF4Q29waWVkU3BhY2VGcmFnbWVudGF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29w
eVBoYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFz
ZSk7CisgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVy
T2ZMb2FuZWRCbG9ja3MpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB2b2lk
IENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiB7CiAgICAgewpAQCAtMTkwLDEyICsyMjcsMTMg
QEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICAgICAgbV9sb2FuZWRC
bG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwogICAgIH0KIAotICAgIEFT
U0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBt
X3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CisKICAg
ICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5t
X2lzUGlubmVkKSB7Ci0gICAgICAgICAgICBibG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOworICAg
ICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAg
ICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0
IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92
ZWQuCiAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAg
ICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwpAQCAtMjEwLDEzICsyNDgsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQog
ICAgIENvcGllZEJsb2NrKiBjdXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7CiAgICAgd2hp
bGUgKGN1cnIpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5lZCkgeworICAgICAgICBpZiAoIWN1cnItPmlzUGlu
bmVkKCkpIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGN1cnIpOwogICAg
ICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoY3Vycik7CiAgICAgICAgICAgICBDb3BpZWRCbG9j
azo6ZGVzdHJveShjdXJyKS5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGN1cnIpKTsKLSAg
ICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnItPmRp
ZFN1cnZpdmVHQygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBuZXh0OwogICAgIH0KQEAg
LTIyNSw2ICsyNjMsOCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAg
IGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCiAgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJl
bnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0g
ZmFsc2U7CiB9CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3Bp
ZWRTcGFjZSB7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFz
cyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVibGljOgpAQCAtNzQsNiAr
NzUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKKyAgICBib29sIHNob3VsZERvQ29weVBoYXNlKCkgeyBy
ZXR1cm4gbV9zaG91bGREb0NvcHlQaGFzZTsgfQogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBi
bG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFs
bG9jYXRlQmxvY2soKTsKICAgICBDb3BpZWRCbG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQ
aGFzZSgpOwogCi0gICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKik7Ci0gICAg
dm9pZCByZWN5Y2xlQmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICB2b2lkIGRvbmVGaWxsaW5nQmxv
Y2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKKyAgICB2b2lkIHJlY3ljbGVFdmFjdWF0
ZWRCbG9jayhDb3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2soQ29w
aWVkQmxvY2sqKTsKIAogICAgIEhlYXAqIG1faGVhcDsKIApAQCAtMTA4LDYgKzExMSw3IEBAIHBy
aXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9vdmVyc2l6ZUJsb2Nr
czsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKKyAgICBib29sIG1fc2hvdWxkRG9D
b3B5UGhhc2U7CiAKICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENv
bmRpdGlvbiBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIwIEBAIGlubGluZSB2b2lk
IENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAot
aW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENv
cGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewot
ICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKLQotICAgIG1fYmxvY2tGaWx0
ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAg
QVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRC
bG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAgIEFTU0VSVChibG9jayk7
CisgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOworICAgIEFTU0VSVCghYmxvY2st
Pm1faXNQaW5uZWQpOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3Rv
U3BhY2VMb2NrKTsKKyAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICBt
X2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICB9CisgICAgbV9oZWFwLT5ibG9ja0FsbG9j
YXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KIAotaW5s
aW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCitp
bmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sq
IGJsb2NrKQogewogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGll
ZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIK
KworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkdDVGhy
ZWFkU2hhcmVkRGF0YS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworQ29w
eVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQorICAgIDog
bV9zaGFyZWQoc2hhcmVkKQoreworfQorCit2b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJl
ZCgpCit7CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIFZlY3Rv
cjxNYXJrZWRCbG9jayo+JiBibG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5tX2Jsb2Nrc1RvQ29weTsK
KyAgICBzaXplX3Qgc3RhcnRJbmRleCwgZW5kSW5kZXg7CisKKyAgICBtX3NoYXJlZC5nZXROZXh0
QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3aGlsZSAoc3RhcnRJbmRl
eCA8IGVuZEluZGV4KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kSW5kZXg7IGkrKykKKyAgICAgICAgICAgIGJsb2Nrc1RvQ29weVtpXS0+Zm9yRWFjaExpdmVD
ZWxsKGZ1bmN0b3IpOworICAgICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0
SW5kZXgsIGVuZEluZGV4KTsKKyAgICB9CisgICAgQVNTRVJUKHN0YXJ0SW5kZXggPT0gZW5kSW5k
ZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JfaAorCisj
aW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDVGhy
ZWFkU2hhcmVkRGF0YTsKKworY2xhc3MgQ29weVZpc2l0b3IgeworcHVibGljOgorICAgIENvcHlW
aXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOworCisgICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgp
OworCisgICAgdm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CisK
KyAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMg
d2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcworICAgIC8vIGFyZSBkaXNjb250aWd1
b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5l
ZWQgdG8gZm9jdXMgb24KKyAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFz
IGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCisgICAgYm9vbCBjaGVj
a0lmU2hvdWxkQ29weSh2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCk7CisgICAgdm9pZCBkaWRDb3B5KHZvaWQqLCBzaXplX3QpOworCitwcml2YXRlOgor
ICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CisKKyAgICBHQ1RocmVhZFNo
YXJlZERhdGEmIG1fc2hhcmVkOworICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRv
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBDb3B5VmlzaXRvcklu
bGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJKU0Nl
bGwuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgR0NDb3B5UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7CitwdWJsaWM6CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2
aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgJiYgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBOb25B
cnJheSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmNvcHlCYWNraW5nU3RvcmUgPT0gSlNPYmplY3Q6OmNvcHlC
YWNraW5nU3RvcmUpOworICAgICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCBt
X3Zpc2l0b3IpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb3B5VmlzaXRvciYgbV92aXNpdG9y
OworfTsKKworaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQq
IG9sZFB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShieXRlcykpIHsKKyAgICAgICAgQVNTRVJUKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9y
KG9sZFB0ciktPmlzUGlubmVkKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpLT5pc1Bpbm5lZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQqIENv
cHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBy
ZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBh
c3NpZ25lZC4KKyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5
dGVzLCAmcmVzdWx0KSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0
ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOworICAgIEFTU0VSVChyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9ICAgICAgIAorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFs
bG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBieXRlcykKK3sKKyAgICBDb3BpZWRCbG9jayogbmV3
QmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2so
bV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKKyAgICBt
X2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOworCisgICAgdm9pZCog
cmVzdWx0ID0gMDsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxv
Y2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVk
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3Rh
cnRDb3B5aW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7
CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNl
LT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCks
ICZibG9jayk7CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsK
K30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKK3sKKyAgICBpZiAo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
aGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5y
ZXNldEN1cnJlbnRCbG9jaygpLCAwKTsKK30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRp
ZENvcHkodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKCFDb3BpZWRTcGFj
ZTo6aXNPdmVyc2l6ZShieXRlcykpOworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNw
YWNlOjpibG9ja0ZvcihwdHIpOworICAgIEFTU0VSVCghYmxvY2stPmlzUGlubmVkKCkpOworCisg
ICAgaWYgKGJsb2NrLT5kaWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKSkKKyAgICAgICAgbV9zaGFyZWQu
bV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKKworI2luY2x1ZGUgIkNv
cHlWaXNpdG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitHQ1RocmVhZDo6R0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRh
JiBzaGFyZWQsIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvciwgQ29weVZpc2l0b3IqIGNvcHlWaXNp
dG9yLCBzaXplX3QgaW5kZXgpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3NoYXJlZChz
aGFyZWQpCisgICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6YWRvcHRQdHIoc2xvdFZpc2l0b3IpKQor
ICAgICwgbV9jb3B5VmlzaXRvcihXVEY6OmFkb3B0UHRyKGNvcHlWaXNpdG9yKSkKKyAgICAsIG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK1RocmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVhZElE
KCkKK3sKKyAgICBBU1NFUlQobV90aHJlYWRJRCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cit9
CisKK3ZvaWQgR0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQoreworICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgbV90aHJlYWRJRCA9IHRo
cmVhZElEOworfQorCitTbG90VmlzaXRvciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKK3sKKyAg
ICBBU1NFUlQobV9zbG90VmlzaXRvcik7CisgICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0KCk7
Cit9CisKK0NvcHlWaXNpdG9yKiBHQ1RocmVhZDo6Y29weVZpc2l0b3IoKQoreworICAgIEFTU0VS
VChtX2NvcHlWaXNpdG9yKTsKKyAgICByZXR1cm4gbV9jb3B5VmlzaXRvci5nZXQoKTsKK30KKwor
dm9pZCBHQ1RocmVhZDo6c3luY2hyb25pemVXaXRoKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90YXNrUXVldWVMb2NrKTsKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSkK
KyAgICAgICAgbV90YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworfQor
CitHQ1Rhc2sgR0NUaHJlYWQ6OndhaXRGb3JOZXh0VGFzaygpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdGFza1F1ZXVlTG9jayk7CisgICAgd2hpbGUgKG1fdGFza1F1ZXVlLmlzRW1wdHko
KSkgeworICAgICAgICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgbV90
YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworICAgIH0KKyAgICBHQ1Rh
c2sgbmV4dFRhc2sgPSAqbV90YXNrUXVldWUuYmVnaW4oKTsKKyAgICBtX3Rhc2tRdWV1ZS5yZW1v
dmVGaXJzdCgpOworICAgIHJldHVybiBuZXh0VGFzazsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NU
aHJlYWRNYWluKCkKK3sKKyAgICBHQ1Rhc2sgY3VycmVudFRhc2s7CisgICAgV1RGOjpyZWdpc3Rl
ckdDVGhyZWFkKCk7CisgICAgLy8gV2FpdCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGZpbmlzaCBj
cmVhdGluZyB1cy4KKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5t
X21hcmtpbmdMb2NrKTsKKyAgICB9CisgICAgeworICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fc2xvdFZpc2l0b3IpOworICAgICAgICB3aGlsZSAoKGN1cnJlbnRUYXNrID0g
d2FpdEZvck5leHRUYXNrKCkpICE9IEV4aXQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVu
dFRhc2spIHsKKyAgICAgICAgICAgIGNhc2UgTWFyazoKKyAgICAgICAgICAgICAgICBtX3Nsb3RW
aXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZXNldFNsb3RWaXNpdG9yOgorICAg
ICAgICAgICAgICAgIG1fc2xvdFZpc2l0b3ItPnJlc2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENvcHk6CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
aGF2ZSB0byBjYWxsIHN0YXJ0Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9u
IHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJv
bVNoYXJlZCgpOworICAgICAgICAgICAgICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN5bmNocm9uaXplOgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFeGl0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBkYXRhKQoreworICAgIEdDVGhyZWFk
KiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxHQ1RocmVhZCo+KGRhdGEpOworICAgIHRocmVhZC0+Z2NU
aHJlYWRNYWluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgR0NUaHJlYWRfaAorI2RlZmluZSBHQ1RocmVhZF9oCisKKyNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29weVZpc2l0b3I7CitjbGFz
cyBHQ1RocmVhZFNoYXJlZERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKworZW51bSBHQ1Rhc2sg
eworICAgIE1hcmssCisgICAgUmVzZXRTbG90VmlzaXRvciwKKyAgICBDb3B5LAorICAgIFN5bmNo
cm9uaXplLAorICAgIEV4aXQKK307CisKK2NsYXNzIEdDVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBH
Q1RocmVhZChHQ1RocmVhZFNoYXJlZERhdGEmLCBTbG90VmlzaXRvciosIENvcHlWaXNpdG9yKiwg
c2l6ZV90KTsKKworICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOworICAgIENvcHlWaXNp
dG9yKiBjb3B5VmlzaXRvcigpOworICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGVu
cXVldWVUYXNrKEdDVGFzayk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVdpdGgoKTsKKworICAgIHN0
YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGdjVGhyZWFkTWFpbigpOworICAgIEdDVGFzayB3YWl0Rm9yTmV4dFRhc2soKTsKKworICAgIFRo
cmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hh
cmVkOworICAgIE93blB0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKKyAgICBPd25QdHI8
Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAgTXV0
ZXggbV90YXNrUXVldWVMb2NrOworICAgIFRocmVhZENvbmRpdGlvbiBtX3Rhc2tRdWV1ZUNvbmRp
dGlvbjsKKyAgICBEZXF1ZTxHQ1Rhc2s+IG1fdGFza1F1ZXVlOworfTsKKworaW5saW5lIHZvaWQg
R0NUaHJlYWQ6OmVucXVldWVUYXNrKEdDVGFzayB0YXNrKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3Rhc2tRdWV1ZUxvY2spOworICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAg
ICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDQ1ICsyNiwyOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hh
cmVkRGF0YS5oIgogCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJlbigpCiB7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnJlc2V0KCk7Cisg
ICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKFJlc2V0U2xvdFZpc2l0b3IpOwogfQogCiBz
aXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZFZpc2l0Q291bnQoKQogeyAgICAgICAKICAg
ICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCAr
PSBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrW2ldLT52aXNpdENvdW50KCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1
bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnZpc2l0Q291bnQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQotCi12b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVh
ZE1haW4oU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yKQotewotICAgIFdURjo6cmVnaXN0ZXJHQ1Ro
cmVhZCgpOwotICAgIHsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCpzbG90
VmlzaXRvcik7Ci0gICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6OlNsYXZlRHJhaW4pOwotICAgIH0KLSAgICBkZWxldGUgc2xvdFZpc2l0b3I7Ci19Ci0KLXZv
aWQgR0NUaHJlYWRTaGFyZWREYXRhOjptYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIG15Vmlz
aXRvcikKLXsgICAgICAgICAgICAgICAKLSAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBz
dGF0aWNfY2FzdDxTbG90VmlzaXRvcio+KG15VmlzaXRvcik7Ci0KLSAgICBzbG90VmlzaXRvci0+
c2hhcmVkRGF0YSgpLm1hcmtpbmdUaHJlYWRNYWluKHNsb3RWaXNpdG9yKTsKLX0KICNlbmRpZgog
CiBHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkBAIC03NCwxMyArNTgsMjEgQEAgR0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVh
ZFNoYXJlZERhdGEoSgogICAgICwgbV9zaGFyZWRNYXJrU3RhY2sobV9zZWdtZW50QWxsb2NhdG9y
KQogICAgICwgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0KGZhbHNlKQorICAgICwgbV9ibG9ja3NUb0NvcHkoZ2xvYmFs
RGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3QpCisgICAgLCBtX2NvcHlJbmRleCgwKQogeworICAg
IG1fY29weUxvY2suSW5pdCgpOwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFi
IHRoZSBsb2NrIHNvIHRoZSBuZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6
ZWQgYmVmb3JlIHRoZXkgc3RhcnQgcnVubmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9t
YXJraW5nTG9jayk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKCk7ICsraSkgewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3Ig
PSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMpOwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0
YWNrLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5k
KGNyZWF0ZVRocmVhZChtYXJraW5nVGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFT
Y3JpcHRDb3JlOjpNYXJraW5nIikpOwotICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5s
YXN0KCkpOworICAgICAgICBDb3B5VmlzaXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0
b3IoKnRoaXMpOworICAgICAgICBzaXplX3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7Cisg
ICAgICAgIEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNp
dG9yLCBjb3B5VmlzaXRvciwgaW5kZXgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElEID0gY3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFk
LCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFs
aXplVGhyZWFkSUQodGhyZWFkSUQpOworICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhy
ZWFkKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTkyLDE2ICs4NCwxNyBAQCBHQ1RocmVhZFNoYXJl
ZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEoCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dCA9IHRydWU7Ci0gICAgICAgIG1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICAg
ICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKEV4aXQpOworICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOworICAgICAg
ICBkZWxldGUgbV9nY1RocmVhZHNbaV07CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX21hcmtpbmdUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFk
Q29tcGxldGlvbihtX21hcmtpbmdUaHJlYWRzW2ldKTsKICNlbmRpZgogfQogICAgIAogdm9pZCBH
Q1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKIHsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMpOwogICAgIEFTU0VSVCghbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KTsKICAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKICAgICAKQEAg
LTExOSw0ICsxMTIsNTggQEAgdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICB9
CiB9CiAKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVh
ZHMoR0NUYXNrIHRhc2spCit7CisgICAgVGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkSUQg
PSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NU
aHJlYWRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBtX2djVGhy
ZWFkc1tpXTsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFk
SUQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdGhyZWFkLT5lbnF1ZXVlVGFzayh0
YXNrKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpzeW5jaHJvbml6ZVdp
dGhXb3JrZXJUaHJlYWRzKCkKK3sKKyAgICBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoU3lu
Y2hyb25pemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgR0NUaHJlYWQqIHRocmVhZCA9IG1fZ2NUaHJlYWRzW2ldOworICAg
ICAgICBBU1NFUlQodGhyZWFkLT50aHJlYWRJRCgpICE9IFdURjo6Y3VycmVudFRocmVhZCgpKTsK
KyAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZVdpdGgoKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NU
aHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcoKQoreworICAgIGRpc3BhdGNoVGFza1Rv
V29ya2VyVGhyZWFkcyhNYXJrKTsKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZp
bmlzaE1hcmtpbmcoKQoreworICAgIC8vIFdlIG5lZWQgdG8gc3luY2hyb25pemUgaWYgd2UgY2Fy
ZSBhYm91dCBhY2N1cmF0ZSBsb2dnaW5nIGNvdW50cy4KKyNpZiBFTkFCTEUoT0JKRUNUX01BUktf
TE9HR0lORykKKyAgICBzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKCk7CisjZW5kaWYKK30K
Kwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCit7CisgICAgewor
ICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBtX2Js
b2Nrc1RvQ29weSA9IG1fZ2xvYmFsRGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3Q7CisgICAgICAg
IG1fY29weUluZGV4ID0gMDsKKyAgICB9CisgICAgLy8gV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQg
d2UgYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgY2FuIAorICAg
IC8vIGJsb3cgdGhyb3VnaCBhbGwgb2YgdGhlIGNvcHlpbmcgd29yayBiZWZvcmUgdGhlIEdDVGhy
ZWFkcyBmdWxseSB3YWtlIHVwLiAKKyAgICAvLyBUaGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBh
IGJsb2NrIGZyb20gdGhlIENvcGllZFNwYWNlIHdoZW4gdGhlIGNvcHlpbmcgcGhhc2UgCisgICAg
Ly8gaGFzIGNvbXBsZXRlZCwgd2hpY2ggaXNuJ3QgYWxsb3dlZC4KKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsrKQorICAgICAgICBtX2djVGhyZWFkc1tp
XS0+Y29weVZpc2l0b3IoKS0+c3RhcnRDb3B5aW5nKCk7CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3Jr
ZXJUaHJlYWRzKENvcHkpOworfQorCit2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNo
Q29weWluZygpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDEzMDY0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTQgQEAKICNpZm5kZWYgR0NUaHJlYWRTaGFyZWRE
YXRhX2gKICNkZWZpbmUgR0NUaHJlYWRTaGFyZWREYXRhX2gKIAorI2luY2x1ZGUgIkdDVGhyZWFk
LmgiCiAjaW5jbHVkZSAiTGlzdGFibGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgi
CisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOCw2ICs0MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbERhdGE7CiBjbGFzcyBDb3BpZWRTcGFj
ZTsKK2NsYXNzIENvcHlWaXNpdG9yOwogCiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGEgewogcHVi
bGljOgpAQCAtNDYsNiArNTAsMTEgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKTsK
IAorICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CisgICAgdm9pZCBkaWRGaW5pc2hNYXJraW5n
KCk7CisgICAgdm9pZCBkaWRTdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRpZEZpbmlzaENvcHlp
bmcoKTsKKwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICB2b2lkIHJlc2V0Q2hpbGRyZW4o
KTsKICAgICBzaXplX3QgY2hpbGRWaXNpdENvdW50KCk7CkBAIC01MywxMiArNjIsMTMgQEAgcHVi
bGljOgogI2VuZGlmCiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsK
ICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNp
dG9yOwogCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHZvaWQgbWFya2luZ1RocmVhZE1h
aW4oU2xvdFZpc2l0b3IqKTsKLSAgICBzdGF0aWMgdm9pZCBtYXJraW5nVGhyZWFkU3RhcnRGdW5j
KHZvaWQqIGhlYXApOwotI2VuZGlmCisgICAgdm9pZCBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVh
ZHMoR0NUYXNrKTsKKyAgICB2b2lkIHN5bmNocm9uaXplV2l0aFdvcmtlclRocmVhZHMoKTsKKyAg
ICB2b2lkIGdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90Jiwgc2l6ZV90Jik7CiAKICAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsK
QEAgLTY3LDkgKzc3LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIG1fc2hvdWxkSGFzaENv
bnN0OwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fbWFya2luZ1RocmVhZHM7Ci0g
ICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjazsKLSAgICAK
KyAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhyZWFkczsKKwogICAgIE11dGV4IG1fbWFya2lu
Z0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvbjsKICAgICBNYXJr
U3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsKQEAgLTc5LDEwICs4OCwyMyBAQCBwcml2YXRl
OgogICAgIE11dGV4IG1fb3BhcXVlUm9vdHNMb2NrOwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3Bh
cXVlUm9vdHM7CiAKKyAgICBTcGluTG9jayBtX2NvcHlMb2NrOworICAgIFZlY3RvcjxNYXJrZWRC
bG9jayo+JiBtX2Jsb2Nrc1RvQ29weTsKKyAgICBzaXplX3QgbV9jb3B5SW5kZXg7CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKKwogICAgIExpc3Rh
YmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzOwogICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6
TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJl
YWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYg
ZW5kKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3Rh
cnQgPSBtX2NvcHlJbmRleDsKKyAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXpl
KCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRl
eCA9IGVuZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJD
b3BpZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5j
bHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRl
ICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMjUyLDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAg
ICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJl
ZERhdGEpCisgICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxl
U2V0KGdsb2JhbERhdGEpCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtNDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFy
a1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsK
ICAgICB9CiAKLSAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hh
cmVkRGF0YS5kaWRTdGFydE1hcmtpbmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1f
c2xvdFZpc2l0b3I7CiAgICAgdmlzaXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBo
ZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7CkBAIC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjpt
YXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQs
IHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAotICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAg
ICBtX3NoYXJlZERhdGEuZGlkRmluaXNoTWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFS
S19MT0dHSU5HKQogICAgIHNpemVfdCB2aXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7
CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6
Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigp
OwogI2VuZGlmCiAgICAgbV9zaGFyZWREYXRhLnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29w
eUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7
CisgICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAg
bV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29weWluZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlz
aXRvciA9IG1fY29weVZpc2l0b3I7CisgICAgICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7Cisg
ICAgICAgIHZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29w
eWluZygpOworICAgICAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0g
CiAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwx
NCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVND
UklQVENPUkVfR0NfTUFSS0VEKCk7CiAKICAgICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5y
ZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5
RnVuY3RvciBmdW5jdG9yKG1fYmxvY2tTbmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2Uu
Zm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7
CisKKyAgICB7CiAgICAgICAgIEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVy
cyk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBA
IC03NTUsNyArNzc4LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9n
ZwogICAgICAgICBtX29iamVjdFNwYWNlLnNocmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBl
ci0+c3RhcnRTd2VlcGluZyhtX29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3
ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRv
bmVkID0gMDsKIAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJs
b2NrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdD
b2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAi
SGFuZGxlU2V0LmgiCkBAIC0xODIsNyArMTgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmll
bmQgY2xhc3MgQ29weVZpc2l0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmll
bmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsy
MDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxs
R0MpOwogICAgICAgICB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYp
OwogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7Cisg
ICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzKCk7CiAgICAgICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIz
OSw2ICsyNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFk
U2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0
b3I7CisgICAgICAgIENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxl
U2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAt
MjU2LDYgKzI2MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0
aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3
ZWVwZXIqIG1fc3dlZXBlcjsKKyAgICAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1Nu
YXBzaG90OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICAgICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJs
b2NrKj4mIGJsb2NrcykgCisgICAgICAgICAgICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAs
IG1fYmxvY2tzKGJsb2NrcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZv
aWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9
IGJsb2NrOyB9CisgICAgCisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8
TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6
OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw3IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAK
IEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVu
TG9vcFJlZiBydW5Mb29wKQogICAgIDogSGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVu
TG9vcCkKICAgICAsIG1fY3VycmVudEJsb2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nr
c1RvU3dlZXAoaGVhcC0+bV9ibG9ja1NuYXBzaG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5
IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAK
LXZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFy
a2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFy
dFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1f
YmxvY2tzVG9Td2VlcC5yZXNpemUoYmxvY2tTbmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5j
dG9yIGZ1bmN0b3IobV9ibG9ja3NUb1N3ZWVwKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2Jq
ZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0g
YmxvY2tTbmFwc2hvdDsKICAgICBtX2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAg
c2NoZWR1bGVUaW1lcigpOwogfQpAQCAtMTYwLDcgKzE1OSw3IEBAIEluY3JlbWVudGFsU3dlZXBl
ciogSW5jcmVtZW50YWxTd2VlcGVyOjoKICAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBl
cihoZWFwLT5nbG9iYWxEYXRhKCkpOwogfQogCi12b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3Rh
cnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mKQordm9pZCBJbmNyZW1lbnRh
bFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIu
aAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVt
ZW50YWxTd2VlcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIzICszNywxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAotc3RydWN0IENvcHlGdW5jdG9yIDogcHVibGljIE1h
cmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci0gICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJs
b2NrKj4mIGJsb2NrcykgCi0gICAgICAgIDogbV9pbmRleCgwKSAKLSAgICAgICAgLCBtX2Jsb2Nr
cyhibG9ja3MpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9j
ayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9Ci0KLSAgICBzaXplX3Qg
bV9pbmRleDsKLSAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7Ci19OwotCiBjbGFz
cyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgSW5jcmVtZW50YWxTd2VlcGVyKiBjcmVhdGUoSGVhcCopOwotICAgIHZvaWQgc3RhcnRT
d2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mIGJsb2NrU25hcHNob3QpOworICAg
IHZvaWQgc3RhcnRTd2VlcGluZyhWZWN0b3I8TWFya2VkQmxvY2sqPiYpOwogICAgIHZpcnR1YWwg
dm9pZCBkb1dvcmsoKTsKICAgICB2b2lkIHN3ZWVwTmV4dEJsb2NrKCk7CiAgICAgdm9pZCB3aWxs
RmluaXNoU3dlZXBpbmcoKTsKQEAgLTcxLDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNh
bmNlbFRpbWVyKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5k
ZXg7Ci0gICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja3NUb1N3ZWVwOworICAgIFZlY3Rv
cjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1RvU3dlZXA7CiAjZWxzZQogICAgIAogICAgIEluY3Jl
bWVudGFsU3dlZXBlcihKU0dsb2JhbERhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCAr
MzUsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXR1cCgpCiAgICAgbV9zaGFyZWQubV9zaG91bGRI
YXNoQ29uc3QgPSBtX3NoYXJlZC5tX2dsb2JhbERhdGEtPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9I
YXNoQ29uc3QoKTsKICAgICBtX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFz
aENvbnN0OwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsraSkKLSAg
ICAgICAgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01hcmtTdGFja1tpXS0+bV9zaG91bGRIYXNo
Q29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zaGFyZWQubV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fc2hh
cmVkLm1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigpLT5tX3Nob3VsZEhhc2hDb25zdCA9IG1f
c2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0OwogI2VuZGlmCiB9CiAKQEAgLTExMiw4ICsxMTIsMTAg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiAgICAgLy8gT3RoZXJ3
aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4K
ICAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNr
KTsKIAotICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwg
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSkKLSAgICAgICAgbV9zaGFyZWQubV9tYXJraW5n
Q29uZGl0aW9uLmJyb2FkY2FzdCgpOworICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSkgeworICAgICAg
ICBtX3NoYXJlZC5kaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoTWFyayk7CisgICAgICAgIG1f
c2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICB9CiB9CiAKIHZvaWQgU2xv
dFZpc2l0b3I6OmRyYWluKCkKQEAgLTE4MSw4ICsxODMsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
cmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMg
JiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3Ig
dGhlbSB0byBnaXZlIHRoZWlyIHByaXZhdGUgQ29waWVkQmxvY2tzIGJhY2sKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAKQEAgLTE5NiwyMSArMTk2LDE2IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBz
bywgbGV0IHRoZSBtYXN0ZXIga25vdy4KLSAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3Rh
Y2suaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25k
aXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgd2hp
bGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQubV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9z
aGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3NoYXJl
ZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29weWlu
ZygpOwotICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24ud2Fp
dChtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobV9zaGFyZWQu
bV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbG9va3MgbGlrZSB0aGUgZW5kIG9mIHRoaXMgbGl0dGxlIGJpdCBvZiB3b3JrLCBzbyBub3Rp
ZnkgdGhlIG1hc3RlciB0aHJlYWQuCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQu
bV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycykKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBJcyB0aGUgVk0gZXhpdGluZz8gSWYgc28sIGV4aXQgdGhpcyB0aHJlYWQuCi0g
ICAgICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkg
ewotICAgICAgICAgICAgICAgICAgICBkb25lQ29weWluZygpOworICAgICAgICAgICAgICAgIGlm
IChtX3NoYXJlZC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
IAogICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwpA
QCAtMjM2LDMwICsyMzEsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkK
ICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OnN0YXJ0
Q29weWluZygpCi17Ci0gICAgQVNTRVJUKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpOwot
fQotCi12b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVz
KQotewotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3Bp
ZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7Ci0gICAgbV9jb3BpZWRBbGxvY2F0b3Iu
c2V0Q3VycmVudEJsb2NrKG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmFsbG9jYXRlQmxvY2tGb3JD
b3B5aW5nUGhhc2UoKSk7Ci0KLSAgICB2b2lkKiByZXN1bHQgPSAwOwotICAgIENoZWNrZWRCb29s
ZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJl
c3VsdCk7Ci0gICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlT3JQaW4odm9pZCogcHRyLCBzaXpl
X3QgYnl0ZXMpCi17Ci0gICAgaWYgKCFjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShw
dHIsIGJ5dGVzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIGFsbG9jYXRl
TmV3U3BhY2UoYnl0ZXMpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhh
c2hDb25zdExvY2soKQogewogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKQEAgLTMzNSwzNiArMzA2
LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbAogICAgIGludGVy
bmFsQXBwZW5kKGNlbGwpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZv
aWQqKiBwdHIsIHNpemVfdCBieXRlcywgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSAgICB2b2lkKiBuZXdQdHIgPSBhbGxvY2F0
ZU5ld1NwYWNlT3JQaW4ob2xkUHRyLCBieXRlcyk7Ci0gICAgaWYgKG5ld1B0cikgewotICAgICAg
ICBzaXplX3QganNWYWx1ZXNPZmZzZXQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHZhbHVlcykgLSBzdGF0aWNfY2FzdDxjaGFyKj4ob2xkUHRyKSk7Ci0KLSAg
ICAgICAgSlNWYWx1ZSogbmV3VmFsdWVzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+
KHN0YXRpY19jYXN0PGNoYXIqPihuZXdQdHIpICsganNWYWx1ZXNPZmZzZXQpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEpTVmFs
dWUmIHZhbHVlID0gdmFsdWVzW2ldOwotICAgICAgICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaW50ZXJuYWxBcHBlbmQoJm5ld1ZhbHVlc1tpXSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtZW1jcHkobmV3UHRyLCBvbGRQdHIsIGpzVmFsdWVzT2Zmc2V0KTsKLSAgICAgICAgKnB0
ciA9IG5ld1B0cjsKLSAgICB9IGVsc2UKLSAgICAgICAgYXBwZW5kKHZhbHVlcywgbGVuZ3RoKTsK
LX0KLSAgICAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKLXsKLSAgICBpZiAoIW1f
Y29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFy
ZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNl
dEN1cnJlbnRCbG9jaygpKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZl
cmVuY2VzKCkKIHsKICAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBt
X3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVu
dCA9IGN1cnJlbnQtPm5leHQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRl
ZiBTbG90VmlzaXRvcl9oCiAjZGVmaW5lIFNsb3RWaXNpdG9yX2gKIAotI2luY2x1ZGUgIkNvcGll
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tJ
bmxpbmVNZXRob2RzLmgiCiAKQEAgLTgwLDIxICs3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmlu
YWxpemVycygpOwogCi0gICAgdm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGNvcHlMYXRl
cih2b2lkKiwgc2l6ZV90KTsKICAgICAKLSAgICAvLyBIaWdoLWxldmVsIEFQSSBmb3IgY29weWlu
ZywgYXBwcm9wcmlhdGUgZm9yIGNhc2VzIHdoZXJlIHRoZSBvYmplY3QncyBoZWFwIHJlZmVyZW5j
ZXMKLSAgICAvLyBmYWxsIGludG8gYSBjb250aWd1b3VzIHJlZ2lvbiBvZiB0aGUgc3RvcmFnZSBj
aHVuayBhbmQgaWYgdGhlIG9iamVjdCBmb3Igd2hpY2ggeW91J3JlCi0gICAgLy8gZG9pbmcgY29w
eWluZyBkb2VzIG5vdCBvY2N1ciBmcmVxdWVudGx5LgotICAgIHZvaWQgY29weUFuZEFwcGVuZCh2
b2lkKiosIHNpemVfdCwgSlNWYWx1ZSosIHVuc2lnbmVkKTsKLSAgICAKLSAgICAvLyBMb3ctbGV2
ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVj
dCdzIGhlYXAgcmVmZXJlbmNlcwotICAgIC8vIGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBv
YmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24K
LSAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8g
c2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCi0gICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weUFu
ZFBpbk90aGVyd2lzZSh2b2lkKiBvbGRQdHIsIHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVO
ZXdTcGFjZShzaXplX3QpOwotICAgIAotICAgIHZvaWQgZG9uZUNvcHlpbmcoKTsgCi0gICAgICAg
IAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCiAgICAgVlRhYmxlU3BlY3RydW0g
bV92aXNpdGVkVHlwZUNvdW50czsKICNlbmRpZgpAQCAtMTI1LDkgKzExMSw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIG1lcmdl
T3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1Nw
YWNlT3JQaW4odm9pZCosIHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZVNsb3co
c2l6ZV90KTsKLQogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogCiAgICAgTWFya1N0
YWNrQXJyYXkgbV9zdGFjazsKQEAgLTE0Niw4ICsxMjksNiBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIG1fbG9nQ2hpbGRDb3VudDsKICNlbmRpZgogCi0gICAgQ29waWVkQWxsb2NhdG9yIG1fY29w
aWVkQWxsb2NhdG9yOwotCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGJvb2wg
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAkocmV2
aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiwzMCArMTM2LDYgQEAgaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdAogICAgIG1lcmdlT3BhcXVlUm9vdHMo
KTsKIH0KICAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBTbG90VmlzaXRvcjo6Y2hlY2tJZlNob3Vs
ZENvcHlBbmRQaW5PdGhlcndpc2Uodm9pZCogb2xkUHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAg
aWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgewotICAgICAgICBtX3NoYXJlZC5t
X2NvcGllZFNwYWNlLT5waW4oQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iob2xkUHRyKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9zaGFyZWQubV9jb3Bp
ZWRTcGFjZS0+aXNQaW5uZWQob2xkUHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQqIFNsb3RWaXNpdG9yOjph
bGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAv
LyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAg
ICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0
KSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gYWxsb2NhdGVO
ZXdTcGFjZVNsb3coYnl0ZXMpOwotICAgIEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19ICAgICAgIAotCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAg
ICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKQEAgLTE3NSw2ICsxNTEsMjMgQEAgaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKAogICAgIGRyYWluKCk7CiB9CiAKK2lu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMp
Cit7CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBt
X3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3Io
cHRyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxvY2sg
PSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKKyAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOwor
CisgICAgaWYgKCFibG9jay0+c2hvdWxkRXZhY3VhdGUoKSkKKyAgICAgICAgbV9zaGFyZWQubV9j
b3BpZWRTcGFjZS0+cGluKGJsb2NrKTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTR2xvYmFsRGF0YTsKLWNsYXNz
IFNsb3RWaXNpdG9yOworY2xhc3MgQ29weVZpc2l0b3I7CiBzdHJ1Y3QgQXJyYXlTdG9yYWdlOwog
CiBjbGFzcyBCdXR0ZXJmbHkgewpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5k
ZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHN0
YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBz
dGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90
VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rp
b24oQ29weVZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOwogICAgIAogICAgIEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0
dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgY29uc3QgSW5kZXhpbmdIZWFk
ZXIqIGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20o
dGhpcyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgogI2luY2x1
ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3Jl
YXRlKEpTR2wKICAgICByZXR1cm4gY3JlYXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0
ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29s
IGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitp
bmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xs
ZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgK
ICAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKlZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0cikoSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIHZpc2l0
Q2hpbGRyZW47CiAKKyAgICAgICAgdHlwZWRlZiB2b2lkICgqQ29weUJhY2tpbmdTdG9yZUZ1bmN0
aW9uUHRyKShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOworICAgICAgICBDb3B5QmFja2luZ1N0b3Jl
RnVuY3Rpb25QdHIgY29weUJhY2tpbmdTdG9yZTsKKwogICAgICAgICB0eXBlZGVmIENhbGxUeXBl
ICgqR2V0Q2FsbERhdGFGdW5jdGlvblB0cikoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICAgICAg
R2V0Q2FsbERhdGFGdW5jdGlvblB0ciBnZXRDYWxsRGF0YTsKIApAQCAtMTE2LDYgKzExOSw3IEBA
IHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAogI2RlZmluZSBDUkVBVEVfTUVUSE9EX1RB
QkxFKENsYXNzTmFtZSkgeyBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpjb3B5
QmFja2luZ1N0b3JlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6
cHV0LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJl
dmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBAIHZvaWQgSlNDZWxsOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKICAgICBjZWxsLT5KU0NlbGw6On5KU0NlbGwoKTsKIH0KIAordm9pZCBK
U0NlbGw6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImKQoreworfQorCiBi
b29sIEpTQ2VsbDo6Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nJiBzdHJpbmdWYWx1
ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzU3RyaW5nKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBDb3B5VmlzaXRvcjsKICAgICBjbGFzcyBK
U0Rlc3RydWN0aWJsZU9iamVjdDsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xMTIsNiArMTEzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwog
CiAgICAgICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVyYXRp
b24gaW5jbHVkZWQuCiAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkJ1dHRlcmZs
eUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIK
KyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRlUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdldHRl
clNldHRlci5oIgpAQCAtOTQsMTAgKzk1LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFz
c1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5
LCBzaXplX3Qgc3RvcmFnZVNpemUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlC
dXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXpl
X3Qgc3RvcmFnZVNpemUpCiB7CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7Ci0gICAgCisKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwogICAgIAogICAgIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwpAQCAt
MTExLDUxICsxMTIsNjYgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cgogICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzID0gMDsKICAgICB9Ci0gICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZs
eTo6dG90YWxTaXplKAotICAgICAgICBwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAodmlz
aXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSgKLSAgICAgICAgICAgIGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRl
cykpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwotICAgICAgICAKLSAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4K
KyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2Fw
YWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CisKKyAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0
ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbigKKyAgICAgICAgICAgIHZpc2l0b3IsIHBy
ZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOworCiAgICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFy
Z2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgUHJvcGVydHlT
dG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAg
ICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAg
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
VmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFVO
TElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewogICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+
aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJp
YXRlLgogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAg
ICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21E
dXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0g
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTspIHsKLSAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFy
Z2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKQotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7
IGNvdW50LS07KQorICAgICAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0
aG91dFdyaXRlQmFycmllcigoY3VycmVudFNvdXJjZSsrKS0+Z2V0KCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKworICAg
ICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0
eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdC
dXR0ZXJmbHk7CisgICAgfQorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0
QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6
ZV90IHN0b3JhZ2VTaXplKQoreworICAgIEFTU0VSVChidXR0ZXJmbHkpOworICAgIAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAg
c2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
czsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdI
ZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMoc3RydWN0dXJlKTsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBNYXJrIHRoZSBw
cm9wZXJ0aWVzLgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICAgICAgCisgICAg
ICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMg
PSAwOworICAgIH0KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3Rh
bFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVz
LgorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkg
LSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOworICAgIHZpc2l0b3IuY29weUxhdGVyKGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRl
cyk7CisKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CiAgICAgICAgIC8v
IE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzoKQEAgLTE4OSw2ICsyMDUsMTYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisg
ICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKK30KKwogdm9pZCBKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0
Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICAgICAgCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9y
ZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAKQEAgLTU5MSw2ICs1OTIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xv
YmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90Vmlz
aXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgY29w
eUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7
CiAKICAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBp
biBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2ls
bCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtODU0LDE0ICs4NTYsMTQgQEAgaW5saW5lIEpTVmFsdWUg
SlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RvcmVk
UHJvdG90eXBlKCk7CiB9CiAKLWlubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xh
c3NJbmZvKiBpbmZvKSBjb25zdAoraW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1l
dGhvZFRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NP
ZihpbmZvKTsKKyAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZTsKIH0KIAotaW5s
aW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKK2lubGlu
ZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAogewot
ICAgIHJldHVybiAmY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlOworICAgIHJldHVybiBjbGFzc0lu
Zm8oKS0+aXNTdWJDbGFzc09mKGluZm8pOwogfQogCiAvLyB0aGlzIG1ldGhvZCBpcyBoZXJlIHRv
IGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlNDZWxsOjppbmhlcml0cwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTMwNjQ5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTYsNiArMTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdih1bnNpZ25lZCwg
Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSwgcGFnZVNpemUoKSkgXAogICAgIHYodW5zaWduZWQsIG51
bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoNykpIFwKICAgICB2KHVu
c2lnbmVkLCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQsIDEwMDApIFwKKyAgICB2KGRvdWJsZSwg
bWF4Q29waWVkU3BhY2VGcmFnbWVudGF0aW9uLCAwLjgpIFwKKyAgICB2KGRvdWJsZSwgbWF4Q29w
aWVkQmxvY2tGcmFnbWVudGF0aW9uLCAwLjkpIFwKICAgICBcCiAgICAgdihib29sLCBmb3JjZVdl
YWtSYW5kb21TZWVkLCBmYWxzZSkgXAogICAgIHYodW5zaWduZWQsIGZvcmNlZFdlYWtSYW5kb21T
ZWVkLCAwKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167835</attachid>
            <date>2012-10-09 13:23:36 -0700</date>
            <delta_ts>2012-10-09 14:58:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121009132239.patch</filename>
            <type>text/plain</type>
            <size>83662</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwNzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIGRvaW5nIAorICAgICAgICBzb21lIHNldCBvZiBHQyB0YXNrcy4gQ3VycmVudGx5LCB0
aGF0IHNldCBvZiB0YXNrcyBpbmNsdWRlcyBNYXJrLCBDb3B5LCBTeW5jaHJvbml6ZSwgYW5kIEV4
aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBoYXMgYW4gaW5kaXZpZHVhbCBxdWV1ZSBvZiB0YXNr
cyB3aGljaCBpdCBwb2xscyBmcm9tIGFuZCBleGVjdXRlcyBpbiBvcmRlci4gQW55IHRocmVhZCBj
YW4gaXNzdWUgYW55IG90aGVyIAorICAgICAgICB0aHJlYWQgYSBuZXcgdGFzay4gRm9yIGV4YW1w
bGUsIHdoZW4gYSB0aHJlYWQgdGhhdCBpcyBkb2luZyBtYXJraW5nIHJlYWxpemVzIGl0IG1pZ2h0
IGJlIHByb2ZpdGFibGUgZm9yIAorICAgICAgICBvdGhlciB0aHJlYWRzIHRvIHdha2UgdXAgYW5k
IHN0YXJ0IGRvaW5nIG1hcmtpbmcsIGl0IHdpbGwgaXNzdWUgYSB0YXNrIHRvIHRoZW0uCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjp0aHJlYWRJRCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpp
bml0aWFsaXplVGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6c2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6Y29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpH
Q1RocmVhZDo6c3luY2hyb25pemVXaXRoKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OndhaXRG
b3JOZXh0VGFzayk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMpOgorICAgICAgICAqIGhlYXAv
R0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWQpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZDo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcDogVGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBub3cgaGFzIGEgbGlz
dCBvZiBHQ1RocmVhZCBvYmplY3RzIHJhdGhlciB0aGFuIHJhdyAKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllcnMuCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Y2hpbGRWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
R0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMpOiBUaGlzIGZ1
bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyB0YXNrcyAKKyAgICAgICAgdG8g
dGhlIHdvcmtlciB0aHJlYWRzIHRoYXQgdGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBvYmplY3RzIGtu
b3dzIGFib3V0LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6R0NUaHJl
YWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcpOiBDYWxsYmFjayB0byBsZXQgdGhlIEdDVGhy
ZWFkU2hhcmVkRGF0YSBrbm93IHRoYXQgbWFya2luZyBoYXMgCisgICAgICAgIHN0YXJ0ZWQuCisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRv
IGZvciBmaW5pc2hpbmcgbWFya2luZy4gV2UgZG9uJ3QgbmVlZCB0byB3YWl0IG9uIHRoZSBvdGhl
ciAKKyAgICAgICAgbWFya2luZyB0aHJlYWRzIHRvIGZpbmlzaCB1bmxlc3Mgd2Ugd2FudCBhY2N1
cmF0ZSBvYmplY3QgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmtpbmcgcGhhc2UuCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nKTogRGl0dG8gZm9y
IHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmluaXNoaW5nIGNvcHlpbmcuIEFn
YWluLCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgb24gdGhlIAorICAgICAgICBvdGhlciB0aHJlYWRz
IHRvIGZpbmlzaCBjb3B5aW5nIGJlY2F1c2Ugd2UgY2FuIHJlbHkgb24gQ29waWVkU3BhY2U6OmRv
bmVDb3B5aW5nIHRvIHdhaXQgdW50aWwgY29weWluZyBpcyAKKyAgICAgICAgZmluaXNoZWQuCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChHQ1RocmVhZFNoYXJlZERhdGEpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERh
dGE6OmdldE5leHRCbG9ja3NUb0NvcHkpOiBBdG9taWNhbGx5IGdldHMgdGhlIG5leHQgY2h1bmsg
b2Ygd29yayBmb3IgYSBjb3B5aW5nIHRocmVhZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3Rz
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KTogUmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvcHlpbmcgcGhhc2UsIG5vdGlmeWlu
ZyB0aGUgY29weWluZyB0aHJlYWRzLCAKKyAgICAgICAgYW5kIGRvaW5nIGFueSBjb3B5aW5nIHdv
cmsgaWYgbmVjZXNzYXJ5LgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6Q29weUZ1bmN0b3I6OkNvcHlGdW5jdG9yKToKKyAgICAgICAgKENvcHlGdW5jdG9yKToK
KyAgICAgICAgKEpTQzo6Q29weUZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcDogQ2hhbmdlZCB0aGUgaW5jcmVtZW50YWwgc3dlZXBlciB0
byBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IG9mIE1hcmtlZEJsb2NrcyAKKyAgICAgICAg
dGhhdCBuZWVkIHN3ZWVwaW5nLCBzaW5jZSB0aGlzIG5vdyByZXNpZGVzIGluIHRoZSBIZWFwIHNv
IHRoYXQgaXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgYnkgdGhlIEdDVGhyZWFkcy4KKyAgICAgICAg
KEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAo
SlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OnNldHVwKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZUtub3duUGFyYWxsZWwpOiBOb3cgdXNlcyB0aGUgZGlzcGF0Y2ggbWVjaGFuaXNtIGluIEdDVGhy
ZWFkU2hhcmVkRGF0YSBmb3IgdGVsbGluZyAKKyAgICAgICAgdGhlIEdDVGhyZWFkcyB0byB3YWtl
IHVwIGFuZCBzdGFydCBtYXJraW5nLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29weUxhdGVyKTogTm90aWZpZXMgdGhlIENvcGllZEJsb2NrIHRoYXQgdGhlcmUgYXJlIHNvbWUg
bGl2ZSBieXRlcyB0aGF0IG1heSBuZWVkIAorICAgICAgICB0byBiZSBjb3BpZWQuCisgICAgICAg
ICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChCdXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKTog
VXNlcyB0aGUgbmV3IENvcHlWaXNpdG9yLgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6
CisgICAgICAgIChNZXRob2RUYWJsZSk6IEFkZGVkIG5ldyAidmlydHVhbCIgZnVuY3Rpb24gY29w
eUJhY2tpbmdTdG9yZSB0byBtZXRob2QgdGFibGUuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90aGluZy4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29weUJ1dHRlcmZseSk6IERvZXMgdGhlIGFjdHVhbCBjb3B5aW5nIG9m
IHRoZSBidXR0ZXJmbHkuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkpOiBDYWxscyBjb3B5TGF0ZXIgZm9yIHRoZSBidXR0ZXJmbHkuCisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTogCisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1ldGhvZFRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmhlcml0cyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6IEFkZGVkIHR3byBuZXcgY29uc3RhbnRzLCBtYXhIZWFwRnJh
Z21lbnRhdGlvbiBhbmQgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAKKyAgICAgICAgdG8g
Z292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUgZG9pbmcg
Y29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMDkgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWZ0ZXIgcjEzMDM0NCwgT3BhcXVlSlNTdHJp
bmc6OmlkZW50aWZpZXIoKSBhZGRzIHdyYXBwZWQgU3RyaW5nIHRvIGlkZW50aWZpZXIgdGFibGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMDY0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDggKzEwNiwxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgaGVh
cC9CbG9ja0FsbG9jYXRvci5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAorICAgIGhlYXAv
Q29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFw
L0RGR0NvZGVCbG9ja3MuY3BwCisgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhy
ZWFkU2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDkgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCBcCisgICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ2FyZFNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmggXApAQCAtMjc4LDYgKzI4MSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmggXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAgXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAgXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggXAogICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTdGF0aXN0aWNzLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAgXAogICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvV2Vha1NldC5jcHAg
XApAQCAtODEsNiArODIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cCBcCiAgICAgaGVhcC9CbG9ja0FsbG9jYXRvci5jcHAgXAogICAgIGhlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmNwcCBcCisgICAgaGVhcC9HQ1RocmVhZC5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzM4LDYgKzIzMzgsMTggQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvci5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcQ29weVZpc2l0b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxERkdD
b2RlQmxvY2tzLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNDM0LDYgKzI0NDYsMTQgQEAK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVh
cFxHQ1RocmVhZC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcR0NUaHJlYWQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuY3BwIgog
CQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiwxMSBA
QAogCQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRFMTVE
RDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovOyB9OwogCQlDMjExMjJF
MjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERjE1REQ5QUIzMDA3OTBFM0Eg
LyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lu
bGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMTEyMkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIx
RjcxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBD
b3B5VmlzaXRvci5jcHAgKi87IH07CisJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5
VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjkxNjFGOTlFMDAwMjM2
OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlW
aXNpdG9ySW5saW5lTWV0aG9kcy5oICovOyB9OworCQlDMjEzMjFGQTE2MUY5OUUwMDAyMzY5RUQg
LyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLzsgfTsKKwkJ
QzIxMzIxRkIxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjEzMjFGNjE2MUY5OUUwMDAyMzY5RUQgLyog
R0NUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4
NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi87IH07CiAJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ4Niw2ICsxNDkxLDExIEBACiAJ
CUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8q
IEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIy
RTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMjE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMzE2MUY5OUUwMDAy
MzY5RUQgLyogQ29weVZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29weVZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjQxNjFG
OTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8q
IEdDVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAv
KiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
bG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRC
NDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODE5LDYgKzE4MjksMTEgQEAKIAkJMTQyRTMxMkEx
MzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5j
cHAgKi8sCisJCQkJQzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi8s
CisJCQkJQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9k
cy5oICovLAorCQkJCUMyMTMyMUY1MTYxRjk5RTAwMDIzNjlFRCAvKiBHQ1RocmVhZC5jcHAgKi8s
CisJCQkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzI0
RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKIAkJCQlDMjRE
MzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMjI1NDk0
MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtMjU3OCw2ICsyNTkz
LDggQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMTMyMUY4MTYxRjk5RTAwMDIz
NjlFRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMzIxRkIxNjFGOTlF
MDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNE
Njk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdG
Njg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2OCw2ICsyOTg1LDcgQEAKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2
MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIx
NjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
MjEzMjFGOTE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKQEAgLTM1NzQsNiArMzU5Miw4IEBACiAJCQkJODYyNTUzRDExNjEzNkRBOTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFG
QjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNEQz
MUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlDMjEzMjFGNzE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQzIxMzIxRkExNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5o
CShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSGVhcEJs
b2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRo
b2RzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSw2ICs0MywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IENvcGllZEJsb2NrKiBjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAg
c3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCYpOwogCisgICAgYm9vbCBpc1Bpbm5lZCgpOworCisgICAgdW5zaWduZWQgbGl2ZUJ5
dGVzKCk7CisgICAgdm9pZCByZXBvcnRMaXZlQnl0ZXModW5zaWduZWQpOworICAgIHZvaWQgZGlk
U3Vydml2ZUdDKCk7CisgICAgYm9vbCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKKyAgICBi
b29sIHNob3VsZEV2YWN1YXRlKCk7CisgICAgYm9vbCBjYW5CZVJlY3ljbGVkKCk7CisKICAgICAv
LyBUaGUgcGF5bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBm
b3IgYWxsb2NhdGlvbnMuCiAgICAgY2hhciogcGF5bG9hZCgpOwogICAgIGNoYXIqIHBheWxvYWRF
bmQoKTsKQEAgLTY2LDYgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX3JlbWFpbmlu
ZzsKICAgICB1aW50cHRyX3QgbV9pc1Bpbm5lZDsKKyAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsK
IH07CiAKIGlubGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwo
Y29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uKQpAQCAtOTYsMTAgKzEwOCw2
MCBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKGNvbnN0IFBhCiAgICAgOiBIZWFw
QmxvY2s8Q29waWVkQmxvY2s+KGFsbG9jYXRpb24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2Fk
Q2FwYWNpdHkoKSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBtX2xpdmVCeXRlcygw
KQogewogICAgIEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPiht
X3JlbWFpbmluZykpKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVC
eXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICB1bnNpZ25lZCBvbGRWYWx1ZSA9IDA7CisgICAg
dW5zaWduZWQgbmV3VmFsdWUgPSAwOworICAgIGRvIHsKKyAgICAgICAgb2xkVmFsdWUgPSBtX2xp
dmVCeXRlczsKKyAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIGJ5dGVzOworICAgIH0gd2hp
bGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmbV9saXZlQnl0ZXMsIG9sZFZhbHVlLCBuZXdW
YWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKK3sK
KyAgICBtX2xpdmVCeXRlcyA9IDA7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCitpbmxp
bmUgYm9vbCBDb3BpZWRCbG9jazo6ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sK
KyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPj0gYnl0ZXMpOworICAgIHVuc2lnbmVkIG9sZFZhbHVl
ID0gMDsKKyAgICB1bnNpZ25lZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8geworICAgICAgICBvbGRW
YWx1ZSA9IG1fbGl2ZUJ5dGVzOworICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gYnl0ZXM7
CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2xpdmVCeXRlcywgb2xk
VmFsdWUsIG5ld1ZhbHVlKSk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDwgb2xkVmFsdWUpOwor
ICAgIHJldHVybiAhbmV3VmFsdWU7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5C
ZVJlY3ljbGVkKCkKK3sKKyAgICByZXR1cm4gIW1fbGl2ZUJ5dGVzOworfQorCitpbmxpbmUgYm9v
bCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3VhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fbGl2ZUJ5dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4ocGF5bG9hZENhcGFj
aXR5KCkpIDw9IE9wdGlvbnM6Om1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbigpOworfQorCitp
bmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQoKQoreworICAgIHJldHVybiBtX2lzUGlu
bmVkOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29waWVkQmxvY2s6OmxpdmVCeXRlcygpCit7Cisg
ICAgcmV0dXJuIG1fbGl2ZUJ5dGVzOworfQorCiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBh
eWxvYWQoKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgo
c2l6ZW9mKENvcGllZEJsb2NrKSArIDcpICYgfjcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0zNiw2ICszNyw3IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShI
ZWFwKiBoZWFwKQogICAgICwgbV90b1NwYWNlKDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQogICAg
ICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFs
c2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCiB7CiAgICAgbV90b1NwYWNlTG9j
ay5Jbml0KCk7CkBAIC0xNTIsMTUgKzE1NCwxOCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFj
ZTo6dHJ5UmVhbGxvY2F0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6
OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQordm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayogYmxvY2ssIENvcGllZEJsb2NrKiogZXhjaGFu
Z2UpCiB7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOwogICAgIAorICAgIGlmIChleGNo
YW5nZSkKKyAgICAgICAgKmV4Y2hhbmdlID0gYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgp
OworCiAgICAgaWYgKCFibG9jaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFibG9jay0+
ZGF0YVNpemUoKSkgewotICAgICAgICByZWN5Y2xlQmxvY2soYmxvY2spOworICAgICAgICByZWN5
Y2xlQm9ycm93ZWRCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4
Miw2ICsxODcsMzggQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQog
ICAgIH0KIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIHN0
ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKKworICAgIG1fYmxvY2tGaWx0ZXIucmVz
ZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOworCisgICAgQ29waWVk
QmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgc2l6
ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0g
bV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0
ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9j
ay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAgICAgICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2so
YmxvY2spOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdG90YWxM
aXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOworICAgICAgICB0b3RhbFVzYWJsZUJ5dGVz
ICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2Vk
U3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJs
ZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNw
YWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMp
OworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9u
czo6bWF4Q29waWVkU3BhY2VGcmFnbWVudGF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29w
eVBoYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFz
ZSk7CisgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVy
T2ZMb2FuZWRCbG9ja3MpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB2b2lk
IENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiB7CiAgICAgewpAQCAtMTkwLDEyICsyMjcsMTMg
QEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICAgICAgbV9sb2FuZWRC
bG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwogICAgIH0KIAotICAgIEFT
U0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBt
X3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CisKICAg
ICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29waWVkQmxvY2sq
IGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5t
X2lzUGlubmVkKSB7Ci0gICAgICAgICAgICBibG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOworICAg
ICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAg
ICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0
IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92
ZWQuCiAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAg
ICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykp
OwpAQCAtMjEwLDEzICsyNDgsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQog
ICAgIENvcGllZEJsb2NrKiBjdXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7CiAgICAgd2hp
bGUgKGN1cnIpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0g
ICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5lZCkgeworICAgICAgICBpZiAoIWN1cnItPmlzUGlu
bmVkKCkpIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGN1cnIpOwogICAg
ICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoY3Vycik7CiAgICAgICAgICAgICBDb3BpZWRCbG9j
azo6ZGVzdHJveShjdXJyKS5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGN1cnIpKTsKLSAg
ICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnItPmRp
ZFN1cnZpdmVHQygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBuZXh0OwogICAgIH0KQEAg
LTIyNSw2ICsyNjMsOCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAg
IGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCiAgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJl
bnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0g
ZmFsc2U7CiB9CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDYgKzQ2LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3Bp
ZWRTcGFjZSB7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFz
cyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVibGljOgpAQCAtNzQsNiAr
NzUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKICAgICBib29sIGlzUGFn
ZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKKyAgICBib29sIHNob3VsZERvQ29weVBoYXNlKCkgeyBy
ZXR1cm4gbV9zaG91bGREb0NvcHlQaGFzZTsgfQogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBi
bG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFs
bG9jYXRlQmxvY2soKTsKICAgICBDb3BpZWRCbG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQ
aGFzZSgpOwogCi0gICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKik7Ci0gICAg
dm9pZCByZWN5Y2xlQmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICB2b2lkIGRvbmVGaWxsaW5nQmxv
Y2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKKyAgICB2b2lkIHJlY3ljbGVFdmFjdWF0
ZWRCbG9jayhDb3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2soQ29w
aWVkQmxvY2sqKTsKIAogICAgIEhlYXAqIG1faGVhcDsKIApAQCAtMTA4LDYgKzExMSw3IEBAIHBy
aXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9vdmVyc2l6ZUJsb2Nr
czsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKKyAgICBib29sIG1fc2hvdWxkRG9D
b3B5UGhhc2U7CiAKICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENv
bmRpdGlvbiBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIwIEBAIGlubGluZSB2b2lk
IENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAot
aW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENv
cGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewot
ICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKLQotICAgIG1fYmxvY2tGaWx0
ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAg
QVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRC
bG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAgIEFTU0VSVChibG9jayk7
CisgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOworICAgIEFTU0VSVCghYmxvY2st
Pm1faXNQaW5uZWQpOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3Rv
U3BhY2VMb2NrKTsKKyAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICBt
X2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICB9CisgICAgbV9oZWFwLT5ibG9ja0FsbG9j
YXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KIAotaW5s
aW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCitp
bmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sq
IGJsb2NrKQogewogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGll
ZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIK
KworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkdDVGhy
ZWFkU2hhcmVkRGF0YS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworQ29w
eVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQorICAgIDog
bV9zaGFyZWQoc2hhcmVkKQoreworfQorCit2b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJl
ZCgpCit7CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIFZlY3Rv
cjxNYXJrZWRCbG9jayo+JiBibG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5tX2Jsb2Nrc1RvQ29weTsK
KyAgICBzaXplX3Qgc3RhcnRJbmRleCwgZW5kSW5kZXg7CisKKyAgICBtX3NoYXJlZC5nZXROZXh0
QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3aGlsZSAoc3RhcnRJbmRl
eCA8IGVuZEluZGV4KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kSW5kZXg7IGkrKykKKyAgICAgICAgICAgIGJsb2Nrc1RvQ29weVtpXS0+Zm9yRWFjaExpdmVD
ZWxsKGZ1bmN0b3IpOworICAgICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0
SW5kZXgsIGVuZEluZGV4KTsKKyAgICB9CisgICAgQVNTRVJUKHN0YXJ0SW5kZXggPT0gZW5kSW5k
ZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JfaAorCisj
aW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDVGhy
ZWFkU2hhcmVkRGF0YTsKKworY2xhc3MgQ29weVZpc2l0b3IgeworcHVibGljOgorICAgIENvcHlW
aXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOworCisgICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgp
OworCisgICAgdm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CisK
KyAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMg
d2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcworICAgIC8vIGFyZSBkaXNjb250aWd1
b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5l
ZWQgdG8gZm9jdXMgb24KKyAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFz
IGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCisgICAgYm9vbCBjaGVj
a0lmU2hvdWxkQ29weSh2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCk7CisgICAgdm9pZCBkaWRDb3B5KHZvaWQqLCBzaXplX3QpOworCitwcml2YXRlOgor
ICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CisKKyAgICBHQ1RocmVhZFNo
YXJlZERhdGEmIG1fc2hhcmVkOworICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRv
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxp
bmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBDb3B5VmlzaXRvcklu
bGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJKU0Nl
bGwuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgR0NDb3B5UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7CitwdWJsaWM6CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2
aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgJiYgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBOb25B
cnJheSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmNvcHlCYWNraW5nU3RvcmUgPT0gSlNPYmplY3Q6OmNvcHlC
YWNraW5nU3RvcmUpOworICAgICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCBt
X3Zpc2l0b3IpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb3B5VmlzaXRvciYgbV92aXNpdG9y
OworfTsKKworaW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQq
IG9sZFB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6
ZShieXRlcykpIHsKKyAgICAgICAgQVNTRVJUKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9y
KG9sZFB0ciktPmlzUGlubmVkKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKENvcGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpLT5pc1Bpbm5lZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQqIENv
cHlWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBy
ZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBh
c3NpZ25lZC4KKyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5
dGVzLCAmcmVzdWx0KSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0
ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOworICAgIEFTU0VSVChyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9ICAgICAgIAorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFs
bG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBieXRlcykKK3sKKyAgICBDb3BpZWRCbG9jayogbmV3
QmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2so
bV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKKyAgICBt
X2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOworCisgICAgdm9pZCog
cmVzdWx0ID0gMDsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxv
Y2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVk
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3Rh
cnRDb3B5aW5nKCkKK3sKKyAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7
CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNl
LT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCks
ICZibG9jayk7CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsK
K30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKK3sKKyAgICBpZiAo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
aGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5y
ZXNldEN1cnJlbnRCbG9jaygpLCAwKTsKK30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRp
ZENvcHkodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKCFDb3BpZWRTcGFj
ZTo6aXNPdmVyc2l6ZShieXRlcykpOworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNw
YWNlOjpibG9ja0ZvcihwdHIpOworICAgIEFTU0VSVCghYmxvY2stPmlzUGlubmVkKCkpOworCisg
ICAgaWYgKGJsb2NrLT5kaWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKSkKKyAgICAgICAgbV9zaGFyZWQu
bV9jb3BpZWRTcGFjZS0+cmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKKworI2luY2x1ZGUgIkNv
cHlWaXNpdG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5j
bHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitHQ1RocmVhZDo6R0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRh
JiBzaGFyZWQsIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvciwgQ29weVZpc2l0b3IqIGNvcHlWaXNp
dG9yLCBzaXplX3QgaW5kZXgpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3NoYXJlZChz
aGFyZWQpCisgICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6YWRvcHRQdHIoc2xvdFZpc2l0b3IpKQor
ICAgICwgbV9jb3B5VmlzaXRvcihXVEY6OmFkb3B0UHRyKGNvcHlWaXNpdG9yKSkKKyAgICAsIG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK1RocmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVhZElE
KCkKK3sKKyAgICBBU1NFUlQobV90aHJlYWRJRCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cit9
CisKK3ZvaWQgR0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKQoreworICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgbV90aHJlYWRJRCA9IHRo
cmVhZElEOworfQorCitTbG90VmlzaXRvciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKK3sKKyAg
ICBBU1NFUlQobV9zbG90VmlzaXRvcik7CisgICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0KCk7
Cit9CisKK0NvcHlWaXNpdG9yKiBHQ1RocmVhZDo6Y29weVZpc2l0b3IoKQoreworICAgIEFTU0VS
VChtX2NvcHlWaXNpdG9yKTsKKyAgICByZXR1cm4gbV9jb3B5VmlzaXRvci5nZXQoKTsKK30KKwor
dm9pZCBHQ1RocmVhZDo6c3luY2hyb25pemVXaXRoKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90YXNrUXVldWVMb2NrKTsKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSkK
KyAgICAgICAgbV90YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworfQor
CitHQ1Rhc2sgR0NUaHJlYWQ6OndhaXRGb3JOZXh0VGFzaygpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdGFza1F1ZXVlTG9jayk7CisgICAgd2hpbGUgKG1fdGFza1F1ZXVlLmlzRW1wdHko
KSkgeworICAgICAgICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgbV90
YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworICAgIH0KKyAgICBHQ1Rh
c2sgbmV4dFRhc2sgPSAqbV90YXNrUXVldWUuYmVnaW4oKTsKKyAgICBtX3Rhc2tRdWV1ZS5yZW1v
dmVGaXJzdCgpOworICAgIHJldHVybiBuZXh0VGFzazsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NU
aHJlYWRNYWluKCkKK3sKKyAgICBHQ1Rhc2sgY3VycmVudFRhc2s7CisjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQorICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOworI2VuZGlmCisgICAgLy8gV2Fp
dCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGZpbmlzaCBjcmVhdGluZyB1cy4KKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoKm1fc2xvdFZpc2l0b3Ip
OworICAgICAgICB3aGlsZSAoKGN1cnJlbnRUYXNrID0gd2FpdEZvck5leHRUYXNrKCkpICE9IEV4
aXQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudFRhc2spIHsKKyAgICAgICAgICAgIGNh
c2UgTWFyazoKKyAgICAgICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQo
U2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBSZXNldFNsb3RWaXNpdG9yOgorICAgICAgICAgICAgICAgIG1fc2xvdFZpc2l0
b3ItPnJlc2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENv
cHk6CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHN0YXJ0Q29weWlu
ZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAg
ICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJvbVNoYXJlZCgpOworICAgICAgICAgICAg
ICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFN5bmNocm9uaXplOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBFeGl0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0
RnVuYyh2b2lkKiBkYXRhKQoreworICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxH
Q1RocmVhZCo+KGRhdGEpOworICAgIHRocmVhZC0+Z2NUaHJlYWRNYWluKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0NUaHJlYWRf
aAorI2RlZmluZSBHQ1RocmVhZF9oCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Citj
bGFzcyBTbG90VmlzaXRvcjsKKworZW51bSBHQ1Rhc2sgeworICAgIE1hcmssCisgICAgUmVzZXRT
bG90VmlzaXRvciwKKyAgICBDb3B5LAorICAgIFN5bmNocm9uaXplLAorICAgIEV4aXQKK307CisK
K2NsYXNzIEdDVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBHQ1RocmVhZChHQ1RocmVhZFNoYXJlZERh
dGEmLCBTbG90VmlzaXRvciosIENvcHlWaXNpdG9yKiwgc2l6ZV90KTsKKworICAgIFNsb3RWaXNp
dG9yKiBzbG90VmlzaXRvcigpOworICAgIENvcHlWaXNpdG9yKiBjb3B5VmlzaXRvcigpOworICAg
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVUaHJlYWRJ
RChUaHJlYWRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGVucXVldWVUYXNrKEdDVGFzayk7CisgICAg
dm9pZCBzeW5jaHJvbml6ZVdpdGgoKTsKKworICAgIHN0YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRG
dW5jKHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGdjVGhyZWFkTWFpbigpOworICAgIEdD
VGFzayB3YWl0Rm9yTmV4dFRhc2soKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJ
RDsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworICAgIE93blB0cjxTbG90Vmlz
aXRvcj4gbV9zbG90VmlzaXRvcjsKKyAgICBPd25QdHI8Q29weVZpc2l0b3I+IG1fY29weVZpc2l0
b3I7CisgICAgc2l6ZV90IG1faW5kZXg7CisgICAgTXV0ZXggbV90YXNrUXVldWVMb2NrOworICAg
IFRocmVhZENvbmRpdGlvbiBtX3Rhc2tRdWV1ZUNvbmRpdGlvbjsKKyAgICBEZXF1ZTxHQ1Rhc2s+
IG1fdGFza1F1ZXVlOworfTsKKworaW5saW5lIHZvaWQgR0NUaHJlYWQ6OmVucXVldWVUYXNrKEdD
VGFzayB0YXNrKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rhc2tRdWV1ZUxvY2spOwor
ICAgIG1fdGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5z
aWduYWwoKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJl
dmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hh
cmVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQ1ICsyNiwyOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogCisjaW5jbHVkZSAi
Q29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNp
bmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hh
cmVkRGF0YTo6cmVzZXRDaGlsZHJlbigpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWFya2lu
Z1RocmVhZHNNYXJrU3RhY2tbaV0tPnJlc2V0KCk7CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJU
aHJlYWRzKFJlc2V0U2xvdFZpc2l0b3IpOwogfQogCiBzaXplX3QgR0NUaHJlYWRTaGFyZWREYXRh
OjpjaGlsZFZpc2l0Q291bnQoKQogeyAgICAgICAKICAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1RocmVhZHNNYXJrU3Rh
Y2suc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX21hcmtpbmdUaHJlYWRzTWFya1N0
YWNrW2ldLT52aXNpdENvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NU
aHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNs
b3RWaXNpdG9yKCktPnZpc2l0Q291bnQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQotCi12b2lk
IEdDVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3IqIHNsb3RW
aXNpdG9yKQotewotICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIHsKLSAgICAgICAg
UGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCpzbG90VmlzaXRvcik7Ci0gICAgICAgIHNsb3RW
aXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgIH0K
LSAgICBkZWxldGUgc2xvdFZpc2l0b3I7Ci19Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpt
YXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIG15VmlzaXRvcikKLXsgICAgICAgICAgICAgICAK
LSAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBzdGF0aWNfY2FzdDxTbG90VmlzaXRvcio+
KG15VmlzaXRvcik7Ci0KLSAgICBzbG90VmlzaXRvci0+c2hhcmVkRGF0YSgpLm1hcmtpbmdUaHJl
YWRNYWluKHNsb3RWaXNpdG9yKTsKLX0KICNlbmRpZgogCiBHQ1RocmVhZFNoYXJlZERhdGE6OkdD
VGhyZWFkU2hhcmVkRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC03NCwxMyArNTgs
MjEgQEAgR0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEoSgogICAgICwgbV9z
aGFyZWRNYXJrU3RhY2sobV9zZWdtZW50QWxsb2NhdG9yKQogICAgICwgbV9udW1iZXJPZkFjdGl2
ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KGZh
bHNlKQorICAgICwgbV9ibG9ja3NUb0NvcHkoZ2xvYmFsRGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNo
b3QpCisgICAgLCBtX2NvcHlJbmRleCgwKQogeworICAgIG1fY29weUxvY2suSW5pdCgpOwogI2lm
IEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFiIHRoZSBsb2NrIHNvIHRoZSBuZXcgR0Mg
dGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgc3RhcnQgcnVu
bmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgewog
ICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMp
OwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChzbG90VmlzaXRvcik7
Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZChtYXJraW5nVGhy
ZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIikpOwot
ICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5sYXN0KCkpOworICAgICAgICBDb3B5Vmlz
aXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0b3IoKnRoaXMpOworICAgICAgICBzaXpl
X3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7CisgICAgICAgIEdDVGhyZWFkKiBuZXdUaHJl
YWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNpdG9yLCBjb3B5VmlzaXRvciwgaW5kZXgp
OworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKEdDVGhy
ZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtp
bmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFsaXplVGhyZWFkSUQodGhyZWFkSUQpOwor
ICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKICAgICB9CiAjZW5kaWYKIH0K
QEAgLTkyLDE2ICs4NCwxNyBAQCBHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERh
dGEoCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7CiAg
ICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRydWU7Ci0gICAgICAgIG1fbWFy
a2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICAgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJU
aHJlYWRzKEV4aXQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1Ro
cmVhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9n
Y1RocmVhZHNbaV0tPnRocmVhZElEKCkpOworICAgICAgICBkZWxldGUgbV9nY1RocmVhZHNbaV07
CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hcmtpbmdUaHJlYWRzLnNp
emUoKTsgKytpKQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX21hcmtpbmdUaHJl
YWRzW2ldKTsKICNlbmRpZgogfQogICAgIAogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0
KCkKIHsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMpOwogICAg
IEFTU0VSVCghbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KTsKICAgICBBU1NFUlQobV9zaGFy
ZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKICAgICAKQEAgLTExOSw0ICsxMTIsNTggQEAgdm9pZCBH
Q1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICB9CiB9CiAKK3ZvaWQgR0NUaHJlYWRTaGFy
ZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoR0NUYXNrIHRhc2spCit7CisgICAg
VGhyZWFkSWRlbnRpZmllciBjdXJyZW50VGhyZWFkSUQgPSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBtX2djVGhyZWFkc1tpXTsKKyAgICAgICAgaWYgKHRo
cmVhZC0+dGhyZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFkSUQpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgdGhyZWFkLT5lbnF1ZXVlVGFzayh0YXNrKTsKKyAgICB9Cit9CisKK3ZvaWQg
R0NUaHJlYWRTaGFyZWREYXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKCkKK3sKKyAg
ICBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoU3luY2hyb25pemUpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgR0NUaHJl
YWQqIHRocmVhZCA9IG1fZ2NUaHJlYWRzW2ldOworICAgICAgICBBU1NFUlQodGhyZWFkLT50aHJl
YWRJRCgpICE9IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgdGhyZWFkLT5zeW5jaHJv
bml6ZVdpdGgoKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFy
dE1hcmtpbmcoKQoreworICAgIGRpc3BhdGNoVGFza1RvV29ya2VyVGhyZWFkcyhNYXJrKTsKK30K
Kwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaE1hcmtpbmcoKQoreworICAgIC8v
IFdlIG5lZWQgdG8gc3luY2hyb25pemUgaWYgd2UgY2FyZSBhYm91dCBhY2N1cmF0ZSBsb2dnaW5n
IGNvdW50cy4KKyNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKKyAgICBzeW5jaHJvbml6
ZVdpdGhXb3JrZXJUaHJlYWRzKCk7CisjZW5kaWYKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERh
dGE6OmRpZFN0YXJ0Q29weWluZygpCit7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBs
b2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBtX2Jsb2Nrc1RvQ29weSA9IG1fZ2xvYmFsRGF0
YS0+aGVhcC5tX2Jsb2NrU25hcHNob3Q7CisgICAgICAgIG1fY29weUluZGV4ID0gMDsKKyAgICB9
CisgICAgLy8gV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgYSByYWNlIGNvbmRpdGlv
biB3aGVyZSB0aGUgbWFpbiB0aHJlYWQgY2FuIAorICAgIC8vIGJsb3cgdGhyb3VnaCBhbGwgb2Yg
dGhlIGNvcHlpbmcgd29yayBiZWZvcmUgdGhlIEdDVGhyZWFkcyBmdWxseSB3YWtlIHVwLiAKKyAg
ICAvLyBUaGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBhIGJsb2NrIGZyb20gdGhlIENvcGllZFNw
YWNlIHdoZW4gdGhlIGNvcHlpbmcgcGhhc2UgCisgICAgLy8gaGFzIGNvbXBsZXRlZCwgd2hpY2gg
aXNuJ3QgYWxsb3dlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNp
emUoKTsgaSsrKQorICAgICAgICBtX2djVGhyZWFkc1tpXS0+Y29weVZpc2l0b3IoKS0+c3RhcnRD
b3B5aW5nKCk7CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKENvcHkpOworfQorCit2
b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoQ29weWluZygpCit7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSAr
MjYsMTQgQEAKICNpZm5kZWYgR0NUaHJlYWRTaGFyZWREYXRhX2gKICNkZWZpbmUgR0NUaHJlYWRT
aGFyZWREYXRhX2gKIAorI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGlzdGFibGVI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2su
aCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1RDU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC0zOCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0dsb2JhbERhdGE7CiBjbGFzcyBDb3BpZWRTcGFjZTsKK2NsYXNzIENvcHlWaXNpdG9yOwog
CiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGEgewogcHVibGljOgpAQCAtNDYsNiArNTAsMTEgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgZGlkU3RhcnRNYXJr
aW5nKCk7CisgICAgdm9pZCBkaWRGaW5pc2hNYXJraW5nKCk7CisgICAgdm9pZCBkaWRTdGFydENv
cHlpbmcoKTsKKyAgICB2b2lkIGRpZEZpbmlzaENvcHlpbmcoKTsKKwogI2lmIEVOQUJMRShQQVJB
TExFTF9HQykKICAgICB2b2lkIHJlc2V0Q2hpbGRyZW4oKTsKICAgICBzaXplX3QgY2hpbGRWaXNp
dENvdW50KCk7CkBAIC01MywxMiArNjIsMTMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZp
c2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogCi0jaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQotICAgIHZvaWQgbWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3IqKTsKLSAgICBz
dGF0aWMgdm9pZCBtYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXApOwotI2VuZGlmCisg
ICAgdm9pZCBkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoR0NUYXNrKTsKKyAgICB2b2lkIHN5
bmNocm9uaXplV2l0aFdvcmtlclRocmVhZHMoKTsKKyAgICB2b2lkIGdldE5leHRCbG9ja3NUb0Nv
cHkoc2l6ZV90Jiwgc2l6ZV90Jik7CiAKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
ICAgICBDb3BpZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsKQEAgLTY3LDkgKzc3LDggQEAgcHJpdmF0
ZToKICAgICAKICAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OwogCi0gICAgVmVjdG9yPFRocmVh
ZElkZW50aWZpZXI+IG1fbWFya2luZ1RocmVhZHM7Ci0gICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4g
bV9tYXJraW5nVGhyZWFkc01hcmtTdGFjazsKLSAgICAKKyAgICBWZWN0b3I8R0NUaHJlYWQqPiBt
X2djVGhyZWFkczsKKwogICAgIE11dGV4IG1fbWFya2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0
aW9uIG1fbWFya2luZ0NvbmRpdGlvbjsKICAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJlZE1hcmtT
dGFjazsKQEAgLTc5LDEwICs4OCwyMyBAQCBwcml2YXRlOgogICAgIE11dGV4IG1fb3BhcXVlUm9v
dHNMb2NrOwogICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKKyAgICBTcGluTG9j
ayBtX2NvcHlMb2NrOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1RvQ29weTsK
KyAgICBzaXplX3QgbV9jb3B5SW5kZXg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2Nr
RnJhZ21lbnRMZW5ndGggPSAzMjsKKwogICAgIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNl
SGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwogICAgIExpc3RhYmxl
SGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0Qmxv
Y2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKKyAgICBl
bmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9j
a0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRleCA9IGVuZDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1ZGUg
IkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNp
bmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNs
dWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAt
MjUyLDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEK
ICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShnbG9iYWxE
YXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAgLCBtX2NvcHlWaXNp
dG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERhdGEpCiAgICAgLCBt
X2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpA
QCAtNDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAg
ICAgICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsKICAgICB9CiAKLSAgICBtX3N0b3JhZ2VT
cGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydE1hcmtpbmco
KTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgdmlzaXRv
ci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7
CkBAIC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAK
ICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsK
IAotICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNo
TWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQogICAgIHNpemVfdCB2
aXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dD
KQpAQCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykK
ICAgICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwogI2VuZGlmCiAgICAgbV9zaGFyZWRE
YXRhLnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQoreworICAg
IG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgaWYgKG1fc3RvcmFnZVNwYWNl
LnNob3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29w
eWluZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlzaXRvciA9IG1fY29weVZpc2l0b3I7Cisg
ICAgICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAgIHZpc2l0b3IuY29weUZyb21T
aGFyZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICBtX3NoYXJl
ZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0gCiAgICAgbV9zdG9yYWdlU3BhY2UuZG9u
ZUNvcHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3Qo
U3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAK
ICAgICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9j
a3MoKS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5RnVuY3RvciBmdW5jdG9yKG1fYmxvY2tT
bmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwor
ICAgIH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CisKKyAgICB7CiAgICAgICAgIEdDUEhB
U0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAgIGZpbmFsaXplVW5j
b25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBAIC03NTUsNyArNzc4LDcgQEAgdm9pZCBI
ZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVjdFNwYWNl
LnNocmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyhtX29iamVj
dFNwYWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9i
bG9ja1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKIAogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBA
QAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAi
R0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0xODIsNyAr
MTgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxv
Y2F0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAgICAgZnJpZW5k
IGNsYXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIElu
Y3JlbWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhl
YXAmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRl
Q2VsbChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxsR0MpOwogICAgICAgICB2b2lkIG1hcmtQ
cm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1hcmtUZW1w
U29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgY29weUJhY2tpbmdT
dG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAgIHZvaWQgZGVs
ZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIzOSw2ICsyNDMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7
CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgICAgIENvcHlWaXNpdG9y
IG1fY29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAg
ICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtMjU2LDYgKzI2MSwyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0
eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKKyAgICAg
ICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBzaG90OworICAgIH07CisKKyAgICBz
dHJ1Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAg
ICAgICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisgICAgICAg
ICAgICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9j
ayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgCisgICAgICAg
IHNpemVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7
CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1l
bnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHN0YXRpYyBj
b25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5j
cmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5Mb29wKQogICAgIDog
SGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKICAgICAsIG1fY3VycmVudEJs
b2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9ibG9ja1Nu
YXBzaG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2Vl
cGVyOjpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAKLXZvaWQgSW5jcmVtZW50YWxTd2VlcGVy
OjpzdGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hv
dCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRC
bG9jayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1fYmxvY2tzVG9Td2VlcC5yZXNpemUoYmxv
Y2tTbmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5jdG9yIGZ1bmN0b3IobV9ibG9ja3NUb1N3
ZWVwKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2so
ZnVuY3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2tTbmFwc2hvdDsKICAgICBtX2N1
cnJlbnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAgc2NoZWR1bGVUaW1lcigpOwogfQpAQCAt
MTYwLDcgKzE1OSw3IEBAIEluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjoK
ICAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpOwog
fQogCi12b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0
PE1hcmtlZEJsb2NrKj4mKQordm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmco
VmVjdG9yPE1hcmtlZEJsb2NrKj4mKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24gMTMwNjQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDIzICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsK
IAotc3RydWN0IENvcHlGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7
Ci0gICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAg
IDogbV9pbmRleCgwKSAKLSAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9p
bmRleCsrXSA9IGJsb2NrOyB9Ci0KLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBWZWN0b3I8TWFy
a2VkQmxvY2sqPiYgbV9ibG9ja3M7Ci19OwotCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBw
dWJsaWMgSGVhcFRpbWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5jcmVtZW50YWxTd2VlcGVy
KiBjcmVhdGUoSGVhcCopOwotICAgIHZvaWQgc3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1h
cmtlZEJsb2NrKj4mIGJsb2NrU25hcHNob3QpOworICAgIHZvaWQgc3RhcnRTd2VlcGluZyhWZWN0
b3I8TWFya2VkQmxvY2sqPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKTsKICAgICB2b2lk
IHN3ZWVwTmV4dEJsb2NrKCk7CiAgICAgdm9pZCB3aWxsRmluaXNoU3dlZXBpbmcoKTsKQEAgLTcx
LDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbFRpbWVyKCk7CiAgICAgCiAgICAg
dW5zaWduZWQgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXg7Ci0gICAgVmVjdG9yPE1hcmtlZEJs
b2NrKj4gbV9ibG9ja3NUb1N3ZWVwOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nr
c1RvU3dlZXA7CiAjZWxzZQogICAgIAogICAgIEluY3JlbWVudGFsU3dlZXBlcihKU0dsb2JhbERh
dGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCB2b2lkIFNsb3RWaXNpdG9y
OjpzZXR1cCgpCiAgICAgbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX2ds
b2JhbERhdGEtPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3QoKTsKICAgICBtX3Nob3Vs
ZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0OwogI2lmIEVOQUJMRShQQVJB
TExFTF9HQykKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9tYXJraW5n
VGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgbV9zaGFyZWQubV9tYXJraW5n
VGhyZWFkc01hcmtTdGFja1tpXS0+bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3Vs
ZEhhc2hDb25zdDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9nY1Ro
cmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fc2hhcmVkLm1fZ2NUaHJlYWRzW2ldLT5zbG90
VmlzaXRvcigpLT5tX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0
OwogI2VuZGlmCiB9CiAKQEAgLTExMiw4ICsxMTIsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9u
YXRlS25vd25QYXJhbGxlbCgpCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVh
ZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KICAgICBtX3N0YWNrLmRvbmF0ZVNvbWVD
ZWxsc1RvKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrKTsKIAotICAgIGlmIChtX3NoYXJlZC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtl
cnMoKSkKLSAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwor
ICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9u
czo6bnVtYmVyT2ZHQ01hcmtlcnMoKSkgeworICAgICAgICBtX3NoYXJlZC5kaXNwYXRjaFRhc2tU
b1dvcmtlclRocmVhZHMoTWFyayk7CisgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlv
bi5zaWduYWwoKTsKKyAgICB9CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKQEAgLTE4
MSw4ICsxODMsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAg
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlk
IHdlIHJlYWNoIHRlcm1pbmF0aW9uPwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVk
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNs
ZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byBnaXZlIHRoZWlyIHByaXZh
dGUgQ29waWVkQmxvY2tzIGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1f
bWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE5
NiwyMSArMTk2LDE2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWlu
TW9kZSA9PSBTbGF2ZURyYWluKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAv
LyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4K
LSAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgd2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFy
a1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29weWluZygpOwotICAgICAgICAgICAgICAgICAg
ICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24ud2FpdChtX3NoYXJlZC5tX21hcmtpbmdMb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSB0aGUgZW5kIG9m
IHRoaXMgbGl0dGxlIGJpdCBvZiB3b3JrLCBzbyBub3RpZnkgdGhlIG1hc3RlciB0aHJlYWQuCisg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRp
dGlvbi5zaWduYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgVk0gZXhp
dGluZz8gSWYgc28sIGV4aXQgdGhpcyB0aHJlYWQuCi0gICAgICAgICAgICAgICAgaWYgKG1fc2hh
cmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkgewotICAgICAgICAgICAgICAgICAgICBk
b25lQ29weWluZygpOworICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFsbGVsTWFy
a2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgc2l6ZV90IGlk
bGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgLSBtX3NoYXJlZC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwpAQCAtMjM2LDMwICsyMzEsNiBAQCB2b2lk
IFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKICAgICBtX29wYXF1ZVJvb3RzLmNsZWFy
KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZygpCi17Ci0gICAgQVNTRVJU
KCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpOwotfQotCi12b2lkKiBTbG90VmlzaXRvcjo6
YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVzKQotewotICAgIG1fc2hhcmVkLm1fY29w
aWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50
QmxvY2soKSk7Ci0gICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG1fc2hhcmVk
Lm1fY29waWVkU3BhY2UtPmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKSk7Ci0KLSAgICB2
b2lkKiByZXN1bHQgPSAwOwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGll
ZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7Ci0gICAgQVNTRVJUKGRpZFN1
Y2NlZWQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFNsb3RWaXNpdG9yOjphbGxv
Y2F0ZU5ld1NwYWNlT3JQaW4odm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKCFj
aGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShwdHIsIGJ5dGVzKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIGFsbG9jYXRlTmV3U3BhY2UoYnl0ZXMpOwotfQotCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKQogewogI2lmIEVO
QUJMRShQQVJBTExFTF9HQykKQEAgLTMzNSwzNiArMzA2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjppbnRlcm5hbAogICAgIGludGVybmFsQXBwZW5kKGNlbGwpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwdHIsIHNpemVfdCBieXRlcywg
SlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgdm9pZCogb2xkUHRyID0g
KnB0cjsKLSAgICB2b2lkKiBuZXdQdHIgPSBhbGxvY2F0ZU5ld1NwYWNlT3JQaW4ob2xkUHRyLCBi
eXRlcyk7Ci0gICAgaWYgKG5ld1B0cikgewotICAgICAgICBzaXplX3QganNWYWx1ZXNPZmZzZXQg
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZhbHVlcykgLSBz
dGF0aWNfY2FzdDxjaGFyKj4ob2xkUHRyKSk7Ci0KLSAgICAgICAgSlNWYWx1ZSogbmV3VmFsdWVz
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdQ
dHIpICsganNWYWx1ZXNPZmZzZXQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIEpTVmFsdWUmIHZhbHVlID0gdmFsdWVzW2ldOwot
ICAgICAgICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXZhbHVl
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50ZXJuYWxBcHBlbmQo
Jm5ld1ZhbHVlc1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobmV3UHRyLCBvbGRQ
dHIsIGpzVmFsdWVzT2Zmc2V0KTsKLSAgICAgICAgKnB0ciA9IG5ld1B0cjsKLSAgICB9IGVsc2UK
LSAgICAgICAgYXBwZW5kKHZhbHVlcywgbGVuZ3RoKTsKLX0KLSAgICAKLXZvaWQgU2xvdFZpc2l0
b3I6OmRvbmVDb3B5aW5nKCkKLXsKLSAgICBpZiAoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZp
bGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsKLX0KLQog
dm9pZCBTbG90VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICAgICBmb3IgKFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTMw
NjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBTbG90VmlzaXRvcl9oCiAjZGVmaW5l
IFNsb3RWaXNpdG9yX2gKIAotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiSGFu
ZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgiCiAKQEAgLTgw
LDIxICs3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwog
ICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogCi0gICAgdm9pZCBz
dGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGNvcHlMYXRlcih2b2lkKiwgc2l6ZV90KTsKICAgICAK
LSAgICAvLyBIaWdoLWxldmVsIEFQSSBmb3IgY29weWluZywgYXBwcm9wcmlhdGUgZm9yIGNhc2Vz
IHdoZXJlIHRoZSBvYmplY3QncyBoZWFwIHJlZmVyZW5jZXMKLSAgICAvLyBmYWxsIGludG8gYSBj
b250aWd1b3VzIHJlZ2lvbiBvZiB0aGUgc3RvcmFnZSBjaHVuayBhbmQgaWYgdGhlIG9iamVjdCBm
b3Igd2hpY2ggeW91J3JlCi0gICAgLy8gZG9pbmcgY29weWluZyBkb2VzIG5vdCBvY2N1ciBmcmVx
dWVudGx5LgotICAgIHZvaWQgY29weUFuZEFwcGVuZCh2b2lkKiosIHNpemVfdCwgSlNWYWx1ZSos
IHVuc2lnbmVkKTsKLSAgICAKLSAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHBy
b3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcwotICAg
IC8vIGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkg
ZW5vdWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24KLSAgICAvLyBwZXJmb3JtYW5jZS4gVXNl
IHRoaXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZv
b3QuCi0gICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSh2b2lkKiBvbGRQ
dHIsIHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QpOwotICAgIAot
ICAgIHZvaWQgZG9uZUNvcHlpbmcoKTsgCi0gICAgICAgIAogI2lmIEVOQUJMRShTSU1QTEVfSEVB
UF9QUk9GSUxJTkcpCiAgICAgVlRhYmxlU3BlY3RydW0gbV92aXNpdGVkVHlwZUNvdW50czsKICNl
bmRpZgpAQCAtMTI1LDkgKzExMSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUo
KTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlT3JQaW4odm9pZCosIHNpemVfdCk7
Ci0gICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90KTsKLQogICAgIHZvaWQgZG9u
YXRlS25vd25QYXJhbGxlbCgpOwogCiAgICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKQEAgLTE0
Niw4ICsxMjksNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9nQ2hpbGRDb3VudDsKICNl
bmRpZgogCi0gICAgQ29waWVkQWxsb2NhdG9yIG1fY29waWVkQWxsb2NhdG9yOwotCiBwdWJsaWM6
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNiwzMCArMTM2LDYgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdl
T3BhcXVlUm9vdAogICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKIH0KICAgICAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBTbG90VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2Uodm9p
ZCogb2xkUHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJz
aXplKGJ5dGVzKSkgewotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oQ29waWVk
U3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iob2xkUHRyKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+aXNQaW5uZWQob2xkUHRy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBi
eXRlcykKLXsKLSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6
ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1fY29waWVkQWxs
b2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgCi0gICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOwotICAg
IEFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgICAgIAotCiBpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxN
b2RlKTsKQEAgLTE3NSw2ICsxNTEsMjMgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZUFuZERyYWluKAogICAgIGRyYWluKCk7CiB9CiAKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpj
b3B5TGF0ZXIodm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKENvcGllZFNwYWNl
Ojppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5w
aW4oQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3Io
cHRyKTsKKyAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJsb2NrLT5yZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOworCisgICAgaWYgKCFibG9jay0+c2hvdWxk
RXZhY3VhdGUoKSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKGJsb2NrKTsK
K30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eS5oCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
dXR0ZXJmbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIEpTR2xvYmFsRGF0YTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQ29w
eVZpc2l0b3I7CiBzdHJ1Y3QgQXJyYXlTdG9yYWdlOwogCiBjbGFzcyBCdXR0ZXJmbHkgewpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVV
bmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBh
Y2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNp
emVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSog
Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImLCBzaXplX3Qg
cHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVh
ZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEluZGV4
aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9t
KHRoaXMpOyB9CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29u
c3QgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAog
I2luY2x1ZGUgIkFycmF5U3RvcmFnZS5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01OSw3ICs1OSw3IEBA
IGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2wKICAgICByZXR1cm4gY3Jl
YXRlKGdsb2JhbERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5k
ZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCks
IDApOwogfQogCi1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJm
bHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNp
dG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhh
c0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAg
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKICAgICAgICAgdmlzaXRvci5hbGxvY2F0
ZU5ld1NwYWNlKHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5k
ZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTMwNjQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAo
KlZpc2l0Q2hpbGRyZW5GdW5jdGlvblB0cikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAg
ICAgVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyIHZpc2l0Q2hpbGRyZW47CiAKKyAgICAgICAgdHlw
ZWRlZiB2b2lkICgqQ29weUJhY2tpbmdTdG9yZUZ1bmN0aW9uUHRyKShKU0NlbGwqLCBDb3B5Vmlz
aXRvciYpOworICAgICAgICBDb3B5QmFja2luZ1N0b3JlRnVuY3Rpb25QdHIgY29weUJhY2tpbmdT
dG9yZTsKKwogICAgICAgICB0eXBlZGVmIENhbGxUeXBlICgqR2V0Q2FsbERhdGFGdW5jdGlvblB0
cikoSlNDZWxsKiwgQ2FsbERhdGEmKTsKICAgICAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBn
ZXRDYWxsRGF0YTsKIApAQCAtMTE2LDYgKzExOSw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVt
YmVyIHsgXAogI2RlZmluZSBDUkVBVEVfTUVUSE9EX1RBQkxFKENsYXNzTmFtZSkgeyBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmRlc3Ryb3ksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGls
ZHJlbiwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpjb3B5QmFja2luZ1N0b3JlLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0
cnVjdERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDYgKzM4LDEwIEBAIHZvaWQgSlNDZWxsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBjZWxs
LT5KU0NlbGw6On5KU0NlbGwoKTsKIH0KIAordm9pZCBKU0NlbGw6OmNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiwgQ29weVZpc2l0b3ImKQoreworfQorCiBib29sIEpTQ2VsbDo6Z2V0U3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgU3RyaW5nJiBzdHJpbmdWYWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlz
U3RyaW5nKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2
aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAg
ICBjbGFzcyBDb3B5VmlzaXRvcjsKICAgICBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdDsKICAg
ICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CkBAIC0xMTIsNiArMTEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tp
bmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAgICAgIC8vIE9iamVjdCBvcGVy
YXRpb25zLCB3aXRoIHRoZSB0b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCiAgICAgICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMzA2NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRXJy
b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgpAQCAtOTQsMTAgKzk1
LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9
CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0
b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZp
c2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7CiAgICAg
QVNTRVJUKGJ1dHRlcmZseSk7Ci0gICAgCisKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRo
aXMtPnN0cnVjdHVyZSgpOwogICAgIAogICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwpAQCAtMTExLDUxICsxMTIsNjYgQEAgQUxXQVlT
X0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICBwcmVDYXBhY2l0eSA9
IDA7CiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKICAgICB9Ci0gICAg
c2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAotICAgICAgICBw
cmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFu
ZFBpbk90aGVyd2lzZSgKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xs
ZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgICAgICAKLSAgICAgICAg
Ly8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5
dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICBp
ZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHks
IHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbigKKyAgICAgICAgICAgIHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCiAg
ICAgICAgIFByb3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKTsKICAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBi
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9
IHN0b3JhZ2VTaXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgt
LWN1cnJlbnRTb3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAg
ICAgICgtLWN1cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVy
KSkgewogICAgICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0
ZXJmbHktPmluZGV4aW5nSGVhZGVyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE1h
cmsgYW5kIGNvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICAgICAgc3dpdGNo
IChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKSk7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJy
ZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAg
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsg
Y291bnQtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50
U291cmNlKyspLT5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQotICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXApOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KQorICAgICAgICAgICAg
ICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoY3VycmVu
dFNvdXJjZSsrKS0+Z2V0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0
dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5
dGVzKTsKICAgICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfQorfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2
aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQoreworICAg
IEFTU0VSVChidXR0ZXJmbHkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAg
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5n
SGVhZGVyID0gSlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNh
cGFjaXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1
cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKICAg
ICB9IGVsc2UgewotICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNp
emUsIHN0b3JhZ2VTaXplKTsKLSAgICAgICAgCisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKyAgICBzaXplX3Qg
Y2FwYWNpdHlJbkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3Bl
cnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CisKKyAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNp
emUpOworICAgIHZpc2l0b3IuY29weUxhdGVyKGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwg
cHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CisKKyAgICBpZiAoVU5MSUtFTFko
aGFzSW5kZXhpbmdIZWFkZXIpKSB7CiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJv
cHJpYXRlLgogICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKQEAgLTE4OSw2ICsy
MDUsMTYgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlm
CiB9CiAKK3ZvaWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgJnNfaW5mbyk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1
dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPmNvcHlC
dXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lU2l6ZSgpKTsKK30KKwogdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEzMDY0OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMCw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBKU0NlbGwg
QmFzZTsKICAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYp
OwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0Kik7CiAKQEAgLTU5MSw2ICs1OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVf
dCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYs
IEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAgICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFy
cmF5CiAgICAgICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAt
ODU0LDE0ICs4NTYsMTQgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNv
bgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CiAKLWlubGlu
ZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAoraW5s
aW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gY2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihpbmZvKTsKKyAgICByZXR1cm4gJmNs
YXNzSW5mbygpLT5tZXRob2RUYWJsZTsKIH0KIAotaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBK
U0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKK2lubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMo
Y29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAogewotICAgIHJldHVybiAmY2xhc3NJbmZvKCkt
Pm1ldGhvZFRhYmxlOworICAgIHJldHVybiBjbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGluZm8p
OwogfQogCiAvLyB0aGlzIG1ldGhvZCBpcyBoZXJlIHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVj
bGFyYXRpb24gb2YgSlNDZWxsOjppbmhlcml0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTMwNjQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgdih1bnNpZ25lZCwgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZSwg
cGFnZVNpemUoKSkgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRl
TnVtYmVyT2ZHQ01hcmtlcnMoNykpIFwKICAgICB2KHVuc2lnbmVkLCBvcGFxdWVSb290TWVyZ2VU
aHJlc2hvbGQsIDEwMDApIFwKKyAgICB2KGRvdWJsZSwgbWF4Q29waWVkU3BhY2VGcmFnbWVudGF0
aW9uLCAwLjgpIFwKKyAgICB2KGRvdWJsZSwgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAw
LjkpIFwKICAgICBcCiAgICAgdihib29sLCBmb3JjZVdlYWtSYW5kb21TZWVkLCBmYWxzZSkgXAog
ICAgIHYodW5zaWduZWQsIGZvcmNlZFdlYWtSYW5kb21TZWVkLCAwKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167853</attachid>
            <date>2012-10-09 14:58:20 -0700</date>
            <delta_ts>2012-10-10 18:37:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121009145723.patch</filename>
            <type>text/plain</type>
            <size>84679</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIGRvaW5nIAorICAgICAgICBzb21lIHNldCBvZiBHQyB0YXNrcy4gQ3VycmVudGx5LCB0
aGF0IHNldCBvZiB0YXNrcyBpbmNsdWRlcyBNYXJrLCBDb3B5LCBTeW5jaHJvbml6ZSwgYW5kIEV4
aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBoYXMgYW4gaW5kaXZpZHVhbCBxdWV1ZSBvZiB0YXNr
cyB3aGljaCBpdCBwb2xscyBmcm9tIGFuZCBleGVjdXRlcyBpbiBvcmRlci4gQW55IHRocmVhZCBj
YW4gaXNzdWUgYW55IG90aGVyIAorICAgICAgICB0aHJlYWQgYSBuZXcgdGFzay4gRm9yIGV4YW1w
bGUsIHdoZW4gYSB0aHJlYWQgdGhhdCBpcyBkb2luZyBtYXJraW5nIHJlYWxpemVzIGl0IG1pZ2h0
IGJlIHByb2ZpdGFibGUgZm9yIAorICAgICAgICBvdGhlciB0aHJlYWRzIHRvIHdha2UgdXAgYW5k
IHN0YXJ0IGRvaW5nIG1hcmtpbmcsIGl0IHdpbGwgaXNzdWUgYSB0YXNrIHRvIHRoZW0uCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjp0aHJlYWRJRCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpp
bml0aWFsaXplVGhyZWFkSUQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6c2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZDo6Y29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpH
Q1RocmVhZDo6c3luY2hyb25pemVXaXRoKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OndhaXRG
b3JOZXh0VGFzayk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZE1haW4pOgorICAg
ICAgICAoSlNDOjpHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMpOgorICAgICAgICAqIGhlYXAv
R0NUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWQpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZDo6ZW5xdWV1ZVRhc2spOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWRTaGFyZWREYXRhLmNwcDogVGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBub3cgaGFzIGEgbGlz
dCBvZiBHQ1RocmVhZCBvYmplY3RzIHJhdGhlciB0aGFuIHJhdyAKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllcnMuCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6Y2hpbGRWaXNpdENvdW50KToK
KyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEpOgor
ICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6
R0NUaHJlYWRTaGFyZWREYXRhOjpkaXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMpOiBUaGlzIGZ1
bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyB0YXNrcyAKKyAgICAgICAgdG8g
dGhlIHdvcmtlciB0aHJlYWRzIHRoYXQgdGhlIEdDVGhyZWFkU2hhcmVkRGF0YSBvYmplY3RzIGtu
b3dzIGFib3V0LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKToKKyAgICAgICAgKEpTQzo6R0NUaHJl
YWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmcpOiBDYWxsYmFjayB0byBsZXQgdGhlIEdDVGhy
ZWFkU2hhcmVkRGF0YSBrbm93IHRoYXQgbWFya2luZyBoYXMgCisgICAgICAgIHN0YXJ0ZWQuCisg
ICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRv
IGZvciBmaW5pc2hpbmcgbWFya2luZy4gV2UgZG9uJ3QgbmVlZCB0byB3YWl0IG9uIHRoZSBvdGhl
ciAKKyAgICAgICAgbWFya2luZyB0aHJlYWRzIHRvIGZpbmlzaCB1bmxlc3Mgd2Ugd2FudCBhY2N1
cmF0ZSBvYmplY3QgY291bnRzIGF0IHRoZSBlbmQgb2YgdGhlIG1hcmtpbmcgcGhhc2UuCisgICAg
ICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRDb3B5aW5nKTogRGl0dG8gZm9y
IHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmluaXNoaW5nIGNvcHlpbmcuIEFn
YWluLCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQgb24gdGhlIAorICAgICAgICBvdGhlciB0aHJlYWRz
IHRvIGZpbmlzaCBjb3B5aW5nIGJlY2F1c2Ugd2UgY2FuIHJlbHkgb24gQ29waWVkU3BhY2U6OmRv
bmVDb3B5aW5nIHRvIHdhaXQgdW50aWwgY29weWluZyBpcyAKKyAgICAgICAgZmluaXNoZWQuCisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChHQ1RocmVhZFNoYXJlZERhdGEpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERh
dGE6OmdldE5leHRCbG9ja3NUb0NvcHkpOiBBdG9taWNhbGx5IGdldHMgdGhlIG5leHQgY2h1bmsg
b2Ygd29yayBmb3IgYSBjb3B5aW5nIHRocmVhZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3Rz
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvcHlCYWNraW5nU3RvcmVz
KTogUmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIGNvcHlpbmcgcGhhc2UsIG5vdGlmeWlu
ZyB0aGUgY29weWluZyB0aHJlYWRzLCAKKyAgICAgICAgYW5kIGRvaW5nIGFueSBjb3B5aW5nIHdv
cmsgaWYgbmVjZXNzYXJ5LgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEhlYXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6Q29weUZ1bmN0b3I6OkNvcHlGdW5jdG9yKToKKyAgICAgICAgKENvcHlGdW5jdG9yKToK
KyAgICAgICAgKEpTQzo6Q29weUZ1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmNwcDogQ2hhbmdlZCB0aGUgaW5jcmVtZW50YWwgc3dlZXBlciB0
byBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IG9mIE1hcmtlZEJsb2NrcyAKKyAgICAgICAg
dGhhdCBuZWVkIHN3ZWVwaW5nLCBzaW5jZSB0aGlzIG5vdyByZXNpZGVzIGluIHRoZSBIZWFwIHNv
IHRoYXQgaXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgYnkgdGhlIEdDVGhyZWFkcy4KKyAgICAgICAg
KEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpJbmNyZW1lbnRhbFN3ZWVwZXIpOgorICAgICAgICAo
SlNDOjpJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcpOgorICAgICAgICAqIGhlYXAv
SW5jcmVtZW50YWxTd2VlcGVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSW5jcmVtZW50
YWxTd2VlcGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OnNldHVwKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZUtub3duUGFyYWxsZWwpOiBOb3cgdXNlcyB0aGUgZGlzcGF0Y2ggbWVjaGFuaXNtIGluIEdDVGhy
ZWFkU2hhcmVkRGF0YSBmb3IgdGVsbGluZyAKKyAgICAgICAgdGhlIEdDVGhyZWFkcyB0byB3YWtl
IHVwIGFuZCBzdGFydCBtYXJraW5nLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5o
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
Y29weUxhdGVyKTogTm90aWZpZXMgdGhlIENvcGllZEJsb2NrIHRoYXQgdGhlcmUgYXJlIHNvbWUg
bGl2ZSBieXRlcyB0aGF0IG1heSBuZWVkIAorICAgICAgICB0byBiZSBjb3BpZWQuCisgICAgICAg
ICogcnVudGltZS9CdXR0ZXJmbHkuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChCdXR0ZXJm
bHkpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKTog
VXNlcyB0aGUgbmV3IENvcHlWaXNpdG9yLgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6
CisgICAgICAgIChNZXRob2RUYWJsZSk6IEFkZGVkIG5ldyAidmlydHVhbCIgZnVuY3Rpb24gY29w
eUJhY2tpbmdTdG9yZSB0byBtZXRob2QgdGFibGUuCisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjb3B5QmFja2luZ1N0
b3JlKTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90aGluZy4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29weUJ1dHRlcmZseSk6IERvZXMgdGhlIGFjdHVhbCBjb3B5aW5nIG9m
IHRoZSBidXR0ZXJmbHkuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRCdXR0ZXJmbHkpOiBDYWxscyBjb3B5TGF0ZXIgZm9yIHRoZSBidXR0ZXJmbHkuCisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKTogCisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
Om1ldGhvZFRhYmxlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmhlcml0cyk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmg6IEFkZGVkIHR3byBuZXcgY29uc3RhbnRzLCBtYXhIZWFwRnJh
Z21lbnRhdGlvbiBhbmQgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAKKyAgICAgICAgdG8g
Z292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUgZG9pbmcg
Y29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMDkgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWZ0ZXIgcjEzMDM0NCwgT3BhcXVlSlNTdHJp
bmc6OmlkZW50aWZpZXIoKSBhZGRzIHdyYXBwZWQgU3RyaW5nIHRvIGlkZW50aWZpZXIgdGFibGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEzMDgwNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDggKzEwNiwxMCBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogCiAgICAgaGVh
cC9CbG9ja0FsbG9jYXRvci5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAorICAgIGhlYXAv
Q29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFw
L0RGR0NvZGVCbG9ja3MuY3BwCisgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhy
ZWFkU2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKICAgICBoZWFwL0hhbmRs
ZVN0YWNrLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDkgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2Uu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCBcCisgICAg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ2FyZFNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmggXApAQCAtMjc4LDYgKzI4MSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmggXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAgXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAgXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggXAogICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTdGF0aXN0aWNzLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAgXAogICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAogICAgIGhlYXAvV2Vha1NldC5jcHAg
XApAQCAtODEsNiArODIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cCBcCiAgICAgaGVhcC9CbG9ja0FsbG9jYXRvci5jcHAgXAogICAgIGhlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmNwcCBcCisgICAgaGVhcC9HQ1RocmVhZC5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAg
XAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgRVhQT1JUUwogICAgID9jb252ZXJ0TGF0aW4x
VG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJFUEJFUEFQ
QURQQURAWgogICAgID9jb252ZXJ0VVRGMTZUb1VURjhAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZl
cnNpb25SZXN1bHRAMTJAUEFQQl9XUEJfV1BBUEFEUEFEX05AWgogICAgID9jb252ZXJ0VVRGOFRv
VVRGMTZAVW5pY29kZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkRQQkRQQVBB
X1dQQV9XX05AWgorICAgID9jb3B5QmFja2luZ1N0b3JlQEpTT2JqZWN0QEpTQ0BAU0FYUEFWSlND
ZWxsQDJAQUFWQ29weVZpc2l0b3JAMkBAWgogICAgID9jcmVhdGVASlNGdW5jdGlvbkBKU0NAQFNB
UEFWMTJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBIQUJWU3RyaW5nQFdURkBA
UDZJX0owQFpXNEludHJpbnNpY0AyQDNAWgogICAgID9jcmVhdGVASlNHbG9iYWxEYXRhQEpTQ0BA
U0E/QVY/JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0VGhyZWFkU3RhY2tU
eXBlQDJAVzRIZWFwVHlwZUAyQEBaCiAgICAgP2NyZWF0ZUBSZWdFeHBASlNDQEBTQVBBVjEyQEFB
VkpTR2xvYmFsRGF0YUAyQEFCVlN0cmluZ0BXVEZAQFc0UmVnRXhwRmxhZ3NAMkBAWgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2oJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzM4LDYgKzIzMzgsMTggQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvci5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcQ29w
eVZpc2l0b3IuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxERkdDb2RlQmxvY2tz
LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNDM0LDYgKzI0NDYsMTQgQEAKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxHQ1RocmVh
ZC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXGhlYXBcR0NUaHJlYWQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzA4
MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiwxMSBAQAogCQlDMjEx
MjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRFMTVERDlBQjMwMDc5
MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovOyB9OwogCQlDMjExMjJFMjE1REQ5QUIz
MDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJl
YWRTaGFyZWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhv
ZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEy
MkUwMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjcxNjFGOTlF
MDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRv
ci5jcHAgKi87IH07CisJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMzIxRjMx
NjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIxMzIxRjkxNjFGOTlFMDAwMjM2OUVEIC8qIENv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzIxMzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oICovOyB9OworCQlDMjEzMjFGQTE2MUY5OUUwMDAyMzY5RUQgLyogR0NUaHJl
YWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIx
MzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLzsgfTsKKwkJQzIxMzIxRkIx
NjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMjEzMjFGNjE2MUY5OUUwMDAyMzY5RUQgLyogR0NUaHJlYWQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjE2
MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0Mz
MDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4
IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi87
IH07CiAJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZE
RDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQ4Niw2ICsxNDkxLDExIEBACiAJCUMyMTEyMkRF
MTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWRTaGFyZWREYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFk
U2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZFNo
YXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyRTAxNUREOUFC
MzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjEzMjFGMjE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzMjFGMzE2MUY5OUUwMDAyMzY5RUQgLyog
Q29weVZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjQxNjFGOTlFMDAwMjM2
OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIxMzIxRjUxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90Vmlz
aXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbG90VmlzaXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRCNDA0QzkwMDc5
RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQz
MUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xODE5LDYgKzE4MjksMTEgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAw
QUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCUMyMTMyMUYyMTYxRjk5RTAwMDIzNjlFRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8sCisJ
CQkJQzIxMzIxRjMxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9yLmggKi8sCisJCQkJQzIx
MzIxRjQxNjFGOTlFMDAwMjM2OUVEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovLAor
CQkJCUMyMTMyMUY1MTYxRjk5RTAwMDIzNjlFRCAvKiBHQ1RocmVhZC5jcHAgKi8sCisJCQkJQzIx
MzIxRjYxNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzI0RDMxRTAxNjFD
RDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKIAkJCQlDMjREMzFFMTE2MUNE
Njk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFB
MDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtMjU3OCw2ICsyNTkzLDggQEAKIAkJ
CQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMTMyMUY4MTYxRjk5RTAwMDIzNjlFRCAvKiBD
b3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxMzIxRkIxNjFGOTlFMDAwMjM2OUVE
IC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0
REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMy
RDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLApA
QCAtMjk2OCw2ICsyOTg1LDcgQEAKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0
RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5
RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAw
Q0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjEzMjFGOTE2
MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTM1NzQsNiArMzU5Miw4IEBACiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8q
IEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1
IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNEQzMUUyMTYxQ0Q2
OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjEz
MjFGNzE2MUY5OUUwMDAyMzY5RUQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzIxMzIxRkExNjFGOTlFMDAwMjM2OUVEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lv
biAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisj
aW5jbHVkZSAiT3B0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00MSw2ICs0MywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvcGllZEJs
b2NrKiBjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAgc3RhdGljIENv
cGllZEJsb2NrKiBjcmVhdGVOb1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYp
OwogCisgICAgYm9vbCBpc1Bpbm5lZCgpOworCisgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7Cisg
ICAgdm9pZCByZXBvcnRMaXZlQnl0ZXModW5zaWduZWQpOworICAgIHZvaWQgZGlkU3Vydml2ZUdD
KCk7CisgICAgYm9vbCBkaWRFdmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKKyAgICBib29sIHNob3Vs
ZEV2YWN1YXRlKCk7CisgICAgYm9vbCBjYW5CZVJlY3ljbGVkKCk7CisKICAgICAvLyBUaGUgcGF5
bG9hZCBpcyB0aGUgcmVnaW9uIG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2Nh
dGlvbnMuCiAgICAgY2hhciogcGF5bG9hZCgpOwogICAgIGNoYXIqIHBheWxvYWRFbmQoKTsKQEAg
LTY2LDYgKzc3LDcgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX3JlbWFpbmluZzsKICAgICB1
aW50cHRyX3QgbV9pc1Bpbm5lZDsKKyAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsKIH07CiAKIGlu
bGluZSBDb3BpZWRCbG9jayogQ29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwoY29uc3QgUGFn
ZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uKQpAQCAtOTYsMTAgKzEwOCw2MCBAQCBpbmxp
bmUgQ29waWVkQmxvY2s6OkNvcGllZEJsb2NrKGNvbnN0IFBhCiAgICAgOiBIZWFwQmxvY2s8Q29w
aWVkQmxvY2s+KGFsbG9jYXRpb24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHko
KSkKICAgICAsIG1faXNQaW5uZWQoZmFsc2UpCisgICAgLCBtX2xpdmVCeXRlcygwKQogewogICAg
IEFTU0VSVChpczhCeXRlQWxpZ25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3JlbWFpbmlu
ZykpKTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyh1bnNp
Z25lZCBieXRlcykKK3sKKyAgICB1bnNpZ25lZCBvbGRWYWx1ZSA9IDA7CisgICAgdW5zaWduZWQg
bmV3VmFsdWUgPSAwOworICAgIGRvIHsKKyAgICAgICAgb2xkVmFsdWUgPSBtX2xpdmVCeXRlczsK
KyAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIGJ5dGVzOworICAgIH0gd2hpbGUgKCFXVEY6
OndlYWtDb21wYXJlQW5kU3dhcCgmbV9saXZlQnl0ZXMsIG9sZFZhbHVlLCBuZXdWYWx1ZSkpOwor
fQorCitpbmxpbmUgdm9pZCBDb3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKK3sKKyAgICBtX2xp
dmVCeXRlcyA9IDA7CisgICAgbV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBD
b3BpZWRCbG9jazo6ZGlkRXZhY3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICBBU1NF
UlQobV9saXZlQnl0ZXMgPj0gYnl0ZXMpOworICAgIHVuc2lnbmVkIG9sZFZhbHVlID0gMDsKKyAg
ICB1bnNpZ25lZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1f
bGl2ZUJ5dGVzOworICAgICAgICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gYnl0ZXM7CisgICAgfSB3
aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2xpdmVCeXRlcywgb2xkVmFsdWUsIG5l
d1ZhbHVlKSk7CisgICAgQVNTRVJUKG1fbGl2ZUJ5dGVzIDwgb2xkVmFsdWUpOworICAgIHJldHVy
biAhbmV3VmFsdWU7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5CZVJlY3ljbGVk
KCkKK3sKKyAgICByZXR1cm4gIW1fbGl2ZUJ5dGVzOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRC
bG9jazo6c2hvdWxkRXZhY3VhdGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+
KG1fbGl2ZUJ5dGVzKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4ocGF5bG9hZENhcGFjaXR5KCkpIDw9
IE9wdGlvbnM6Om1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbigpOworfQorCitpbmxpbmUgYm9v
bCBDb3BpZWRCbG9jazo6aXNQaW5uZWQoKQoreworICAgIHJldHVybiBtX2lzUGlubmVkOworfQor
CitpbmxpbmUgdW5zaWduZWQgQ29waWVkQmxvY2s6OmxpdmVCeXRlcygpCit7CisgICAgcmV0dXJu
IG1fbGl2ZUJ5dGVzOworfQorCiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQog
ewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgoc2l6ZW9mKENv
cGllZEJsb2NrKSArIDcpICYgfjcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0zNiw2ICszNyw3IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFw
KQogICAgICwgbV90b1NwYWNlKDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQogICAgICwgbV9pbkNv
cHlpbmdQaGFzZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCiAgICAg
LCBtX251bWJlck9mTG9hbmVkQmxvY2tzKDApCiB7CiAgICAgbV90b1NwYWNlTG9jay5Jbml0KCk7
CkBAIC0xNTIsMTUgKzE1NCwxOCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVh
bGxvY2F0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxs
aW5nQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQordm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxp
bmdCbG9jayhDb3BpZWRCbG9jayogYmxvY2ssIENvcGllZEJsb2NrKiogZXhjaGFuZ2UpCiB7CiAg
ICAgQVNTRVJUKG1faW5Db3B5aW5nUGhhc2UpOwogICAgIAorICAgIGlmIChleGNoYW5nZSkKKyAg
ICAgICAgKmV4Y2hhbmdlID0gYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOworCiAgICAg
aWYgKCFibG9jaykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFibG9jay0+ZGF0YVNpemUo
KSkgewotICAgICAgICByZWN5Y2xlQmxvY2soYmxvY2spOworICAgICAgICByZWN5Y2xlQm9ycm93
ZWRCbG9jayhibG9jayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4Miw2ICsxODcs
MzggQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0K
IAordm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIHN0ZDo6c3dhcCht
X2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKKworICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKKyAg
ICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOworCisgICAgQ29waWVkQmxvY2sqIG5l
eHQgPSAwOworICAgIHNpemVfdCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgc2l6ZV90IHRvdGFs
VXNhYmxlQnl0ZXMgPSAwOworICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3Bh
Y2UtPmhlYWQoKTsgYmxvY2s7IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gYmxvY2st
Pm5leHQoKTsKKyAgICAgICAgaWYgKCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVS
ZWN5Y2xlZCgpKSB7CisgICAgICAgICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdG90YWxMaXZlQnl0ZXMg
Kz0gYmxvY2stPmxpdmVCeXRlcygpOworICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2Nr
LT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRl
cyA9IG1faGVhcC0+b2JqZWN0U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZy
YWdtZW50YXRpb24gPSAoKGRvdWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMp
IC8gKChkb3VibGUpdG90YWxVc2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOworICAgIG1f
c2hvdWxkRG9Db3B5UGhhc2UgPSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWF4Q29w
aWVkU3BhY2VGcmFnbWVudGF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29weVBoYXNlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7CisgICAg
QVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRC
bG9ja3MpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB2b2lkIENvcGllZFNw
YWNlOjpkb25lQ29weWluZygpCiB7CiAgICAgewpAQCAtMTkwLDEyICsyMjcsMTMgQEAgdm9pZCBD
b3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25k
aXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwogICAgIH0KIAotICAgIEFTU0VSVChtX2lu
Q29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBtX3Nob3VsZERv
Q29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNlID0gZmFsc2U7CisKICAgICB3aGlsZSAo
IW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0g
bV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5tX2lzUGlubmVk
KSB7Ci0gICAgICAgICAgICBibG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOworICAgICAgICBpZiAo
YmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAgICAgICAgICAg
IGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUg
YmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92ZWQuCiAgICAg
ICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAgICAgICAgICAg
bV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwpAQCAtMjEw
LDEzICsyNDgsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgIENvcGll
ZEJsb2NrKiBjdXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5oZWFkKCk7CiAgICAgd2hpbGUgKGN1cnIp
IHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0gICAgICAgIGlm
ICghY3Vyci0+bV9pc1Bpbm5lZCkgeworICAgICAgICBpZiAoIWN1cnItPmlzUGlubmVkKCkpIHsK
ICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGN1cnIpOwogICAgICAgICAgICAg
bV9ibG9ja1NldC5yZW1vdmUoY3Vycik7CiAgICAgICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJv
eShjdXJyKS5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2Js
b2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGN1cnIpKTsKLSAgICAgICAgICAg
IGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnItPmRpZFN1cnZpdmVH
QygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBuZXh0OwogICAgIH0KQEAgLTIyNSw2ICsy
NjMsOCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAgIGFsbG9jYXRl
QmxvY2soKTsKICAgICBlbHNlCiAgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayht
X3RvU3BhY2UtPmhlYWQoKSk7CisKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gZmFsc2U7CiB9
CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAgY2xhc3MgSGVhcDsKIGNsYXNzIENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3BpZWRTcGFjZSB7
CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFzcyBTbG90Vmlz
aXRvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVibGljOgpAQCAtNzQsNiArNzUsNyBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAKICAgICBib29sIGlzUGFnZWRPdXQoZG91
YmxlIGRlYWRsaW5lKTsKKyAgICBib29sIHNob3VsZERvQ29weVBoYXNlKCkgeyByZXR1cm4gbV9z
aG91bGREb0NvcHlQaGFzZTsgfQogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2
b2lkKik7CiAKQEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFsbG9jYXRlQmxv
Y2soKTsKICAgICBDb3BpZWRCbG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwog
Ci0gICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKik7Ci0gICAgdm9pZCByZWN5
Y2xlQmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICB2b2lkIGRvbmVGaWxsaW5nQmxvY2soQ29waWVk
QmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKKyAgICB2b2lkIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhD
b3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sq
KTsKIAogICAgIEhlYXAqIG1faGVhcDsKIApAQCAtMTA4LDYgKzExMSw3IEBAIHByaXZhdGU6CiAg
ICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4gbV9vdmVyc2l6ZUJsb2NrczsKICAgIAog
ICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKKyAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7
CiAKICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENvbmRpdGlvbiBt
X2xvYW5lZEJsb2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA4MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIwIEBAIGlubGluZSB2b2lkIENvcGllZFNw
YWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAotaW5saW5lIHZv
aWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENvcGllZFNwYWNl
OjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewotICAgIHN0ZDo6
c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKLQotICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQo
KTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAgQVNTRVJUKCFt
X2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwot
ICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNT
RVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOworICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5u
ZWQpOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2Nr
KTsKKyAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICBtX2Zyb21TcGFj
ZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICB9CisgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRl
YWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KIAotaW5saW5lIHZvaWQg
Q29waWVkU3BhY2U6OnJlY3ljbGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCitpbmxpbmUgdm9p
ZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQog
ewogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpk
ZXN0cm95KGJsb2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5
VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKworI2luY2x1
ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVk
RGF0YS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworQ29weVZpc2l0b3I6
OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQorICAgIDogbV9zaGFyZWQo
c2hhcmVkKQoreworfQorCit2b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJlZCgpCit7Cisg
ICAgR0NDb3B5UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIFZlY3RvcjxNYXJrZWRC
bG9jayo+JiBibG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5tX2Jsb2Nrc1RvQ29weTsKKyAgICBzaXpl
X3Qgc3RhcnRJbmRleCwgZW5kSW5kZXg7CisKKyAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9D
b3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGVuZElu
ZGV4KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7
IGkrKykKKyAgICAgICAgICAgIGJsb2Nrc1RvQ29weVtpXS0+Zm9yRWFjaExpdmVDZWxsKGZ1bmN0
b3IpOworICAgICAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVu
ZEluZGV4KTsKKyAgICB9CisgICAgQVNTRVJUKHN0YXJ0SW5kZXggPT0gZW5kSW5kZXgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eVZpc2l0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlWaXNpdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENvcHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29weVZpc2l0b3JfaAorCisjaW5jbHVkZSAi
Q29waWVkU3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDVGhyZWFkU2hhcmVk
RGF0YTsKKworY2xhc3MgQ29weVZpc2l0b3IgeworcHVibGljOgorICAgIENvcHlWaXNpdG9yKEdD
VGhyZWFkU2hhcmVkRGF0YSYpOworCisgICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgpOworCisgICAg
dm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CisKKyAgICAvLyBM
b3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhl
IG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcworICAgIC8vIGFyZSBkaXNjb250aWd1b3VzIG9yIGlm
IHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5lZWQgdG8gZm9j
dXMgb24KKyAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVh
c3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCisgICAgYm9vbCBjaGVja0lmU2hvdWxk
Q29weSh2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7
CisgICAgdm9pZCBkaWRDb3B5KHZvaWQqLCBzaXplX3QpOworCitwcml2YXRlOgorICAgIHZvaWQq
IGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CisKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEm
IG1fc2hhcmVkOworICAgIENvcGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2Rz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
b3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBDb3B5VmlzaXRvcklubGluZU1ldGhv
ZHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIK
KyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNp
bmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgR0NDb3B5UGhhc2VGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7
CitwdWJsaWM6CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2aXNpdG9yKQor
ICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG9w
ZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgJiYgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBOb25BcnJheSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkt
Pm1ldGhvZFRhYmxlLmNvcHlCYWNraW5nU3RvcmUgPT0gSlNPYmplY3Q6OmNvcHlCYWNraW5nU3Rv
cmUpOworICAgICAgICBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCBtX3Zpc2l0b3Ip
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDb3B5VmlzaXRvciYgbV92aXNpdG9yOworfTsKKwor
aW5saW5lIGJvb2wgQ29weVZpc2l0b3I6OmNoZWNrSWZTaG91bGRDb3B5KHZvaWQqIG9sZFB0ciwg
c2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChDb3BpZWRTcGFjZTo6aXNPdmVyc2l6ZShieXRlcykp
IHsKKyAgICAgICAgQVNTRVJUKENvcGllZFNwYWNlOjpvdmVyc2l6ZUJsb2NrRm9yKG9sZFB0cikt
PmlzUGlubmVkKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKENv
cGllZFNwYWNlOjpibG9ja0ZvcihvbGRQdHIpLT5pc1Bpbm5lZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIHZvaWQqIENvcHlWaXNpdG9y
OjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiByZXN1bHQgPSAw
OyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NpZ25lZC4K
KyAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVz
dWx0KSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgcmVzdWx0ID0gYWxsb2Nh
dGVOZXdTcGFjZVNsb3coYnl0ZXMpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9ICAgICAgIAorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3
U3BhY2VTbG93KHNpemVfdCBieXRlcykKK3sKKyAgICBDb3BpZWRCbG9jayogbmV3QmxvY2sgPSAw
OworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRB
bGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJm5ld0Jsb2NrKTsKKyAgICBtX2NvcGllZEFs
bG9jYXRvci5zZXRDdXJyZW50QmxvY2sobmV3QmxvY2spOworCisgICAgdm9pZCogcmVzdWx0ID0g
MDsKKyAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5
QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6c3RhcnRDb3B5aW5n
KCkKK3sKKyAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7CisgICAgQ29w
aWVkQmxvY2sqIGJsb2NrID0gMDsKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmls
bGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksICZibG9jayk7
CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKGJsb2NrKTsKK30KKworaW5s
aW5lIHZvaWQgQ29weVZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKK3sKKyAgICBpZiAoIW1fY29waWVk
QWxsb2NhdG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaGFyZWQubV9j
b3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJl
bnRCbG9jaygpLCAwKTsKK30KKworaW5saW5lIHZvaWQgQ29weVZpc2l0b3I6OmRpZENvcHkodm9p
ZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgQVNTRVJUKCFDb3BpZWRTcGFjZTo6aXNPdmVy
c2l6ZShieXRlcykpOworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9j
a0ZvcihwdHIpOworICAgIEFTU0VSVCghYmxvY2stPmlzUGlubmVkKCkpOworCisgICAgaWYgKGJs
b2NrLT5kaWRFdmFjdWF0ZUJ5dGVzKGJ5dGVzKSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRT
cGFjZS0+cmVjeWNsZUV2YWN1YXRlZEJsb2NrKGJsb2NrKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKKworI2luY2x1ZGUgIkNvcHlWaXNpdG9y
LmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiR0NU
aHJlYWRTaGFyZWREYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitHQ1RocmVhZDo6R0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQs
IFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvciwgQ29weVZpc2l0b3IqIGNvcHlWaXNpdG9yLCBzaXpl
X3QgaW5kZXgpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3NoYXJlZChzaGFyZWQpCisg
ICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6YWRvcHRQdHIoc2xvdFZpc2l0b3IpKQorICAgICwgbV9j
b3B5VmlzaXRvcihXVEY6OmFkb3B0UHRyKGNvcHlWaXNpdG9yKSkKKyAgICAsIG1faW5kZXgoaW5k
ZXgpCit7Cit9CisKK1RocmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVhZElEKCkKK3sKKyAg
ICBBU1NFUlQobV90aHJlYWRJRCk7CisgICAgcmV0dXJuIG1fdGhyZWFkSUQ7Cit9CisKK3ZvaWQg
R0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQor
eworICAgIEFTU0VSVCghbV90aHJlYWRJRCk7CisgICAgbV90aHJlYWRJRCA9IHRocmVhZElEOwor
fQorCitTbG90VmlzaXRvciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKK3sKKyAgICBBU1NFUlQo
bV9zbG90VmlzaXRvcik7CisgICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0KCk7Cit9CisKK0Nv
cHlWaXNpdG9yKiBHQ1RocmVhZDo6Y29weVZpc2l0b3IoKQoreworICAgIEFTU0VSVChtX2NvcHlW
aXNpdG9yKTsKKyAgICByZXR1cm4gbV9jb3B5VmlzaXRvci5nZXQoKTsKK30KKwordm9pZCBHQ1Ro
cmVhZDo6c3luY2hyb25pemVXaXRoKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90YXNr
UXVldWVMb2NrKTsKKyAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAg
bV90YXNrUXVldWVDb25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworfQorCitHQ1Rhc2sg
R0NUaHJlYWQ6OndhaXRGb3JOZXh0VGFzaygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
dGFza1F1ZXVlTG9jayk7CisgICAgd2hpbGUgKG1fdGFza1F1ZXVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsKKyAgICAgICAgbV90YXNrUXVldWVD
b25kaXRpb24ud2FpdChtX3Rhc2tRdWV1ZUxvY2spOworICAgIH0KKyAgICBHQ1Rhc2sgbmV4dFRh
c2sgPSAqbV90YXNrUXVldWUuYmVnaW4oKTsKKyAgICBtX3Rhc2tRdWV1ZS5yZW1vdmVGaXJzdCgp
OworICAgIHJldHVybiBuZXh0VGFzazsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NUaHJlYWRNYWlu
KCkKK3sKKyAgICBHQ1Rhc2sgY3VycmVudFRhc2s7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQor
ICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOworI2VuZGlmCisgICAgLy8gV2FpdCBmb3IgdGhl
IG1haW4gdGhyZWFkIHRvIGZpbmlzaCBjcmVhdGluZyB1cy4KKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICB9CisgICAgeworICAg
ICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoKm1fc2xvdFZpc2l0b3IpOworICAgICAg
ICB3aGlsZSAoKGN1cnJlbnRUYXNrID0gd2FpdEZvck5leHRUYXNrKCkpICE9IEV4aXQpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY3VycmVudFRhc2spIHsKKyAgICAgICAgICAgIGNhc2UgTWFyazoK
KyAgICAgICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBSZXNldFNsb3RWaXNpdG9yOgorICAgICAgICAgICAgICAgIG1fc2xvdFZpc2l0b3ItPnJlc2V0
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvcHk6CisgICAg
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHN0YXJ0Q29weWluZygpIGJlY2F1
c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAg
ICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJvbVNoYXJlZCgpOworICAgICAgICAgICAgICAgIG1fY29w
eVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFN5bmNocm9uaXplOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBFeGl0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyh2b2lk
KiBkYXRhKQoreworICAgIEdDVGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxHQ1RocmVhZCo+
KGRhdGEpOworICAgIHRocmVhZC0+Z2NUaHJlYWRNYWluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0NUaHJlYWRfaAorI2RlZmlu
ZSBHQ1RocmVhZF9oCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ29weVZpc2l0b3I7CitjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7CitjbGFzcyBTbG90
VmlzaXRvcjsKKworZW51bSBHQ1Rhc2sgeworICAgIE1hcmssCisgICAgUmVzZXRTbG90VmlzaXRv
ciwKKyAgICBDb3B5LAorICAgIFN5bmNocm9uaXplLAorICAgIEV4aXQKK307CisKK2NsYXNzIEdD
VGhyZWFkIHsKK3B1YmxpYzoKKyAgICBHQ1RocmVhZChHQ1RocmVhZFNoYXJlZERhdGEmLCBTbG90
VmlzaXRvciosIENvcHlWaXNpdG9yKiwgc2l6ZV90KTsKKworICAgIFNsb3RWaXNpdG9yKiBzbG90
VmlzaXRvcigpOworICAgIENvcHlWaXNpdG9yKiBjb3B5VmlzaXRvcigpOworICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJ
ZGVudGlmaWVyKTsKKyAgICB2b2lkIGVucXVldWVUYXNrKEdDVGFzayk7CisgICAgdm9pZCBzeW5j
aHJvbml6ZVdpdGgoKTsKKworICAgIHN0YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRGdW5jKHZvaWQq
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGdjVGhyZWFkTWFpbigpOworICAgIEdDVGFzayB3YWl0
Rm9yTmV4dFRhc2soKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBH
Q1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworICAgIE93blB0cjxTbG90VmlzaXRvcj4gbV9z
bG90VmlzaXRvcjsKKyAgICBPd25QdHI8Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CisgICAg
c2l6ZV90IG1faW5kZXg7CisgICAgTXV0ZXggbV90YXNrUXVldWVMb2NrOworICAgIFRocmVhZENv
bmRpdGlvbiBtX3Rhc2tRdWV1ZUNvbmRpdGlvbjsKKyAgICBEZXF1ZTxHQ1Rhc2s+IG1fdGFza1F1
ZXVlOworfTsKKworaW5saW5lIHZvaWQgR0NUaHJlYWQ6OmVucXVldWVUYXNrKEdDVGFzayB0YXNr
KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rhc2tRdWV1ZUxvY2spOworICAgIG1fdGFz
a1F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX3Rhc2tRdWV1ZUNvbmRpdGlvbi5zaWduYWwoKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDEz
MDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQ1ICsyNiwyOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogCisjaW5jbHVkZSAiQ29weVZpc2l0
b3IuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJH
Q1RocmVhZC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFj
ay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxp
bmVNZXRob2RzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6
cmVzZXRDaGlsZHJlbigpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2lu
Z1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWFya2luZ1RocmVhZHNN
YXJrU3RhY2tbaV0tPnJlc2V0KCk7CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKFJl
c2V0U2xvdFZpc2l0b3IpOwogfQogCiBzaXplX3QgR0NUaHJlYWRTaGFyZWREYXRhOjpjaGlsZFZp
c2l0Q291bnQoKQogeyAgICAgICAKICAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgp
OyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrW2ldLT52
aXNpdENvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNp
emUoKTsgKytpKQorICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9y
KCktPnZpc2l0Q291bnQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQotCi12b2lkIEdDVGhyZWFk
U2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yKQot
ewotICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIHsKLSAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKCpzbG90VmlzaXRvcik7Ci0gICAgICAgIHNsb3RWaXNpdG9yLT5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgIH0KLSAgICBkZWxl
dGUgc2xvdFZpc2l0b3I7Ci19Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjptYXJraW5nVGhy
ZWFkU3RhcnRGdW5jKHZvaWQqIG15VmlzaXRvcikKLXsgICAgICAgICAgICAgICAKLSAgICBTbG90
VmlzaXRvciogc2xvdFZpc2l0b3IgPSBzdGF0aWNfY2FzdDxTbG90VmlzaXRvcio+KG15VmlzaXRv
cik7Ci0KLSAgICBzbG90VmlzaXRvci0+c2hhcmVkRGF0YSgpLm1hcmtpbmdUaHJlYWRNYWluKHNs
b3RWaXNpdG9yKTsKLX0KICNlbmRpZgogCiBHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hh
cmVkRGF0YShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCkBAIC03NCwxMyArNTgsMjEgQEAgR0NU
aHJlYWRTaGFyZWREYXRhOjpHQ1RocmVhZFNoYXJlZERhdGEoSgogICAgICwgbV9zaGFyZWRNYXJr
U3RhY2sobV9zZWdtZW50QWxsb2NhdG9yKQogICAgICwgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycygwKQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KGZhbHNlKQorICAg
ICwgbV9ibG9ja3NUb0NvcHkoZ2xvYmFsRGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3QpCisgICAg
LCBtX2NvcHlJbmRleCgwKQogeworICAgIG1fY29weUxvY2suSW5pdCgpOwogI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykKKyAgICAvLyBHcmFiIHRoZSBsb2NrIHNvIHRoZSBuZXcgR0MgdGhyZWFkcyBj
YW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgc3RhcnQgcnVubmluZy4KKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgewogICAgICAgICBT
bG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMpOwotICAgICAg
ICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAg
IG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZChtYXJraW5nVGhyZWFkU3RhcnRG
dW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIikpOwotICAgICAgICBB
U1NFUlQobV9tYXJraW5nVGhyZWFkcy5sYXN0KCkpOworICAgICAgICBDb3B5VmlzaXRvciogY29w
eVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0b3IoKnRoaXMpOworICAgICAgICBzaXplX3QgaW5kZXgg
PSBtX2djVGhyZWFkcy5zaXplKCk7CisgICAgICAgIEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcg
R0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNpdG9yLCBjb3B5VmlzaXRvciwgaW5kZXgpOworICAgICAg
ICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1Ro
cmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKKyAg
ICAgICAgbmV3VGhyZWFkLT5pbml0aWFsaXplVGhyZWFkSUQodGhyZWFkSUQpOworICAgICAgICBt
X2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTkyLDE2
ICs4NCwxNyBAQCBHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJlZERhdGEoCiAgICAg
ewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAgICAgIG1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRydWU7Ci0gICAgICAgIG1fbWFya2luZ0NvbmRp
dGlvbi5icm9hZGNhc3QoKTsKKyAgICAgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKEV4
aXQpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNb
aV0tPnRocmVhZElEKCkpOworICAgICAgICBkZWxldGUgbV9nY1RocmVhZHNbaV07CiAgICAgfQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hcmtpbmdUaHJlYWRzLnNpemUoKTsgKytp
KQotICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX21hcmtpbmdUaHJlYWRzW2ldKTsK
ICNlbmRpZgogfQogICAgIAogdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKIHsKLSAg
ICBBU1NFUlQoIW1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMpOwogICAgIEFTU0VSVCgh
bV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KTsKICAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3Rh
Y2suaXNFbXB0eSgpKTsKICAgICAKQEAgLTExOSw0ICsxMTIsNTggQEAgdm9pZCBHQ1RocmVhZFNo
YXJlZERhdGE6OnJlc2V0KCkKICAgICB9CiB9CiAKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpk
aXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoR0NUYXNrIHRhc2spCit7CisgICAgVGhyZWFkSWRl
bnRpZmllciBjdXJyZW50VGhyZWFkSUQgPSBXVEY6OmN1cnJlbnRUaHJlYWQoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdD
VGhyZWFkKiB0aHJlYWQgPSBtX2djVGhyZWFkc1tpXTsKKyAgICAgICAgaWYgKHRocmVhZC0+dGhy
ZWFkSUQoKSA9PSBjdXJyZW50VGhyZWFkSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgdGhyZWFkLT5lbnF1ZXVlVGFzayh0YXNrKTsKKyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWRT
aGFyZWREYXRhOjpzeW5jaHJvbml6ZVdpdGhXb3JrZXJUaHJlYWRzKCkKK3sKKyAgICBkaXNwYXRj
aFRhc2tUb1dvcmtlclRocmVhZHMoU3luY2hyb25pemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgR0NUaHJlYWQqIHRocmVh
ZCA9IG1fZ2NUaHJlYWRzW2ldOworICAgICAgICBBU1NFUlQodGhyZWFkLT50aHJlYWRJRCgpICE9
IFdURjo6Y3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgdGhyZWFkLT5zeW5jaHJvbml6ZVdpdGgo
KTsKKyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpkaWRTdGFydE1hcmtpbmco
KQoreworICAgIGRpc3BhdGNoVGFza1RvV29ya2VyVGhyZWFkcyhNYXJrKTsKK30KKwordm9pZCBH
Q1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaE1hcmtpbmcoKQoreworICAgIC8vIFdlIG5lZWQg
dG8gc3luY2hyb25pemUgaWYgd2UgY2FyZSBhYm91dCBhY2N1cmF0ZSBsb2dnaW5nIGNvdW50cy4K
KyNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKKyAgICBzeW5jaHJvbml6ZVdpdGhXb3Jr
ZXJUaHJlYWRzKCk7CisjZW5kaWYKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0
YXJ0Q29weWluZygpCit7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1f
Y29weUxvY2spOworICAgICAgICBtX2Jsb2Nrc1RvQ29weSA9IG1fZ2xvYmFsRGF0YS0+aGVhcC5t
X2Jsb2NrU25hcHNob3Q7CisgICAgICAgIG1fY29weUluZGV4ID0gMDsKKyAgICB9CisgICAgLy8g
V2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgd2UgYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0
aGUgbWFpbiB0aHJlYWQgY2FuIAorICAgIC8vIGJsb3cgdGhyb3VnaCBhbGwgb2YgdGhlIGNvcHlp
bmcgd29yayBiZWZvcmUgdGhlIEdDVGhyZWFkcyBmdWxseSB3YWtlIHVwLiAKKyAgICAvLyBUaGUg
R0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBhIGJsb2NrIGZyb20gdGhlIENvcGllZFNwYWNlIHdoZW4g
dGhlIGNvcHlpbmcgcGhhc2UgCisgICAgLy8gaGFzIGNvbXBsZXRlZCwgd2hpY2ggaXNuJ3QgYWxs
b3dlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgaSsr
KQorICAgICAgICBtX2djVGhyZWFkc1tpXS0+Y29weVZpc2l0b3IoKS0+c3RhcnRDb3B5aW5nKCk7
CisgICAgZGlzcGF0Y2hUYXNrVG9Xb3JrZXJUaHJlYWRzKENvcHkpOworfQorCit2b2lkIEdDVGhy
ZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoQ29weWluZygpCit7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmgJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTQgQEAK
ICNpZm5kZWYgR0NUaHJlYWRTaGFyZWREYXRhX2gKICNkZWZpbmUgR0NUaHJlYWRTaGFyZWREYXRh
X2gKIAorI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiTGlzdGFibGVIYW5kbGVyLmgi
CiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNs
dWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RDU3Bp
bkxvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCkBAIC0zOCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2Jh
bERhdGE7CiBjbGFzcyBDb3BpZWRTcGFjZTsKK2NsYXNzIENvcHlWaXNpdG9yOwogCiBjbGFzcyBH
Q1RocmVhZFNoYXJlZERhdGEgewogcHVibGljOgpAQCAtNDYsNiArNTAsMTEgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7Cisg
ICAgdm9pZCBkaWRGaW5pc2hNYXJraW5nKCk7CisgICAgdm9pZCBkaWRTdGFydENvcHlpbmcoKTsK
KyAgICB2b2lkIGRpZEZpbmlzaENvcHlpbmcoKTsKKwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
ICAgICB2b2lkIHJlc2V0Q2hpbGRyZW4oKTsKICAgICBzaXplX3QgY2hpbGRWaXNpdENvdW50KCk7
CkBAIC01MywxMiArNjIsMTMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiBwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBHQ1RocmVhZDsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7Cisg
ICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwogCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQot
ICAgIHZvaWQgbWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3IqKTsKLSAgICBzdGF0aWMgdm9p
ZCBtYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXApOwotI2VuZGlmCisgICAgdm9pZCBk
aXNwYXRjaFRhc2tUb1dvcmtlclRocmVhZHMoR0NUYXNrKTsKKyAgICB2b2lkIHN5bmNocm9uaXpl
V2l0aFdvcmtlclRocmVhZHMoKTsKKyAgICB2b2lkIGdldE5leHRCbG9ja3NUb0NvcHkoc2l6ZV90
Jiwgc2l6ZV90Jik7CiAKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICBDb3Bp
ZWRTcGFjZSogbV9jb3BpZWRTcGFjZTsKQEAgLTY3LDkgKzc3LDggQEAgcHJpdmF0ZToKICAgICAK
ICAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OwogCi0gICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IG1fbWFya2luZ1RocmVhZHM7Ci0gICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9tYXJraW5n
VGhyZWFkc01hcmtTdGFjazsKLSAgICAKKyAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhyZWFk
czsKKwogICAgIE11dGV4IG1fbWFya2luZ0xvY2s7CiAgICAgVGhyZWFkQ29uZGl0aW9uIG1fbWFy
a2luZ0NvbmRpdGlvbjsKICAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsKQEAg
LTc5LDEwICs4OCwyMyBAQCBwcml2YXRlOgogICAgIE11dGV4IG1fb3BhcXVlUm9vdHNMb2NrOwog
ICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKKyAgICBTcGluTG9jayBtX2NvcHlM
b2NrOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1RvQ29weTsKKyAgICBzaXpl
X3QgbV9jb3B5SW5kZXg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRM
ZW5ndGggPSAzMjsKKwogICAgIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNlSGFydmVzdGVy
Pjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwogICAgIExpc3RhYmxlSGFuZGxlcjxV
bmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzOwog
fTsKIAoraW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tzVG9Db3B5
KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tl
cigmbV9jb3B5TG9jayk7CisgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKKyAgICBlbmQgPSBzdGQ6
Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0ZyYWdtZW50
TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRleCA9IGVuZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJIZWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
bnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1l
dGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFw
Um9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMjUyLDYgKzI1
Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAgICAsIG1f
bWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRhKQogICAg
ICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hh
cmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERhdGEpCiAgICAgLCBtX2lzU2FmZVRv
Q29sbGVjdChmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtNDY0LDcg
KzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICBtX29i
amVjdFNwYWNlLmNsZWFyTWFya3MoKTsKICAgICB9CiAKLSAgICBtX3N0b3JhZ2VTcGFjZS5zdGFy
dGVkQ29weWluZygpOworICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydE1hcmtpbmcoKTsKICAgICBT
bG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgdmlzaXRvci5zZXR1cCgp
OwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7CkBAIC01ODks
NyArNTkxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAKICAgICBHQ0NP
VU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAotICAgIHZp
c2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNoTWFya2luZygp
OwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQogICAgIHNpemVfdCB2aXNpdENvdW50
ID0gdmlzaXRvci52aXNpdENvdW50KCk7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtNjAz
LDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICBtX3No
YXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwogI2VuZGlmCiAgICAgbV9zaGFyZWREYXRhLnJlc2V0
KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fc3RvcmFn
ZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNob3VsZERv
Q29weVBoYXNlKCkpIHsKKyAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29weWluZygpOwor
ICAgICAgICBDb3B5VmlzaXRvciYgdmlzaXRvciA9IG1fY29weVZpc2l0b3I7CisgICAgICAgIHZp
c2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAgIHZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsK
KyAgICAgICAgdmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICBtX3NoYXJlZERhdGEuZGlk
RmluaXNoQ29weWluZygpOworICAgIH0gCiAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmco
KTsKIH0KIApAQCAtNzM0LDYgKzc0OSwxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAKICAgICB7Cisg
ICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQo
KS5zaXplKCkpOworICAgICAgICBDb3B5RnVuY3RvciBmdW5jdG9yKG1fYmxvY2tTbmFwc2hvdCk7
CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIH0KKwor
ICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CisKKyAgICB7CiAgICAgICAgIEdDUEhBU0UoRmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAgIGZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKTsKICAgICB9CkBAIC03NTUsNyArNzc4LDcgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVjdFNwYWNlLnNocmluaygp
OwogICAgIH0KIAotICAgIG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyhtX29iamVjdFNwYWNlLmJs
b2NrcygpLnNldCgpKTsKKyAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9ja1NuYXBz
aG90KTsKICAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKIAogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmlu
ZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRT
aGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0xODIsNyArMTgzLDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIENv
cGllZFNwYWNlOworICAgICAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluY3JlbWVudGFs
U3dlZXBlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFw
Jiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxsR0MpOwogICAgICAgICB2b2lkIG1hcmtQcm90ZWN0ZWRP
YmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3Rv
cnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsK
ICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgdm9pZCBmaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAgIHZvaWQgZGVsZXRlVW5tYXJr
ZWRDb21waWxlZENvZGUoKTsKQEAgLTIzOSw2ICsyNDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAgICAgICAg
IFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgICAgIENvcHlWaXNpdG9yIG1fY29weVZp
c2l0b3I7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVT
dGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtMjU2LDYgKzI2MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNhbGxiYWNr
OwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKKyAgICAgICAgVmVjdG9y
PE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBzaG90OworICAgIH07CisKKyAgICBzdHJ1Y3QgQ29w
eUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICAgICAgQ29w
eUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisgICAgICAgICAgICA6IG1f
aW5kZXgoMCkgCisgICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2sp
IHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgCisgICAgICAgIHNpemVfdCBt
X2luZGV4OworICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7CiAgICAgfTsK
IAogICAgIGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShyZXZpc2lv
biAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHN0YXRpYyBjb25zdCBkb3Vi
bGUgc3dlZXBUaW1lTXVsdGlwbGllciAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxT
d2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5Mb29wKQogICAgIDogSGVhcFRpbWVy
KGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKICAgICAsIG1fY3VycmVudEJsb2NrVG9Td2Vl
cEluZGV4KDApCisgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9ibG9ja1NuYXBzaG90KQog
ewogfQogCkBAIC0xMjcsMTEgKzEyOCw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzd2Vl
cE5leHRCbG9jaygKICAgICB9CiB9CiAKLXZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3
ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCkKK3ZvaWQg
SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9jayo+JiBi
bG9ja1NuYXBzaG90KQogewotICAgIG1fYmxvY2tzVG9Td2VlcC5yZXNpemUoYmxvY2tTbmFwc2hv
dC5zaXplKCkpOwotICAgIENvcHlGdW5jdG9yIGZ1bmN0b3IobV9ibG9ja3NUb1N3ZWVwKTsKLSAg
ICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7
CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2tTbmFwc2hvdDsKICAgICBtX2N1cnJlbnRCbG9j
a1RvU3dlZXBJbmRleCA9IDA7CiAgICAgc2NoZWR1bGVUaW1lcigpOwogfQpAQCAtMTYwLDcgKzE1
OSw3IEBAIEluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjoKICAgICByZXR1
cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpOwogfQogCi12b2lk
IEluY3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJs
b2NrKj4mKQordm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoVmVjdG9yPE1h
cmtlZEJsb2NrKj4mKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDIzICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAotc3RydWN0
IENvcHlGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci0gICAgQ29w
eUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAgIDogbV9pbmRl
eCgwKSAKLSAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9
IGJsb2NrOyB9Ci0KLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBWZWN0b3I8TWFya2VkQmxvY2sq
PiYgbV9ibG9ja3M7Ci19OwotCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJsaWMgSGVh
cFRpbWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5jcmVtZW50YWxTd2VlcGVyKiBjcmVhdGUo
SGVhcCopOwotICAgIHZvaWQgc3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtlZEJsb2Nr
Kj4mIGJsb2NrU25hcHNob3QpOworICAgIHZvaWQgc3RhcnRTd2VlcGluZyhWZWN0b3I8TWFya2Vk
QmxvY2sqPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKTsKICAgICB2b2lkIHN3ZWVwTmV4
dEJsb2NrKCk7CiAgICAgdm9pZCB3aWxsRmluaXNoU3dlZXBpbmcoKTsKQEAgLTcxLDcgKzU4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbFRpbWVyKCk7CiAgICAgCiAgICAgdW5zaWduZWQg
bV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXg7Ci0gICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9i
bG9ja3NUb1N3ZWVwOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1RvU3dlZXA7
CiAjZWxzZQogICAgIAogICAgIEluY3JlbWVudGFsU3dlZXBlcihKU0dsb2JhbERhdGEqKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9u
IDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpzZXR1cCgp
CiAgICAgbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX2dsb2JhbERhdGEt
PmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3QoKTsKICAgICBtX3Nob3VsZEhhc2hDb25z
dCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0OwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01h
cmtTdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01h
cmtTdGFja1tpXS0+bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25z
dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9nY1RocmVhZHMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fc2hhcmVkLm1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigp
LT5tX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0OwogI2VuZGlm
CiB9CiAKQEAgLTExMiw4ICsxMTIsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25Q
YXJhbGxlbCgpCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdv
IGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KICAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrKTsKIAotICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSkKLSAg
ICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOworICAgIGlmICht
X3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMoKSkgeworICAgICAgICBtX3NoYXJlZC5kaXNwYXRjaFRhc2tUb1dvcmtlclRo
cmVhZHMoTWFyayk7CisgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5zaWduYWwo
KTsKKyAgICB9CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKQEAgLTE4MSw4ICsxODMs
NiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNo
IHRlcm1pbmF0aW9uPwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNs
YXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byBnaXZlIHRoZWlyIHByaXZhdGUgQ29waWVk
QmxvY2tzIGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0Nv
bmRpdGlvbi5icm9hZGNhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE5NiwyMSArMTk2
LDE2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBT
bGF2ZURyYWluKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBEaWQgd2Ug
ZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KLSAgICAgICAg
ICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYg
bV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAg
ICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgd2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlz
RW1wdHkoKSAmJiAhbV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFy
a2VycyAmJiBtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkb25lQ29weWluZygpOwotICAgICAgICAgICAgICAgICAgICBtX3NoYXJl
ZC5tX21hcmtpbmdDb25kaXRpb24ud2FpdChtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSB0aGUgZW5kIG9mIHRoaXMgbGl0
dGxlIGJpdCBvZiB3b3JrLCBzbyBub3RpZnkgdGhlIG1hc3RlciB0aHJlYWQuCisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycykK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5zaWdu
YWwoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgVk0gZXhpdGluZz8gSWYg
c28sIGV4aXQgdGhpcyB0aHJlYWQuCi0gICAgICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fcGFy
YWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkgewotICAgICAgICAgICAgICAgICAgICBkb25lQ29weWlu
ZygpOworICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRD
b3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgLSBtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzOwpAQCAtMjM2LDMwICsyMzEsNiBAQCB2b2lkIFNsb3RWaXNp
dG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZygpCi17Ci0gICAgQVNTRVJUKCFtX2NvcGll
ZEFsbG9jYXRvci5pc1ZhbGlkKCkpOwotfQotCi12b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVzKQotewotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2Ut
PmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7
Ci0gICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG1fc2hhcmVkLm1fY29waWVk
U3BhY2UtPmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKSk7Ci0KLSAgICB2b2lkKiByZXN1
bHQgPSAwOwotICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRv
ci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7Ci0gICAgQVNTRVJUKGRpZFN1Y2NlZWQpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5ld1Nw
YWNlT3JQaW4odm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKCFjaGVja0lmU2hv
dWxkQ29weUFuZFBpbk90aGVyd2lzZShwdHIsIGJ5dGVzKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgCi0gICAgcmV0dXJuIGFsbG9jYXRlTmV3U3BhY2UoYnl0ZXMpOwotfQotCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKQogewogI2lmIEVOQUJMRShQQVJB
TExFTF9HQykKQEAgLTMzNSwzNiArMzA2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNp
dG9yOjppbnRlcm5hbAogICAgIGludGVybmFsQXBwZW5kKGNlbGwpOwogfQogCi12b2lkIFNsb3RW
aXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwdHIsIHNpemVfdCBieXRlcywgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSAg
ICB2b2lkKiBuZXdQdHIgPSBhbGxvY2F0ZU5ld1NwYWNlT3JQaW4ob2xkUHRyLCBieXRlcyk7Ci0g
ICAgaWYgKG5ld1B0cikgewotICAgICAgICBzaXplX3QganNWYWx1ZXNPZmZzZXQgPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZhbHVlcykgLSBzdGF0aWNfY2Fz
dDxjaGFyKj4ob2xkUHRyKSk7Ci0KLSAgICAgICAgSlNWYWx1ZSogbmV3VmFsdWVzID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHN0YXRpY19jYXN0PGNoYXIqPihuZXdQdHIpICsganNW
YWx1ZXNPZmZzZXQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgIEpTVmFsdWUmIHZhbHVlID0gdmFsdWVzW2ldOwotICAgICAgICAg
ICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50ZXJuYWxBcHBlbmQoJm5ld1ZhbHVl
c1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtZW1jcHkobmV3UHRyLCBvbGRQdHIsIGpzVmFs
dWVzT2Zmc2V0KTsKLSAgICAgICAgKnB0ciA9IG5ld1B0cjsKLSAgICB9IGVsc2UKLSAgICAgICAg
YXBwZW5kKHZhbHVlcywgbGVuZ3RoKTsKLX0KLSAgICAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmVD
b3B5aW5nKCkKLXsKLSAgICBpZiAoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9j
ayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsKLX0KLQogdm9pZCBTbG90
VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICAgICBmb3IgKFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJz
LmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTMwODA2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBTbG90VmlzaXRvcl9oCiAjZGVmaW5lIFNsb3RWaXNp
dG9yX2gKIAotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKICNpbmNsdWRlICJNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgiCiAKQEAgLTgwLDIxICs3OSw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogCi0gICAgdm9pZCBzdGFydENvcHlp
bmcoKTsKKyAgICB2b2lkIGNvcHlMYXRlcih2b2lkKiwgc2l6ZV90KTsKICAgICAKLSAgICAvLyBI
aWdoLWxldmVsIEFQSSBmb3IgY29weWluZywgYXBwcm9wcmlhdGUgZm9yIGNhc2VzIHdoZXJlIHRo
ZSBvYmplY3QncyBoZWFwIHJlZmVyZW5jZXMKLSAgICAvLyBmYWxsIGludG8gYSBjb250aWd1b3Vz
IHJlZ2lvbiBvZiB0aGUgc3RvcmFnZSBjaHVuayBhbmQgaWYgdGhlIG9iamVjdCBmb3Igd2hpY2gg
eW91J3JlCi0gICAgLy8gZG9pbmcgY29weWluZyBkb2VzIG5vdCBvY2N1ciBmcmVxdWVudGx5Lgot
ICAgIHZvaWQgY29weUFuZEFwcGVuZCh2b2lkKiosIHNpemVfdCwgSlNWYWx1ZSosIHVuc2lnbmVk
KTsKLSAgICAKLSAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBm
b3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcwotICAgIC8vIGFyZSBk
aXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5vdWdoIHRo
YXQgeW91IG5lZWQgdG8gZm9jdXMgb24KLSAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRoaXMgd2l0
aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3QuCi0gICAg
Ym9vbCBjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSh2b2lkKiBvbGRQdHIsIHNpemVf
dCk7Ci0gICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QpOwotICAgIAotICAgIHZvaWQg
ZG9uZUNvcHlpbmcoKTsgCi0gICAgICAgIAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJ
TkcpCiAgICAgVlRhYmxlU3BlY3RydW0gbV92aXNpdGVkVHlwZUNvdW50czsKICNlbmRpZgpAQCAt
MTI1LDkgKzExMSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNl
c3NhcnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKICAgICAK
LSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlT3JQaW4odm9pZCosIHNpemVfdCk7Ci0gICAgdm9p
ZCogYWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90KTsKLQogICAgIHZvaWQgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogCiAgICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKQEAgLTE0Niw4ICsxMjks
NiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbG9nQ2hpbGRDb3VudDsKICNlbmRpZgogCi0g
ICAgQ29waWVkQWxsb2NhdG9yIG1fY29waWVkQWxsb2NhdG9yOwotCiBwdWJsaWM6CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRp
b247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNiwzMCArMTM2LDYgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9v
dAogICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKIH0KICAgICAKLUFMV0FZU19JTkxJTkUgYm9vbCBT
bG90VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2Uodm9pZCogb2xkUHRy
LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVz
KSkgewotICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oQ29waWVkU3BhY2U6Om92
ZXJzaXplQmxvY2tGb3Iob2xkUHRyKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+aXNQaW5uZWQob2xkUHRyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCBieXRlcykKLXsK
LSAgICB2b2lkKiByZXN1bHQgPSAwOyAvLyBDb21waWxlcnMgZG9uJ3QgcmVhbGl6ZSB0aGF0IHRo
aXMgd2lsbCBiZSBhc3NpZ25lZC4KLSAgICBpZiAoTElLRUxZKG1fY29waWVkQWxsb2NhdG9yLnRy
eUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
Ci0gICAgcmVzdWx0ID0gYWxsb2NhdGVOZXdTcGFjZVNsb3coYnl0ZXMpOwotICAgIEFTU0VSVChy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgICAgIAotCiBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6ZG9uYXRlKCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKQEAg
LTE3NSw2ICsxNTEsMjMgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWlu
KAogICAgIGRyYWluKCk7CiB9CiAKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5TGF0ZXIo
dm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJz
aXplKGJ5dGVzKSkgeworICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oQ29waWVk
U3BhY2U6Om92ZXJzaXplQmxvY2tGb3IocHRyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSBDb3BpZWRTcGFjZTo6YmxvY2tGb3IocHRyKTsKKyAg
ICBpZiAoYmxvY2stPmlzUGlubmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJsb2NrLT5y
ZXBvcnRMaXZlQnl0ZXMoYnl0ZXMpOworCisgICAgaWYgKCFibG9jay0+c2hvdWxkRXZhY3VhdGUo
KSkKKyAgICAgICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+cGluKGJsb2NrKTsKK30KKyAgICAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCShyZXZp
c2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHku
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTR2xvYmFsRGF0YTsKLWNsYXNzIFNsb3RWaXNpdG9yOworY2xhc3MgQ29weVZpc2l0b3I7
CiBzdHJ1Y3QgQXJyYXlTdG9yYWdlOwogCiBjbGFzcyBCdXR0ZXJmbHkgewpAQCAtNjQsNyArNjQs
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoSlNHbG9iYWxEYXRh
Jiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJ
bmRleGluZ0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOwogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmluaXRpYWxp
emVkRHVyaW5nQ29sbGVjdGlvbihTbG90VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6
ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlVW5p
bml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImLCBzaXplX3QgcHJlQ2FwYWNp
dHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXpl
X3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEluZGV4aW5nSGVhZGVy
KiBpbmRleGluZ0hlYWRlcigpIHsgcmV0dXJuIEluZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9
CiAgICAgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgY29uc3QgeyByZXR1
cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVNZXRob2RzLmgJKHJldmlz
aW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlu
bGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUg
IkFycmF5U3RvcmFnZS5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseS5oIgogI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxEYXRhLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBC
dXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlKEpTR2wKICAgICByZXR1cm4gY3JlYXRlKGdsb2Jh
bERhdGEsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgaGFzSW5kZXhpbmdIZWFk
ZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSksIEluZGV4aW5nSGVhZGVyKCksIDApOwogfQog
Ci1pbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdD
b2xsZWN0aW9uKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVf
dCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpCitpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKENvcHlWaXNpdG9yJiB2aXNpdG9yLCBzaXpl
X3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5n
SGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpCiB7CiAgICAgQnV0dGVy
Zmx5KiByZXN1bHQgPSBmcm9tQmFzZSgKICAgICAgICAgdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNl
KHRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCAoKlZpc2l0Q2hp
bGRyZW5GdW5jdGlvblB0cikoSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICAgICAgVmlzaXRD
aGlsZHJlbkZ1bmN0aW9uUHRyIHZpc2l0Q2hpbGRyZW47CiAKKyAgICAgICAgdHlwZWRlZiB2b2lk
ICgqQ29weUJhY2tpbmdTdG9yZUZ1bmN0aW9uUHRyKShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwor
ICAgICAgICBDb3B5QmFja2luZ1N0b3JlRnVuY3Rpb25QdHIgY29weUJhY2tpbmdTdG9yZTsKKwog
ICAgICAgICB0eXBlZGVmIENhbGxUeXBlICgqR2V0Q2FsbERhdGFGdW5jdGlvblB0cikoSlNDZWxs
KiwgQ2FsbERhdGEmKTsKICAgICAgICAgR2V0Q2FsbERhdGFGdW5jdGlvblB0ciBnZXRDYWxsRGF0
YTsKIApAQCAtMTE2LDYgKzExOSw3IEBAIHN0cnVjdCBNZW1iZXJDaGVjayMjbWVtYmVyIHsgXAog
I2RlZmluZSBDUkVBVEVfTUVUSE9EX1RBQkxFKENsYXNzTmFtZSkgeyBcCiAgICAgICAgICZDbGFz
c05hbWU6OmRlc3Ryb3ksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRDaGlsZHJlbiwgXAor
ICAgICAgICAmQ2xhc3NOYW1lOjpjb3B5QmFja2luZ1N0b3JlLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmdldENhbGxEYXRhLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldENvbnN0cnVjdERhdGEs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEw
IEBAIHZvaWQgSlNDZWxsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKICAgICBjZWxsLT5KU0NlbGw6
On5KU0NlbGwoKTsKIH0KIAordm9pZCBKU0NlbGw6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwg
Q29weVZpc2l0b3ImKQoreworfQorCiBib29sIEpTQ2VsbDo6Z2V0U3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgU3RyaW5nJiBzdHJpbmdWYWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzU3RyaW5nKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTMw
ODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBD
b3B5VmlzaXRvcjsKICAgICBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdDsKICAgICBjbGFzcyBK
U0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xMTIs
NiArMTEzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShK
U0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAgICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3
aXRoIHRoZSB0b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCiAgICAgICAgIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxMzA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKIAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgpAQCAtOTQsMTAgKzk1LDEwIEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICB9CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0
b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1
dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCiB7CiAgICAgQVNTRVJUKGJ1
dHRlcmZseSk7Ci0gICAgCisKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSgpOwogICAgIAogICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwpAQCAtMTExLDUxICsxMTIsNjYgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CiAgICAg
ICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKICAgICB9Ci0gICAgc2l6ZV90IGNh
cGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKAotICAgICAgICBwcmVDYXBhY2l0
eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICBpZiAodmlzaXRvci5jaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVy
d2lzZSgKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZp
c2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwotICAgICAgICAKLSAgICAgICAgLy8gTWFyayBh
bmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICBzaXplX3QgY2FwYWNpdHlJbkJ5dGVzID0gQnV0
dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAgICBpZiAodmlzaXRv
ci5jaGVja0lmU2hvdWxkQ29weShidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5
Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbigK
KyAgICAgICAgICAgIHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJ
bmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworCiAgICAgICAgIFBy
b3BlcnR5U3RvcmFnZSBjdXJyZW50VGFyZ2V0ID0gbmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3Jh
Z2UoKTsKICAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRTb3VyY2UgPSBidXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHN0b3JhZ2VT
aXplOyBjb3VudC0tOykgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9ICgtLWN1cnJlbnRT
b3VyY2UpLT5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKICAgICAgICAgICAgICgtLWN1
cnJlbnRUYXJnZXQpLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZhbHVlKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewogICAg
ICAgICAgICAgKm5ld0J1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKSA9ICpidXR0ZXJmbHktPmlu
ZGV4aW5nSGVhZGVyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIE1hcmsgYW5kIGNv
cHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CiAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+Y29weUhlYWRlckZyb21EdXJpbmdHQygqYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KSk7CiAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50VGFyZ2V0
ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAgICAgICAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3I7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsgY291bnQtLTsp
IHsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IChjdXJyZW50U291cmNlKysp
LT5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFZhbHVlKCZ2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIChjdXJyZW50VGFyZ2V0KyspLT5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHZh
bHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQotICAgICAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7IGNvdW50LS07KQorICAgICAgICAgICAgICAgICAgICAo
Y3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoY3VycmVudFNvdXJjZSsr
KS0+Z2V0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICAKKworICAgICAgICB2aXNpdG9yLmRpZENvcHkoYnV0dGVyZmx5LT5i
YXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKICAg
ICAgICAgbV9idXR0ZXJmbHkgPSBuZXdCdXR0ZXJmbHk7CisgICAgfQorfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXplKQoreworICAgIEFTU0VSVChi
dXR0ZXJmbHkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0
dXJlKCk7CisgICAgCisgICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0g
SlNDOjpoYXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0g
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAg
ICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFk
ZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgotICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3Jh
Z2VTaXplKTsKLSAgICAgICAgCisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKyAgICBzaXplX3QgY2FwYWNpdHlJ
bkJ5dGVzID0gQnV0dGVyZmx5Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNp
dHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisKKyAg
ICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgorICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRl
cmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOworICAg
IHZpc2l0b3IuY29weUxhdGVyKGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CisKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhp
bmdIZWFkZXIpKSB7CiAgICAgICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgog
ICAgICAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKICAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKQEAgLTE4OSw2ICsyMDUsMTYgQEAg
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogI2VuZGlmCiB9CiAKK3Zv
aWQgSlNPYmplY3Q6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+
KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5m
byk7CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgp
OworICAgIGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHko
dmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6
ZSgpKTsKK30KKwogdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEzMDgwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsx
MTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAg
ICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2Jq
ZWN0Kik7CiAKQEAgLTU5MSw2ICs1OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCByZXNldEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgdm9p
ZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdl
U2l6ZSk7CisgICAgICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZs
eSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBr
bm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAg
ICAgIC8vIHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtODU0LDE0ICs4
NTYsMTQgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogICAgIHJl
dHVybiBzdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CiAKLWlubGluZSBib29sIEpT
Q2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAoraW5saW5lIGNvbnN0
IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihpbmZvKTsKKyAgICByZXR1cm4gJmNsYXNzSW5mbygp
LT5tZXRob2RUYWJsZTsKIH0KIAotaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1l
dGhvZFRhYmxlKCkgY29uc3QKK2lubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xh
c3NJbmZvKiBpbmZvKSBjb25zdAogewotICAgIHJldHVybiAmY2xhc3NJbmZvKCktPm1ldGhvZFRh
YmxlOworICAgIHJldHVybiBjbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGluZm8pOwogfQogCiAv
LyB0aGlzIG1ldGhvZCBpcyBoZXJlIHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24g
b2YgSlNDZWxsOjppbmhlcml0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkocmV2aXNpb24gMTMwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgdih1bnNpZ25lZCwgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZSwgcGFnZVNpemUo
KSkgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZH
Q01hcmtlcnMoNykpIFwKICAgICB2KHVuc2lnbmVkLCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQs
IDEwMDApIFwKKyAgICB2KGRvdWJsZSwgbWF4Q29waWVkU3BhY2VGcmFnbWVudGF0aW9uLCAwLjgp
IFwKKyAgICB2KGRvdWJsZSwgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAwLjkpIFwKICAg
ICBcCiAgICAgdihib29sLCBmb3JjZVdlYWtSYW5kb21TZWVkLCBmYWxzZSkgXAogICAgIHYodW5z
aWduZWQsIGZvcmNlZFdlYWtSYW5kb21TZWVkLCAwKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168115</attachid>
            <date>2012-10-10 18:37:18 -0700</date>
            <delta_ts>2012-10-11 08:28:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121010183617.patch</filename>
            <type>text/plain</type>
            <size>83875</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIHBhcnRpY2lwYXRpbmcgCisgICAgICAgIGluIGEgc3BlY2lmaWMgc2V0IG9mIEdDIHBo
YXNlcy4gQ3VycmVudGx5LCB0aGF0IHNldCBvZiBwaGFzZXMgaW5jbHVkZXMgTWFyaywgQ29weSwg
YW5kIEV4aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBtb25pdG9ycyBhIHNoYXJlZCB2YXJpYWJs
ZSBpbiBpdHMgYXNzb2NpYXRlZCBHQ1RocmVhZFNoYXJlZERhdGEuIFRoZSBtYWluIHRocmVhZCB1
cGRhdGVzIHRoaXMgbV9jdXJyZW50UGhhc2UKKyAgICAgICAgdmFyaWFibGUgYXMgY29sbGVjdGlv
biBwcm9ncmVzc2VzIHRocm91Z2ggdGhlIHZhcmlvdXMgcGhhc2VzLiBQYXJhbGxlbCBtYXJraW5n
IHN0aWxsIHdvcmtzIGV4YWN0bHkgbGlrZSBpdCAKKyAgICAgICAgaGFzLiBJbiBvdGhlciB3b3Jk
cywgdGhlICJydW4gbG9vcCIgZm9yIGVhY2ggb2YgdGhlIEdDIHRocmVhZHMgc2l0cyBhYm92ZSBh
bnkgaW5kaXZpZHVhbCBwaGFzZSwgdGh1cyBrZWVwaW5nIAorICAgICAgICB0aGUgc2VwYXJhdGUg
cGhhc2VzIG9mIHRoZSBjb2xsZWN0b3Igb3J0aG9nb25hbC4KKyAgICAgICAgKEpTQzo6R0NUaHJl
YWQ6OnRocmVhZElEKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJ
RCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpzbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6
OkdDVGhyZWFkOjpjb3B5VmlzaXRvcik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjp3YWl0Rm9y
TmV4dFBoYXNlKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OmdjVGhyZWFkTWFpbik6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyk6CisgICAgICAgICogaGVhcC9H
Q1RocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ1RocmVhZCk6Cisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOiBUaGUgR0NUaHJlYWRTaGFyZWRE
YXRhIG5vdyBoYXMgYSBsaXN0IG9mIEdDVGhyZWFkIG9iamVjdHMgcmF0aGVyIHRoYW4gcmF3IAor
ICAgICAgICBUaHJlYWRJZGVudGlmaWVycy4KKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpyZXNldENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpj
aGlsZFZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhy
ZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6fkdDVGhy
ZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQp
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0TWFya2luZyk6IENh
bGxiYWNrIHRvIGxldCB0aGUgR0NUaHJlYWRTaGFyZWREYXRhIGtub3cgdGhhdCBtYXJraW5nIGhh
cyAKKyAgICAgICAgc3RhcnRlZCBhbmQgdXBkYXRlcyB0aGUgbV9jdXJyZW50UGhhc2UgdmFyaWFi
bGUgYW5kIG5vdGlmaWVzIHRoZSBHQ1RocmVhZHMgYWNjb3JkaW5nbHkuCisgICAgICAgIChKU0M6
OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRvIGZvciBmaW5pc2hp
bmcgbWFya2luZy4gCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRD
b3B5aW5nKTogRGl0dG8gZm9yIHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAo
SlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmlu
aXNoaW5nIGNvcHlpbmcuIAorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpT
Qzo6R0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tzVG9Db3B5KTogQXRvbWljYWxseSBn
ZXRzIHRoZSBuZXh0IGNodW5rIG9mIHdvcmsgZm9yIGEgY29weWluZyB0aHJlYWQuCisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFw
Ojpjb3B5QmFja2luZ1N0b3Jlcyk6IFJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb3B5
aW5nIHBoYXNlLCBub3RpZnlpbmcgdGhlIGNvcHlpbmcgdGhyZWFkcywgCisgICAgICAgIGFuZCBk
b2luZyBhbnkgY29weWluZyB3b3JrIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKEpTQzo6SGVhcDo6
Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChIZWFwKToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvcHlGdW5jdG9yOjpDb3B5RnVuY3Rvcik6CisgICAg
ICAgIChDb3B5RnVuY3Rvcik6CisgICAgICAgIChKU0M6OkNvcHlGdW5jdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHA6IENoYW5nZWQgdGhlIGlu
Y3JlbWVudGFsIHN3ZWVwZXIgdG8gaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgbGlzdCBvZiBNYXJr
ZWRCbG9ja3MgCisgICAgICAgIHRoYXQgbmVlZCBzd2VlcGluZywgc2luY2UgdGhpcyBub3cgcmVz
aWRlcyBpbiB0aGUgSGVhcCBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgc2hhcmVkIGJ5IHRoZSBH
Q1RocmVhZHMuCisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxT
d2VlcGVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5n
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEluY3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQpOiBXZSBubyBsb25nZXIgZG8gYW55IGNvcHlp
bmctcmVsYXRlZCB3b3JrIGhlcmUuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKFNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmNvcHlMYXRlcik6IE5vdGlmaWVzIHRoZSBDb3BpZWRCbG9jayB0aGF0IHRoZXJl
IGFyZSBzb21lIGxpdmUgYnl0ZXMgdGhhdCBtYXkgbmVlZCAKKyAgICAgICAgdG8gYmUgY29waWVk
LgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQnV0dGVyZmx5KToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMu
aDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbik6IFVzZXMgdGhlIG5ldyBDb3B5VmlzaXRvci4KKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOiBBZGRlZCBuZXcgInZpcnR1YWwiIGZ1
bmN0aW9uIGNvcHlCYWNraW5nU3RvcmUgdG8gbWV0aG9kIHRhYmxlLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y29w
eUJhY2tpbmdTdG9yZSk6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdGhpbmcu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkpOiBEb2VzIHRoZSBhY3R1YWwg
Y29weWluZyBvZiB0aGUgYnV0dGVyZmx5LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KTogQ2FsbHMgY29weUxhdGVyIGZvciB0aGUgYnV0dGVy
Zmx5LgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk6IAorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjptZXRob2RUYWJsZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5oZXJpdHMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOiBBZGRlZCB0d28gbmV3IGNvbnN0YW50cywg
bWF4SGVhcEZyYWdtZW50YXRpb24gYW5kIG1heENvcGllZEJsb2NrRnJhZ21lbnRhdGlvbiwgCisg
ICAgICAgIHRvIGdvdmVybiB0aGUgYW1vdW50IG9mIGZyYWdtZW50YXRpb24gd2UgYWxsb3cgYmVm
b3JlIGRvaW5nIGNvcHlpbmcuCisgICAgICAgIChKU0MpOgorCiAyMDEyLTEwLTEwICBCYWxhenMg
S2lsdmFkeSAgPGtpbHZhZHliQGhvbWVqaW5uaS5jb20+CiAKICAgICAgICAgUmVnaXN0ZXJGaWxl
IHRvIEpTU3RhY2sgcmVuYW1lIGZpeCBmb3IgYSBzdHJ1Y3QgbWVtYmVyLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3
LDEwIEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKICAgICBoZWFwL0Jsb2NrQWxsb2Nh
dG9yLmNwcAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCisgICAgaGVhcC9Db3B5VmlzaXRvci5j
cHAKICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAogICAgIGhlYXAvREZHQ29kZUJsb2Nr
cy5jcHAKKyAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRh
LmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcAogICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24g
MTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTI1Niw2ICsyNTYsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIFwKKyAgICBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29weVZpc2l0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
YXJkU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaCBc
CkBAIC0yODAsNiArMjgzLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuaCBcCiAgICAgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBcCiAgICAgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NUaHJlYWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBcCiAgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIFwKICAgICBieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcCBcCiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAorICAgIGhlYXAvQ29w
eVZpc2l0b3IuY3BwIFwKICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAgICAgaGVh
cC9ERkdDb2RlQmxvY2tzLmNwcCBcCiAgICAgaGVhcC9XZWFrU2V0LmNwcCBcCkBAIC04Miw2ICs4
Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwIFwKICAgICBoZWFw
L0Jsb2NrQWxsb2NhdG9yLmNwcCBcCiAgICAgaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwIFwK
KyAgICBoZWFwL0dDVGhyZWFkLmNwcCBcCiAgICAgaGVhcC9IZWFwLmNwcCBcCiAgICAgaGVhcC9I
ZWFwU3RhdGlzdGljcy5jcHAgXAogICAgIGhlYXAvSGVhcFRpbWVyLmNwcCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2
aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw2ICsxMTYsNyBAQCBFWFBPUlRTCiAgICAgP2NvbnZlcnRMYXRpbjFUb1VURjhAVW5pY29k
ZUBXVEZAQFlBP0FXNENvbnZlcnNpb25SZXN1bHRAMTJAUEFQQkVQQkVQQVBBRFBBREBaCiAgICAg
P2NvbnZlcnRVVEYxNlRvVVRGOEBVbmljb2RlQFdURkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAx
MkBQQVBCX1dQQl9XUEFQQURQQURfTkBaCiAgICAgP2NvbnZlcnRVVEY4VG9VVEYxNkBVbmljb2Rl
QFdURkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCRFBCRFBBUEFfV1BBX1dfTkBaCisg
ICAgP2NvcHlCYWNraW5nU3RvcmVASlNPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBBQVZDb3B5
VmlzaXRvckAyQEBaCiAgICAgP2NyZWF0ZUBKU0Z1bmN0aW9uQEpTQ0BAU0FQQVYxMkBQQVZFeGVj
U3RhdGVAMkBQQVZKU0dsb2JhbE9iamVjdEAyQEhBQlZTdHJpbmdAV1RGQEBQNklfSjBAWlc0SW50
cmluc2ljQDJAM0BaCiAgICAgP2NyZWF0ZUBKU0dsb2JhbERhdGFASlNDQEBTQT9BVj8kUGFzc1Jl
ZlB0ckBWSlNHbG9iYWxEYXRhQEpTQ0BAQFdURkBAVzRUaHJlYWRTdGFja1R5cGVAMkBXNEhlYXBU
eXBlQDJAQFoKICAgICA/Y3JlYXRlQFJlZ0V4cEBKU0NAQFNBUEFWMTJAQUFWSlNHbG9iYWxEYXRh
QDJAQUJWU3RyaW5nQFdURkBAVzRSZWdFeHBGbGFnc0AyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNp
b24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIzNTQsNiArMjM1NCwxOCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlxoZWFwXENvcHlWaXNpdG9yLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxDb3B5VmlzaXRvci5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFw
XENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXERGR0NvZGVCbG9ja3MuY3BwIgogCQkJCT4K
IAkJCTwvRmlsZT4KQEAgLTI0NTAsNiArMjQ2MiwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEdDVGhyZWFkLmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxHQ1Ro
cmVhZC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03MTEsNiArNzExLDExIEBACiAJCUMyMTEyMkUyMTVERDlBQjMw
MDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVh
ZFNoYXJlZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIy
RTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjE2MEZFNzE1RjdFOTVF
MDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
MjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi87IH07CisJCUMyMjM5
RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENv
cHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlE
MTQxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMjM5RDFBMTYyNjJC
REQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3Bw
ICovOyB9OworCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE2MTYyNjJCREQw
MDVBQzVGRCAvKiBHQ1RocmVhZC5oICovOyB9OwogCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLzsg
fTsKIAkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRE
NjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3Bp
ZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovOyB9OwpAQCAt
MTQ5NCw2ICsxNDk5LDExIEBACiAJCUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NU
aHJlYWRTaGFyZWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIy
REYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzIxMTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGlu
ZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrSW5s
aW5lTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjIzOUQxMjE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29weVZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyMzlEMTQxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0
aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvcklubGlu
ZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyMzlEMTUxNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdDVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyMzlE
MTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdDVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjU0
OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFw
U3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODI3LDYgKzE4
MzcsMTEgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyMjM5RDEyMTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8sCisJCQkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmggKi8sCisJCQkJQzIyMzlEMTQxNjI2MkJERDAwNUFDNUZEIC8qIENv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oICovLAorCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5jcHAgKi8sCisJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdD
VGhyZWFkLmggKi8sCiAJCQkJQzI0RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0
aWNzLmNwcCAqLywKIAkJCQlDMjREMzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3Rp
Y3MuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3Bw
ICovLApAQCAtMjU5MCw2ICsyNjA1LDggQEAKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIg
LyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgw
MEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMy
MTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBT
dGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTgg
LyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVG
MDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLywKQEAgLTI5ODIsNiAr
Mjk5OSw3IEBACiAJCQkJODYyNTUzRDIxNjEzNkUxQTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjIzOUQxQjE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzU5MCw2ICszNjA4LDggQEAK
IAkJCQkwRjU1NDFCMTE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyMzlEMUExNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSGVhcEJsb2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5o
IgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5o
IgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MSw2
ICs0MywxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGUoY29uc3Qg
UGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBjcmVhdGVO
b1plcm9GaWxsKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYpOwogCisgICAgYm9vbCBpc1Bp
bm5lZCgpOworCisgICAgdW5zaWduZWQgbGl2ZUJ5dGVzKCk7CisgICAgdm9pZCByZXBvcnRMaXZl
Qnl0ZXModW5zaWduZWQpOworICAgIHZvaWQgZGlkU3Vydml2ZUdDKCk7CisgICAgYm9vbCBkaWRF
dmFjdWF0ZUJ5dGVzKHVuc2lnbmVkKTsKKyAgICBib29sIHNob3VsZEV2YWN1YXRlKCk7CisgICAg
Ym9vbCBjYW5CZVJlY3ljbGVkKCk7CisKICAgICAvLyBUaGUgcGF5bG9hZCBpcyB0aGUgcmVnaW9u
IG9mIHRoZSBibG9jayB0aGF0IGlzIHVzYWJsZSBmb3IgYWxsb2NhdGlvbnMuCiAgICAgY2hhciog
cGF5bG9hZCgpOwogICAgIGNoYXIqIHBheWxvYWRFbmQoKTsKQEAgLTY2LDYgKzc3LDcgQEAgcHJp
dmF0ZToKIAogICAgIHNpemVfdCBtX3JlbWFpbmluZzsKICAgICB1aW50cHRyX3QgbV9pc1Bpbm5l
ZDsKKyAgICB1bnNpZ25lZCBtX2xpdmVCeXRlczsKIH07CiAKIGlubGluZSBDb3BpZWRCbG9jayog
Q29waWVkQmxvY2s6OmNyZWF0ZU5vWmVyb0ZpbGwoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVk
JiBhbGxvY2F0aW9uKQpAQCAtOTYsMTAgKzEwOCw2MCBAQCBpbmxpbmUgQ29waWVkQmxvY2s6OkNv
cGllZEJsb2NrKGNvbnN0IFBhCiAgICAgOiBIZWFwQmxvY2s8Q29waWVkQmxvY2s+KGFsbG9jYXRp
b24pCiAgICAgLCBtX3JlbWFpbmluZyhwYXlsb2FkQ2FwYWNpdHkoKSkKICAgICAsIG1faXNQaW5u
ZWQoZmFsc2UpCisgICAgLCBtX2xpdmVCeXRlcygwKQogewogICAgIEFTU0VSVChpczhCeXRlQWxp
Z25lZChyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3JlbWFpbmluZykpKTsKIH0KIAoraW5saW5l
IHZvaWQgQ29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAg
ICB1bnNpZ25lZCBvbGRWYWx1ZSA9IDA7CisgICAgdW5zaWduZWQgbmV3VmFsdWUgPSAwOworICAg
IGRvIHsKKyAgICAgICAgb2xkVmFsdWUgPSBtX2xpdmVCeXRlczsKKyAgICAgICAgbmV3VmFsdWUg
PSBvbGRWYWx1ZSArIGJ5dGVzOworICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dh
cCgmbV9saXZlQnl0ZXMsIG9sZFZhbHVlLCBuZXdWYWx1ZSkpOworfQorCitpbmxpbmUgdm9pZCBD
b3BpZWRCbG9jazo6ZGlkU3Vydml2ZUdDKCkKK3sKKyAgICBtX2xpdmVCeXRlcyA9IDA7CisgICAg
bV9pc1Bpbm5lZCA9IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6ZGlkRXZh
Y3VhdGVCeXRlcyh1bnNpZ25lZCBieXRlcykKK3sKKyAgICBBU1NFUlQobV9saXZlQnl0ZXMgPj0g
Ynl0ZXMpOworICAgIHVuc2lnbmVkIG9sZFZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBuZXdWYWx1
ZSA9IDA7CisgICAgZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fbGl2ZUJ5dGVzOworICAgICAg
ICBuZXdWYWx1ZSA9IG9sZFZhbHVlIC0gYnl0ZXM7CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0Nv
bXBhcmVBbmRTd2FwKCZtX2xpdmVCeXRlcywgb2xkVmFsdWUsIG5ld1ZhbHVlKSk7CisgICAgQVNT
RVJUKG1fbGl2ZUJ5dGVzIDwgb2xkVmFsdWUpOworICAgIHJldHVybiAhbmV3VmFsdWU7Cit9CisK
K2lubGluZSBib29sIENvcGllZEJsb2NrOjpjYW5CZVJlY3ljbGVkKCkKK3sKKyAgICByZXR1cm4g
IW1fbGl2ZUJ5dGVzOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6c2hvdWxkRXZhY3Vh
dGUoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fbGl2ZUJ5dGVzKSAvIHN0
YXRpY19jYXN0PGRvdWJsZT4ocGF5bG9hZENhcGFjaXR5KCkpIDw9IE9wdGlvbnM6Om1heENvcGll
ZEJsb2NrRnJhZ21lbnRhdGlvbigpOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQ
aW5uZWQoKQoreworICAgIHJldHVybiBtX2lzUGlubmVkOworfQorCitpbmxpbmUgdW5zaWduZWQg
Q29waWVkQmxvY2s6OmxpdmVCeXRlcygpCit7CisgICAgcmV0dXJuIG1fbGl2ZUJ5dGVzOworfQor
CiBpbmxpbmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQogewogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgoc2l6ZW9mKENvcGllZEJsb2NrKSArIDcpICYg
fjcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAko
cmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3Bh
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3Bp
ZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
KyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNiw2ICszNyw3
IEBAIENvcGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAgICwgbV90b1NwYWNl
KDApCiAgICAgLCBtX2Zyb21TcGFjZSgwKQogICAgICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkK
KyAgICAsIG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVk
QmxvY2tzKDApCiB7CiAgICAgbV90b1NwYWNlTG9jay5Jbml0KCk7CkBAIC0xNTIsMTUgKzE1NCwx
OCBAQCBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxv
Y2sqIGJsb2NrKQordm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9j
ayogYmxvY2ssIENvcGllZEJsb2NrKiogZXhjaGFuZ2UpCiB7CiAgICAgQVNTRVJUKG1faW5Db3B5
aW5nUGhhc2UpOwogICAgIAorICAgIGlmIChleGNoYW5nZSkKKyAgICAgICAgKmV4Y2hhbmdlID0g
YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOworCiAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFibG9jay0+ZGF0YVNpemUoKSkgewotICAgICAgICByZWN5
Y2xlQmxvY2soYmxvY2spOworICAgICAgICByZWN5Y2xlQm9ycm93ZWRCbG9jayhibG9jayk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4Miw2ICsxODcsMzggQEAgdm9pZCBDb3BpZWRT
cGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0KIAordm9pZCBDb3BpZWRTcGFj
ZTo6c3RhcnRlZENvcHlpbmcoKQoreworICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1Nw
YWNlKTsKKworICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNl
dEN1cnJlbnRCbG9jaygpOworCisgICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOworICAgIHNpemVf
dCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOwor
ICAgIGZvciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7
IGJsb2NrID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAg
aWYgKCFibG9jay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAg
ICAgICAgICByZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRl
cygpOworICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHko
KTsKKyAgICB9CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0
U3BhY2UoKS5jYXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRv
dWJsZSl0b3RhbExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxV
c2FibGVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2Ug
PSB0b3RhbEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWF4Q29waWVkU3BhY2VGcmFnbWVudGF0
aW9uKCk7CisgICAgaWYgKCFtX3Nob3VsZERvQ29weVBoYXNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQobV9zaG91bGREb0NvcHlQaGFzZSk7CisgICAgQVNTRVJUKCFtX2luQ29weWlu
Z1BoYXNlKTsKKyAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOworICAgIG1faW5D
b3B5aW5nUGhhc2UgPSB0cnVlOworfQorCiB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygp
CiB7CiAgICAgewpAQCAtMTkwLDEyICsyMjcsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNv
cHlpbmcoKQogICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5l
ZEJsb2Nrc0xvY2spOwogICAgIH0KIAotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAg
ICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSA9PSBtX3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBt
X2luQ29weWluZ1BoYXNlID0gZmFsc2U7CisKICAgICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0Vt
cHR5KCkpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92
ZUhlYWQoKTsKLSAgICAgICAgaWYgKGJsb2NrLT5tX2lzUGlubmVkKSB7Ci0gICAgICAgICAgICBi
bG9jay0+bV9pc1Bpbm5lZCA9IGZhbHNlOworICAgICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkg
fHwgIW1fc2hvdWxkRG9Db3B5UGhhc2UpIHsKKyAgICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZl
R0MoKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2Nr
U2V0IGJlY2F1c2UgaXQgd2FzIG5ldmVyIHJlbW92ZWQuCiAgICAgICAgICAgICBBU1NFUlQobV9i
bG9ja1NldC5jb250YWlucyhibG9jaykpOwogICAgICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQo
cmVpbnRlcnByZXRfY2FzdDxCaXRzPihibG9jaykpOwpAQCAtMjEwLDEzICsyNDgsMTMgQEAgdm9p
ZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgIENvcGllZEJsb2NrKiBjdXJyID0gbV9v
dmVyc2l6ZUJsb2Nrcy5oZWFkKCk7CiAgICAgd2hpbGUgKGN1cnIpIHsKICAgICAgICAgQ29waWVk
QmxvY2sqIG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0gICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5l
ZCkgeworICAgICAgICBpZiAoIWN1cnItPmlzUGlubmVkKCkpIHsKICAgICAgICAgICAgIG1fb3Zl
cnNpemVCbG9ja3MucmVtb3ZlKGN1cnIpOwogICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUo
Y3Vycik7CiAgICAgICAgICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveShjdXJyKS5kZWFsbG9jYXRl
KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWlu
dGVycHJldF9jYXN0PEJpdHM+KGN1cnIpKTsKLSAgICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQg
PSBmYWxzZTsKKyAgICAgICAgICAgIGN1cnItPmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9CiAg
ICAgICAgIGN1cnIgPSBuZXh0OwogICAgIH0KQEAgLTIyNSw2ICsyNjMsOCBAQCB2b2lkIENvcGll
ZFNwYWNlOjpkb25lQ29weWluZygpCiAgICAgICAgIGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNl
CiAgICAgICAgIG1fYWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7
CisKKyAgICBtX3Nob3VsZERvQ29weVBoYXNlID0gZmFsc2U7CiB9CiAKIHNpemVfdCBDb3BpZWRT
cGFjZTo6c2l6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
LmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSGVhcDsKIGNs
YXNzIENvcGllZEJsb2NrOwogCiBjbGFzcyBDb3BpZWRTcGFjZSB7CisgICAgZnJpZW5kIGNsYXNz
IENvcHlWaXNpdG9yOwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQg
Y2xhc3MgSklUOwogcHVibGljOgpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90
IGNhcGFjaXR5KCk7CiAKICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKKyAg
ICBib29sIHNob3VsZERvQ29weVBoYXNlKCkgeyByZXR1cm4gbV9zaG91bGREb0NvcHlQaGFzZTsg
fQogCiAgICAgc3RhdGljIENvcGllZEJsb2NrKiBibG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDgg
KzkwLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFsbG9jYXRlQmxvY2soKTsKICAgICBDb3BpZWRC
bG9jayogYWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOwogCi0gICAgdm9pZCBkb25lRmls
bGluZ0Jsb2NrKENvcGllZEJsb2NrKik7Ci0gICAgdm9pZCByZWN5Y2xlQmxvY2soQ29waWVkQmxv
Y2sqKTsKKyAgICB2b2lkIGRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9j
ayoqKTsKKyAgICB2b2lkIHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayopOworICAg
IHZvaWQgcmVjeWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqKTsKIAogICAgIEhlYXAqIG1f
aGVhcDsKIApAQCAtMTA4LDYgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlz
dDxDb3BpZWRCbG9jaz4gbV9vdmVyc2l6ZUJsb2NrczsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlp
bmdQaGFzZTsKKyAgICBib29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CiAKICAgICBNdXRleCBtX2xv
YW5lZEJsb2Nrc0xvY2s7IAogICAgIFRocmVhZENvbmRpdGlvbiBtX2xvYW5lZEJsb2Nrc0NvbmRp
dGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTMsMTkgKzkzLDIwIEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2Fy
eSgKICAgICAgICAgcGluKGJsb2NrKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0
YXJ0ZWRDb3B5aW5nKCkKK2lubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewotICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwg
bV90b1NwYWNlKTsKLQotICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRv
ci5yZXNldEN1cnJlbnRCbG9jaygpOwotCi0gICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsK
LSAgICBBU1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhh
c2UgPSB0cnVlOworICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJl
Y3ljbGVkKCkpOworICAgIEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOworICAgIHsKKyAgICAg
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAgICAgbV9ibG9j
a1NldC5yZW1vdmUoYmxvY2spOworICAgICAgICBtX2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsK
KyAgICB9CisgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxv
Y2s6OmRlc3Ryb3koYmxvY2spKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3lj
bGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVj
eWNsZUJvcnJvd2VkQmxvY2soQ29waWVkQmxvY2sqIGJsb2NrKQogewogICAgIG1faGVhcC0+Ymxv
Y2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgorI2luY2x1ZGUg
IkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworQ29weVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhy
ZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQorICAgIDogbV9zaGFyZWQoc2hhcmVkKQoreworfQorCit2
b2lkIENvcHlWaXNpdG9yOjpjb3B5RnJvbVNoYXJlZCgpCit7CisgICAgR0NDb3B5UGhhc2VGdW5j
dG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja3NUb0Nv
cHkgPSBtX3NoYXJlZC5tX2Jsb2Nrc1RvQ29weTsKKyAgICBzaXplX3Qgc3RhcnRJbmRleCwgZW5k
SW5kZXg7CisKKyAgICBtX3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVu
ZEluZGV4KTsKKyAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGVuZEluZGV4KSB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykKKyAgICAgICAgICAg
IGJsb2Nrc1RvQ29weVtpXS0+Zm9yRWFjaExpdmVDZWxsKGZ1bmN0b3IpOworICAgICAgICBtX3No
YXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB9Cisg
ICAgQVNTRVJUKHN0YXJ0SW5kZXggPT0gZW5kSW5kZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9y
X2gKKyNkZWZpbmUgQ29weVZpc2l0b3JfaAorCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKworY2xhc3MgQ29w
eVZpc2l0b3IgeworcHVibGljOgorICAgIENvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYp
OworCisgICAgdm9pZCBjb3B5RnJvbVNoYXJlZCgpOworCisgICAgdm9pZCBzdGFydENvcHlpbmco
KTsKKyAgICB2b2lkIGRvbmVDb3B5aW5nKCk7CisKKyAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBj
b3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVm
ZXJlbmNlcworICAgIC8vIGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJz
IGZyZXF1ZW50bHkgZW5vdWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24KKyAgICAvLyBwZXJm
b3JtYW5jZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNl
bGYgaW4gdGhlIGZvb3QuCisgICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weSh2b2lkKiwgc2l6ZV90
KTsKKyAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7CisgICAgdm9pZCBkaWRDb3B5
KHZvaWQqLCBzaXplX3QpOworCitwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VT
bG93KHNpemVfdCk7CisKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworICAgIENv
cGllZEFsbG9jYXRvciBtX2NvcGllZEFsbG9jYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9y
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5VmlzaXRvcklubGluZU1l
dGhvZHNfaAorI2RlZmluZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAi
Q2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJHQ1RocmVh
ZFNoYXJlZERhdGEuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0
aWJsZU9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NDb3B5UGhhc2VGdW5j
dG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CitwdWJsaWM6CisgICAgR0ND
b3B5UGhhc2VGdW5jdG9yKENvcHlWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRv
cih2aXNpdG9yKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBj
ZWxsKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIWhh
c0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUuY29weUJhY2tpbmdTdG9yZSA9PSBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk7Cisg
ICAgICAgIEpTT2JqZWN0Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIG1fdmlzaXRvcik7CisgICAg
fQorCitwcml2YXRlOgorICAgIENvcHlWaXNpdG9yJiBtX3Zpc2l0b3I7Cit9OworCitpbmxpbmUg
Ym9vbCBDb3B5VmlzaXRvcjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRyLCBzaXplX3Qg
Ynl0ZXMpCit7CisgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAg
ICAgICBBU1NFUlQoQ29waWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iob2xkUHRyKS0+aXNQaW5u
ZWQoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoQ29waWVkU3Bh
Y2U6OmJsb2NrRm9yKG9sZFB0ciktPmlzUGlubmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9j
YXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENv
bXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgorICAgIGlm
IChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1Nw
YWNlU2xvdyhieXRlcyk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30gICAgICAgCisKK2lubGluZSB2b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNs
b3coc2l6ZV90IGJ5dGVzKQoreworICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IDA7CisgICAg
bV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRv
ci5yZXNldEN1cnJlbnRCbG9jaygpLCAmbmV3QmxvY2spOworICAgIG1fY29waWVkQWxsb2NhdG9y
LnNldEN1cnJlbnRCbG9jayhuZXdCbG9jayk7CisKKyAgICB2b2lkKiByZXN1bHQgPSAwOworICAg
IENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0
ZShieXRlcywgJnJlc3VsdCk7CisgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2lubGluZSB2b2lkIENvcHlWaXNpdG9yOjpzdGFydENvcHlpbmcoKQorewor
ICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKKyAgICBDb3BpZWRCbG9j
ayogYmxvY2sgPSAwOworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxv
Y2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJmJsb2NrKTsKKyAgICBt
X2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2soYmxvY2spOworfQorCitpbmxpbmUgdm9p
ZCBDb3B5VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQoreworICAgIGlmICghbV9jb3BpZWRBbGxvY2F0
b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNw
YWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2Nr
KCksIDApOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZGlkQ29weSh2b2lkKiBwdHIs
IHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoIUNvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5
dGVzKSk7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0
cik7CisgICAgQVNTRVJUKCFibG9jay0+aXNQaW5uZWQoKSk7CisKKyAgICBpZiAoYmxvY2stPmRp
ZEV2YWN1YXRlQnl0ZXMoYnl0ZXMpKQorICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5y
ZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHQ1RocmVhZC5oIgorCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNp
bmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNo
YXJlZERhdGEuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK0dDVGhyZWFkOjpHQ1RocmVhZChHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZCwgU2xvdFZp
c2l0b3IqIHNsb3RWaXNpdG9yLCBDb3B5VmlzaXRvciogY29weVZpc2l0b3IsIHNpemVfdCBpbmRl
eCkKKyAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAsIG1fc2hhcmVkKHNoYXJlZCkKKyAgICAsIG1f
c2xvdFZpc2l0b3IoV1RGOjphZG9wdFB0cihzbG90VmlzaXRvcikpCisgICAgLCBtX2NvcHlWaXNp
dG9yKFdURjo6YWRvcHRQdHIoY29weVZpc2l0b3IpKQorICAgICwgbV9pbmRleChpbmRleCkKK3sK
K30KKworVGhyZWFkSWRlbnRpZmllciBHQ1RocmVhZDo6dGhyZWFkSUQoKQoreworICAgIEFTU0VS
VChtX3RocmVhZElEKTsKKyAgICByZXR1cm4gbV90aHJlYWRJRDsKK30KKwordm9pZCBHQ1RocmVh
ZDo6aW5pdGlhbGl6ZVRocmVhZElEKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAg
QVNTRVJUKCFtX3RocmVhZElEKTsKKyAgICBtX3RocmVhZElEID0gdGhyZWFkSUQ7Cit9CisKK1Ns
b3RWaXNpdG9yKiBHQ1RocmVhZDo6c2xvdFZpc2l0b3IoKQoreworICAgIEFTU0VSVChtX3Nsb3RW
aXNpdG9yKTsKKyAgICByZXR1cm4gbV9zbG90VmlzaXRvci5nZXQoKTsKK30KKworQ29weVZpc2l0
b3IqIEdDVGhyZWFkOjpjb3B5VmlzaXRvcigpCit7CisgICAgQVNTRVJUKG1fY29weVZpc2l0b3Ip
OworICAgIHJldHVybiBtX2NvcHlWaXNpdG9yLmdldCgpOworfQorCitHQ1BoYXNlIEdDVGhyZWFk
Ojp3YWl0Rm9yTmV4dFBoYXNlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQu
bV9waGFzZUxvY2spOworICAgIHdoaWxlIChtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZSA9PSBOb1Bo
YXNlKQorICAgICAgICBtX3NoYXJlZC5tX3BoYXNlQ29uZGl0aW9uLndhaXQobV9zaGFyZWQubV9w
aGFzZUxvY2spOworICAgIHJldHVybiBtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZTsKK30KKwordm9p
ZCBHQ1RocmVhZDo6Z2NUaHJlYWRNYWluKCkKK3sKKyAgICBHQ1BoYXNlIGN1cnJlbnRQaGFzZTsK
KyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKCk7Cisj
ZW5kaWYKKyAgICAvLyBXYWl0IGZvciB0aGUgbWFpbiB0aHJlYWQgdG8gZmluaXNoIGNyZWF0aW5n
IHVzLgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFya2lu
Z0xvY2spOworICAgIH0KKyAgICB7CisgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cigqbV9zbG90VmlzaXRvcik7CisgICAgICAgIHdoaWxlICgoY3VycmVudFBoYXNlID0gd2FpdEZv
ck5leHRQaGFzZSgpKSAhPSBFeGl0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQaGFz
ZSkgeworICAgICAgICAgICAgY2FzZSBNYXJrOgorICAgICAgICAgICAgICAgIG1fc2xvdFZpc2l0
b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvcHk6CisgICAgICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHN0YXJ0Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQg
Zm9yIHVzIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9y
LT5zdGFydENvcHlpbmcoKTsKKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJv
bVNoYXJlZCgpOworICAgICAgICAgICAgICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vUGhhc2U6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEV4aXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGRhdGEp
Cit7CisgICAgR0NUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19jYXN0PEdDVGhyZWFkKj4oZGF0YSk7
CisgICAgdGhyZWFkLT5nY1RocmVhZE1haW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHQ1RocmVhZF9oCisjZGVmaW5lIEdDVGhy
ZWFkX2gKKworI2luY2x1ZGUgPEdDVGhyZWFkU2hhcmVkRGF0YS5oPgorI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb3B5VmlzaXRvcjsKK2NsYXNzIEdDVGhy
ZWFkU2hhcmVkRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBHQ1RocmVhZCB7Citw
dWJsaWM6CisgICAgR0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRhJiwgU2xvdFZpc2l0b3IqLCBD
b3B5VmlzaXRvciosIHNpemVfdCk7CisKKyAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IoKTsK
KyAgICBDb3B5VmlzaXRvciogY29weVZpc2l0b3IoKTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElEKCk7CisgICAgdm9pZCBpbml0aWFsaXplVGhyZWFkSUQoVGhyZWFkSWRlbnRpZmllcik7
CisKKyAgICBzdGF0aWMgdm9pZCBnY1RocmVhZFN0YXJ0RnVuYyh2b2lkKik7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBnY1RocmVhZE1haW4oKTsKKyAgICBHQ1BoYXNlIHdhaXRGb3JOZXh0UGhhc2Uo
KTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBHQ1RocmVhZFNoYXJl
ZERhdGEmIG1fc2hhcmVkOworICAgIE93blB0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsK
KyAgICBPd25QdHI8Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CisgICAgc2l6ZV90IG1faW5k
ZXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9u
IDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQ1ICsyNiwzMCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogCisjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtT
dGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0
YTo6cmVzZXRDaGlsZHJlbigpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFy
a2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWFya2luZ1RocmVh
ZHNNYXJrU3RhY2tbaV0tPnJlc2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dj
VGhyZWFkcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9y
KCktPnJlc2V0KCk7CiB9CiAKIHNpemVfdCBHQ1RocmVhZFNoYXJlZERhdGE6OmNoaWxkVmlzaXRD
b3VudCgpCiB7ICAgICAgIAogICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsr
aSkKLSAgICAgICAgcmVzdWx0ICs9IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnZpc2l0
Q291bnQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+
dmlzaXRDb3VudCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KLXZvaWQgR0NUaHJlYWRTaGFy
ZWREYXRhOjptYXJraW5nVGhyZWFkTWFpbihTbG90VmlzaXRvciogc2xvdFZpc2l0b3IpCi17Ci0g
ICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKCk7Ci0gICAgewotICAgICAgICBQYXJhbGxlbE1vZGVF
bmFibGVyIGVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKLSAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWlu
RnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7Ci0gICAgfQotICAgIGRlbGV0ZSBz
bG90VmlzaXRvcjsKLX0KLQotdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6Om1hcmtpbmdUaHJlYWRT
dGFydEZ1bmModm9pZCogbXlWaXNpdG9yKQoteyAgICAgICAgICAgICAgIAotICAgIFNsb3RWaXNp
dG9yKiBzbG90VmlzaXRvciA9IHN0YXRpY19jYXN0PFNsb3RWaXNpdG9yKj4obXlWaXNpdG9yKTsK
LQotICAgIHNsb3RWaXNpdG9yLT5zaGFyZWREYXRhKCkubWFya2luZ1RocmVhZE1haW4oc2xvdFZp
c2l0b3IpOwotfQogI2VuZGlmCiAKIEdDVGhyZWFkU2hhcmVkRGF0YTo6R0NUaHJlYWRTaGFyZWRE
YXRhKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTc0LDEzICs1OSwyMiBAQCBHQ1RocmVh
ZFNoYXJlZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YShKCiAgICAgLCBtX3NoYXJlZE1hcmtTdGFj
ayhtX3NlZ21lbnRBbGxvY2F0b3IpCiAgICAgLCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzKDApCiAgICAgLCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFsc2UpCisgICAgLCBt
X2Jsb2Nrc1RvQ29weShnbG9iYWxEYXRhLT5oZWFwLm1fYmxvY2tTbmFwc2hvdCkKKyAgICAsIG1f
Y29weUluZGV4KDApCisgICAgLCBtX2N1cnJlbnRQaGFzZShOb1BoYXNlKQogeworICAgIG1fY29w
eUxvY2suSW5pdCgpOwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFiIHRoZSBs
b2NrIHNvIHRoZSBuZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVm
b3JlIHRoZXkgc3RhcnQgcnVubmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5n
TG9jayk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCk7ICsraSkgewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcg
U2xvdFZpc2l0b3IoKnRoaXMpOwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFw
cGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0
ZVRocmVhZChtYXJraW5nVGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRD
b3JlOjpNYXJraW5nIikpOwotICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5sYXN0KCkp
OworICAgICAgICBDb3B5VmlzaXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0b3IoKnRo
aXMpOworICAgICAgICBzaXplX3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7CisgICAgICAg
IEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNpdG9yLCBj
b3B5VmlzaXRvciwgaW5kZXgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0g
Y3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2
YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFsaXplVGhy
ZWFkSUQodGhyZWFkSUQpOworICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsK
ICAgICB9CiAjZW5kaWYKIH0KQEAgLTkwLDE5ICs4NCwyMiBAQCBHQ1RocmVhZFNoYXJlZERhdGE6
On5HQ1RocmVhZFNoYXJlZERhdGEoCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKSAgICAKICAgICAv
LyBEZXN0cm95IG91ciBtYXJraW5nIHRocmVhZHMuCiAgICAgewotICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9tYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIG1hcmtpbmdMb2Nr
ZXIobV9tYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIHBoYXNlTG9ja2VyKG1fcGhh
c2VMb2NrKTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOwogICAg
ICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOwotICAgICAgICBtX21hcmtp
bmdDb25kaXRpb24uYnJvYWRjYXN0KCk7CisgICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsK
KyAgICAgICAgbV9waGFzZUNvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fZ2NUaHJlYWRzW2ldLT50aHJlYWRJRCgpKTsKKyAgICAg
ICAgZGVsZXRlIG1fZ2NUaHJlYWRzW2ldOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9tYXJraW5nVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24obV9tYXJraW5nVGhyZWFkc1tpXSk7CiAjZW5kaWYKIH0KICAgICAKIHZvaWQg
R0NUaHJlYWRTaGFyZWREYXRhOjpyZXNldCgpCiB7Ci0gICAgQVNTRVJUKCFtX251bWJlck9mQWN0
aXZlUGFyYWxsZWxNYXJrZXJzKTsKLSAgICBBU1NFUlQoIW1fcGFyYWxsZWxNYXJrZXJzU2hvdWxk
RXhpdCk7CiAgICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7CiAgICAgCiAj
aWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtMTE5LDQgKzExNiw1MyBAQCB2b2lkIEdDVGhyZWFk
U2hhcmVkRGF0YTo6cmVzZXQoKQogICAgIH0KIH0KIAordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6
OmRpZFN0YXJ0TWFya2luZygpCit7CisgICAgTXV0ZXhMb2NrZXIgbWFya2luZ0xvY2tlcihtX21h
cmtpbmdMb2NrKTsKKyAgICBNdXRleExvY2tlciBwaGFzZUxvY2tlcihtX3BoYXNlTG9jayk7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fY3VycmVudFBoYXNl
ID0gTWFyazsKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBt
X3BoYXNlQ29uZGl0aW9uLmJyb2FkY2FzdCgpOworfQorCit2b2lkIEdDVGhyZWFkU2hhcmVkRGF0
YTo6ZGlkRmluaXNoTWFya2luZygpCit7CisgICAgTXV0ZXhMb2NrZXIgbWFya2luZ0xvY2tlciht
X21hcmtpbmdMb2NrKTsKKyAgICBNdXRleExvY2tlciBwaGFzZUxvY2tlcihtX3BoYXNlTG9jayk7
CisgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE1hcmspOworICAgIG1fY3VycmVudFBoYXNl
ID0gTm9QaGFzZTsKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOworICAg
IG1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKK30KKwordm9pZCBHQ1RocmVhZFNoYXJl
ZERhdGE6OmRpZFN0YXJ0Q29weWluZygpCit7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fY29weUxvY2spOworICAgICAgICBtX2Jsb2Nrc1RvQ29weSA9IG1fZ2xvYmFs
RGF0YS0+aGVhcC5tX2Jsb2NrU25hcHNob3Q7CisgICAgICAgIG1fY29weUluZGV4ID0gMDsKKyAg
ICB9CisKKyAgICAvLyBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCB3ZSBhdm9pZCBhIHJhY2UgY29u
ZGl0aW9uIHdoZXJlIHRoZSBtYWluIHRocmVhZCBjYW4gCisgICAgLy8gYmxvdyB0aHJvdWdoIGFs
bCBvZiB0aGUgY29weWluZyB3b3JrIGJlZm9yZSB0aGUgR0NUaHJlYWRzIGZ1bGx5IHdha2UgdXAu
IAorICAgIC8vIFRoZSBHQ1RocmVhZHMgdGhlbiByZXF1ZXN0IGEgYmxvY2sgZnJvbSB0aGUgQ29w
aWVkU3BhY2Ugd2hlbiB0aGUgY29weWluZyBwaGFzZSAKKyAgICAvLyBoYXMgY29tcGxldGVkLCB3
aGljaCBpc24ndCBhbGxvd2VkLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVh
ZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIG1fZ2NUaHJlYWRzW2ldLT5jb3B5VmlzaXRvcigpLT5z
dGFydENvcHlpbmcoKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BoYXNlTG9jayk7Cisg
ICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fY3VycmVudFBoYXNl
ID0gQ29weTsKKyAgICBtX3BoYXNlQ29uZGl0aW9uLmJyb2FkY2FzdCgpOyAKK30KKwordm9pZCBH
Q1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaENvcHlpbmcoKQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3BoYXNlTG9jayk7CisgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IENvcHkp
OworICAgIG1fY3VycmVudFBoYXNlID0gTm9QaGFzZTsKKyAgICBtX3BoYXNlQ29uZGl0aW9uLmJy
b2FkY2FzdCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCShyZXZpc2lvbiAxMzA5NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDI3IEBACiAKICNpbmNsdWRlICJMaXN0YWJsZUhhbmRs
ZXIuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgog
I2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
VENTcGluTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBHQ1RocmVhZDsKIGNsYXNzIEpT
R2xvYmFsRGF0YTsKIGNsYXNzIENvcGllZFNwYWNlOworY2xhc3MgQ29weVZpc2l0b3I7CisKK2Vu
dW0gR0NQaGFzZSB7CisgICAgTm9QaGFzZSwKKyAgICBNYXJrLAorICAgIENvcHksCisgICAgRXhp
dAorfTsKIAogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhIHsKIHB1YmxpYzoKQEAgLTQ2LDYgKzU3
LDExIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0KCk7CiAKKyAgICB2b2lkIGRpZFN0
YXJ0TWFya2luZygpOworICAgIHZvaWQgZGlkRmluaXNoTWFya2luZygpOworICAgIHZvaWQgZGlk
U3RhcnRDb3B5aW5nKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDb3B5aW5nKCk7CisKICNpZiBFTkFC
TEUoUEFSQUxMRUxfR0MpCiAgICAgdm9pZCByZXNldENoaWxkcmVuKCk7CiAgICAgc2l6ZV90IGNo
aWxkVmlzaXRDb3VudCgpOwpAQCAtNTMsMTIgKzY5LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgR0NUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNz
IFNsb3RWaXNpdG9yOworICAgIGZyaWVuZCBjbGFzcyBDb3B5VmlzaXRvcjsKIAotI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKLSAgICB2b2lkIG1hcmtpbmdUaHJlYWRNYWluKFNsb3RWaXNpdG9yKik7
Ci0gICAgc3RhdGljIHZvaWQgbWFya2luZ1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBoZWFwKTsKLSNl
bmRpZgorICAgIHZvaWQgZ2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmLCBzaXplX3QmKTsKIAog
ICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvcGllZFNwYWNlKiBtX2NvcGll
ZFNwYWNlOwpAQCAtNjcsOSArODIsOCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgbV9zaG91
bGRIYXNoQ29uc3Q7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV9tYXJraW5nVGhy
ZWFkczsKLSAgICBWZWN0b3I8U2xvdFZpc2l0b3IqPiBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNr
OwotICAgIAorICAgIFZlY3RvcjxHQ1RocmVhZCo+IG1fZ2NUaHJlYWRzOworCiAgICAgTXV0ZXgg
bV9tYXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uOwog
ICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOwpAQCAtNzksMTAgKzkzLDI3IEBA
IHByaXZhdGU6CiAgICAgTXV0ZXggbV9vcGFxdWVSb290c0xvY2s7CiAgICAgSGFzaFNldDx2b2lk
Kj4gbV9vcGFxdWVSb290czsKIAorICAgIFNwaW5Mb2NrIG1fY29weUxvY2s7CisgICAgVmVjdG9y
PE1hcmtlZEJsb2NrKj4mIG1fYmxvY2tzVG9Db3B5OworICAgIHNpemVfdCBtX2NvcHlJbmRleDsK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOworCisg
ICAgTXV0ZXggbV9waGFzZUxvY2s7CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRp
b247CisgICAgR0NQaGFzZSBtX2N1cnJlbnRQaGFzZTsKKwogICAgIExpc3RhYmxlSGFuZGxlcjxX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwog
ICAgIExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRh
OjpnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAg
IFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3RhcnQgPSBtX2NvcHlJ
bmRleDsKKyAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUlu
ZGV4ICsgc19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRleCA9IGVuZDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5o
IgotI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVk
U3BhY2UuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRl
ICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlz
dGljcy5oIgpAQCAtMjUyLDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBIZWEKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVk
RGF0YShnbG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAg
LCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERh
dGEpCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShn
bG9iYWxEYXRhKQpAQCAtNDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wg
ZnVsbEdDKQogICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsKICAgICB9CiAKLSAg
ICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hhcmVkRGF0YS5kaWRT
dGFydE1hcmtpbmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7
CiAgICAgdmlzaXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IodmlzaXRvcik7CkBAIC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9v
bCBmdWxsR0MpCiAKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3Iudmlz
aXRDb3VudCgpKTsKIAotICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICBtX3NoYXJlZERh
dGEuZGlkRmluaXNoTWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQog
ICAgIHNpemVfdCB2aXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7CiAjaWYgRU5BQkxF
KFBBUkFMTEVMX0dDKQpAQCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhi
b29sIGZ1bGxHQykKICAgICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwogI2VuZGlmCiAg
ICAgbV9zaGFyZWREYXRhLnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9y
ZXMoKQoreworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgaWYgKG1f
c3RvcmFnZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAgbV9zaGFyZWREYXRh
LmRpZFN0YXJ0Q29weWluZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlzaXRvciA9IG1fY29w
eVZpc2l0b3I7CisgICAgICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAgIHZpc2l0
b3IuY29weUZyb21TaGFyZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29weWluZygpOworICAg
ICAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0gCiAgICAgbV9zdG9y
YWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwxNCBAQCB2b2lkIEhl
YXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0Nf
TUFSS0VEKCk7CiAKICAgICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmpl
Y3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5RnVuY3RvciBmdW5j
dG9yKG1fYmxvY2tTbmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2Nr
KGZ1bmN0b3IpOworICAgIH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CisKKyAgICB7CiAg
ICAgICAgIEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAg
IGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBAIC03NTUsNyArNzc4
LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBt
X29iamVjdFNwYWNlLnNocmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBlci0+c3RhcnRTd2Vl
cGluZyhtX29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3ZWVwZXItPnN0YXJ0
U3dlZXBpbmcobV9ibG9ja1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKIAog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEzMDk1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNiArMjMsNyBAQAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9y
LmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgi
CiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0Lmgi
CkBAIC0xODIsNyArMTgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRBbGxvY2F0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmllbmQgY2xhc3MgQ29w
eVZpc2l0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBT
dGF0aXN0aWNzOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxs
b2NhdGVDZWxsKEhlYXAmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZv
aWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxsR0MpOwogICAgICAg
ICB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2
b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQg
Y29weUJhY2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMo
KTsKICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAg
ICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIzOSw2ICsyNDMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBt
X3NoYXJlZERhdGE7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgICAg
IENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxl
U2V0OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtMjU2LDYgKzI2MSwy
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFj
ayogbV9hY3Rpdml0eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dl
ZXBlcjsKKyAgICAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBzaG90OworICAg
IH07CisKKyAgICBzdHJ1Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKKyAgICAgICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2Nr
cykgCisgICAgICAgICAgICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAsIG1fYmxvY2tzKGJs
b2NrcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3Io
KShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9Cisg
ICAgCisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sq
PiYgbV9ibG9ja3M7CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxl
Y3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAKIEluY3JlbWVudGFs
U3dlZXBlcjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5M
b29wKQogICAgIDogSGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKICAgICAs
IG1fY3VycmVudEJsb2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVh
cC0+bV9ibG9ja1NuYXBzaG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5IEBAIHZvaWQgSW5j
cmVtZW50YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAKLXZvaWQgSW5jcmVt
ZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYg
YmxvY2tTbmFwc2hvdCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZl
Y3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1fYmxvY2tzVG9Td2Vl
cC5yZXNpemUoYmxvY2tTbmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5jdG9yIGZ1bmN0b3Io
bV9ibG9ja3NUb1N3ZWVwKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5m
b3JFYWNoQmxvY2soZnVuY3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2tTbmFwc2hv
dDsKICAgICBtX2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAgc2NoZWR1bGVUaW1l
cigpOwogfQpAQCAtMTYwLDcgKzE1OSw3IEBAIEluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50
YWxTd2VlcGVyOjoKICAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9i
YWxEYXRhKCkpOwogfQogCi12b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhj
b25zdCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mKQordm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0
YXJ0U3dlZXBpbmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24g
MTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDIzICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgSGVhcDsKIAotc3RydWN0IENvcHlGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpW
b2lkRnVuY3RvciB7Ci0gICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2Nr
cykgCi0gICAgICAgIDogbV9pbmRleCgwKSAKLSAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsg
bV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9Ci0KLSAgICBzaXplX3QgbV9pbmRleDsKLSAg
ICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7Ci19OwotCiBjbGFzcyBJbmNyZW1lbnRh
bFN3ZWVwZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5jcmVt
ZW50YWxTd2VlcGVyKiBjcmVhdGUoSGVhcCopOwotICAgIHZvaWQgc3RhcnRTd2VlcGluZyhjb25z
dCBIYXNoU2V0PE1hcmtlZEJsb2NrKj4mIGJsb2NrU25hcHNob3QpOworICAgIHZvaWQgc3RhcnRT
d2VlcGluZyhWZWN0b3I8TWFya2VkQmxvY2sqPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmso
KTsKICAgICB2b2lkIHN3ZWVwTmV4dEJsb2NrKCk7CiAgICAgdm9pZCB3aWxsRmluaXNoU3dlZXBp
bmcoKTsKQEAgLTcxLDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbFRpbWVyKCk7
CiAgICAgCiAgICAgdW5zaWduZWQgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXg7Ci0gICAgVmVj
dG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja3NUb1N3ZWVwOworICAgIFZlY3RvcjxNYXJrZWRCbG9j
ayo+JiBtX2Jsb2Nrc1RvU3dlZXA7CiAjZWxzZQogICAgIAogICAgIEluY3JlbWVudGFsU3dlZXBl
cihKU0dsb2JhbERhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICNpbmNs
dWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKQEAgLTM1LDggKzM2LDggQEAgdm9pZCBTbG90Vmlz
aXRvcjo6c2V0dXAoKQogICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQu
bV9nbG9iYWxEYXRhLT5oYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KCk7CiAgICAgbV9z
aG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNpZiBFTkFCTEUo
UEFSQUxMRUxfR0MpCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fbWFy
a2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc2hhcmVkLm1fbWFy
a2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9z
aG91bGRIYXNoQ29uc3Q7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1f
Z2NUaHJlYWRzLnNpemUoKTsgKytpKQorICAgICAgICBtX3NoYXJlZC5tX2djVGhyZWFkc1tpXS0+
c2xvdFZpc2l0b3IoKS0+bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hD
b25zdDsKICNlbmRpZgogfQogCkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
ICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9y
IHRoZW0gdG8gZ2l2ZSB0aGVpciBwcml2YXRlIENvcGllZEJsb2NrcyBiYWNrCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBm
b3IgdGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21h
cmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIwMCwxNyArMjAxLDEyIEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICBpZiAoIW1f
c2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFy
ZWRNYXJrU3RhY2suaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21h
cmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9z
aGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAmJiBtX3NoYXJl
ZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBk
b25lQ29weWluZygpOworICAgICAgICAgICAgICAgIHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1h
cmtTdGFjay5pc0VtcHR5KCkgJiYgIW1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dCkKICAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLndhaXQo
bV9zaGFyZWQubV9tYXJraW5nTG9jayk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIElzIHRoZSBWTSBleGl0aW5nPyBJZiBzbywgZXhpdCB0
aGlzIHRocmVhZC4KLSAgICAgICAgICAgICAgICBpZiAobV9zaGFyZWQubV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmVDb3B5aW5nKCk7CisgICAg
ICAgICAgICAgICAgLy8gSXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8gSWYgc28sIHJldHVybiBm
cm9tIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fcGFyYWxs
ZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXpl
X3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hh
cmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CkBAIC0yMzYsMzAgKzIzMiw2IEBA
IHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogICAgIG1fb3BhcXVlUm9vdHMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKLXsKLSAgICBB
U1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci19Ci0KLXZvaWQqIFNsb3RWaXNp
dG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgbV9zaGFyZWQu
bV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1
cnJlbnRCbG9jaygpKTsKLSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobV9z
aGFyZWQubV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpKTsKLQot
ICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1f
Y29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKLSAgICBBU1NFUlQo
ZGlkU3VjY2VlZCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU2xvdFZpc2l0b3I6
OmFsbG9jYXRlTmV3U3BhY2VPclBpbih2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBp
ZiAoIWNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHB0ciwgYnl0ZXMpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdGVOZXdTcGFjZShieXRlcyk7Ci19
Ci0KIEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6dHJ5SGFzaENvbnN0TG9jaygpCiB7CiAj
aWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtMzM1LDM2ICszMDcsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsCiAgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7CiB9
CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmNvcHlBbmRBcHBlbmQodm9pZCoqIHB0ciwgc2l6ZV90IGJ5
dGVzLCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB2b2lkKiBvbGRQ
dHIgPSAqcHRyOwotICAgIHZvaWQqIG5ld1B0ciA9IGFsbG9jYXRlTmV3U3BhY2VPclBpbihvbGRQ
dHIsIGJ5dGVzKTsKLSAgICBpZiAobmV3UHRyKSB7Ci0gICAgICAgIHNpemVfdCBqc1ZhbHVlc09m
ZnNldCA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmFsdWVz
KSAtIHN0YXRpY19jYXN0PGNoYXIqPihvbGRQdHIpKTsKLQotICAgICAgICBKU1ZhbHVlKiBuZXdW
YWx1ZXMgPSByZWludGVycHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+
KG5ld1B0cikgKyBqc1ZhbHVlc09mZnNldCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSB2YWx1ZXNb
aV07Ci0gICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICgh
dmFsdWUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcm5hbEFw
cGVuZCgmbmV3VmFsdWVzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShuZXdQdHIs
IG9sZFB0ciwganNWYWx1ZXNPZmZzZXQpOwotICAgICAgICAqcHRyID0gbmV3UHRyOwotICAgIH0g
ZWxzZQotICAgICAgICBhcHBlbmQodmFsdWVzLCBsZW5ndGgpOwotfQotICAgIAotdm9pZCBTbG90
VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQotewotICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5k
b25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwot
fQotCiB2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewogICAgIGZv
ciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lv
biAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIFNsb3RWaXNpdG9yX2gKICNk
ZWZpbmUgU2xvdFZpc2l0b3JfaAogCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRl
ICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1ldGhvZHMuaCIKIApA
QCAtODAsMjEgKzc5LDggQEAgcHVibGljOgogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAKLSAgICB2
b2lkIHN0YXJ0Q29weWluZygpOworICAgIHZvaWQgY29weUxhdGVyKHZvaWQqLCBzaXplX3QpOwog
ICAgIAotICAgIC8vIEhpZ2gtbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3Ig
Y2FzZXMgd2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcwotICAgIC8vIGZhbGwgaW50
byBhIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIHRoZSBzdG9yYWdlIGNodW5rIGFuZCBpZiB0aGUgb2Jq
ZWN0IGZvciB3aGljaCB5b3UncmUKLSAgICAvLyBkb2luZyBjb3B5aW5nIGRvZXMgbm90IG9jY3Vy
IGZyZXF1ZW50bHkuCi0gICAgdm9pZCBjb3B5QW5kQXBwZW5kKHZvaWQqKiwgc2l6ZV90LCBKU1Zh
bHVlKiwgdW5zaWduZWQpOwotICAgIAotICAgIC8vIExvdy1sZXZlbCBBUEkgZm9yIGNvcHlpbmcs
IGFwcHJvcHJpYXRlIGZvciBjYXNlcyB3aGVyZSB0aGUgb2JqZWN0J3MgaGVhcCByZWZlcmVuY2Vz
Ci0gICAgLy8gYXJlIGRpc2NvbnRpZ3VvdXMgb3IgaWYgdGhlIG9iamVjdCBvY2N1cnMgZnJlcXVl
bnRseSBlbm91Z2ggdGhhdCB5b3UgbmVlZCB0byBmb2N1cyBvbgotICAgIC8vIHBlcmZvcm1hbmNl
LiBVc2UgdGhpcyB3aXRoIGNhcmUgYXMgaXQgaXMgZWFzeSB0byBzaG9vdCB5b3Vyc2VsZiBpbiB0
aGUgZm9vdC4KLSAgICBib29sIGNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHZvaWQq
IG9sZFB0ciwgc2l6ZV90KTsKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7Ci0g
ICAgCi0gICAgdm9pZCBkb25lQ29weWluZygpOyAKLSAgICAgICAgCiAjaWYgRU5BQkxFKFNJTVBM
RV9IRUFQX1BST0ZJTElORykKICAgICBWVGFibGVTcGVjdHJ1bSBtX3Zpc2l0ZWRUeXBlQ291bnRz
OwogI2VuZGlmCkBAIC0xMjUsOSArMTExLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0
YWJsZSgpOwogICAgIAotICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VPclBpbih2b2lkKiwgc2l6
ZV90KTsKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QpOwotCiAgICAgdm9p
ZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNrOwpA
QCAtMTQ2LDggKzEyOSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50
OwogI2VuZGlmCiAKLSAgICBDb3BpZWRBbGxvY2F0b3IgbV9jb3BpZWRBbGxvY2F0b3I7Ci0KIHB1
YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM2LDMwICsxMzYsNiBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290CiAgICAgbWVyZ2VPcGFxdWVSb290cygpOwogfQogICAgIAotQUxXQVlT
X0lOTElORSBib29sIFNsb3RWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lz
ZSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBpZiAoQ29waWVkU3BhY2U6Omlz
T3ZlcnNpemUoYnl0ZXMpKSB7Ci0gICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihD
b3BpZWRTcGFjZTo6b3ZlcnNpemVCbG9ja0ZvcihvbGRQdHIpKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5pc1Bpbm5lZChv
bGRQdHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6
ZV90IGJ5dGVzKQotewotICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCBy
ZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgotICAgIGlmIChMSUtFTFkobV9jb3Bp
ZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAKLSAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7
Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgICAgCi0KIGlu
bGluZSB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogewogICAgIEFTU0VSVChtX2lzSW5QYXJh
bGxlbE1vZGUpOwpAQCAtMTc1LDYgKzE1MSwyMyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6
ZG9uYXRlQW5kRHJhaW4oCiAgICAgZHJhaW4oKTsKIH0KIAoraW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmNvcHlMYXRlcih2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoQ29waWVk
U3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMpKSB7CisgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3Bh
Y2UtPnBpbihDb3BpZWRTcGFjZTo6b3ZlcnNpemVCbG9ja0ZvcihwdHIpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9j
a0ZvcihwdHIpOworICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYmxvY2stPnJlcG9ydExpdmVCeXRlcyhieXRlcyk7CisKKyAgICBpZiAoIWJsb2NrLT5z
aG91bGRFdmFjdWF0ZSgpKQorICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oYmxv
Y2spOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTbG90VmlzaXRv
cklubGluZU1ldGhvZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5LmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgSlNHbG9iYWxEYXRhOwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFz
cyBDb3B5VmlzaXRvcjsKIHN0cnVjdCBBcnJheVN0b3JhZ2U7CiAKIGNsYXNzIEJ1dHRlcmZseSB7
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0
ZShKU0dsb2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFj
aXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3Jl
YXRlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNy
ZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHBy
ZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRl
ciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYsIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgCiAgICAg
SW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6
OmZyb20odGhpcyk7IH0KICAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIo
KSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1l
dGhvZHMuaAkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4
IEBACiAjaW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAj
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0
b3IuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU5LDcgKzU5
LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbAogICAgIHJldHVy
biBjcmVhdGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBo
YXNJbmRleGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFk
ZXIoKSwgMCk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0
aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVD
YXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIs
IHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1
dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3Im
IHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJv
b2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykK
IHsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKAogICAgICAgICB2aXNpdG9yLmFs
bG9jYXRlTmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBo
YXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMzA5NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2
b2lkICgqVmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
ICAgICAgICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgdmlzaXRDaGlsZHJlbjsKIAorICAgICAg
ICB0eXBlZGVmIHZvaWQgKCpDb3B5QmFja2luZ1N0b3JlRnVuY3Rpb25QdHIpKEpTQ2VsbCosIENv
cHlWaXNpdG9yJik7CisgICAgICAgIENvcHlCYWNraW5nU3RvcmVGdW5jdGlvblB0ciBjb3B5QmFj
a2luZ1N0b3JlOworCiAgICAgICAgIHR5cGVkZWYgQ2FsbFR5cGUgKCpHZXRDYWxsRGF0YUZ1bmN0
aW9uUHRyKShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9u
UHRyIGdldENhbGxEYXRhOwogCkBAIC0xMTYsNiArMTE5LDcgQEAgc3RydWN0IE1lbWJlckNoZWNr
IyNtZW1iZXIgeyBcCiAjZGVmaW5lIENSRUFURV9NRVRIT0RfVEFCTEUoQ2xhc3NOYW1lKSB7IFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNp
dENoaWxkcmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OmNvcHlCYWNraW5nU3RvcmUsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0
Q29uc3RydWN0RGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTMwOTU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsMTAgQEAgdm9pZCBKU0NlbGw6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAg
IGNlbGwtPkpTQ2VsbDo6fkpTQ2VsbCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Y29weUJhY2tpbmdT
dG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpCit7Cit9CisKIGJvb2wgSlNDZWxsOjpnZXRTdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcmIHN0cmluZ1ZhbHVlKSBjb25zdAogewogICAgIGlm
ICghaXNTdHJpbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorICAgIGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
OwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKQEAgLTEwMCw2ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KikgY29uc3Q7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5
QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJik7CiAKICAgICAgICAgLy8gT2JqZWN0
IG9wZXJhdGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KICAgICAg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsOCBAQAogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgog
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNp
dG9yLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAi
RGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKQEAgLTk0LDcgKzk2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdl
dENsYXNzUHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2Jq
ZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0
ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6
Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IHNpemVfdCBzdG9yYWdlU2l6ZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKICAgICAKQEAg
LTExMSwyNiArMTEzLDIwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0
ZXIKICAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJm
bHk6OnRvdGFsU2l6ZSgKLSAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhh
c0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCi0gICAgICAgICAgICBidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0
ZXMpKSB7CisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5
KGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5
SW5CeXRlcykpIHsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5
LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOwogICAgICAgICAKLSAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVy
dGllcy4KKyAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydGllcy4KICAgICAgICAgUHJvcGVydHlT
dG9yYWdlIGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwog
ICAgICAgICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVy
dHlTdG9yYWdlKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNv
dW50LS07KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSkt
PmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwotICAgICAgICAgICAgKC0tY3VycmVudFRh
cmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICB9CisgICAgICAg
IGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQorICAgICAgICAgICAg
KC0tY3VycmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJj
ZSktPmdldCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hl
YWRlcikpIHsKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAq
YnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBNYXJrIGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIC8v
IENvcHkgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7CkBAIC0xNTAsOCArMTQ2LDYgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAgICAgICAgIGN1
cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKICAg
ICAgICAgICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3I7CiAgICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0
OgpAQCAtMTYyLDMyICsxNTYsNTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAo
Y3VycmVudFNvdXJjZSsrKS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsK
LSAgICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmll
cih2YWx1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAg
ICAgICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigo
Y3VycmVudFNvdXJjZSsrKS0+Z2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBt
X2J1dHRlcmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRl
cyk7CisgICAgfSAKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBz
dG9yYWdlU2l6ZSkKK3sKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHNpemVfdCBwcm9w
ZXJ0eUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVf
dCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7Cisg
ICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVy
KSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSBidXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzKHN0cnVjdHVyZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVy
dGllcy4KLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICAv
LyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgc3dpdGNoIChzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJ
TkdfVFlQRVM6Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
dmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAg
ICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAg
ICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBh
Y2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlD
YXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsK
KworICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7
CisgICAgdmlzaXRvci5jb3B5TGF0ZXIoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBNYXJrIHRoZSBh
cnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICB2
aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjExLDYgKzIyMywxNiBAQCB2b2lkIEpTT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAordm9pZCBKU09iamVj
dDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICAK
KyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAg
IGlmIChidXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRv
ciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsK
K30KKwogdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICAgICAg
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7
CiAKQEAgLTYzNCw2ICs2MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZXNl
dEluaGVyaXRvcklEKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB2aXNp
dEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7
CisgICAgICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNp
emVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRo
YXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgICAgIC8v
IHN0b3JhZ2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTU2LDE0ICs5NTgsMTQg
QEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogICAgIHJldHVybiBz
dHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CiAKLWlubGluZSBib29sIEpTQ2VsbDo6
aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAoraW5saW5lIGNvbnN0IE1ldGhv
ZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY2xhc3NJ
bmZvKCktPmlzU3ViQ2xhc3NPZihpbmZvKTsKKyAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRo
b2RUYWJsZTsKIH0KIAotaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRh
YmxlKCkgY29uc3QKK2lubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZv
KiBpbmZvKSBjb25zdAogewotICAgIHJldHVybiAmY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlOwor
ICAgIHJldHVybiBjbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGluZm8pOwogfQogCiAvLyB0aGlz
IG1ldGhvZCBpcyBoZXJlIHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlND
ZWxsOjppbmhlcml0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgdih1bnNpZ25lZCwgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZSwgcGFnZVNpemUoKSkgXAog
ICAgIHYodW5zaWduZWQsIG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtl
cnMoNykpIFwKICAgICB2KHVuc2lnbmVkLCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQsIDEwMDAp
IFwKKyAgICB2KGRvdWJsZSwgbWF4Q29waWVkU3BhY2VGcmFnbWVudGF0aW9uLCAwLjgpIFwKKyAg
ICB2KGRvdWJsZSwgbWF4Q29waWVkQmxvY2tGcmFnbWVudGF0aW9uLCAwLjkpIFwKICAgICBcCiAg
ICAgdihib29sLCBmb3JjZVdlYWtSYW5kb21TZWVkLCBmYWxzZSkgXAogICAgIHYodW5zaWduZWQs
IGZvcmNlZFdlYWtSYW5kb21TZWVkLCAwKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168230</attachid>
            <date>2012-10-11 08:28:51 -0700</date>
            <delta_ts>2012-10-11 15:18:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121011082746.patch</filename>
            <type>text/plain</type>
            <size>83849</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIHBhcnRpY2lwYXRpbmcgCisgICAgICAgIGluIGEgc3BlY2lmaWMgc2V0IG9mIEdDIHBo
YXNlcy4gQ3VycmVudGx5LCB0aGF0IHNldCBvZiBwaGFzZXMgaW5jbHVkZXMgTWFyaywgQ29weSwg
YW5kIEV4aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBtb25pdG9ycyBhIHNoYXJlZCB2YXJpYWJs
ZSBpbiBpdHMgYXNzb2NpYXRlZCBHQ1RocmVhZFNoYXJlZERhdGEuIFRoZSBtYWluIHRocmVhZCB1
cGRhdGVzIHRoaXMgbV9jdXJyZW50UGhhc2UKKyAgICAgICAgdmFyaWFibGUgYXMgY29sbGVjdGlv
biBwcm9ncmVzc2VzIHRocm91Z2ggdGhlIHZhcmlvdXMgcGhhc2VzLiBQYXJhbGxlbCBtYXJraW5n
IHN0aWxsIHdvcmtzIGV4YWN0bHkgbGlrZSBpdCAKKyAgICAgICAgaGFzLiBJbiBvdGhlciB3b3Jk
cywgdGhlICJydW4gbG9vcCIgZm9yIGVhY2ggb2YgdGhlIEdDIHRocmVhZHMgc2l0cyBhYm92ZSBh
bnkgaW5kaXZpZHVhbCBwaGFzZSwgdGh1cyBrZWVwaW5nIAorICAgICAgICB0aGUgc2VwYXJhdGUg
cGhhc2VzIG9mIHRoZSBjb2xsZWN0b3Igb3J0aG9nb25hbC4KKyAgICAgICAgKEpTQzo6R0NUaHJl
YWQ6OnRocmVhZElEKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJ
RCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpzbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6
OkdDVGhyZWFkOjpjb3B5VmlzaXRvcik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjp3YWl0Rm9y
TmV4dFBoYXNlKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OmdjVGhyZWFkTWFpbik6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyk6CisgICAgICAgICogaGVhcC9H
Q1RocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ1RocmVhZCk6Cisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOiBUaGUgR0NUaHJlYWRTaGFyZWRE
YXRhIG5vdyBoYXMgYSBsaXN0IG9mIEdDVGhyZWFkIG9iamVjdHMgcmF0aGVyIHRoYW4gcmF3IAor
ICAgICAgICBUaHJlYWRJZGVudGlmaWVycy4KKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpyZXNldENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpj
aGlsZFZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhy
ZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6fkdDVGhy
ZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQp
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0TWFya2luZyk6IENh
bGxiYWNrIHRvIGxldCB0aGUgR0NUaHJlYWRTaGFyZWREYXRhIGtub3cgdGhhdCBtYXJraW5nIGhh
cyAKKyAgICAgICAgc3RhcnRlZCBhbmQgdXBkYXRlcyB0aGUgbV9jdXJyZW50UGhhc2UgdmFyaWFi
bGUgYW5kIG5vdGlmaWVzIHRoZSBHQ1RocmVhZHMgYWNjb3JkaW5nbHkuCisgICAgICAgIChKU0M6
OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRvIGZvciBmaW5pc2hp
bmcgbWFya2luZy4gCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRD
b3B5aW5nKTogRGl0dG8gZm9yIHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAo
SlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmlu
aXNoaW5nIGNvcHlpbmcuIAorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpT
Qzo6R0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tzVG9Db3B5KTogQXRvbWljYWxseSBn
ZXRzIHRoZSBuZXh0IGNodW5rIG9mIHdvcmsgZm9yIGEgY29weWluZyB0aHJlYWQuCisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFw
Ojpjb3B5QmFja2luZ1N0b3Jlcyk6IFJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb3B5
aW5nIHBoYXNlLCBub3RpZnlpbmcgdGhlIGNvcHlpbmcgdGhyZWFkcywgCisgICAgICAgIGFuZCBk
b2luZyBhbnkgY29weWluZyB3b3JrIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKEpTQzo6SGVhcDo6
Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChIZWFwKToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvcHlGdW5jdG9yOjpDb3B5RnVuY3Rvcik6CisgICAg
ICAgIChDb3B5RnVuY3Rvcik6CisgICAgICAgIChKU0M6OkNvcHlGdW5jdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHA6IENoYW5nZWQgdGhlIGlu
Y3JlbWVudGFsIHN3ZWVwZXIgdG8gaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgbGlzdCBvZiBNYXJr
ZWRCbG9ja3MgCisgICAgICAgIHRoYXQgbmVlZCBzd2VlcGluZywgc2luY2UgdGhpcyBub3cgcmVz
aWRlcyBpbiB0aGUgSGVhcCBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgc2hhcmVkIGJ5IHRoZSBH
Q1RocmVhZHMuCisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxT
d2VlcGVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5n
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEluY3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQpOiBXZSBubyBsb25nZXIgZG8gYW55IGNvcHlp
bmctcmVsYXRlZCB3b3JrIGhlcmUuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKFNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmNvcHlMYXRlcik6IE5vdGlmaWVzIHRoZSBDb3BpZWRCbG9jayB0aGF0IHRoZXJl
IGFyZSBzb21lIGxpdmUgYnl0ZXMgdGhhdCBtYXkgbmVlZCAKKyAgICAgICAgdG8gYmUgY29waWVk
LgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQnV0dGVyZmx5KToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMu
aDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbik6IFVzZXMgdGhlIG5ldyBDb3B5VmlzaXRvci4KKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOiBBZGRlZCBuZXcgInZpcnR1YWwiIGZ1
bmN0aW9uIGNvcHlCYWNraW5nU3RvcmUgdG8gbWV0aG9kIHRhYmxlLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y29w
eUJhY2tpbmdTdG9yZSk6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdGhpbmcu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkpOiBEb2VzIHRoZSBhY3R1YWwg
Y29weWluZyBvZiB0aGUgYnV0dGVyZmx5LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KTogQ2FsbHMgY29weUxhdGVyIGZvciB0aGUgYnV0dGVy
Zmx5LgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk6IAorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjptZXRob2RUYWJsZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5oZXJpdHMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOiBBZGRlZCB0d28gbmV3IGNvbnN0YW50cywg
bWluSGVhcFV0aWxpemF0aW9uIGFuZCBtaW5Db3BpZWRCbG9ja1V0aWxpemF0aW9uLCAKKyAgICAg
ICAgdG8gZ292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUg
ZG9pbmcgY29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMTAgIEJhbGF6cyBLaWx2
YWR5ICA8a2lsdmFkeWJAaG9tZWppbm5pLmNvbT4KIAogICAgICAgICBSZWdpc3RlckZpbGUgdG8g
SlNTdGFjayByZW5hbWUgZml4IGZvciBhIHN0cnVjdCBtZW1iZXIuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsMTAg
QEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3Iu
Y3BwCiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAKKyAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAog
ICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cAorICAgIGhlYXAvR0NUaHJlYWQuY3BwCiAgICAgaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3Bw
CiAgICAgaGVhcC9IYW5kbGVTZXQuY3BwCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzA5
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjU2LDYgKzI1Niw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRT
ZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oIFwKQEAg
LTI4MCw2ICsyODMsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0FsbG9jYXRvci5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwIFwKICAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWQuY3BwIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1RocmVhZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgXAogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwIFwKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcCBcCisgICAgaGVhcC9Db3B5Vmlz
aXRvci5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKICAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL1dlYWtTZXQuY3BwIFwKQEAgLTgyLDYgKzgzLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvQmxv
Y2tBbGxvY2F0b3IuY3BwIFwKICAgICBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAgXAorICAg
IGhlYXAvR0NUaHJlYWQuY3BwIFwKICAgICBoZWFwL0hlYXAuY3BwIFwKICAgICBoZWFwL0hlYXBT
dGF0aXN0aWNzLmNwcCBcCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lv
biAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDYgKzExNiw3IEBAIEVYUE9SVFMKICAgICA/Y29udmVydExhdGluMVRvVVRGOEBVbmljb2RlQFdU
RkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCRVBCRVBBUEFEUEFEQFoKICAgICA/Y29u
dmVydFVURjE2VG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBB
UEJfV1BCX1dQQVBBRFBBRF9OQFoKICAgICA/Y29udmVydFVURjhUb1VURjE2QFVuaWNvZGVAV1RG
QEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJEUEJEUEFQQV9XUEFfV19OQFoKKyAgICA/
Y29weUJhY2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEFBVkNvcHlWaXNp
dG9yQDJAQFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25ASlNDQEBTQVBBVjEyQFBBVkV4ZWNTdGF0
ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmluZ0BXVEZAQFA2SV9KMEBaVzRJbnRyaW5z
aWNAMkAzQFoKICAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRy
QFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNFRocmVhZFN0YWNrVHlwZUAyQFc0SGVhcFR5cGVA
MkBAWgogICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBB
QlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAx
MzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM1
NCw2ICsyMzU0LDE4IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcQ29weVZpc2l0b3IuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXENvcHlWaXNpdG9yLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcQ29w
eVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcREZHQ29kZUJsb2Nrcy5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgpAQCAtMjQ1MCw2ICsyNDYyLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcR0NUaHJlYWQuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEdDVGhyZWFk
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTcxMSw2ICs3MTEsMTEgQEAKIAkJQzIxMTIyRTIxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hh
cmVkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJFMDE1
REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMTYwRkU3MTVGN0U5NUUwMDk0
MkRGQyAvKiBTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90
VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlE
MTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLzsgfTsKKwkJQzIyMzlEMTgx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyMzlEMUExNjI2MkJERDAw
NUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi87
IH07CisJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTYxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggKi87IH07CiAJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBT
bG90VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovOyB9Owog
CQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
NDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi87IH07CkBAIC0xNDk0
LDYgKzE0OTksMTEgQEAKIAkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hh
cmVkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjExMjJERjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0
aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrU3RhY2tJbmxpbmVN
ZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMjM5RDEyMTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb3B5VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9ySW5saW5lTWV0
aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjIzOUQxNTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR0NUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjIzOUQxNjE2
MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR0NUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyNTQ5NDIx
NUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcGllZFNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBTdGF0
aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjcsNiArMTgzNywx
MSBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmNwcCAqLywKKwkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCAqLywKKwkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3JJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8q
IEdDVGhyZWFkLmNwcCAqLywKKwkJCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJl
YWQuaCAqLywKIAkJCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
Y3BwICovLAogCQkJCUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5o
ICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8s
CkBAIC0yNTkwLDYgKzI2MDUsOCBAQAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBB
Uk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRC
MTU5IC8qIENvcGllZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERB
MDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIy
MzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRp
c3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5
NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLApAQCAtMjk4Miw2ICsyOTk5
LDcgQEAKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJh
eURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTkwLDYgKzM2MDgsOCBAQAogCQkJ
CTBGNTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0RDMxRTIxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAv
KiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjIzOUQxQTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDggQEAKICNpbmNsdWRlICJIZWFwQmxvY2suaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDYgKzQz
LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZShjb25zdCBQYWdl
QWxsb2NhdGlvbkFsaWduZWQmKTsKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZU5vWmVy
b0ZpbGwoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAKKyAgICBib29sIGlzUGlubmVk
KCk7CisKKyAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRl
cyh1bnNpZ25lZCk7CisgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKKyAgICBib29sIGRpZEV2YWN1
YXRlQnl0ZXModW5zaWduZWQpOworICAgIGJvb2wgc2hvdWxkRXZhY3VhdGUoKTsKKyAgICBib29s
IGNhbkJlUmVjeWNsZWQoKTsKKwogICAgIC8vIFRoZSBwYXlsb2FkIGlzIHRoZSByZWdpb24gb2Yg
dGhlIGJsb2NrIHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucy4KICAgICBjaGFyKiBwYXls
b2FkKCk7CiAgICAgY2hhciogcGF5bG9hZEVuZCgpOwpAQCAtNjYsNiArNzcsNyBAQCBwcml2YXRl
OgogCiAgICAgc2l6ZV90IG1fcmVtYWluaW5nOwogICAgIHVpbnRwdHJfdCBtX2lzUGlubmVkOwor
ICAgIHVuc2lnbmVkIG1fbGl2ZUJ5dGVzOwogfTsKIAogaW5saW5lIENvcGllZEJsb2NrKiBDb3Bp
ZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmlsbChjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFs
bG9jYXRpb24pCkBAIC05NiwxMCArMTA4LDYwIEBAIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2soY29uc3QgUGEKICAgICA6IEhlYXBCbG9jazxDb3BpZWRCbG9jaz4oYWxsb2NhdGlvbikK
ICAgICAsIG1fcmVtYWluaW5nKHBheWxvYWRDYXBhY2l0eSgpKQogICAgICwgbV9pc1Bpbm5lZChm
YWxzZSkKKyAgICAsIG1fbGl2ZUJ5dGVzKDApCiB7CiAgICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVk
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcmVtYWluaW5nKSkpOwogfQogCitpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKHVuc2lnbmVkIGJ5dGVzKQoreworICAgIHVu
c2lnbmVkIG9sZFZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8g
eworICAgICAgICBvbGRWYWx1ZSA9IG1fbGl2ZUJ5dGVzOworICAgICAgICBuZXdWYWx1ZSA9IG9s
ZFZhbHVlICsgYnl0ZXM7CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZt
X2xpdmVCeXRlcywgb2xkVmFsdWUsIG5ld1ZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpkaWRTdXJ2aXZlR0MoKQoreworICAgIG1fbGl2ZUJ5dGVzID0gMDsKKyAgICBtX2lz
UGlubmVkID0gZmFsc2U7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpkaWRFdmFjdWF0
ZUJ5dGVzKHVuc2lnbmVkIGJ5dGVzKQoreworICAgIEFTU0VSVChtX2xpdmVCeXRlcyA+PSBieXRl
cyk7CisgICAgdW5zaWduZWQgb2xkVmFsdWUgPSAwOworICAgIHVuc2lnbmVkIG5ld1ZhbHVlID0g
MDsKKyAgICBkbyB7CisgICAgICAgIG9sZFZhbHVlID0gbV9saXZlQnl0ZXM7CisgICAgICAgIG5l
d1ZhbHVlID0gb2xkVmFsdWUgLSBieXRlczsKKyAgICB9IHdoaWxlICghV1RGOjp3ZWFrQ29tcGFy
ZUFuZFN3YXAoJm1fbGl2ZUJ5dGVzLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKTsKKyAgICBBU1NFUlQo
bV9saXZlQnl0ZXMgPCBvbGRWYWx1ZSk7CisgICAgcmV0dXJuICFuZXdWYWx1ZTsKK30KKworaW5s
aW5lIGJvb2wgQ29waWVkQmxvY2s6OmNhbkJlUmVjeWNsZWQoKQoreworICAgIHJldHVybiAhbV9s
aXZlQnl0ZXM7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpzaG91bGRFdmFjdWF0ZSgp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV9saXZlQnl0ZXMpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihwYXlsb2FkQ2FwYWNpdHkoKSkgPD0gT3B0aW9uczo6bWluQ29waWVkQmxv
Y2tVdGlsaXphdGlvbigpOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQo
KQoreworICAgIHJldHVybiBtX2lzUGlubmVkOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29waWVk
QmxvY2s6OmxpdmVCeXRlcygpCit7CisgICAgcmV0dXJuIG1fbGl2ZUJ5dGVzOworfQorCiBpbmxp
bmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQogewogICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArICgoc2l6ZW9mKENvcGllZEJsb2NrKSArIDcpICYgfjcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNp
b24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJPcHRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNiw2ICszNyw3IEBAIENv
cGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAgICwgbV90b1NwYWNlKDApCiAg
ICAgLCBtX2Zyb21TcGFjZSgwKQogICAgICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKKyAgICAs
IG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tz
KDApCiB7CiAgICAgbV90b1NwYWNlTG9jay5Jbml0KCk7CkBAIC0xNTIsMTUgKzE1NCwxOCBAQCBD
aGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqIGJs
b2NrKQordm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayogYmxv
Y2ssIENvcGllZEJsb2NrKiogZXhjaGFuZ2UpCiB7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhh
c2UpOwogICAgIAorICAgIGlmIChleGNoYW5nZSkKKyAgICAgICAgKmV4Y2hhbmdlID0gYWxsb2Nh
dGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOworCiAgICAgaWYgKCFibG9jaykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFibG9jay0+ZGF0YVNpemUoKSkgewotICAgICAgICByZWN5Y2xlQmxv
Y2soYmxvY2spOworICAgICAgICByZWN5Y2xlQm9ycm93ZWRCbG9jayhibG9jayk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE4Miw2ICsxODcsMzggQEAgdm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6c3Rh
cnRlZENvcHlpbmcoKQoreworICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsK
KworICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJl
bnRCbG9jaygpOworCisgICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3Rh
bExpdmVCeXRlcyA9IDA7CisgICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2Nr
ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYgKCFi
bG9jay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAgICAgICAg
ICByZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOwor
ICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAg
ICB9CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2Uo
KS5jYXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0
b3RhbExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVC
eXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSB0b3Rh
bEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWluSGVhcFV0aWxpemF0aW9uKCk7CisgICAgaWYg
KCFtX3Nob3VsZERvQ29weVBoYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9z
aG91bGREb0NvcHlQaGFzZSk7CisgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKKyAgICBB
U1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0
cnVlOworfQorCiB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiB7CiAgICAgewpAQCAt
MTkwLDEyICsyMjcsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgICAg
ICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwog
ICAgIH0KIAotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQobV9pbkNv
cHlpbmdQaGFzZSA9PSBtX3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNl
ID0gZmFsc2U7CisKICAgICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKICAgICAg
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAg
ICAgaWYgKGJsb2NrLT5tX2lzUGlubmVkKSB7Ci0gICAgICAgICAgICBibG9jay0+bV9pc1Bpbm5l
ZCA9IGZhbHNlOworICAgICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9D
b3B5UGhhc2UpIHsKKyAgICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQg
d2FzIG5ldmVyIHJlbW92ZWQuCiAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlu
cyhibG9jaykpOwogICAgICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihibG9jaykpOwpAQCAtMjEwLDEzICsyNDgsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUNvcHlpbmcoKQogICAgIENvcGllZEJsb2NrKiBjdXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5o
ZWFkKCk7CiAgICAgd2hpbGUgKGN1cnIpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBj
dXJyLT5uZXh0KCk7Ci0gICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5lZCkgeworICAgICAgICBp
ZiAoIWN1cnItPmlzUGlubmVkKCkpIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVt
b3ZlKGN1cnIpOwogICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoY3Vycik7CiAgICAgICAg
ICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveShjdXJyKS5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJp
dHM+KGN1cnIpKTsKLSAgICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGN1cnItPmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBu
ZXh0OwogICAgIH0KQEAgLTIyNSw2ICsyNjMsOCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29w
eWluZygpCiAgICAgICAgIGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCiAgICAgICAgIG1fYWxs
b2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisKKyAgICBtX3Nob3Vs
ZERvQ29weVBoYXNlID0gZmFsc2U7CiB9CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEz
MDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIENvcGllZEJsb2Nr
OwogCiBjbGFzcyBDb3BpZWRTcGFjZSB7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwog
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVi
bGljOgpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAK
ICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKKyAgICBib29sIHNob3VsZERv
Q29weVBoYXNlKCkgeyByZXR1cm4gbV9zaG91bGREb0NvcHlQaGFzZTsgfQogCiAgICAgc3RhdGlj
IENvcGllZEJsb2NrKiBibG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGFsbG9jYXRlQmxvY2soKTsKICAgICBDb3BpZWRCbG9jayogYWxsb2NhdGVC
bG9ja0ZvckNvcHlpbmdQaGFzZSgpOwogCi0gICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENvcGll
ZEJsb2NrKik7Ci0gICAgdm9pZCByZWN5Y2xlQmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICB2b2lk
IGRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKKyAgICB2b2lk
IHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUJv
cnJvd2VkQmxvY2soQ29waWVkQmxvY2sqKTsKIAogICAgIEhlYXAqIG1faGVhcDsKIApAQCAtMTA4
LDYgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4g
bV9vdmVyc2l6ZUJsb2NrczsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKKyAgICBi
b29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CiAKICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7
IAogICAgIFRocmVhZENvbmRpdGlvbiBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIw
IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGlu
KGJsb2NrKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkK
K2lubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxv
Y2sqIGJsb2NrKQogewotICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKLQot
ICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpOwotCi0gICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1f
bnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAg
IEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOworICAg
IEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxv
Y2spOworICAgICAgICBtX2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICB9CisgICAgbV9o
ZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxv
Y2spKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVCbG9jayhDb3BpZWRC
bG9jayogYmxvY2spCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxv
Y2soQ29waWVkQmxvY2sqIGJsb2NrKQogewogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5k
ZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29weVZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworQ29weVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYg
c2hhcmVkKQorICAgIDogbV9zaGFyZWQoc2hhcmVkKQoreworfQorCit2b2lkIENvcHlWaXNpdG9y
Ojpjb3B5RnJvbVNoYXJlZCgpCit7CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRo
aXMpOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5t
X2Jsb2Nrc1RvQ29weTsKKyAgICBzaXplX3Qgc3RhcnRJbmRleCwgZW5kSW5kZXg7CisKKyAgICBt
X3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3
aGlsZSAoc3RhcnRJbmRleCA8IGVuZEluZGV4KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykKKyAgICAgICAgICAgIGJsb2Nrc1RvQ29weVtp
XS0+Zm9yRWFjaExpdmVDZWxsKGZ1bmN0b3IpOworICAgICAgICBtX3NoYXJlZC5nZXROZXh0Qmxv
Y2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB9CisgICAgQVNTRVJUKHN0YXJ0
SW5kZXggPT0gZW5kSW5kZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29w
eVZpc2l0b3JfaAorCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKworY2xhc3MgQ29weVZpc2l0b3IgeworcHVi
bGljOgorICAgIENvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOworCisgICAgdm9pZCBj
b3B5RnJvbVNoYXJlZCgpOworCisgICAgdm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRv
bmVDb3B5aW5nKCk7CisKKyAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3By
aWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcworICAgIC8v
IGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5v
dWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24KKyAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRo
aXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3Qu
CisgICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weSh2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkKiBh
bGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7CisgICAgdm9pZCBkaWRDb3B5KHZvaWQqLCBzaXplX3Qp
OworCitwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CisK
KyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworICAgIENvcGllZEFsbG9jYXRvciBt
X2NvcGllZEFsbG9jYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2RlZmlu
ZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisj
aW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIK
KyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NDb3B5UGhhc2VGdW5jdG9yIDogcHVibGljIE1h
cmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CitwdWJsaWM6CisgICAgR0NDb3B5UGhhc2VGdW5jdG9y
KENvcHlWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0
aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuY29weUJhY2tp
bmdTdG9yZSA9PSBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIEpTT2JqZWN0
Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIG1fdmlzaXRvcik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIENvcHlWaXNpdG9yJiBtX3Zpc2l0b3I7Cit9OworCitpbmxpbmUgYm9vbCBDb3B5VmlzaXRv
cjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAg
aWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBBU1NFUlQoQ29w
aWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iob2xkUHRyKS0+aXNQaW5uZWQoKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9s
ZFB0ciktPmlzUGlubmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6
ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCBy
ZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgorICAgIGlmIChMSUtFTFkobV9jb3Bp
ZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7
CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30gICAgICAgCisKK2lu
bGluZSB2b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVz
KQoreworICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IDA7CisgICAgbV9zaGFyZWQubV9jb3Bp
ZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpLCAmbmV3QmxvY2spOworICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9j
ayhuZXdCbG9jayk7CisKKyAgICB2b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNrZWRCb29sZWFu
IGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3Vs
dCk7CisgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSB2b2lkIENvcHlWaXNpdG9yOjpzdGFydENvcHlpbmcoKQoreworICAgIEFTU0VSVCghbV9j
b3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSAwOwor
ICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxv
Y2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJmJsb2NrKTsKKyAgICBtX2NvcGllZEFsbG9jYXRv
ci5zZXRDdXJyZW50QmxvY2soYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6
ZG9uZUNvcHlpbmcoKQoreworICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGlu
Z0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIDApOworfQorCitp
bmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykK
K3sKKyAgICBBU1NFUlQoIUNvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSk7CisgICAgQ29w
aWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgQVNTRVJU
KCFibG9jay0+aXNQaW5uZWQoKSk7CisKKyAgICBpZiAoYmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMo
Ynl0ZXMpKQorICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVk
QmxvY2soYmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
Q1RocmVhZC5oIgorCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0dDVGhyZWFkOjpH
Q1RocmVhZChHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZCwgU2xvdFZpc2l0b3IqIHNsb3RWaXNp
dG9yLCBDb3B5VmlzaXRvciogY29weVZpc2l0b3IsIHNpemVfdCBpbmRleCkKKyAgICA6IG1fdGhy
ZWFkSUQoMCkKKyAgICAsIG1fc2hhcmVkKHNoYXJlZCkKKyAgICAsIG1fc2xvdFZpc2l0b3IoV1RG
OjphZG9wdFB0cihzbG90VmlzaXRvcikpCisgICAgLCBtX2NvcHlWaXNpdG9yKFdURjo6YWRvcHRQ
dHIoY29weVZpc2l0b3IpKQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30KKworVGhyZWFkSWRl
bnRpZmllciBHQ1RocmVhZDo6dGhyZWFkSUQoKQoreworICAgIEFTU0VSVChtX3RocmVhZElEKTsK
KyAgICByZXR1cm4gbV90aHJlYWRJRDsKK30KKwordm9pZCBHQ1RocmVhZDo6aW5pdGlhbGl6ZVRo
cmVhZElEKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgQVNTRVJUKCFtX3RocmVh
ZElEKTsKKyAgICBtX3RocmVhZElEID0gdGhyZWFkSUQ7Cit9CisKK1Nsb3RWaXNpdG9yKiBHQ1Ro
cmVhZDo6c2xvdFZpc2l0b3IoKQoreworICAgIEFTU0VSVChtX3Nsb3RWaXNpdG9yKTsKKyAgICBy
ZXR1cm4gbV9zbG90VmlzaXRvci5nZXQoKTsKK30KKworQ29weVZpc2l0b3IqIEdDVGhyZWFkOjpj
b3B5VmlzaXRvcigpCit7CisgICAgQVNTRVJUKG1fY29weVZpc2l0b3IpOworICAgIHJldHVybiBt
X2NvcHlWaXNpdG9yLmdldCgpOworfQorCitHQ1BoYXNlIEdDVGhyZWFkOjp3YWl0Rm9yTmV4dFBo
YXNlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQubV9waGFzZUxvY2spOwor
ICAgIHdoaWxlIChtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKQorICAgICAgICBt
X3NoYXJlZC5tX3BoYXNlQ29uZGl0aW9uLndhaXQobV9zaGFyZWQubV9waGFzZUxvY2spOworICAg
IHJldHVybiBtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZTsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NU
aHJlYWRNYWluKCkKK3sKKyAgICBHQ1BoYXNlIGN1cnJlbnRQaGFzZTsKKyNpZiBFTkFCTEUoUEFS
QUxMRUxfR0MpCisgICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKCk7CisjZW5kaWYKKyAgICAvLyBX
YWl0IGZvciB0aGUgbWFpbiB0aHJlYWQgdG8gZmluaXNoIGNyZWF0aW5nIHVzLgorICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOworICAgIH0K
KyAgICB7CisgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigqbV9zbG90VmlzaXRv
cik7CisgICAgICAgIHdoaWxlICgoY3VycmVudFBoYXNlID0gd2FpdEZvck5leHRQaGFzZSgpKSAh
PSBFeGl0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQaGFzZSkgeworICAgICAgICAg
ICAgY2FzZSBNYXJrOgorICAgICAgICAgICAgICAgIG1fc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENvcHk6CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0
byBjYWxsIHN0YXJ0Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9uIHRoZSBt
YWluIHRocmVhZC4KKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5zdGFydENvcHlpbmco
KTsKKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJvbVNoYXJlZCgpOworICAg
ICAgICAgICAgICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vUGhhc2U6CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEV4aXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGRhdGEpCit7CisgICAgR0NUaHJl
YWQqIHRocmVhZCA9IHN0YXRpY19jYXN0PEdDVGhyZWFkKj4oZGF0YSk7CisgICAgdGhyZWFkLT5n
Y1RocmVhZE1haW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBHQ1RocmVhZF9oCisjZGVmaW5lIEdDVGhyZWFkX2gKKworI2luY2x1
ZGUgPEdDVGhyZWFkU2hhcmVkRGF0YS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDb3B5VmlzaXRvcjsKK2NsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsK
K2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBHQ1RocmVhZCB7CitwdWJsaWM6CisgICAgR0NU
aHJlYWQoR0NUaHJlYWRTaGFyZWREYXRhJiwgU2xvdFZpc2l0b3IqLCBDb3B5VmlzaXRvciosIHNp
emVfdCk7CisKKyAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IoKTsKKyAgICBDb3B5VmlzaXRv
ciogY29weVZpc2l0b3IoKTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCk7CisgICAg
dm9pZCBpbml0aWFsaXplVGhyZWFkSUQoVGhyZWFkSWRlbnRpZmllcik7CisKKyAgICBzdGF0aWMg
dm9pZCBnY1RocmVhZFN0YXJ0RnVuYyh2b2lkKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBnY1Ro
cmVhZE1haW4oKTsKKyAgICBHQ1BoYXNlIHdhaXRGb3JOZXh0UGhhc2UoKTsKKworICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVk
OworICAgIE93blB0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKKyAgICBPd25QdHI8Q29w
eVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CisgICAgc2l6ZV90IG1faW5kZXg7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDQ1ICsyNiwzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNs
dWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1RocmVhZC5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1
ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgi
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXRDaGlsZHJl
bigpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0t
PnJlc2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnJlc2V0KCk7CiB9
CiAKIHNpemVfdCBHQ1RocmVhZFNoYXJlZERhdGE6OmNoaWxkVmlzaXRDb3VudCgpCiB7ICAgICAg
IAogICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgcmVz
dWx0ICs9IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnZpc2l0Q291bnQoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+dmlzaXRDb3VudCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjptYXJraW5n
VGhyZWFkTWFpbihTbG90VmlzaXRvciogc2xvdFZpc2l0b3IpCi17Ci0gICAgV1RGOjpyZWdpc3Rl
ckdDVGhyZWFkKCk7Ci0gICAgewotICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIo
KnNsb3RWaXNpdG9yKTsKLSAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90
VmlzaXRvcjo6U2xhdmVEcmFpbik7Ci0gICAgfQotICAgIGRlbGV0ZSBzbG90VmlzaXRvcjsKLX0K
LQotdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6Om1hcmtpbmdUaHJlYWRTdGFydEZ1bmModm9pZCog
bXlWaXNpdG9yKQoteyAgICAgICAgICAgICAgIAotICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRv
ciA9IHN0YXRpY19jYXN0PFNsb3RWaXNpdG9yKj4obXlWaXNpdG9yKTsKLQotICAgIHNsb3RWaXNp
dG9yLT5zaGFyZWREYXRhKCkubWFya2luZ1RocmVhZE1haW4oc2xvdFZpc2l0b3IpOwotfQogI2Vu
ZGlmCiAKIEdDVGhyZWFkU2hhcmVkRGF0YTo6R0NUaHJlYWRTaGFyZWREYXRhKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKQEAgLTc0LDEzICs1OSwyMiBAQCBHQ1RocmVhZFNoYXJlZERhdGE6OkdD
VGhyZWFkU2hhcmVkRGF0YShKCiAgICAgLCBtX3NoYXJlZE1hcmtTdGFjayhtX3NlZ21lbnRBbGxv
Y2F0b3IpCiAgICAgLCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKDApCiAgICAgLCBt
X3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFsc2UpCisgICAgLCBtX2Jsb2Nrc1RvQ29weShn
bG9iYWxEYXRhLT5oZWFwLm1fYmxvY2tTbmFwc2hvdCkKKyAgICAsIG1fY29weUluZGV4KDApCisg
ICAgLCBtX2N1cnJlbnRQaGFzZShOb1BoYXNlKQogeworICAgIG1fY29weUxvY2suSW5pdCgpOwog
I2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFiIHRoZSBsb2NrIHNvIHRoZSBuZXcg
R0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgc3RhcnQg
cnVubmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkg
ewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZpc2l0b3IoKnRo
aXMpOwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChzbG90VmlzaXRv
cik7Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZChtYXJraW5n
VGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIikp
OwotICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5sYXN0KCkpOworICAgICAgICBDb3B5
VmlzaXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0b3IoKnRoaXMpOworICAgICAgICBz
aXplX3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7CisgICAgICAgIEdDVGhyZWFkKiBuZXdU
aHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNpdG9yLCBjb3B5VmlzaXRvciwgaW5k
ZXgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKEdD
VGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlwdENvcmU6Ok1h
cmtpbmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFsaXplVGhyZWFkSUQodGhyZWFkSUQp
OworICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKICAgICB9CiAjZW5kaWYK
IH0KQEAgLTkwLDE5ICs4NCwyMiBAQCBHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1RocmVhZFNoYXJl
ZERhdGEoCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKSAgICAKICAgICAvLyBEZXN0cm95IG91ciBt
YXJraW5nIHRocmVhZHMuCiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJr
aW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIG1hcmtpbmdMb2NrZXIobV9tYXJraW5nTG9j
ayk7CisgICAgICAgIE11dGV4TG9ja2VyIHBoYXNlTG9ja2VyKG1fcGhhc2VMb2NrKTsKKyAgICAg
ICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOwogICAgICAgICBtX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOwotICAgICAgICBtX21hcmtpbmdDb25kaXRpb24uYnJv
YWRjYXN0KCk7CisgICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKKyAgICAgICAgbV9waGFz
ZUNvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21w
bGV0aW9uKG1fZ2NUaHJlYWRzW2ldLT50aHJlYWRJRCgpKTsKKyAgICAgICAgZGVsZXRlIG1fZ2NU
aHJlYWRzW2ldOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXJraW5n
VGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9t
YXJraW5nVGhyZWFkc1tpXSk7CiAjZW5kaWYKIH0KICAgICAKIHZvaWQgR0NUaHJlYWRTaGFyZWRE
YXRhOjpyZXNldCgpCiB7Ci0gICAgQVNTRVJUKCFtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzKTsKLSAgICBBU1NFUlQoIW1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCk7CiAgICAgQVNT
RVJUKG1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7CiAgICAgCiAjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQpAQCAtMTE5LDQgKzExNiw1MyBAQCB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVz
ZXQoKQogICAgIH0KIH0KIAordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0TWFya2lu
ZygpCit7CisgICAgTXV0ZXhMb2NrZXIgbWFya2luZ0xvY2tlcihtX21hcmtpbmdMb2NrKTsKKyAg
ICBNdXRleExvY2tlciBwaGFzZUxvY2tlcihtX3BoYXNlTG9jayk7CisgICAgQVNTRVJUKG1fY3Vy
cmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fY3VycmVudFBoYXNlID0gTWFyazsKKyAgICBt
X3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBtX3BoYXNlQ29uZGl0aW9u
LmJyb2FkY2FzdCgpOworfQorCit2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFy
a2luZygpCit7CisgICAgTXV0ZXhMb2NrZXIgbWFya2luZ0xvY2tlcihtX21hcmtpbmdMb2NrKTsK
KyAgICBNdXRleExvY2tlciBwaGFzZUxvY2tlcihtX3BoYXNlTG9jayk7CisgICAgQVNTRVJUKG1f
Y3VycmVudFBoYXNlID09IE1hcmspOworICAgIG1fY3VycmVudFBoYXNlID0gTm9QaGFzZTsKKyAg
ICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOworICAgIG1fbWFya2luZ0NvbmRp
dGlvbi5icm9hZGNhc3QoKTsKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0
Q29weWluZygpCit7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fY29w
eUxvY2spOworICAgICAgICBtX2Jsb2Nrc1RvQ29weSA9IG1fZ2xvYmFsRGF0YS0+aGVhcC5tX2Js
b2NrU25hcHNob3Q7CisgICAgICAgIG1fY29weUluZGV4ID0gMDsKKyAgICB9CisKKyAgICAvLyBX
ZSBkbyB0aGlzIGhlcmUgc28gdGhhdCB3ZSBhdm9pZCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRo
ZSBtYWluIHRocmVhZCBjYW4gCisgICAgLy8gYmxvdyB0aHJvdWdoIGFsbCBvZiB0aGUgY29weWlu
ZyB3b3JrIGJlZm9yZSB0aGUgR0NUaHJlYWRzIGZ1bGx5IHdha2UgdXAuIAorICAgIC8vIFRoZSBH
Q1RocmVhZHMgdGhlbiByZXF1ZXN0IGEgYmxvY2sgZnJvbSB0aGUgQ29waWVkU3BhY2Ugd2hlbiB0
aGUgY29weWluZyBwaGFzZSAKKyAgICAvLyBoYXMgY29tcGxldGVkLCB3aGljaCBpc24ndCBhbGxv
d2VkLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyBpKysp
CisgICAgICAgIG1fZ2NUaHJlYWRzW2ldLT5jb3B5VmlzaXRvcigpLT5zdGFydENvcHlpbmcoKTsK
KworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BoYXNlTG9jayk7CisgICAgQVNTRVJUKG1fY3Vy
cmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fY3VycmVudFBoYXNlID0gQ29weTsKKyAgICBt
X3BoYXNlQ29uZGl0aW9uLmJyb2FkY2FzdCgpOyAKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERh
dGE6OmRpZEZpbmlzaENvcHlpbmcoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BoYXNl
TG9jayk7CisgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IENvcHkpOworICAgIG1fY3VycmVu
dFBoYXNlID0gTm9QaGFzZTsKKyAgICBtX3BoYXNlQ29uZGl0aW9uLmJyb2FkY2FzdCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkU2hhcmVkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTYgKzI4LDI3IEBACiAKICNpbmNsdWRlICJMaXN0YWJsZUhhbmRsZXIuaCIKICNpbmNsdWRl
ICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIlVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBHQ1RocmVhZDsKIGNsYXNzIEpTR2xvYmFsRGF0YTsKIGNs
YXNzIENvcGllZFNwYWNlOworY2xhc3MgQ29weVZpc2l0b3I7CisKK2VudW0gR0NQaGFzZSB7Cisg
ICAgTm9QaGFzZSwKKyAgICBNYXJrLAorICAgIENvcHksCisgICAgRXhpdAorfTsKIAogY2xhc3Mg
R0NUaHJlYWRTaGFyZWREYXRhIHsKIHB1YmxpYzoKQEAgLTQ2LDYgKzU3LDExIEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIHJlc2V0KCk7CiAKKyAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwor
ICAgIHZvaWQgZGlkRmluaXNoTWFya2luZygpOworICAgIHZvaWQgZGlkU3RhcnRDb3B5aW5nKCk7
CisgICAgdm9pZCBkaWRGaW5pc2hDb3B5aW5nKCk7CisKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0Mp
CiAgICAgdm9pZCByZXNldENoaWxkcmVuKCk7CiAgICAgc2l6ZV90IGNoaWxkVmlzaXRDb3VudCgp
OwpAQCAtNTMsMTIgKzY5LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgR0NUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwor
ICAgIGZyaWVuZCBjbGFzcyBDb3B5VmlzaXRvcjsKIAotI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
LSAgICB2b2lkIG1hcmtpbmdUaHJlYWRNYWluKFNsb3RWaXNpdG9yKik7Ci0gICAgc3RhdGljIHZv
aWQgbWFya2luZ1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBoZWFwKTsKLSNlbmRpZgorICAgIHZvaWQg
Z2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmLCBzaXplX3QmKTsKIAogICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOwogICAgIENvcGllZFNwYWNlKiBtX2NvcGllZFNwYWNlOwpAQCAtNjcs
OSArODIsOCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgbV9zaG91bGRIYXNoQ29uc3Q7CiAK
LSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV9tYXJraW5nVGhyZWFkczsKLSAgICBWZWN0
b3I8U2xvdFZpc2l0b3IqPiBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrOwotICAgIAorICAgIFZl
Y3RvcjxHQ1RocmVhZCo+IG1fZ2NUaHJlYWRzOworCiAgICAgTXV0ZXggbV9tYXJraW5nTG9jazsK
ICAgICBUaHJlYWRDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uOwogICAgIE1hcmtTdGFja0Fy
cmF5IG1fc2hhcmVkTWFya1N0YWNrOwpAQCAtNzksMTAgKzkzLDI3IEBAIHByaXZhdGU6CiAgICAg
TXV0ZXggbV9vcGFxdWVSb290c0xvY2s7CiAgICAgSGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290
czsKIAorICAgIFNwaW5Mb2NrIG1fY29weUxvY2s7CisgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4m
IG1fYmxvY2tzVG9Db3B5OworICAgIHNpemVfdCBtX2NvcHlJbmRleDsKKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOworCisgICAgTXV0ZXggbV9waGFz
ZUxvY2s7CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRpb247CisgICAgR0NQaGFz
ZSBtX2N1cnJlbnRQaGFzZTsKKwogICAgIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwogICAgIExpc3RhYmxlSGFu
ZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tz
VG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsKKyAgICBlbmQg
PSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsgc19ibG9ja0Zy
YWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRleCA9IGVuZDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJl
dmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1ZGUgIkNv
cGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklu
bGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMjUy
LDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBIZWEKICAg
ICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShnbG9iYWxEYXRh
KQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAgLCBtX2NvcHlWaXNpdG9y
KG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERhdGEpCiAgICAgLCBtX2lz
U2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAt
NDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAg
ICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsKICAgICB9CiAKLSAgICBtX3N0b3JhZ2VTcGFj
ZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydE1hcmtpbmcoKTsK
ICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgdmlzaXRvci5z
ZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRvcik7CkBA
IC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAKICAg
ICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKIAot
ICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICBtX3NoYXJlZERhdGEuZGlkRmluaXNoTWFy
a2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQogICAgIHNpemVfdCB2aXNp
dENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpA
QCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAg
ICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwogI2VuZGlmCiAgICAgbV9zaGFyZWREYXRh
LnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1f
c3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgaWYgKG1fc3RvcmFnZVNwYWNlLnNo
b3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0YXJ0Q29weWlu
ZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlzaXRvciA9IG1fY29weVZpc2l0b3I7CisgICAg
ICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAgIHZpc2l0b3IuY29weUZyb21TaGFy
ZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICBtX3NoYXJlZERh
dGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0gCiAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNv
cHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dl
ZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAKICAg
ICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3Mo
KS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5RnVuY3RvciBmdW5jdG9yKG1fYmxvY2tTbmFw
c2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAg
IH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CisKKyAgICB7CiAgICAgICAgIEdDUEhBU0Uo
RmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAgIGZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBAIC03NTUsNyArNzc4LDcgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVjdFNwYWNlLnNo
cmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyhtX29iamVjdFNw
YWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBpbmcobV9ibG9j
a1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKIAogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAog
I2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAi
Q29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NU
aHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0xODIsNyArMTgz
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0
b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNs
YXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0b3I7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEluY3Jl
bWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0aWNzOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAm
KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFsbG9jYXRlQ2Vs
bChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxsR0MpOwogICAgICAgICB2b2lkIG1hcmtQcm90
ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1hcmtUZW1wU29y
dFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9y
ZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAgdm9p
ZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAgIHZvaWQgZGVsZXRl
VW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIzOSw2ICsyNDMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJlZERhdGE7CiAg
ICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgICAgIENvcHlWaXNpdG9yIG1f
Y29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBI
YW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtMjU2LDYgKzI2MSwyMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9hY3Rpdml0eUNh
bGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsKKyAgICAgICAg
VmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBzaG90OworICAgIH07CisKKyAgICBzdHJ1
Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICAg
ICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisgICAgICAgICAg
ICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykKKyAgICAgICAg
eworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayog
YmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgCisgICAgICAgIHNp
emVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7CiAg
ICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCShy
ZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHN0YXRpYyBjb25z
dCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAKIEluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVt
ZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5Mb29wKQogICAgIDogSGVh
cFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKICAgICAsIG1fY3VycmVudEJsb2Nr
VG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9ibG9ja1NuYXBz
aG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5IEBAIHZvaWQgSW5jcmVtZW50YWxTd2VlcGVy
Ojpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAKLXZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpz
dGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tTbmFwc2hvdCkK
K3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxNYXJrZWRCbG9j
ayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1fYmxvY2tzVG9Td2VlcC5yZXNpemUoYmxvY2tT
bmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5jdG9yIGZ1bmN0b3IobV9ibG9ja3NUb1N3ZWVw
KTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoQmxvY2soZnVu
Y3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2tTbmFwc2hvdDsKICAgICBtX2N1cnJl
bnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAgc2NoZWR1bGVUaW1lcigpOwogfQpAQCAtMTYw
LDcgKzE1OSw3IEBAIEluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2VlcGVyOjoKICAg
ICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRhKCkpOwogfQog
Ci12b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1h
cmtlZEJsb2NrKj4mKQordm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoVmVj
dG9yPE1hcmtlZEJsb2NrKj4mKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24gMTMwOTU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDIzICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKIAot
c3RydWN0IENvcHlGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci0g
ICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0gICAgICAgIDog
bV9pbmRleCgwKSAKLSAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRl
eCsrXSA9IGJsb2NrOyB9Ci0KLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBWZWN0b3I8TWFya2Vk
QmxvY2sqPiYgbV9ibG9ja3M7Ci19OwotCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXIgOiBwdWJs
aWMgSGVhcFRpbWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5jcmVtZW50YWxTd2VlcGVyKiBj
cmVhdGUoSGVhcCopOwotICAgIHZvaWQgc3RhcnRTd2VlcGluZyhjb25zdCBIYXNoU2V0PE1hcmtl
ZEJsb2NrKj4mIGJsb2NrU25hcHNob3QpOworICAgIHZvaWQgc3RhcnRTd2VlcGluZyhWZWN0b3I8
TWFya2VkQmxvY2sqPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKTsKICAgICB2b2lkIHN3
ZWVwTmV4dEJsb2NrKCk7CiAgICAgdm9pZCB3aWxsRmluaXNoU3dlZXBpbmcoKTsKQEAgLTcxLDcg
KzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbFRpbWVyKCk7CiAgICAgCiAgICAgdW5z
aWduZWQgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXg7Ci0gICAgVmVjdG9yPE1hcmtlZEJsb2Nr
Kj4gbV9ibG9ja3NUb1N3ZWVwOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBtX2Jsb2Nrc1Rv
U3dlZXA7CiAjZWxzZQogICAgIAogICAgIEluY3JlbWVudGFsU3dlZXBlcihKU0dsb2JhbERhdGEq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJl
dmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJDb25zZXJ2YXRp
dmVSb290cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU0ds
b2JhbERhdGEuaCIKQEAgLTM1LDggKzM2LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6c2V0dXAoKQog
ICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9nbG9iYWxEYXRhLT5o
YXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KCk7CiAgICAgbV9zaG91bGRIYXNoQ29uc3Qg
PSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2tbaV0tPm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3Q7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fZ2NUaHJlYWRzLnNpemUo
KTsgKytpKQorICAgICAgICBtX3NoYXJlZC5tX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+
bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNlbmRpZgog
fQogCkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVk
KFNoYXJlZAogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1fc2hhcmVkLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gZ2l2ZSB0
aGVpciBwcml2YXRlIENvcGllZEJsb2NrcyBiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24u
YnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgICAgIH0KQEAgLTIwMCwxNyArMjAxLDEyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWlu
RnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24u
YnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgd2hpbGUgKG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQubV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQu
bV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3NoYXJlZE1hcmtT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29weWluZygpOwor
ICAgICAgICAgICAgICAgIHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5
KCkgJiYgIW1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAg
ICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLndhaXQobV9zaGFyZWQubV9tYXJr
aW5nTG9jayk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIElzIHRoZSBWTSBleGl0aW5nPyBJZiBzbywgZXhpdCB0aGlzIHRocmVhZC4KLSAg
ICAgICAgICAgICAgICBpZiAobV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgLy8g
SXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8gSWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rp
b24uCisgICAgICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxk
RXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENv
dW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZB
Y3RpdmVQYXJhbGxlbE1hcmtlcnM7CkBAIC0yMzYsMzAgKzIzMiw2IEBAIHZvaWQgU2xvdFZpc2l0
b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKIH0KIAot
dm9pZCBTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKLXsKLSAgICBBU1NFUlQoIW1fY29waWVk
QWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci19Ci0KLXZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5l
d1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+
ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsK
LSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobV9zaGFyZWQubV9jb3BpZWRT
cGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpKTsKLQotICAgIHZvaWQqIHJlc3Vs
dCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9y
LnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKLSAgICBBU1NFUlQoZGlkU3VjY2VlZCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
Y2VPclBpbih2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBpZiAoIWNoZWNrSWZTaG91
bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHB0ciwgYnl0ZXMpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICAKLSAgICByZXR1cm4gYWxsb2NhdGVOZXdTcGFjZShieXRlcyk7Ci19Ci0KIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU1N0cmluZzo6dHJ5SGFzaENvbnN0TG9jaygpCiB7CiAjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQpAQCAtMzM1LDM2ICszMDcsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmludGVybmFsCiAgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmNvcHlBbmRBcHBlbmQodm9pZCoqIHB0ciwgc2l6ZV90IGJ5dGVzLCBKU1ZhbHVlKiB2
YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOwotICAg
IHZvaWQqIG5ld1B0ciA9IGFsbG9jYXRlTmV3U3BhY2VPclBpbihvbGRQdHIsIGJ5dGVzKTsKLSAg
ICBpZiAobmV3UHRyKSB7Ci0gICAgICAgIHNpemVfdCBqc1ZhbHVlc09mZnNldCA9IHN0YXRpY19j
YXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmFsdWVzKSAtIHN0YXRpY19jYXN0
PGNoYXIqPihvbGRQdHIpKTsKLQotICAgICAgICBKU1ZhbHVlKiBuZXdWYWx1ZXMgPSByZWludGVy
cHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1B0cikgKyBqc1Zh
bHVlc09mZnNldCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSB2YWx1ZXNbaV07Ci0gICAgICAgICAg
ICBuZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCgmbmV3VmFsdWVz
W2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwganNWYWx1
ZXNPZmZzZXQpOwotICAgICAgICAqcHRyID0gbmV3UHRyOwotICAgIH0gZWxzZQotICAgICAgICBh
cHBlbmQodmFsdWVzLCBsZW5ndGgpOwotfQotICAgIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uZUNv
cHlpbmcoKQotewotICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2Nr
KG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwotfQotCiB2b2lkIFNsb3RW
aXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewogICAgIGZvciAoV2Vha1JlZmVyZW5j
ZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMu
aGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIFNsb3RWaXNpdG9yX2gKICNkZWZpbmUgU2xvdFZpc2l0
b3JfaAogCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5o
IgogI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1ldGhvZHMuaCIKIApAQCAtODAsMjEgKzc5LDgg
QEAgcHVibGljOgogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAKLSAgICB2b2lkIHN0YXJ0Q29weWlu
ZygpOworICAgIHZvaWQgY29weUxhdGVyKHZvaWQqLCBzaXplX3QpOwogICAgIAotICAgIC8vIEhp
Z2gtbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhl
IG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcwotICAgIC8vIGZhbGwgaW50byBhIGNvbnRpZ3VvdXMg
cmVnaW9uIG9mIHRoZSBzdG9yYWdlIGNodW5rIGFuZCBpZiB0aGUgb2JqZWN0IGZvciB3aGljaCB5
b3UncmUKLSAgICAvLyBkb2luZyBjb3B5aW5nIGRvZXMgbm90IG9jY3VyIGZyZXF1ZW50bHkuCi0g
ICAgdm9pZCBjb3B5QW5kQXBwZW5kKHZvaWQqKiwgc2l6ZV90LCBKU1ZhbHVlKiwgdW5zaWduZWQp
OwotICAgIAotICAgIC8vIExvdy1sZXZlbCBBUEkgZm9yIGNvcHlpbmcsIGFwcHJvcHJpYXRlIGZv
ciBjYXNlcyB3aGVyZSB0aGUgb2JqZWN0J3MgaGVhcCByZWZlcmVuY2VzCi0gICAgLy8gYXJlIGRp
c2NvbnRpZ3VvdXMgb3IgaWYgdGhlIG9iamVjdCBvY2N1cnMgZnJlcXVlbnRseSBlbm91Z2ggdGhh
dCB5b3UgbmVlZCB0byBmb2N1cyBvbgotICAgIC8vIHBlcmZvcm1hbmNlLiBVc2UgdGhpcyB3aXRo
IGNhcmUgYXMgaXQgaXMgZWFzeSB0byBzaG9vdCB5b3Vyc2VsZiBpbiB0aGUgZm9vdC4KLSAgICBi
b29sIGNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHZvaWQqIG9sZFB0ciwgc2l6ZV90
KTsKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7Ci0gICAgCi0gICAgdm9pZCBk
b25lQ29weWluZygpOyAKLSAgICAgICAgCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElO
RykKICAgICBWVGFibGVTcGVjdHJ1bSBtX3Zpc2l0ZWRUeXBlQ291bnRzOwogI2VuZGlmCkBAIC0x
MjUsOSArMTExLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vz
c2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwogICAgIAot
ICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VPclBpbih2b2lkKiwgc2l6ZV90KTsKLSAgICB2b2lk
KiBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QpOwotCiAgICAgdm9pZCBkb25hdGVLbm93blBh
cmFsbGVsKCk7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNrOwpAQCAtMTQ2LDggKzEyOSw2
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwogI2VuZGlmCiAKLSAg
ICBDb3BpZWRBbGxvY2F0b3IgbV9jb3BpZWRBbGxvY2F0b3I7Ci0KIHB1YmxpYzoKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0
aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDMwICsxMzYsNiBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290
CiAgICAgbWVyZ2VPcGFxdWVSb290cygpOwogfQogICAgIAotQUxXQVlTX0lOTElORSBib29sIFNs
b3RWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSh2b2lkKiBvbGRQdHIs
IHNpemVfdCBieXRlcykKLXsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMp
KSB7Ci0gICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihDb3BpZWRTcGFjZTo6b3Zl
cnNpemVCbG9ja0ZvcihvbGRQdHIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5pc1Bpbm5lZChvbGRQdHIpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5dGVzKQotewot
ICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXplIHRoYXQgdGhp
cyB3aWxsIGJlIGFzc2lnbmVkLgotICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxvY2F0b3IudHJ5
QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAK
LSAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7Ci0gICAgQVNTRVJUKHJl
c3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgICAgCi0KIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjpkb25hdGUoKQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwpAQCAt
MTc1LDYgKzE1MSwyMyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4o
CiAgICAgZHJhaW4oKTsKIH0KIAoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNvcHlMYXRlcih2
b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNp
emUoYnl0ZXMpKSB7CisgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihDb3BpZWRT
cGFjZTo6b3ZlcnNpemVCbG9ja0ZvcihwdHIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0ZvcihwdHIpOworICAg
IGlmIChibG9jay0+aXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYmxvY2stPnJl
cG9ydExpdmVCeXRlcyhieXRlcyk7CisKKyAgICBpZiAoIWJsb2NrLT5zaG91bGRFdmFjdWF0ZSgp
KQorICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oYmxvY2spOworfQorICAgIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTbG90VmlzaXRvcklubGluZU1ldGhvZHNf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlz
aW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSlNHbG9iYWxEYXRhOwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBDb3B5VmlzaXRvcjsK
IHN0cnVjdCBBcnJheVN0b3JhZ2U7CiAKIGNsYXNzIEJ1dHRlcmZseSB7CkBAIC03Myw3ICs3Myw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0dsb2JhbERhdGEm
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyk7CiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVuaW5pdGlhbGl6
ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXpl
X3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGVVbmlu
aXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgSW5kZXhpbmdIZWFkZXIq
IGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0K
ICAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVy
biBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMuaAkocmV2aXNp
b24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAi
QXJyYXlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVkZSAiQ29waWVk
U3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU5LDcgKzU5LDcgQEAgaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbAogICAgIHJldHVybiBjcmVhdGUoZ2xvYmFs
RGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRleGluZ0hlYWRl
cihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwgMCk7CiB9CiAK
LWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0Nv
bGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90
IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
VW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImIHZpc2l0b3IsIHNpemVf
dCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdI
ZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IGZyb21CYXNlKAogICAgICAgICB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2Uo
dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRl
ciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgqVmlzaXRDaGls
ZHJlbkZ1bmN0aW9uUHRyKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgICAgICBWaXNpdENo
aWxkcmVuRnVuY3Rpb25QdHIgdmlzaXRDaGlsZHJlbjsKIAorICAgICAgICB0eXBlZGVmIHZvaWQg
KCpDb3B5QmFja2luZ1N0b3JlRnVuY3Rpb25QdHIpKEpTQ2VsbCosIENvcHlWaXNpdG9yJik7Cisg
ICAgICAgIENvcHlCYWNraW5nU3RvcmVGdW5jdGlvblB0ciBjb3B5QmFja2luZ1N0b3JlOworCiAg
ICAgICAgIHR5cGVkZWYgQ2FsbFR5cGUgKCpHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyKShKU0NlbGwq
LCBDYWxsRGF0YSYpOwogICAgICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIGdldENhbGxEYXRh
OwogCkBAIC0xMTYsNiArMTE5LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1iZXIgeyBcCiAj
ZGVmaW5lIENSRUFURV9NRVRIT0RfVEFCTEUoQ2xhc3NOYW1lKSB7IFwKICAgICAgICAgJkNsYXNz
TmFtZTo6ZGVzdHJveSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxkcmVuLCBcCisg
ICAgICAgICZDbGFzc05hbWU6OmNvcHlCYWNraW5nU3RvcmUsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3RydWN0RGF0YSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMTAg
QEAgdm9pZCBKU0NlbGw6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIGNlbGwtPkpTQ2VsbDo6
fkpTQ2VsbCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBD
b3B5VmlzaXRvciYpCit7Cit9CisKIGJvb2wgSlNDZWxsOjpnZXRTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBTdHJpbmcmIHN0cmluZ1ZhbHVlKSBjb25zdAogewogICAgIGlmICghaXNTdHJpbmcoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMzA5
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIENv
cHlWaXNpdG9yOwogICAgIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OwogICAgIGNsYXNzIEpT
R2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTEwMCw2
ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNP
YmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAg
ICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCosIENvcHlWaXNpdG9yJik7CiAKICAgICAgICAgLy8gT2JqZWN0IG9wZXJhdGlvbnMsIHdp
dGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KICAgICAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBA
QAogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvcGll
ZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCisjaW5jbHVk
ZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5o
IgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIu
aCIKQEAgLTk0LDcgKzk2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlO
YW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBz
dG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Y29weUJ1dHRlcmZseShD
b3B5VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdl
U2l6ZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKICAgICAKQEAgLTExMSwyNiArMTEzLDIw
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAgICAgcHJl
Q2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CiAg
ICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgK
LSAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3IuY2hlY2tJZlNo
b3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCi0gICAgICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJl
Q2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7CisgICAgc2l6
ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBw
cm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcykpIHsKICAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAg
ICAgICAKLSAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4KKyAgICAgICAg
Ly8gQ29weSB0aGUgcHJvcGVydGllcy4KICAgICAgICAgUHJvcGVydHlTdG9yYWdlIGN1cnJlbnRU
YXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAgICBQcm9wZXJ0
eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdldCgpOwotICAgICAg
ICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSgmdmFsdWUpOwotICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCktPnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGNv
dW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQorICAgICAgICAgICAgKC0tY3VycmVudFRhcmdl
dCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJjZSktPmdldCgpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKICAgICAg
ICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNYXJrIGFuZCBjb3B5
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGFycmF5
IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICAgICAgCiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGN1cnJlbnRTb3VyY2U7CkBAIC0xNTAsOCArMTQ2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQgPSBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKICAgICAgICAgICAgICAgICBj
dXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CiAgICAg
ICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTYyLDMyICsx
NTYsNTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoY291
bnQtLSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVudFNvdXJjZSsr
KS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1ZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICAo
Y3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoY3VycmVudFNvdXJjZSsr
KS0+Z2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRlcmZseSA9IG5l
d0J1dHRlcmZseTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7CisgICAgfSAKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sK
KyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5ID0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsK
KyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBw
cmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3Ry
dWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBidXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KLSAgICAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3Jh
Z2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBNYXJrIHRoZSBhcnJh
eSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0
dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAgICBpZiAoYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBC
dXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5k
ZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAgIC8vIE1hcmsg
dGhlIHByb3BlcnRpZXMuCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAgdmlzaXRvci5j
b3B5TGF0ZXIoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwg
Y2FwYWNpdHlJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3By
aWF0ZS4KKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwog
ICAgIH0KIH0KIApAQCAtMjExLDYgKzIyMywxNiBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAordm9pZCBKU09iamVjdDo6Y29weUJhY2tpbmdT
dG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICAKKyAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChidXR0ZXJmbHkp
CisgICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKK30KKwogdm9pZCBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2Jq
ZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICAgICAgCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdT
dG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAKQEAgLTYzNCw2ICs2
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZXNldEluaGVyaXRvcklEKEpT
R2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90
VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgICAgIHZvaWQg
Y29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6
ZSk7CiAKICAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBp
cyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgICAgIC8vIHN0b3JhZ2UuIFRoaXMg
d2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTU2LDE0ICs5NTgsMTQgQEAgaW5saW5lIEpTVmFs
dWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+c3Rv
cmVkUHJvdG90eXBlKCk7CiB9CiAKLWlubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3Qg
Q2xhc3NJbmZvKiBpbmZvKSBjb25zdAoraW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6
Om1ldGhvZFRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY2xhc3NJbmZvKCktPmlzU3ViQ2xh
c3NPZihpbmZvKTsKKyAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZTsKIH0KIAot
aW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKK2lu
bGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAog
ewotICAgIHJldHVybiAmY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlOworICAgIHJldHVybiBjbGFz
c0luZm8oKS0+aXNTdWJDbGFzc09mKGluZm8pOwogfQogCiAvLyB0aGlzIG1ldGhvZCBpcyBoZXJl
IHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlNDZWxsOjppbmhlcml0cwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTMw
OTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgdih1bnNpZ25l
ZCwgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZSwgcGFnZVNpemUoKSkgXAogICAgIHYodW5zaWduZWQs
IG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoNykpIFwKICAgICB2
KHVuc2lnbmVkLCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQsIDEwMDApIFwKKyAgICB2KGRvdWJs
ZSwgbWluSGVhcFV0aWxpemF0aW9uLCAwLjgpIFwKKyAgICB2KGRvdWJsZSwgbWluQ29waWVkQmxv
Y2tVdGlsaXphdGlvbiwgMC45KSBcCiAgICAgXAogICAgIHYoYm9vbCwgZm9yY2VXZWFrUmFuZG9t
U2VlZCwgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBmb3JjZWRXZWFrUmFuZG9tU2VlZCwgMCkg
XAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168285</attachid>
            <date>2012-10-11 15:18:11 -0700</date>
            <delta_ts>2012-10-11 16:18:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98792-20121011151708.patch</filename>
            <type>text/plain</type>
            <size>83801</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MCBA
QAorMjAxMi0xMC0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvcHlpbmcgY29sbGVjdGlvbiBzaG91bGRuJ3QgcmVxdWlyZSBPKGxpdmUgYnl0
ZXMpIG1lbW9yeSBvdmVyaGVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTg3OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDdXJyZW50bHkgb3VyIGNvcHlpbmcgY29sbGVjdGlvbiBvY2N1cnMgc2ltdWx0
YW5lb3VzbHkgd2l0aCB0aGUgbWFya2luZyBwaGFzZS4gV2UnZCBsaWtlIAorICAgICAgICB0byBi
ZSBhYmxlIHRvIHJldXNlIENvcGllZEJsb2NrcyBhcyBzb29uIGFzIHRoZXkgYmVjb21lIGZ1bGx5
IGV2YWN1YXRlZCwgYnV0IHRoaXMgaXMgbm90IAorICAgICAgICBjdXJyZW50bHkgcG9zc2libGUg
YmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZSBsaXZlbmVzcyBzdGF0aXN0aWNzIG9mIGVhY2ggb2xk
IENvcGllZEJsb2NrIAorICAgICAgICB1bnRpbCBtYXJraW5nL2NvcHlpbmcgaGFzIGFscmVhZHkg
ZmluaXNoZWQuIEluc3RlYWQsIHdlIGhhdmUgdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkg
CisgICAgICAgIGZyb20gdGhlIE9TIHRvIHVzZSBhcyBvdXIgd29ya2luZyBzZXQgb2YgQ29waWVk
QmxvY2tzIHdoaWxlIGNvcHlpbmcuIFdlIHRoZW4gcmV0dXJuIHRoZSAKKyAgICAgICAgZnVsbHkg
ZXZhY3VhdGVkIG9sZCBDb3BpZWRCbG9ja3MgYmFjayB0byB0aGUgYmxvY2sgYWxsb2NhdG9yLCB0
aHVzIGdpdmluZyBvdXIgY29weWluZyBwaGFzZSAKKyAgICAgICAgYW4gTyhsaXZlIGJ5dGVzKSBv
dmVyaGVhZC4KKworICAgICAgICBUbyBmaXggdGhpcywgd2Ugc2hvdWxkIGluc3RlYWQgc3BsaXQg
dGhlIGNvcHlpbmcgcGhhc2UgYXBhcnQgZnJvbSB0aGUgbWFya2luZyBwaGFzZS4gVGhpcyAKKyAg
ICAgICAgd2F5IHdlIGhhdmUgZnVsbCBsaXZlbmVzcyBkYXRhIGZvciBlYWNoIENvcGllZEJsb2Nr
IGR1cmluZyB0aGUgY29weWluZyBwaGFzZSBzbyB0aGF0IHdlIAorICAgICAgICBjYW4gcmV1c2Ug
dGhlbSB0aGUgaW5zdGFudCB0aGV5IGJlY29tZSBmdWxseSBldmFjdWF0ZWQuIFdpdGggdGhlIGFk
ZGl0aW9uYWwgbGl2ZW5lc3MgZGF0YSAKKyAgICAgICAgdGhhdCBlYWNoIENvcGllZEJsb2NrIGFj
Y3VtdWxhdGVzLCB3ZSBjYW4gYWRkIHNvbWUgYWRkaXRpb25hbCBoZXVyaXN0aWNzIHRvIHRoZSBj
b2xsZWN0b3IuIAorICAgICAgICBGb3IgZXhhbXBsZSwgd2UgY2FuIGNhbGN1bGF0ZSBvdXIgZ2xv
YmFsIEhlYXAgZnJhZ21lbnRhdGlvbiBhbmQgb25seSBjaG9vc2UgdG8gZG8gYSBjb3B5aW5nIAor
ICAgICAgICBwaGFzZSBpZiB0aGF0IGZyYWdtZW50YXRpb24gZXhjZWVkcyBzb21lIGxpbWl0LiBB
cyBhbm90aGVyIGV4YW1wbGUsIHdlIGNhbiBza2lwIGNvcHlpbmcgCisgICAgICAgIGJsb2NrcyB0
aGF0IGFyZSBhbHJlYWR5IGFib3ZlIGEgcGFydGljdWxhciBmcmFnbWVudGF0aW9uIGxpbWl0LCB3
aGljaCBhbGxvd3Mgb2xkZXIgb2JqZWN0cyAKKyAgICAgICAgdG8gY29hbGVzY2UgaW50byBibG9j
a3MgdGhhdCBhcmUgcmFyZWx5IGNvcGllZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRCbG9jay5oOgor
ICAgICAgICAoQ29waWVkQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2spOiBBZGRlZCBzdXBwb3J0IGZvciB0cmFja2luZyBsaXZlIGJ5dGVzIGluIGEgQ29waWVk
QmxvY2sgaW4gYSAKKyAgICAgICAgdGhyZWFkLXNhZmUgZmFzaGlvbi4KKyAgICAgICAgKEpTQzo6
Q29waWVkQmxvY2s6OnJlcG9ydExpdmVCeXRlcyk6IEFkZHMgYSBudW1iZXIgb2YgbGl2ZSBieXRl
cyB0byB0aGUgYmxvY2sgaW4gYSB0aHJlYWQtc2FmZSAKKyAgICAgICAgZmFzaGlvbiB1c2luZyBj
b21wYXJlIGFuZCBzd2FwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OmRpZFN1cnZpdmVHQyk6IENhbGxlZCB3aGVuIGEgYmxvY2sgc3Vydml2ZXMgYSBzaW5nbGUg
R0Mgd2l0aG91dCBiZWluZyAKKyAgICAgICAgZXZhY3VhdGVkLiBUaGlzIGNvdWxkIGJlIGNhbGxl
ZCBmb3IgYSBjb3VwbGUgcmVhc29uczogKGEpIHRoZSBibG9jayB3YXMgcGlubmVkIG9yIChiKSB3
ZSAKKyAgICAgICAgZGVjaWRlZCBub3QgdG8gZG8gYW55IGNvcHlpbmcuIEEgYmxvY2sgY2FuIGJl
Y29tZSBwaW5uZWQgZm9yIGEgZmV3IHJlYXNvbnM6ICgxKSBhIHBvaW50ZXIgaW50byAKKyAgICAg
ICAgdGhlIGJsb2NrIHdhcyBmb3VuZCBkdXJpbmcgdGhlIGNvbnNlcnZhdGl2ZSBzY2FuLiAoMikg
dGhlIGJsb2NrIHdhcyBkZWVtZWQgZnVsbCBlbm91Z2ggdG8gCisgICAgICAgIG5vdCB3YXJyYW50
IGFueSBjb3B5aW5nLiAoMykgVGhlIGJsb2NrIGlzIG92ZXJzaXplIGFuZCB3YXMgZm91bmQgdG8g
YmUgbGl2ZS4gCisgICAgICAgIChKU0M6OkNvcGllZEJsb2NrOjpkaWRFdmFjdWF0ZUJ5dGVzKTog
Q2FsbGVkIHdoZW4gc29tZSBudW1iZXIgb2YgYnl0ZXMgYXJlIGNvcGllZCBmcm9tIHRoaXMgCisg
ICAgICAgIGJsb2NrLiBJZiB0aGUgbnVtYmVyIG9mIGxpdmUgYnl0ZXMgZXZlciBoaXRzIHplcm8s
IHRoZSBibG9jayB3aWxsIHJldHVybiBpdHNlbGYgdG8gdGhlIAorICAgICAgICBCbG9ja0FsbG9j
YXRvciB0byBiZSByZWN5Y2xlZC4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxvY2s6OmNhbkJlUmVj
eWNsZWQpOiBJbmRpY2F0ZXMgdGhhdCBhIGJsb2NrIGhhcyBubyBsaXZlIGJ5dGVzIGFuZCBjYW4g
YmUgCisgICAgICAgIGltbWVkaWF0ZWx5IHJlY3ljbGVkLiBUaGlzIGlzIHVzZWQgZm9yIGJsb2Nr
cyB0aGF0IGFyZSBmb3VuZCB0byBoYXZlIHplcm8gbGl2ZSBieXRlcyBhdCB0aGUgCisgICAgICAg
IGJlZ2lubmluZyBvZiB0aGUgY29weWluZyBwaGFzZS4KKyAgICAgICAgKEpTQzo6Q29waWVkQmxv
Y2s6OnNob3VsZEV2YWN1YXRlKTogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGN1
cnJlbnQgZnJhZ21lbnRhdGlvbiAKKyAgICAgICAgb2YgdGhlIGJsb2NrIGlzIGFib3ZlIG91ciBm
cmFnbWVudGF0aW9uIHRocmVzaG9sZCwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgKEpT
Qzo6Q29waWVkQmxvY2s6OmlzUGlubmVkKTogQWRkZWQgYW4gYWNjZXNzb3IgZm9yIHRoZSBwaW5u
ZWQgZmxhZworICAgICAgICAoSlNDOjpDb3BpZWRCbG9jazo6bGl2ZUJ5dGVzKTogCisgICAgICAg
ICogaGVhcC9Db3BpZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3Bp
ZWRTcGFjZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lRmlsbGluZ0Jsb2NrKTog
Q2hhbmdlZCBzbyB0aGF0IHdlIGNhbiBleGNoYW5nZSBvdXIgZmlsbGVkIGJsb2NrIGZvciBhIAor
ICAgICAgICBmcmVzaCBibG9jay4gVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHRo
cmVhZCByZXR1cm5zIGl0cyBib3Jyb3dlZCBibG9jaywgaXQncyB0aGUgbGFzdCAKKyAgICAgICAg
Ym9ycm93ZWQgYmxvY2ssIHNvIENvcGllZFNwYWNlIHRoaW5rcyB0aGF0IGNvcHlpbmcgaGFzIGNv
bXBsZXRlZCwgYW5kIGl0IHN0YXJ0cyBkb2luZyBhbGwgb2YgdGhlIAorICAgICAgICBjb3B5aW5n
IHBoYXNlIGNsZWFudXAuIEluIGFjdHVhbGl0eSwgdGhlIHRocmVhZCB3YW50ZWQgYW5vdGhlciBi
bG9jayBhZnRlciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgCisgICAgICAgIGJsb2NrLiBTbyB3ZSBh
bGxvdyB0aGUgdGhyZWFkIHRvIGF0b21pY2FsbHkgZXhjaGFuZ2UgaXRzIGJsb2NrIGZvciBhbm90
aGVyIGJsb2NrLgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcpOiBB
ZGRlZCB0aGUgY2FsY3VsYXRpb24gb2YgZ2xvYmFsIEhlYXAgZnJhZ21lbnRhdGlvbiB0byAKKyAg
ICAgICAgZGV0ZXJtaW5lIGlmIHRoZSBjb3B5aW5nIHBoYXNlIHNob3VsZCBjb21tZW5jZS4gV2Ug
aW5jbHVkZSB0aGUgTWFya2VkU3BhY2UgaW4gb3VyIGZyYWdtZW50YXRpb24gCisgICAgICAgIGNh
bGN1bGF0aW9uIGJ5IGFzc3VtaW5nIHRoYXQgdGhlIE1hcmtlZFNwYWNlIGlzIDAlIGZyYWdtZW50
ZWQgc2luY2Ugd2UgY2FuIHJldXNlIGFueSBjdXJyZW50bHkgCisgICAgICAgIGZyZWUgbWVtb3J5
IGluIGl0IChpLmUuIHdlIGlnbm9yZSBhbnkgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBpbiB0aGUg
TWFya2VkU3BhY2UpLiBXaGlsZSB3ZSdyZSAKKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIGZyYWdt
ZW50YXRpb24gb2YgQ29waWVkU3BhY2UsIHdlIGFsc28gcmV0dXJuIGFueSBmcmVlIGJsb2NrcyB3
ZSBmaW5kIGFsb25nIHRoZSAKKyAgICAgICAgd2F5IChtZWFuaW5nIGxpdmVCeXRlcygpID09IDAp
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmRvbmVDb3B5aW5n
KTogV2Ugc3RpbGwgaGF2ZSB0byBpdGVyYXRlIG92ZXIgYWxsIHRoZSBibG9ja3MsIHJlZ2FyZGxl
c3Mgb2YKKyAgICAgICAgd2hldGhlciB0aGUgY29weWluZyBwaGFzZSB0b29rIHBsYWNlIG9yIG5v
dCBzbyB0aGF0IHdlIGNhbiByZXNldCBhbGwgb2YgdGhlIGxpdmUgYnl0ZXMgY291bnRlcnMgCisg
ICAgICAgIGFuZCB1bi1waW4gYW55IHBpbm5lZCBibG9ja3MuCisgICAgICAgICogaGVhcC9Db3Bp
ZWRTcGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAoSlNDOjpDb3BpZWRT
cGFjZTo6c2hvdWxkRG9Db3B5UGhhc2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2VJbmxp
bmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVk
QmxvY2spOiBUaGlzIGZ1bmN0aW9uIGlzIGRpc3RpbmN0IGZyb20gcmVjeWNsaW5nIGEgYm9ycm93
ZWQgYmxvY2sgCisgICAgICAgIGJlY2F1c2UgYSBib3Jyb3dlZCBibG9jayBoYXNuJ3QgYmVlbiBh
ZGRlZCB0byB0aGUgQ29waWVkU3BhY2UgeWV0LCBidXQgYW4gZXZhY3VhdGVkIGJsb2NrIGlzIHN0
aWxsCisgICAgICAgIGN1cnJlbnRseSBpbiBDb3BpZWRTcGFjZSwgc28gd2UgaGF2ZSB0byBtYWtl
IHN1cmUgd2UgcHJvcGVybHkgcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIGJsb2NrIGZyb20gCisg
ICAgICAgIENvcGllZFNwYWNlIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gQmxvY2tBbGxvY2F0b3Iu
CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpyZWN5Y2xlQm9ycm93ZWRCbG9jayk6IFJlbmFt
ZWQgdG8gaW5kaWNhdGUgdGhlIGRpc3RpbmN0aW9uIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgICAg
KiBoZWFwL0NvcHlWaXNpdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpDb3B5VmlzaXRvcjo6Q29weVZpc2l0b3IpOgorICAgICAgICAoSlNDOjpDb3B5VmlzaXRv
cjo6Y29weUZyb21TaGFyZWQpOiBNYWluIGZ1bmN0aW9uIGZvciBhbnkgdGhyZWFkIHBhcnRpY2lw
YXRpbmcgaW4gdGhlIGNvcHlpbmcgcGhhc2UuCisgICAgICAgIEdyYWJzIGNodW5rcyBvZiBNYXJr
ZWRCbG9ja3MgZnJvbSB0aGUgc2hhcmVkIGxpc3QgYW5kIGNvcGllcyB0aGUgYmFja2luZyBzdG9y
ZSBvZiBhbnlib2R5IHdobyBuZWVkcworICAgICAgICBpdCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9y
ZSBjaHVua3MgdG8gY29weS4KKyAgICAgICAgKiBoZWFwL0NvcHlWaXNpdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvcHlWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL0Nv
cHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChHQ0NvcHlQaGFzZUZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHQ0NvcHlQaGFzZUZ1bmN0b3I6
OkdDQ29weVBoYXNlRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkdDQ29weVBoYXNlRnVuY3Rvcjo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29w
eSk6IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgc2hvdWxkRXZhY3VhdGUoKSBiZWNhdXNlIGFsbCBv
ZiB0aG9zZSAKKyAgICAgICAgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0aGUgbWFya2luZyBwaGFz
ZS4KKyAgICAgICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2UpOiAKKyAgICAg
ICAgKEpTQzo6Q29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAgICAgKEpT
Qzo6Q29weVZpc2l0b3I6OnN0YXJ0Q29weWluZyk6IEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBhIHRocmVhZCB0aGF0IGlzIGFib3V0IHRvIHN0YXJ0IGNvcHlpbmcuCisgICAgICAgIChKU0M6
OkNvcHlWaXNpdG9yOjpkb25lQ29weWluZyk6CisgICAgICAgIChKU0M6OkNvcHlWaXNpdG9yOjpk
aWRDb3B5KTogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgYW4gb2JqZWN0IHRoYXQgaGFzIGp1
c3Qgc3VjY2Vzc2Z1bGx5IGNvcGllZCBpdHMKKyAgICAgICAgYmFja2luZyBzdG9yZS4gSXQgaW5k
aWNhdGVzIHRvIHRoZSBDb3BpZWRCbG9jayB0aGF0IHNvbWVib2R5IGhhcyBqdXN0IGZpbmlzaGVk
IGV2YWN1YXRpbmcgc29tZSBudW1iZXIgb2YgCisgICAgICAgIGJ5dGVzIGZyb20gaXQsIGFuZCwg
aWYgdGhlIENvcGllZEJsb2NrIG5vdyBoYXMgbm8gbW9yZSBsaXZlIGJ5dGVzLCBjYW4gYmUgcmVj
eWNsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OkdDVGhyZWFkKTogVGhpcyBp
cyBhIG5ldyBjbGFzcyB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNpbmdsZSB0aHJlYWQgcmVzcG9uc2li
bGUgZm9yIHBhcnRpY2lwYXRpbmcgCisgICAgICAgIGluIGEgc3BlY2lmaWMgc2V0IG9mIEdDIHBo
YXNlcy4gQ3VycmVudGx5LCB0aGF0IHNldCBvZiBwaGFzZXMgaW5jbHVkZXMgTWFyaywgQ29weSwg
YW5kIEV4aXQuIEVhY2ggdGhyZWFkIAorICAgICAgICBtb25pdG9ycyBhIHNoYXJlZCB2YXJpYWJs
ZSBpbiBpdHMgYXNzb2NpYXRlZCBHQ1RocmVhZFNoYXJlZERhdGEuIFRoZSBtYWluIHRocmVhZCB1
cGRhdGVzIHRoaXMgbV9jdXJyZW50UGhhc2UKKyAgICAgICAgdmFyaWFibGUgYXMgY29sbGVjdGlv
biBwcm9ncmVzc2VzIHRocm91Z2ggdGhlIHZhcmlvdXMgcGhhc2VzLiBQYXJhbGxlbCBtYXJraW5n
IHN0aWxsIHdvcmtzIGV4YWN0bHkgbGlrZSBpdCAKKyAgICAgICAgaGFzLiBJbiBvdGhlciB3b3Jk
cywgdGhlICJydW4gbG9vcCIgZm9yIGVhY2ggb2YgdGhlIEdDIHRocmVhZHMgc2l0cyBhYm92ZSBh
bnkgaW5kaXZpZHVhbCBwaGFzZSwgdGh1cyBrZWVwaW5nIAorICAgICAgICB0aGUgc2VwYXJhdGUg
cGhhc2VzIG9mIHRoZSBjb2xsZWN0b3Igb3J0aG9nb25hbC4KKyAgICAgICAgKEpTQzo6R0NUaHJl
YWQ6OnRocmVhZElEKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJ
RCk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjpzbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6
OkdDVGhyZWFkOjpjb3B5VmlzaXRvcik6CisgICAgICAgIChKU0M6OkdDVGhyZWFkOjp3YWl0Rm9y
TmV4dFBoYXNlKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWQ6OmdjVGhyZWFkTWFpbik6CisgICAg
ICAgIChKU0M6OkdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyk6CisgICAgICAgICogaGVhcC9H
Q1RocmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ1RocmVhZCk6Cisg
ICAgICAgICogaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwOiBUaGUgR0NUaHJlYWRTaGFyZWRE
YXRhIG5vdyBoYXMgYSBsaXN0IG9mIEdDVGhyZWFkIG9iamVjdHMgcmF0aGVyIHRoYW4gcmF3IAor
ICAgICAgICBUaHJlYWRJZGVudGlmaWVycy4KKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWRE
YXRhOjpyZXNldENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6R0NUaHJlYWRTaGFyZWREYXRhOjpj
aGlsZFZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OkdDVGhy
ZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6fkdDVGhy
ZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6cmVzZXQp
OgorICAgICAgICAoSlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0YXJ0TWFya2luZyk6IENh
bGxiYWNrIHRvIGxldCB0aGUgR0NUaHJlYWRTaGFyZWREYXRhIGtub3cgdGhhdCBtYXJraW5nIGhh
cyAKKyAgICAgICAgc3RhcnRlZCBhbmQgdXBkYXRlcyB0aGUgbV9jdXJyZW50UGhhc2UgdmFyaWFi
bGUgYW5kIG5vdGlmaWVzIHRoZSBHQ1RocmVhZHMgYWNjb3JkaW5nbHkuCisgICAgICAgIChKU0M6
OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkRmluaXNoTWFya2luZyk6IERpdHRvIGZvciBmaW5pc2hp
bmcgbWFya2luZy4gCisgICAgICAgIChKU0M6OkdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlkU3RhcnRD
b3B5aW5nKTogRGl0dG8gZm9yIHN0YXJ0aW5nIHRoZSBjb3B5aW5nIHBoYXNlLgorICAgICAgICAo
SlNDOjpHQ1RocmVhZFNoYXJlZERhdGE6OmRpZEZpbmlzaENvcHlpbmcpOiBEaXR0byBmb3IgZmlu
aXNoaW5nIGNvcHlpbmcuIAorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoR0NUaHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpT
Qzo6R0NUaHJlYWRTaGFyZWREYXRhOjpnZXROZXh0QmxvY2tzVG9Db3B5KTogQXRvbWljYWxseSBn
ZXRzIHRoZSBuZXh0IGNodW5rIG9mIHdvcmsgZm9yIGEgY29weWluZyB0aHJlYWQuCisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpIZWFw
Ojpjb3B5QmFja2luZ1N0b3Jlcyk6IFJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb3B5
aW5nIHBoYXNlLCBub3RpZnlpbmcgdGhlIGNvcHlpbmcgdGhyZWFkcywgCisgICAgICAgIGFuZCBk
b2luZyBhbnkgY29weWluZyB3b3JrIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKEpTQzo6SGVhcDo6
Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChIZWFwKToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvcHlGdW5jdG9yOjpDb3B5RnVuY3Rvcik6CisgICAg
ICAgIChDb3B5RnVuY3Rvcik6CisgICAgICAgIChKU0M6OkNvcHlGdW5jdG9yOjpvcGVyYXRvcigp
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHA6IENoYW5nZWQgdGhlIGlu
Y3JlbWVudGFsIHN3ZWVwZXIgdG8gaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgbGlzdCBvZiBNYXJr
ZWRCbG9ja3MgCisgICAgICAgIHRoYXQgbmVlZCBzd2VlcGluZywgc2luY2UgdGhpcyBub3cgcmVz
aWRlcyBpbiB0aGUgSGVhcCBzbyB0aGF0IGl0IGNhbiBiZSBlYXNpbHkgc2hhcmVkIGJ5IHRoZSBH
Q1RocmVhZHMuCisgICAgICAgIChKU0M6OkluY3JlbWVudGFsU3dlZXBlcjo6SW5jcmVtZW50YWxT
d2VlcGVyKToKKyAgICAgICAgKEpTQzo6SW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5n
KToKKyAgICAgICAgKiBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEluY3JlbWVudGFsU3dlZXBlcik6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRv
ci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXR1cCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQpOiBXZSBubyBsb25nZXIgZG8gYW55IGNvcHlp
bmctcmVsYXRlZCB3b3JrIGhlcmUuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIGhlYXAvU2xv
dFZpc2l0b3IuaDoKKyAgICAgICAgKFNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBoZWFwL1Nsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmNvcHlMYXRlcik6IE5vdGlmaWVzIHRoZSBDb3BpZWRCbG9jayB0aGF0IHRoZXJl
IGFyZSBzb21lIGxpdmUgYnl0ZXMgdGhhdCBtYXkgbmVlZCAKKyAgICAgICAgdG8gYmUgY29waWVk
LgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5Lmg6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoQnV0dGVyZmx5KToKKyAgICAgICAgKiBydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMu
aDoKKyAgICAgICAgKEpTQzo6QnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29s
bGVjdGlvbik6IFVzZXMgdGhlIG5ldyBDb3B5VmlzaXRvci4KKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAoTWV0aG9kVGFibGUpOiBBZGRlZCBuZXcgInZpcnR1YWwiIGZ1
bmN0aW9uIGNvcHlCYWNraW5nU3RvcmUgdG8gbWV0aG9kIHRhYmxlLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y29w
eUJhY2tpbmdTdG9yZSk6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdGhpbmcu
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkpOiBEb2VzIHRoZSBhY3R1YWwg
Y29weWluZyBvZiB0aGUgYnV0dGVyZmx5LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KTogQ2FsbHMgY29weUxhdGVyIGZvciB0aGUgYnV0dGVy
Zmx5LgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk6IAorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjptZXRob2RUYWJsZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5oZXJpdHMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOiBBZGRlZCB0d28gbmV3IGNvbnN0YW50cywg
bWluSGVhcFV0aWxpemF0aW9uIGFuZCBtaW5Db3BpZWRCbG9ja1V0aWxpemF0aW9uLCAKKyAgICAg
ICAgdG8gZ292ZXJuIHRoZSBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbiB3ZSBhbGxvdyBiZWZvcmUg
ZG9pbmcgY29weWluZy4KKyAgICAgICAgKEpTQyk6CisKIDIwMTItMTAtMTAgIEJhbGF6cyBLaWx2
YWR5ICA8a2lsdmFkeWJAaG9tZWppbm5pLmNvbT4KIAogICAgICAgICBSZWdpc3RlckZpbGUgdG8g
SlNTdGFjayByZW5hbWUgZml4IGZvciBhIHN0cnVjdCBtZW1iZXIuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsMTAg
QEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3Iu
Y3BwCiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAKKyAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAog
ICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cAorICAgIGhlYXAvR0NUaHJlYWQuY3BwCiAgICAgaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3Bw
CiAgICAgaGVhcC9IYW5kbGVTZXQuY3BwCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzA5
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjU2LDYgKzI1Niw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3B5VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRT
ZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oIFwKQEAg
LTI4MCw2ICsyODMsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0FsbG9jYXRvci5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwIFwKICAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NUaHJlYWQuY3BwIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1RocmVhZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIFwKICAgICBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgXAogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwIFwKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcCBcCisgICAgaGVhcC9Db3B5Vmlz
aXRvci5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKICAgICBoZWFwL0RG
R0NvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL1dlYWtTZXQuY3BwIFwKQEAgLTgyLDYgKzgzLDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvQmxv
Y2tBbGxvY2F0b3IuY3BwIFwKICAgICBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAgXAorICAg
IGhlYXAvR0NUaHJlYWQuY3BwIFwKICAgICBoZWFwL0hlYXAuY3BwIFwKICAgICBoZWFwL0hlYXBT
dGF0aXN0aWNzLmNwcCBcCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lv
biAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDYgKzExNiw3IEBAIEVYUE9SVFMKICAgICA/Y29udmVydExhdGluMVRvVVRGOEBVbmljb2RlQFdU
RkBAWUE/QVc0Q29udmVyc2lvblJlc3VsdEAxMkBQQVBCRVBCRVBBUEFEUEFEQFoKICAgICA/Y29u
dmVydFVURjE2VG9VVEY4QFVuaWNvZGVAV1RGQEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBB
UEJfV1BCX1dQQVBBRFBBRF9OQFoKICAgICA/Y29udmVydFVURjhUb1VURjE2QFVuaWNvZGVAV1RG
QEBZQT9BVzRDb252ZXJzaW9uUmVzdWx0QDEyQFBBUEJEUEJEUEFQQV9XUEFfV19OQFoKKyAgICA/
Y29weUJhY2tpbmdTdG9yZUBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEFBVkNvcHlWaXNp
dG9yQDJAQFoKICAgICA/Y3JlYXRlQEpTRnVuY3Rpb25ASlNDQEBTQVBBVjEyQFBBVkV4ZWNTdGF0
ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJASEFCVlN0cmluZ0BXVEZAQFA2SV9KMEBaVzRJbnRyaW5z
aWNAMkAzQFoKICAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRy
QFZKU0dsb2JhbERhdGFASlNDQEBAV1RGQEBXNFRocmVhZFN0YWNrVHlwZUAyQFc0SGVhcFR5cGVA
MkBAWgogICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBBQVZKU0dsb2JhbERhdGFAMkBB
QlZTdHJpbmdAV1RGQEBXNFJlZ0V4cEZsYWdzQDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAx
MzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjM1
NCw2ICsyMzU0LDE4IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGhlYXBcQ29weVZpc2l0b3IuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXENvcHlWaXNpdG9yLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcQ29w
eVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcREZHQ29kZUJsb2Nrcy5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgpAQCAtMjQ1MCw2ICsyNDYyLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcR0NUaHJlYWQuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEdDVGhyZWFk
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTcxMSw2ICs3MTEsMTEgQEAKIAkJQzIxMTIyRTIxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hh
cmVkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJFMDE1
REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMTYwRkU3MTVGN0U5NUUwMDk0
MkRGQyAvKiBTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90
VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlE
MTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLzsgfTsKKwkJQzIyMzlEMTgx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNDE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyMzlEMUExNjI2MkJERDAw
NUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi87
IH07CisJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTYxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggKi87IH07CiAJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBT
bG90VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovOyB9Owog
CQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
NDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi87IH07CkBAIC0xNDk0
LDYgKzE0OTksMTEgQEAKIAkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hh
cmVkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjExMjJERjE1
REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0
aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrU3RhY2tJbmxpbmVN
ZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMjM5RDEyMTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb3B5VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2Rz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9ySW5saW5lTWV0
aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjIzOUQxNTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR0NUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjIzOUQxNjE2
MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR0NUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyNTQ5NDIx
NUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcGllZFNwYWNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBTdGF0
aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjcsNiArMTgzNywx
MSBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmNwcCAqLywKKwkJCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCAqLywKKwkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3JJbmxpbmVNZXRob2RzLmggKi8sCisJCQkJQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8q
IEdDVGhyZWFkLmNwcCAqLywKKwkJCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJl
YWQuaCAqLywKIAkJCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
Y3BwICovLAogCQkJCUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5o
ICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8s
CkBAIC0yNTkwLDYgKzI2MDUsOCBAQAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBB
Uk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRC
MTU5IC8qIENvcGllZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERB
MDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIy
MzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRp
c3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBK
U0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5
NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLApAQCAtMjk4Miw2ICsyOTk5
LDcgQEAKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJh
eURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTkwLDYgKzM2MDgsOCBAQAogCQkJ
CTBGNTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzI0RDMxRTIxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAv
KiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjIzOUQxQTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDggQEAKICNpbmNsdWRlICJIZWFwQmxvY2suaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNWYWx1ZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQxLDYgKzQz
LDE1IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZShjb25zdCBQYWdl
QWxsb2NhdGlvbkFsaWduZWQmKTsKICAgICBzdGF0aWMgQ29waWVkQmxvY2sqIGNyZWF0ZU5vWmVy
b0ZpbGwoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJik7CiAKKyAgICBib29sIGlzUGlubmVk
KCk7CisKKyAgICB1bnNpZ25lZCBsaXZlQnl0ZXMoKTsKKyAgICB2b2lkIHJlcG9ydExpdmVCeXRl
cyh1bnNpZ25lZCk7CisgICAgdm9pZCBkaWRTdXJ2aXZlR0MoKTsKKyAgICBib29sIGRpZEV2YWN1
YXRlQnl0ZXModW5zaWduZWQpOworICAgIGJvb2wgc2hvdWxkRXZhY3VhdGUoKTsKKyAgICBib29s
IGNhbkJlUmVjeWNsZWQoKTsKKwogICAgIC8vIFRoZSBwYXlsb2FkIGlzIHRoZSByZWdpb24gb2Yg
dGhlIGJsb2NrIHRoYXQgaXMgdXNhYmxlIGZvciBhbGxvY2F0aW9ucy4KICAgICBjaGFyKiBwYXls
b2FkKCk7CiAgICAgY2hhciogcGF5bG9hZEVuZCgpOwpAQCAtNjYsNiArNzcsNyBAQCBwcml2YXRl
OgogCiAgICAgc2l6ZV90IG1fcmVtYWluaW5nOwogICAgIHVpbnRwdHJfdCBtX2lzUGlubmVkOwor
ICAgIHVuc2lnbmVkIG1fbGl2ZUJ5dGVzOwogfTsKIAogaW5saW5lIENvcGllZEJsb2NrKiBDb3Bp
ZWRCbG9jazo6Y3JlYXRlTm9aZXJvRmlsbChjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFs
bG9jYXRpb24pCkBAIC05NiwxMCArMTA4LDYwIEBAIGlubGluZSBDb3BpZWRCbG9jazo6Q29waWVk
QmxvY2soY29uc3QgUGEKICAgICA6IEhlYXBCbG9jazxDb3BpZWRCbG9jaz4oYWxsb2NhdGlvbikK
ICAgICAsIG1fcmVtYWluaW5nKHBheWxvYWRDYXBhY2l0eSgpKQogICAgICwgbV9pc1Bpbm5lZChm
YWxzZSkKKyAgICAsIG1fbGl2ZUJ5dGVzKDApCiB7CiAgICAgQVNTRVJUKGlzOEJ5dGVBbGlnbmVk
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcmVtYWluaW5nKSkpOwogfQogCitpbmxpbmUgdm9p
ZCBDb3BpZWRCbG9jazo6cmVwb3J0TGl2ZUJ5dGVzKHVuc2lnbmVkIGJ5dGVzKQoreworICAgIHVu
c2lnbmVkIG9sZFZhbHVlID0gMDsKKyAgICB1bnNpZ25lZCBuZXdWYWx1ZSA9IDA7CisgICAgZG8g
eworICAgICAgICBvbGRWYWx1ZSA9IG1fbGl2ZUJ5dGVzOworICAgICAgICBuZXdWYWx1ZSA9IG9s
ZFZhbHVlICsgYnl0ZXM7CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZt
X2xpdmVCeXRlcywgb2xkVmFsdWUsIG5ld1ZhbHVlKSk7Cit9CisKK2lubGluZSB2b2lkIENvcGll
ZEJsb2NrOjpkaWRTdXJ2aXZlR0MoKQoreworICAgIG1fbGl2ZUJ5dGVzID0gMDsKKyAgICBtX2lz
UGlubmVkID0gZmFsc2U7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpkaWRFdmFjdWF0
ZUJ5dGVzKHVuc2lnbmVkIGJ5dGVzKQoreworICAgIEFTU0VSVChtX2xpdmVCeXRlcyA+PSBieXRl
cyk7CisgICAgdW5zaWduZWQgb2xkVmFsdWUgPSAwOworICAgIHVuc2lnbmVkIG5ld1ZhbHVlID0g
MDsKKyAgICBkbyB7CisgICAgICAgIG9sZFZhbHVlID0gbV9saXZlQnl0ZXM7CisgICAgICAgIG5l
d1ZhbHVlID0gb2xkVmFsdWUgLSBieXRlczsKKyAgICB9IHdoaWxlICghV1RGOjp3ZWFrQ29tcGFy
ZUFuZFN3YXAoJm1fbGl2ZUJ5dGVzLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKTsKKyAgICBBU1NFUlQo
bV9saXZlQnl0ZXMgPCBvbGRWYWx1ZSk7CisgICAgcmV0dXJuICFuZXdWYWx1ZTsKK30KKworaW5s
aW5lIGJvb2wgQ29waWVkQmxvY2s6OmNhbkJlUmVjeWNsZWQoKQoreworICAgIHJldHVybiAhbV9s
aXZlQnl0ZXM7Cit9CisKK2lubGluZSBib29sIENvcGllZEJsb2NrOjpzaG91bGRFdmFjdWF0ZSgp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obV9saXZlQnl0ZXMpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihwYXlsb2FkQ2FwYWNpdHkoKSkgPD0gT3B0aW9uczo6bWluQ29waWVkQmxv
Y2tVdGlsaXphdGlvbigpOworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRCbG9jazo6aXNQaW5uZWQo
KQoreworICAgIHJldHVybiBtX2lzUGlubmVkOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29waWVk
QmxvY2s6OmxpdmVCeXRlcygpCit7CisgICAgcmV0dXJuIG1fbGl2ZUJ5dGVzOworfQorCiBpbmxp
bmUgY2hhciogQ29waWVkQmxvY2s6OnBheWxvYWQoKQogewogICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih0aGlzKSArICgoc2l6ZW9mKENvcGllZEJsb2NrKSArIDcpICYgfjcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNp
b24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJPcHRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNiw2ICszNyw3IEBAIENv
cGllZFNwYWNlOjpDb3BpZWRTcGFjZShIZWFwKiBoZWFwKQogICAgICwgbV90b1NwYWNlKDApCiAg
ICAgLCBtX2Zyb21TcGFjZSgwKQogICAgICwgbV9pbkNvcHlpbmdQaGFzZShmYWxzZSkKKyAgICAs
IG1fc2hvdWxkRG9Db3B5UGhhc2UoZmFsc2UpCiAgICAgLCBtX251bWJlck9mTG9hbmVkQmxvY2tz
KDApCiB7CiAgICAgbV90b1NwYWNlTG9jay5Jbml0KCk7CkBAIC0xNTIsMTUgKzE1NCwxOCBAQCBD
aGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqIGJs
b2NrKQordm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9jayhDb3BpZWRCbG9jayogYmxv
Y2ssIENvcGllZEJsb2NrKiogZXhjaGFuZ2UpCiB7CiAgICAgQVNTRVJUKG1faW5Db3B5aW5nUGhh
c2UpOwogICAgIAorICAgIGlmIChleGNoYW5nZSkKKyAgICAgICAgKmV4Y2hhbmdlID0gYWxsb2Nh
dGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpOworCiAgICAgaWYgKCFibG9jaykKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFibG9jay0+ZGF0YVNpemUoKSkgewotICAgICAgICByZWN5Y2xlQmxv
Y2soYmxvY2spOworICAgICAgICByZWN5Y2xlQm9ycm93ZWRCbG9jayhibG9jayk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE4Miw2ICsxODcsMzggQEAgdm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUZpbGxpbmdCbG9jayhDb3BpZQogICAgIH0KIH0KIAordm9pZCBDb3BpZWRTcGFjZTo6c3Rh
cnRlZENvcHlpbmcoKQoreworICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsK
KworICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJl
bnRCbG9jaygpOworCisgICAgQ29waWVkQmxvY2sqIG5leHQgPSAwOworICAgIHNpemVfdCB0b3Rh
bExpdmVCeXRlcyA9IDA7CisgICAgc2l6ZV90IHRvdGFsVXNhYmxlQnl0ZXMgPSAwOworICAgIGZv
ciAoQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPmhlYWQoKTsgYmxvY2s7IGJsb2Nr
ID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKKyAgICAgICAgaWYgKCFi
bG9jay0+aXNQaW5uZWQoKSAmJiBibG9jay0+Y2FuQmVSZWN5Y2xlZCgpKSB7CisgICAgICAgICAg
ICByZWN5Y2xlRXZhY3VhdGVkQmxvY2soYmxvY2spOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgdG90YWxMaXZlQnl0ZXMgKz0gYmxvY2stPmxpdmVCeXRlcygpOwor
ICAgICAgICB0b3RhbFVzYWJsZUJ5dGVzICs9IGJsb2NrLT5wYXlsb2FkQ2FwYWNpdHkoKTsKKyAg
ICB9CisKKyAgICBkb3VibGUgbWFya2VkU3BhY2VCeXRlcyA9IG1faGVhcC0+b2JqZWN0U3BhY2Uo
KS5jYXBhY2l0eSgpOworICAgIGRvdWJsZSB0b3RhbEZyYWdtZW50YXRpb24gPSAoKGRvdWJsZSl0
b3RhbExpdmVCeXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpIC8gKChkb3VibGUpdG90YWxVc2FibGVC
eXRlcyArIG1hcmtlZFNwYWNlQnl0ZXMpOworICAgIG1fc2hvdWxkRG9Db3B5UGhhc2UgPSB0b3Rh
bEZyYWdtZW50YXRpb24gPD0gT3B0aW9uczo6bWluSGVhcFV0aWxpemF0aW9uKCk7CisgICAgaWYg
KCFtX3Nob3VsZERvQ29weVBoYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9z
aG91bGREb0NvcHlQaGFzZSk7CisgICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKKyAgICBB
U1NFUlQoIW1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MpOworICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0
cnVlOworfQorCiB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpCiB7CiAgICAgewpAQCAt
MTkwLDEyICsyMjcsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQogICAgICAg
ICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwog
ICAgIH0KIAotICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBBU1NFUlQobV9pbkNv
cHlpbmdQaGFzZSA9PSBtX3Nob3VsZERvQ29weVBoYXNlKTsKICAgICBtX2luQ29weWluZ1BoYXNl
ID0gZmFsc2U7CisKICAgICB3aGlsZSAoIW1fZnJvbVNwYWNlLT5pc0VtcHR5KCkpIHsKICAgICAg
ICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbV9mcm9tU3BhY2UtPnJlbW92ZUhlYWQoKTsKLSAgICAg
ICAgaWYgKGJsb2NrLT5tX2lzUGlubmVkKSB7Ci0gICAgICAgICAgICBibG9jay0+bV9pc1Bpbm5l
ZCA9IGZhbHNlOworICAgICAgICBpZiAoYmxvY2stPmlzUGlubmVkKCkgfHwgIW1fc2hvdWxkRG9D
b3B5UGhhc2UpIHsKKyAgICAgICAgICAgIGJsb2NrLT5kaWRTdXJ2aXZlR0MoKTsKICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgYmxvY2sgdG8gdGhlIGJsb2NrU2V0IGJlY2F1c2UgaXQg
d2FzIG5ldmVyIHJlbW92ZWQuCiAgICAgICAgICAgICBBU1NFUlQobV9ibG9ja1NldC5jb250YWlu
cyhibG9jaykpOwogICAgICAgICAgICAgbV9ibG9ja0ZpbHRlci5hZGQocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihibG9jaykpOwpAQCAtMjEwLDEzICsyNDgsMTMgQEAgdm9pZCBDb3BpZWRTcGFjZTo6
ZG9uZUNvcHlpbmcoKQogICAgIENvcGllZEJsb2NrKiBjdXJyID0gbV9vdmVyc2l6ZUJsb2Nrcy5o
ZWFkKCk7CiAgICAgd2hpbGUgKGN1cnIpIHsKICAgICAgICAgQ29waWVkQmxvY2sqIG5leHQgPSBj
dXJyLT5uZXh0KCk7Ci0gICAgICAgIGlmICghY3Vyci0+bV9pc1Bpbm5lZCkgeworICAgICAgICBp
ZiAoIWN1cnItPmlzUGlubmVkKCkpIHsKICAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVt
b3ZlKGN1cnIpOwogICAgICAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoY3Vycik7CiAgICAgICAg
ICAgICBDb3BpZWRCbG9jazo6ZGVzdHJveShjdXJyKS5kZWFsbG9jYXRlKCk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBtX2Jsb2NrRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJp
dHM+KGN1cnIpKTsKLSAgICAgICAgICAgIGN1cnItPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGN1cnItPmRpZFN1cnZpdmVHQygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBu
ZXh0OwogICAgIH0KQEAgLTIyNSw2ICsyNjMsOCBAQCB2b2lkIENvcGllZFNwYWNlOjpkb25lQ29w
eWluZygpCiAgICAgICAgIGFsbG9jYXRlQmxvY2soKTsKICAgICBlbHNlCiAgICAgICAgIG1fYWxs
b2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3RvU3BhY2UtPmhlYWQoKSk7CisKKyAgICBtX3Nob3Vs
ZERvQ29weVBoYXNlID0gZmFsc2U7CiB9CiAKIHNpemVfdCBDb3BpZWRTcGFjZTo6c2l6ZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHJldmlzaW9uIDEz
MDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIENvcGllZEJsb2Nr
OwogCiBjbGFzcyBDb3BpZWRTcGFjZSB7CisgICAgZnJpZW5kIGNsYXNzIENvcHlWaXNpdG9yOwog
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICBmcmllbmQgY2xhc3MgSklUOwogcHVi
bGljOgpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CiAK
ICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKKyAgICBib29sIHNob3VsZERv
Q29weVBoYXNlKCkgeyByZXR1cm4gbV9zaG91bGREb0NvcHlQaGFzZTsgfQogCiAgICAgc3RhdGlj
IENvcGllZEJsb2NrKiBibG9ja0Zvcih2b2lkKik7CiAKQEAgLTg4LDggKzkwLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGFsbG9jYXRlQmxvY2soKTsKICAgICBDb3BpZWRCbG9jayogYWxsb2NhdGVC
bG9ja0ZvckNvcHlpbmdQaGFzZSgpOwogCi0gICAgdm9pZCBkb25lRmlsbGluZ0Jsb2NrKENvcGll
ZEJsb2NrKik7Ci0gICAgdm9pZCByZWN5Y2xlQmxvY2soQ29waWVkQmxvY2sqKTsKKyAgICB2b2lk
IGRvbmVGaWxsaW5nQmxvY2soQ29waWVkQmxvY2sqLCBDb3BpZWRCbG9jayoqKTsKKyAgICB2b2lk
IHJlY3ljbGVFdmFjdWF0ZWRCbG9jayhDb3BpZWRCbG9jayopOworICAgIHZvaWQgcmVjeWNsZUJv
cnJvd2VkQmxvY2soQ29waWVkQmxvY2sqKTsKIAogICAgIEhlYXAqIG1faGVhcDsKIApAQCAtMTA4
LDYgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgRG91Ymx5TGlua2VkTGlzdDxDb3BpZWRCbG9jaz4g
bV9vdmVyc2l6ZUJsb2NrczsKICAgIAogICAgIGJvb2wgbV9pbkNvcHlpbmdQaGFzZTsKKyAgICBi
b29sIG1fc2hvdWxkRG9Db3B5UGhhc2U7CiAKICAgICBNdXRleCBtX2xvYW5lZEJsb2Nrc0xvY2s7
IAogICAgIFRocmVhZENvbmRpdGlvbiBtX2xvYW5lZEJsb2Nrc0NvbmRpdGlvbjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTkgKzkzLDIw
IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNlOjpwaW5JZk5lY2Vzc2FyeSgKICAgICAgICAgcGlu
KGJsb2NrKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5aW5nKCkK
K2lubGluZSB2b2lkIENvcGllZFNwYWNlOjpyZWN5Y2xlRXZhY3VhdGVkQmxvY2soQ29waWVkQmxv
Y2sqIGJsb2NrKQogewotICAgIHN0ZDo6c3dhcChtX2Zyb21TcGFjZSwgbV90b1NwYWNlKTsKLQot
ICAgIG1fYmxvY2tGaWx0ZXIucmVzZXQoKTsKLSAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpOwotCi0gICAgQVNTRVJUKCFtX2luQ29weWluZ1BoYXNlKTsKLSAgICBBU1NFUlQoIW1f
bnVtYmVyT2ZMb2FuZWRCbG9ja3MpOwotICAgIG1faW5Db3B5aW5nUGhhc2UgPSB0cnVlOworICAg
IEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKGJsb2NrLT5jYW5CZVJlY3ljbGVkKCkpOworICAg
IEFTU0VSVCghYmxvY2stPm1faXNQaW5uZWQpOworICAgIHsKKyAgICAgICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja2VyKCZtX3RvU3BhY2VMb2NrKTsKKyAgICAgICAgbV9ibG9ja1NldC5yZW1vdmUoYmxv
Y2spOworICAgICAgICBtX2Zyb21TcGFjZS0+cmVtb3ZlKGJsb2NrKTsKKyAgICB9CisgICAgbV9o
ZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoQ29waWVkQmxvY2s6OmRlc3Ryb3koYmxv
Y2spKTsKIH0KIAotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJlY3ljbGVCbG9jayhDb3BpZWRC
bG9jayogYmxvY2spCitpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJvcnJvd2VkQmxv
Y2soQ29waWVkQmxvY2sqIGJsb2NrKQogewogICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5k
ZWFsbG9jYXRlKENvcGllZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VmlzaXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29weVZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgor
I2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworQ29weVZpc2l0b3I6OkNvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYg
c2hhcmVkKQorICAgIDogbV9zaGFyZWQoc2hhcmVkKQoreworfQorCit2b2lkIENvcHlWaXNpdG9y
Ojpjb3B5RnJvbVNoYXJlZCgpCit7CisgICAgR0NDb3B5UGhhc2VGdW5jdG9yIGZ1bmN0b3IoKnRo
aXMpOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBibG9ja3NUb0NvcHkgPSBtX3NoYXJlZC5t
X2Jsb2Nrc1RvQ29weTsKKyAgICBzaXplX3Qgc3RhcnRJbmRleCwgZW5kSW5kZXg7CisKKyAgICBt
X3NoYXJlZC5nZXROZXh0QmxvY2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB3
aGlsZSAoc3RhcnRJbmRleCA8IGVuZEluZGV4KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykKKyAgICAgICAgICAgIGJsb2Nrc1RvQ29weVtp
XS0+Zm9yRWFjaExpdmVDZWxsKGZ1bmN0b3IpOworICAgICAgICBtX3NoYXJlZC5nZXROZXh0Qmxv
Y2tzVG9Db3B5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICB9CisgICAgQVNTRVJUKHN0YXJ0
SW5kZXggPT0gZW5kSW5kZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVZpc2l0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvcHlWaXNpdG9yX2gKKyNkZWZpbmUgQ29w
eVZpc2l0b3JfaAorCisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKKworY2xhc3MgQ29weVZpc2l0b3IgeworcHVi
bGljOgorICAgIENvcHlWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYpOworCisgICAgdm9pZCBj
b3B5RnJvbVNoYXJlZCgpOworCisgICAgdm9pZCBzdGFydENvcHlpbmcoKTsKKyAgICB2b2lkIGRv
bmVDb3B5aW5nKCk7CisKKyAgICAvLyBMb3ctbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3By
aWF0ZSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcworICAgIC8v
IGFyZSBkaXNjb250aWd1b3VzIG9yIGlmIHRoZSBvYmplY3Qgb2NjdXJzIGZyZXF1ZW50bHkgZW5v
dWdoIHRoYXQgeW91IG5lZWQgdG8gZm9jdXMgb24KKyAgICAvLyBwZXJmb3JtYW5jZS4gVXNlIHRo
aXMgd2l0aCBjYXJlIGFzIGl0IGlzIGVhc3kgdG8gc2hvb3QgeW91cnNlbGYgaW4gdGhlIGZvb3Qu
CisgICAgYm9vbCBjaGVja0lmU2hvdWxkQ29weSh2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkKiBh
bGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7CisgICAgdm9pZCBkaWRDb3B5KHZvaWQqLCBzaXplX3Qp
OworCitwcml2YXRlOgorICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCk7CisK
KyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworICAgIENvcGllZEFsbG9jYXRvciBt
X2NvcGllZEFsbG9jYXRvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5saW5lTWV0aG9kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorI2RlZmlu
ZSBDb3B5VmlzaXRvcklubGluZU1ldGhvZHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisj
aW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIK
KyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NDb3B5UGhhc2VGdW5jdG9yIDogcHVibGljIE1h
cmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CitwdWJsaWM6CisgICAgR0NDb3B5UGhhc2VGdW5jdG9y
KENvcHlWaXNpdG9yJiB2aXNpdG9yKQorICAgICAgICA6IG1fdmlzaXRvcih2aXNpdG9yKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0
aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuY29weUJhY2tp
bmdTdG9yZSA9PSBKU09iamVjdDo6Y29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIEpTT2JqZWN0
Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIG1fdmlzaXRvcik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIENvcHlWaXNpdG9yJiBtX3Zpc2l0b3I7Cit9OworCitpbmxpbmUgYm9vbCBDb3B5VmlzaXRv
cjo6Y2hlY2tJZlNob3VsZENvcHkodm9pZCogb2xkUHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAg
aWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgeworICAgICAgICBBU1NFUlQoQ29w
aWVkU3BhY2U6Om92ZXJzaXplQmxvY2tGb3Iob2xkUHRyKS0+aXNQaW5uZWQoKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoQ29waWVkU3BhY2U6OmJsb2NrRm9yKG9s
ZFB0ciktPmlzUGlubmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgdm9pZCogQ29weVZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6
ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCBy
ZWFsaXplIHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgorICAgIGlmIChMSUtFTFkobV9jb3Bp
ZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAKKyAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7
CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30gICAgICAgCisKK2lu
bGluZSB2b2lkKiBDb3B5VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVz
KQoreworICAgIENvcGllZEJsb2NrKiBuZXdCbG9jayA9IDA7CisgICAgbV9zaGFyZWQubV9jb3Bp
ZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpLCAmbmV3QmxvY2spOworICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9j
ayhuZXdCbG9jayk7CisKKyAgICB2b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNrZWRCb29sZWFu
IGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3Vs
dCk7CisgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lu
bGluZSB2b2lkIENvcHlWaXNpdG9yOjpzdGFydENvcHlpbmcoKQoreworICAgIEFTU0VSVCghbV9j
b3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKKyAgICBDb3BpZWRCbG9jayogYmxvY2sgPSAwOwor
ICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxv
Y2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSwgJmJsb2NrKTsKKyAgICBtX2NvcGllZEFsbG9jYXRv
ci5zZXRDdXJyZW50QmxvY2soYmxvY2spOworfQorCitpbmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6
ZG9uZUNvcHlpbmcoKQoreworICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGlu
Z0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCksIDApOworfQorCitp
bmxpbmUgdm9pZCBDb3B5VmlzaXRvcjo6ZGlkQ29weSh2b2lkKiBwdHIsIHNpemVfdCBieXRlcykK
K3sKKyAgICBBU1NFUlQoIUNvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSk7CisgICAgQ29w
aWVkQmxvY2sqIGJsb2NrID0gQ29waWVkU3BhY2U6OmJsb2NrRm9yKHB0cik7CisgICAgQVNTRVJU
KCFibG9jay0+aXNQaW5uZWQoKSk7CisKKyAgICBpZiAoYmxvY2stPmRpZEV2YWN1YXRlQnl0ZXMo
Ynl0ZXMpKQorICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5yZWN5Y2xlRXZhY3VhdGVk
QmxvY2soYmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
Q1RocmVhZC5oIgorCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKKyNpbmNsdWRlICJDb3B5Vmlz
aXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0dDVGhyZWFkOjpH
Q1RocmVhZChHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZCwgU2xvdFZpc2l0b3IqIHNsb3RWaXNp
dG9yLCBDb3B5VmlzaXRvciogY29weVZpc2l0b3IsIHNpemVfdCBpbmRleCkKKyAgICA6IG1fdGhy
ZWFkSUQoMCkKKyAgICAsIG1fc2hhcmVkKHNoYXJlZCkKKyAgICAsIG1fc2xvdFZpc2l0b3IoV1RG
OjphZG9wdFB0cihzbG90VmlzaXRvcikpCisgICAgLCBtX2NvcHlWaXNpdG9yKFdURjo6YWRvcHRQ
dHIoY29weVZpc2l0b3IpKQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30KKworVGhyZWFkSWRl
bnRpZmllciBHQ1RocmVhZDo6dGhyZWFkSUQoKQoreworICAgIEFTU0VSVChtX3RocmVhZElEKTsK
KyAgICByZXR1cm4gbV90aHJlYWRJRDsKK30KKwordm9pZCBHQ1RocmVhZDo6aW5pdGlhbGl6ZVRo
cmVhZElEKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCit7CisgICAgQVNTRVJUKCFtX3RocmVh
ZElEKTsKKyAgICBtX3RocmVhZElEID0gdGhyZWFkSUQ7Cit9CisKK1Nsb3RWaXNpdG9yKiBHQ1Ro
cmVhZDo6c2xvdFZpc2l0b3IoKQoreworICAgIEFTU0VSVChtX3Nsb3RWaXNpdG9yKTsKKyAgICBy
ZXR1cm4gbV9zbG90VmlzaXRvci5nZXQoKTsKK30KKworQ29weVZpc2l0b3IqIEdDVGhyZWFkOjpj
b3B5VmlzaXRvcigpCit7CisgICAgQVNTRVJUKG1fY29weVZpc2l0b3IpOworICAgIHJldHVybiBt
X2NvcHlWaXNpdG9yLmdldCgpOworfQorCitHQ1BoYXNlIEdDVGhyZWFkOjp3YWl0Rm9yTmV4dFBo
YXNlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQubV9waGFzZUxvY2spOwor
ICAgIHdoaWxlIChtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKQorICAgICAgICBt
X3NoYXJlZC5tX3BoYXNlQ29uZGl0aW9uLndhaXQobV9zaGFyZWQubV9waGFzZUxvY2spOworICAg
IHJldHVybiBtX3NoYXJlZC5tX2N1cnJlbnRQaGFzZTsKK30KKwordm9pZCBHQ1RocmVhZDo6Z2NU
aHJlYWRNYWluKCkKK3sKKyAgICBHQ1BoYXNlIGN1cnJlbnRQaGFzZTsKKyNpZiBFTkFCTEUoUEFS
QUxMRUxfR0MpCisgICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKCk7CisjZW5kaWYKKyAgICAvLyBX
YWl0IGZvciB0aGUgbWFpbiB0aHJlYWQgdG8gZmluaXNoIGNyZWF0aW5nIHVzLgorICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOworICAgIH0K
KyAgICB7CisgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigqbV9zbG90VmlzaXRv
cik7CisgICAgICAgIHdoaWxlICgoY3VycmVudFBoYXNlID0gd2FpdEZvck5leHRQaGFzZSgpKSAh
PSBFeGl0KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQaGFzZSkgeworICAgICAgICAg
ICAgY2FzZSBNYXJrOgorICAgICAgICAgICAgICAgIG1fc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENvcHk6CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0
byBjYWxsIHN0YXJ0Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9uIHRoZSBt
YWluIHRocmVhZC4KKyAgICAgICAgICAgICAgICBtX2NvcHlWaXNpdG9yLT5jb3B5RnJvbVNoYXJl
ZCgpOworICAgICAgICAgICAgICAgIG1fY29weVZpc2l0b3ItPmRvbmVDb3B5aW5nKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vUGhhc2U6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEV4aXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGRhdGEpCit7Cisg
ICAgR0NUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19jYXN0PEdDVGhyZWFkKj4oZGF0YSk7CisgICAg
dGhyZWFkLT5nY1RocmVhZE1haW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHQ1RocmVhZF9oCisjZGVmaW5lIEdDVGhyZWFkX2gK
KworI2luY2x1ZGUgPEdDVGhyZWFkU2hhcmVkRGF0YS5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb3B5VmlzaXRvcjsKK2NsYXNzIEdDVGhyZWFkU2hh
cmVkRGF0YTsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBHQ1RocmVhZCB7CitwdWJsaWM6
CisgICAgR0NUaHJlYWQoR0NUaHJlYWRTaGFyZWREYXRhJiwgU2xvdFZpc2l0b3IqLCBDb3B5Vmlz
aXRvciosIHNpemVfdCk7CisKKyAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IoKTsKKyAgICBD
b3B5VmlzaXRvciogY29weVZpc2l0b3IoKTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElE
KCk7CisgICAgdm9pZCBpbml0aWFsaXplVGhyZWFkSUQoVGhyZWFkSWRlbnRpZmllcik7CisKKyAg
ICBzdGF0aWMgdm9pZCBnY1RocmVhZFN0YXJ0RnVuYyh2b2lkKik7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBnY1RocmVhZE1haW4oKTsKKyAgICBHQ1BoYXNlIHdhaXRGb3JOZXh0UGhhc2UoKTsKKwor
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEm
IG1fc2hhcmVkOworICAgIE93blB0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKKyAgICBP
d25QdHI8Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7CisgICAgc2l6ZV90IG1faW5kZXg7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDEzMDk1
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDQ1ICsyNiwzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogCisjaW5jbHVkZSAiQ29weVZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJHQ1Ro
cmVhZC5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5o
IgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVN
ZXRob2RzLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiB2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6cmVz
ZXRDaGlsZHJlbigpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWFya2luZ1Ro
cmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2tbaV0tPnJlc2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2djVGhyZWFk
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnJl
c2V0KCk7CiB9CiAKIHNpemVfdCBHQ1RocmVhZFNoYXJlZERhdGE6OmNoaWxkVmlzaXRDb3VudCgp
CiB7ICAgICAgIAogICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsraSkKLSAg
ICAgICAgcmVzdWx0ICs9IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnZpc2l0Q291bnQo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+dmlzaXRD
b3VudCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KLXZvaWQgR0NUaHJlYWRTaGFyZWREYXRh
OjptYXJraW5nVGhyZWFkTWFpbihTbG90VmlzaXRvciogc2xvdFZpc2l0b3IpCi17Ci0gICAgV1RG
OjpyZWdpc3RlckdDVGhyZWFkKCk7Ci0gICAgewotICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKLSAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7Ci0gICAgfQotICAgIGRlbGV0ZSBzbG90Vmlz
aXRvcjsKLX0KLQotdm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6Om1hcmtpbmdUaHJlYWRTdGFydEZ1
bmModm9pZCogbXlWaXNpdG9yKQoteyAgICAgICAgICAgICAgIAotICAgIFNsb3RWaXNpdG9yKiBz
bG90VmlzaXRvciA9IHN0YXRpY19jYXN0PFNsb3RWaXNpdG9yKj4obXlWaXNpdG9yKTsKLQotICAg
IHNsb3RWaXNpdG9yLT5zaGFyZWREYXRhKCkubWFya2luZ1RocmVhZE1haW4oc2xvdFZpc2l0b3Ip
OwotfQogI2VuZGlmCiAKIEdDVGhyZWFkU2hhcmVkRGF0YTo6R0NUaHJlYWRTaGFyZWREYXRhKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKQEAgLTc0LDEzICs1OSwyMiBAQCBHQ1RocmVhZFNoYXJl
ZERhdGE6OkdDVGhyZWFkU2hhcmVkRGF0YShKCiAgICAgLCBtX3NoYXJlZE1hcmtTdGFjayhtX3Nl
Z21lbnRBbGxvY2F0b3IpCiAgICAgLCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKDAp
CiAgICAgLCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFsc2UpCisgICAgLCBtX2Jsb2Nr
c1RvQ29weShnbG9iYWxEYXRhLT5oZWFwLm1fYmxvY2tTbmFwc2hvdCkKKyAgICAsIG1fY29weUlu
ZGV4KDApCisgICAgLCBtX2N1cnJlbnRQaGFzZShOb1BoYXNlKQogeworICAgIG1fY29weUxvY2su
SW5pdCgpOwogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBHcmFiIHRoZSBsb2NrIHNv
IHRoZSBuZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRo
ZXkgc3RhcnQgcnVubmluZy4KKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tYXJraW5nTG9jayk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJz
KCk7ICsraSkgewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZp
c2l0b3IoKnRoaXMpOwotICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChz
bG90VmlzaXRvcik7Ci0gICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVh
ZChtYXJraW5nVGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpN
YXJraW5nIikpOwotICAgICAgICBBU1NFUlQobV9tYXJraW5nVGhyZWFkcy5sYXN0KCkpOworICAg
ICAgICBDb3B5VmlzaXRvciogY29weVZpc2l0b3IgPSBuZXcgQ29weVZpc2l0b3IoKnRoaXMpOwor
ICAgICAgICBzaXplX3QgaW5kZXggPSBtX2djVGhyZWFkcy5zaXplKCk7CisgICAgICAgIEdDVGhy
ZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRoaXMsIHNsb3RWaXNpdG9yLCBjb3B5Vmlz
aXRvciwgaW5kZXgpOworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRl
VGhyZWFkKEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlw
dENvcmU6Ok1hcmtpbmciKTsKKyAgICAgICAgbmV3VGhyZWFkLT5pbml0aWFsaXplVGhyZWFkSUQo
dGhyZWFkSUQpOworICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKICAgICB9
CiAjZW5kaWYKIH0KQEAgLTkwLDE5ICs4NCwyMiBAQCBHQ1RocmVhZFNoYXJlZERhdGE6On5HQ1Ro
cmVhZFNoYXJlZERhdGEoCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKSAgICAKICAgICAvLyBEZXN0
cm95IG91ciBtYXJraW5nIHRocmVhZHMuCiAgICAgewotICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9tYXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIG1hcmtpbmdMb2NrZXIobV9t
YXJraW5nTG9jayk7CisgICAgICAgIE11dGV4TG9ja2VyIHBoYXNlTG9ja2VyKG1fcGhhc2VMb2Nr
KTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOwogICAgICAgICBt
X3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOwotICAgICAgICBtX21hcmtpbmdDb25k
aXRpb24uYnJvYWRjYXN0KCk7CisgICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKKyAgICAg
ICAgbV9waGFzZUNvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fZ2NUaHJlYWRzW2ldLT50aHJlYWRJRCgpKTsKKyAgICAgICAgZGVs
ZXRlIG1fZ2NUaHJlYWRzW2ldOwogICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9tYXJraW5nVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBs
ZXRpb24obV9tYXJraW5nVGhyZWFkc1tpXSk7CiAjZW5kaWYKIH0KICAgICAKIHZvaWQgR0NUaHJl
YWRTaGFyZWREYXRhOjpyZXNldCgpCiB7Ci0gICAgQVNTRVJUKCFtX251bWJlck9mQWN0aXZlUGFy
YWxsZWxNYXJrZXJzKTsKLSAgICBBU1NFUlQoIW1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCk7
CiAgICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7CiAgICAgCiAjaWYgRU5B
QkxFKFBBUkFMTEVMX0dDKQpAQCAtMTE5LDQgKzExNiw1MyBAQCB2b2lkIEdDVGhyZWFkU2hhcmVk
RGF0YTo6cmVzZXQoKQogICAgIH0KIH0KIAordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6OmRpZFN0
YXJ0TWFya2luZygpCit7CisgICAgTXV0ZXhMb2NrZXIgbWFya2luZ0xvY2tlcihtX21hcmtpbmdM
b2NrKTsKKyAgICBNdXRleExvY2tlciBwaGFzZUxvY2tlcihtX3BoYXNlTG9jayk7CisgICAgQVNT
RVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fY3VycmVudFBoYXNlID0gTWFy
azsKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKKyAgICBtX3BoYXNl
Q29uZGl0aW9uLmJyb2FkY2FzdCgpOworfQorCit2b2lkIEdDVGhyZWFkU2hhcmVkRGF0YTo6ZGlk
RmluaXNoTWFya2luZygpCit7CisgICAgTXV0ZXhMb2NrZXIgbWFya2luZ0xvY2tlcihtX21hcmtp
bmdMb2NrKTsKKyAgICBNdXRleExvY2tlciBwaGFzZUxvY2tlcihtX3BoYXNlTG9jayk7CisgICAg
QVNTRVJUKG1fY3VycmVudFBoYXNlID09IE1hcmspOworICAgIG1fY3VycmVudFBoYXNlID0gTm9Q
aGFzZTsKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOworICAgIG1fbWFy
a2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKK30KKwordm9pZCBHQ1RocmVhZFNoYXJlZERhdGE6
OmRpZFN0YXJ0Q29weWluZygpCit7CisgICAgeworICAgICAgICBTcGluTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fY29weUxvY2spOworICAgICAgICBtX2Jsb2Nrc1RvQ29weSA9IG1fZ2xvYmFsRGF0YS0+
aGVhcC5tX2Jsb2NrU25hcHNob3Q7CisgICAgICAgIG1fY29weUluZGV4ID0gMDsKKyAgICB9CisK
KyAgICAvLyBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCB3ZSBhdm9pZCBhIHJhY2UgY29uZGl0aW9u
IHdoZXJlIHRoZSBtYWluIHRocmVhZCBjYW4gCisgICAgLy8gYmxvdyB0aHJvdWdoIGFsbCBvZiB0
aGUgY29weWluZyB3b3JrIGJlZm9yZSB0aGUgR0NUaHJlYWRzIGZ1bGx5IHdha2UgdXAuIAorICAg
IC8vIFRoZSBHQ1RocmVhZHMgdGhlbiByZXF1ZXN0IGEgYmxvY2sgZnJvbSB0aGUgQ29waWVkU3Bh
Y2Ugd2hlbiB0aGUgY29weWluZyBwaGFzZSAKKyAgICAvLyBoYXMgY29tcGxldGVkLCB3aGljaCBp
c24ndCBhbGxvd2VkLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6
ZSgpOyBpKyspCisgICAgICAgIG1fZ2NUaHJlYWRzW2ldLT5jb3B5VmlzaXRvcigpLT5zdGFydENv
cHlpbmcoKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BoYXNlTG9jayk7CisgICAgQVNT
RVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOworICAgIG1fY3VycmVudFBoYXNlID0gQ29w
eTsKKyAgICBtX3BoYXNlQ29uZGl0aW9uLmJyb2FkY2FzdCgpOyAKK30KKwordm9pZCBHQ1RocmVh
ZFNoYXJlZERhdGE6OmRpZEZpbmlzaENvcHlpbmcoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3BoYXNlTG9jayk7CisgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IENvcHkpOworICAg
IG1fY3VycmVudFBoYXNlID0gTm9QaGFzZTsKKyAgICBtX3BoYXNlQ29uZGl0aW9uLmJyb2FkY2Fz
dCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTYgKzI4LDI3IEBACiAKICNpbmNsdWRlICJMaXN0YWJsZUhhbmRsZXIuaCIK
ICNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1
ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVENTcGlu
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBHQ1RocmVhZDsKIGNsYXNzIEpTR2xvYmFs
RGF0YTsKIGNsYXNzIENvcGllZFNwYWNlOworY2xhc3MgQ29weVZpc2l0b3I7CisKK2VudW0gR0NQ
aGFzZSB7CisgICAgTm9QaGFzZSwKKyAgICBNYXJrLAorICAgIENvcHksCisgICAgRXhpdAorfTsK
IAogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhIHsKIHB1YmxpYzoKQEAgLTQ2LDYgKzU3LDExIEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlc2V0KCk7CiAKKyAgICB2b2lkIGRpZFN0YXJ0TWFy
a2luZygpOworICAgIHZvaWQgZGlkRmluaXNoTWFya2luZygpOworICAgIHZvaWQgZGlkU3RhcnRD
b3B5aW5nKCk7CisgICAgdm9pZCBkaWRGaW5pc2hDb3B5aW5nKCk7CisKICNpZiBFTkFCTEUoUEFS
QUxMRUxfR0MpCiAgICAgdm9pZCByZXNldENoaWxkcmVuKCk7CiAgICAgc2l6ZV90IGNoaWxkVmlz
aXRDb3VudCgpOwpAQCAtNTMsMTIgKzY5LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgR0NUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFNsb3RW
aXNpdG9yOworICAgIGZyaWVuZCBjbGFzcyBDb3B5VmlzaXRvcjsKIAotI2lmIEVOQUJMRShQQVJB
TExFTF9HQykKLSAgICB2b2lkIG1hcmtpbmdUaHJlYWRNYWluKFNsb3RWaXNpdG9yKik7Ci0gICAg
c3RhdGljIHZvaWQgbWFya2luZ1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBoZWFwKTsKLSNlbmRpZgor
ICAgIHZvaWQgZ2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmLCBzaXplX3QmKTsKIAogICAgIEpT
R2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIENvcGllZFNwYWNlKiBtX2NvcGllZFNwYWNl
OwpAQCAtNjcsOSArODIsOCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgbV9zaG91bGRIYXNo
Q29uc3Q7CiAKLSAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV9tYXJraW5nVGhyZWFkczsK
LSAgICBWZWN0b3I8U2xvdFZpc2l0b3IqPiBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrOwotICAg
IAorICAgIFZlY3RvcjxHQ1RocmVhZCo+IG1fZ2NUaHJlYWRzOworCiAgICAgTXV0ZXggbV9tYXJr
aW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uOwogICAgIE1h
cmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOwpAQCAtNzksMTAgKzkzLDI3IEBAIHByaXZh
dGU6CiAgICAgTXV0ZXggbV9vcGFxdWVSb290c0xvY2s7CiAgICAgSGFzaFNldDx2b2lkKj4gbV9v
cGFxdWVSb290czsKIAorICAgIFNwaW5Mb2NrIG1fY29weUxvY2s7CisgICAgVmVjdG9yPE1hcmtl
ZEJsb2NrKj4mIG1fYmxvY2tzVG9Db3B5OworICAgIHNpemVfdCBtX2NvcHlJbmRleDsKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOworCisgICAgTXV0
ZXggbV9waGFzZUxvY2s7CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRpb247Cisg
ICAgR0NQaGFzZSBtX2N1cnJlbnRQaGFzZTsKKwogICAgIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwogICAgIExp
c3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzOwogfTsKIAoraW5saW5lIHZvaWQgR0NUaHJlYWRTaGFyZWREYXRhOjpnZXRO
ZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYgc3RhcnQsIHNpemVfdCYgZW5kKQoreworICAgIFNwaW5M
b2NrSG9sZGVyIGxvY2tlcigmbV9jb3B5TG9jayk7CisgICAgc3RhcnQgPSBtX2NvcHlJbmRleDsK
KyAgICBlbmQgPSBzdGQ6Om1pbihtX2Jsb2Nrc1RvQ29weS5zaXplKCksIG1fY29weUluZGV4ICsg
c19ibG9ja0ZyYWdtZW50TGVuZ3RoKTsKKyAgICBtX2NvcHlJbmRleCA9IGVuZDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTEgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCisjaW5jbHVkZSAiQ29waWVkU3BhY2Uu
aCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaCIKKyNpbmNsdWRlICJDb3B5
VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIK
ICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5o
IgpAQCAtMjUyLDYgKzI1Myw3IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBIZWEKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2hhcmVkRGF0YShn
bG9iYWxEYXRhKQogICAgICwgbV9zbG90VmlzaXRvcihtX3NoYXJlZERhdGEpCisgICAgLCBtX2Nv
cHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KGdsb2JhbERhdGEpCiAg
ICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQpAQCAtNDY0LDcgKzQ2Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdD
KQogICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsKICAgICB9CiAKLSAgICBtX3N0
b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOworICAgIG1fc2hhcmVkRGF0YS5kaWRTdGFydE1h
cmtpbmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAg
dmlzaXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3Iodmlz
aXRvcik7CkBAIC01ODksNyArNTkxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxs
R0MpCiAKICAgICBHQ0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3Vu
dCgpKTsKIAotICAgIHZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICBtX3NoYXJlZERhdGEuZGlk
RmluaXNoTWFya2luZygpOwogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQogICAgIHNp
emVfdCB2aXNpdENvdW50ID0gdmlzaXRvci52aXNpdENvdW50KCk7CiAjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQpAQCAtNjAzLDYgKzYwNSwxOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1
bGxHQykKICAgICBtX3NoYXJlZERhdGEucmVzZXRDaGlsZHJlbigpOwogI2VuZGlmCiAgICAgbV9z
aGFyZWREYXRhLnJlc2V0KCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29weUJhY2tpbmdTdG9yZXMoKQor
eworICAgIG1fc3RvcmFnZVNwYWNlLnN0YXJ0ZWRDb3B5aW5nKCk7CisgICAgaWYgKG1fc3RvcmFn
ZVNwYWNlLnNob3VsZERvQ29weVBoYXNlKCkpIHsKKyAgICAgICAgbV9zaGFyZWREYXRhLmRpZFN0
YXJ0Q29weWluZygpOworICAgICAgICBDb3B5VmlzaXRvciYgdmlzaXRvciA9IG1fY29weVZpc2l0
b3I7CisgICAgICAgIHZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAgIHZpc2l0b3IuY29w
eUZyb21TaGFyZWQoKTsKKyAgICAgICAgdmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICBt
X3NoYXJlZERhdGEuZGlkRmluaXNoQ29weWluZygpOworICAgIH0gCiAgICAgbV9zdG9yYWdlU3Bh
Y2UuZG9uZUNvcHlpbmcoKTsKIH0KIApAQCAtNzM0LDYgKzc0OSwxNCBAQCB2b2lkIEhlYXA6OmNv
bGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VE
KCk7CiAKICAgICB7CisgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFj
ZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOworICAgICAgICBDb3B5RnVuY3RvciBmdW5jdG9yKG1f
YmxvY2tTbmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaEJsb2NrKGZ1bmN0
b3IpOworICAgIH0KKworICAgIGNvcHlCYWNraW5nU3RvcmVzKCk7CisKKyAgICB7CiAgICAgICAg
IEdDUEhBU0UoRmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycyk7CiAgICAgICAgIGZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKICAgICB9CkBAIC03NTUsNyArNzc4LDcgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgICAgICBtX29iamVj
dFNwYWNlLnNocmluaygpOwogICAgIH0KIAotICAgIG1fc3dlZXBlci0+c3RhcnRTd2VlcGluZyht
X29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpKTsKKyAgICBtX3N3ZWVwZXItPnN0YXJ0U3dlZXBp
bmcobV9ibG9ja1NuYXBzaG90KTsKICAgICBtX2J5dGVzQWJhbmRvbmVkID0gMDsKIAogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiAr
MjMsNyBAQAogI2RlZmluZSBIZWFwX2gKIAogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5j
bHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0x
ODIsNyArMTgzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRBbGxvY2F0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENvcGllZFNwYWNlOworICAgICAgICBmcmllbmQgY2xhc3MgQ29weVZpc2l0
b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIEluY3JlbWVudGFsU3dlZXBlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBTdGF0aXN0
aWNzOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBmcmllbmQgdm9pZCogYWxsb2NhdGVD
ZWxsKEhlYXAmKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZnJpZW5kIHZvaWQqIGFs
bG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKQEAgLTIwNCw2ICsyMDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBtYXJrUm9vdHMoYm9vbCBmdWxsR0MpOwogICAgICAgICB2b2lk
IG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1h
cmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgY29weUJh
Y2tpbmdTdG9yZXMoKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKQEAgLTIzOSw2ICsyNDMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBtX3NoYXJl
ZERhdGE7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgICAgIENvcHlW
aXNpdG9yIG1fY29weVZpc2l0b3I7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0Owog
ICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtMjU2LDYgKzI2MSwyMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIEdDQWN0aXZpdHlDYWxsYmFjayogbV9h
Y3Rpdml0eUNhbGxiYWNrOwogICAgICAgICBJbmNyZW1lbnRhbFN3ZWVwZXIqIG1fc3dlZXBlcjsK
KyAgICAgICAgVmVjdG9yPE1hcmtlZEJsb2NrKj4gbV9ibG9ja1NuYXBzaG90OworICAgIH07CisK
KyAgICBzdHJ1Y3QgQ29weUZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9y
IHsKKyAgICAgICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCisg
ICAgICAgICAgICA6IG1faW5kZXgoMCkgCisgICAgICAgICAgICAsIG1fYmxvY2tzKGJsb2NrcykK
KyAgICAgICAgeworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShNYXJr
ZWRCbG9jayogYmxvY2spIHsgbV9ibG9ja3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9CisgICAgCisg
ICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICBWZWN0b3I8TWFya2VkQmxvY2sqPiYgbV9i
bG9ja3M7CiAgICAgfTsKIAogICAgIGlubGluZSBib29sIEhlYXA6OnNob3VsZENvbGxlY3QoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVw
ZXIuY3BwCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
bmNyZW1lbnRhbFN3ZWVwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgc3dlZXBUaW1lTXVsdGlwbGllciAKIEluY3JlbWVudGFsU3dlZXBl
cjo6SW5jcmVtZW50YWxTd2VlcGVyKEhlYXAqIGhlYXAsIENGUnVuTG9vcFJlZiBydW5Mb29wKQog
ICAgIDogSGVhcFRpbWVyKGhlYXAtPmdsb2JhbERhdGEoKSwgcnVuTG9vcCkKICAgICAsIG1fY3Vy
cmVudEJsb2NrVG9Td2VlcEluZGV4KDApCisgICAgLCBtX2Jsb2Nrc1RvU3dlZXAoaGVhcC0+bV9i
bG9ja1NuYXBzaG90KQogewogfQogCkBAIC0xMjcsMTEgKzEyOCw5IEBAIHZvaWQgSW5jcmVtZW50
YWxTd2VlcGVyOjpzd2VlcE5leHRCbG9jaygKICAgICB9CiB9CiAKLXZvaWQgSW5jcmVtZW50YWxT
d2VlcGVyOjpzdGFydFN3ZWVwaW5nKGNvbnN0IEhhc2hTZXQ8TWFya2VkQmxvY2sqPiYgYmxvY2tT
bmFwc2hvdCkKK3ZvaWQgSW5jcmVtZW50YWxTd2VlcGVyOjpzdGFydFN3ZWVwaW5nKFZlY3RvcjxN
YXJrZWRCbG9jayo+JiBibG9ja1NuYXBzaG90KQogewotICAgIG1fYmxvY2tzVG9Td2VlcC5yZXNp
emUoYmxvY2tTbmFwc2hvdC5zaXplKCkpOwotICAgIENvcHlGdW5jdG9yIGZ1bmN0b3IobV9ibG9j
a3NUb1N3ZWVwKTsKLSAgICBtX2dsb2JhbERhdGEtPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNo
QmxvY2soZnVuY3Rvcik7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2tTbmFwc2hvdDsKICAg
ICBtX2N1cnJlbnRCbG9ja1RvU3dlZXBJbmRleCA9IDA7CiAgICAgc2NoZWR1bGVUaW1lcigpOwog
fQpAQCAtMTYwLDcgKzE1OSw3IEBAIEluY3JlbWVudGFsU3dlZXBlciogSW5jcmVtZW50YWxTd2Vl
cGVyOjoKICAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsU3dlZXBlcihoZWFwLT5nbG9iYWxEYXRh
KCkpOwogfQogCi12b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3RhcnRTd2VlcGluZyhjb25zdCBI
YXNoU2V0PE1hcmtlZEJsb2NrKj4mKQordm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dl
ZXBpbmcoVmVjdG9yPE1hcmtlZEJsb2NrKj4mKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAkocmV2aXNpb24gMTMwOTU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDIzICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SGVhcDsKIAotc3RydWN0IENvcHlGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVu
Y3RvciB7Ci0gICAgQ29weUZ1bmN0b3IoVmVjdG9yPE1hcmtlZEJsb2NrKj4mIGJsb2NrcykgCi0g
ICAgICAgIDogbV9pbmRleCgwKSAKLSAgICAgICAgLCBtX2Jsb2NrcyhibG9ja3MpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgbV9ibG9j
a3NbbV9pbmRleCsrXSA9IGJsb2NrOyB9Ci0KLSAgICBzaXplX3QgbV9pbmRleDsKLSAgICBWZWN0
b3I8TWFya2VkQmxvY2sqPiYgbV9ibG9ja3M7Ci19OwotCiBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVw
ZXIgOiBwdWJsaWMgSGVhcFRpbWVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgSW5jcmVtZW50YWxT
d2VlcGVyKiBjcmVhdGUoSGVhcCopOwotICAgIHZvaWQgc3RhcnRTd2VlcGluZyhjb25zdCBIYXNo
U2V0PE1hcmtlZEJsb2NrKj4mIGJsb2NrU25hcHNob3QpOworICAgIHZvaWQgc3RhcnRTd2VlcGlu
ZyhWZWN0b3I8TWFya2VkQmxvY2sqPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkb1dvcmsoKTsKICAg
ICB2b2lkIHN3ZWVwTmV4dEJsb2NrKCk7CiAgICAgdm9pZCB3aWxsRmluaXNoU3dlZXBpbmcoKTsK
QEAgLTcxLDcgKzU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbmNlbFRpbWVyKCk7CiAgICAg
CiAgICAgdW5zaWduZWQgbV9jdXJyZW50QmxvY2tUb1N3ZWVwSW5kZXg7Ci0gICAgVmVjdG9yPE1h
cmtlZEJsb2NrKj4gbV9ibG9ja3NUb1N3ZWVwOworICAgIFZlY3RvcjxNYXJrZWRCbG9jayo+JiBt
X2Jsb2Nrc1RvU3dlZXA7CiAjZWxzZQogICAgIAogICAgIEluY3JlbWVudGFsU3dlZXBlcihKU0ds
b2JhbERhdGEqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJD
b25zZXJ2YXRpdmVSb290cy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAi
Q29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiR0NUaHJlYWQuaCIKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNs
dWRlICJKU0dsb2JhbERhdGEuaCIKQEAgLTM1LDggKzM2LDggQEAgdm9pZCBTbG90VmlzaXRvcjo6
c2V0dXAoKQogICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9nbG9i
YWxEYXRhLT5oYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KCk7CiAgICAgbV9zaG91bGRI
YXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKICNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fbWFya2luZ1Ro
cmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ1Ro
cmVhZHNNYXJrU3RhY2tbaV0tPm1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9zaG91bGRI
YXNoQ29uc3Q7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hhcmVkLm1fZ2NUaHJl
YWRzLnNpemUoKTsgKytpKQorICAgICAgICBtX3NoYXJlZC5tX2djVGhyZWFkc1tpXS0+c2xvdFZp
c2l0b3IoKS0+bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsK
ICNlbmRpZgogfQogCkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0g
dG8gZ2l2ZSB0aGVpciBwcml2YXRlIENvcGllZEJsb2NrcyBiYWNrCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhl
bSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdD
b25kaXRpb24uYnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTIwMCwxNyArMjAxLDEyIEBAIHZvaWQgU2xvdFZpc2l0
b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVk
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdD
b25kaXRpb24uYnJvYWRjYXN0KCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
d2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQu
bV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3No
YXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29w
eWluZygpOworICAgICAgICAgICAgICAgIHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFj
ay5pc0VtcHR5KCkgJiYgIW1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAg
ICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLndhaXQobV9zaGFy
ZWQubV9tYXJraW5nTG9jayk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIElzIHRoZSBWTSBleGl0aW5nPyBJZiBzbywgZXhpdCB0aGlzIHRo
cmVhZC4KLSAgICAgICAgICAgICAgICBpZiAobV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmVDb3B5aW5nKCk7CisgICAgICAgICAg
ICAgICAgLy8gSXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8gSWYgc28sIHJldHVybiBmcm9tIHRo
aXMgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgaWYgKG1fc2hhcmVkLm1fcGFyYWxsZWxNYXJr
ZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXplX3QgaWRs
ZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CkBAIC0yMzYsMzAgKzIzMiw2IEBAIHZvaWQg
U2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIo
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKCkKLXsKLSAgICBBU1NFUlQo
IW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci19Ci0KLXZvaWQqIFNsb3RWaXNpdG9yOjph
bGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgbV9zaGFyZWQubV9jb3Bp
ZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpKTsKLSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRDdXJyZW50QmxvY2sobV9zaGFyZWQu
bV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlpbmdQaGFzZSgpKTsKLQotICAgIHZv
aWQqIHJlc3VsdCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4gZGlkU3VjY2VlZCA9IG1fY29waWVk
QWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0KTsKLSAgICBBU1NFUlQoZGlkU3Vj
Y2VlZCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9j
YXRlTmV3U3BhY2VPclBpbih2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBpZiAoIWNo
ZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHB0ciwgYnl0ZXMpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdGVOZXdTcGFjZShieXRlcyk7Ci19Ci0KIEFM
V0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6dHJ5SGFzaENvbnN0TG9jaygpCiB7CiAjaWYgRU5B
QkxFKFBBUkFMTEVMX0dDKQpAQCAtMzM1LDM2ICszMDcsNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OmludGVybmFsCiAgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmNvcHlBbmRBcHBlbmQodm9pZCoqIHB0ciwgc2l6ZV90IGJ5dGVzLCBK
U1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB2b2lkKiBvbGRQdHIgPSAq
cHRyOwotICAgIHZvaWQqIG5ld1B0ciA9IGFsbG9jYXRlTmV3U3BhY2VPclBpbihvbGRQdHIsIGJ5
dGVzKTsKLSAgICBpZiAobmV3UHRyKSB7Ci0gICAgICAgIHNpemVfdCBqc1ZhbHVlc09mZnNldCA9
IHN0YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmFsdWVzKSAtIHN0
YXRpY19jYXN0PGNoYXIqPihvbGRQdHIpKTsKLQotICAgICAgICBKU1ZhbHVlKiBuZXdWYWx1ZXMg
PSByZWludGVycHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1B0
cikgKyBqc1ZhbHVlc09mZnNldCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSB2YWx1ZXNbaV07Ci0g
ICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghdmFsdWUp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCgm
bmV3VmFsdWVzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShuZXdQdHIsIG9sZFB0
ciwganNWYWx1ZXNPZmZzZXQpOwotICAgICAgICAqcHRyID0gbmV3UHRyOwotICAgIH0gZWxzZQot
ICAgICAgICBhcHBlbmQodmFsdWVzLCBsZW5ndGgpOwotfQotICAgIAotdm9pZCBTbG90VmlzaXRv
cjo6ZG9uZUNvcHlpbmcoKQotewotICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmls
bGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwotfQotCiB2
b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewogICAgIGZvciAoV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhh
cnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxMzA5
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIFNsb3RWaXNpdG9yX2gKICNkZWZpbmUg
U2xvdFZpc2l0b3JfaAogCi0jaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJIYW5k
bGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1ldGhvZHMuaCIKIApAQCAtODAs
MjEgKzc5LDggQEAgcHVibGljOgogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAg
ICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAKLSAgICB2b2lkIHN0
YXJ0Q29weWluZygpOworICAgIHZvaWQgY29weUxhdGVyKHZvaWQqLCBzaXplX3QpOwogICAgIAot
ICAgIC8vIEhpZ2gtbGV2ZWwgQVBJIGZvciBjb3B5aW5nLCBhcHByb3ByaWF0ZSBmb3IgY2FzZXMg
d2hlcmUgdGhlIG9iamVjdCdzIGhlYXAgcmVmZXJlbmNlcwotICAgIC8vIGZhbGwgaW50byBhIGNv
bnRpZ3VvdXMgcmVnaW9uIG9mIHRoZSBzdG9yYWdlIGNodW5rIGFuZCBpZiB0aGUgb2JqZWN0IGZv
ciB3aGljaCB5b3UncmUKLSAgICAvLyBkb2luZyBjb3B5aW5nIGRvZXMgbm90IG9jY3VyIGZyZXF1
ZW50bHkuCi0gICAgdm9pZCBjb3B5QW5kQXBwZW5kKHZvaWQqKiwgc2l6ZV90LCBKU1ZhbHVlKiwg
dW5zaWduZWQpOwotICAgIAotICAgIC8vIExvdy1sZXZlbCBBUEkgZm9yIGNvcHlpbmcsIGFwcHJv
cHJpYXRlIGZvciBjYXNlcyB3aGVyZSB0aGUgb2JqZWN0J3MgaGVhcCByZWZlcmVuY2VzCi0gICAg
Ly8gYXJlIGRpc2NvbnRpZ3VvdXMgb3IgaWYgdGhlIG9iamVjdCBvY2N1cnMgZnJlcXVlbnRseSBl
bm91Z2ggdGhhdCB5b3UgbmVlZCB0byBmb2N1cyBvbgotICAgIC8vIHBlcmZvcm1hbmNlLiBVc2Ug
dGhpcyB3aXRoIGNhcmUgYXMgaXQgaXMgZWFzeSB0byBzaG9vdCB5b3Vyc2VsZiBpbiB0aGUgZm9v
dC4KLSAgICBib29sIGNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHZvaWQqIG9sZFB0
ciwgc2l6ZV90KTsKLSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCk7Ci0gICAgCi0g
ICAgdm9pZCBkb25lQ29weWluZygpOyAKLSAgICAgICAgCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQ
X1BST0ZJTElORykKICAgICBWVGFibGVTcGVjdHJ1bSBtX3Zpc2l0ZWRUeXBlQ291bnRzOwogI2Vu
ZGlmCkBAIC0xMjUsOSArMTExLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9v
dHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgp
OwogICAgIAotICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VPclBpbih2b2lkKiwgc2l6ZV90KTsK
LSAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QpOwotCiAgICAgdm9pZCBkb25h
dGVLbm93blBhcmFsbGVsKCk7CiAKICAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNrOwpAQCAtMTQ2
LDggKzEyOSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwogI2Vu
ZGlmCiAKLSAgICBDb3BpZWRBbGxvY2F0b3IgbV9jb3BpZWRBbGxvY2F0b3I7Ci0KIHB1YmxpYzoK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDMwICsxMzYsNiBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VP
cGFxdWVSb290CiAgICAgbWVyZ2VPcGFxdWVSb290cygpOwogfQogICAgIAotQUxXQVlTX0lOTElO
RSBib29sIFNsb3RWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSh2b2lk
KiBvbGRQdHIsIHNpemVfdCBieXRlcykKLXsKLSAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNp
emUoYnl0ZXMpKSB7Ci0gICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBpbihDb3BpZWRT
cGFjZTo6b3ZlcnNpemVCbG9ja0ZvcihvbGRQdHIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5pc1Bpbm5lZChvbGRQdHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFM
V0FZU19JTkxJTkUgdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90IGJ5
dGVzKQotewotICAgIHZvaWQqIHJlc3VsdCA9IDA7IC8vIENvbXBpbGVycyBkb24ndCByZWFsaXpl
IHRoYXQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkLgotICAgIGlmIChMSUtFTFkobV9jb3BpZWRBbGxv
Y2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAKLSAgICByZXN1bHQgPSBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhieXRlcyk7Ci0gICAg
QVNTRVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgICAgCi0KIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1v
ZGUpOwpAQCAtMTc1LDYgKzE1MSwyMyBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRl
QW5kRHJhaW4oCiAgICAgZHJhaW4oKTsKIH0KIAoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmNv
cHlMYXRlcih2b2lkKiBwdHIsIHNpemVfdCBieXRlcykKK3sKKyAgICBpZiAoQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoYnl0ZXMpKSB7CisgICAgICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPnBp
bihDb3BpZWRTcGFjZTo6b3ZlcnNpemVCbG9ja0ZvcihwdHIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIENvcGllZEJsb2NrKiBibG9jayA9IENvcGllZFNwYWNlOjpibG9ja0Zvcihw
dHIpOworICAgIGlmIChibG9jay0+aXNQaW5uZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YmxvY2stPnJlcG9ydExpdmVCeXRlcyhieXRlcyk7CisKKyAgICBpZiAoIWJsb2NrLT5zaG91bGRF
dmFjdWF0ZSgpKQorICAgICAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5waW4oYmxvY2spOwor
fQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTbG90VmlzaXRvcklubGlu
ZU1ldGhvZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5
LmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1
dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSlNHbG9iYWxEYXRhOwotY2xhc3MgU2xvdFZpc2l0b3I7CitjbGFzcyBDb3B5
VmlzaXRvcjsKIHN0cnVjdCBBcnJheVN0b3JhZ2U7CiAKIGNsYXNzIEJ1dHRlcmZseSB7CkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZShKU0ds
b2JhbERhdGEmLCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBi
b29sIGhhc0luZGV4aW5nSGVhZGVyLCBjb25zdCBJbmRleGluZ0hlYWRlciYsIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZVVu
aW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKFNsb3RWaXNpdG9yJiwgc2l6ZV90IHByZUNhcGFj
aXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKyAgICBzdGF0aWMgQnV0dGVyZmx5KiBj
cmVhdGVVbmluaXRpYWxpemVkRHVyaW5nQ29sbGVjdGlvbihDb3B5VmlzaXRvciYsIHNpemVfdCBw
cmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgSW5kZXhp
bmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20o
dGhpcyk7IH0KICAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25z
dCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZU1ldGhvZHMu
aAkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0
dGVyZmx5SW5saW5lTWV0aG9kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAj
aW5jbHVkZSAiQXJyYXlTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5LmgiCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU5LDcgKzU5LDcgQEAg
aW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoSlNHbAogICAgIHJldHVybiBjcmVh
dGUoZ2xvYmFsRGF0YSwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBoYXNJbmRl
eGluZ0hlYWRlcihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSwgSW5kZXhpbmdIZWFkZXIoKSwg
MCk7CiB9CiAKLWlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZER1cmluZ0NvbGxlY3Rpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIHNpemVfdCBwcmVDYXBhY2l0
eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIHNpemVf
dCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKK2lubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbml0aWFsaXplZER1cmluZ0NvbGxlY3Rpb24oQ29weVZpc2l0b3ImIHZpc2l0
b3IsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFz
SW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykKIHsKICAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNlKAogICAgICAgICB2aXNpdG9yLmFsbG9jYXRl
TmV3U3BhY2UodG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRl
eGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKSwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxMzA5NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiB2b2lkICgq
VmlzaXRDaGlsZHJlbkZ1bmN0aW9uUHRyKShKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgICAg
ICBWaXNpdENoaWxkcmVuRnVuY3Rpb25QdHIgdmlzaXRDaGlsZHJlbjsKIAorICAgICAgICB0eXBl
ZGVmIHZvaWQgKCpDb3B5QmFja2luZ1N0b3JlRnVuY3Rpb25QdHIpKEpTQ2VsbCosIENvcHlWaXNp
dG9yJik7CisgICAgICAgIENvcHlCYWNraW5nU3RvcmVGdW5jdGlvblB0ciBjb3B5QmFja2luZ1N0
b3JlOworCiAgICAgICAgIHR5cGVkZWYgQ2FsbFR5cGUgKCpHZXRDYWxsRGF0YUZ1bmN0aW9uUHRy
KShKU0NlbGwqLCBDYWxsRGF0YSYpOwogICAgICAgICBHZXRDYWxsRGF0YUZ1bmN0aW9uUHRyIGdl
dENhbGxEYXRhOwogCkBAIC0xMTYsNiArMTE5LDcgQEAgc3RydWN0IE1lbWJlckNoZWNrIyNtZW1i
ZXIgeyBcCiAjZGVmaW5lIENSRUFURV9NRVRIT0RfVEFCTEUoQ2xhc3NOYW1lKSB7IFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6ZGVzdHJveSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2aXNpdENoaWxk
cmVuLCBcCisgICAgICAgICZDbGFzc05hbWU6OmNvcHlCYWNraW5nU3RvcmUsIFwKICAgICAgICAg
JkNsYXNzTmFtZTo6Z2V0Q2FsbERhdGEsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0Q29uc3Ry
dWN0RGF0YSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpwdXQsIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTMwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsMTAgQEAgdm9pZCBKU0NlbGw6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIGNlbGwt
PkpTQ2VsbDo6fkpTQ2VsbCgpOwogfQogCit2b2lkIEpTQ2VsbDo6Y29weUJhY2tpbmdTdG9yZShK
U0NlbGwqLCBDb3B5VmlzaXRvciYpCit7Cit9CisKIGJvb2wgSlNDZWxsOjpnZXRTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBTdHJpbmcmIHN0cmluZ1ZhbHVlKSBjb25zdAogewogICAgIGlmICghaXNT
dHJpbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZp
c2lvbiAxMzA5NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAg
IGNsYXNzIENvcHlWaXNpdG9yOwogICAgIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OwogICAg
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
QEAgLTEwMCw2ICsxMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29u
c3Q7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJik7CiAKICAgICAgICAgLy8gT2JqZWN0IG9wZXJh
dGlvbnMsIHdpdGggdGhlIHRvT2JqZWN0IG9wZXJhdGlvbiBpbmNsdWRlZC4KICAgICAgICAgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOCBAQAogCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lTWV0aG9kcy5oIgogI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgi
CisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiRGF0ZVBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKQEAgLTk0LDcgKzk2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNz
UHJvcGVydHlOYW1lcwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IHNpemVfdCBzdG9yYWdlU2l6ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Y29weUJ1
dHRlcmZseShDb3B5VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVf
dCBzdG9yYWdlU2l6ZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKICAgICAKQEAgLTExMSwy
NiArMTEzLDIwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAg
ICAgICAgcHJlQ2FwYWNpdHkgPSAwOwogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyA9IDA7CiAgICAgfQotICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRv
dGFsU2l6ZSgKLSAgICAgICAgcHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgaWYgKHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UoCi0gICAgICAgICAgICBidXR0ZXJmbHkt
PmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpKSB7
CisgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNh
cGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpOworICAgIGlmICh2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KGJ1dHRl
cmZseS0+YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRl
cykpIHsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWREdXJpbmdDb2xsZWN0aW9uKHZpc2l0b3IsIHByZUNhcGFjaXR5LCBwcm9w
ZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMpOwogICAgICAgICAKLSAgICAgICAgLy8gTWFyayBhbmQgY29weSB0aGUgcHJvcGVydGllcy4K
KyAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydGllcy4KICAgICAgICAgUHJvcGVydHlTdG9yYWdl
IGN1cnJlbnRUYXJnZXQgPSBuZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOwogICAgICAg
ICBQcm9wZXJ0eVN0b3JhZ2UgY3VycmVudFNvdXJjZSA9IGJ1dHRlcmZseS0+cHJvcGVydHlTdG9y
YWdlKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKC0tY3VycmVudFNvdXJjZSktPmdldCgp
OwotICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRWYWx1ZSgmdmFsdWUpOwotICAgICAgICAgICAgKC0tY3VycmVudFRhcmdldCkt
PnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodmFsdWUpOwotICAgICAgICB9CisgICAgICAgIGZvciAo
c2l6ZV90IGNvdW50ID0gc3RvcmFnZVNpemU7IGNvdW50LS07KQorICAgICAgICAgICAgKC0tY3Vy
cmVudFRhcmdldCktPnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoKC0tY3VycmVudFNvdXJjZSktPmdl
dCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikp
IHsKICAgICAgICAgICAgICpuZXdCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkgPSAqYnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNYXJr
IGFuZCBjb3B5IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgICAgIC8vIENvcHkg
dGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgogICAgICAgICAgICAgCiAgICAgICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIGN1cnJlbnRUYXJnZXQ7CiAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIGN1cnJlbnRTb3VyY2U7CkBAIC0xNTAsOCArMTQ2LDYgQEAgQUxXQVlTX0lO
TElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgICAgICAgICAgICAgIGN1cnJlbnRU
YXJnZXQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKICAgICAgICAg
ICAgICAgICBjdXJyZW50U291cmNlID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0
b3I7CiAgICAgICAgICAgICAgICAgY291bnQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
MTYyLDMyICsxNTYsNTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRl
cgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3
aGlsZSAoY291bnQtLSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSAoY3VycmVu
dFNvdXJjZSsrKS0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJnZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcih2YWx1
ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAg
ICAgICAgICAoY3VycmVudFRhcmdldCsrKS0+c2V0V2l0aG91dFdyaXRlQmFycmllcigoY3VycmVu
dFNvdXJjZSsrKS0+Z2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2J1dHRl
cmZseSA9IG5ld0J1dHRlcmZseTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KGJ1dHRlcmZseS0+
YmFzZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0eSksIGNhcGFjaXR5SW5CeXRlcyk7Cisg
ICAgfSAKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShT
bG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdl
U2l6ZSkKK3sKKyAgICBBU1NFUlQoYnV0dGVyZmx5KTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOworICAgIAorICAgIHNpemVfdCBwcm9wZXJ0eUNh
cGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBwcmVD
YXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciA9IEpTQzo6aGFzSW5kZXhpbmdIZWFkZXIoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgewor
ICAgICAgICBwcmVDYXBhY2l0eSA9IGJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2Fw
YWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBi
dXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0
cnVjdHVyZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4K
LSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBNYXJr
IHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgc3dpdGNoIChzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
LCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgICAg
ICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorICAgIHNpemVfdCBjYXBhY2l0eUlu
Qnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBhY2l0
eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKKworICAg
IC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CisgICAg
dmlzaXRvci5jb3B5TGF0ZXIoYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNh
cGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBNYXJrIHRoZSBhcnJheSBp
ZiBhcHByb3ByaWF0ZS4KKyAgICBzd2l0Y2ggKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpIHsK
KyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICB2aXNpdG9y
LmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKSwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJz
ZU1hcCkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApAQCAtMjExLDYgKzIyMywxNiBAQCB2b2lkIEpTT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAjZW5kaWYKIH0KIAordm9pZCBKU09iamVjdDo6Y29w
eUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICAKKyAgICBC
dXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgIGlmIChi
dXR0ZXJmbHkpCisgICAgICAgIHRoaXNPYmplY3QtPmNvcHlCdXR0ZXJmbHkodmlzaXRvciwgYnV0
dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKK30KKwog
dm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDEzMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICAgICAgCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29w
eUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAKQEAg
LTYzNCw2ICs2MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZXNldEluaGVy
aXRvcklEKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCB2aXNpdEJ1dHRl
cmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAg
ICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBz
dG9yYWdlU2l6ZSk7CiAKICAgICAgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhl
IG9iamVjdCBpcyBpbiBhIG1vZGUgd2hlcmUgaXQgaGFzIGFycmF5CiAgICAgICAgIC8vIHN0b3Jh
Z2UuIFRoaXMgd2lsbCBhc3NlcnQgb3RoZXJ3aXNlLgpAQCAtOTU2LDE0ICs5NTgsMTQgQEAgaW5s
aW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogICAgIHJldHVybiBzdHJ1Y3R1
cmUoKS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CiAKLWlubGluZSBib29sIEpTQ2VsbDo6aW5oZXJp
dHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAoraW5saW5lIGNvbnN0IE1ldGhvZFRhYmxl
KiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY2xhc3NJbmZvKCkt
PmlzU3ViQ2xhc3NPZihpbmZvKTsKKyAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZTsKIH0KIAotaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkg
Y29uc3QKK2lubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZv
KSBjb25zdAogewotICAgIHJldHVybiAmY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlOworICAgIHJl
dHVybiBjbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGluZm8pOwogfQogCiAvLyB0aGlzIG1ldGhv
ZCBpcyBoZXJlIHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlNDZWxsOjpp
bmhlcml0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMTMwOTU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
dih1bnNpZ25lZCwgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZSwgcGFnZVNpemUoKSkgXAogICAgIHYo
dW5zaWduZWQsIG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoNykp
IFwKICAgICB2KHVuc2lnbmVkLCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQsIDEwMDApIFwKKyAg
ICB2KGRvdWJsZSwgbWluSGVhcFV0aWxpemF0aW9uLCAwLjgpIFwKKyAgICB2KGRvdWJsZSwgbWlu
Q29waWVkQmxvY2tVdGlsaXphdGlvbiwgMC45KSBcCiAgICAgXAogICAgIHYoYm9vbCwgZm9yY2VX
ZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBmb3JjZWRXZWFrUmFuZG9t
U2VlZCwgMCkgXAo=
</data>
<flag name="review"
          id="181219"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>