<?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>90731</bug_id>
          
          <creation_ts>2012-07-07 14:34:49 -0700</creation_ts>
          <short_desc>It should be possible to jettison JIT stub routines even if they are currently running</short_desc>
          <delta_ts>2012-07-19 13:15:19 -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>All</rep_platform>
          <op_sys>All</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>90852</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>paroga</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>664418</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-07 14:34:49 -0700</bug_when>
    <thetext>Currently it&apos;s not possible to delete JIT stub routines except during garbage collection.  Even then, this barely works because the JIT stub routine that we want to kill may be currently on the stack.  Right now we make it work by ensuring that (a) only the GC can decide to kill stub routines and (b) it will only kill them if the pointers they rely on are dead.  But it&apos;s not clear that this is quite correct, since we may choose to kill a list of stubs if any stub in the list has stale pointers.  So if a stub is currently running, and its pointers are live because of some other black magic we pulled, then it may still get killed by GC because it belongs to a list of stubs where some other stub is proved dead.

This needs to all be rationalized:

1) We don&apos;t want to be killing stubs prematurely.  That&apos;s probably bad.

2) We want to be able to kill stubs even if they are running.  The best way to do this is to jettison-to-GC like we do for reoptimization: we can mark the stub routine as having liveness that is predicated on it being on the stack *right now*.  As soon as the GC proves that it is not on the stack, it can kill it.

Work in progress patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664419</commentid>
    <comment_count>1</comment_count>
      <attachid>151147</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-07 14:42:11 -0700</bug_when>
    <thetext>Created attachment 151147
work in progress

Oh boy, another huge patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664423</commentid>
    <comment_count>2</comment_count>
      <attachid>151149</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-07 15:12:46 -0700</bug_when>
    <thetext>Created attachment 151149
wrote a tiny bit more code

It compiles now, at least on 64-bit.  I&apos;ll test it at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664537</commentid>
    <comment_count>3</comment_count>
      <attachid>151169</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-08 19:04:47 -0700</bug_when>
    <thetext>Created attachment 151169
the patch

It seems to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664539</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 19:09:25 -0700</bug_when>
    <thetext>Attachment 151169 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/jit/GCAwareJITStubRoutine.h:83:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:108:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:113:  The parameter name &quot;code&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:113:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:116:  The parameter name &quot;code&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:116:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:117:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JITStubRoutine.h:53:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/heap/JITStubRoutineSet.h:44:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 17 in 31 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>664543</commentid>
    <comment_count>5</comment_count>
      <attachid>151169</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-08 19:22:13 -0700</bug_when>
    <thetext>Comment on attachment 151169
the patch

Attachment 151169 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13164112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664544</commentid>
    <comment_count>6</comment_count>
      <attachid>151169</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-08 19:23:43 -0700</bug_when>
    <thetext>Comment on attachment 151169
the patch

Attachment 151169 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13162137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664546</commentid>
    <comment_count>7</comment_count>
      <attachid>151169</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-08 19:25:24 -0700</bug_when>
    <thetext>Comment on attachment 151169
the patch

Attachment 151169 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13170009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664548</commentid>
    <comment_count>8</comment_count>
      <attachid>151169</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-08 19:30:36 -0700</bug_when>
    <thetext>Comment on attachment 151169
the patch

Attachment 151169 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13160279</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664555</commentid>
    <comment_count>9</comment_count>
      <attachid>151171</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-08 19:49:11 -0700</bug_when>
    <thetext>Created attachment 151171
the patch

Got it to, like, build, and stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664556</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 19:52:06 -0700</bug_when>
    <thetext>Attachment 151171 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/jit/GCAwareJITStubRoutine.h:83:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:108:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:113:  The parameter name &quot;code&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:113:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:116:  The parameter name &quot;code&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:116:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:117:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/jit/JITStubRoutine.h:53:  More than one command on the same line  [whitespace/newline] [4]
Source/JavaScriptCore/heap/JITStubRoutineSet.h:44:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 17 in 31 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>664558</commentid>
    <comment_count>11</comment_count>
      <attachid>151172</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-08 19:57:40 -0700</bug_when>
    <thetext>Created attachment 151172
the patch

Fixed some of the style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664560</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 20:02:06 -0700</bug_when>
    <thetext>Attachment 151172 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/jit/GCAwareJITStubRoutine.h:83:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:108:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/JavaScriptCore/jit/GCAwareJITStubRoutine.h:116:  The parameter name &quot;object&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 11 in 31 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>664563</commentid>
    <comment_count>13</comment_count>
      <attachid>151173</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-08 20:06:43 -0700</bug_when>
    <thetext>Created attachment 151173
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664567</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 20:20:10 -0700</bug_when>
    <thetext>Attachment 151173 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/jit/GCAwareJITStubRoutine.h:108:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 31 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>664575</commentid>
    <comment_count>15</comment_count>
      <attachid>151173</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-08 20:36:02 -0700</bug_when>
    <thetext>Comment on attachment 151173
the patch

Attachment 151173 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13163136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664576</commentid>
    <comment_count>16</comment_count>
      <attachid>151173</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-08 20:36:45 -0700</bug_when>
    <thetext>Comment on attachment 151173
the patch

Attachment 151173 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13164127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664583</commentid>
    <comment_count>17</comment_count>
      <attachid>151175</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-08 20:46:54 -0700</bug_when>
    <thetext>Created attachment 151175
the patch

More random fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664588</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 20:49:44 -0700</bug_when>
    <thetext>Attachment 151175 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/jit/GCAwareJITStubRoutine.h:109:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 31 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>664643</commentid>
    <comment_count>19</comment_count>
      <attachid>151185</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-08 22:16:57 -0700</bug_when>
    <thetext>Created attachment 151185
the patch

Fixed the last bugs.  It passes tests and is perf neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664645</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-08 22:20:40 -0700</bug_when>
    <thetext>Attachment 151185 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/jit/GCAwareJITStubRoutine.h:109:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:75:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:84:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:93:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 9 in 31 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>665113</commentid>
    <comment_count>21</comment_count>
      <attachid>151185</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-07-09 13:20:28 -0700</bug_when>
    <thetext>Comment on attachment 151185
the patch

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

&gt; Source/JavaScriptCore/jit/GCAwareJITStubRoutine.cpp:62
&gt; +    ASSERT(!m_isJettisoned);

Given the dual meaning of isJettisoned (to flag early destruction) this is pretty meaningless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665292</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-09 16:27:40 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/122166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665520</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-07-10 00:05:58 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Landed in http://trac.webkit.org/changeset/122166

It made 170 tests crash on 32 bit platforms, see https://bugs.webkit.org/show_bug.cgi?id=90852 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665772</commentid>
    <comment_count>24</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-10 08:32:22 -0700</bug_when>
    <thetext>Broke !ENABLE(JIT): http://build.webkit.org/builders/WinCE%20Release%20%28Build%29/builds/25753/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673278</commentid>
    <comment_count>25</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-19 01:05:54 -0700</bug_when>
    <thetext>PING? !ENABLE(JIT) still does not build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673848</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-19 13:15:19 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; PING? !ENABLE(JIT) still does not build.

See http://trac.webkit.org/changeset/123107</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151147</attachid>
            <date>2012-07-07 14:42:11 -0700</date>
            <delta_ts>2012-07-07 15:12:46 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>jettisonstubs_patch_1.diff</filename>
            <type>text/plain</type>
            <size>65046</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxMi0wNy0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcyEKKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChQb2x5bW9y
cGhpY1N0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0OjpQb2x5bW9ycGhpY1N0dWJJbmZvOjpzZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAgICAgICAgKFB1
dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpjdXJy
ZW50U2xvd1BhdGhUYXJnZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAgICog
ZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
dHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0UmVw
bGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChEdW1teU1hcmtIb29rKToKKyAgICAgICAgKEpT
Qzo6RHVtbXlNYXJrSG9vazo6bWFyayk6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3Rz
OjphZGQpOgorICAgICAgICAoQ29tcG9zaXRlTWFya0hvb2spOgorICAgICAgICAoSlNDOjpDb21w
b3NpdGVNYXJrSG9vazo6Q29tcG9zaXRlTWFya0hvb2spOgorICAgICAgICAoSlNDOjpDb21wb3Np
dGVNYXJrSG9vazo6bWFyayk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBo
ZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAq
IGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhlYXApOgorICAgICAgICAq
IGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjpKSVRTdHViUm91dGluZVNldCk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0Ojp+SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6YWRkKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmVTZXQ6OmNsZWFyTWFya3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
a1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRK
ZXR0aXNvbmVkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6
OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKiBoZWFwL0pJVFN0dWJSb3V0aW5l
U2V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVFN0dWJSb3V0aW5lU2V0
KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6Om1hcmspOgorICAgICAgICAqIGhl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGludGVy
cHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Z2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmls
ZS5oOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6
CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRT
dHViUm91dGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlND
OjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAg
ICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAg
ICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAg
IChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KToKKyAgICAgICAgKEpTQzo6T2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6T2Jq
ZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6Ok9iamVjdE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6On5PYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKToKKyAgICAgICAgKEpTQzo6T2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGlu
ZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEdDQXdhcmVKSVRTdHViUm91dGlu
ZSk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0cyk6CisgICAgICAgIChPYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKToKKyAg
ICAgICAgKEpTQzo6T2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6YWRkT2JqZWN0
KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjp+SklUU3R1YlJvdXRpbmUpOgorICAg
ICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6b2JzZXJ2ZVplcm9SZWZDb3VudCk6CisgICAgICAg
ICogaml0L0pJVFN0dWJSb3V0aW5lLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OkpJVFN0dWJS
b3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Um91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpjb2RlKToKKyAgICAgICAg
KEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5l
OjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAgIChKU0M6
OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0
aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6
OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6cGFz
c2VzRmlsdGVyKToKKwogMjAxMi0wNy0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIFdlYktpdCBWZXJzaW9uIDUuMS43ICg2NTM0LjU3LjIsIHIxMjE5MzUpOiBE
b3VibGUtY2xpY2sgbm8gbG9uZ2VyIHdvcmtzIG9uIE9wZW5TdHJlZXRNYXAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMSBAQAogCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0Mg
LyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0
ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2
RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsg
fTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThD
QzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQzMDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3
NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY3QjI5NEExNEMzQ0QyOTAwN0Mz
REIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVy
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
N0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5
NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtODc1LDYgKzg4MCwxMiBAQAogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYz
RjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdl
Lmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDJEMTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0g
ZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5
Miw2ICsxNzAzLDggQEAKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhl
Y3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKKwkJCQkwRjc2NkQyRDE1QThEQ0RE
MDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCAqLywKKwkJCQkwRjc2NkQyRTE1
QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEY0Njgw
RDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICovLAogCQkJCTBG
NDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8sCiAJCQkJ
MTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8sCkBAIC0xNzExLDYgKzE3MjQs
OCBAQAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2Fs
bC5oICovLAorCQkJCTBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5j
cHAgKi8sCisJCQkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmgg
Ki8sCiAJCQkJMTRBMjNENkMwRjRFMTlDRTAwMjNDREFEIC8qIEpJVFN0dWJzLmNwcCAqLywKIAkJ
CQkxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyogSklUU3R1YnMuaCAqLywKIAkJCQlBNzZGNTRB
MjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCkBAIC0xNzUyLDYgKzE3
NjcsOCBAQAogCQkJCTE0QkE3QTk2MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmggKi8sCiAJCQkJ
QzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oICovLAogCQkJCTE0Rjk3NDQ2
MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLywKKwkJCQkwRjc2NkQyOTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwICovLAorCQkJCTBGNzY2RDJB
MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oICovLAogCQkJCTBGNDMxNzM2
MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKIAkJCQkxNDJFMzEzMDEz
NEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCAqLywKIAkJCQkxNDJFMzEzMTEzNEZGMEE2MDBBRkFE
QjUgLyogTG9jYWxTY29wZS5oICovLApAQCAtMjgxNSw2ICsyODMyLDggQEAKIAkJCQkwRkY0Mjc2
NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY0Mjc3MjE1OTI3NUQ4MDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNzE2OEMxNUEzQjIzNTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYz
RSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzQwNyw2ICsz
NDI2LDkgQEAKIAkJCQlDMkQ1OEMzNDE1OTEyRkVFMDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBE
RkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NzExNTkyNzVENTAw
NENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3
NjZEMjgxNUE4Q0MxRTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGNzY2RDJCMTVBOENDMzgwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEluc3RydWN0aW9uX2gKICNkZWZpbmUgSW5zdHJ1Y3Rp
b25faAogCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgpA
QCAtNTIsOCArNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdHJ1Y3QgVmFsdWVQcm9maWxl
OwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGU7Ci0KICAgICAvLyBT
dHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRf
cHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xkIGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBz
dHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCB7CiAgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjEsNyArNjAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewogICAgICAgICAgICAg
Ym9vbCBpc0NoYWluOwogICAgICAgICAgICAgYm9vbCBpc0RpcmVjdDsKLSAgICAgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZTsK
KyAgICAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBiYXNlOwogICAgICAgICAgICAgdW5pb24gewog
ICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBwcm90bzsKQEAgLTcz
LDcgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgdS5wcm90by5jbGVh
cigpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNE
aXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpAQCAtODIsNyArODEsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgICAgICB0aGlzLT5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVy
ZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQorICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29s
IGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0g
X3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVy
LCBfYmFzZSk7CkBAIC05MSw3ICs5MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
ICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9z
dHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9v
bCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5l
LCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVDaGFpbiogX2NoYWluLCBib29sIGlzRGlyZWN0
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0
aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7
CkBAIC0xMDUsMTcgKzEwNCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RC
YXNlLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNE
aXJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93
bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBpc0RpcmVjdCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91
dGluZVR5cGUgc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZp
cnN0UHJvdG8sIGJvb2wgaXNEaXJlY3QpCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3Ry
dWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwg
Zmlyc3RQcm90bywgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25l
ciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0
aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJv
b2wgaXNEaXJlY3QpCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4q
IGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIGxpc3Rb
MF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBmaXJzdENo
YWluLCBpc0RpcmVjdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlz
aW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBQdXRCeUlk
QWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5
X2lkX3JlcGxhY2U6CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwogICAgICAgICBy
ZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5i
YXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihpbml0aWFsU2xvd1Bh
dGgpOworICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVh
dGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTIxOTI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAog
ICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAg
ICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAg
ICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0
aW9uOwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwKICAgICAgICAgSlNDZWxsKiBvd25lciwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSkKKyAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCiAgICAgewogICAgICAg
ICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7
CkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQo
KTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKCkg
Y29uc3QKKyAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNUcmFuc2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkpOwog
ICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRl
OgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViUm91
dGluZTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCiBj
bGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsKQEAgLTE1OSw3ICsxNTksNyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgflBvbHltb3JwaGljUHV0QnlJZExpc3QoKTsKICAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY3VycmVudFNsb3dQYXRoVGFyZ2V0KCkgY29uc3QKKyAgICBQYXNzUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS5jb2RlKCk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIK
KyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0xNjgsNyAr
MTY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlcmVmKCk7
CiAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3Vuc2V0OwotICAgICAgICAgICAgc3R1
YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgICAgIHN0dWJSb3V0
aW5lLmNsZWFyKCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGRlcmVmKCk7CkBAIC0yODYs
NyArMjg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9IHB1dEJ5SWRMaXN0Owog
ICAgICAgICB9IHU7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5l
OworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgaG90UGF0aEJlZ2luOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBA
QCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlCiAgICAgbGlua1Jlc3Rv
cmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xv
d0Nhc2UpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkK
K3N0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6
ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNl
TGFiZWwsIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTE2Niw3ICsx
NjYsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAg
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwp
OwogICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKKyAgICBzdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAg
ICAoIkRGRyBwcm90b3R5cGUgY2hhaW4gYWNjZXNzIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0
dXJuIHBvaW50ICVwIiwKICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdWNjZXNzTGFiZWwu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwpAQCAtMjIwLDE0ICsyMjAsMTQgQEAgc3RhdGljIGJvb2wg
dHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgbGlua1Jlc3Rv
cmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAogICAg
ICAgICAgICAgKCJERkcgR2V0QnlJZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgQ29kZUJsb2NrICVw
LCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICAg
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hl
Y2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
b3BlcmF0aW9uR2V0QnlJZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3
Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgIAogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7
CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
IHRydWUpOwpAQCAtNDMzLDcgKzQzMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExp
c3QoRXhlY1N0YXQKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luOwogICAgICAgICBpZiAobGlzdEluZGV4KQotICAgICAgICAgICAgbGFzdFByb3RvQmVn
aW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlz
dEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICAgICAgICAgIGxhc3RQcm90b0Jl
Z2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CiAg
ICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKQEAgLTQ0NSwxNyArNDQ1LDI0IEBAIHN0
YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoaGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAg
ICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAg
ICAgICAgICAgIGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpF
X0NPREUoCisgICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAoIkRGRyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxv
Y2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLAorICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAg
c2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcgorICAgICAg
ICAgICAgICAgIHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpD
dXN0b20sCisgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIAogICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsK
ICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC00OTksNyArNTA2LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0
KEV4ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hh
aW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5z
dHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCksIHRydWUpOwotICAgICAg
ICBzdHViSW5mby5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAg
ICBzdHViSW5mby5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0
QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRf
cHJvdG9fbGlzdCk7CkBAIC01MTAsMTAgKzUxNywxMCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURQcm90b0xpc3QoRXhlCiAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSkgewogICAgICAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNp
emUrKzsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAg
ICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZTsKICAgICAgICAgCiAgICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIo
ZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgc3R1YlJvdXRpbmUpOwogICAg
ICAgICAKQEAgLTUyMSw3ICs1MjgsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90
b0xpc3QoRXhlCiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3RJ
bmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNTgxLDcgKzU4OCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNl
U3R1YigKICAgICBQdXRLaW5kLAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgIENvZGVM
b2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0
dWJSb3V0aW5lKQorICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAg
R1BSUmVnIGJhc2VHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy5i
YXNlR1BSKTsKQEAgLTY1NSw3ICs2NjIsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0
dWIoCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAgICAgICAg
ICAgCi0gICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJSb3V0aW5lID0g
RklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgi
REZHIFB1dEJ5SWQgcmVwbGFjZSBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCiAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoCkBAIC02NzMsNyArNjgwLDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1
dFRyYW5zaXRpb25TdHViKAogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgIFN0cnVj
dHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbiwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJl
TGFiZWwsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKKyAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC03NTQsOCArNzYxLDggQEAgc3Rh
dGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlcywgZmFpbHVyZUxhYmVsKTsKLSAgICAgICAgICAgIAotICAgIHN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERSgKKyAgICAKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCiAgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkRGRyBQdXRC
eUlkIHRyYW5zaXRpb24gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAog
ICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KApAQCAtNzk5LDcgKzgwNiw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0
QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNv
ZGUoKSkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9u
KHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5p
dFB1dEJ5SWRUcmFuc2l0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0g
RGlyZWN0KTsKQEAgLTg0MSw3ICs4NDgsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRM
aXN0KEV4ZWNTdGF0CiAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCiAgICAgaWYgKHNsb3Qu
YmFzZSgpID09IGJhc2VWYWx1ZSkgewogICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBs
aXN0OwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CisgICAgICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgIAogICAgICAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewogICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCkBAIC04ODgsNyArODk1LDcgQEAg
c3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0
LT5pc0Z1bGwoKSkKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEg
KzYyLDYgQEAgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiAgICAgbV9yb290cyA9IG5l
d1Jvb3RzOwogfQogCi1jbGFzcyBEdW1teU1hcmtIb29rIHsKLXB1YmxpYzoKLSAgICB2b2lkIG1h
cmsodm9pZCopIHsgfQotfTsKLQogdGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+CiBpbmxpbmUg
dm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFBvaW50ZXIodm9pZCogcCwgVGlueUJs
b29tRmlsdGVyIGZpbHRlciwgTWFya0hvb2smIG1hcmtIb29rKQogewpAQCAtMTEwLDE1ICsxMDUs
NDggQEAgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFNwYW4odgogICAgICAgICBn
ZW5lcmljQWRkUG9pbnRlcigqaXQsIGZpbHRlciwgbWFya0hvb2spOwogfQogCitjbGFzcyBEdW1t
eU1hcmtIb29rIHsKK3B1YmxpYzoKKyAgICB2b2lkIG1hcmsodm9pZCopIHsgfQorfTsKKwogdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpCiB7Ci0gICAg
RHVtbXlNYXJrSG9vayBob29rOwotICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGhvb2sp
OworICAgIER1bW15TWFya0hvb2sgZHVtbXk7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVu
ZCwgZHVtbXkpOwogfQogCi12b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4s
IHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKK3ZvaWQgQ29uc2VydmF0
aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYg
aml0U3R1YlJvdXRpbmVzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGppdFN0
dWJSb3V0aW5lcyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitjbGFz
cyBDb21wb3NpdGVNYXJrSG9vayB7CitwdWJsaWM6CisgICAgQ29tcG9zaXRlTWFya0hvb2soVCYg
Zmlyc3QsIFUmIHNlY29uZCkKKyAgICAgICAgOiBtX2ZpcnN0KGZpcnN0KQorICAgICAgICAsIG1f
c2Vjb25kKHNlY29uZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFyayh2b2lkKiBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9maXJzdC5tYXJrKGFkZHJlc3MpOworICAgICAgICBt
X3NlY29uZC5tYXJrKGFkZHJlc3MpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUJiBtX2ZpcnN0
OworICAgIFUmIG1fc2Vjb25kOworfTsKKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKAor
ICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91
dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCiB7Ci0gICAgZ2VuZXJpY0FkZFNw
YW4oYmVnaW4sIGVuZCwgZGZnQ29kZUJsb2Nrcyk7CisgICAgQ29tcG9zaXRlTWFya0hvb2s8SklU
U3R1YlJvdXRpbmVTZXQsIERGR0NvZGVCbG9ja3M+IG1hcmtIb29rKAorICAgICAgICBqaXRTdHVi
Um91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQs
IG1hcmtIb29rKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDEyMTkyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDkgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBK
U0NlbGw7CiBjbGFzcyBERkdDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKK2NsYXNzIEpJVFN0dWJS
b3V0aW5lU2V0OworY2xhc3MgSlNDZWxsOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBw
dWJsaWM6CkBAIC00Miw3ICs0Myw4IEBAIHB1YmxpYzoKICAgICB+Q29uc2VydmF0aXZlUm9vdHMo
KTsKIAogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpOwotICAgIHZvaWQgYWRk
KHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmKTsKKyAgICB2b2lkIGFkZCh2
b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYpOworICAgIHZvaWQgYWRk
KHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgREZHQ29kZUJsb2Nr
cyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxMjE5MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIw
LDYgKzQyMCw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgIC8vIFdl
IGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNh
dXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFsaWQuCiAgICAgQ29uc2VydmF0aXZl
Um9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9zdG9y
YWdlU3BhY2UpOworICAgIG1faml0Q29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAg
ICAgICBHQ1BIQVNFKEdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgbV9tYWNoaW5l
VGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1t
eSk7CkBAIC00MjksNyArNDMwLDggQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0Mp
CiAgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKICAgICB7CiAgICAgICAgIEdDUEhB
U0UoR2F0aGVyUmVnaXN0ZXJGaWxlUm9vdHMpOwotICAgICAgICByZWdpc3RlckZpbGUoKS5nYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290cywgbV9kZmdDb2RlQmxvY2tzKTsK
KyAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoCisgICAgICAg
ICAgICByZWdpc3RlckZpbGVSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nr
cyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC01NDAsOSArNTQyLDEwIEBAIHZv
aWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICB9CiAgICAgCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEdDUEhBU0UoVHJhY2VDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIE1B
UktfTE9HX1JPT1QodmlzaXRvciwgIlRyYWNlIENvZGUgQmxvY2tzIik7CisgICAgICAgICAgICBH
Q1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICBN
QVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91
dGluZXMiKTsKICAgICAgICAgICAgIG1fZGZnQ29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9j
a3ModmlzaXRvcik7CisgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0
dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKICAgICAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gMTIxOTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgog
I2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCisjaW5jbHVk
ZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCkBAIC00
OCw2ICs0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEhlYXA7CiAgICAgY2xhc3Mg
SGVhcFJvb3RWaXNpdG9yOwogICAgIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKKyAgICBjbGFz
cyBKSVRTdHViUm91dGluZTsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9iYWxE
YXRhOwogICAgIGNsYXNzIEpTVmFsdWU7CkBAIC0xNjgsNiArMTcwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOworICAg
ICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTIyOSw2ICsyMzIsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAg
ICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwogICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZn
Q29kZUJsb2NrczsKKyAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7
CiAgICAgICAgIEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIAogICAg
ICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFN0
dWJSb3V0aW5lU2V0OjpKSVRTdHViUm91dGluZVNldCgpIHsgfQorSklUU3R1YlJvdXRpbmVTZXQ6
On5KSVRTdHViUm91dGluZVNldCgpIHsgfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjphZGQo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lKQoreworICAgIEFTU0VSVCghcm91dGluZS0+
bV9pc0pldHRpc29uZWQpOworICAgIAorICAgIG1fbGlzdE9mUm91dGluZXMuYXBwZW5kKHJvdXRp
bmUpOworICAgIAorICAgIHVpbnRwdHJfdCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygp
OworICAgIHVpbnRwdHJfdCBlbmQgPSByb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgdWludHB0
cl90IHN0ZXAgPSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1NldCgpOworICAgIGZvciAodWludHB0
cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVCht
X2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKSA9PSBtX2FkZHJlc3NUb1JvdXRpbmVNYXAu
ZW5kKCkpOworICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuYWRkKGl0ZXIsIHJvdXRpbmUp
OworICAgIH0KK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcygpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6ZSgpOyBpLS07KQorICAgICAg
ICBtX2xpc3RPZlJvdXRpbmVzW2ldLT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7Cit9CisKK3Zv
aWQgSklUU3R1YlJvdXRpbmVTZXQ6Om1hcmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKQoreworICAg
IEhhc2hNYXA8dWludHB0cl90LCBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqPjo6aXRlcmF0b3IgaXRl
ciA9CisgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGFkZHJlc3MgJiB+KEpJVFN0
dWJSb3V0aW5lOjphZGRyZXNzU2V0KCkgLSAxKSk7CisgICAgCisgICAgaWYgKGl0ZXIgPT0gbV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaXRl
ci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKK30KKwordm9pZCBKSVRTdHViUm91
dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gbV9saXN0T2ZSb3V0aW5lc1tpXTsKKyAg
ICAgICAgaWYgKCFyb3V0aW5lLT5tX2lzSmV0dGlzb25lZCB8fCByb3V0aW5lLT5tX21heUJlRXhl
Y3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICB1aW50cHRy
X3Qgc3RhcnQgPSByb3V0aW5lLT5zdGFydEFkZHJlc3MoKTsKKyAgICAgICAgdWludHB0cl90IGVu
ZCA9IHJvdXRpbmUtPmVuZEFkZHJlc3MoKTsKKyAgICAgICAgdWludHB0cl90IHN0ZXAgPSBKSVRT
dHViUm91dGluZTo6YWRkcmVzc1NldCgpOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBpdGVyID0g
c3RhcnQ7IGl0ZXIgPCBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVz
c1RvUm91dGluZU1hcC5maW5kKGl0ZXIpICE9IG1fYWRkcmVzc1RvUm91dGluZU1hcC5lbmQoKSk7
CisgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlciktPnNl
Y29uZCA9PSByb3V0aW5lKTsKKyAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5yZW1v
dmUoaXRlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPmRlbGV0ZUZy
b21HQygpOworICAgICAgICAKKyAgICAgICAgbV9saXN0T2ZSb3V0aW5lc1tpXSA9IG1fbGlzdE9m
Um91dGluZXMubGFzdCgpOworICAgICAgICBtX2xpc3RPZlJvdXRpbmVzLnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgaS0tOworICAgIH0KK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6dHJhY2VN
YXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEdDQXdhcmVK
SVRTdHViUm91dGluZSogcm91dGluZSA9IG1fbGlzdE9mUm91dGluZXNbaV07CisgICAgICAgIGlm
ICghcm91dGluZS0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9yKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRp
bmVTZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVFN0dWJSb3V0aW5lU2V0X2gK
KyNkZWZpbmUgSklUU3R1YlJvdXRpbmVTZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOworCitjbGFzcyBKSVRTdHViUm91dGluZVNldCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSklUU3R1YlJvdXRpbmVTZXQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICAKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91dGluZVNldCgpOworICAgIH5KSVRTdHViUm91
dGluZVNldCgpOworICAgIAorICAgIHZvaWQgYWRkKEdDQXdhcmVKSVRTdHViUm91dGluZSopOwor
CisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRp
ZGF0ZUFkZHJlc3MpCisgICAgeworICAgICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKKyAgICAgICAgaWYgKCFKSVRT
dHViUm91dGluZTo6cGFzc2VzRmlsdGVyKGFkZHJlc3MpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgbWFya1Nsb3coYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CisgICAgCisgICAgdm9p
ZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0ZToK
KyAgICB2b2lkIG1hcmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKKyAgICAKKyAgICBIYXNoTWFw
PHVpbnRwdHJfdCwgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKj4gbV9hZGRyZXNzVG9Sb3V0aW5lTWFw
OworICAgIFZlY3RvcjxHQ0F3YXJlSklUU3R1YlJvdXRpbmUqPiBtX2xpc3RPZlJvdXRpbmVzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5k
aWYgLy8gSklUU3R1YlJvdXRpbmVTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24gMTIxOTI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDggKzI4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBIZWFw
OwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworICAgIGNsYXNzIEhlYXA7CiAKICAgICBj
bGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hY2hp
bmVUaHJlYWRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOSArNzMsOSBAQCB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vCiAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpKTsKIH0KIAotdm9pZCBSZWdp
c3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKK3ZvaWQgUmVnaXN0
ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVC
bG9ja3MmIGRmZ0NvZGVCbG9ja3MpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2lu
KCksIGVuZCgpLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVn
aW4oKSwgZW5kKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQg
UmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkocmV2aXNpb24gMTIx
OTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB+UmVnaXN0ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBERkdDb2RlQmxvY2tzJik7CisgICAgICAg
IHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHVi
Um91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4o
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFz
ZSgpKTsgfQogICAgICAgICBSZWdpc3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMTIxOTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIGNsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwdWJsaWMg
TWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigp
Ci0gICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25z
IHRvIDMyIGJ5dGVzCisgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVs
ZSkKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2soYWxsb2NhdG9yc011dGV4KCkpOwog
ICAgICAgICBhbGxvY2F0b3JzKCkuYWRkKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyMTkyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNHbG9iYWxE
YXRhOwogdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERhdGEmKTsKIAorc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7CisKIGlubGluZSBz
aXplX3Qgcm91bmRVcEFsbG9jYXRpb25TaXplKHNpemVfdCByZXF1ZXN0LCBzaXplX3QgZ3JhbnVs
YXJpdHkpCiB7CiAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0g
Z3JhbnVsYXJpdHkpIDw9IHJlcXVlc3QpCkBAIC0xMDEsNiArMTAzLDE4IEBAIHR5cGVkZWYgV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGEKIGNsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3I7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkK
KyNpZiBDUFUoQVJNKQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CisjZWxpZiBDUFUoWDg2XzY0KQorc3RhdGljIGNv
bnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICog
MTAyNDsKKyNlbHNlCitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBv
b2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKKyNlbmRpZgorCitleHRlcm4gdWludHB0cl90IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOworI2VuZGlmCisKIGNsYXNzIEV4ZWN1dGFi
bGVBbGxvY2F0b3IgewogICAgIGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhl
Y3V0YWJsZSB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMjE5
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDI3ICs0NSwyMyBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLSNpZiBDUFUoQVJNKQotc3RhdGlj
IGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKLSNlbGlmIENQ
VShYODZfNjQpCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAy
NCAqIDEwMjQ7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMzIg
KiAxMDI0ICogMTAyNDsKLSNlbmRpZgordWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVN
ZW1vcnlQb29sOwogCiBjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwdWJs
aWMgTWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yKCkKLSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxs
b2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRp
bkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAgIHsK
LSAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFy
ZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VU
QUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VS
ZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBv
b2xTaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklU
QUJMRSwgdHJ1ZSk7CiAjaWYgIShFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgfHwgRU5BQkxF
KExMSU5UKSkKICAgICAgICAgaWYgKCFtX3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0go
KTsKICNlbmRpZgogICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgewotICAgICAgICAgICAgQVNT
RVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgpID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAg
QVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgpID09IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplKTsKICAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKG1fcmVzZXJ2YXRpb24uYmFzZSgp
LCBtX3Jlc2VydmF0aW9uLnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXJ0
T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRT
dHViUm91dGluZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKworI2lmIEVOQUJMRShKSVQpCisK
KyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K0dDQXdhcmVKSVRTdHViUm91dGluZTo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQor
ICAgIDogSklUU3R1YlJvdXRpbmUoY29kZSkKKyAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2Up
CisgICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkKK3sKKyAgICBnbG9iYWxEYXRhLmhlYXAubV9q
aXRTdHViUm91dGluZXMuYWRkKHJlc3VsdC5nZXQoKSk7Cit9CisgICAgCitHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSB7IH0KKwordm9pZCBHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQoKQoreworICAgIGlmIChtX2lzSmV0dGlz
b25lZCkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2lzSmV0dGlzb25lZCA9IHRydWU7CisgICAgbV9yZWZDb3VudCA9IDE7IC8vIFJl
dml2ZSB0aGUgb2JqZWN0LiBJdCdzIG5vdyBvd25lZCBieSB0aGUgR0MuCit9CisKK3ZvaWQgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MoKQoreworICAgIEFTU0VSVChtX2lzSmV0
dGlzb25lZCk7CisgICAgQVNTRVJUKG1fcmVmQ291bnQgPT0gMSk7CisgICAgQVNTRVJUKCFtX21h
eUJlRXhlY3V0aW5nKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCit7Cit9
CisKK09iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok9iamVjdE1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2Rl
LCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUo
Y29kZSwgZ2xvYmFsRGF0YSkKK3sKK30KKworT2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91
dGluZTo6fk9iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKQoreworfQorCit2b2lk
IE9iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9v
YmplY3RzLnNpemUoKTsgaS0tOykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fb2JqZWN0c1tp
XSk7Cit9CisKK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUdDQXdhcmVKSVRTdHVi
Um91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgYm9v
bCBtYWtlc0NhbGxzLAorICAgIC4uLikKK3sKKyAgICBpZiAoIW1ha2VzQ2FsbHMpCisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOworICAgIAorICAgIHZh
X2xpc3QgYXJnTGlzdDsKKyAgICB2YV9zdGFydChhcmdMaXN0LCBtYWtlc0NhbGxzKTsKKyAgICBK
U0NlbGwqIGZpcnN0ID0gdmFfYXJnKGFyZ0xpc3QsIEpTQ2VsbCopOworICAgIGlmICghZmlyc3Qp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUs
IGdsb2JhbERhdGEpKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPE9iamVjdE1hcmtpbmdHQ0F3YXJl
SklUU3R1YlJvdXRpbmU+IHJlc3VsdCA9CisgICAgICAgIGFkb3B0UmVmKG5ldyBPYmplY3RNYXJr
aW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpKTsKKyAgICAKKyAgICBy
ZXN1bHQtPmFkZE9iamVjdChnbG9iYWxEYXRhLCBvd25lciwgZmlyc3QpOworICAgIAorICAgIGZv
ciAoOzspIHsKKyAgICAgICAgSlNDZWxsKiBuZXh0ID0gdmFfYXJnKGFyZ0xpc3QsIEpTQ2VsbCop
OworICAgICAgICBpZiAoIW5leHQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVzdWx0
LT5hZGRPYmplY3QoZ2xvYmFsRGF0YSwgb3duZXIsIG5leHQpOworICAgIH0KKyAgICAKKyAgICB2
YV9lbmQoYXJnTGlzdCk7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8R0NB
d2FyZUpJVFN0dWJSb3V0aW5lPihyZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgR0NBd2FyZUpJVFN0dWJSb3V0aW5lX2gKKyNkZWZpbmUgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KEpJVCkKKworI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBVc2UgdGhpcyBzdHViIHJvdXRpbmUgaWYgeW91
IGtub3cgdGhhdCB5b3VyIGNvZGUgbWlnaHQgYmUgb24gc3RhY2sgd2hlbgorLy8gZWl0aGVyIEdD
IG9yIG90aGVyIGtpbmRzIG9mIHN0dWIgZGVsZXRpb24gaGFwcGVuLiBCYXNpY2FseSwgaWYgeW91
ciBzdHViCisvLyByb3V0aW5lIG1ha2VzIGNhbGxzIChlaXRoZXIgdG8gSlMgY29kZSBvciB0byBD
KysgY29kZSkgdGhlbiB5b3Ugc2hvdWxkCisvLyBhc3N1bWUgdGhhdCBpdCdzIHBvc3NpYmxlIGZv
ciB0aGF0IEpTIG9yIEMrKyBjb2RlIHRvIGRvIHNvbWV0aGluZyB0aGF0CisvLyBjYXVzZXMgdGhl
IHN5c3RlbSB0byB0cnkgdG8gZGVsZXRlIHlvdXIgcm91dGluZS4gVXNpbmcgdGhpcyByb3V0aW5l
IHR5cGUKKy8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIGRlbGV0aW9uIGlzIGRlbGF5ZWQgdW50
aWwgdGhlIEdDIHByb3ZlcyB0aGF0IHRoZQorLy8gcm91dGluZSBpcyBubyBsb25nZXIgcnVubmlu
Zy4gWW91IGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMgcm91dGluZSBpZiB5b3UKKy8vIHdhbnQgdG8g
bWFyayBhZGRpdGlvbmFsIG9iamVjdHMgZHVyaW5nIEdDIGluIHRob3NlIGNhc2VzIHdoZXJlIHRo
ZQorLy8gcm91dGluZSBpcyBrbm93biB0byBiZSBleGVjdXRpbmcsIG9yIGlmIHlvdSB3YW50IHRv
IGZvcmNlIHRoaXMgcm91dGluZSB0bworLy8ga2VlcCBvdGhlciByb3V0aW5lcyBhbGl2ZSAoZm9y
IGV4YW1wbGUgZHVlIHRvIHRoZSB1c2Ugb2YgYSBzbG93LXBhdGgKKy8vIGxpc3Qgd2hpY2ggZG9l
cyBub3QgZ2V0IHJlY2xhaW1lZCBhbGwgYXQgb25jZSkuCitjbGFzcyBHQ0F3YXJlSklUU3R1YlJv
dXRpbmUgOiBwdWJsaWMgSklUU3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIEdDQXdhcmVKSVRT
dHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEmKTsK
KyAgICB2aXJ0dWFsIH5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRvcik7CisgICAgfQorICAgIAorICAgIHZv
aWQgZGVsZXRlRnJvbUdDKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG9i
c2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVk
T2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJSb3V0aW5lU2V0OworCisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAg
IGJvb2wgbV9pc0pldHRpc29uZWQ7Cit9OworCisvLyBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byBt
YXJrIGFkZGl0aW9uYWwgb2JqZWN0cyBkdXJpbmcgR0MgaWYgeW91ciBzdHViCisvLyByb3V0aW5l
IGlzIGtub3duIHRvIGJlIGV4ZWN1dGluZy4KK2NsYXNzIE9iamVjdE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKK3B1YmxpYzoKKyAg
ICBPYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYsIEpTR2xvYmFsRGF0YSYpOworICAgIHZpcnR1YWwgfk9iamVjdE1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICB2b2lkIGFkZE9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogdmFsdWUpCisgICAg
eworICAgICAgICBtX29iamVjdHMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KGdsb2JhbERh
dGEsIG93bmVyLCB2YWx1ZSkpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OworICAgIAorICAgIFZlY3Rv
cjxXcml0ZUJhcnJpZXI8SlNDZWxsPiA+IG1fb2JqZWN0czsKK307CisKKy8vIEhlbHBlciBmb3Ig
ZWFzaWx5IGNyZWF0aW5nIGEgR0MtYXdhcmUgSklUIHN0dWIgcm91dGluZS4gRm9yIHRoZSB2YXJh
cmdzLAorLy8gcGFzcyB6ZXJvIG9yIG1vcmUgSlNDZWxsKidzIHRlcm1pbmF0ZWQgYnkgMC4gVGhp
cyB3aWxsIGVpdGhlciBjcmVhdGUgYQorLy8gSklUU3R1YlJvdXRpbmUsIGEgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLCBvciBhbgorLy8gT2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSBh
cyBhcHByb3ByaWF0ZS4gR2VuZXJhbGx5IHlvdSBvbmx5CisvLyBuZWVkIHRvIHBhc3MgcG9pbnRl
cnMgdGhhdCB3aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlIGZpcnN0IGNhbGwgdG8gQysrIG9yCisvLyBK
Uy4KK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsCisgICAgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBib29sIG1ha2VzQ2FsbHMs
CisgICAgLi4uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCisjZW5kaWYgLy8gR0NBd2FyZUpJVFN0dWJSb3V0aW5lX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIK
KworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUg
PHN0ZGFyZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworSklUU3R1YlJvdXRpbmU6On5KSVRTdHVi
Um91dGluZSgpIHsgfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVyb1JlZkNvdW50
KCkKK3sKKyAgICBBU1NFUlQoIW1fcmVmQ291bnQpOworICAgIGRlbGV0ZSB0aGlzOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSklUU3R1YlJvdXRpbmVfaAorI2RlZmluZSBKSVRTdHViUm91dGluZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNs
dWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworLy8g
VGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIEpJVCBzdHViIHJvdXRpbmVzLCBhbmQgYWxzbyB0aGUg
Y2xhc3MgeW91IHdhbnQKKy8vIHRvIGluc3RhbnRpYXRlIGRpcmVjdGx5IGlmIHlvdSBoYXZlIGEg
cm91dGluZSB0aGF0IGRvZXMgbm90IG5lZWQgYW55CisvLyBoZWxwIGZyb20gdGhlIEdDLiBJZiBp
biBkb3VidCwgdXNlIG9uZSBvZiB0aGUgb3RoZXIgc3R1YiByb3V0aW5lcy4gQnV0CisvLyBpZiB5
b3Uga25vdyBmb3Igc3VyZSB0aGF0IHRoZSBzdHViIHJvdXRpbmUgY2Fubm90IGJlIG9uIHRoZSBz
dGFjayB3aGlsZQorLy8gc29tZW9uZSB0cmlnZ2VycyBhIHN0dWIgcm91dGluZSByZXNldCwgdGhl
biB1c2luZyB0aGlzIHdpbGwgc3BlZWQgdXAKKy8vIG1lbW9yeSByZWNsYW1hdGlvbi4gT25lIGNh
c2Ugd2hlcmUgYSBzdHViIHJvdXRpbmUgc2F0aXNmaWVzIHRoaXMKKy8vIGNvbmRpdGlvbiBpcyBp
ZiBpdCBkb2Vzbid0IG1ha2UgYW55IGNhbGxzLCB0byBlaXRoZXIgQysrIG9yIEpTIGNvZGUuIElu
CisvLyBzdWNoIGEgcm91dGluZSB5b3Uga25vdyB0aGF0IGl0IGNhbm5vdCBiZSBvbiB0aGUgc3Rh
Y2sgd2hlbiBhbnl0aGluZworLy8gaW50ZXJlc3RpbmcgaGFwcGVucy4KKy8vIFNlZSBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCBmb3IgdGhlIG90aGVyIHN0dWIgcm91dGluZXMuCitjbGFzcyBKSVRT
dHViUm91dGluZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSklUU3R1YlJvdXRpbmUpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91dGluZShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisg
ICAgICAgICwgbV9yZWZDb3VudCgxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRo
aXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhIENvZGVQdHIgdG8gc29tZW9uZSB3aG8gaW5zaXN0cyBv
biB0YWtpbmcKKyAgICAvLyBhIFJlZlB0cjxKSVRTdHViUm91dGluZT4uCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJhd0NvZGVQb2ludGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICAvLyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgaXMgY29weWFibGUsIGJ1dCBhdCB0aGUgY29zdCBvZiByZWZlcmVuY2UKKyAg
ICAvLyBjb3VudGluZyBjaHVybi4gUmV0dXJuaW5nIGEgcmVmZXJlbmNlIGlzIGEgZ29vZCB3YXkg
b2YgcmVkdWNpbmcKKyAgICAvLyB0aGUgY2h1cm4uCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgCisgICAgdm9pZCBy
ZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCsrOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmICgtLW1fcmVmQ291bnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG9ic2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICB9CisgICAgCisgICAg
Ly8gSGVscGVycyBmb3IgdGhlIEdDIHRvIGRldGVybWluZSBob3cgdG8gZGVhbCB3aXRoIG1hcmtp
bmcgSklUIHN0dWIKKyAgICAvLyByb3V0aW5lcy4KKyAgICB1aW50cHRyX3Qgc3RhcnRBZGRyZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnRBc0ludGVn
ZXIoKTsgfQorICAgIHVpbnRwdHJfdCBlbmRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kQXNJbnRlZ2VyKCk7IH0KKyAgICBzdGF0aWMgdWludHB0
cl90IGFkZHJlc3NTdGVwKCkgeyByZXR1cm4gaml0QWxsb2NhdGlvbkdyYW51bGU7IH0KKyAgICAK
KyAgICBzdGF0aWMgYm9vbCBjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIoKQorICAgIHsKKyNpZiBFTkFC
TEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vs
c2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIHN0YXRpYyB1aW50
cHRyX3QgZmlsdGVyaW5nU3RhcnRBZGRyZXNzKCkKKyAgICB7CisjaWYgRU5BQkxFKEVYRUNVVEFC
TEVfQUxMT0NBVE9SX0ZJWEVEKQorICAgICAgICByZXR1cm4gc3RhcnRPZkZpeGVkRXhlY3V0YWJs
ZU1lbW9yeVBvb2w7CisjZWxzZQorICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsK
KyNlbmRpZgorICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbHRlcmluZ0V4dGVudFNpemUoKQor
ICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJl
dHVybiBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNlbHNlCisgICAgICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2VuZGlmCisgICAgfQorICAgIHN0YXRpYyBib29sIHBh
c3Nlc0ZpbHRlcih1aW50cHRyX3QgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmICghY2FuUGVy
Zm9ybVJhbmdlRmlsdGVyKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChhZGRyZXNzIC0gZmlsdGVyaW5nU3RhcnRBZGRyZXNzKCkgPj0gZmlsdGVyaW5n
RXh0ZW50U2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG9i
c2VydmVaZXJvUmVmQ291bnQoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7
CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKKyNkZWZpbmUgRklOQUxJWkVfQ09ERV9G
T1JfU1RVQihwYXRjaEJ1ZmZlciwgZGF0YUxvZ0FyZ3VtZW50cykgXAorICAgIChhZG9wdFJlZihu
ZXcgSklUU3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERSgocGF0Y2hCdWZmZXIpLCBkYXRhTG9nQXJn
dW1lbnRzKSkpKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CisKKyNlbmRpZiAvLyBKSVRTdHViUm91dGluZV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxs
b2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFB
bGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTcgKzQ1LDI3IEBAIHByaXZh
dGU6CiBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFuZGxl
KCk7CiAgICAgCi0gICAgdm9pZCogc3RhcnQoKQorICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBlbmQo
KQorICAgIHZvaWQqIGVuZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9z
aXplSW5CeXRlcyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRB
c0ludGVnZXIoKSk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBzdGFydEFzSW50ZWdlcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG1fc3RhcnQpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgZW5kQXNJbnRlZ2VyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGFydEFzSW50ZWdlcigpICsgbV9zaXplSW5CeXRl
czsKICAgICB9CiAgICAgICAgIAotICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgc2l6ZV90
IHNpemVJbkJ5dGVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVz
OwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151149</attachid>
            <date>2012-07-07 15:12:46 -0700</date>
            <delta_ts>2012-07-08 19:04:47 -0700</delta_ts>
            <desc>wrote a tiny bit more code</desc>
            <filename>jettisonstubs_patch_2.diff</filename>
            <type>text/plain</type>
            <size>82349</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxMi0wNy0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcyEKKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChQb2x5bW9y
cGhpY1N0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0OjpQb2x5bW9ycGhpY1N0dWJJbmZvOjpzZXQpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkQWNj
ZXNzOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6cmVwbGFjZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnN0dWJSb3V0aW5lKToKKyAgICAgICAgKFB1
dEJ5SWRBY2Nlc3MpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0OjpjdXJy
ZW50U2xvd1BhdGhUYXJnZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZv
Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjpyZXNldCk6CisgICAgICAgICog
ZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OmdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
dHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0UmVw
bGFjZVN0dWIpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFuc2l0aW9uU3R1Yik6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0
cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNw
cDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChEdW1teU1hcmtIb29rKToKKyAgICAgICAgKEpT
Qzo6RHVtbXlNYXJrSG9vazo6bWFyayk6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3Rz
OjphZGQpOgorICAgICAgICAoQ29tcG9zaXRlTWFya0hvb2spOgorICAgICAgICAoSlNDOjpDb21w
b3NpdGVNYXJrSG9vazo6Q29tcG9zaXRlTWFya0hvb2spOgorICAgICAgICAoSlNDOjpDb21wb3Np
dGVNYXJrSG9vazo6bWFyayk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKENvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBo
ZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAq
IGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhlYXApOgorICAgICAgICAq
IGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAg
ICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjpKSVRTdHViUm91dGluZVNldCk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0Ojp+SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6YWRkKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmVTZXQ6OmNsZWFyTWFya3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
a1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRK
ZXR0aXNvbmVkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6
OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKToKKyAgICAgICAgKiBoZWFwL0pJVFN0dWJSb3V0aW5l
U2V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpJVFN0dWJSb3V0aW5lU2V0
KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6Om1hcmspOgorICAgICAgICAqIGhl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGludGVy
cHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Z2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmls
ZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6OkRlbWFuZEV4ZWN1
dGFibGVBbGxvY2F0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOgorICAgICAgICAq
IGppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6R0NBd2FyZUpJVFN0dWJSb3V0aW5l
KToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+R0NBd2FyZUpJVFN0dWJS
b3V0aW5lKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpkZWxldGVG
cm9tR0MpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHNJbnRlcm5hbCk6CisgICAgICAgIChKU0M6Ok9iamVjdE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmU6Ok9iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAg
ICAoSlNDOjpPYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+T2JqZWN0TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6Ok9iamVjdE1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCk6CisgICAgICAg
IChKU0M6OmNyZWF0ZUpJVFN0dWJSb3V0aW5lKToKKyAgICAgICAgKiBqaXQvR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEdDQXdhcmVKSVRT
dHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1Jl
cXVpcmVkT2JqZWN0cyk6CisgICAgICAgIChPYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKToKKyAgICAgICAgKEpTQzo6T2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6
YWRkT2JqZWN0KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5KSVRTdHVi
Um91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVyb1JlZkNv
dW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91
dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6Y3Jl
YXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmNv
ZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6cmVmKToKKyAgICAgICAgKEpTQzo6
SklUU3R1YlJvdXRpbmU6OmRlcmVmKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnN0
YXJ0QWRkcmVzcyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjplbmRBZGRyZXNzKToK
KyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKToKKyAgICAgICAgKEpT
Qzo6SklUU3R1YlJvdXRpbmU6OmNhblBlcmZvcm1SYW5nZUZpbHRlcik6CisgICAgICAgIChKU0M6
OkpJVFN0dWJSb3V0aW5lOjpmaWx0ZXJpbmdTdGFydEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZTo6ZmlsdGVyaW5nRXh0ZW50U2l6ZSk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpwYXNzZXNGaWx0ZXIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6Cisg
ICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6Z2V0UG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdCk6CisKIDIwMTItMDctMDYgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJLaXQgVmVyc2lvbiA1LjEuNyAo
NjUzNC41Ny4yLCByMTIxOTM1KTogRG91YmxlLWNsaWNrIG5vIGxvbmdlciB3b3JrcyBvbiBPcGVu
U3RyZWV0TWFwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTIx
OTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMTEgQEAKIAkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBC
N0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5j
eUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8q
IERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjc2NkQyODE1QThDQzFFMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjYxNUE4Q0Mx
QjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJMEY3NjZEMkIxNUE4Q0Mz
ODAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5jcHAgKi87IH07CisJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBK
SVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NjZE
MkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRDE1QThEQ0REMDA4
RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJMEY3NjZEMzAxNUE4
RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8q
IEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJ
CTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0IyOTQ4MTRDM0NEMjMwMDdD
M0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJp
bGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg3NSw2ICs4ODAsMTIgQEAK
IAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRo
ID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDI2MTVBOENDMUIwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NzY2RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZVNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHVi
Um91dGluZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyRDE1QThE
Q0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDJFMTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhF
MTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIxIC8q
IERGR0NDYWxsSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdD
Q2FsbEhlbHBlcnMuaDsgcGF0aCA9IGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTIsNiArMTcwMyw4IEBACiAJCQkJQTdCNDhEQjYwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCiAJCQkJODZEQjY0NjMw
Rjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8s
CisJCQkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAgKi8sCisJCQkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91
dGluZS5oICovLAogCQkJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVy
blZhbHVlLmNwcCAqLywKIAkJCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxS
ZXR1cm5WYWx1ZS5oICovLAogCQkJCTE0MjlEOTJEMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3Bw
ICovLApAQCAtMTcxMSw2ICsxNzI0LDggQEAKIAkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIg
LyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovLAogCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5
OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQk5NjA2MjY5NTBGQjhFQzAy
MDA5Nzk4QUIgLyogSklUU3R1YkNhbGwuaCAqLywKKwkJCQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZS5oICovLAogCQkJCTE0QTIzRDZDMEY0RTE5Q0UwMDIzQ0RBRCAv
KiBKSVRTdHVicy5jcHAgKi8sCiAJCQkJMTRBNjU4MUEwRjRFMzZGNDAwMDE1MEZEIC8qIEpJVFN0
dWJzLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmll
ci5oICovLApAQCAtMTc1Miw2ICsxNzY3LDggQEAKIAkJCQkxNEJBN0E5NjEzQUFERkY4MDA1QjdD
MkMgLyogSGVhcC5oICovLAogCQkJCUMyQzhEMDJGMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxv
Y2suaCAqLywKIAkJCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9y
LmggKi8sCisJCQkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCAqLywKKwkJCQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLywKIAkJCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVy
LmggKi8sCiAJCQkJMTQyRTMxMzAxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggKi8sCiAJCQkJ
MTQyRTMxMzExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCAqLywKQEAgLTI4MTUsNiAr
MjgzMiw4IEBACiAJCQkJMEZGNDI3NjUxNTkxQTFDRTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NzIxNTkyNzVEODAwNENCOUZGIC8qIFJlc29s
dmVHbG9iYWxTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcxNjhDMTVBM0IyMzUwMDhG
NURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMkMxNUE4
Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
Rjc2NkQzMDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTM0MDcsNiArMzQyNiw5IEBACiAJCQkJQzJENThDMzQxNTkxMkZFRTAwMjFB
ODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2
NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjQyNzcxMTU5Mjc1RDUwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91
dGluZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyog
SklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3NjZEMkYxNUE4RENF
MDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZp
c2lvbiAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBJbnN0cnVjdGlv
bl9oCiAjZGVmaW5lIEluc3RydWN0aW9uX2gKIAorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgi
CiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eVNsb3QuaCIKQEAgLTUyLDggKzUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgc3RydWN0IFZhbHVlUHJvZmlsZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJv
dXRpbmVUeXBlOwotCiAgICAgLy8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZf
bGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRh
IG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgogICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTYx
LDcgKzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0cnVjdCBQb2x5bW9ycGhpY1N0
dWJJbmZvIHsKICAgICAgICAgICAgIGJvb2wgaXNDaGFpbjsKICAgICAgICAgICAgIGJvb2wgaXNE
aXJlY3Q7Ci0gICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91
dGluZVR5cGUgc3R1YlJvdXRpbmU7CisgICAgICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFzZTsK
ICAgICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4gcHJvdG87CkBAIC03Myw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgICAgIHUucHJvdG8uY2xlYXIoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
dm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1
Y3R1cmUqIF9iYXNlLCBib29sIGlzRGlyZWN0KQorICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7CiAg
ICAgICAgICAgICAgICAgYmFzZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKQEAgLTgy
LDcgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgdGhpcy0+aXNEaXJl
Y3QgPSBpc0RpcmVjdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
dm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1
Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90bywgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAg
ICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFz
c1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBT
dHJ1Y3R1cmUqIF9wcm90bywgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKICAgICAgICAgICAgICAgICBiYXNl
LnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpAQCAtOTEsNyArOTAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgICAgICB0aGlzLT5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVj
dHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4q
IF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBz
dHViUm91dGluZSA9IF9zdHViUm91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9i
YWxEYXRhLCBvd25lciwgX2Jhc2UpOwpAQCAtMTA1LDE3ICsxMDQsMTcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25l
ciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0
aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0
WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgaXNEaXJl
Y3QpOwogICAgICAgICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZp
cnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZSogZmlyc3RQcm90bywgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgewogICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0
dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0UHJvdG8sIGlzRGlyZWN0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0
dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJz
dEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRp
bmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwgaXNEaXJlY3QpOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
UHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgUHV0QnlJZEFjY2VzcyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQog
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOgogICAgICAgICByZXN1bHQubV90eXBl
ID0gUmVwbGFjZTsKICAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJ
bmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3Vs
dC5tX3N0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoaW5pdGlhbFNsb3dQYXRoKTsKKyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUg
PSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0
aCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDEyMTkyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAg
ICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWJSb3V0aW5lKQorICAgICAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Um91dGluZSkKICAgICB7CiAgICAgICAgIFB1dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICBy
ZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAg
ICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBSZXBsYWNlOwpAQCAtMTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7CiAgICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZSgpIGNvbnN0CisgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlv
bigpIHx8IGlzUmVwbGFjZSgpKTsKICAgICAgICAgcmV0dXJuIG1fc3R1YlJvdXRpbmU7CkBAIC0x
MzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29s
ZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47Ci0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG1fc3R1YlJvdXRpbmU7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBt
X3N0dWJSb3V0aW5lOwogfTsKIAogY2xhc3MgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7CkBAIC0x
NjEsNyArMTYxLDcgQEAgcHVibGljOgogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
dXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlz
dC5sYXN0KCkuc3R1YlJvdXRpbmUoKS5jb2RlKCk7CisgICAgICAgIHJldHVybiBtX2xpc3QubGFz
dCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5jb2RlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
YWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nlc3MmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMjE5
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUu
aCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTY4LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB7CiAgICAgICAgICAgICBkZXJlZigpOwogICAgICAgICAgICAgYWNjZXNzVHlwZSA9
IGFjY2Vzc191bnNldDsKLSAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKCk7CisgICAgICAgICAgICBzdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBkZXJlZigpOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgfSBwdXRCeUlkTGlzdDsKICAgICAgICAgfSB1OwogCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJu
TG9jYXRpb247CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lv
biAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdDQ2FsbEhlbHBl
cnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgorI2luY2x1ZGUgIkdDQXdhcmVK
SVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgpAQCAtMTA2LDcg
KzEwNyw3IEBAIHN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBs
aW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNj
ZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJS
b3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwg
c2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIApAQCAt
MTY2LDcgKzE2Nyw3IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIK
ICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nh
c2VMYWJlbCk7CiAgICAgCi0gICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIs
CiAgICAgICAgICgiREZHIHByb3RvdHlwZSBjaGFpbiBhY2Nlc3Mgc3R1YiBmb3IgQ29kZUJsb2Nr
ICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN1Y2Nl
c3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CkBAIC0yMjAsMTQgKzIyMSwxNCBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBs
aW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHVi
SW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgc3R1YkluZm8uc3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIsCiAgICAgICAgICAgICAoIkRGRyBHZXRCeUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CiAgICAgICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUo
KSkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENo
ZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMjc2LDcgKzI3Nyw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBw
cm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CiAg
ICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVp
bGRMaXN0KTsKICAgICAKICAgICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRh
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
LCBjb3VudCwgdHJ1ZSk7CkBAIC0zMjMsNyArMzI0LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRH
ZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICBsaXN0SW5kZXggPSAwOwogICAgIH0gZWxzZSBp
ZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAg
ICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERh
dGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0
dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0
cnVlKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICBsaXN0SW5kZXggPSAxOwogICAgIH0gZWxzZSB7CkBA
IC00MzMsNyArNDM0LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dAogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW47CiAg
ICAgICAgIGlmIChsaXN0SW5kZXgpCi0gICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAx
XS5zdHViUm91dGluZS5jb2RlKCkpOworICAgICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKICAgICAgICAgQVNT
RVJUKCEhbGFzdFByb3RvQmVnaW4pOwpAQCAtNDQ1LDE3ICs0NDYsMjQgQEAgc3RhdGljIGJvb2wg
dHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1Yik7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREUoCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZH
IEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJu
IHBvaW50ICVwIiwKLSAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPQorICAgICAgICAgICAg
Y3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAg
ICAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICgiREZH
IEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBhY2Nlc3MgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJu
IHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRk
cmVzcygpKSksCisgICAgICAgICAgICAgICAgKmdsb2JhbERhdGEsCisgICAgICAgICAgICAgICAg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICBzbG90LmNhY2hl
ZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6R2V0dGVyCisgICAgICAgICAgICAgICAg
fHwgc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkN1c3RvbSwKKyAg
ICAgICAgICAgICAgICAwKTsKICAgICAgICAgCiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgICAgICAK
ICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5OSw3
ICs1MDcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAg
aWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewogICAg
ICAgICBBU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5l
LCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHVi
SW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZv
LnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0dWJJbmZv
LnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9M
aXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
QVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0
KTsKQEAgLTUxMCwxMCArNTE4LDEwIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3Rv
TGlzdChFeGUKICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpF
KSB7CiAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOwogICAg
ICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9j
YXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3Rv
QmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgICAgICBBU1NF
UlQoISFsYXN0UHJvdG9CZWdpbik7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0
dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwog
ICAgICAgICAKICAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHVi
SW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAgIApAQCAt
NTIxLDcgKzUyOSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUK
ICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVs
dGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC01ODEsNyArNTg5LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAg
IFB1dEtpbmQsCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJvdXRpbmUp
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOwpA
QCAtNjU1LDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAKLSAgICBz
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJERkcgUHV0QnlJ
ZCByZXBsYWNlIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAg
ICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgKQEAgLTY3Myw3ICs2ODEsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlv
blN0dWIoCiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgU3RydWN0dXJlQ2hhaW4q
IHByb3RvdHlwZUNoYWluLAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJlbCwKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorICAgIFJlZlB0cjxKSVRTdHVi
Um91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTc1NCw4ICs3NjIsOCBAQCBzdGF0aWMgdm9pZCBl
bWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwg
ZmFpbHVyZUxhYmVsKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1YlJvdXRpbmUgPSBG
SU5BTElaRV9DT0RFKAorICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIFB1dEJ5SWQgdHJhbnNp
dGlvbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCkBAIC03OTksNyArODA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNT
dGF0ZSogZQogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7
Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENo
ZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7Cisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRy
YW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0
cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJlY3QpOwpA
QCAtODQxLDcgKzg0OSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0
YXQKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICBpZiAoc2xvdC5iYXNlKCkgPT0g
YmFzZVZhbHVlKSB7CiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzbG90LnR5
cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKQEAgLTg4OCw3ICs4OTYsNyBAQCBzdGF0aWMgYm9v
bCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3QtPmlzRnVsbCgp
KQogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJv
b3RzLmNwcAkocmV2aXNpb24gMTIxOTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsNiBAQCB2
b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkKICAgICBtX3Jvb3RzID0gbmV3Um9vdHM7CiB9
CiAKLWNsYXNzIER1bW15TWFya0hvb2sgewotcHVibGljOgotICAgIHZvaWQgbWFyayh2b2lkKikg
eyB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KIGlubGluZSB2b2lkIENvbnNl
cnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55Qmxvb21GaWx0ZXIg
ZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CkBAIC0xMTAsMTUgKzEwNSw0OCBAQCB2b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAgICAgICAgIGdlbmVyaWNBZGRQ
b2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAKK2NsYXNzIER1bW15TWFya0hvb2sg
eworcHVibGljOgorICAgIHZvaWQgbWFyayh2b2lkKikgeyB9Cit9OworCiB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCkKIHsKLSAgICBEdW1teU1hcmtI
b29rIGhvb2s7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaG9vayk7CisgICAgRHVt
bXlNYXJrSG9vayBkdW1teTsKKyAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBkdW1teSk7
CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5k
LCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9pZCBDb25zZXJ2YXRpdmVSb290czo6
YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91
dGluZXMpCit7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaml0U3R1YlJvdXRpbmVz
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIENvbXBvc2l0
ZU1hcmtIb29rIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVNYXJrSG9vayhUJiBmaXJzdCwgVSYg
c2Vjb25kKQorICAgICAgICA6IG1fZmlyc3QoZmlyc3QpCisgICAgICAgICwgbV9zZWNvbmQoc2Vj
b25kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBtX2ZpcnN0Lm1hcmsoYWRkcmVzcyk7CisgICAgICAgIG1fc2Vjb25kLm1h
cmsoYWRkcmVzcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFQmIG1fZmlyc3Q7CisgICAgVSYg
bV9zZWNvbmQ7Cit9OworCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCisgICAgdm9pZCog
YmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZH
Q29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwg
ZW5kLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBDb21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGlu
ZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hvb2soCisgICAgICAgIGppdFN0dWJSb3V0aW5lcywg
ZGZnQ29kZUJsb2Nrcyk7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFya0hvb2sp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTIxOTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsOSArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTQ2VsbDsKIGNs
YXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBIZWFwOworY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7
CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1YmxpYzoKQEAg
LTQyLDcgKzQzLDggQEAgcHVibGljOgogICAgIH5Db25zZXJ2YXRpdmVSb290cygpOwogCiAgICAg
dm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7Ci0gICAgdm9pZCBhZGQodm9pZCogYmVn
aW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYpOworICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2lu
LCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0Jik7CisgICAgdm9pZCBhZGQodm9pZCogYmVn
aW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CiAgICAg
CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNiArNDIwLDcg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgLy8gV2UgZ2F0aGVyIGNv
bnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2UgY29uc2Vy
dmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRlcm1pbmUg
d2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290cyBtYWNo
aW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0b3JhZ2VTcGFjZSk7
CisgICAgbV9qaXRTdHViUm91dGluZXMuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAgICAgR0NQ
SEFTRShHYXRoZXJDb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgIG1fbWFjaGluZVRocmVhZHMu
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkpOwpAQCAt
NDI5LDcgKzQzMCw4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhl
clJlZ2lzdGVyRmlsZVJvb3RzKTsKLSAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMsIG1fZGZnQ29kZUJsb2Nrcyk7CisgICAgICAg
IHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAorICAgICAgICAgICAgcmVn
aXN0ZXJGaWxlUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2RmZ0NvZGVCbG9ja3MpOwogICAg
IH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNTQwLDkgKzU0MiwxMCBAQCB2b2lkIEhlYXA6
Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgfQogICAgIAogICAgICAgICB7Ci0gICAg
ICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBNQVJLX0xPR19S
T09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyIpOworICAgICAgICAgICAgR0NQSEFTRShU
cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOworICAgICAgICAgICAgTUFSS19MT0df
Uk9PVCh2aXNpdG9yLCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzIik7
CiAgICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tzKHZpc2l0
b3IpOworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMudHJhY2VNYXJrZWRTdHViUm91dGlu
ZXModmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiAgICAg
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDEy
MTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRl
ICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgorI2luY2x1ZGUgIkpJVFN0
dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
TWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtNDQsMTAgKzQ1
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBjbGFzcyBF
eGVjdXRhYmxlQmFzZTsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CisgICAgY2xhc3Mg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsKICAgICBj
bGFzcyBIZWFwOwogICAgIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKICAgICBjbGFzcyBJbmNyZW1l
bnRhbFN3ZWVwZXI7CisgICAgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgY2xhc3MgSlNDZWxs
OwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU1ZhbHVlOwpAQCAtMTY4LDYg
KzE3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIENvZGVCbG9jazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91
dGluZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xhc3MgTWFy
a2VkU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CkBAIC0yMjks
NiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhbmRsZVNldCBtX2hhbmRsZVNl
dDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICAgICAgREZHQ29kZUJs
b2NrcyBtX2RmZ0NvZGVCbG9ja3M7CisgICAgICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1faml0U3R1
YlJvdXRpbmVzOwogICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVyOwogICAg
ICAgICAKICAgICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRTdHVi
Um91dGluZVNldC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkdDQXdhcmVKSVRT
dHViUm91dGluZS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitKSVRTdHViUm91dGluZVNldDo6SklUU3R1YlJvdXRpbmVTZXQoKSB7IH0KK0pJVFN0dWJS
b3V0aW5lU2V0Ojp+SklUU3R1YlJvdXRpbmVTZXQoKSB7IH0KKwordm9pZCBKSVRTdHViUm91dGlu
ZVNldDo6YWRkKEdDQXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSkKK3sKKyAgICBBU1NFUlQo
IXJvdXRpbmUtPm1faXNKZXR0aXNvbmVkKTsKKyAgICAKKyAgICBtX2xpc3RPZlJvdXRpbmVzLmFw
cGVuZChyb3V0aW5lKTsKKyAgICAKKyAgICB1aW50cHRyX3Qgc3RhcnQgPSByb3V0aW5lLT5zdGFy
dEFkZHJlc3MoKTsKKyAgICB1aW50cHRyX3QgZW5kID0gcm91dGluZS0+ZW5kQWRkcmVzcygpOwor
ICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7CisgICAg
Zm9yICh1aW50cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9IHN0ZXApIHsK
KyAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpID09IG1fYWRk
cmVzc1RvUm91dGluZU1hcC5lbmQoKSk7CisgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5h
ZGQoaXRlciwgcm91dGluZSk7CisgICAgfQorfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojpj
bGVhck1hcmtzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5zaXpl
KCk7IGktLTspCisgICAgICAgIG1fbGlzdE9mUm91dGluZXNbaV0tPm1fbWF5QmVFeGVjdXRpbmcg
PSBmYWxzZTsKK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6bWFya1Nsb3codWludHB0cl90
IGFkZHJlc3MpCit7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIEdDQXdhcmVKSVRTdHViUm91dGlu
ZSo+OjppdGVyYXRvciBpdGVyID0KKyAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQo
YWRkcmVzcyAmIH4oSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCkgLSAxKSk7CisgICAgCisg
ICAgaWYgKGl0ZXIgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaXRlci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKK30K
Kwordm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJv
dXRpbmVzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gbV9saXN0
T2ZSb3V0aW5lc1tpXTsKKyAgICAgICAgaWYgKCFyb3V0aW5lLT5tX2lzSmV0dGlzb25lZCB8fCBy
b3V0aW5lLT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSByb3V0aW5lLT5zdGFydEFkZHJlc3MoKTsKKyAg
ICAgICAgdWludHB0cl90IGVuZCA9IHJvdXRpbmUtPmVuZEFkZHJlc3MoKTsKKyAgICAgICAgdWlu
dHB0cl90IHN0ZXAgPSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKKyAgICAgICAgZm9y
ICh1aW50cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9IHN0ZXApIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKSAhPSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1Rv
Um91dGluZU1hcC5maW5kKGl0ZXIpLT5zZWNvbmQgPT0gcm91dGluZSk7CisgICAgICAgICAgICBt
X2FkZHJlc3NUb1JvdXRpbmVNYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByb3V0aW5lLT5kZWxldGVGcm9tR0MoKTsKKyAgICAgICAgCisgICAgICAgIG1fbGlz
dE9mUm91dGluZXNbaV0gPSBtX2xpc3RPZlJvdXRpbmVzLmxhc3QoKTsKKyAgICAgICAgbV9saXN0
T2ZSb3V0aW5lcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIGktLTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsg
aS0tOykgeworICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBtX2xpc3RP
ZlJvdXRpbmVzW2ldOworICAgICAgICBpZiAoIXJvdXRpbmUtPm1fbWF5QmVFeGVjdXRpbmcpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPm1hcmtSZXF1
aXJlZE9iamVjdHModmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0pJVFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKSVRTdHViUm91dGluZVNldF9oCisjZGVmaW5lIEpJVFN0dWJSb3V0aW5lU2V0X2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKK2NsYXNzIFNsb3RWaXNpdG9y
OworCitjbGFzcyBKSVRTdHViUm91dGluZVNldCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SklUU3R1YlJvdXRpbmVTZXQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1Ymxp
YzoKKyAgICBKSVRTdHViUm91dGluZVNldCgpOworICAgIH5KSVRTdHViUm91dGluZVNldCgpOwor
ICAgIAorICAgIHZvaWQgYWRkKEdDQXdhcmVKSVRTdHViUm91dGluZSopOworCisgICAgdm9pZCBj
bGVhck1hcmtzKCk7CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUFkZHJlc3Mp
CisgICAgeworICAgICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKKyAgICAgICAgaWYgKCFKSVRTdHViUm91dGluZTo6
cGFzc2VzRmlsdGVyKGFkZHJlc3MpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgbWFya1Nsb3coYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlVW5t
YXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CisgICAgCisgICAgdm9pZCB0cmFjZU1hcmtl
ZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIG1h
cmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKKyAgICAKKyAgICBIYXNoTWFwPHVpbnRwdHJfdCwg
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKj4gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwOworICAgIFZlY3Rv
cjxHQ0F3YXJlSklUU3R1YlJvdXRpbmUqPiBtX2xpc3RPZlJvdXRpbmVzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSklUU3R1
YlJvdXRpbmVTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24gMTIxOTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBIZWFwOwogICAgIGNsYXNz
IENvbnNlcnZhdGl2ZVJvb3RzOworICAgIGNsYXNzIEhlYXA7CiAKICAgICBjbGFzcyBNYWNoaW5l
VGhyZWFkcyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hY2hpbmVUaHJlYWRzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
ckZpbGUuY3BwCShyZXZpc2lvbiAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBA
QCB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vCiAgICAgY29uc2VydmF0
aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpKTsKIH0KIAotdm9pZCBSZWdpc3RlckZpbGU6Omdh
dGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290
cywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMs
IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0Nv
ZGVCbG9ja3MpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpLCBk
ZmdDb2RlQmxvY2tzKTsKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCks
IGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQgUmVnaXN0ZXJGaWxl
OjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkocmV2aXNpb24gMTIxOTI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29uc2Vy
dmF0aXZlUm9vdHM7CiAgICAgY2xhc3MgREZHQ29kZUJsb2NrczsKKyAgICBjbGFzcyBKSVRTdHVi
Um91dGluZVNldDsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBjbGFz
cyBSZWdpc3RlckZpbGUgewpAQCAtNjQsNyArNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgflJlZ2lzdGVyRmlsZSgpOwogICAgICAgICAKICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgREZHQ29kZUJsb2NrcyYpOworICAgICAg
ICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1
YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CiAKICAgICAgICAgUmVnaXN0ZXIqIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJh
c2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yIDogcHVibGlj
IE1ldGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQotICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcworICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51
bGUpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKGFsbG9jYXRvcnNNdXRleCgpKTsK
ICAgICAgICAgYWxsb2NhdG9ycygpLmFkZCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxMjE5MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTR2xvYmFs
RGF0YTsKIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJik7CiAKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBqaXRBbGxvY2F0aW9uR3JhbnVsZSA9IDMyOworCiBpbmxpbmUg
c2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplX3QgcmVxdWVzdCwgc2l6ZV90IGdyYW51
bGFyaXR5KQogewogICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAt
IGdyYW51bGFyaXR5KSA8PSByZXF1ZXN0KQpAQCAtMTAxLDYgKzEwMywxOCBAQCB0eXBlZGVmIFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhCiBjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxs
b2NhdG9yOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQp
CisjaWYgQ1BVKEFSTSkKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OworI2VsaWYgQ1BVKFg4Nl82NCkKK3N0YXRpYyBj
b25zdCBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAq
IDEwMjQ7CisjZWxzZQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKKworZXh0ZXJuIHVpbnRwdHJfdCBz
dGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKKyNlbmRpZgorCiBjbGFzcyBFeGVjdXRh
YmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4
ZWN1dGFibGUgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gMTIx
OTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4
ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyNyArNDUsMjMgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jaWYgQ1BVKEFSTSkKLXN0YXRp
YyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7Ci0jZWxpZiBD
UFUoWDg2XzY0KQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTAyNCAqIDEw
MjQgKiAxMDI0OwotI2Vsc2UKLXN0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDMy
ICogMTAyNCAqIDEwMjQ7Ci0jZW5kaWYKK3VpbnRwdHJfdCBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbDsKIAogY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIDogcHVi
bGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFs
bG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0
aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAg
ewotICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1
YXJkUGFnZXMoZml4ZWRQb29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVD
VVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFn
ZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dS
SVRBQkxFLCB0cnVlKTsKICNpZiAhKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBFTkFC
TEUoTExJTlQpKQogICAgICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFT
SCgpOwogI2VuZGlmCiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBB
U1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0gZml4ZWRQb29sU2l6ZSk7CisgICAgICAgICAg
ICBBU1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bFNpemUpOwogICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNlcnZhdGlvbi5iYXNl
KCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorCisjaWYgRU5BQkxFKEpJVCkK
KworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmUoCisgICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgOiBKSVRTdHViUm91dGluZShjb2RlKQorICAgICwgbV9tYXlCZUV4ZWN1dGluZyhmYWxz
ZSkKKyAgICAsIG1faXNKZXR0aXNvbmVkKGZhbHNlKQoreworICAgIGdsb2JhbERhdGEuaGVhcC5t
X2ppdFN0dWJSb3V0aW5lcy5hZGQodGhpcyk7Cit9CisgICAgCitHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKSB7IH0KKwordm9pZCBHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQoKQoreworICAgIGlmIChtX2lzSmV0dGlzb25lZCkg
eworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBtX2lzSmV0dGlzb25lZCA9IHRydWU7CisgICAgbV9yZWZDb3VudCA9IDE7IC8vIFJldml2ZSB0
aGUgb2JqZWN0LiBJdCdzIG5vdyBvd25lZCBieSB0aGUgR0MuCit9CisKK3ZvaWQgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjpkZWxldGVGcm9tR0MoKQoreworICAgIEFTU0VSVChtX2lzSmV0dGlzb25l
ZCk7CisgICAgQVNTRVJUKG1fcmVmQ291bnQgPT0gMSk7CisgICAgQVNTRVJUKCFtX21heUJlRXhl
Y3V0aW5nKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCit7Cit9CisKK09i
amVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Ok9iamVjdE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwg
Z2xvYmFsRGF0YSkKK3sKK30KKworT2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZTo6
fk9iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKQoreworfQorCit2b2lkIE9iamVj
dE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9vYmplY3Rz
LnNpemUoKTsgaS0tOykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fb2JqZWN0c1tpXSk7Cit9
CisKK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsCisgICAgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBib29sIG1ha2VzQ2FsbHMs
CisgICAgLi4uKQoreworICAgIGlmICghbWFrZXNDYWxscykKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKSVRTdHViUm91dGluZShjb2RlKSk7CisgICAgCisgICAgdmFfbGlzdCBhcmdMaXN0
OworICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIG1ha2VzQ2FsbHMpOworICAgIEpTQ2VsbCogZmlyc3Qg
PSB2YV9hcmcoYXJnTGlzdCwgSlNDZWxsKik7CisgICAgaWYgKCFmaXJzdCkKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgZ2xvYmFsRGF0YSkp
OworICAgIAorICAgIFBhc3NSZWZQdHI8T2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGlu
ZT4gcmVzdWx0ID0KKyAgICAgICAgYWRvcHRSZWYobmV3IE9iamVjdE1hcmtpbmdHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoY29kZSwgZ2xvYmFsRGF0YSkpOworICAgIAorICAgIHJlc3VsdC0+YWRkT2Jq
ZWN0KGdsb2JhbERhdGEsIG93bmVyLCBmaXJzdCk7CisgICAgCisgICAgZm9yICg7OykgeworICAg
ICAgICBKU0NlbGwqIG5leHQgPSB2YV9hcmcoYXJnTGlzdCwgSlNDZWxsKik7CisgICAgICAgIGlm
ICghbmV4dCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXN1bHQtPmFkZE9iamVjdChn
bG9iYWxEYXRhLCBvd25lciwgbmV4dCk7CisgICAgfQorICAgIAorICAgIHZhX2VuZChhcmdMaXN0
KTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxHQ0F3YXJlSklUU3R1YlJv
dXRpbmU+KHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdh
cmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVfaAorI2RlZmluZSBHQ0F3YXJlSklUU3R1YlJvdXRpbmVf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5j
bHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OworCisvLyBVc2UgdGhpcyBzdHVi
IHJvdXRpbmUgaWYgeW91IGtub3cgdGhhdCB5b3VyIGNvZGUgbWlnaHQgYmUgb24gc3RhY2sgd2hl
bgorLy8gZWl0aGVyIEdDIG9yIG90aGVyIGtpbmRzIG9mIHN0dWIgZGVsZXRpb24gaGFwcGVuLiBC
YXNpY2FseSwgaWYgeW91ciBzdHViCisvLyByb3V0aW5lIG1ha2VzIGNhbGxzIChlaXRoZXIgdG8g
SlMgY29kZSBvciB0byBDKysgY29kZSkgdGhlbiB5b3Ugc2hvdWxkCisvLyBhc3N1bWUgdGhhdCBp
dCdzIHBvc3NpYmxlIGZvciB0aGF0IEpTIG9yIEMrKyBjb2RlIHRvIGRvIHNvbWV0aGluZyB0aGF0
CisvLyBjYXVzZXMgdGhlIHN5c3RlbSB0byB0cnkgdG8gZGVsZXRlIHlvdXIgcm91dGluZS4gVXNp
bmcgdGhpcyByb3V0aW5lIHR5cGUKKy8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIGRlbGV0aW9u
IGlzIGRlbGF5ZWQgdW50aWwgdGhlIEdDIHByb3ZlcyB0aGF0IHRoZQorLy8gcm91dGluZSBpcyBu
byBsb25nZXIgcnVubmluZy4gWW91IGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMgcm91dGluZSBpZiB5
b3UKKy8vIHdhbnQgdG8gbWFyayBhZGRpdGlvbmFsIG9iamVjdHMgZHVyaW5nIEdDIGluIHRob3Nl
IGNhc2VzIHdoZXJlIHRoZQorLy8gcm91dGluZSBpcyBrbm93biB0byBiZSBleGVjdXRpbmcsIG9y
IGlmIHlvdSB3YW50IHRvIGZvcmNlIHRoaXMgcm91dGluZSB0bworLy8ga2VlcCBvdGhlciByb3V0
aW5lcyBhbGl2ZSAoZm9yIGV4YW1wbGUgZHVlIHRvIHRoZSB1c2Ugb2YgYSBzbG93LXBhdGgKKy8v
IGxpc3Qgd2hpY2ggZG9lcyBub3QgZ2V0IHJlY2xhaW1lZCBhbGwgYXQgb25jZSkuCitjbGFzcyBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUgOiBwdWJsaWMgSklUU3R1YlJvdXRpbmUgeworcHVibGljOgor
ICAgIEdDQXdhcmVKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBK
U0dsb2JhbERhdGEmKTsKKyAgICB2aXJ0dWFsIH5HQ0F3YXJlSklUU3R1YlJvdXRpbmUoKTsKKyAg
ICAKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisg
ICAgeworICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRvcik7CisgICAg
fQorICAgIAorICAgIHZvaWQgZGVsZXRlRnJvbUdDKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OworCisgICAgYm9vbCBtX21heUJl
RXhlY3V0aW5nOworICAgIGJvb2wgbV9pc0pldHRpc29uZWQ7Cit9OworCisvLyBVc2UgdGhpcyBp
ZiB5b3Ugd2FudCB0byBtYXJrIGFkZGl0aW9uYWwgb2JqZWN0cyBkdXJpbmcgR0MgaWYgeW91ciBz
dHViCisvLyByb3V0aW5lIGlzIGtub3duIHRvIGJlIGV4ZWN1dGluZy4KK2NsYXNzIE9iamVjdE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5l
IHsKK3B1YmxpYzoKKyAgICBPYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYpOworICAgIHZpcnR1YWwgfk9i
amVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICB2b2lkIGFkZE9i
amVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2Vs
bCogdmFsdWUpCisgICAgeworICAgICAgICBtX29iamVjdHMuYXBwZW5kKFdyaXRlQmFycmllcjxK
U0NlbGw+KGdsb2JhbERhdGEsIG93bmVyLCB2YWx1ZSkpOworICAgIH0KKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNp
dG9yJik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0Owor
ICAgIAorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiA+IG1fb2JqZWN0czsKK307CisK
Ky8vIEhlbHBlciBmb3IgZWFzaWx5IGNyZWF0aW5nIGEgR0MtYXdhcmUgSklUIHN0dWIgcm91dGlu
ZS4gRm9yIHRoZSB2YXJhcmdzLAorLy8gcGFzcyB6ZXJvIG9yIG1vcmUgSlNDZWxsKidzIHRlcm1p
bmF0ZWQgYnkgMC4gVGhpcyB3aWxsIGVpdGhlciBjcmVhdGUgYQorLy8gSklUU3R1YlJvdXRpbmUs
IGEgR0NBd2FyZUpJVFN0dWJSb3V0aW5lLCBvciBhbgorLy8gT2JqZWN0TWFya2luZ0dDQXdhcmVK
SVRTdHViUm91dGluZSBhcyBhcHByb3ByaWF0ZS4gR2VuZXJhbGx5IHlvdSBvbmx5CisvLyBuZWVk
IHRvIHBhc3MgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlIGZpcnN0IGNhbGwg
dG8gQysrIG9yCisvLyBKUy4KK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0
dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBi
b29sIG1ha2VzQ2FsbHMsCisgICAgLi4uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gR0NBd2FyZUpJVFN0dWJSb3V0aW5lX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDEyMTkyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKQEAgLTU5NCwxMiArNTk1
LDE4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAg
ICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciBDb2RlQmxvY2sgJXAsIHJldHVy
biBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisg
ICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
ICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9yIENvZGVCbG9jayAlcCwgcmV0
dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52
YWx1ZSgpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYywKKyAgICAg
ICAgbmV3U3RydWN0dXJlLAorICAgICAgICAwKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFt
cG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91
dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGlu
ZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQpAQCAtNjU2LDcgKzY2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQg
c28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERSgKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJCYXNsaW5l
IEpJVCBnZXRfYnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJu
IHBvaW50ICVwIiwKICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoCkBAIC02NjUsNyArNjcyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xv
dyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENv
ZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8t
PnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0g
aW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC03MjMsMTYgKzczMCwyMSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ly8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxl
dGVkIGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0g
ICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgcHJv
dG8gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9j
b2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAg
ICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJv
dXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmssCisgICAgICAgIDApOwogCiAgICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1
dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Qp
KTsKQEAgLTc3NSw3ICs3ODcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoCiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5r
IHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5l
LgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4p
CiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdp
bik7CiAKQEAgLTc4NCwxOCArNzk2LDIzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQp
KTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IEZJTkFMSVpFX0NPREUo
Ci0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQg
bGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBt
X2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViQ29kZSA9
IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlz
dCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmssCisgICAg
ICAgIDApOwogCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNv
ZGUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVt
cCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQu
CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJl
Q2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViQ29kZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVy
ZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHBy
b3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKQEAgLTg0NywyNCArODY0LDI5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90b0xpc3QKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRv
IGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJv
dXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRp
b25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJS
b3V0aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBD
b2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAt
IDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZh
aWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1
cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnB1dFJlc3VsdCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2Rl
ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxp
bmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJu
IHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUu
Z2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFBhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJDb2RlID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJ
TkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFz
ZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0
dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAg
ICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwK
KyAgICAgICAgbmVlZHNTdHViTGluaywKKyAgICAgICAgMCk7CiAgICAgcHJvdG90eXBlU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVy
ZSwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2Rl
KCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJDb2RlLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJy
ZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNp
emVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
QEAgLTkyMCwxOCArOTQyLDIzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFp
bkxpc3QKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJl
bChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5l
LmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9j
YXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0
c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9i
eV9pZCBjaGFpbiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NP
REUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklU
IGdldF9ieV9pZCBjaGFpbiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50
ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2Jh
bERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAg
bmVlZHNTdHViTGluaywKKyAgICAgICAgMCk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBo
YXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCiAgICAgcHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwpAQCAtOTM5LDcgKzk2Niw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
ICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVD
aGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAog
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6
ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05OTgsMTcgKzEwMjUsMjIgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBz
dHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAg
ICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZm
ZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAg
ICBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIs
CisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgQ29k
ZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rLAorICAgICAgICAwKTsKICAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGlu
IGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKworI2lmIEVOQUJMRShK
SVQpCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworSklUU3R1YlJvdXRpbmU6On5KSVRTdHViUm91dGluZSgpIHsgfQor
Cit2b2lkIEpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVyb1JlZkNvdW50KCkKK3sKKyAgICBBU1NF
UlQoIW1fcmVmQ291bnQpOworICAgIGRlbGV0ZSB0aGlzOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SklUU3R1YlJvdXRpbmVfaAorI2RlZmluZSBKSVRTdHViUm91dGluZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworLy8gVGhpcyBpcyBhIGJhc2Ut
Y2xhc3MgZm9yIEpJVCBzdHViIHJvdXRpbmVzLCBhbmQgYWxzbyB0aGUgY2xhc3MgeW91IHdhbnQK
Ky8vIHRvIGluc3RhbnRpYXRlIGRpcmVjdGx5IGlmIHlvdSBoYXZlIGEgcm91dGluZSB0aGF0IGRv
ZXMgbm90IG5lZWQgYW55CisvLyBoZWxwIGZyb20gdGhlIEdDLiBJZiBpbiBkb3VidCwgdXNlIG9u
ZSBvZiB0aGUgb3RoZXIgc3R1YiByb3V0aW5lcy4gQnV0CisvLyBpZiB5b3Uga25vdyBmb3Igc3Vy
ZSB0aGF0IHRoZSBzdHViIHJvdXRpbmUgY2Fubm90IGJlIG9uIHRoZSBzdGFjayB3aGlsZQorLy8g
c29tZW9uZSB0cmlnZ2VycyBhIHN0dWIgcm91dGluZSByZXNldCwgdGhlbiB1c2luZyB0aGlzIHdp
bGwgc3BlZWQgdXAKKy8vIG1lbW9yeSByZWNsYW1hdGlvbi4gT25lIGNhc2Ugd2hlcmUgYSBzdHVi
IHJvdXRpbmUgc2F0aXNmaWVzIHRoaXMKKy8vIGNvbmRpdGlvbiBpcyBpZiBpdCBkb2Vzbid0IG1h
a2UgYW55IGNhbGxzLCB0byBlaXRoZXIgQysrIG9yIEpTIGNvZGUuIEluCisvLyBzdWNoIGEgcm91
dGluZSB5b3Uga25vdyB0aGF0IGl0IGNhbm5vdCBiZSBvbiB0aGUgc3RhY2sgd2hlbiBhbnl0aGlu
ZworLy8gaW50ZXJlc3RpbmcgaGFwcGVucy4KKy8vIFNlZSBHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCBmb3IgdGhlIG90aGVyIHN0dWIgcm91dGluZXMuCitjbGFzcyBKSVRTdHViUm91dGluZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSklUU3R1YlJvdXRpbmUpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9yZWZD
b3VudCgxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgaWYgeW91IHdhbnQg
dG8gcGFzcyBhIENvZGVQdHIgdG8gc29tZW9uZSB3aG8gaW5zaXN0cyBvbiB0YWtpbmcKKyAgICAv
LyBhIFJlZlB0cjxKSVRTdHViUm91dGluZT4uCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJhd0NvZGVQb2ludGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+
SklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICAvLyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaXMg
Y29weWFibGUsIGJ1dCBhdCB0aGUgY29zdCBvZiByZWZlcmVuY2UKKyAgICAvLyBjb3VudGluZyBj
aHVybi4gUmV0dXJuaW5nIGEgcmVmZXJlbmNlIGlzIGEgZ29vZCB3YXkgb2YgcmVkdWNpbmcKKyAg
ICAvLyB0aGUgY2h1cm4uCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgCisgICAgdm9pZCByZWYoKQorICAgIHsKKyAg
ICAgICAgbV9yZWZDb3VudCsrOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7
CisgICAgICAgIGlmICgtLW1fcmVmQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG9ic2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICB9CisgICAgCisgICAgLy8gSGVscGVycyBmb3Ig
dGhlIEdDIHRvIGRldGVybWluZSBob3cgdG8gZGVhbCB3aXRoIG1hcmtpbmcgSklUIHN0dWIKKyAg
ICAvLyByb3V0aW5lcy4KKyAgICB1aW50cHRyX3Qgc3RhcnRBZGRyZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnRBc0ludGVnZXIoKTsgfQorICAgIHVp
bnRwdHJfdCBlbmRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLmV4ZWN1dGFibGVNZW1v
cnkoKS0+ZW5kQXNJbnRlZ2VyKCk7IH0KKyAgICBzdGF0aWMgdWludHB0cl90IGFkZHJlc3NTdGVw
KCkgeyByZXR1cm4gaml0QWxsb2NhdGlvbkdyYW51bGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9v
bCBjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIoKQorICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9B
TExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIHN0YXRpYyB1aW50cHRyX3QgZmlsdGVyaW5n
U3RhcnRBZGRyZXNzKCkKKyAgICB7CisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJ
WEVEKQorICAgICAgICByZXR1cm4gc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2w7Cisj
ZWxzZQorICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNlbmRpZgorICAgIH0K
KyAgICBzdGF0aWMgc2l6ZV90IGZpbHRlcmluZ0V4dGVudFNpemUoKQorICAgIHsKKyNpZiBFTkFC
TEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNlbHNlCisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOworI2VuZGlmCisgICAgfQorICAgIHN0YXRpYyBib29sIHBhc3Nlc0ZpbHRlcih1aW50
cHRyX3QgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGlmICghY2FuUGVyZm9ybVJhbmdlRmlsdGVy
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChhZGRy
ZXNzIC0gZmlsdGVyaW5nU3RhcnRBZGRyZXNzKCkgPj0gZmlsdGVyaW5nRXh0ZW50U2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG9ic2VydmVaZXJvUmVmQ291
bnQoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAgdW5zaWduZWQg
bV9yZWZDb3VudDsKK307CisKKyNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1JfU1RVQihwYXRjaEJ1
ZmZlciwgZGF0YUxvZ0FyZ3VtZW50cykgXAorICAgIChhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRp
bmUoRklOQUxJWkVfQ09ERSgocGF0Y2hCdWZmZXIpLCBkYXRhTG9nQXJndW1lbnRzKSkpKQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBK
SVRTdHViUm91dGluZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiAxMjE5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyMSw3ICsxNzIxLDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlmIChzdHViSW5mby0+YWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VSVCgh
c3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZigpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCB0cnVlKTsKKyAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgc3R1YkluZm8tPmluaXRH
ZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51
LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTc0NywxMiArMTc0NywxMiBAQCBz
dGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgc3dpdGNoIChzdHVi
SW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKICAg
ICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1Yklu
Zm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51
LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0
QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5cGVTdHJ1
Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRh
LCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4u
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWlu
LmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwog
ICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJl
TGlzdCwgMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90
b19saXN0OgpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24g
MTIxOTI1KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxNyArNDUsMjcgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKICAgICAKLSAgICB2b2lkKiBzdGFy
dCgpCisgICAgdm9pZCogc3RhcnQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3Rh
cnQ7CiAgICAgfQogICAgIAotICAgIHZvaWQqIGVuZCgpCisgICAgdm9pZCogZW5kKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5dGVzKTsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZEFzSW50ZWdlcigpKTsKKyAgICB9CisgICAg
CisgICAgdWludHB0cl90IHN0YXJ0QXNJbnRlZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCk7CisgICAgfQorICAgIAor
ICAgIHVpbnRwdHJfdCBlbmRBc0ludGVnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXJ0QXNJbnRlZ2VyKCkgKyBtX3NpemVJbkJ5dGVzOwogICAgIH0KICAgICAgICAgCi0gICAg
c2l6ZV90IHNpemVJbkJ5dGVzKCkKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151169</attachid>
            <date>2012-07-08 19:04:47 -0700</date>
            <delta_ts>2012-07-08 19:49:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jettisonstubs_patch_3.diff</filename>
            <type>text/plain</type>
            <size>101928</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMi0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnaXZlcyB0aGUgR0MgYXdhcmVuZXNz
IG9mIGFsbCBKSVQtZ2VuZXJhdGVkIHN0dWJzIGZvciBpbmxpbmUgY2FjaGVzLiBUaGF0CisgICAg
ICAgIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgSklULWdlbmVyYXRlZCBzdHVi
LCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBjdXJyZW50bHkgcnVubmluZzogaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBtaWdo
dAorICAgICAgICBiZSwgdGhlIEdDIHdpbGwga2luZGx5IGRlZmVyIGRlbGV0aW9uIHVudGlsIG5v
bi1ydW5uaW5nLW5lc3MgaXMgcHJvdmVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFBvbHltb3JwaGljU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRp
bmUpOgorICAgICAgICAoUHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlND
OjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRy
YW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKER1bW15TWFya0hv
b2spOgorICAgICAgICAoSlNDOjpEdW1teU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgIChDb21wb3NpdGVNYXJrSG9vayk6Cisg
ICAgICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjpDb21wb3NpdGVNYXJrSG9vayk6CisgICAg
ICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKiBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ29uc2VydmF0aXZlUm9v
dHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SGVhcCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OkpJVFN0dWJSb3V0
aW5lU2V0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHViUm91dGlu
ZVNldCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lU2V0OjptYXJrU2xvdyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAgICAqIGhl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
ayk6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHMpOgorICAgICAgICAoTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5K
SVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRT
dHViUm91dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OmNvZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKToKKyAg
ICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJv
dXRpbmU6OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6cGFzc2VzRmlsdGVyKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorCiAyMDEyLTA3LTA4ICBab2x0YW4gSGVyY3plZyAg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dIEltcGxlbWVudGluZyBt
aXNzaW5nIG1hY3JvIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWZ0ZXIgcjEyMTkyNQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXAuY3Bw
CiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKICAgICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJs
b2NrLmNwcApAQCAtMTI5LDYgKzEzMCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAKKyAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCiAgICAgaml0L0pJVEFyaXRobWV0aWMuY3BwCiAgICAgaml0L0pJ
VENhbGwzMl82NC5jcHAKQEAgLTEzOSw2ICsxNDEsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGppdC9KSVRPcGNvZGVzLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKyAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaCBcCkBAIC0zNTQsNiArMzU2LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0
SklUQ29kZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIFwKQEAgLTM3Myw2
ICszNzcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJS
b3V0aW5lLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hlYXAuY3Bw
IFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAgXAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCBcCisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgXAogICAgIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAgXApAQCAtMTM3LDYgKzEzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgXAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcCBcCisg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGlj
LmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgXAogICAgIGppdC9KSVRDYWxs
LmNwcCBcCkBAIC0xNDcsNiArMTQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCisgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBc
CiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAog
ICAgIHBhcnNlci9MZXhlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyMjA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDYgKzE4NTgs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEpJVC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTkxOCw2ICsxOTI2LDE0IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxK
SVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRTdHViUm91dGluZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUU3R1YnMuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTIyMTQsNiArMjIzMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMSBAQAog
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1
QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Rjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERD
REQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQz
MDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY3QjI5NEExNEMzQ0QyOTAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QjI5NDgxNEMzQ0Qy
MzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODc1LDYgKzg4MCwx
MiBAQAogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJv
dXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMjYxNUE4Q0MxQjAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFN0dWJSb3V0aW5lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDJE
MTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdD
QXdhcmVKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5Miw2ICsxNzAzLDggQEAKIAkJCQlBN0I0OERCNjBF
RTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhE
QjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRC
NjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cCAqLywKKwkJCQkwRjc2NkQyRDE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcCAqLywKKwkJCQkwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmggKi8sCiAJCQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuY3BwICovLAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJ
VC5jcHAgKi8sCkBAIC0xNzExLDYgKzE3MjQsOCBAQAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4
ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAw
QTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZC
OEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oICovLAorCQkJCTBGNzY2RDI2MTVBOENDMUIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8sCisJCQkJMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMTRBMjNENkMwRjRFMTlDRTAwMjND
REFEIC8qIEpJVFN0dWJzLmNwcCAqLywKIAkJCQkxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyog
SklUU3R1YnMuaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggKi8sCkBAIC0xNzUyLDYgKzE3NjcsOCBAQAogCQkJCTE0QkE3QTk2MTNBQURGRjgw
MDVCN0MyQyAvKiBIZWFwLmggKi8sCiAJCQkJQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhl
YXBCbG9jay5oICovLAogCQkJCTE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZp
c2l0b3IuaCAqLywKKwkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmVTZXQuY3BwICovLAorCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91
dGluZVNldC5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhh
bmRsZXIuaCAqLywKIAkJCQkxNDJFMzEzMDEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCAqLywK
IAkJCQkxNDJFMzEzMTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oICovLApAQCAtMjgx
NSw2ICsyODMyLDggQEAKIAkJCQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc3MjE1OTI3NUQ4MDA0Q0I5RkYgLyog
UmVzb2x2ZUdsb2JhbFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzE2OEMxNUEzQjIz
NTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc2NkQy
QzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMzQwNyw2ICszNDI2LDkgQEAKIAkJCQlDMkQ1OEMzNDE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNDI3NzExNTkyNzVENTAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3NjZEMjgxNUE4Q0MxRTAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzY2RDJCMTVBOENDMzgwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjc2NkQyRjE1
QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEluc3Ry
dWN0aW9uX2gKICNkZWZpbmUgSW5zdHJ1Y3Rpb25faAogCisjaW5jbHVkZSAiSklUU3R1YlJvdXRp
bmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgog
I2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgpAQCAtNTIsOCArNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBzdHJ1Y3QgVmFsdWVQcm9maWxlOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RT
dHViUm91dGluZVR5cGU7Ci0KICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRf
c2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xk
IGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtNjEsNyArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RydWN0IFBvbHltb3Jw
aGljU3R1YkluZm8gewogICAgICAgICAgICAgYm9vbCBpc0NoYWluOwogICAgICAgICAgICAgYm9v
bCBpc0RpcmVjdDsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0
dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZTsKKyAgICAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBi
YXNlOwogICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3RydWN0dXJlPiBwcm90bzsKQEAgLTczLDcgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGlu
ZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpA
QCAtODIsNyArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB0aGlzLT5p
c0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQorICAg
ICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jh
c2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAg
IGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CkBAIC05MSw3ICs5MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwg
U3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQg
c2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVD
aGFpbiogX2NoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CkBAIC0xMDUsMTcgKzEwNCwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBp
c0RpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJvb2wgaXNEaXJlY3QpCisgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
LCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGly
ZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25l
ciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3Ry
dWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUq
IGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHVi
Um91dGluZSwgZmlyc3RCYXNlLCBmaXJzdENoYWluLCBpc0RpcmVjdCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1
Y3R1CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBSZXBsYWNlOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAg
cmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihpbml0aWFsU2xvd1BhdGgpOworICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNs
b3dQYXRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTIy
MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKICAgICAgICAgSlNDZWxsKiBvd25l
ciwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZSkKKyAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAg
ICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7CkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNUcmFu
c2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkpOwogICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZTsK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViUm91dGluZTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCiBjbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsK
QEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLmNvZGUoKTsKKyAgICAgICAgcmV0dXJuIG1fbGlz
dC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBhZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0xNjgsNyArMTY5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX3Vuc2V0OwotICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKTsKKyAgICAgICAgICAgIHN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGRlcmVmKCk7CkBAIC0yODYsNyArMjg3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICB9IHB1dEJ5SWRMaXN0OwogICAgICAgICB9IHU7CiAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NDYWxs
SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCkBAIC0x
MDYsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZQog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
c3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkK
IHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
CkBAIC0xNjYsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNz
U3R1YgogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBz
bG93Q2FzZUxhYmVsKTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisg
ICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1
ZmZlciwKICAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFjY2VzcyBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwg
c3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKQEAgLTIyMCwxNCArMjIxLDE0IEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAg
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9y
IENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCiAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNzYsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJv
dG9CdWlsZExpc3QpOwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCB0cnVlKTsKQEAgLTMyMyw3ICszMjQsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIGxpc3RJbmRleCA9IDA7CiAgICAgfSBl
bHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewog
ICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwg
c3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsK
KyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
SklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIGxpc3RJbmRleCA9IDE7CiAgICAgfSBlbHNl
IHsKQEAgLTQzMyw3ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdp
bjsKICAgICAgICAgaWYgKGxpc3RJbmRleCkKLSAgICAgICAgICAgIGxhc3RQcm90b0JlZ2luID0g
Q29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgICAg
ICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CkBAIC00NDUsMTcgKzQ0NiwyMyBAQCBzdGF0aWMg
Ym9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgQ29kZUJsb2NrICVwLCBy
ZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAg
IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUoCisg
ICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAoIkRG
RyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciBDb2RlQmxvY2sgJXAsIHJldHVy
biBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAorICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgc2xvdC5jYWNo
ZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcgorICAgICAgICAgICAgICAg
IHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpDdXN0b20pOwog
ICAgICAgICAKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRp
b25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS5jb2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDk5LDcgKzUwNiw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJ
bmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJ
ZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIo
KTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNTEwLDEwICs1MTcs
MTAgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChs
aXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1Yklu
Zm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlv
bkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2lu
KTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CisgICAgICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgIAogICAgICAgICBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFBy
b3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAgICAgCkBAIC01MjEsNyArNTI4LDcgQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgICAgICAKICAgICAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4MSw3ICs1ODgsNyBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgUHV0S2luZCwKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKKyAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CkBAIC02NTUsNyArNjYyLDcgQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERSgKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAg
ICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3Ig
Q29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KApAQCAtNjczLDcg
KzY4MCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgc3R1YlJvdXRpbmUpCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKIApAQCAtNzU0LDggKzc2MSw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAg
IGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAg
CisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgKCJERkcgUHV0QnlJZCB0cmFuc2l0aW9uIHN0dWIgZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKQEAgLTc5OSw3ICs4MDYs
NyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CkBAIC04NDEsNyArODQ4LDcgQEAg
c3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKICAgICAg
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOwogICAgICAgICAKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6TmV3UHJvcGVydHkpIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQpAQCAtODg4LDcgKzg5NSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXQKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5j
b2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2Miw2IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9v
dHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsKIH0KIAotY2xhc3MgRHVtbXlNYXJr
SG9vayB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KLX07Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBt
YXJrSG9vaykKIHsKQEAgLTExMCwxNSArMTA1LDQ4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZGRTcGFuKHYKICAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIs
IG1hcmtIb29rKTsKIH0KIAorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lk
KiBiZWdpbiwgdm9pZCogZW5kKQogewotICAgIER1bW15TWFya0hvb2sgaG9vazsKLSAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBob29rKTsKKyAgICBEdW1teU1hcmtIb29rIGR1bW15Owor
ICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGR1bW15KTsKIH0KIAotdm9pZCBDb25zZXJ2
YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmIGRm
Z0NvZGVCbG9ja3MpCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZv
aWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcykKK3sKKyAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorY2xhc3MgQ29tcG9zaXRlTWFya0hvb2sgeworcHVibGlj
OgorICAgIENvbXBvc2l0ZU1hcmtIb29rKFQmIGZpcnN0LCBVJiBzZWNvbmQpCisgICAgICAgIDog
bV9maXJzdChmaXJzdCkKKyAgICAgICAgLCBtX3NlY29uZChzZWNvbmQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1hcmsodm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fZmly
c3QubWFyayhhZGRyZXNzKTsKKyAgICAgICAgbV9zZWNvbmQubWFyayhhZGRyZXNzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVCYgbV9maXJzdDsKKyAgICBVJiBtX3NlY29uZDsKK307CisKK3Zv
aWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKKyAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBK
SVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2Rl
QmxvY2tzKQogewotICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGRmZ0NvZGVCbG9ja3Mp
OworICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBERkdDb2RlQmxvY2tz
PiBtYXJrSG9vaygKKyAgICAgICAgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAg
ICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNDZWxsOwogY2xhc3MgREZHQ29kZUJsb2NrczsK
IGNsYXNzIEhlYXA7CitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKK2NsYXNzIEpTQ2VsbDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewogcHVibGljOgpAQCAtNDIsNyArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdp
biwgdm9pZCogZW5kKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBERkdD
b2RlQmxvY2tzJik7CisgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1
YlJvdXRpbmVTZXQmKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRT
dHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgp
OwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsNyBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhib29sIGZ1bGxHQykKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0aXZlIHJvb3RzIGJl
Zm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUKICAgICAvLyBnYXRo
ZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVmZXJlbmNl
IGlzIHZhbGlkLgogICAgIENvbnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJlYWRSb290cygmbV9v
YmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKKyAgICBtX2ppdFN0dWJSb3V0
aW5lcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKTsKICAgICAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVS
b290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CkBAIC00MjksNyArNDMwLDggQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFy
TWFya3MoKTsKICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyUmVnaXN0ZXJGaWxlUm9vdHMp
OwotICAgICAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3Rl
ckZpbGVSb290cywgbV9kZmdDb2RlQmxvY2tzKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMoCisgICAgICAgICAgICByZWdpc3RlckZpbGVSb290cywgbV9q
aXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nrcyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCkBAIC01NDAsOSArNTQyLDEwIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVs
bEdDKQogICAgICAgICB9CiAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdDUEhBU0UoVHJh
Y2VDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIlRyYWNl
IENvZGUgQmxvY2tzIik7CisgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFj
ZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXMiKTsKICAgICAgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBt
X2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAg
ICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2lu
Y2x1ZGUgIkhhbmRsZVN0YWNrLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCkBAIC00NCwxMCArNDUsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAg
IGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFjazsKKyAgICBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU7CiAgICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEhlYXA7CiAgICAgY2xh
c3MgSGVhcFJvb3RWaXNpdG9yOwogICAgIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKKyAgICBj
bGFzcyBKSVRTdHViUm91dGluZTsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogICAgIGNsYXNzIEpTVmFsdWU7CkBAIC0xNjgsNiArMTcxLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwor
ICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOworICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTIyOSw2ICsyMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVT
dGFjayBtX2hhbmRsZVN0YWNrOwogICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZnQ29kZUJsb2Nr
czsKKyAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAg
IEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIAogICAgICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklU
U3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFN0dWJSb3V0aW5l
U2V0OjpKSVRTdHViUm91dGluZVNldCgpIHsgfQorSklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHVi
Um91dGluZVNldCgpIHsgfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjphZGQoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKiByb3V0aW5lKQoreworICAgIEFTU0VSVCghcm91dGluZS0+bV9pc0pldHRp
c29uZWQpOworICAgIAorICAgIG1fbGlzdE9mUm91dGluZXMuYXBwZW5kKHJvdXRpbmUpOworICAg
IAorICAgIHVpbnRwdHJfdCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpOworICAgIHVp
bnRwdHJfdCBlbmQgPSByb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgdWludHB0cl90IHN0ZXAg
PSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKKyAgICBmb3IgKHVpbnRwdHJfdCBpdGVy
ID0gc3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgeworICAgICAgICBBU1NFUlQobV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVu
ZCgpKTsKKyAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmFkZChpdGVyLCByb3V0aW5lKTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmNsZWFyTWFya3MoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV9saXN0T2ZSb3V0aW5lc1tpXS0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOworfQorCit2b2lk
IEpJVFN0dWJSb3V0aW5lU2V0OjptYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcykKK3sKKyAgICBI
YXNoTWFwPHVpbnRwdHJfdCwgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKj46Oml0ZXJhdG9yIGl0ZXIg
PQorICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChhZGRyZXNzICYgfihKSVRTdHVi
Um91dGluZTo6YWRkcmVzc1N0ZXAoKSAtIDEpKTsKKyAgICAKKyAgICBpZiAoaXRlciA9PSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpdGVy
LT5zZWNvbmQtPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOworfQorCit2b2lkIEpJVFN0dWJSb3V0
aW5lU2V0OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBtX2xpc3RPZlJvdXRpbmVzW2ldOworICAg
ICAgICBpZiAoIXJvdXRpbmUtPm1faXNKZXR0aXNvbmVkIHx8IHJvdXRpbmUtPm1fbWF5QmVFeGVj
dXRpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVpbnRwdHJf
dCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpOworICAgICAgICB1aW50cHRyX3QgZW5k
ID0gcm91dGluZS0+ZW5kQWRkcmVzcygpOworICAgICAgICB1aW50cHRyX3Qgc3RlcCA9IEpJVFN0
dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBpdGVyID0g
c3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgeworICAgICAgICAgICAgQVNTRVJUKG1f
YWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpICE9IG1fYWRkcmVzc1RvUm91dGluZU1hcC5l
bmQoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRl
ciktPnNlY29uZCA9PSByb3V0aW5lKTsKKyAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1h
cC5yZW1vdmUoaXRlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPmRl
bGV0ZUZyb21HQygpOworICAgICAgICAKKyAgICAgICAgbV9saXN0T2ZSb3V0aW5lc1tpXSA9IG1f
bGlzdE9mUm91dGluZXMubGFzdCgpOworICAgICAgICBtX2xpc3RPZlJvdXRpbmVzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgaS0tOworICAgIH0KK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6
dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEdD
QXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSA9IG1fbGlzdE9mUm91dGluZXNbaV07CisgICAg
ICAgIGlmICghcm91dGluZS0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9y
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1
YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVFN0dWJSb3V0aW5l
U2V0X2gKKyNkZWZpbmUgSklUU3R1YlJvdXRpbmVTZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIEpJVFN0dWJS
b3V0aW5lU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRTdHViUm91dGluZVNldCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIEpJVFN0dWJSb3V0
aW5lU2V0KCk7CisgICAgfkpJVFN0dWJSb3V0aW5lU2V0KCk7CisgICAgCisgICAgdm9pZCBhZGQo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKik7CisKKyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAK
KyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQWRkcmVzcykKKyAgICB7CisgICAgICAgIHVp
bnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUFk
ZHJlc3MpOworICAgICAgICBpZiAoIUpJVFN0dWJSb3V0aW5lOjpwYXNzZXNGaWx0ZXIoYWRkcmVz
cykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtYXJrU2xvdyhhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHVi
Um91dGluZXMoKTsKKyAgICAKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RW
aXNpdG9yJik7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFk
ZHJlc3MpOworICAgIAorICAgIEhhc2hNYXA8dWludHB0cl90LCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUqPiBtX2FkZHJlc3NUb1JvdXRpbmVNYXA7CisgICAgVmVjdG9yPEdDQXdhcmVKSVRTdHViUm91
dGluZSo+IG1fbGlzdE9mUm91dGluZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBKSVRTdHViUm91dGluZVNldF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5o
CShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotICAgIGNsYXNzIEhlYXA7CiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7
CisgICAgY2xhc3MgSGVhcDsKIAogICAgIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTWFjaGluZVRocmVhZHMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw5IEBAIHZvaWQgUmVnaXN0ZXJGaWxl
OjpnYXRoZXJDb25zZXJ2YXRpdmVSb28KICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4o
KSwgZW5kKCkpOwogfQogCi12b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBERkdDb2RlQmxvY2tzJiBk
ZmdDb2RlQmxvY2tzKQordm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQm
IGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGRmZ0NvZGVCbG9ja3MpOworICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSwgaml0U3R1YlJvdXRpbmVzLCBk
ZmdDb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBh
Y2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJG
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyRmlsZS5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKICAgICBj
bGFzcyBERkdDb2RlQmxvY2tzOworICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogICAgIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CkBA
IC02NCw3ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmLCBERkdDb2RlQmxvY2tzJik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIERGR0Nv
ZGVCbG9ja3MmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBS
ZWdpc3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiBw
dWJsaWM6CiAgICAgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFs
bG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAg
ICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkKICAgICB7CiAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2soYWxsb2NhdG9yc011dGV4KCkpOwogICAgICAgICBhbGxvY2F0b3Jz
KCkuYWRkKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3
Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNHbG9iYWxEYXRhOwogdm9pZCByZWxlYXNl
RXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERhdGEmKTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7CisKIGlubGluZSBzaXplX3Qgcm91bmRVcEFsbG9j
YXRpb25TaXplKHNpemVfdCByZXF1ZXN0LCBzaXplX3QgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYg
KChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gZ3JhbnVsYXJpdHkpIDw9IHJl
cXVlc3QpCkBAIC0xMDEsNiArMTAzLDE4IEBAIHR5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlIEV4ZWN1dGEKIGNsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKKyNpZiBDUFUoQVJNKQorc3Rh
dGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAy
NCAqIDEwMjQ7CisjZWxpZiBDUFUoWDg2XzY0KQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKKyNlbHNlCitzdGF0
aWMgY29uc3Qgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMzIgKiAxMDI0
ICogMTAyNDsKKyNlbmRpZgorCitleHRlcm4gdWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFi
bGVNZW1vcnlQb29sOworI2VuZGlmCisKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAg
IGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9v
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDI3ICs0NSwyMyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1l
c3BhY2UgSlNDIHsKICAgICAKLSNpZiBDUFUoQVJNKQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhl
ZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKLSNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7Ci0jZWxzZQot
c3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKLSNl
bmRpZgordWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogCiBjbGFz
cyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7
CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAg
OiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0
ZXMKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3Vu
ZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2
YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhmaXhlZFBvb2xT
aXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2Vy
dmVXaXRoR3VhcmRQYWdlcyhmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSwgT1NBbGxvY2F0
b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwogI2lm
ICEoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCiAgICAgICAg
IGlmICghbV9yZXNlcnZhdGlvbikKICAgICAgICAgICAgIENSQVNIKCk7CiAjZW5kaWYKICAgICAg
ICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9u
LnNpemUoKSA9PSBmaXhlZFBvb2xTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0
aW9uLnNpemUoKSA9PSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSk7CiAgICAgICAgICAg
ICBhZGRGcmVzaEZyZWVTcGFjZShtX3Jlc2VydmF0aW9uLmJhc2UoKSwgbV9yZXNlcnZhdGlvbi5z
aXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJh
c2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisj
aW5jbHVkZSA8c3RkYXJnLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICA6IEpJVFN0dWJSb3V0
aW5lKGNvZGUpCisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9pc0pldHRp
c29uZWQoZmFsc2UpCit7CisgICAgZ2xvYmFsRGF0YS5oZWFwLm1faml0U3R1YlJvdXRpbmVzLmFk
ZCh0aGlzKTsKK30KKyAgICAKK0dDQXdhcmVKSVRTdHViUm91dGluZTo6fkdDQXdhcmVKSVRTdHVi
Um91dGluZSgpIHsgfQorCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6b2JzZXJ2ZVplcm9S
ZWZDb3VudCgpCit7CisgICAgaWYgKG1faXNKZXR0aXNvbmVkKSB7CisgICAgICAgIGRlbGV0ZSB0
aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1faXNKZXR0aXNvbmVkID0g
dHJ1ZTsKKyAgICBtX3JlZkNvdW50ID0gMTsgLy8gUmV2aXZlIHRoZSBvYmplY3QuIEl0J3Mgbm93
IG93bmVkIGJ5IHRoZSBHQy4KK30KKwordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0
ZUZyb21HQygpCit7CisgICAgQVNTRVJUKG1faXNKZXR0aXNvbmVkKTsKKyAgICBBU1NFUlQobV9y
ZWZDb3VudCA9PSAxKTsKKyAgICBBU1NFUlQoIW1fbWF5QmVFeGVjdXRpbmcpOworICAgIGRlbGV0
ZSB0aGlzOworfQorCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKK3sKK30KKworTWFya2luZ0dDQXdhcmVKSVRTdHVi
Um91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25l
T2JqZWN0KAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgIEpTQ2VsbCogb2JqZWN0
KQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpCisgICAgLCBt
X29iamVjdChnbG9iYWxEYXRhLCBvd25lciwgb2JqZWN0KQoreworfQorCitNYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdDo6fk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRp
bmVXaXRoT25lT2JqZWN0KCkKK3sKK30KKwordm9pZCBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lV2l0aE9uZU9iamVjdDo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kKCZtX29iamVjdCk7Cit9CisKK1Bhc3NS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
CisgICAgY29uc3QgSlNDZWxsKiwKKyAgICBib29sIG1ha2VzQ2FsbHMpCit7CisgICAgaWYgKCFt
YWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpJVFN0dWJSb3V0aW5lKGNv
ZGUpKTsKKworICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEpJVFN0dWJSb3V0aW5lPigK
KyAgICAgICAgYWRvcHRSZWYobmV3IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCBnbG9iYWxE
YXRhKSkpOworfQorCitQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91
dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLAorICAgIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgYm9vbCBt
YWtlc0NhbGxzLAorICAgIEpTQ2VsbCogb2JqZWN0KQoreworICAgIGlmICghbWFrZXNDYWxscykK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShjb2RlKSk7CisgICAg
CisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAorICAgICAg
ICBhZG9wdFJlZihuZXcgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Qo
Y29kZSwgZ2xvYmFsRGF0YSwgb3duZXIsIG9iamVjdCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEdDQXdhcmVKSVRTdHViUm91dGluZV9oCisjZGVmaW5lIEdD
QXdhcmVKSVRTdHViUm91dGluZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIldy
aXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7
CisKKy8vIFVzZSB0aGlzIHN0dWIgcm91dGluZSBpZiB5b3Uga25vdyB0aGF0IHlvdXIgY29kZSBt
aWdodCBiZSBvbiBzdGFjayB3aGVuCisvLyBlaXRoZXIgR0Mgb3Igb3RoZXIga2luZHMgb2Ygc3R1
YiBkZWxldGlvbiBoYXBwZW4uIEJhc2ljYWx5LCBpZiB5b3VyIHN0dWIKKy8vIHJvdXRpbmUgbWFr
ZXMgY2FsbHMgKGVpdGhlciB0byBKUyBjb2RlIG9yIHRvIEMrKyBjb2RlKSB0aGVuIHlvdSBzaG91
bGQKKy8vIGFzc3VtZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHRoYXQgSlMgb3IgQysrIGNvZGUg
dG8gZG8gc29tZXRoaW5nIHRoYXQKKy8vIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHRyeSB0byBkZWxl
dGUgeW91ciByb3V0aW5lLiBVc2luZyB0aGlzIHJvdXRpbmUgdHlwZQorLy8gZW5zdXJlcyB0aGF0
IHRoZSBhY3R1YWwgZGVsZXRpb24gaXMgZGVsYXllZCB1bnRpbCB0aGUgR0MgcHJvdmVzIHRoYXQg
dGhlCisvLyByb3V0aW5lIGlzIG5vIGxvbmdlciBydW5uaW5nLiBZb3UgY2FuIGFsc28gc3ViY2xh
c3MgdGhpcyByb3V0aW5lIGlmIHlvdQorLy8gd2FudCB0byBtYXJrIGFkZGl0aW9uYWwgb2JqZWN0
cyBkdXJpbmcgR0MgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhlCisvLyByb3V0aW5lIGlzIGtub3du
IHRvIGJlIGV4ZWN1dGluZywgb3IgaWYgeW91IHdhbnQgdG8gZm9yY2UgdGhpcyByb3V0aW5lIHRv
CisvLyBrZWVwIG90aGVyIHJvdXRpbmVzIGFsaXZlIChmb3IgZXhhbXBsZSBkdWUgdG8gdGhlIHVz
ZSBvZiBhIHNsb3ctcGF0aAorLy8gbGlzdCB3aGljaCBkb2VzIG5vdCBnZXQgcmVjbGFpbWVkIGFs
bCBhdCBvbmNlKS4KK2NsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZSA6IHB1YmxpYyBKSVRTdHVi
Um91dGluZSB7CitwdWJsaWM6CisgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYpOworICAgIHZpcnR1YWwgfkdDQXdhcmVK
SVRTdHViUm91dGluZSgpOworICAgIAorICAgIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0cyhTbG90
VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbCh2aXNpdG9yKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVGcm9tR0MoKTsKKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZp
c2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7
CisKKyAgICBib29sIG1fbWF5QmVFeGVjdXRpbmc7CisgICAgYm9vbCBtX2lzSmV0dGlzb25lZDsK
K307CisKKy8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIG1hcmsgb25lIGFkZGl0aW9uYWwgb2Jq
ZWN0IGR1cmluZyBHQyBpZiB5b3VyIHN0dWIKKy8vIHJvdXRpbmUgaXMga25vd24gdG8gYmUgZXhl
Y3V0aW5nLgorY2xhc3MgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Qg
OiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKK3B1YmxpYzoKKyAgICBNYXJraW5nR0NB
d2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgKKyAgICAgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICAg
ICAgSlNDZWxsKiBvYmplY3QpOworICAgIHZpcnR1YWwgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJv
dXRpbmVXaXRoT25lT2JqZWN0KCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworCitwcml2YXRlOgor
ICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fb2JqZWN0OworfTsKKworLy8gSGVscGVyIGZvciBl
YXNpbHkgY3JlYXRpbmcgYSBHQy1hd2FyZSBKSVQgc3R1YiByb3V0aW5lLiBGb3IgdGhlIHZhcmFy
Z3MsCisvLyBwYXNzIHplcm8gb3IgbW9yZSBKU0NlbGwqJ3MuIFRoaXMgd2lsbCBlaXRoZXIgY3Jl
YXRlIGEgSklUU3R1YlJvdXRpbmUsIGEKKy8vIEdDQXdhcmVKSVRTdHViUm91dGluZSwgb3IgYW4g
T2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZSBhcworLy8gYXBwcm9wcmlhdGUuIEdl
bmVyYWxseSB5b3Ugb25seSBuZWVkIHRvIHBhc3MgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQK
Ky8vIGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRvIEMrKyBvciBKUy4KKy8vIAorLy8gUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisvLyAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisvLyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
CisvLyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAorLy8gICAgYm9vbCBtYWtlc0NhbGxzLAorLy8g
ICAgLi4uKTsKKy8vCisvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIEMtc3R5bGUg
dmFyYXJncyBiZWNhdXNlIHRoYXQgbGVhZHMgdG8KKy8vIHN0cmFuZ2UgdHlwZS1yZWxhdGVkIHBy
b2JsZW1zLiBGb3IgZXhhbXBsZSBpdCB3b3VsZCBwcmVjbHVkZSB1cyBmcm9tIHVzaW5nCisvLyBv
dXIgY3VzdG9tIG9mIHBhc3NpbmcgJzAnIGFzIE5VTEwgcG9pbnRlci4gQmVzaWRlcywgd2hlbiBJ
IGRpZCB0cnkgdG8gd3JpdGUKKy8vIHRoaXMgZnVuY3Rpb24gdXNpbmcgdmFyYXJncywgSSBlbmRl
ZCB1cCB3aXRoIG1vcmUgY29kZSB0aGFuIHRoaXMgc2ltcGxlCisvLyB3YXkuCisKK1Bhc3NSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBK
U0NlbGwqIG93bmVyLAorICAgIGJvb2wgbWFrZXNDYWxscyk7CitQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25l
ciwKKyAgICBib29sIG1ha2VzQ2FsbHMsIEpTQ2VsbCogb2JqZWN0KTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gR0NBd2FyZUpJVFN0
dWJSb3V0aW5lX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJK
SVRTdHViQ2FsbC5oIgpAQCAtNTU3LDEyICs1NTgsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0u
ZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsK
ICAgICB9CiAgICAgCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgK
LSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5z
aXRpb24gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAg
bV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAor
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9p
ZCB0cmFuc2l0aW9uIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSksCisgICAgICAg
ICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwK
KyAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYywKKyAgICAgICAgbmV3U3RydWN0dXJlKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBK
SVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQpAQCAtNjI0LDcgKzYzMCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1
ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8g
VHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVk
IGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAg
cGF0Y2hCdWZmZXIsCiAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGFycmF5IGxlbmd0aCBz
dHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBtX2NvZGVC
bG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KApAQCAtNjMzLDcgKzYz
OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICAvLyBG
aW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0
byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1
dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwp
KTsKQEAgLTY5NCwxNiArNzAwLDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byhTdHIKICAgICB9CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQg
c28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFz
ZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50
ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAg
ICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBwcm90
byBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogICAg
IAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUo
KSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgCiAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0
byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxs
ZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRf
cHJvdG9fbGlzdCkpOwpAQCAtNzQ3LDcgKzc1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgfQogICAgIH0gICAgCiAgICAgLy8gVXNlIHRoZSBw
YXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6YXND
b2RlUHRyKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHVi
Um91dGluZSkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0Jl
Z2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7CiAgICAgCkBAIC03NTYsMTgg
Kzc2NiwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAg
Ly8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9p
bnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1
ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7CiAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgc2VsZiBsaXN0IHN0dWIgZm9y
IENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHVi
Um91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVy
LAorICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgc2VsZiBsaXN0IHN0dWIgZm9yIENv
ZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVj
dCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFj
ayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJy
ZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVj
dHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
UHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTgx
OCwyNSArODMyLDI5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QK
ICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxp
bmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRp
bmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25M
YWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNj
ZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxs
IHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRp
bmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAg
ICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJs
b2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAogICAgIHByb3RvdHlwZVN0cnVj
dHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJv
dG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3Ry
dWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9j
ayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3Rv
dHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg5MiwxOCArOTEwLDIyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBV
c2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0
byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHViUm91dGlu
ZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUpKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWws
IGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRv
IHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3Jl
IHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5wdXRSZXN1bHQpKTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNl
bGluZSBnZXRfYnlfaWQgY2hhaW4gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBw
b2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFM
SVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxp
bmUgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9p
bnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xv
YmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAg
ICBuZWVkc1N0dWJMaW5rKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNy
ZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCiAgICAgcHJvdG90eXBlU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBj
aGFpbiwgaXNEaXJlY3QpOwpAQCAtOTExLDcgKzkzMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBD
b2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNv
dW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQ
cm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05NjksMTcgKzk5MSwyMSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAg
ICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hhaW4gc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ss
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0
dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVy
ZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAg
IAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1
cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0
dGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVNZXRo
b2RzLmgiCkBAIC01OTUsMTIgKzU5NiwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBG
dW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAgIH0K
ICAgICAKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAg
ICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ss
IHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGNy
ZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAg
cGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9u
IGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2Rl
QmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIHdpbGxOZWVk
U3RvcmFnZVJlYWxsb2MsCisgICAgICAgIG5ld1N0cnVjdHVyZSk7CiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0Nh
bGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRT
ZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTY1Nyw3ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNz
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2
ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAg
ICgiQmFzbGluZSBKSVQgZ2V0X2J5X2lkIGFycmF5IGxlbmd0aCBzdHViIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KApAQCAtNjY2LDcgKzY3Miw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRo
YW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNzI0LDE2ICs3MzAsMjAg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgICAgICB9CiAg
ICAgfQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0
X2J5X2lkIHByb3RvIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAg
ICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQo
Ci0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0
ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0
Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgcHJvdG8gc3R1
YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29k
ZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRf
YnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24o
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7
CkBAIC03NzYsNyArNzg2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZM
aXN0KAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0
aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4K
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVs
KHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGlu
ZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwb2x5bW9ycGhpY1N0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKICAgICBpZiAoIWxhc3RQ
cm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNv
bGRQYXRoQmVnaW4pOwogCkBAIC03ODUsMTggKzc5NSwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBGSU5B
TElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBKSVQg
Z2V0X2J5X2lkIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAot
ICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Q29kZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlf
aWQgbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAg
ICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1Ykxpbmsp
OwogCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCpt
X2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0
cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sp
OwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29k
ZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJDb2RlLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGlu
dCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
QEAgLTg0OCwyNCArODYyLDI4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90
b0xpc3QKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJl
bChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5l
LmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9j
YXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0
dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9y
bSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNz
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0
dWJDb2RlID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgi
QmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwg
cmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YkNvZGUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAg
RklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJC
YXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCBy
ZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAg
ICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVj
dCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGlu
IHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNvZGUoKSkpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkNvZGUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9w
ZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTIxLDE4
ICs5MzksMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAg
IH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVs
KEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNr
ZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBi
YWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhl
IHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5wdXRSZXN1bHQpKTsKIAotICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0
X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAi
LAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RF
KAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBn
ZXRfYnlfaWQgY2hhaW4gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUu
Z2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxE
YXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5l
ZWRzU3R1YkxpbmspOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4sIGlz
RGlyZWN0KTsKQEAgLTk0MCw3ICs5NjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkQ2hhaW5MaXN0CiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2Ug
YmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0
aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2Rl
KCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlP
ZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtOTk5LDE3ICsxMDIxLDIxIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQucHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNy
ZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZVJlZiBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAo
IkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBG
SU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJh
c2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4g
cG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1f
Z2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAg
ICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91
dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lk
X2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUU3R1
YlJvdXRpbmUuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworSklUU3R1YlJvdXRp
bmU6On5KSVRTdHViUm91dGluZSgpIHsgfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lOjpvYnNlcnZl
WmVyb1JlZkNvdW50KCkKK3sKKyAgICBBU1NFUlQoIW1fcmVmQ291bnQpOworICAgIGRlbGV0ZSB0
aGlzOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUU3R1YlJvdXRpbmVfaAorI2RlZmluZSBKSVRT
dHViUm91dGluZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShK
SVQpCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRTdHViUm91dGlu
ZVNldDsKKworLy8gVGhpcyBpcyBhIGJhc2UtY2xhc3MgZm9yIEpJVCBzdHViIHJvdXRpbmVzLCBh
bmQgYWxzbyB0aGUgY2xhc3MgeW91IHdhbnQKKy8vIHRvIGluc3RhbnRpYXRlIGRpcmVjdGx5IGlm
IHlvdSBoYXZlIGEgcm91dGluZSB0aGF0IGRvZXMgbm90IG5lZWQgYW55CisvLyBoZWxwIGZyb20g
dGhlIEdDLiBJZiBpbiBkb3VidCwgdXNlIG9uZSBvZiB0aGUgb3RoZXIgc3R1YiByb3V0aW5lcy4g
QnV0CisvLyBpZiB5b3Uga25vdyBmb3Igc3VyZSB0aGF0IHRoZSBzdHViIHJvdXRpbmUgY2Fubm90
IGJlIG9uIHRoZSBzdGFjayB3aGlsZQorLy8gc29tZW9uZSB0cmlnZ2VycyBhIHN0dWIgcm91dGlu
ZSByZXNldCwgdGhlbiB1c2luZyB0aGlzIHdpbGwgc3BlZWQgdXAKKy8vIG1lbW9yeSByZWNsYW1h
dGlvbi4gT25lIGNhc2Ugd2hlcmUgYSBzdHViIHJvdXRpbmUgc2F0aXNmaWVzIHRoaXMKKy8vIGNv
bmRpdGlvbiBpcyBpZiBpdCBkb2Vzbid0IG1ha2UgYW55IGNhbGxzLCB0byBlaXRoZXIgQysrIG9y
IEpTIGNvZGUuIEluCisvLyBzdWNoIGEgcm91dGluZSB5b3Uga25vdyB0aGF0IGl0IGNhbm5vdCBi
ZSBvbiB0aGUgc3RhY2sgd2hlbiBhbnl0aGluZworLy8gaW50ZXJlc3RpbmcgaGFwcGVucy4KKy8v
IFNlZSBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBmb3IgdGhlIG90aGVyIHN0dWIgcm91dGluZXMu
CitjbGFzcyBKSVRTdHViUm91dGluZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSklUU3R1
YlJvdXRpbmUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKSVRTdHVi
Um91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUpCisgICAgICAgIDogbV9j
b2RlKGNvZGUpCisgICAgICAgICwgbV9yZWZDb3VudCgxKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgLy8gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhIENvZGVQdHIgdG8gc29tZW9uZSB3
aG8gaW5zaXN0cyBvbiB0YWtpbmcKKyAgICAvLyBhIFJlZlB0cjxKSVRTdHViUm91dGluZT4uCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91
dGluZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJhd0NvZGVQb2ludGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsK
KyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICAv
LyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaXMgY29weWFibGUsIGJ1dCBhdCB0aGUgY29zdCBvZiBy
ZWZlcmVuY2UKKyAgICAvLyBjb3VudGluZyBjaHVybi4gUmV0dXJuaW5nIGEgcmVmZXJlbmNlIGlz
IGEgZ29vZCB3YXkgb2YgcmVkdWNpbmcKKyAgICAvLyB0aGUgY2h1cm4uCisgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAg
CisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhc0NvZGVQdHIoUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCisgICAgeworICAgICAgICBpZiAoIXN0dWJSb3V0
aW5lKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAg
ICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IHN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpOworICAgICAgICBBU1NFUlQoISFyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3Jl
ZkNvdW50Kys7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAg
aWYgKC0tbV9yZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgb2JzZXJ2ZVpl
cm9SZWZDb3VudCgpOworICAgIH0KKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB0aGUgR0MgdG8g
ZGV0ZXJtaW5lIGhvdyB0byBkZWFsIHdpdGggbWFya2luZyBKSVQgc3R1YgorICAgIC8vIHJvdXRp
bmVzLgorICAgIHVpbnRwdHJfdCBzdGFydEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGUu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydEFzSW50ZWdlcigpOyB9CisgICAgdWludHB0cl90IGVu
ZEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmRB
c0ludGVnZXIoKTsgfQorICAgIHN0YXRpYyB1aW50cHRyX3QgYWRkcmVzc1N0ZXAoKSB7IHJldHVy
biBqaXRBbGxvY2F0aW9uR3JhbnVsZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIGNhblBlcmZv
cm1SYW5nZUZpbHRlcigpCisgICAgeworI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9G
SVhFRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKyAgICB9CisgICAgc3RhdGljIHVpbnRwdHJfdCBmaWx0ZXJpbmdTdGFydEFkZHJl
c3MoKQorICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAg
ICAgIHJldHVybiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKKyNlbHNlCisgICAg
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRp
ZgorICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbHRlcmluZ0V4dGVudFNpemUoKQorICAgIHsK
KyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiBm
aXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNlbHNlCisgICAgICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKyAgICBz
dGF0aWMgYm9vbCBwYXNzZXNGaWx0ZXIodWludHB0cl90IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBpZiAoIWNhblBlcmZvcm1SYW5nZUZpbHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgICAgICBpZiAoYWRkcmVzcyAtIGZpbHRlcmluZ1N0YXJ0QWRkcmVzcygp
ID49IGZpbHRlcmluZ0V4dGVudFNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbV9jb2RlOworICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCisjZGVmaW5lIEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIocGF0Y2hCdWZmZXIsIGRhdGFMb2dBcmd1bWVudHMpIFwKKyAg
ICAoYWRvcHRSZWYobmV3IEpJVFN0dWJSb3V0aW5lKEZJTkFMSVpFX0NPREUoKHBhdGNoQnVmZmVy
KSwgZGF0YUxvZ0FyZ3VtZW50cykpKSkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSklUU3R1YlJvdXRpbmVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
MjIsNyArMTcyMiw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
IAogICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9z
ZWxmKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAg
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAwLCBz
dHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsK
ICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlz
dDsKQEAgLTE3NDgsMTIgKzE3NDgsMTIgQEAgc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogZwogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBz
dHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0
dXJlLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigp
OwogICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0
dXJlTGlzdCwgMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0
dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJ
bmZvLT5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUuY2xlYXIoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlk
UHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTcgKzQ1LDI3IEBAIHBy
aXZhdGU6CiBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFu
ZGxlKCk7CiAgICAgCi0gICAgdm9pZCogc3RhcnQoKQorICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBl
bmQoKQorICAgIHZvaWQqIGVuZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsg
bV9zaXplSW5CeXRlcyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihl
bmRBc0ludGVnZXIoKSk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBzdGFydEFzSW50ZWdl
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fc3RhcnQpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgZW5kQXNJbnRlZ2VyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGFydEFzSW50ZWdlcigpICsgbV9zaXplSW5C
eXRlczsKICAgICB9CiAgICAgICAgIAotICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgc2l6
ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5
dGVzOwogICAgIH0K
</data>
<flag name="commit-queue"
          id="159567"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151171</attachid>
            <date>2012-07-08 19:49:11 -0700</date>
            <delta_ts>2012-07-08 19:57:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jettisonstubs_patch_4.diff</filename>
            <type>text/plain</type>
            <size>102035</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMi0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnaXZlcyB0aGUgR0MgYXdhcmVuZXNz
IG9mIGFsbCBKSVQtZ2VuZXJhdGVkIHN0dWJzIGZvciBpbmxpbmUgY2FjaGVzLiBUaGF0CisgICAg
ICAgIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgSklULWdlbmVyYXRlZCBzdHVi
LCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBjdXJyZW50bHkgcnVubmluZzogaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBtaWdo
dAorICAgICAgICBiZSwgdGhlIEdDIHdpbGwga2luZGx5IGRlZmVyIGRlbGV0aW9uIHVudGlsIG5v
bi1ydW5uaW5nLW5lc3MgaXMgcHJvdmVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFBvbHltb3JwaGljU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRp
bmUpOgorICAgICAgICAoUHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlND
OjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRy
YW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKER1bW15TWFya0hv
b2spOgorICAgICAgICAoSlNDOjpEdW1teU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgIChDb21wb3NpdGVNYXJrSG9vayk6Cisg
ICAgICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjpDb21wb3NpdGVNYXJrSG9vayk6CisgICAg
ICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKiBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ29uc2VydmF0aXZlUm9v
dHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SGVhcCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OkpJVFN0dWJSb3V0
aW5lU2V0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHViUm91dGlu
ZVNldCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lU2V0OjptYXJrU2xvdyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAgICAqIGhl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
ayk6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHMpOgorICAgICAgICAoTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5K
SVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRT
dHViUm91dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OmNvZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKToKKyAg
ICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJv
dXRpbmU6OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6cGFzc2VzRmlsdGVyKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorCiAyMDEyLTA3LTA4ICBab2x0YW4gSGVyY3plZyAg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dIEltcGxlbWVudGluZyBt
aXNzaW5nIG1hY3JvIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWZ0ZXIgcjEyMTkyNQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXAuY3Bw
CiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKICAgICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJs
b2NrLmNwcApAQCAtMTI5LDYgKzEzMCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAKKyAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCiAgICAgaml0L0pJVEFyaXRobWV0aWMuY3BwCiAgICAgaml0L0pJ
VENhbGwzMl82NC5jcHAKQEAgLTEzOSw2ICsxNDEsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGppdC9KSVRPcGNvZGVzLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKyAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaCBcCkBAIC0zNTQsNiArMzU2LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0
SklUQ29kZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIFwKQEAgLTM3Myw2
ICszNzcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJS
b3V0aW5lLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hlYXAuY3Bw
IFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAgXAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCBcCisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgXAogICAgIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAgXApAQCAtMTM3LDYgKzEzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgXAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcCBcCisg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGlj
LmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgXAogICAgIGppdC9KSVRDYWxs
LmNwcCBcCkBAIC0xNDcsNiArMTQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCisgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBc
CiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAog
ICAgIHBhcnNlci9MZXhlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyMjA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDYgKzE4NTgs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEpJVC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTkxOCw2ICsxOTI2LDE0IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxK
SVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRTdHViUm91dGluZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUU3R1YnMuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTIyMTQsNiArMjIzMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMSBAQAog
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1
QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Rjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERD
REQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQz
MDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY3QjI5NEExNEMzQ0QyOTAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QjI5NDgxNEMzQ0Qy
MzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODc1LDYgKzg4MCwx
MiBAQAogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJv
dXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMjYxNUE4Q0MxQjAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFN0dWJSb3V0aW5lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDJE
MTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdD
QXdhcmVKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5Miw2ICsxNzAzLDggQEAKIAkJCQlBN0I0OERCNjBF
RTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhE
QjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRC
NjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cCAqLywKKwkJCQkwRjc2NkQyRDE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcCAqLywKKwkJCQkwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmggKi8sCiAJCQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuY3BwICovLAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJ
VC5jcHAgKi8sCkBAIC0xNzExLDYgKzE3MjQsOCBAQAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4
ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAw
QTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZC
OEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oICovLAorCQkJCTBGNzY2RDI2MTVBOENDMUIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8sCisJCQkJMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMTRBMjNENkMwRjRFMTlDRTAwMjND
REFEIC8qIEpJVFN0dWJzLmNwcCAqLywKIAkJCQkxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyog
SklUU3R1YnMuaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggKi8sCkBAIC0xNzUyLDYgKzE3NjcsOCBAQAogCQkJCTE0QkE3QTk2MTNBQURGRjgw
MDVCN0MyQyAvKiBIZWFwLmggKi8sCiAJCQkJQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhl
YXBCbG9jay5oICovLAogCQkJCTE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZp
c2l0b3IuaCAqLywKKwkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmVTZXQuY3BwICovLAorCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91
dGluZVNldC5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhh
bmRsZXIuaCAqLywKIAkJCQkxNDJFMzEzMDEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCAqLywK
IAkJCQkxNDJFMzEzMTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oICovLApAQCAtMjgx
NSw2ICsyODMyLDggQEAKIAkJCQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc3MjE1OTI3NUQ4MDA0Q0I5RkYgLyog
UmVzb2x2ZUdsb2JhbFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzE2OEMxNUEzQjIz
NTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc2NkQy
QzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMzQwNyw2ICszNDI2LDkgQEAKIAkJCQlDMkQ1OEMzNDE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNDI3NzExNTkyNzVENTAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3NjZEMjgxNUE4Q0MxRTAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzY2RDJCMTVBOENDMzgwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjc2NkQyRjE1
QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEluc3Ry
dWN0aW9uX2gKICNkZWZpbmUgSW5zdHJ1Y3Rpb25faAogCisjaW5jbHVkZSAiSklUU3R1YlJvdXRp
bmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgog
I2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgpAQCAtNTIsOCArNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBzdHJ1Y3QgVmFsdWVQcm9maWxlOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RT
dHViUm91dGluZVR5cGU7Ci0KICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRf
c2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xk
IGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtNjEsNyArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RydWN0IFBvbHltb3Jw
aGljU3R1YkluZm8gewogICAgICAgICAgICAgYm9vbCBpc0NoYWluOwogICAgICAgICAgICAgYm9v
bCBpc0RpcmVjdDsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0
dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZTsKKyAgICAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBi
YXNlOwogICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3RydWN0dXJlPiBwcm90bzsKQEAgLTczLDcgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGlu
ZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpA
QCAtODIsNyArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB0aGlzLT5p
c0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQorICAg
ICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jh
c2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAg
IGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CkBAIC05MSw3ICs5MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwg
U3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQg
c2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVD
aGFpbiogX2NoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CkBAIC0xMDUsMTcgKzEwNCwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBp
c0RpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJvb2wgaXNEaXJlY3QpCisgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
LCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGly
ZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25l
ciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3Ry
dWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUq
IGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHVi
Um91dGluZSwgZmlyc3RCYXNlLCBmaXJzdENoYWluLCBpc0RpcmVjdCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1
Y3R1CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBSZXBsYWNlOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAg
cmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihpbml0aWFsU2xvd1BhdGgpOworICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNs
b3dQYXRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTIy
MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKICAgICAgICAgSlNDZWxsKiBvd25l
ciwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZSkKKyAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAg
ICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7CkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNUcmFu
c2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkpOwogICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZTsK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViUm91dGluZTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCiBjbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsK
QEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLmNvZGUoKTsKKyAgICAgICAgcmV0dXJuIG1fbGlz
dC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBhZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0xNjgsNyArMTY5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX3Vuc2V0OwotICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKTsKKyAgICAgICAgICAgIHN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGRlcmVmKCk7CkBAIC0yODYsNyArMjg3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICB9IHB1dEJ5SWRMaXN0OwogICAgICAgICB9IHU7CiAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NDYWxs
SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCkBAIC0x
MDYsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZQog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
c3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkK
IHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
CkBAIC0xNjYsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNz
U3R1YgogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBz
bG93Q2FzZUxhYmVsKTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisg
ICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1
ZmZlciwKICAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFjY2VzcyBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwg
c3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKQEAgLTIyMCwxNCArMjIxLDE0IEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAg
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9y
IENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCiAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNzYsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJv
dG9CdWlsZExpc3QpOwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCB0cnVlKTsKQEAgLTMyMyw3ICszMjQsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIGxpc3RJbmRleCA9IDA7CiAgICAgfSBl
bHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewog
ICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwg
c3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsK
KyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
SklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIGxpc3RJbmRleCA9IDE7CiAgICAgfSBlbHNl
IHsKQEAgLTQzMyw3ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdp
bjsKICAgICAgICAgaWYgKGxpc3RJbmRleCkKLSAgICAgICAgICAgIGxhc3RQcm90b0JlZ2luID0g
Q29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgICAg
ICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CkBAIC00NDUsMTcgKzQ0NiwyMyBAQCBzdGF0aWMg
Ym9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgQ29kZUJsb2NrICVwLCBy
ZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAg
IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUoCisg
ICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAoIkRG
RyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciBDb2RlQmxvY2sgJXAsIHJldHVy
biBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAorICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgc2xvdC5jYWNo
ZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcgorICAgICAgICAgICAgICAg
IHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpDdXN0b20pOwog
ICAgICAgICAKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRp
b25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS5jb2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDk5LDcgKzUwNiw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJ
bmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJ
ZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIo
KTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNTEwLDEwICs1MTcs
MTAgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChs
aXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1Yklu
Zm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlv
bkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2lu
KTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CisgICAgICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgIAogICAgICAgICBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFBy
b3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAgICAgCkBAIC01MjEsNyArNTI4LDcgQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgICAgICAKICAgICAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4MSw3ICs1ODgsNyBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgUHV0S2luZCwKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKKyAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CkBAIC02NTUsNyArNjYyLDcgQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERSgKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAg
ICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3Ig
Q29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KApAQCAtNjczLDcg
KzY4MCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgc3R1YlJvdXRpbmUpCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKIApAQCAtNzU0LDggKzc2MSw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAg
IGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAg
CisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgKCJERkcgUHV0QnlJZCB0cmFuc2l0aW9uIHN0dWIgZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKQEAgLTc5OSw3ICs4MDYs
NyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CkBAIC04NDEsNyArODQ4LDcgQEAg
c3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKICAgICAg
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOwogICAgICAgICAKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6TmV3UHJvcGVydHkpIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQpAQCAtODg4LDcgKzg5NSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXQKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5j
b2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2Miw2IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9v
dHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsKIH0KIAotY2xhc3MgRHVtbXlNYXJr
SG9vayB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KLX07Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBt
YXJrSG9vaykKIHsKQEAgLTExMCwxNSArMTA1LDQ4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZGRTcGFuKHYKICAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIs
IG1hcmtIb29rKTsKIH0KIAorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lk
KiBiZWdpbiwgdm9pZCogZW5kKQogewotICAgIER1bW15TWFya0hvb2sgaG9vazsKLSAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBob29rKTsKKyAgICBEdW1teU1hcmtIb29rIGR1bW15Owor
ICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGR1bW15KTsKIH0KIAotdm9pZCBDb25zZXJ2
YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmIGRm
Z0NvZGVCbG9ja3MpCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZv
aWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcykKK3sKKyAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorY2xhc3MgQ29tcG9zaXRlTWFya0hvb2sgeworcHVibGlj
OgorICAgIENvbXBvc2l0ZU1hcmtIb29rKFQmIGZpcnN0LCBVJiBzZWNvbmQpCisgICAgICAgIDog
bV9maXJzdChmaXJzdCkKKyAgICAgICAgLCBtX3NlY29uZChzZWNvbmQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1hcmsodm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fZmly
c3QubWFyayhhZGRyZXNzKTsKKyAgICAgICAgbV9zZWNvbmQubWFyayhhZGRyZXNzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVCYgbV9maXJzdDsKKyAgICBVJiBtX3NlY29uZDsKK307CisKK3Zv
aWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKKyAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBK
SVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2Rl
QmxvY2tzKQogewotICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGRmZ0NvZGVCbG9ja3Mp
OworICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBERkdDb2RlQmxvY2tz
PiBtYXJrSG9vaygKKyAgICAgICAgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAg
ICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNDZWxsOwogY2xhc3MgREZHQ29kZUJsb2NrczsK
IGNsYXNzIEhlYXA7CitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKK2NsYXNzIEpTQ2VsbDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewogcHVibGljOgpAQCAtNDIsNyArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdp
biwgdm9pZCogZW5kKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBERkdD
b2RlQmxvY2tzJik7CisgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1
YlJvdXRpbmVTZXQmKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRT
dHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgp
OwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsNyBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhib29sIGZ1bGxHQykKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0aXZlIHJvb3RzIGJl
Zm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUKICAgICAvLyBnYXRo
ZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVmZXJlbmNl
IGlzIHZhbGlkLgogICAgIENvbnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJlYWRSb290cygmbV9v
YmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKKyAgICBtX2ppdFN0dWJSb3V0
aW5lcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKTsKICAgICAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVS
b290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CkBAIC00MjksNyArNDMwLDggQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFy
TWFya3MoKTsKICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyUmVnaXN0ZXJGaWxlUm9vdHMp
OwotICAgICAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3Rl
ckZpbGVSb290cywgbV9kZmdDb2RlQmxvY2tzKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMoCisgICAgICAgICAgICByZWdpc3RlckZpbGVSb290cywgbV9q
aXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nrcyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCkBAIC01NDAsOSArNTQyLDEwIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVs
bEdDKQogICAgICAgICB9CiAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdDUEhBU0UoVHJh
Y2VDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIlRyYWNl
IENvZGUgQmxvY2tzIik7CisgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFj
ZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXMiKTsKICAgICAgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBt
X2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAg
ICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2lu
Y2x1ZGUgIkhhbmRsZVN0YWNrLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCkBAIC00NCwxMCArNDUsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAg
IGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFjazsKKyAgICBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU7CiAgICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEhlYXA7CiAgICAgY2xh
c3MgSGVhcFJvb3RWaXNpdG9yOwogICAgIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKKyAgICBj
bGFzcyBKSVRTdHViUm91dGluZTsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogICAgIGNsYXNzIEpTVmFsdWU7CkBAIC0xNjgsNiArMTcxLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwor
ICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOworICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTIyOSw2ICsyMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVT
dGFjayBtX2hhbmRsZVN0YWNrOwogICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZnQ29kZUJsb2Nr
czsKKyAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAg
IEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIAogICAgICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklU
U3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFN0dWJSb3V0aW5l
U2V0OjpKSVRTdHViUm91dGluZVNldCgpIHsgfQorSklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHVi
Um91dGluZVNldCgpIHsgfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjphZGQoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKiByb3V0aW5lKQoreworICAgIEFTU0VSVCghcm91dGluZS0+bV9pc0pldHRp
c29uZWQpOworICAgIAorICAgIG1fbGlzdE9mUm91dGluZXMuYXBwZW5kKHJvdXRpbmUpOworICAg
IAorICAgIHVpbnRwdHJfdCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpOworICAgIHVp
bnRwdHJfdCBlbmQgPSByb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgdWludHB0cl90IHN0ZXAg
PSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKKyAgICBmb3IgKHVpbnRwdHJfdCBpdGVy
ID0gc3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgeworICAgICAgICBBU1NFUlQobV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVu
ZCgpKTsKKyAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmFkZChpdGVyLCByb3V0aW5lKTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmNsZWFyTWFya3MoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV9saXN0T2ZSb3V0aW5lc1tpXS0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOworfQorCit2b2lk
IEpJVFN0dWJSb3V0aW5lU2V0OjptYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcykKK3sKKyAgICBI
YXNoTWFwPHVpbnRwdHJfdCwgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKj46Oml0ZXJhdG9yIGl0ZXIg
PQorICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChhZGRyZXNzICYgfihKSVRTdHVi
Um91dGluZTo6YWRkcmVzc1N0ZXAoKSAtIDEpKTsKKyAgICAKKyAgICBpZiAoaXRlciA9PSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpdGVy
LT5zZWNvbmQtPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOworfQorCit2b2lkIEpJVFN0dWJSb3V0
aW5lU2V0OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBtX2xpc3RPZlJvdXRpbmVzW2ldOworICAg
ICAgICBpZiAoIXJvdXRpbmUtPm1faXNKZXR0aXNvbmVkIHx8IHJvdXRpbmUtPm1fbWF5QmVFeGVj
dXRpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVpbnRwdHJf
dCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpOworICAgICAgICB1aW50cHRyX3QgZW5k
ID0gcm91dGluZS0+ZW5kQWRkcmVzcygpOworICAgICAgICB1aW50cHRyX3Qgc3RlcCA9IEpJVFN0
dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBpdGVyID0g
c3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgeworICAgICAgICAgICAgQVNTRVJUKG1f
YWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpICE9IG1fYWRkcmVzc1RvUm91dGluZU1hcC5l
bmQoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRl
ciktPnNlY29uZCA9PSByb3V0aW5lKTsKKyAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1h
cC5yZW1vdmUoaXRlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPmRl
bGV0ZUZyb21HQygpOworICAgICAgICAKKyAgICAgICAgbV9saXN0T2ZSb3V0aW5lc1tpXSA9IG1f
bGlzdE9mUm91dGluZXMubGFzdCgpOworICAgICAgICBtX2xpc3RPZlJvdXRpbmVzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgaS0tOworICAgIH0KK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6
dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEdD
QXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSA9IG1fbGlzdE9mUm91dGluZXNbaV07CisgICAg
ICAgIGlmICghcm91dGluZS0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9y
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1
YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVFN0dWJSb3V0aW5l
U2V0X2gKKyNkZWZpbmUgSklUU3R1YlJvdXRpbmVTZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIEpJVFN0dWJS
b3V0aW5lU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRTdHViUm91dGluZVNldCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAorcHVibGljOgorICAgIEpJVFN0dWJSb3V0
aW5lU2V0KCk7CisgICAgfkpJVFN0dWJSb3V0aW5lU2V0KCk7CisgICAgCisgICAgdm9pZCBhZGQo
R0NBd2FyZUpJVFN0dWJSb3V0aW5lKik7CisKKyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAK
KyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQWRkcmVzcykKKyAgICB7CisgICAgICAgIHVp
bnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUFk
ZHJlc3MpOworICAgICAgICBpZiAoIUpJVFN0dWJSb3V0aW5lOjpwYXNzZXNGaWx0ZXIoYWRkcmVz
cykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtYXJrU2xvdyhhZGRy
ZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHVi
Um91dGluZXMoKTsKKyAgICAKKyAgICB2b2lkIHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RW
aXNpdG9yJik7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFk
ZHJlc3MpOworICAgIAorICAgIEhhc2hNYXA8dWludHB0cl90LCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUqPiBtX2FkZHJlc3NUb1JvdXRpbmVNYXA7CisgICAgVmVjdG9yPEdDQXdhcmVKSVRTdHViUm91
dGluZSo+IG1fbGlzdE9mUm91dGluZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBKSVRTdHViUm91dGluZVNldF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5o
CShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotICAgIGNsYXNzIEhlYXA7CiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7
CisgICAgY2xhc3MgSGVhcDsKIAogICAgIGNsYXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTWFjaGluZVRocmVhZHMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZp
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw5IEBAIHZvaWQgUmVnaXN0ZXJGaWxl
OjpnYXRoZXJDb25zZXJ2YXRpdmVSb28KICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4o
KSwgZW5kKCkpOwogfQogCi12b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBERkdDb2RlQmxvY2tzJiBk
ZmdDb2RlQmxvY2tzKQordm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQm
IGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGRmZ0NvZGVCbG9ja3MpOworICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSwgaml0U3R1YlJvdXRpbmVzLCBk
ZmdDb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBh
Y2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJG
aWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyRmlsZS5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKICAgICBj
bGFzcyBERkdDb2RlQmxvY2tzOworICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogICAgIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CkBA
IC02NCw3ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmLCBERkdDb2RlQmxvY2tzJik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIERGR0Nv
ZGVCbG9ja3MmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBS
ZWdpc3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiBw
dWJsaWM6CiAgICAgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFs
bG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAg
ICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkKICAgICB7CiAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2soYWxsb2NhdG9yc011dGV4KCkpOwogICAgICAgICBhbGxvY2F0b3Jz
KCkuYWRkKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3
Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNHbG9iYWxEYXRhOwogdm9pZCByZWxlYXNl
RXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERhdGEmKTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7CisKIGlubGluZSBzaXplX3Qgcm91bmRVcEFsbG9j
YXRpb25TaXplKHNpemVfdCByZXF1ZXN0LCBzaXplX3QgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYg
KChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gZ3JhbnVsYXJpdHkpIDw9IHJl
cXVlc3QpCkBAIC0xMDEsNiArMTAzLDE4IEBAIHR5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlIEV4ZWN1dGEKIGNsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKKyNpZiBDUFUoQVJNKQorc3Rh
dGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAy
NCAqIDEwMjQ7CisjZWxpZiBDUFUoWDg2XzY0KQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKKyNlbHNlCitzdGF0
aWMgY29uc3Qgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMzIgKiAxMDI0
ICogMTAyNDsKKyNlbmRpZgorCitleHRlcm4gdWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFi
bGVNZW1vcnlQb29sOworI2VuZGlmCisKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAg
IGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9v
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDI3ICs0NSwyMyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1l
c3BhY2UgSlNDIHsKICAgICAKLSNpZiBDUFUoQVJNKQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhl
ZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKLSNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7Ci0jZWxzZQot
c3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKLSNl
bmRpZgordWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogCiBjbGFz
cyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7
CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAg
OiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0
ZXMKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3Vu
ZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2
YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhmaXhlZFBvb2xT
aXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2Vy
dmVXaXRoR3VhcmRQYWdlcyhmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSwgT1NBbGxvY2F0
b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwogI2lm
ICEoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCiAgICAgICAg
IGlmICghbV9yZXNlcnZhdGlvbikKICAgICAgICAgICAgIENSQVNIKCk7CiAjZW5kaWYKICAgICAg
ICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9u
LnNpemUoKSA9PSBmaXhlZFBvb2xTaXplKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0
aW9uLnNpemUoKSA9PSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSk7CiAgICAgICAgICAg
ICBhZGRGcmVzaEZyZWVTcGFjZShtX3Jlc2VydmF0aW9uLmJhc2UoKSwgbV9yZXNlcnZhdGlvbi5z
aXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJh
c2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitHQ0F3YXJlSklUU3R1YlJvdXRpbmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSgKKyAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKKyAgICA6IEpJVFN0dWJSb3V0aW5lKGNvZGUpCisgICAgLCBtX21heUJlRXhlY3V0aW5n
KGZhbHNlKQorICAgICwgbV9pc0pldHRpc29uZWQoZmFsc2UpCit7CisgICAgZ2xvYmFsRGF0YS5o
ZWFwLm1faml0U3R1YlJvdXRpbmVzLmFkZCh0aGlzKTsKK30KKyAgICAKK0dDQXdhcmVKSVRTdHVi
Um91dGluZTo6fkdDQXdhcmVKSVRTdHViUm91dGluZSgpIHsgfQorCit2b2lkIEdDQXdhcmVKSVRT
dHViUm91dGluZTo6b2JzZXJ2ZVplcm9SZWZDb3VudCgpCit7CisgICAgaWYgKG1faXNKZXR0aXNv
bmVkKSB7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG1faXNKZXR0aXNvbmVkID0gdHJ1ZTsKKyAgICBtX3JlZkNvdW50ID0gMTsgLy8gUmV2
aXZlIHRoZSBvYmplY3QuIEl0J3Mgbm93IG93bmVkIGJ5IHRoZSBHQy4KK30KKwordm9pZCBHQ0F3
YXJlSklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZyb21HQygpCit7CisgICAgQVNTRVJUKG1faXNKZXR0
aXNvbmVkKTsKKyAgICBBU1NFUlQobV9yZWZDb3VudCA9PSAxKTsKKyAgICBBU1NFUlQoIW1fbWF5
QmVFeGVjdXRpbmcpOworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lkIEdDQXdhcmVKSVRTdHVi
Um91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikKK3sKK30K
KworTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3
YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93
bmVyLAorICAgIEpTQ2VsbCogb2JqZWN0KQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNv
ZGUsIGdsb2JhbERhdGEpCisgICAgLCBtX29iamVjdChnbG9iYWxEYXRhLCBvd25lciwgb2JqZWN0
KQoreworfQorCitNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdDo6fk1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KCkKK3sKK30KKwordm9pZCBN
YXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdDo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5k
KCZtX29iamVjdCk7Cit9CisKK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0
dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgY29uc3QgSlNDZWxsKiwKKyAgICBib29sIG1h
a2VzQ2FsbHMpCit7CisgICAgaWYgKCFtYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEpJVFN0dWJSb3V0aW5lKGNvZGUpKTsKKworICAgIHJldHVybiBzdGF0aWNfcG9pbnRl
cl9jYXN0PEpJVFN0dWJSb3V0aW5lPigKKyAgICAgICAgYWRvcHRSZWYobmV3IEdDQXdhcmVKSVRT
dHViUm91dGluZShjb2RlLCBnbG9iYWxEYXRhKSkpOworfQorCitQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGUsCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAgIGNvbnN0IEpT
Q2VsbCogb3duZXIsCisgICAgYm9vbCBtYWtlc0NhbGxzLAorICAgIEpTQ2VsbCogb2JqZWN0KQor
eworICAgIGlmICghbWFrZXNDYWxscykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRT
dHViUm91dGluZShjb2RlKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8
SklUU3R1YlJvdXRpbmU+KAorICAgICAgICBhZG9wdFJlZihuZXcgTWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3QoY29kZSwgZ2xvYmFsRGF0YSwgb3duZXIsIG9iamVjdCkp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVK
SVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDQXdhcmVKSVRT
dHViUm91dGluZV9oCisjZGVmaW5lIEdDQXdhcmVKSVRTdHViUm91dGluZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRTdHVi
Um91dGluZS5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CisKKy8vIFVzZSB0aGlzIHN0dWIgcm91dGluZSBpZiB5
b3Uga25vdyB0aGF0IHlvdXIgY29kZSBtaWdodCBiZSBvbiBzdGFjayB3aGVuCisvLyBlaXRoZXIg
R0Mgb3Igb3RoZXIga2luZHMgb2Ygc3R1YiBkZWxldGlvbiBoYXBwZW4uIEJhc2ljYWx5LCBpZiB5
b3VyIHN0dWIKKy8vIHJvdXRpbmUgbWFrZXMgY2FsbHMgKGVpdGhlciB0byBKUyBjb2RlIG9yIHRv
IEMrKyBjb2RlKSB0aGVuIHlvdSBzaG91bGQKKy8vIGFzc3VtZSB0aGF0IGl0J3MgcG9zc2libGUg
Zm9yIHRoYXQgSlMgb3IgQysrIGNvZGUgdG8gZG8gc29tZXRoaW5nIHRoYXQKKy8vIGNhdXNlcyB0
aGUgc3lzdGVtIHRvIHRyeSB0byBkZWxldGUgeW91ciByb3V0aW5lLiBVc2luZyB0aGlzIHJvdXRp
bmUgdHlwZQorLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgZGVsZXRpb24gaXMgZGVsYXllZCB1
bnRpbCB0aGUgR0MgcHJvdmVzIHRoYXQgdGhlCisvLyByb3V0aW5lIGlzIG5vIGxvbmdlciBydW5u
aW5nLiBZb3UgY2FuIGFsc28gc3ViY2xhc3MgdGhpcyByb3V0aW5lIGlmIHlvdQorLy8gd2FudCB0
byBtYXJrIGFkZGl0aW9uYWwgb2JqZWN0cyBkdXJpbmcgR0MgaW4gdGhvc2UgY2FzZXMgd2hlcmUg
dGhlCisvLyByb3V0aW5lIGlzIGtub3duIHRvIGJlIGV4ZWN1dGluZywgb3IgaWYgeW91IHdhbnQg
dG8gZm9yY2UgdGhpcyByb3V0aW5lIHRvCisvLyBrZWVwIG90aGVyIHJvdXRpbmVzIGFsaXZlIChm
b3IgZXhhbXBsZSBkdWUgdG8gdGhlIHVzZSBvZiBhIHNsb3ctcGF0aAorLy8gbGlzdCB3aGljaCBk
b2VzIG5vdCBnZXQgcmVjbGFpbWVkIGFsbCBhdCBvbmNlKS4KK2NsYXNzIEdDQXdhcmVKSVRTdHVi
Um91dGluZSA6IHB1YmxpYyBKSVRTdHViUm91dGluZSB7CitwdWJsaWM6CisgICAgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYp
OworICAgIHZpcnR1YWwgfkdDQXdhcmVKSVRTdHViUm91dGluZSgpOworICAgIAorICAgIHZvaWQg
bWFya1JlcXVpcmVkT2JqZWN0cyhTbG90VmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAg
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbCh2aXNpdG9yKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkZWxldGVGcm9tR0MoKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
b2JzZXJ2ZVplcm9SZWZDb3VudCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CisKKyAgICBib29sIG1fbWF5QmVFeGVjdXRpbmc7Cisg
ICAgYm9vbCBtX2lzSmV0dGlzb25lZDsKK307CisKKy8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRv
IG1hcmsgb25lIGFkZGl0aW9uYWwgb2JqZWN0IGR1cmluZyBHQyBpZiB5b3VyIHN0dWIKKy8vIHJv
dXRpbmUgaXMga25vd24gdG8gYmUgZXhlY3V0aW5nLgorY2xhc3MgTWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3QgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsK
K3B1YmxpYzoKKyAgICBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgK
KyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29u
c3QgSlNDZWxsKiBvd25lciwKKyAgICAgICAgSlNDZWxsKiBvYmplY3QpOworICAgIHZpcnR1YWwg
fk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KCk7CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90
VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fb2JqZWN0
OworfTsKKworLy8gSGVscGVyIGZvciBlYXNpbHkgY3JlYXRpbmcgYSBHQy1hd2FyZSBKSVQgc3R1
YiByb3V0aW5lLiBGb3IgdGhlIHZhcmFyZ3MsCisvLyBwYXNzIHplcm8gb3IgbW9yZSBKU0NlbGwq
J3MuIFRoaXMgd2lsbCBlaXRoZXIgY3JlYXRlIGEgSklUU3R1YlJvdXRpbmUsIGEKKy8vIEdDQXdh
cmVKSVRTdHViUm91dGluZSwgb3IgYW4gT2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGlu
ZSBhcworLy8gYXBwcm9wcmlhdGUuIEdlbmVyYWxseSB5b3Ugb25seSBuZWVkIHRvIHBhc3MgcG9p
bnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQKKy8vIGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRvIEMrKyBv
ciBKUy4KKy8vIAorLy8gUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJv
dXRpbmUoCisvLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisvLyAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisvLyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAorLy8g
ICAgYm9vbCBtYWtlc0NhbGxzLAorLy8gICAgLi4uKTsKKy8vCisvLyBOb3RlIHRoYXQgd2UgZG9u
J3QgYWN0dWFsbHkgdXNlIEMtc3R5bGUgdmFyYXJncyBiZWNhdXNlIHRoYXQgbGVhZHMgdG8KKy8v
IHN0cmFuZ2UgdHlwZS1yZWxhdGVkIHByb2JsZW1zLiBGb3IgZXhhbXBsZSBpdCB3b3VsZCBwcmVj
bHVkZSB1cyBmcm9tIHVzaW5nCisvLyBvdXIgY3VzdG9tIG9mIHBhc3NpbmcgJzAnIGFzIE5VTEwg
cG9pbnRlci4gQmVzaWRlcywgd2hlbiBJIGRpZCB0cnkgdG8gd3JpdGUKKy8vIHRoaXMgZnVuY3Rp
b24gdXNpbmcgdmFyYXJncywgSSBlbmRlZCB1cCB3aXRoIG1vcmUgY29kZSB0aGFuIHRoaXMgc2lt
cGxlCisvLyB3YXkuCisKK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgIGJvb2wgbWFrZXNDYWxs
cyk7CitQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAg
ICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBib29sIG1ha2VzQ2FsbHMsIEpTQ2VsbCog
b2JqZWN0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQor
CisjZW5kaWYgLy8gR0NBd2FyZUpJVFN0dWJSb3V0aW5lX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
SklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgpAQCAtNTU3LDEyICs1NTgsMTcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0gICAgc3R1YkluZm8tPnN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgi
QmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUo
KSkpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAor
ICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAg
ICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIHN0dWIgZm9yIENvZGVCbG9jayAl
cCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRk
cmVzcy52YWx1ZSgpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYywK
KyAgICAgICAgbmV3U3RydWN0dXJlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
bV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5l
KHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5j
b2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1
cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzKQpAQCAtNjI0LDcgKzYzMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNo
R2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREUoCisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiQmFzZWxpbmUg
Z2V0X2J5X2lkIGFycmF5IGxlbmd0aCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2lu
dCAlcCIsCiAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KApAQCAtNjMzLDcgKzYzOSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBh
dGNoR2V0QXJyYXlMZW4KICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHVi
Um91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBp
biBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlf
b3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY5NCwxNiArNzAwLDIwIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9CiAKICAgICAvLyBUcmFjayB0
aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIu
Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0
Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENv
ZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAg
ICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAo
IkJhc2VsaW5lIGdldF9ieV9pZCBwcm90byBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBw
b2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9n
bG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAg
ICAgIG5lZWRzU3R1YkxpbmspOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgog
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNo
ZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRo
YW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzQ3LDcgKzc1Nyw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgfQogICAg
IH0gICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1v
cnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUo
KSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25M
YWJlbChKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogICAgIGlmICghbGFzdFByb3RvQmVn
aW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhC
ZWdpbik7CiAgICAgCkBAIC03NTYsMTggKzc2NiwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUg
aG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBk
ZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRf
YnlfaWQgc2VsZiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgK
KyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlf
aWQgc2VsZiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisg
ICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHVi
TGluayk7CiAKICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3Ry
dWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9j
ayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3Rv
dHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKQEAgLTgxOCwyNSArODMyLDI5IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6YXND
b2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJv
dXRpbmUpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0Jl
Z2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2lu
KTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2gg
Y29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVz
LgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsK
ICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQg
cHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAg
ICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAg
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHBy
b3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQo
CisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAg
ICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5r
KTsKIAogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAg
CiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUg
aG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1w
TG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+
cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3Vu
dCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJv
cGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg5Miwx
OCArOTEwLDIyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAg
ICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJl
bChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5l
LmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9j
YXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKICAgICAKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBP
biBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBp
dCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hhaW4gbGlzdCBzdHViIGZv
ciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1
YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3Ig
Q29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2Nr
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICAKICAgICAvLyBU
cmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQg
bGF0ZXIuCiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwpAQCAtOTExLDcgKzkzMyw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAvLyBGaW5h
bGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBq
dW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05Njks
MTcgKzk5MSwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogICAg
IAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwg
YmUgZGVsZXRlZCBsYXRlci4KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGlu
ZSBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAi
LAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RF
KAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9i
eV9pZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJl
c3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAg
ICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1Ykxp
bmspOwogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgIAogICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
LgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpJVC5oIgog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCkBAIC01OTUsMTIgKzU5NiwxNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fcmVhbGxvYykpOwogICAgIH0KICAgICAKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGlu
ZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAi
LAotICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5B
TElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2Vs
aW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAor
ICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCisgICAgICAgIHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MsCisgICAgICAgIG5ld1N0cnVj
dHVyZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAK
IHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTY1Nyw3
ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCiAgICAg
Ly8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxl
dGVkIGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisg
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAg
ICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiQmFzbGluZSBKSVQgZ2V0X2J5X2lkIGFycmF5IGxl
bmd0aCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBt
X2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KApAQCAtNjY2
LDcgKzY3Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAg
ICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3Bf
cHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFp
bCkpOwpAQCAtNzI0LDE2ICs3MzAsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvKFN0cgogICAgICAgICB9CiAgICAgfQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhh
dmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAg
ICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENvZGVCbG9jayAl
cCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIHN0dWJJ
bmZvLT5zdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTEla
RV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5l
IEpJVCBnZXRfYnlfaWQgcHJvdG8gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQg
JXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxh
YmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFs
RGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBu
ZWVkc1N0dWJMaW5rKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0
dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4g
ZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVy
LnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03NzYsNyArNzg2LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29k
ZVB0cihwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJv
dXRpbmUpKTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdp
biA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwogCkBAIC03ODUsMTggKzc5NSwy
MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24g
c3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQg
d2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgc3R1YkNvZGUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwK
LSAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2Nr
ICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViQ29kZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAg
ICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAg
ICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJl
dHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAg
ICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLT5jb2RlKCkuY29k
ZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg0OCwyNCArODYyLDI4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIHBh
dGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3Jp
Z2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3Rv
QmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHViUm91dGluZTo6YXNDb2Rl
UHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2lu
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsK
IAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBh
dCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCi0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAg
cGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBsaXN0
IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29k
ZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YkNvZGUgPSBjcmVhdGVK
SVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNo
QnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIGxpc3Qg
c3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBw
cm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEs
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJv
dG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1
cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJDb2RlLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0
dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtOTIxLDE4ICs5MzksMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3Jt
YXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93
IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENv
ZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAKICAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAotICAgIENvZGVS
ZWYgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAg
ICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3IgQ29kZUJs
b2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAg
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5l
KAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAg
ICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gbGlzdCBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgLy8gVHJhY2sgdGhl
IHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgog
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgY2hhaW4sIGlzRGlyZWN0KTsKQEAgLTk0MCw3ICs5NjIsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgLy8gRmluYWxseSBwYXRj
aCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJl
IGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
c3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTk5LDE3ICsxMDIx
LDIxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7CiAKICAgICAvLyBU
cmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQg
bGF0ZXIuCi0gICAgQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAg
IHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gc3R1
YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxv
Y2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJ
VFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hC
dWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVj
dHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwog
CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVy
ZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKworI2lmIEVOQUJMRShKSVQpCisK
KyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworSklUU3R1YlJvdXRpbmU6On5KSVRTdHViUm91dGluZSgpIHsgfQorCit2b2lk
IEpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVyb1JlZkNvdW50KCkKK3sKKyAgICBBU1NFUlQoIW1f
cmVmQ291bnQpOworICAgIGRlbGV0ZSB0aGlzOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUU3R1
YlJvdXRpbmVfaAorI2RlZmluZSBKSVRTdHViUm91dGluZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworLy8gVGhpcyBpcyBhIGJhc2UtY2xhc3Mg
Zm9yIEpJVCBzdHViIHJvdXRpbmVzLCBhbmQgYWxzbyB0aGUgY2xhc3MgeW91IHdhbnQKKy8vIHRv
IGluc3RhbnRpYXRlIGRpcmVjdGx5IGlmIHlvdSBoYXZlIGEgcm91dGluZSB0aGF0IGRvZXMgbm90
IG5lZWQgYW55CisvLyBoZWxwIGZyb20gdGhlIEdDLiBJZiBpbiBkb3VidCwgdXNlIG9uZSBvZiB0
aGUgb3RoZXIgc3R1YiByb3V0aW5lcy4gQnV0CisvLyBpZiB5b3Uga25vdyBmb3Igc3VyZSB0aGF0
IHRoZSBzdHViIHJvdXRpbmUgY2Fubm90IGJlIG9uIHRoZSBzdGFjayB3aGlsZQorLy8gc29tZW9u
ZSB0cmlnZ2VycyBhIHN0dWIgcm91dGluZSByZXNldCwgdGhlbiB1c2luZyB0aGlzIHdpbGwgc3Bl
ZWQgdXAKKy8vIG1lbW9yeSByZWNsYW1hdGlvbi4gT25lIGNhc2Ugd2hlcmUgYSBzdHViIHJvdXRp
bmUgc2F0aXNmaWVzIHRoaXMKKy8vIGNvbmRpdGlvbiBpcyBpZiBpdCBkb2Vzbid0IG1ha2UgYW55
IGNhbGxzLCB0byBlaXRoZXIgQysrIG9yIEpTIGNvZGUuIEluCisvLyBzdWNoIGEgcm91dGluZSB5
b3Uga25vdyB0aGF0IGl0IGNhbm5vdCBiZSBvbiB0aGUgc3RhY2sgd2hlbiBhbnl0aGluZworLy8g
aW50ZXJlc3RpbmcgaGFwcGVucy4KKy8vIFNlZSBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBmb3Ig
dGhlIG90aGVyIHN0dWIgcm91dGluZXMuCitjbGFzcyBKSVRTdHViUm91dGluZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSklUU3R1YlJvdXRpbmUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9yZWZDb3VudCgx
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gcGFz
cyBhIENvZGVQdHIgdG8gc29tZW9uZSB3aG8gaW5zaXN0cyBvbiB0YWtpbmcKKyAgICAvLyBhIFJl
ZlB0cjxKSVRTdHViUm91dGluZT4uCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHJhd0NvZGVQb2ludGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBK
SVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihyYXdDb2RlUG9pbnRlcikpKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SklUU3R1
YlJvdXRpbmUoKTsKKyAgICAKKyAgICAvLyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaXMgY29weWFi
bGUsIGJ1dCBhdCB0aGUgY29zdCBvZiByZWZlcmVuY2UKKyAgICAvLyBjb3VudGluZyBjaHVybi4g
UmV0dXJuaW5nIGEgcmVmZXJlbmNlIGlzIGEgZ29vZCB3YXkgb2YgcmVkdWNpbmcKKyAgICAvLyB0
aGUgY2h1cm4uCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlOyB9CisgICAgCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBhc0NvZGVQdHIoUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUpCisgICAg
eworICAgICAgICBpZiAoIXN0dWJSb3V0aW5lKQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cigpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJlc3VsdCA9IHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpOworICAgICAgICBBU1NFUlQoISFy
ZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJl
ZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50Kys7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKC0tbV9yZWZDb3VudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgb2JzZXJ2ZVplcm9SZWZDb3VudCgpOworICAgIH0KKyAgICAKKyAgICAv
LyBIZWxwZXJzIGZvciB0aGUgR0MgdG8gZGV0ZXJtaW5lIGhvdyB0byBkZWFsIHdpdGggbWFya2lu
ZyBKSVQgc3R1YgorICAgIC8vIHJvdXRpbmVzLgorICAgIHVpbnRwdHJfdCBzdGFydEFkZHJlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydEFzSW50ZWdl
cigpOyB9CisgICAgdWludHB0cl90IGVuZEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGUu
ZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmRBc0ludGVnZXIoKTsgfQorICAgIHN0YXRpYyB1aW50cHRy
X3QgYWRkcmVzc1N0ZXAoKSB7IHJldHVybiBqaXRBbGxvY2F0aW9uR3JhbnVsZTsgfQorICAgIAor
ICAgIHN0YXRpYyBib29sIGNhblBlcmZvcm1SYW5nZUZpbHRlcigpCisgICAgeworI2lmIEVOQUJM
RShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxz
ZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisgICAgc3RhdGljIHVpbnRw
dHJfdCBmaWx0ZXJpbmdTdGFydEFkZHJlc3MoKQorICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJM
RV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbDsKKyNlbHNlCisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwor
ICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbHRl
cmluZ0V4dGVudFNpemUoKQorICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1Jf
RklYRUQpCisgICAgICAgIHJldHVybiBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNl
bHNlCisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgICAgICByZXR1cm4g
MDsKKyNlbmRpZgorICAgIH0KKyAgICBzdGF0aWMgYm9vbCBwYXNzZXNGaWx0ZXIodWludHB0cl90
IGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoIWNhblBlcmZvcm1SYW5nZUZpbHRlcigpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAoYWRkcmVzcyAt
IGZpbHRlcmluZ1N0YXJ0QWRkcmVzcygpID49IGZpbHRlcmluZ0V4dGVudFNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOworICAgIHVuc2lnbmVkIG1fcmVm
Q291bnQ7Cit9OworCisvLyBIZWxwZXIgZm9yIHRoZSBjcmVhdGlvbiBvZiBzaW1wbGUgc3R1YiBy
b3V0aW5lcyB0aGF0IG5lZWQgbm8gaGVscCBmcm9tIHRoZSBHQy4KKyNkZWZpbmUgRklOQUxJWkVf
Q09ERV9GT1JfU1RVQihwYXRjaEJ1ZmZlciwgZGF0YUxvZ0FyZ3VtZW50cykgXAorICAgIChhZG9w
dFJlZihuZXcgSklUU3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERSgocGF0Y2hCdWZmZXIpLCBkYXRh
TG9nQXJndW1lbnRzKSkpKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisKKyNlbmRpZiAvLyBKSVRTdHViUm91dGluZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyMiw3ICsx
NzIyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAg
ICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsK
ICAgICAgICAgICAgIEFTU0VSVCghc3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAgICAgICAgICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIDAsIHN0dWJJbmZv
LT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAg
ICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAt
MTc0OCwxMiArMTc0OCwxMiBAQCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBnCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9wcm90bzoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZv
LT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0
KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAg
ICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0
LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgog
ICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHVi
SW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8t
PnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xp
c3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0OgpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNyArNDUsMjcgQEAgcHJpdmF0ZToK
IHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsK
ICAgICAKLSAgICB2b2lkKiBzdGFydCgpCisgICAgdm9pZCogc3RhcnQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAgICAgfQogICAgIAotICAgIHZvaWQqIGVuZCgpCisg
ICAgdm9pZCogZW5kKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJ
bkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZEFzSW50
ZWdlcigpKTsKKyAgICB9CisgICAgCisgICAgdWludHB0cl90IHN0YXJ0QXNJbnRlZ2VyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9z
dGFydCk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBlbmRBc0ludGVnZXIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXJ0QXNJbnRlZ2VyKCkgKyBtX3NpemVJbkJ5dGVzOwog
ICAgIH0KICAgICAgICAgCi0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkKKyAgICBzaXplX3Qgc2l6
ZUluQnl0ZXMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CiAg
ICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151172</attachid>
            <date>2012-07-08 19:57:40 -0700</date>
            <delta_ts>2012-07-08 20:06:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jettisonstubs_patch_5.diff</filename>
            <type>text/plain</type>
            <size>102008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMi0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnaXZlcyB0aGUgR0MgYXdhcmVuZXNz
IG9mIGFsbCBKSVQtZ2VuZXJhdGVkIHN0dWJzIGZvciBpbmxpbmUgY2FjaGVzLiBUaGF0CisgICAg
ICAgIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgSklULWdlbmVyYXRlZCBzdHVi
LCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBjdXJyZW50bHkgcnVubmluZzogaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBtaWdo
dAorICAgICAgICBiZSwgdGhlIEdDIHdpbGwga2luZGx5IGRlZmVyIGRlbGV0aW9uIHVudGlsIG5v
bi1ydW5uaW5nLW5lc3MgaXMgcHJvdmVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFBvbHltb3JwaGljU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRp
bmUpOgorICAgICAgICAoUHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlND
OjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRy
YW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKER1bW15TWFya0hv
b2spOgorICAgICAgICAoSlNDOjpEdW1teU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgIChDb21wb3NpdGVNYXJrSG9vayk6Cisg
ICAgICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjpDb21wb3NpdGVNYXJrSG9vayk6CisgICAg
ICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKiBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ29uc2VydmF0aXZlUm9v
dHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SGVhcCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OkpJVFN0dWJSb3V0
aW5lU2V0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHViUm91dGlu
ZVNldCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lU2V0OjptYXJrU2xvdyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAgICAqIGhl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
ayk6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHMpOgorICAgICAgICAoTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5K
SVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRT
dHViUm91dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OmNvZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKToKKyAg
ICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJv
dXRpbmU6OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6cGFzc2VzRmlsdGVyKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorCiAyMDEyLTA3LTA4ICBab2x0YW4gSGVyY3plZyAg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dIEltcGxlbWVudGluZyBt
aXNzaW5nIG1hY3JvIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWZ0ZXIgcjEyMTkyNQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXAuY3Bw
CiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKICAgICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJs
b2NrLmNwcApAQCAtMTI5LDYgKzEzMCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAKKyAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCiAgICAgaml0L0pJVEFyaXRobWV0aWMuY3BwCiAgICAgaml0L0pJ
VENhbGwzMl82NC5jcHAKQEAgLTEzOSw2ICsxNDEsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGppdC9KSVRPcGNvZGVzLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKyAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaCBcCkBAIC0zNTQsNiArMzU2LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0
SklUQ29kZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIFwKQEAgLTM3Myw2
ICszNzcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJS
b3V0aW5lLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hlYXAuY3Bw
IFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAgXAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCBcCisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgXAogICAgIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAgXApAQCAtMTM3LDYgKzEzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgXAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcCBcCisg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGlj
LmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgXAogICAgIGppdC9KSVRDYWxs
LmNwcCBcCkBAIC0xNDcsNiArMTQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCisgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBc
CiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAog
ICAgIHBhcnNlci9MZXhlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyMjA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDYgKzE4NTgs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEpJVC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTkxOCw2ICsxOTI2LDE0IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxK
SVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRTdHViUm91dGluZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUU3R1YnMuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTIyMTQsNiArMjIzMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMSBAQAog
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1
QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Rjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERD
REQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQz
MDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKIAkJMEY3QjI5NEExNEMzQ0QyOTAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QjI5NDgxNEMzQ0Qy
MzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODc1LDYgKzg4MCwx
MiBAQAogCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2VuY3lMaXN0Lmg7
IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklU
U3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJv
dXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMjYxNUE4Q0MxQjAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lU2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMkExNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFN0dWJSb3V0aW5lU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDJE
MTVBOERDREQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY3NjZEMkUxNUE4RENERDAwOEYzNjNFIC8qIEdD
QXdhcmVKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NDYWxsSGVscGVycy5oOyBwYXRoID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5Miw2ICsxNzAzLDggQEAKIAkJCQlBN0I0OERCNjBF
RTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhE
QjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRC
NjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cCAqLywKKwkJCQkwRjc2NkQyRDE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmNwcCAqLywKKwkJCQkwRjc2NkQyRTE1QThEQ0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmggKi8sCiAJCQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuY3BwICovLAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJ
VC5jcHAgKi8sCkBAIC0xNzExLDYgKzE3MjQsOCBAQAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4
ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCiAJCQkJQTdDMUU4QzgxMTJFNzAxQzAw
QTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCTk2MDYyNjk1MEZC
OEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oICovLAorCQkJCTBGNzY2RDI2MTVBOENDMUIw
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgKi8sCisJCQkJMEY3NjZEMUMxNUE1MDI4RDAw
OEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMTRBMjNENkMwRjRFMTlDRTAwMjND
REFEIC8qIEpJVFN0dWJzLmNwcCAqLywKIAkJCQkxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyog
SklUU3R1YnMuaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVC
YXJyaWVyLmggKi8sCkBAIC0xNzUyLDYgKzE3NjcsOCBAQAogCQkJCTE0QkE3QTk2MTNBQURGRjgw
MDVCN0MyQyAvKiBIZWFwLmggKi8sCiAJCQkJQzJDOEQwMkYxNEEzQ0VGQzAwNTc4RTY1IC8qIEhl
YXBCbG9jay5oICovLAogCQkJCTE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZp
c2l0b3IuaCAqLywKKwkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmVTZXQuY3BwICovLAorCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91
dGluZVNldC5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhh
bmRsZXIuaCAqLywKIAkJCQkxNDJFMzEzMDEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCAqLywK
IAkJCQkxNDJFMzEzMTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oICovLApAQCAtMjgx
NSw2ICsyODMyLDggQEAKIAkJCQkwRkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc3MjE1OTI3NUQ4MDA0Q0I5RkYgLyog
UmVzb2x2ZUdsb2JhbFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzE2OEMxNUEzQjIz
NTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjc2NkQy
QzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMzQwNyw2ICszNDI2LDkgQEAKIAkJCQlDMkQ1OEMzNDE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNDI3NzExNTkyNzVENTAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY3NjZEMjgxNUE4Q0MxRTAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzY2RDJCMTVBOENDMzgwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjc2NkQyRjE1
QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZuZGVmIEluc3Ry
dWN0aW9uX2gKICNkZWZpbmUgSW5zdHJ1Y3Rpb25faAogCisjaW5jbHVkZSAiSklUU3R1YlJvdXRp
bmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgog
I2luY2x1ZGUgIlByb3BlcnR5U2xvdC5oIgpAQCAtNTIsOCArNTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBzdHJ1Y3QgVmFsdWVQcm9maWxlOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RT
dHViUm91dGluZVR5cGU7Ci0KICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRf
c2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xk
IGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtNjEsNyArNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RydWN0IFBvbHltb3Jw
aGljU3R1YkluZm8gewogICAgICAgICAgICAgYm9vbCBpc0NoYWluOwogICAgICAgICAgICAgYm9v
bCBpc0RpcmVjdDsKLSAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0
dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZTsKKyAgICAgICAgICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBi
YXNlOwogICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3RydWN0dXJlPiBwcm90bzsKQEAgLTczLDcgKzcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGlu
ZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpA
QCAtODIsNyArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB0aGlzLT5p
c0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUs
IFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQorICAg
ICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVy
LCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jh
c2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAg
IGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CkBAIC05MSw3ICs5MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwg
U3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQg
c2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxK
SVRTdHViUm91dGluZT4gX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmVD
aGFpbiogX2NoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uuc2V0
KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CkBAIC0xMDUsMTcgKzEwNCwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBmaXJzdEJhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViUm91dGluZSwgZmlyc3RCYXNlLCBp
c0RpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogZmlyc3RCYXNlLCBTdHJ1Y3R1cmUqIGZpcnN0UHJvdG8sIGJvb2wgaXNEaXJlY3QpCisgICAg
ICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
LCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGly
ZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25l
ciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3Ry
dWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCisgICAgICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUq
IGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4sIGJvb2wgaXNEaXJlY3QpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGxpc3RbMF0uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBzdHVi
Um91dGluZSwgZmlyc3RCYXNlLCBmaXJzdENoYWluLCBpc0RpcmVjdCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCBQdXRCeUlkQWNjZXNzIFB1dEJ5SWRBY2Nlc3M6OmZyb21TdHJ1
Y3R1CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CiAgICAgICAgIHJlc3VsdC5t
X3R5cGUgPSBSZXBsYWNlOwogICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUuY29weUZyb20o
c3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlKTsKLSAgICAgICAg
cmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihpbml0aWFsU2xvd1BhdGgpOworICAgICAgICByZXN1bHQubV9zdHViUm91
dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNs
b3dQYXRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuaAkocmV2aXNpb24gMTIy
MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluLAotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAg
ICAgIHJlc3VsdC5tX3R5cGUgPSBUcmFuc2l0aW9uOwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKICAgICAgICAgSlNDZWxsKiBvd25l
ciwKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCi0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZSkKKyAgICAgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4g
c3R1YlJvdXRpbmUpCiAgICAgewogICAgICAgICBQdXRCeUlkQWNjZXNzIHJlc3VsdDsKICAgICAg
ICAgcmVzdWx0Lm1fdHlwZSA9IFJlcGxhY2U7CkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9jaGFpbi5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKCkgY29uc3QKKyAgICBQYXNzUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNUcmFu
c2l0aW9uKCkgfHwgaXNSZXBsYWNlKCkpOwogICAgICAgICByZXR1cm4gbV9zdHViUm91dGluZTsK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fb2xkU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fbmV3U3RydWN0
dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9jaGFpbjsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbV9zdHViUm91dGluZTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRp
bmU+IG1fc3R1YlJvdXRpbmU7CiB9OwogCiBjbGFzcyBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0IHsK
QEAgLTE2MSw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN1cnJlbnRTbG93UGF0aFRhcmdldCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9saXN0Lmxhc3QoKS5zdHViUm91dGluZSgpLmNvZGUoKTsKKyAgICAgICAgcmV0dXJuIG1fbGlz
dC5sYXN0KCkuc3R1YlJvdXRpbmUoKS0+Y29kZSgpLmNvZGUoKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBhZGRBY2Nlc3MoY29uc3QgUHV0QnlJZEFjY2VzcyYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJKSVRTdHViUm91
dGluZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0xNjgsNyArMTY5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gYWNjZXNzX3Vuc2V0OwotICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKTsKKyAgICAgICAgICAgIHN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAg
IH0KIAogICAgICAgICB2b2lkIGRlcmVmKCk7CkBAIC0yODYsNyArMjg3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICB9IHB1dEJ5SWRMaXN0OwogICAgICAgICB9IHU7CiAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NDYWxs
SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCkBAIC0x
MDYsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZQog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFp
bkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
c3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkK
IHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
CkBAIC0xNjYsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNz
U3R1YgogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBz
bG93Q2FzZUxhYmVsKTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisg
ICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1
ZmZlciwKICAgICAgICAgKCJERkcgcHJvdG90eXBlIGNoYWluIGFjY2VzcyBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwg
c3VjY2Vzc0xhYmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKQEAgLTIyMCwxNCArMjIxLDE0IEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAg
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgICAgICgiREZHIEdldEJ5SWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9y
IENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgICAgICBleGVjLT5jb2Rl
QmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCiAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNzYsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1Yklu
Zm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJv
dG9CdWlsZExpc3QpOwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCB0cnVlKTsKQEAgLTMyMyw3ICszMjQsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIGxpc3RJbmRleCA9IDA7CiAgICAgfSBl
bHNlIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewog
ICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwg
c3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsK
KyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
SklUU3R1YlJvdXRpbmU6OmNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZShzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIGxpc3RJbmRleCA9IDE7CiAgICAgfSBlbHNl
IHsKQEAgLTQzMyw3ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdp
bjsKICAgICAgICAgaWYgKGxpc3RJbmRleCkKLSAgICAgICAgICAgIGxhc3RQcm90b0JlZ2luID0g
Q29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXggLSAxXS5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpOwogICAgICAg
ICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CkBAIC00NDUsMTcgKzQ0NiwyMyBAQCBzdGF0aWMg
Ym9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAg
KCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2VzcyBmb3IgQ29kZUJsb2NrICVwLCBy
ZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICAgc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0KKyAgICAgICAgICAg
IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUoCisg
ICAgICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAoIkRG
RyBHZXRCeUlkIHBvbHltb3JwaGljIGxpc3QgYWNjZXNzIGZvciBDb2RlQmxvY2sgJXAsIHJldHVy
biBwb2ludCAlcCIsCisgICAgICAgICAgICAgICAgICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpLAorICAgICAgICAgICAgICAgICpnbG9iYWxEYXRhLAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICAgICAgc2xvdC5jYWNo
ZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcgorICAgICAgICAgICAgICAg
IHx8IHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpDdXN0b20pOwog
ICAgICAgICAKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRp
b25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS5jb2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAx
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDk5LDcgKzUwNiw3IEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJ
bmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJ
ZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpLCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUuY2xlYXIo
KTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc3R1YkluZm8uYWNj
ZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNTEwLDEwICs1MTcs
MTAgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChs
aXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1Yklu
Zm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlv
bkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2lu
KTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CisgICAgICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgICAgIAogICAgICAgICBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFBy
b3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAgICAgCkBAIC01MjEsNyArNTI4LDcgQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgICAgICAKICAgICAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4MSw3ICs1ODgsNyBA
QCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgUHV0S2luZCwKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKICAgICBDb2RlTG9jYXRpb25MYWJlbCBmYWlsdXJlTGFiZWwsCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKKyAgICBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+JiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CkBAIC02NTUsNyArNjYyLDcgQEAg
c3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIAotICAgIHN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERSgKKyAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAg
ICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkRGRyBQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3Ig
Q29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgZXhlYy0+Y29kZUJsb2Nr
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KApAQCAtNjczLDcg
KzY4MCw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSwKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4sCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgc3R1YlJvdXRpbmUpCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRp
bmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKIApAQCAtNzU0LDggKzc2MSw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwogICAg
IGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIGZhaWx1cmVMYWJl
bCk7Ci0gICAgICAgICAgICAKLSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAg
CisgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRj
aEJ1ZmZlciwKICAgICAgICAgKCJERkcgUHV0QnlJZCB0cmFuc2l0aW9uIHN0dWIgZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKQEAgLTc5OSw3ICs4MDYs
NyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUs
IHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CkBAIC04NDEsNyArODQ4LDcgQEAg
c3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgIC8vIE9wdGltaXpl
IHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LmJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKICAgICAg
ICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJS
b3V0aW5lOwogICAgICAgICAKICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5
U2xvdDo6TmV3UHJvcGVydHkpIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQpAQCAtODg4LDcgKzg5NSw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXQKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5j
b2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRl
R2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2Miw2IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9v
dHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsKIH0KIAotY2xhc3MgRHVtbXlNYXJr
SG9vayB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KLX07Ci0KIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcmtIb29rPgogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVy
aWNBZGRQb2ludGVyKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBt
YXJrSG9vaykKIHsKQEAgLTExMCwxNSArMTA1LDQ4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmdlbmVyaWNBZGRTcGFuKHYKICAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIs
IG1hcmtIb29rKTsKIH0KIAorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lk
KiBiZWdpbiwgdm9pZCogZW5kKQogewotICAgIER1bW15TWFya0hvb2sgaG9vazsKLSAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBob29rKTsKKyAgICBEdW1teU1hcmtIb29rIGR1bW15Owor
ICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGR1bW15KTsKIH0KIAotdm9pZCBDb25zZXJ2
YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIERGR0NvZGVCbG9ja3MmIGRm
Z0NvZGVCbG9ja3MpCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZv
aWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcykKK3sKKyAgICBnZW5l
cmljQWRkU3BhbihiZWdpbiwgZW5kLCBqaXRTdHViUm91dGluZXMpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorY2xhc3MgQ29tcG9zaXRlTWFya0hvb2sgeworcHVibGlj
OgorICAgIENvbXBvc2l0ZU1hcmtIb29rKFQmIGZpcnN0LCBVJiBzZWNvbmQpCisgICAgICAgIDog
bV9maXJzdChmaXJzdCkKKyAgICAgICAgLCBtX3NlY29uZChzZWNvbmQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1hcmsodm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fZmly
c3QubWFyayhhZGRyZXNzKTsKKyAgICAgICAgbV9zZWNvbmQubWFyayhhZGRyZXNzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVCYgbV9maXJzdDsKKyAgICBVJiBtX3NlY29uZDsKK307CisKK3Zv
aWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKKyAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBK
SVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2Rl
QmxvY2tzKQogewotICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGRmZ0NvZGVCbG9ja3Mp
OworICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBERkdDb2RlQmxvY2tz
PiBtYXJrSG9vaygKKyAgICAgICAgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAg
ICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxMCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNDZWxsOwogY2xhc3MgREZHQ29kZUJsb2NrczsK
IGNsYXNzIEhlYXA7CitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKK2NsYXNzIEpTQ2VsbDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewogcHVibGljOgpAQCAtNDIsNyArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdp
biwgdm9pZCogZW5kKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBERkdD
b2RlQmxvY2tzJik7CisgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1
YlJvdXRpbmVTZXQmKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRT
dHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgp
OwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCw2ICs0MjAsNyBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhib29sIGZ1bGxHQykKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0aXZlIHJvb3RzIGJl
Zm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUKICAgICAvLyBnYXRo
ZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVmZXJlbmNl
IGlzIHZhbGlkLgogICAgIENvbnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJlYWRSb290cygmbV9v
YmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKKyAgICBtX2ppdFN0dWJSb3V0
aW5lcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKTsKICAgICAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVS
b290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CkBAIC00MjksNyArNDMwLDggQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFy
TWFya3MoKTsKICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyUmVnaXN0ZXJGaWxlUm9vdHMp
OwotICAgICAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3Rl
ckZpbGVSb290cywgbV9kZmdDb2RlQmxvY2tzKTsKKyAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMoCisgICAgICAgICAgICByZWdpc3RlckZpbGVSb290cywgbV9q
aXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nrcyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCkBAIC01NDAsOSArNTQyLDEwIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVs
bEdDKQogICAgICAgICB9CiAgICAgCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdDUEhBU0UoVHJh
Y2VDb2RlQmxvY2tzKTsKLSAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwgIlRyYWNl
IENvZGUgQmxvY2tzIik7CisgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcyk7CisgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFj
ZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXMiKTsKICAgICAgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBt
X2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAg
ICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2lu
Y2x1ZGUgIkhhbmRsZVN0YWNrLmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNp
bmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCkBAIC00NCwxMCArNDUsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAg
IGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFjazsKKyAgICBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRp
bmU7CiAgICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEhlYXA7CiAgICAgY2xh
c3MgSGVhcFJvb3RWaXNpdG9yOwogICAgIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKKyAgICBj
bGFzcyBKSVRTdHViUm91dGluZTsKICAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogICAgIGNsYXNzIEpTVmFsdWU7CkBAIC0xNjgsNiArMTcxLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwor
ICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOworICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRTcGFjZTsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAgLTIyOSw2ICsyMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVT
dGFjayBtX2hhbmRsZVN0YWNrOwogICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZnQ29kZUJsb2Nr
czsKKyAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAg
IEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIAogICAgICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklU
U3R1YlJvdXRpbmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFN0dWJSb3V0aW5l
U2V0OjpKSVRTdHViUm91dGluZVNldCgpIHsgfQorSklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHVi
Um91dGluZVNldCgpIHsgfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0OjphZGQoR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lKiByb3V0aW5lKQoreworICAgIEFTU0VSVCghcm91dGluZS0+bV9pc0pldHRp
c29uZWQpOworICAgIAorICAgIG1fbGlzdE9mUm91dGluZXMuYXBwZW5kKHJvdXRpbmUpOworICAg
IAorICAgIHVpbnRwdHJfdCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpOworICAgIHVp
bnRwdHJfdCBlbmQgPSByb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgdWludHB0cl90IHN0ZXAg
PSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKKyAgICBmb3IgKHVpbnRwdHJfdCBpdGVy
ID0gc3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgeworICAgICAgICBBU1NFUlQobV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVu
ZCgpKTsKKyAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmFkZChpdGVyLCByb3V0aW5lKTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmNsZWFyTWFya3MoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV9saXN0T2ZSb3V0aW5lc1tpXS0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOworfQorCit2b2lk
IEpJVFN0dWJSb3V0aW5lU2V0OjptYXJrU2xvdyh1aW50cHRyX3QgYWRkcmVzcykKK3sKKyAgICBI
YXNoTWFwPHVpbnRwdHJfdCwgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKj46Oml0ZXJhdG9yIGl0ZXIg
PQorICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChhZGRyZXNzICYgfihKSVRTdHVi
Um91dGluZTo6YWRkcmVzc1N0ZXAoKSAtIDEpKTsKKyAgICAKKyAgICBpZiAoaXRlciA9PSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpdGVy
LT5zZWNvbmQtPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOworfQorCit2b2lkIEpJVFN0dWJSb3V0
aW5lU2V0OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBtX2xpc3RPZlJvdXRpbmVzW2ldOworICAg
ICAgICBpZiAoIXJvdXRpbmUtPm1faXNKZXR0aXNvbmVkIHx8IHJvdXRpbmUtPm1fbWF5QmVFeGVj
dXRpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHVpbnRwdHJf
dCBzdGFydCA9IHJvdXRpbmUtPnN0YXJ0QWRkcmVzcygpOworICAgICAgICB1aW50cHRyX3QgZW5k
ID0gcm91dGluZS0+ZW5kQWRkcmVzcygpOworICAgICAgICB1aW50cHRyX3Qgc3RlcCA9IEpJVFN0
dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBpdGVyID0g
c3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIgKz0gc3RlcCkgeworICAgICAgICAgICAgQVNTRVJUKG1f
YWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpICE9IG1fYWRkcmVzc1RvUm91dGluZU1hcC5l
bmQoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRl
ciktPnNlY29uZCA9PSByb3V0aW5lKTsKKyAgICAgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1h
cC5yZW1vdmUoaXRlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPmRl
bGV0ZUZyb21HQygpOworICAgICAgICAKKyAgICAgICAgbV9saXN0T2ZSb3V0aW5lc1tpXSA9IG1f
bGlzdE9mUm91dGluZXMubGFzdCgpOworICAgICAgICBtX2xpc3RPZlJvdXRpbmVzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgaS0tOworICAgIH0KK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6
dHJhY2VNYXJrZWRTdHViUm91dGluZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEdD
QXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSA9IG1fbGlzdE9mUm91dGluZXNbaV07CisgICAg
ICAgIGlmICghcm91dGluZS0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgcm91dGluZS0+bWFya1JlcXVpcmVkT2JqZWN0cyh2aXNpdG9y
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1
YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVFN0dWJSb3V0aW5l
U2V0X2gKKyNkZWZpbmUgSklUU3R1YlJvdXRpbmVTZXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOworY2xhc3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIEpJVFN0dWJS
b3V0aW5lU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShKSVRTdHViUm91dGluZVNldCk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgCitwdWJsaWM6CisgICAgSklUU3R1
YlJvdXRpbmVTZXQoKTsKKyAgICB+SklUU3R1YlJvdXRpbmVTZXQoKTsKKyAgICAKKyAgICB2b2lk
IGFkZChHQ0F3YXJlSklUU3R1YlJvdXRpbmUqKTsKKworICAgIHZvaWQgY2xlYXJNYXJrcygpOwor
ICAgIAorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVBZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgdWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FuZGlk
YXRlQWRkcmVzcyk7CisgICAgICAgIGlmICghSklUU3R1YlJvdXRpbmU6OnBhc3Nlc0ZpbHRlcihh
ZGRyZXNzKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1hcmtTbG93
KGFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25l
ZFN0dWJSb3V0aW5lcygpOworICAgIAorICAgIHZvaWQgdHJhY2VNYXJrZWRTdHViUm91dGluZXMo
U2xvdFZpc2l0b3ImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBtYXJrU2xvdyh1aW50cHRy
X3QgYWRkcmVzcyk7CisgICAgCisgICAgSGFzaE1hcDx1aW50cHRyX3QsIEdDQXdhcmVKSVRTdHVi
Um91dGluZSo+IG1fYWRkcmVzc1RvUm91dGluZU1hcDsKKyAgICBWZWN0b3I8R0NBd2FyZUpJVFN0
dWJSb3V0aW5lKj4gbV9saXN0T2ZSb3V0aW5lczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIEpJVFN0dWJSb3V0aW5lU2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgSGVhcDsKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVS
b290czsKKyAgICBjbGFzcyBIZWFwOwogCiAgICAgY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYWNoaW5lVGhyZWFkcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkocmV2
aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVyRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDkgKzczLDkgQEAgdm9pZCBSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvbwogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChi
ZWdpbigpLCBlbmQoKSk7CiB9CiAKLXZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRp
dmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIERGR0NvZGVCbG9j
a3MmIGRmZ0NvZGVCbG9ja3MpCit2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGlu
ZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQogewot
ICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSwgZGZnQ29kZUJsb2Nrcyk7
CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpLCBqaXRTdHViUm91dGlu
ZXMsIGRmZ0NvZGVCbG9ja3MpOwogfQogCiB2b2lkIFJlZ2lzdGVyRmlsZTo6cmVsZWFzZUV4Y2Vz
c0NhcGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwog
ICAgIGNsYXNzIERGR0NvZGVCbG9ja3M7CisgICAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiAg
ICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgY2xhc3MgUmVnaXN0ZXJGaWxl
IHsKQEAgLTY0LDcgKzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5SZWdpc3RlckZp
bGUoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhD
b25zZXJ2YXRpdmVSb290cyYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICAgICAgdm9pZCBnYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0Jiwg
REZHQ29kZUJsb2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAgICAg
ICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9y
IHsKIHB1YmxpYzoKICAgICBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAgOiBN
ZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMK
KyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKQogICAgIHsKICAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9jayhhbGxvY2F0b3JzTXV0ZXgoKSk7CiAgICAgICAgIGFsbG9j
YXRvcnMoKS5hZGQodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0dsb2JhbERhdGE7CiB2b2lkIHJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KEpTR2xvYmFsRGF0YSYpOwogCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgaml0QWxsb2NhdGlvbkdyYW51bGUgPSAzMjsKKwogaW5saW5lIHNpemVfdCByb3VuZFVw
QWxsb2NhdGlvblNpemUoc2l6ZV90IHJlcXVlc3QsIHNpemVfdCBncmFudWxhcml0eSkKIHsKICAg
ICBpZiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBncmFudWxhcml0eSkg
PD0gcmVxdWVzdCkKQEAgLTEwMSw2ICsxMDMsMTggQEAgdHlwZWRlZiBXVEY6Ok1ldGFBbGxvY2F0
b3JIYW5kbGUgRXhlY3V0YQogY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjsKICNlbmRp
ZgogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQorI2lmIENQVShBUk0p
CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTYg
KiAxMDI0ICogMTAyNDsKKyNlbGlmIENQVShYODZfNjQpCitzdGF0aWMgY29uc3Qgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0OworI2Vsc2UK
K3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAzMiAq
IDEwMjQgKiAxMDI0OworI2VuZGlmCisKK2V4dGVybiB1aW50cHRyX3Qgc3RhcnRPZkZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2w7CisjZW5kaWYKKwogY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvciB7
CiAgICAgZW51bSBQcm90ZWN0aW9uU2V0dGluZyB7IFdyaXRhYmxlLCBFeGVjdXRhYmxlIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMjcgKzQ1LDIzIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
IG5hbWVzcGFjZSBKU0MgewogICAgIAotI2lmIENQVShBUk0pCi1zdGF0aWMgY29uc3Qgc2l6ZV90
IGZpeGVkUG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwotI2VsaWYgQ1BVKFg4Nl82NCkKLXN0
YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKLSNl
bHNlCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0
OwotI2VuZGlmCit1aW50cHRyX3Qgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2w7CiAK
IGNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAg
ICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAz
MiBieXRlcworICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8v
IHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAgIHsKLSAgICAgICAgbV9y
ZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVk
UG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dS
SVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6
cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplLCBPU0Fs
bG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7
CiAjaWYgIShFTkFCTEUoQ0xBU1NJQ19JTlRFUlBSRVRFUikgfHwgRU5BQkxFKExMSU5UKSkKICAg
ICAgICAgaWYgKCFtX3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgog
ICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgewotICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2
YXRpb24uc2l6ZSgpID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAgQVNTRVJUKG1fcmVz
ZXJ2YXRpb24uc2l6ZSgpID09IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplKTsKICAgICAg
ICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKG1fcmVzZXJ2YXRpb24uYmFzZSgpLCBtX3Jlc2VydmF0
aW9uLnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0YXJ0T2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fcmVzZXJ2YXRp
b24uYmFzZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJI
ZWFwLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK0dDQXdhcmVKSVRTdHViUm91dGluZTo6R0NBd2FyZUpJVFN0dWJSb3V0aW5l
KAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQorICAgIDogSklUU3R1YlJvdXRpbmUoY29kZSkKKyAgICAsIG1fbWF5QmVFeGVj
dXRpbmcoZmFsc2UpCisgICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkKK3sKKyAgICBnbG9iYWxE
YXRhLmhlYXAubV9qaXRTdHViUm91dGluZXMuYWRkKHRoaXMpOworfQorICAgIAorR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjp+R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkgeyB9CisKK3ZvaWQgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVyb1JlZkNvdW50KCkKK3sKKyAgICBpZiAobV9pc0pl
dHRpc29uZWQpIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgbV9pc0pldHRpc29uZWQgPSB0cnVlOworICAgIG1fcmVmQ291bnQgPSAxOyAv
LyBSZXZpdmUgdGhlIG9iamVjdC4gSXQncyBub3cgb3duZWQgYnkgdGhlIEdDLgorfQorCit2b2lk
IEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRlRnJvbUdDKCkKK3sKKyAgICBBU1NFUlQobV9p
c0pldHRpc29uZWQpOworICAgIEFTU0VSVChtX3JlZkNvdW50ID09IDEpOworICAgIEFTU0VSVCgh
bV9tYXlCZUV4ZWN1dGluZyk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQor
eworfQorCitNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdDo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoCisgICAgY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmJiBjb2RlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2Vs
bCogb3duZXIsCisgICAgSlNDZWxsKiBvYmplY3QpCisgICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUoY29kZSwgZ2xvYmFsRGF0YSkKKyAgICAsIG1fb2JqZWN0KGdsb2JhbERhdGEsIG93bmVyLCBv
YmplY3QpCit7Cit9CisKK01hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0
Ojp+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoKQoreworfQorCit2
b2lkIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0OjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5h
cHBlbmQoJm1fb2JqZWN0KTsKK30KKworUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRl
SklUU3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAor
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICBjb25zdCBKU0NlbGwqLAorICAgIGJv
b2wgbWFrZXNDYWxscykKK3sKKyAgICBpZiAoIW1ha2VzQ2FsbHMpCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOworCisgICAgcmV0dXJuIHN0YXRpY19w
b2ludGVyX2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAorICAgICAgICBhZG9wdFJlZihuZXcgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpKSk7Cit9CisKK1Bhc3NSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiYgY29kZSwKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgY29u
c3QgSlNDZWxsKiBvd25lciwKKyAgICBib29sIG1ha2VzQ2FsbHMsCisgICAgSlNDZWxsKiBvYmpl
Y3QpCit7CisgICAgaWYgKCFtYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEpJVFN0dWJSb3V0aW5lKGNvZGUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJf
Y2FzdDxKSVRTdHViUm91dGluZT4oCisgICAgICAgIGFkb3B0UmVmKG5ldyBNYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdChjb2RlLCBnbG9iYWxEYXRhLCBvd25lciwgb2Jq
ZWN0KSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lX2gKKyNkZWZpbmUgR0NBd2FyZUpJVFN0dWJSb3V0aW5lX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJ
VFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworLy8gVXNlIHRoaXMgc3R1YiByb3V0aW5l
IGlmIHlvdSBrbm93IHRoYXQgeW91ciBjb2RlIG1pZ2h0IGJlIG9uIHN0YWNrIHdoZW4KKy8vIGVp
dGhlciBHQyBvciBvdGhlciBraW5kcyBvZiBzdHViIGRlbGV0aW9uIGhhcHBlbi4gQmFzaWNhbHks
IGlmIHlvdXIgc3R1YgorLy8gcm91dGluZSBtYWtlcyBjYWxscyAoZWl0aGVyIHRvIEpTIGNvZGUg
b3IgdG8gQysrIGNvZGUpIHRoZW4geW91IHNob3VsZAorLy8gYXNzdW1lIHRoYXQgaXQncyBwb3Nz
aWJsZSBmb3IgdGhhdCBKUyBvciBDKysgY29kZSB0byBkbyBzb21ldGhpbmcgdGhhdAorLy8gY2F1
c2VzIHRoZSBzeXN0ZW0gdG8gdHJ5IHRvIGRlbGV0ZSB5b3VyIHJvdXRpbmUuIFVzaW5nIHRoaXMg
cm91dGluZSB0eXBlCisvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBkZWxldGlvbiBpcyBkZWxh
eWVkIHVudGlsIHRoZSBHQyBwcm92ZXMgdGhhdCB0aGUKKy8vIHJvdXRpbmUgaXMgbm8gbG9uZ2Vy
IHJ1bm5pbmcuIFlvdSBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzIHJvdXRpbmUgaWYgeW91CisvLyB3
YW50IHRvIG1hcmsgYWRkaXRpb25hbCBvYmplY3RzIGR1cmluZyBHQyBpbiB0aG9zZSBjYXNlcyB3
aGVyZSB0aGUKKy8vIHJvdXRpbmUgaXMga25vd24gdG8gYmUgZXhlY3V0aW5nLCBvciBpZiB5b3Ug
d2FudCB0byBmb3JjZSB0aGlzIHJvdXRpbmUgdG8KKy8vIGtlZXAgb3RoZXIgcm91dGluZXMgYWxp
dmUgKGZvciBleGFtcGxlIGR1ZSB0byB0aGUgdXNlIG9mIGEgc2xvdy1wYXRoCisvLyBsaXN0IHdo
aWNoIGRvZXMgbm90IGdldCByZWNsYWltZWQgYWxsIGF0IG9uY2UpLgorY2xhc3MgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lIDogcHVibGljIEpJVFN0dWJSb3V0aW5lIHsKK3B1YmxpYzoKKyAgICBHQ0F3
YXJlSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxE
YXRhJik7CisgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCk7CisgICAgCisgICAg
dm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAg
ICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGRlbGV0ZUZyb21HQygpOworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIG1hcmtS
ZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworICAgIGJvb2wgbV9tYXlCZUV4ZWN1dGlu
ZzsKKyAgICBib29sIG1faXNKZXR0aXNvbmVkOworfTsKKworLy8gVXNlIHRoaXMgaWYgeW91IHdh
bnQgdG8gbWFyayBvbmUgYWRkaXRpb25hbCBvYmplY3QgZHVyaW5nIEdDIGlmIHlvdXIgc3R1Ygor
Ly8gcm91dGluZSBpcyBrbm93biB0byBiZSBleGVjdXRpbmcuCitjbGFzcyBNYXJraW5nR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUgeworcHVibGljOgorICAgIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2Jq
ZWN0KAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEm
LCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgICAgICBKU0NlbGwqIG9iamVjdCk7CisgICAgdmly
dHVhbCB+TWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoKTsKKyAgICAK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFs
KFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9v
YmplY3Q7Cit9OworCisvLyBIZWxwZXIgZm9yIGVhc2lseSBjcmVhdGluZyBhIEdDLWF3YXJlIEpJ
VCBzdHViIHJvdXRpbmUuIEZvciB0aGUgdmFyYXJncywKKy8vIHBhc3MgemVybyBvciBtb3JlIEpT
Q2VsbConcy4gVGhpcyB3aWxsIGVpdGhlciBjcmVhdGUgYSBKSVRTdHViUm91dGluZSwgYQorLy8g
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLCBvciBhbiBPYmplY3RNYXJraW5nR0NBd2FyZUpJVFN0dWJS
b3V0aW5lIGFzCisvLyBhcHByb3ByaWF0ZS4gR2VuZXJhbGx5IHlvdSBvbmx5IG5lZWQgdG8gcGFz
cyBwb2ludGVycyB0aGF0IHdpbGwgYmUgdXNlZAorLy8gYWZ0ZXIgdGhlIGZpcnN0IGNhbGwgdG8g
QysrIG9yIEpTLgorLy8gCisvLyBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRT
dHViUm91dGluZSgKKy8vICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwKKy8v
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKy8vICAgIGNvbnN0IEpTQ2VsbCogb3duZXIs
CisvLyAgICBib29sIG1ha2VzQ2FsbHMsCisvLyAgICAuLi4pOworLy8KKy8vIE5vdGUgdGhhdCB3
ZSBkb24ndCBhY3R1YWxseSB1c2UgQy1zdHlsZSB2YXJhcmdzIGJlY2F1c2UgdGhhdCBsZWFkcyB0
bworLy8gc3RyYW5nZSB0eXBlLXJlbGF0ZWQgcHJvYmxlbXMuIEZvciBleGFtcGxlIGl0IHdvdWxk
IHByZWNsdWRlIHVzIGZyb20gdXNpbmcKKy8vIG91ciBjdXN0b20gb2YgcGFzc2luZyAnMCcgYXMg
TlVMTCBwb2ludGVyLiBCZXNpZGVzLCB3aGVuIEkgZGlkIHRyeSB0byB3cml0ZQorLy8gdGhpcyBm
dW5jdGlvbiB1c2luZyB2YXJhcmdzLCBJIGVuZGVkIHVwIHdpdGggbW9yZSBjb2RlIHRoYW4gdGhp
cyBzaW1wbGUKKy8vIHdheS4KKworUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxE
YXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtlc0NhbGxzKTsKK1Bhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wg
bWFrZXNDYWxscywKKyAgICBKU0NlbGwqIG9iamVjdCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIEdDQXdhcmVKSVRTdHViUm91dGlu
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNh
bGwuaCIKQEAgLTU1NywxMiArNTU4LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1
bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQog
ICAgIAotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAg
IHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIHN0
dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJs
b2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUg
PSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNp
dGlvbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAorICAgICAgICAqbV9nbG9i
YWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAg
IHdpbGxOZWVkU3RvcmFnZVJlYWxsb2MsCisgICAgICAgIG5ld1N0cnVjdHVyZSk7CiAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRj
aEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYyNCw3ICs2MzAsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRo
ZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4K
LSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIHBhdGNoQnVm
ZmVyLAogICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBhcnJheSBsZW5ndGggc3R1YiBmb3Ig
Q29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgbV9jb2RlQmxvY2ssIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKQEAgLTYzMyw3ICs2MzksNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02
OTQsMTYgKzcwMCwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3Ry
CiAgICAgfQogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIGdl
dF9ieV9pZCBwcm90byBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0g
ICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVh
dGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICAKICAgICAv
LyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0
aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29w
X3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xp
c3QpKTsKQEAgLTc0Nyw3ICs3NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
U2VsZkxpc3QoCiAgICAgICAgIH0KICAgICB9ICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5m
b3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
bG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihw
b2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUp
KTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwogICAgIApAQCAtNzU2LDE4ICs3NjYsMjIg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1
Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdp
bGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIs
Ci0gICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciBDb2RlQmxv
Y2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBS
ZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUo
CisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAg
ICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAor
ICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAg
IAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04MTgsMjUgKzgz
MiwyOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgICAg
IH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2Rl
KCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9u
TGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVw
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAg
ICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAg
ICAoIkJhc2VsaW5lIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwg
cmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAg
ICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0
cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgog
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNo
ZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1
Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJl
Q2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC04OTIsMTggKzkxMCwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBw
YXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29k
ZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0
aW5lKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJv
dG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgZ2V0
X2J5X2lkIGNoYWluIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAi
LAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RF
KAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9i
eV9pZCBjaGFpbiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
KyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEs
CisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNT
dHViTGluayk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4sIGlz
RGlyZWN0KTsKQEAgLTkxMSw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkQ2hhaW5MaXN0CiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2Ug
YmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0
aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNl
dChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2Rl
KCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlP
ZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtOTY5LDE3ICs5OTEsMjEgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZl
IGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hC
dWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGlu
ZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAg
ICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgQ29kZUJsb2NrICVw
LCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAg
ICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUg
PSBzdHViUm91dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBD
b2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICAv
LyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9w
cm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgpA
QCAtNTk1LDEyICs1OTYsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5z
aXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25Q
dHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0g
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hC
dWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRT
dHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBmb3IgQ29k
ZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICB3aWxsTmVlZFN0b3JhZ2VS
ZWFsbG9jLAorICAgICAgICBuZXdTdHJ1Y3R1cmUpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1Ry
YW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJS
b3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9s
aW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCkBAIC02NTcsNyArNjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5wdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRl
ZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkJhc2xp
bmUgSklUIGdldF9ieV9pZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAogICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldCgKQEAgLTY2Niw3ICs2NzIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2sp
OwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2Ug
LSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTcyNCwxNiArNzMwLDIwIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAgfQogICAgIH0KICAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgK
LSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBw
cm90byBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBt
X2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHVi
Um91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVy
LAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENv
ZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5z
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBw
YXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dl
bmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzc2
LDcgKzc4Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAg
ICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1
cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9y
cGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgp
KTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxh
YmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdp
bikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJl
Z2luKTsKIApAQCAtNzg1LDE4ICs3OTUsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBw
YXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBm
b3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gRklOQUxJWkVfQ09E
RSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9p
ZCBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAg
IG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YkNvZGUgPSBj
cmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAg
IHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGxpc3Qg
c3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAogICAg
IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxE
YXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUs
IGlzRGlyZWN0KTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZz
ZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgp
KSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViQ29kZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVu
dEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFBy
b3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NDgs
MjQgKzg2MiwyOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAg
ICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
Q2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNr
IHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0
b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5wdXRSZXN1bHQpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9
IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5l
IEpJVCBnZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBw
b2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IHN0dWJDb2RlID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpF
X0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUg
SklUIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBv
aW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2ds
b2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAg
ICAgbmVlZHNTdHViTGluayk7CiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAg
ICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0
Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLT5j
b2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFp
bkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZz
ZXQgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyMSwxOCArOTM5LDIy
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICB9CiAKICAg
ICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMg
YmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHVi
Um91dGluZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUpKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFp
bCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgK
LSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBj
aGFpbiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAg
ICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0g
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRp
bmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lk
IGNoYWluIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAg
ICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZz
ZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRS
ZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAg
ICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJM
aW5rKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7
CkBAIC05NDAsNyArOTYyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
TGlzdAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4g
dGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTk5OSwxNyArMTAyMSwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVSZWYgc3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGlu
ZSBKSVQgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50
ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGlu
ZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVf
Q09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBK
SVQgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVw
IiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERh
dGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVl
ZHNTdHViTGluayk7CiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAK
ICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBo
b3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
LgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5l
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNs
dWRlIDxzdGRhcmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFN0dWJSb3V0aW5lOjp+SklU
U3R1YlJvdXRpbmUoKSB7IH0KKwordm9pZCBKSVRTdHViUm91dGluZTo6b2JzZXJ2ZVplcm9SZWZD
b3VudCgpCit7CisgICAgQVNTRVJUKCFtX3JlZkNvdW50KTsKKyAgICBkZWxldGUgdGhpczsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpJVFN0dWJSb3V0aW5lX2gKKyNkZWZpbmUgSklUU3R1YlJvdXRp
bmVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisj
aW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CisK
Ky8vIFRoaXMgaXMgYSBiYXNlLWNsYXNzIGZvciBKSVQgc3R1YiByb3V0aW5lcywgYW5kIGFsc28g
dGhlIGNsYXNzIHlvdSB3YW50CisvLyB0byBpbnN0YW50aWF0ZSBkaXJlY3RseSBpZiB5b3UgaGF2
ZSBhIHJvdXRpbmUgdGhhdCBkb2VzIG5vdCBuZWVkIGFueQorLy8gaGVscCBmcm9tIHRoZSBHQy4g
SWYgaW4gZG91YnQsIHVzZSBvbmUgb2YgdGhlIG90aGVyIHN0dWIgcm91dGluZXMuIEJ1dAorLy8g
aWYgeW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgc3R1YiByb3V0aW5lIGNhbm5vdCBiZSBvbiB0
aGUgc3RhY2sgd2hpbGUKKy8vIHNvbWVvbmUgdHJpZ2dlcnMgYSBzdHViIHJvdXRpbmUgcmVzZXQs
IHRoZW4gdXNpbmcgdGhpcyB3aWxsIHNwZWVkIHVwCisvLyBtZW1vcnkgcmVjbGFtYXRpb24uIE9u
ZSBjYXNlIHdoZXJlIGEgc3R1YiByb3V0aW5lIHNhdGlzZmllcyB0aGlzCisvLyBjb25kaXRpb24g
aXMgaWYgaXQgZG9lc24ndCBtYWtlIGFueSBjYWxscywgdG8gZWl0aGVyIEMrKyBvciBKUyBjb2Rl
LiBJbgorLy8gc3VjaCBhIHJvdXRpbmUgeW91IGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgb24gdGhl
IHN0YWNrIHdoZW4gYW55dGhpbmcKKy8vIGludGVyZXN0aW5nIGhhcHBlbnMuCisvLyBTZWUgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmggZm9yIHRoZSBvdGhlciBzdHViIHJvdXRpbmVzLgorY2xhc3Mg
SklUU3R1YlJvdXRpbmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpJVFN0dWJSb3V0aW5l
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91
dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUpCisgICAgICAgIDogbV9jb2Rl
KGNvZGUpCisgICAgICAgICwgbV9yZWZDb3VudCgxKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ly8gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhIENvZGVQdHIgdG8gc29tZW9uZSB3aG8g
aW5zaXN0cyBvbiB0YWtpbmcKKyAgICAvLyBhIFJlZlB0cjxKSVRTdHViUm91dGluZT4uCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGlu
ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJhd0NvZGVQb2ludGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsKKyAg
ICB9CisgICAgCisgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICAvLyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgaXMgY29weWFibGUsIGJ1dCBhdCB0aGUgY29zdCBvZiByZWZl
cmVuY2UKKyAgICAvLyBjb3VudGluZyBjaHVybi4gUmV0dXJuaW5nIGEgcmVmZXJlbmNlIGlzIGEg
Z29vZCB3YXkgb2YgcmVkdWNpbmcKKyAgICAvLyB0aGUgY2h1cm4uCisgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmJiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgCisg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhc0NvZGVQdHIoUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUpCisgICAgeworICAgICAgICBpZiAoIXN0dWJSb3V0aW5l
KQorICAgICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICAK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpOworICAgICAgICBBU1NFUlQoISFyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3JlZkNv
dW50Kys7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYg
KC0tbV9yZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgb2JzZXJ2ZVplcm9S
ZWZDb3VudCgpOworICAgIH0KKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB0aGUgR0MgdG8gZGV0
ZXJtaW5lIGhvdyB0byBkZWFsIHdpdGggbWFya2luZyBKSVQgc3R1YgorICAgIC8vIHJvdXRpbmVz
LgorICAgIHVpbnRwdHJfdCBzdGFydEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGUuZXhl
Y3V0YWJsZU1lbW9yeSgpLT5zdGFydEFzSW50ZWdlcigpOyB9CisgICAgdWludHB0cl90IGVuZEFk
ZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmRBc0lu
dGVnZXIoKTsgfQorICAgIHN0YXRpYyB1aW50cHRyX3QgYWRkcmVzc1N0ZXAoKSB7IHJldHVybiBq
aXRBbGxvY2F0aW9uR3JhbnVsZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIGNhblBlcmZvcm1S
YW5nZUZpbHRlcigpCisgICAgeworI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhF
RCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKyAgICB9CisgICAgc3RhdGljIHVpbnRwdHJfdCBmaWx0ZXJpbmdTdGFydEFkZHJlc3Mo
KQorICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAg
IHJldHVybiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKKyNlbHNlCisgICAgICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgor
ICAgIH0KKyAgICBzdGF0aWMgc2l6ZV90IGZpbHRlcmluZ0V4dGVudFNpemUoKQorICAgIHsKKyNp
ZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNlbHNlCisgICAgICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKyAgICBzdGF0
aWMgYm9vbCBwYXNzZXNGaWx0ZXIodWludHB0cl90IGFkZHJlc3MpCisgICAgeworICAgICAgICBp
ZiAoIWNhblBlcmZvcm1SYW5nZUZpbHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAoYWRkcmVzcyAtIGZpbHRlcmluZ1N0YXJ0QWRkcmVzcygpID49
IGZpbHRlcmluZ0V4dGVudFNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbV9jb2RlOworICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCisvLyBIZWxwZXIgZm9y
IHRoZSBjcmVhdGlvbiBvZiBzaW1wbGUgc3R1YiByb3V0aW5lcyB0aGF0IG5lZWQgbm8gaGVscCBm
cm9tIHRoZSBHQy4KKyNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1JfU1RVQihwYXRjaEJ1ZmZlciwg
ZGF0YUxvZ0FyZ3VtZW50cykgXAorICAgIChhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoRklO
QUxJWkVfQ09ERSgocGF0Y2hCdWZmZXIpLCBkYXRhTG9nQXJndW1lbnRzKSkpKQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBKSVRTdHVi
Um91dGluZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyMiw3ICsxNzIyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VSVCghc3R1Yklu
Zm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
LCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVl
KTsKKyAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlk
U2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5
SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTc0OCwxMiArMTc0OCwxMiBAQCBzdGF0aWMg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgc3dpdGNoIChzdHViSW5mby0+
YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKICAgICAgICAg
cHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUu
Z2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5
SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgc3R1Yklu
Zm8tPnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFBy
b3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVM
aXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25l
ciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgp
LCB0cnVlKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAg
ICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwg
Mik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0
OgpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTIyMDUy
KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxNyArNDUsMjcgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKICAgICAKLSAgICB2b2lkKiBzdGFydCgpCisg
ICAgdm9pZCogc3RhcnQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAg
ICAgfQogICAgIAotICAgIHZvaWQqIGVuZCgpCisgICAgdm9pZCogZW5kKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZEFzSW50ZWdlcigpKTsKKyAgICB9CisgICAgCisgICAg
dWludHB0cl90IHN0YXJ0QXNJbnRlZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCk7CisgICAgfQorICAgIAorICAgIHVp
bnRwdHJfdCBlbmRBc0ludGVnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXJ0
QXNJbnRlZ2VyKCkgKyBtX3NpemVJbkJ5dGVzOwogICAgIH0KICAgICAgICAgCi0gICAgc2l6ZV90
IHNpemVJbkJ5dGVzKCkKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151173</attachid>
            <date>2012-07-08 20:06:43 -0700</date>
            <delta_ts>2012-07-08 20:46:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jettisonstubs_patch_7.diff</filename>
            <type>text/plain</type>
            <size>102401</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMi0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnaXZlcyB0aGUgR0MgYXdhcmVuZXNz
IG9mIGFsbCBKSVQtZ2VuZXJhdGVkIHN0dWJzIGZvciBpbmxpbmUgY2FjaGVzLiBUaGF0CisgICAg
ICAgIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgSklULWdlbmVyYXRlZCBzdHVi
LCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBjdXJyZW50bHkgcnVubmluZzogaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBtaWdo
dAorICAgICAgICBiZSwgdGhlIEdDIHdpbGwga2luZGx5IGRlZmVyIGRlbGV0aW9uIHVudGlsIG5v
bi1ydW5uaW5nLW5lc3MgaXMgcHJvdmVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFBvbHltb3JwaGljU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRp
bmUpOgorICAgICAgICAoUHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlND
OjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRy
YW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKER1bW15TWFya0hv
b2spOgorICAgICAgICAoSlNDOjpEdW1teU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgIChDb21wb3NpdGVNYXJrSG9vayk6Cisg
ICAgICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjpDb21wb3NpdGVNYXJrSG9vayk6CisgICAg
ICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKiBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ29uc2VydmF0aXZlUm9v
dHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SGVhcCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OkpJVFN0dWJSb3V0
aW5lU2V0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHViUm91dGlu
ZVNldCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lU2V0OjptYXJrU2xvdyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAgICAqIGhl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
ayk6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHMpOgorICAgICAgICAoTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5K
SVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRT
dHViUm91dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OmNvZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKToKKyAg
ICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJv
dXRpbmU6OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6cGFzc2VzRmlsdGVyKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorCiAyMDEyLTA3LTA4ICBab2x0YW4gSGVyY3plZyAg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dIEltcGxlbWVudGluZyBt
aXNzaW5nIG1hY3JvIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWZ0ZXIgcjEyMTkyNQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXAuY3Bw
CiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKICAgICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJs
b2NrLmNwcApAQCAtMTI5LDYgKzEzMCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAKKyAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCiAgICAgaml0L0pJVEFyaXRobWV0aWMuY3BwCiAgICAgaml0L0pJ
VENhbGwzMl82NC5jcHAKQEAgLTEzOSw2ICsxNDEsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGppdC9KSVRPcGNvZGVzLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKyAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaCBcCkBAIC0zNTQsNiArMzU2LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0
SklUQ29kZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIFwKQEAgLTM3Myw2
ICszNzcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJS
b3V0aW5lLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hlYXAuY3Bw
IFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAgXAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCBcCisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgXAogICAgIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAgXApAQCAtMTM3LDYgKzEzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgXAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcCBcCisg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGlj
LmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgXAogICAgIGppdC9KSVRDYWxs
LmNwcCBcCkBAIC0xNDcsNiArMTQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCisgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBc
CiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAog
ICAgIHBhcnNlci9MZXhlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyMjA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDYgKzE4NTgs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEpJVC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTkxOCw2ICsxOTI2LDE0IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxK
SVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRTdHViUm91dGluZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUU3R1YnMuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTIyMTQsNiArMjIzMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMiBAQAog
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1
QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Rjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERD
REQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQz
MDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjND
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZHQ0Nh
bGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMzQ0Qy
RjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFi
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NzUsNiArODgxLDEyIEBACiAJCTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRm
Zy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDFDMTVBNTAy
OEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1
YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyQTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyRTE1QThE
Q0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdDQXdhcmVKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Iy
OTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxI
ZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkyLDYgKzE3MDQsOCBA
QAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRv
ci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwICovLAorCQkJCTBGNzY2RDJEMTVBOERDREQwMDhGMzYzRSAvKiBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGNzY2RDJFMTVBOERDREQwMDhGMzYz
RSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjQ2ODBEMDE0QkJDNUY4MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NjgwRDExNEJCQzVG
ODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCAqLywKIAkJCQkxNDI5RDkyRDBFRDIy
RDcwMDBCODk2MTkgLyogSklULmNwcCAqLywKQEAgLTE3MTEsNiArMTcyNSw4IEBACiAJCQkJODZD
Qzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLywKIAkJCQlB
N0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8s
CiAJCQkJOTYwNjI2OTUwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmggKi8sCisJCQkJ
MEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLywKKwkJCQkw
Rjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkxNEEy
M0Q2QzBGNEUxOUNFMDAyM0NEQUQgLyogSklUU3R1YnMuY3BwICovLAogCQkJCTE0QTY1ODFBMEY0
RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVicy5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTE3NTIsNiArMTc2OCw4IEBACiAJCQkJ
MTRCQTdBOTYxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCAqLywKIAkJCQlDMkM4RDAyRjE0QTND
RUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi8sCiAJCQkJMTRGOTc0NDYxMzhDODUzRTAwREEx
QzY3IC8qIEhlYXBSb290VmlzaXRvci5oICovLAorCQkJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8sCisJCQkJMEY3NjZEMkExNUE4Q0MzNDAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi8sCiAJCQkJMEY0MzE3MzYxNDZCQUM2NTAwN0Uz
ODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovLAogCQkJCTE0MkUzMTMwMTM0RkYwQTYwMEFGQURC
NSAvKiBMb2NhbC5oICovLAogCQkJCTE0MkUzMTMxMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNj
b3BlLmggKi8sCkBAIC0yODE1LDYgKzI4MzMsOSBAQAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRD
QjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzcyMTU5
Mjc1RDgwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVK
SVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMzExNUFBODExMjAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM0MDcsNiArMzQyOCw5
IEBACiAJCQkJQzJENThDMzQxNTkxMkZFRTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzcxMTU5Mjc1RDUwMDRDQjlG
RiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzY2RDI4
MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2lmbmRlZiBJbnN0cnVjdGlvbl9oCiAjZGVmaW5lIEluc3RydWN0aW9uX2gK
IAorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKQEAgLTUy
LDggKzUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IFZhbHVlUHJvZmlsZTsKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlOwotCiAgICAgLy8gU3RydWN0
dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFt
LgogICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTYxLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0cnVjdCBQb2x5bW9ycGhpY1N0dWJJbmZvIHsKICAgICAgICAgICAgIGJvb2wg
aXNDaGFpbjsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmU7CisgICAg
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFzZTsKICAgICAgICAgICAgIHVuaW9uIHsKICAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJvdG87CkBAIC03Myw3ICs3
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHUucHJvdG8uY2xlYXIoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBib29sIGlzRGlyZWN0
KQorICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
c3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICAgICAgYmFzZS5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKQEAgLTgyLDcgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9w
cm90bywgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0
dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90bywgYm9vbCBpc0Rp
cmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHVi
Um91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jh
c2UpOwpAQCAtOTEsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB0
aGlzLT5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgaXNE
aXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsK
ICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpAQCAt
MTA1LDE3ICsxMDQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwg
Ym9vbCBpc0RpcmVjdCkKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0
KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwg
c3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVU
eXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFBy
b3RvLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZSogZmlyc3RQcm90bywgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgbGlz
dFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0
UHJvdG8sIGlzRGlyZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlz
RGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJz
dENoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwg
aXNEaXJlY3QpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUHV0QnlJZEFjY2Vz
cyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9y
ZXBsYWNlOgogICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKICAgICAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9i
amVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoaW5pdGlhbFNsb3dQYXRoKTsK
KyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2Vs
Zk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgcHVibGljOgogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKQorICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsCiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0
QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwpAQCAt
MTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7CiAg
ICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSgpIGNvbnN0
CisgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpKTsKICAgICAg
ICAgcmV0dXJuIG1fc3R1YlJvdXRpbmU7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YlJvdXRpbmU7
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIAogY2xhc3Mg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7CkBAIC0xNjEsNyArMTYxLDcgQEAgcHVibGljOgogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS5jb2Rl
KCk7CisgICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5j
b2RlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9u
LmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTY4
LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBkZXJl
ZigpOwogICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKLSAgICAgICAgICAg
IHN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgICAgICBzdHVi
Um91dGluZS5jbGVhcigpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwpAQCAt
Mjg2LDcgKzI4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfSBwdXRCeUlkTGlz
dDsKICAgICAgICAgfSB1OwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91
dGluZTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAg
ICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxh
dGl2ZUpJVC5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgpAQCAtMTA2LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIGxpbmtS
ZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVs
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJh
dGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIApAQCAtMTY2LDcgKzE2Nyw3IEBAIHN0YXRpYyB2b2lk
IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CiAgICAgCi0gICAgc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIHByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAg
ICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CkBAIC0yMjAsMTQgKzIyMSwxNCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERSgKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICAgICAoIkRGRyBHZXRC
eUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIs
CiAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIAogICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc2LDcgKzI3Nyw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hh
aW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNl
dCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5l
LmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5m
by5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CkBAIC0zMjMsNyAr
MzI0LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAg
ICBsaXN0SW5kZXggPSAwOwogICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91
dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdl
ZFJvdXRpbmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICBs
aXN0SW5kZXggPSAxOwogICAgIH0gZWxzZSB7CkBAIC00MzMsNyArNDM0LDcgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW47CiAgICAgICAgIGlmIChsaXN0SW5kZXgpCi0gICAg
ICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAg
ICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwpAQCAt
NDQ1LDE3ICs0NDYsMjMgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0
aW9uSGFuZGxlckluU3R1Yik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBh
Y2Nlc3MgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSA9CisgICAgICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2Vz
cyBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgICAgICAgICAqZ2xv
YmFsRGF0YSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAor
ICAgICAgICAgICAgICAgIHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90
OjpHZXR0ZXIKKyAgICAgICAgICAgICAgICB8fCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09
IFByb3BlcnR5U2xvdDo6Q3VzdG9tKTsKICAgICAgICAgCiAgICAgICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAg
ICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQ5OSw3ICs1MDYsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhl
CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikg
ewogICAgICAgICBBU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJS
b3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlk
UHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9wcm90
b19saXN0KTsKQEAgLTUxMCwxMCArNTE3LDEwIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJ
RFByb3RvTGlzdChFeGUKICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFKSB7CiAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsr
OwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBD
b2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgICAg
ICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOwogICAgICAgICAKICAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVj
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAg
IApAQCAtNTIxLDcgKzUyOCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlz
dChFeGUKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC01ODEsNyArNTg4LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHVi
KAogICAgIFB1dEtpbmQsCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJv
dXRpbmUpCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VH
UFIpOwpAQCAtNjU1LDcgKzY2Miw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAK
LSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAgc3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJERkcg
UHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
ICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKQEAgLTY3Myw3ICs2ODAsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluLAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJl
bCwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTc1NCw4ICs3NjEsOCBAQCBzdGF0aWMg
dm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFKAorICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIFB1dEJ5SWQg
dHJhbnNpdGlvbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCkBAIC03OTksNyArODA2LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgp
KSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJl
Y3QpOwpAQCAtODQxLDcgKzg0OCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3Qo
RXhlY1N0YXQKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICBpZiAoc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKQEAgLTg4OCw3ICs4OTUsNyBAQCBzdGF0
aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3QtPmlz
RnVsbCgpKQogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIs
NiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkKICAgICBtX3Jvb3RzID0gbmV3Um9v
dHM7CiB9CiAKLWNsYXNzIER1bW15TWFya0hvb2sgewotcHVibGljOgotICAgIHZvaWQgbWFyayh2
b2lkKikgeyB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KIGlubGluZSB2b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55Qmxvb21G
aWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CkBAIC0xMTAsMTUgKzEwNSw0OCBA
QCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAgICAgICAgIGdlbmVy
aWNBZGRQb2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAKK2NsYXNzIER1bW15TWFy
a0hvb2sgeworcHVibGljOgorICAgIHZvaWQgbWFyayh2b2lkKikgeyB9Cit9OworCiB2b2lkIENv
bnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCkKIHsKLSAgICBEdW1t
eU1hcmtIb29rIGhvb2s7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaG9vayk7Cisg
ICAgRHVtbXlNYXJrSG9vayBkdW1teTsKKyAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBk
dW1teSk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9pZCBDb25zZXJ2YXRpdmVS
b290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMpCit7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaml0U3R1YlJv
dXRpbmVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIENv
bXBvc2l0ZU1hcmtIb29rIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVNYXJrSG9vayhUJiBmaXJz
dCwgVSYgc2Vjb25kKQorICAgICAgICA6IG1fZmlyc3QoZmlyc3QpCisgICAgICAgICwgbV9zZWNv
bmQoc2Vjb25kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2ZpcnN0Lm1hcmsoYWRkcmVzcyk7CisgICAgICAgIG1fc2Vj
b25kLm1hcmsoYWRkcmVzcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFQmIG1fZmlyc3Q7Cisg
ICAgVSYgbV9zZWNvbmQ7Cit9OworCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCisgICAg
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5l
cywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBnZW5lcmljQWRkU3Bhbihi
ZWdpbiwgZW5kLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBDb21wb3NpdGVNYXJrSG9vazxKSVRTdHVi
Um91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hvb2soCisgICAgICAgIGppdFN0dWJSb3V0
aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFy
a0hvb2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTIyMDUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOSArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTQ2Vs
bDsKIGNsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBIZWFwOworY2xhc3MgSklUU3R1YlJvdXRp
bmVTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1Ymxp
YzoKQEAgLTQyLDcgKzQzLDggQEAgcHVibGljOgogICAgIH5Db25zZXJ2YXRpdmVSb290cygpOwog
CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7Ci0gICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYpOworICAgIHZvaWQgYWRkKHZvaWQq
IGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0Jik7CisgICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7
CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNiAr
NDIwLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgLy8gV2UgZ2F0
aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2Ug
Y29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRl
cm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290
cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0b3JhZ2VT
cGFjZSk7CisgICAgbV9qaXRTdHViUm91dGluZXMuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAg
ICAgR0NQSEFTRShHYXRoZXJDb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgIG1fbWFjaGluZVRo
cmVhZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkp
OwpAQCAtNDI5LDcgKzQzMCw4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQog
ICAgIG1fZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNF
KEdhdGhlclJlZ2lzdGVyRmlsZVJvb3RzKTsKLSAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMsIG1fZGZnQ29kZUJsb2Nrcyk7Cisg
ICAgICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAorICAgICAgICAg
ICAgcmVnaXN0ZXJGaWxlUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2RmZ0NvZGVCbG9ja3Mp
OwogICAgIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNTQwLDkgKzU0MiwxMCBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgfQogICAgIAogICAgICAgICB7
Ci0gICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBNQVJL
X0xPR19ST09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyIpOworICAgICAgICAgICAgR0NQ
SEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOworICAgICAgICAgICAgTUFS
S19MT0dfUk9PVCh2aXNpdG9yLCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRp
bmVzIik7CiAgICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tz
KHZpc2l0b3IpOworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMudHJhY2VNYXJrZWRTdHVi
Um91dGluZXModmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
CiAgICAgICAgIH0KICAgICAKQEAgLTY2NSw2ICs2NjgsNyBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICB9CiAKICAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1faml0U3R1YlJvdXRpbmVzLmRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCiB2b2lkIEhlYXA6OmNv
bGxlY3RBbGxHYXJiYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNp
bmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgorI2luY2x1ZGUg
IkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtNDQs
MTAgKzQ1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBj
bGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CisgICAg
Y2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsK
ICAgICBjbGFzcyBIZWFwOwogICAgIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKICAgICBjbGFzcyBJ
bmNyZW1lbnRhbFN3ZWVwZXI7CisgICAgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgY2xhc3Mg
SlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU1ZhbHVlOwpAQCAt
MTY4LDYgKzE3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRT
dHViUm91dGluZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xh
c3MgTWFya2VkU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CkBA
IC0yMjksNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhbmRsZVNldCBtX2hh
bmRsZVNldDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICAgICAgREZH
Q29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CisgICAgICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1f
aml0U3R1YlJvdXRpbmVzOwogICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVy
OwogICAgICAgICAKICAgICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
SVRTdHViUm91dGluZVNldC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkdDQXdh
cmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitKSVRTdHViUm91dGluZVNldDo6SklUU3R1YlJvdXRpbmVTZXQoKSB7IH0KK0pJ
VFN0dWJSb3V0aW5lU2V0Ojp+SklUU3R1YlJvdXRpbmVTZXQoKSB7IH0KKwordm9pZCBKSVRTdHVi
Um91dGluZVNldDo6YWRkKEdDQXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSkKK3sKKyAgICBB
U1NFUlQoIXJvdXRpbmUtPm1faXNKZXR0aXNvbmVkKTsKKyAgICAKKyAgICBtX2xpc3RPZlJvdXRp
bmVzLmFwcGVuZChyb3V0aW5lKTsKKyAgICAKKyAgICB1aW50cHRyX3Qgc3RhcnQgPSByb3V0aW5l
LT5zdGFydEFkZHJlc3MoKTsKKyAgICB1aW50cHRyX3QgZW5kID0gcm91dGluZS0+ZW5kQWRkcmVz
cygpOworICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7
CisgICAgZm9yICh1aW50cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9IHN0
ZXApIHsKKyAgICAgICAgQVNTRVJUKG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpID09
IG1fYWRkcmVzc1RvUm91dGluZU1hcC5lbmQoKSk7CisgICAgICAgIG1fYWRkcmVzc1RvUm91dGlu
ZU1hcC5hZGQoaXRlciwgcm91dGluZSk7CisgICAgfQorfQorCit2b2lkIEpJVFN0dWJSb3V0aW5l
U2V0OjpjbGVhck1hcmtzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5l
cy5zaXplKCk7IGktLTspCisgICAgICAgIG1fbGlzdE9mUm91dGluZXNbaV0tPm1fbWF5QmVFeGVj
dXRpbmcgPSBmYWxzZTsKK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6bWFya1Nsb3codWlu
dHB0cl90IGFkZHJlc3MpCit7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIEdDQXdhcmVKSVRTdHVi
Um91dGluZSo+OjppdGVyYXRvciBpdGVyID0KKyAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFw
LmZpbmQoYWRkcmVzcyAmIH4oSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCkgLSAxKSk7Cisg
ICAgCisgICAgaWYgKGl0ZXIgPT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaXRlci0+c2Vjb25kLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1
ZTsKK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVk
U3R1YlJvdXRpbmVzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0g
bV9saXN0T2ZSb3V0aW5lc1tpXTsKKyAgICAgICAgaWYgKCFyb3V0aW5lLT5tX2lzSmV0dGlzb25l
ZCB8fCByb3V0aW5lLT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIAorICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSByb3V0aW5lLT5zdGFydEFkZHJlc3Mo
KTsKKyAgICAgICAgdWludHB0cl90IGVuZCA9IHJvdXRpbmUtPmVuZEFkZHJlc3MoKTsKKyAgICAg
ICAgdWludHB0cl90IHN0ZXAgPSBKSVRTdHViUm91dGluZTo6YWRkcmVzc1N0ZXAoKTsKKyAgICAg
ICAgZm9yICh1aW50cHRyX3QgaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyICs9IHN0ZXAp
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKSAh
PSBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fYWRk
cmVzc1RvUm91dGluZU1hcC5maW5kKGl0ZXIpLT5zZWNvbmQgPT0gcm91dGluZSk7CisgICAgICAg
ICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByb3V0aW5lLT5kZWxldGVGcm9tR0MoKTsKKyAgICAgICAgCisgICAgICAg
IG1fbGlzdE9mUm91dGluZXNbaV0gPSBtX2xpc3RPZlJvdXRpbmVzLmxhc3QoKTsKKyAgICAgICAg
bV9saXN0T2ZSb3V0aW5lcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIGktLTsKKyAgICB9Cit9CisK
K3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX2xpc3RPZlJvdXRpbmVzLnNp
emUoKTsgaS0tOykgeworICAgICAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUgPSBt
X2xpc3RPZlJvdXRpbmVzW2ldOworICAgICAgICBpZiAoIXJvdXRpbmUtPm1fbWF5QmVFeGVjdXRp
bmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPm1h
cmtSZXF1aXJlZE9iamVjdHModmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKSVRTdHViUm91dGluZVNldF9oCisjZGVmaW5lIEpJVFN0dWJSb3V0aW5lU2V0
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2lu
Y2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKK2NsYXNzIFNsb3RW
aXNpdG9yOworCitjbGFzcyBKSVRTdHViUm91dGluZVNldCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSklUU3R1YlJvdXRpbmVTZXQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIAorcHVibGljOgorICAgIEpJVFN0dWJSb3V0aW5lU2V0KCk7CisgICAgfkpJVFN0dWJSb3V0
aW5lU2V0KCk7CisgICAgCisgICAgdm9pZCBhZGQoR0NBd2FyZUpJVFN0dWJSb3V0aW5lKik7CisK
KyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAKKyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlk
YXRlQWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUFkZHJlc3MpOworICAgICAgICBpZiAoIUpJVFN0
dWJSb3V0aW5lOjpwYXNzZXNGaWx0ZXIoYWRkcmVzcykpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBtYXJrU2xvdyhhZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKKyAgICAKKyAgICB2b2lk
IHRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKFNsb3RWaXNpdG9yJik7CisgICAgCitwcml2YXRlOgor
ICAgIHZvaWQgbWFya1Nsb3codWludHB0cl90IGFkZHJlc3MpOworICAgIAorICAgIEhhc2hNYXA8
dWludHB0cl90LCBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqPiBtX2FkZHJlc3NUb1JvdXRpbmVNYXA7
CisgICAgVmVjdG9yPEdDQXdhcmVKSVRTdHViUm91dGluZSo+IG1fbGlzdE9mUm91dGluZXM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRp
ZiAvLyBKSVRTdHViUm91dGluZVNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hY2hpbmVTdGFja01hcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOCArMjgsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotICAgIGNsYXNzIEhlYXA7
CiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CisgICAgY2xhc3MgSGVhcDsKIAogICAgIGNs
YXNzIE1hY2hpbmVUaHJlYWRzIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFjaGlu
ZVRocmVhZHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVyRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw5ICs3Myw5IEBAIHZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb28KICAg
ICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCkpOwogfQogCi12b2lkIFJlZ2lz
dGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNl
cnZhdGl2ZVJvb3RzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9pZCBSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2
YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJs
b2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4o
KSwgZW5kKCksIGRmZ0NvZGVCbG9ja3MpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdp
bigpLCBlbmQoKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBS
ZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCShyZXZpc2lvbiAxMjIw
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBDb25zZXJ2YXRpdmVSb290czsKICAgICBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGNs
YXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CkBAIC02NCw3ICs2NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdh
dGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQg
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBERkdDb2RlQmxvY2tz
Jik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmLCBKSVRTdHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKIAogICAgICAgICBSZWdp
c3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVz
ZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBSZWdpc3RlciogZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0
b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgRGVtYW5kRXhlY3V0YWJs
ZUFsbG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxs
IGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxv
Y2F0aW9uR3JhbnVsZSkKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2soYWxsb2NhdG9y
c011dGV4KCkpOwogICAgICAgICBhbGxvY2F0b3JzKCkuYWRkKHRoaXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogY2xh
c3MgSlNHbG9iYWxEYXRhOwogdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShKU0dsb2JhbERh
dGEmKTsKIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGppdEFsbG9jYXRpb25HcmFudWxlID0gMzI7
CisKIGlubGluZSBzaXplX3Qgcm91bmRVcEFsbG9jYXRpb25TaXplKHNpemVfdCByZXF1ZXN0LCBz
aXplX3QgZ3JhbnVsYXJpdHkpCiB7CiAgICAgaWYgKChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpIC0gZ3JhbnVsYXJpdHkpIDw9IHJlcXVlc3QpCkBAIC0xMDEsNiArMTAzLDE4IEBA
IHR5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGEKIGNsYXNzIERlbWFuZEV4
ZWN1dGFibGVBbGxvY2F0b3I7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9D
QVRPUl9GSVhFRCkKKyNpZiBDUFUoQVJNKQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CisjZWxpZiBDUFUoWDg2XzY0
KQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEw
MjQgKiAxMDI0ICogMTAyNDsKKyNlbHNlCitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKKyNlbmRpZgorCitleHRlcm4g
dWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOworI2VuZGlmCisKIGNs
YXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBX
cml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDI3ICs0NSwyMyBA
QCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLSNpZiBDUFUo
QVJNKQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAy
NDsKLSNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUg
PSAxMDI0ICogMTAyNCAqIDEwMjQ7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBv
b2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKLSNlbmRpZgordWludHB0cl90IHN0YXJ0T2ZGaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogCiBjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3Vu
ZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9y
KGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIg
Ynl0ZXMKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJl
c2VydmVXaXRoR3VhcmRQYWdlcyhmaXhlZFBvb2xTaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2Rl
UGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIG1fcmVzZXJ2
YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRB
QkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwogI2lmICEoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVU
RVIpIHx8IEVOQUJMRShMTElOVCkpCiAgICAgICAgIGlmICghbV9yZXNlcnZhdGlvbikKICAgICAg
ICAgICAgIENSQVNIKCk7CiAjZW5kaWYKICAgICAgICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSBmaXhlZFBvb2xTaXplKTsK
KyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSBmaXhlZEV4ZWN1dGFi
bGVNZW1vcnlQb29sU2l6ZSk7CiAgICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSwgbV9yZXNlcnZhdGlvbi5zaXplKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklU
U3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisKKyNpZiBF
TkFCTEUoSklUKQorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5j
bHVkZSA8c3RkYXJnLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitHQ0F3YXJlSklUU3R1YlJvdXRp
bmU6OkdDQXdhcmVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICA6IEpJVFN0dWJSb3V0aW5l
KGNvZGUpCisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9pc0pldHRpc29u
ZWQoZmFsc2UpCit7CisgICAgZ2xvYmFsRGF0YS5oZWFwLm1faml0U3R1YlJvdXRpbmVzLmFkZCh0
aGlzKTsKK30KKyAgICAKK0dDQXdhcmVKSVRTdHViUm91dGluZTo6fkdDQXdhcmVKSVRTdHViUm91
dGluZSgpIHsgfQorCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6b2JzZXJ2ZVplcm9SZWZD
b3VudCgpCit7CisgICAgQVNTRVJUKCFtX2lzSmV0dGlzb25lZCk7CisgICAgQVNTRVJUKCFtX3Jl
ZkNvdW50KTsKKworICAgIG1faXNKZXR0aXNvbmVkID0gdHJ1ZTsKK30KKwordm9pZCBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU6OmRlbGV0ZUZyb21HQygpCit7CisgICAgQVNTRVJUKG1faXNKZXR0aXNv
bmVkKTsKKyAgICBBU1NFUlQoIW1fcmVmQ291bnQpOworICAgIEFTU0VSVCghbV9tYXlCZUV4ZWN1
dGluZyk7CisgICAgCisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKQoreworfQor
CitNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdDo6TWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBjb2RlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IEpTQ2VsbCogb3du
ZXIsCisgICAgSlNDZWxsKiBvYmplY3QpCisgICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29k
ZSwgZ2xvYmFsRGF0YSkKKyAgICAsIG1fb2JqZWN0KGdsb2JhbERhdGEsIG93bmVyLCBvYmplY3Qp
Cit7Cit9CisKK01hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0Ojp+TWFy
a2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3QoKQoreworfQorCit2b2lkIE1h
cmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmpl
Y3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQo
Jm1fb2JqZWN0KTsKK30KKworUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1
YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAorICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICBjb25zdCBKU0NlbGwqLAorICAgIGJvb2wgbWFr
ZXNDYWxscykKK3sKKyAgICBpZiAoIW1ha2VzQ2FsbHMpCisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOworCisgICAgcmV0dXJuIHN0YXRpY19wb2ludGVy
X2Nhc3Q8SklUU3R1YlJvdXRpbmU+KAorICAgICAgICBhZG9wdFJlZihuZXcgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lKGNvZGUsIGdsb2JhbERhdGEpKSk7Cit9CisKK1Bhc3NSZWZQdHI8SklUU3R1YlJv
dXRpbmU+IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYgY29kZSwKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisgICAgY29uc3QgSlND
ZWxsKiBvd25lciwKKyAgICBib29sIG1ha2VzQ2FsbHMsCisgICAgSlNDZWxsKiBvYmplY3QpCit7
CisgICAgaWYgKCFtYWtlc0NhbGxzKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpJVFN0
dWJSb3V0aW5lKGNvZGUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxK
SVRTdHViUm91dGluZT4oCisgICAgICAgIGFkb3B0UmVmKG5ldyBNYXJraW5nR0NBd2FyZUpJVFN0
dWJSb3V0aW5lV2l0aE9uZU9iamVjdChjb2RlLCBnbG9iYWxEYXRhLCBvd25lciwgb2JqZWN0KSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lX2gKKyNkZWZpbmUgR0NBd2FyZUpJVFN0dWJSb3V0aW5lX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpJVFN0dWJS
b3V0aW5lLmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OworCisvLyBVc2Ug
dGhpcyBzdHViIHJvdXRpbmUgaWYgeW91IGtub3cgdGhhdCB5b3VyIGNvZGUgbWlnaHQgYmUgb24g
c3RhY2sgd2hlbgorLy8gZWl0aGVyIEdDIG9yIG90aGVyIGtpbmRzIG9mIHN0dWIgZGVsZXRpb24g
aGFwcGVuLiBCYXNpY2FseSwgaWYgeW91ciBzdHViCisvLyByb3V0aW5lIG1ha2VzIGNhbGxzIChl
aXRoZXIgdG8gSlMgY29kZSBvciB0byBDKysgY29kZSkgdGhlbiB5b3Ugc2hvdWxkCisvLyBhc3N1
bWUgdGhhdCBpdCdzIHBvc3NpYmxlIGZvciB0aGF0IEpTIG9yIEMrKyBjb2RlIHRvIGRvIHNvbWV0
aGluZyB0aGF0CisvLyBjYXVzZXMgdGhlIHN5c3RlbSB0byB0cnkgdG8gZGVsZXRlIHlvdXIgcm91
dGluZS4gVXNpbmcgdGhpcyByb3V0aW5lIHR5cGUKKy8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFs
IGRlbGV0aW9uIGlzIGRlbGF5ZWQgdW50aWwgdGhlIEdDIHByb3ZlcyB0aGF0IHRoZQorLy8gcm91
dGluZSBpcyBubyBsb25nZXIgcnVubmluZy4gWW91IGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMgcm91
dGluZSBpZiB5b3UKKy8vIHdhbnQgdG8gbWFyayBhZGRpdGlvbmFsIG9iamVjdHMgZHVyaW5nIEdD
IGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZQorLy8gcm91dGluZSBpcyBrbm93biB0byBiZSBleGVj
dXRpbmcsIG9yIGlmIHlvdSB3YW50IHRvIGZvcmNlIHRoaXMgcm91dGluZSB0bworLy8ga2VlcCBv
dGhlciByb3V0aW5lcyBhbGl2ZSAoZm9yIGV4YW1wbGUgZHVlIHRvIHRoZSB1c2Ugb2YgYSBzbG93
LXBhdGgKKy8vIGxpc3Qgd2hpY2ggZG9lcyBub3QgZ2V0IHJlY2xhaW1lZCBhbGwgYXQgb25jZSku
CitjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgOiBwdWJsaWMgSklUU3R1YlJvdXRpbmUgewor
cHVibGljOgorICAgIEdDQXdhcmVKSVRTdHViUm91dGluZShjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmLCBKU0dsb2JhbERhdGEmKTsKKyAgICB2aXJ0dWFsIH5HQ0F3YXJlSklUU3R1YlJvdXRp
bmUoKTsKKyAgICAKKyAgICB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHMoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCisgICAgeworICAgICAgICBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwodmlzaXRv
cik7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlRnJvbUdDKCk7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIG9ic2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJik7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OworCisgICAgYm9v
bCBtX21heUJlRXhlY3V0aW5nOworICAgIGJvb2wgbV9pc0pldHRpc29uZWQ7Cit9OworCisvLyBV
c2UgdGhpcyBpZiB5b3Ugd2FudCB0byBtYXJrIG9uZSBhZGRpdGlvbmFsIG9iamVjdCBkdXJpbmcg
R0MgaWYgeW91ciBzdHViCisvLyByb3V0aW5lIGlzIGtub3duIHRvIGJlIGV4ZWN1dGluZy4KK2Ns
YXNzIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0IDogcHVibGljIEdD
QXdhcmVKSVRTdHViUm91dGluZSB7CitwdWJsaWM6CisgICAgTWFya2luZ0dDQXdhcmVKSVRTdHVi
Um91dGluZVdpdGhPbmVPYmplY3QoCisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiYsIEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCopOworICAgIHZp
cnR1YWwgfk1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KCk7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1f
b2JqZWN0OworfTsKKworLy8gSGVscGVyIGZvciBlYXNpbHkgY3JlYXRpbmcgYSBHQy1hd2FyZSBK
SVQgc3R1YiByb3V0aW5lLiBGb3IgdGhlIHZhcmFyZ3MsCisvLyBwYXNzIHplcm8gb3IgbW9yZSBK
U0NlbGwqJ3MuIFRoaXMgd2lsbCBlaXRoZXIgY3JlYXRlIGEgSklUU3R1YlJvdXRpbmUsIGEKKy8v
IEdDQXdhcmVKSVRTdHViUm91dGluZSwgb3IgYW4gT2JqZWN0TWFya2luZ0dDQXdhcmVKSVRTdHVi
Um91dGluZSBhcworLy8gYXBwcm9wcmlhdGUuIEdlbmVyYWxseSB5b3Ugb25seSBuZWVkIHRvIHBh
c3MgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQKKy8vIGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRv
IEMrKyBvciBKUy4KKy8vIAorLy8gUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCisvLyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisv
LyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsCisvLyAgICBjb25zdCBKU0NlbGwqIG93bmVy
LAorLy8gICAgYm9vbCBtYWtlc0NhbGxzLAorLy8gICAgLi4uKTsKKy8vCisvLyBOb3RlIHRoYXQg
d2UgZG9uJ3QgYWN0dWFsbHkgdXNlIEMtc3R5bGUgdmFyYXJncyBiZWNhdXNlIHRoYXQgbGVhZHMg
dG8KKy8vIHN0cmFuZ2UgdHlwZS1yZWxhdGVkIHByb2JsZW1zLiBGb3IgZXhhbXBsZSBpdCB3b3Vs
ZCBwcmVjbHVkZSB1cyBmcm9tIHVzaW5nCisvLyBvdXIgY3VzdG9tIG9mIHBhc3NpbmcgJzAnIGFz
IE5VTEwgcG9pbnRlci4gQmVzaWRlcywgd2hlbiBJIGRpZCB0cnkgdG8gd3JpdGUKKy8vIHRoaXMg
ZnVuY3Rpb24gdXNpbmcgdmFyYXJncywgSSBlbmRlZCB1cCB3aXRoIG1vcmUgY29kZSB0aGFuIHRo
aXMgc2ltcGxlCisvLyB3YXkuCisKK1Bhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJ
VFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIEpTR2xvYmFs
RGF0YSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsIGJvb2wgbWFrZXNDYWxscyk7CitQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEmLCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29s
IG1ha2VzQ2FsbHMsCisgICAgSlNDZWxsKik7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIEdDQXdhcmVKSVRTdHViUm91dGluZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIK
QEAgLTU1NywxMiArNTU4LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFu
c2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9u
UHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAot
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNo
QnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIHN0dWIgZm9y
IENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVh
dGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBh
dGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBz
dHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9j
b2RlQmxvY2ssIHJldHVybkFkZHJlc3MudmFsdWUoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRh
LAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIHdpbGxO
ZWVkU3RvcmFnZVJlYWxsb2MsCisgICAgICAgIG5ld1N0cnVjdHVyZSk7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxs
ZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5
SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYyNCw3ICs2MzAsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIHBhdGNoQnVmZmVyLAog
ICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgQ29kZUJs
b2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKQEAgLTYzMyw3ICs2MzksNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3Ry
dWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9j
ayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNo
IG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJp
Yy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02OTQsMTYg
KzcwMCwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAg
fQogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2ls
bCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9p
ZCBwcm90byBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAg
ICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAg
ICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRT
dHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVm
ZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gc3R1YiBmb3IgQ29k
ZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICAKICAgICAvLyBGaW5h
bGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBq
dW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsK
QEAgLTc0Nyw3ICs3NTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxp
c3QoCiAgICAgICAgIH0KICAgICB9ICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRp
b24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNh
c2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAx
XS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0Jl
Z2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwb2x5bW9y
cGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUpKTsKICAg
ICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtc3R1YkluZm8tPnBhdGNoLmJhc2Vs
aW5lLnUuZ2V0LmNvbGRQYXRoQmVnaW4pOwogICAgIApAQCAtNzU2LDE4ICs3NjYsMjIgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3Mg
cmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVy
Zm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAs
IHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAg
ICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAg
ICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHNlbGYgbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJl
dHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAg
ICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
CisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNo
LmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
UHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04MTgsMjUgKzgzMiwyOSBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgICAgIH0KICAg
ICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJl
IGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBl
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwor
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwo
SklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
Q2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2Fz
ZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KSk7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgi
QmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBG
SU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJh
c2VsaW5lIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJu
IHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICpt
X2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAg
ICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVy
ZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xv
dyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENv
ZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVz
LCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCkBAIC04OTIsMTggKzkxMCwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBp
bmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFs
IHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFzQ29kZVB0cihw
cm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7
CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdp
bik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNo
IGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1
cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
bGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KSk7
CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lk
IGNoYWluIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAg
ICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgK
LSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBj
aGFpbiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAg
ICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGlu
ayk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4sIGlzRGlyZWN0
KTsKQEAgLTkxMSw3ICs5MzMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW5MaXN0CiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBp
biB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVt
cCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQg
Y2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtOTY5LDE3ICs5OTEsMjEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51Lmdl
dC5wdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0
ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIs
Ci0gICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAl
cCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0
cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAg
ICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAg
ICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hhaW4gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAg
Km1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAor
ICAgICAgICBuZWVkc1N0dWJMaW5rKTsKICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHVi
Um91dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNv
ZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9v
cF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVu
Y3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19s
aXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgpAQCAtNTk1
LDEyICs1OTYsMTcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwog
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3Rp
X29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0gICAgc3R1
YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIs
Ci0gICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9yIENvZGVCbG9jayAl
cCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5BZGRyZXNz
LnZhbHVlKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91
dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAor
ICAgICAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBmb3IgQ29kZUJsb2Nr
ICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCByZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICB3aWxsTmVlZFN0b3JhZ2VSZWFsbG9j
LAorICAgICAgICBuZXdTdHJ1Y3R1cmUpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xp
bmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5l
LmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJl
dHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sq
IGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCkBAIC02NTcsNyArNjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5w
dXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0
aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCiAgICAgICAgIHBhdGNoQnVmZmVyLAogICAgICAgICAoIkJhc2xpbmUgSklU
IGdldF9ieV9pZCBhcnJheSBsZW5ndGggc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9p
bnQgJXAiLAogICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldCgKQEAgLTY2Niw3ICs2NzIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
YXRjaEdldEFycmF5TGVuCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1
YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBm
dXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3Bf
Z2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTcyNCwxNiArNzMwLDIwIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAgfQogICAgIH0KICAgICAvLyBU
cmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQg
bGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAg
ICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBz
dHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVC
bG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGlu
ZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAg
ICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENvZGVCbG9j
ayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSks
CisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNo
IHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUg
aW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5z
dHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBt
b3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMu
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzc2LDcgKzc4
Niw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICB9CiAK
ICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2Fz
ZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJ
VFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAg
ICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsK
IApAQCAtNzg1LDE4ICs3OTUsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNl
bGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBj
b2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMu
CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gRklOQUxJWkVfQ09ERSgKLSAg
ICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBsaXN0
IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29k
ZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAg
ICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YkNvZGUgPSBjcmVhdGVK
SVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNo
QnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGxpc3Qgc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJs
b2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAogICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIGlzRGly
ZWN0KTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViQ29kZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5
T2Zmc2V0IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NDgsMjQgKzg2
MiwyOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgfQog
CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNh
c2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklU
U3R1YlJvdXRpbmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2Fz
ZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMy
LCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRo
ZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRv
IGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5w
dXRSZXN1bHQpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IEZJTkFM
SVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBn
ZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRS
ZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+
IHN0dWJDb2RlID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUo
CisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdl
dF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVw
IiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERh
dGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVl
ZHNTdHViTGluayk7CiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhd
LnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJD
b2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwogCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLT5jb2RlKCku
Y29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3Qo
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgUHJvcGVydHlPZmZzZXQgY2Fj
aGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyMSwxOCArOTM5LDIyIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICB9CiAKICAgICAvLyBV
c2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0
byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHViUm91dGlu
ZTo6YXNDb2RlUHRyKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUpKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgbGFz
dFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KSk7CiAKLSAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKLSAgICAg
ICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBjaGFpbiBs
aXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1f
Y29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBj
cmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAg
IHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5X2lkIGNoYWlu
IGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAg
ICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsK
IAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwg
YmUgZGVsZXRlZCBsYXRlci4KICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJ
bmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CkBAIC05
NDAsNyArOTYyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9m
ZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKQEAgLTk5OSwxNyArMTAyMSwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJl
c3VsdCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBKSVQg
Z2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
LSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1
YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgK
KyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0
X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisg
ICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHVi
TGluayk7CiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAKICAgICAv
LyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0
aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0
aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5j
dGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDxz
dGRhcmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFN0dWJSb3V0aW5lOjp+SklUU3R1YlJv
dXRpbmUoKSB7IH0KKwordm9pZCBKSVRTdHViUm91dGluZTo6b2JzZXJ2ZVplcm9SZWZDb3VudCgp
Cit7CisgICAgQVNTRVJUKCFtX3JlZkNvdW50KTsKKyAgICBkZWxldGUgdGhpczsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpJVFN0dWJSb3V0aW5lX2gKKyNkZWZpbmUgSklUU3R1YlJvdXRpbmVfaAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVk
ZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CisKKy8vIFRo
aXMgaXMgYSBiYXNlLWNsYXNzIGZvciBKSVQgc3R1YiByb3V0aW5lcywgYW5kIGFsc28gdGhlIGNs
YXNzIHlvdSB3YW50CisvLyB0byBpbnN0YW50aWF0ZSBkaXJlY3RseSBpZiB5b3UgaGF2ZSBhIHJv
dXRpbmUgdGhhdCBkb2VzIG5vdCBuZWVkIGFueQorLy8gaGVscCBmcm9tIHRoZSBHQy4gSWYgaW4g
ZG91YnQsIHVzZSBvbmUgb2YgdGhlIG90aGVyIHN0dWIgcm91dGluZXMuIEJ1dAorLy8gaWYgeW91
IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgc3R1YiByb3V0aW5lIGNhbm5vdCBiZSBvbiB0aGUgc3Rh
Y2sgd2hpbGUKKy8vIHNvbWVvbmUgdHJpZ2dlcnMgYSBzdHViIHJvdXRpbmUgcmVzZXQsIHRoZW4g
dXNpbmcgdGhpcyB3aWxsIHNwZWVkIHVwCisvLyBtZW1vcnkgcmVjbGFtYXRpb24uIE9uZSBjYXNl
IHdoZXJlIGEgc3R1YiByb3V0aW5lIHNhdGlzZmllcyB0aGlzCisvLyBjb25kaXRpb24gaXMgaWYg
aXQgZG9lc24ndCBtYWtlIGFueSBjYWxscywgdG8gZWl0aGVyIEMrKyBvciBKUyBjb2RlLiBJbgor
Ly8gc3VjaCBhIHJvdXRpbmUgeW91IGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgb24gdGhlIHN0YWNr
IHdoZW4gYW55dGhpbmcKKy8vIGludGVyZXN0aW5nIGhhcHBlbnMuCisvLyBTZWUgR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmggZm9yIHRoZSBvdGhlciBzdHViIHJvdXRpbmVzLgorY2xhc3MgSklUU3R1
YlJvdXRpbmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpJVFN0dWJSb3V0aW5lKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91dGluZShj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUp
CisgICAgICAgICwgbV9yZWZDb3VudCgxKQorICAgIHsKKyAgICB9CisgICAgCisgICAgLy8gVXNl
IHRoaXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhIENvZGVQdHIgdG8gc29tZW9uZSB3aG8gaW5zaXN0
cyBvbiB0YWtpbmcKKyAgICAvLyBhIFJlZlB0cjxKSVRTdHViUm91dGluZT4uCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZVNlbGZNYW5hZ2VkUm91dGluZSgKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJhd0NvZGVQb2ludGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihyYXdDb2RlUG9pbnRlcikpKTsKKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB+SklUU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICAvLyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgaXMgY29weWFibGUsIGJ1dCBhdCB0aGUgY29zdCBvZiByZWZlcmVuY2UK
KyAgICAvLyBjb3VudGluZyBjaHVybi4gUmV0dXJuaW5nIGEgcmVmZXJlbmNlIGlzIGEgZ29vZCB3
YXkgb2YgcmVkdWNpbmcKKyAgICAvLyB0aGUgY2h1cm4uCisgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgCisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhc0NvZGVQdHIoUGFzc1JlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUpCisgICAgeworICAgICAgICBpZiAoIXN0dWJSb3V0aW5lKQorICAg
ICAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworICAgICAgICAKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJlc3VsdCA9IHN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpOworICAgICAgICBBU1NFUlQoISFyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50Kys7
CisgICAgfQorICAgIAorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKC0tbV9y
ZWZDb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgb2JzZXJ2ZVplcm9SZWZDb3Vu
dCgpOworICAgIH0KKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciB0aGUgR0MgdG8gZGV0ZXJtaW5l
IGhvdyB0byBkZWFsIHdpdGggbWFya2luZyBKSVQgc3R1YgorICAgIC8vIHJvdXRpbmVzLgorICAg
IHVpbnRwdHJfdCBzdGFydEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX2NvZGUuZXhlY3V0YWJs
ZU1lbW9yeSgpLT5zdGFydEFzSW50ZWdlcigpOyB9CisgICAgdWludHB0cl90IGVuZEFkZHJlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2NvZGUuZXhlY3V0YWJsZU1lbW9yeSgpLT5lbmRBc0ludGVnZXIo
KTsgfQorICAgIHN0YXRpYyB1aW50cHRyX3QgYWRkcmVzc1N0ZXAoKSB7IHJldHVybiBqaXRBbGxv
Y2F0aW9uR3JhbnVsZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIGNhblBlcmZvcm1SYW5nZUZp
bHRlcigpCisgICAgeworI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
KyAgICB9CisgICAgc3RhdGljIHVpbnRwdHJfdCBmaWx0ZXJpbmdTdGFydEFkZHJlc3MoKQorICAg
IHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVy
biBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKKyNlbHNlCisgICAgICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIH0K
KyAgICBzdGF0aWMgc2l6ZV90IGZpbHRlcmluZ0V4dGVudFNpemUoKQorICAgIHsKKyNpZiBFTkFC
TEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNlbHNlCisgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIH0KKyAgICBzdGF0aWMgYm9v
bCBwYXNzZXNGaWx0ZXIodWludHB0cl90IGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAoIWNh
blBlcmZvcm1SYW5nZUZpbHRlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IAorICAgICAgICBpZiAoYWRkcmVzcyAtIGZpbHRlcmluZ1N0YXJ0QWRkcmVzcygpID49IGZpbHRl
cmluZ0V4dGVudFNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9j
b2RlOworICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCisvLyBIZWxwZXIgZm9yIHRoZSBj
cmVhdGlvbiBvZiBzaW1wbGUgc3R1YiByb3V0aW5lcyB0aGF0IG5lZWQgbm8gaGVscCBmcm9tIHRo
ZSBHQy4KKyNkZWZpbmUgRklOQUxJWkVfQ09ERV9GT1JfU1RVQihwYXRjaEJ1ZmZlciwgZGF0YUxv
Z0FyZ3VtZW50cykgXAorICAgIChhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoRklOQUxJWkVf
Q09ERSgocGF0Y2hCdWZmZXIpLCBkYXRhTG9nQXJndW1lbnRzKSkpKQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBKSVRTdHViUm91dGlu
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcyMiw3ICsxNzIyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VSVCghc3R1YkluZm8tPnN0
dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpLCBzdHVi
SW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKKyAg
ICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIDAsIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxm
TGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTc0OCwxMiArMTc0OCwxMiBAQCBzdGF0aWMgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNz
VHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoKICAgICAgICAgcHJvdG90
eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xv
YmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJ
ZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90
by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwotICAgICAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlz
dChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBh
Y2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0g
bmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1
YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVl
KTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
KCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBzdHVi
SW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0OgpJbmRl
eDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMTIyMDUyKQorKysg
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxNyArNDUsMjcgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
fk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKICAgICAKLSAgICB2b2lkKiBzdGFydCgpCisgICAgdm9p
ZCogc3RhcnQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAgICAgfQog
ICAgIAotICAgIHZvaWQqIGVuZCgpCisgICAgdm9pZCogZW5kKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGVuZEFzSW50ZWdlcigpKTsKKyAgICB9CisgICAgCisgICAgdWludHB0
cl90IHN0YXJ0QXNJbnRlZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJf
dCBlbmRBc0ludGVnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXJ0QXNJbnRl
Z2VyKCkgKyBtX3NpemVJbkJ5dGVzOwogICAgIH0KICAgICAgICAgCi0gICAgc2l6ZV90IHNpemVJ
bkJ5dGVzKCkKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fc2l6ZUluQnl0ZXM7CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="159576"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151175</attachid>
            <date>2012-07-08 20:46:54 -0700</date>
            <delta_ts>2012-07-08 22:16:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jettisonstubs_patch_8.diff</filename>
            <type>text/plain</type>
            <size>102486</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMi0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnaXZlcyB0aGUgR0MgYXdhcmVuZXNz
IG9mIGFsbCBKSVQtZ2VuZXJhdGVkIHN0dWJzIGZvciBpbmxpbmUgY2FjaGVzLiBUaGF0CisgICAg
ICAgIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgSklULWdlbmVyYXRlZCBzdHVi
LCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBjdXJyZW50bHkgcnVubmluZzogaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBtaWdo
dAorICAgICAgICBiZSwgdGhlIEdDIHdpbGwga2luZGx5IGRlZmVyIGRlbGV0aW9uIHVudGlsIG5v
bi1ydW5uaW5nLW5lc3MgaXMgcHJvdmVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFBvbHltb3JwaGljU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRp
bmUpOgorICAgICAgICAoUHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlND
OjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRy
YW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKER1bW15TWFya0hv
b2spOgorICAgICAgICAoSlNDOjpEdW1teU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgIChDb21wb3NpdGVNYXJrSG9vayk6Cisg
ICAgICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjpDb21wb3NpdGVNYXJrSG9vayk6CisgICAg
ICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKiBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ29uc2VydmF0aXZlUm9v
dHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SGVhcCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OkpJVFN0dWJSb3V0
aW5lU2V0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHViUm91dGlu
ZVNldCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lU2V0OjptYXJrU2xvdyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAgICAqIGhl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
ayk6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHMpOgorICAgICAgICAoTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5K
SVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRT
dHViUm91dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OmNvZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKToKKyAg
ICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJv
dXRpbmU6OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6cGFzc2VzRmlsdGVyKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorCiAyMDEyLTA3LTA4ICBab2x0YW4gSGVyY3plZyAg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dIEltcGxlbWVudGluZyBt
aXNzaW5nIG1hY3JvIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWZ0ZXIgcjEyMTkyNQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXAuY3Bw
CiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKICAgICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJs
b2NrLmNwcApAQCAtMTI5LDYgKzEzMCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAKKyAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCiAgICAgaml0L0pJVEFyaXRobWV0aWMuY3BwCiAgICAgaml0L0pJ
VENhbGwzMl82NC5jcHAKQEAgLTEzOSw2ICsxNDEsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGppdC9KSVRPcGNvZGVzLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKyAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaCBcCkBAIC0zNTQsNiArMzU2LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0
SklUQ29kZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIFwKQEAgLTM3Myw2
ICszNzcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJS
b3V0aW5lLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hlYXAuY3Bw
IFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAgXAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCBcCisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgXAogICAgIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAgXApAQCAtMTM3LDYgKzEzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgXAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcCBcCisg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGlj
LmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgXAogICAgIGppdC9KSVRDYWxs
LmNwcCBcCkBAIC0xNDcsNiArMTQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCisgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBc
CiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAog
ICAgIHBhcnNlci9MZXhlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyMjA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDYgKzE4NTgs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEpJVC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTkxOCw2ICsxOTI2LDE0IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxK
SVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRTdHViUm91dGluZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUU3R1YnMuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTIyMTQsNiArMjIzMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMiBAQAog
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1
QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Rjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERD
REQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQz
MDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjND
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZHQ0Nh
bGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMzQ0Qy
RjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFi
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NzUsNiArODgxLDEyIEBACiAJCTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRm
Zy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDFDMTVBNTAy
OEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1
YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyQTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyRTE1QThE
Q0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdDQXdhcmVKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Iy
OTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxI
ZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkyLDYgKzE3MDQsOCBA
QAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRv
ci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwICovLAorCQkJCTBGNzY2RDJEMTVBOERDREQwMDhGMzYzRSAvKiBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGNzY2RDJFMTVBOERDREQwMDhGMzYz
RSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjQ2ODBEMDE0QkJDNUY4MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NjgwRDExNEJCQzVG
ODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCAqLywKIAkJCQkxNDI5RDkyRDBFRDIy
RDcwMDBCODk2MTkgLyogSklULmNwcCAqLywKQEAgLTE3MTEsNiArMTcyNSw4IEBACiAJCQkJODZD
Qzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLywKIAkJCQlB
N0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8s
CiAJCQkJOTYwNjI2OTUwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmggKi8sCisJCQkJ
MEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLywKKwkJCQkw
Rjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkxNEEy
M0Q2QzBGNEUxOUNFMDAyM0NEQUQgLyogSklUU3R1YnMuY3BwICovLAogCQkJCTE0QTY1ODFBMEY0
RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVicy5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTE3NTIsNiArMTc2OCw4IEBACiAJCQkJ
MTRCQTdBOTYxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCAqLywKIAkJCQlDMkM4RDAyRjE0QTND
RUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi8sCiAJCQkJMTRGOTc0NDYxMzhDODUzRTAwREEx
QzY3IC8qIEhlYXBSb290VmlzaXRvci5oICovLAorCQkJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8sCisJCQkJMEY3NjZEMkExNUE4Q0MzNDAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi8sCiAJCQkJMEY0MzE3MzYxNDZCQUM2NTAwN0Uz
ODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovLAogCQkJCTE0MkUzMTMwMTM0RkYwQTYwMEFGQURC
NSAvKiBMb2NhbC5oICovLAogCQkJCTE0MkUzMTMxMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNj
b3BlLmggKi8sCkBAIC0yODE1LDYgKzI4MzMsOSBAQAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRD
QjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzcyMTU5
Mjc1RDgwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVK
SVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMzExNUFBODExMjAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM0MDcsNiArMzQyOCw5
IEBACiAJCQkJQzJENThDMzQxNTkxMkZFRTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzcxMTU5Mjc1RDUwMDRDQjlG
RiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzY2RDI4
MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2lmbmRlZiBJbnN0cnVjdGlvbl9oCiAjZGVmaW5lIEluc3RydWN0aW9uX2gK
IAorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKQEAgLTUy
LDggKzUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IFZhbHVlUHJvZmlsZTsKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlOwotCiAgICAgLy8gU3RydWN0
dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFt
LgogICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTYxLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0cnVjdCBQb2x5bW9ycGhpY1N0dWJJbmZvIHsKICAgICAgICAgICAgIGJvb2wg
aXNDaGFpbjsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmU7CisgICAg
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFzZTsKICAgICAgICAgICAgIHVuaW9uIHsKICAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJvdG87CkBAIC03Myw3ICs3
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHUucHJvdG8uY2xlYXIoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBib29sIGlzRGlyZWN0
KQorICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
c3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICAgICAgYmFzZS5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKQEAgLTgyLDcgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9w
cm90bywgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0
dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90bywgYm9vbCBpc0Rp
cmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHVi
Um91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jh
c2UpOwpAQCAtOTEsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB0
aGlzLT5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgaXNE
aXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsK
ICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpAQCAt
MTA1LDE3ICsxMDQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwg
Ym9vbCBpc0RpcmVjdCkKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0
KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwg
c3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVU
eXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFBy
b3RvLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZSogZmlyc3RQcm90bywgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgbGlz
dFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0
UHJvdG8sIGlzRGlyZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlz
RGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJz
dENoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwg
aXNEaXJlY3QpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUHV0QnlJZEFjY2Vz
cyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9y
ZXBsYWNlOgogICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKICAgICAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9i
amVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoaW5pdGlhbFNsb3dQYXRoKTsK
KyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2Vs
Zk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgcHVibGljOgogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKQorICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsCiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0
QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwpAQCAt
MTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7CiAg
ICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSgpIGNvbnN0
CisgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpKTsKICAgICAg
ICAgcmV0dXJuIG1fc3R1YlJvdXRpbmU7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YlJvdXRpbmU7
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIAogY2xhc3Mg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7CkBAIC0xNjEsNyArMTYxLDcgQEAgcHVibGljOgogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS5jb2Rl
KCk7CisgICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5j
b2RlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9u
LmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTY4
LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBkZXJl
ZigpOwogICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKLSAgICAgICAgICAg
IHN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgICAgICBzdHVi
Um91dGluZS5jbGVhcigpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwpAQCAt
Mjg2LDcgKzI4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfSBwdXRCeUlkTGlz
dDsKICAgICAgICAgfSB1OwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91
dGluZTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAg
ICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxh
dGl2ZUpJVC5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgpAQCAtMTA2LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIGxpbmtS
ZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVs
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJh
dGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIApAQCAtMTY2LDcgKzE2Nyw3IEBAIHN0YXRpYyB2b2lk
IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CiAgICAgCi0gICAgc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIHByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAg
ICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CkBAIC0yMjAsMTQgKzIyMSwxNCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERSgKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICAgICAoIkRGRyBHZXRC
eUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIs
CiAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIAogICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc2LDcgKzI3Nyw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hh
aW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNl
dCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5l
LmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5m
by5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CkBAIC0zMjMsNyAr
MzI0LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAg
ICBsaXN0SW5kZXggPSAwOwogICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91
dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdl
ZFJvdXRpbmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICBs
aXN0SW5kZXggPSAxOwogICAgIH0gZWxzZSB7CkBAIC00MzMsNyArNDM0LDcgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW47CiAgICAgICAgIGlmIChsaXN0SW5kZXgpCi0gICAg
ICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAg
ICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwpAQCAt
NDQ1LDE3ICs0NDYsMjMgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0
aW9uSGFuZGxlckluU3R1Yik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBh
Y2Nlc3MgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSA9CisgICAgICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2Vz
cyBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgICAgICAgICAqZ2xv
YmFsRGF0YSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAor
ICAgICAgICAgICAgICAgIHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90
OjpHZXR0ZXIKKyAgICAgICAgICAgICAgICB8fCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09
IFByb3BlcnR5U2xvdDo6Q3VzdG9tKTsKICAgICAgICAgCiAgICAgICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAg
ICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQ5OSw3ICs1MDYsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhl
CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikg
ewogICAgICAgICBBU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJS
b3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlk
UHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9wcm90
b19saXN0KTsKQEAgLTUxMCwxMCArNTE3LDEwIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJ
RFByb3RvTGlzdChFeGUKICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFKSB7CiAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsr
OwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBD
b2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgICAg
ICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOwogICAgICAgICAKICAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVj
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAg
IApAQCAtNTIxLDcgKzUyOCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlz
dChFeGUKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC01ODEsNyArNTg4LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHVi
KAogICAgIFB1dEtpbmQsCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJv
dXRpbmUpCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VH
UFIpOwpAQCAtNjU1LDcgKzY2Miw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAK
LSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAgc3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJERkcg
UHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
ICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKQEAgLTY3Myw3ICs2ODAsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluLAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJl
bCwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTc1NCw4ICs3NjEsOCBAQCBzdGF0aWMg
dm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFKAorICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIFB1dEJ5SWQg
dHJhbnNpdGlvbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCkBAIC03OTksNyArODA2LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgp
KSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJl
Y3QpOwpAQCAtODQxLDcgKzg0OCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3Qo
RXhlY1N0YXQKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICBpZiAoc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKQEAgLTg4OCw3ICs4OTUsNyBAQCBzdGF0
aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3QtPmlz
RnVsbCgpKQogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIs
NiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkKICAgICBtX3Jvb3RzID0gbmV3Um9v
dHM7CiB9CiAKLWNsYXNzIER1bW15TWFya0hvb2sgewotcHVibGljOgotICAgIHZvaWQgbWFyayh2
b2lkKikgeyB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KIGlubGluZSB2b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55Qmxvb21G
aWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CkBAIC0xMTAsMTUgKzEwNSw0OCBA
QCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAgICAgICAgIGdlbmVy
aWNBZGRQb2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAKK2NsYXNzIER1bW15TWFy
a0hvb2sgeworcHVibGljOgorICAgIHZvaWQgbWFyayh2b2lkKikgeyB9Cit9OworCiB2b2lkIENv
bnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCkKIHsKLSAgICBEdW1t
eU1hcmtIb29rIGhvb2s7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaG9vayk7Cisg
ICAgRHVtbXlNYXJrSG9vayBkdW1teTsKKyAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBk
dW1teSk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9pZCBDb25zZXJ2YXRpdmVS
b290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMpCit7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaml0U3R1YlJv
dXRpbmVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIENv
bXBvc2l0ZU1hcmtIb29rIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVNYXJrSG9vayhUJiBmaXJz
dCwgVSYgc2Vjb25kKQorICAgICAgICA6IG1fZmlyc3QoZmlyc3QpCisgICAgICAgICwgbV9zZWNv
bmQoc2Vjb25kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2ZpcnN0Lm1hcmsoYWRkcmVzcyk7CisgICAgICAgIG1fc2Vj
b25kLm1hcmsoYWRkcmVzcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFQmIG1fZmlyc3Q7Cisg
ICAgVSYgbV9zZWNvbmQ7Cit9OworCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCisgICAg
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5l
cywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBnZW5lcmljQWRkU3Bhbihi
ZWdpbiwgZW5kLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBDb21wb3NpdGVNYXJrSG9vazxKSVRTdHVi
Um91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hvb2soCisgICAgICAgIGppdFN0dWJSb3V0
aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFy
a0hvb2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTIyMDUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOSArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTQ2Vs
bDsKIGNsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBIZWFwOworY2xhc3MgSklUU3R1YlJvdXRp
bmVTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1Ymxp
YzoKQEAgLTQyLDcgKzQzLDggQEAgcHVibGljOgogICAgIH5Db25zZXJ2YXRpdmVSb290cygpOwog
CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7Ci0gICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYpOworICAgIHZvaWQgYWRkKHZvaWQq
IGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0Jik7CisgICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7
CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNiAr
NDIwLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgLy8gV2UgZ2F0
aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2Ug
Y29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRl
cm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290
cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0b3JhZ2VT
cGFjZSk7CisgICAgbV9qaXRTdHViUm91dGluZXMuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAg
ICAgR0NQSEFTRShHYXRoZXJDb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgIG1fbWFjaGluZVRo
cmVhZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkp
OwpAQCAtNDI5LDcgKzQzMCw4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQog
ICAgIG1fZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNF
KEdhdGhlclJlZ2lzdGVyRmlsZVJvb3RzKTsKLSAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMsIG1fZGZnQ29kZUJsb2Nrcyk7Cisg
ICAgICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAorICAgICAgICAg
ICAgcmVnaXN0ZXJGaWxlUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2RmZ0NvZGVCbG9ja3Mp
OwogICAgIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNTQwLDkgKzU0MiwxMCBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgfQogICAgIAogICAgICAgICB7
Ci0gICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBNQVJL
X0xPR19ST09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyIpOworICAgICAgICAgICAgR0NQ
SEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOworICAgICAgICAgICAgTUFS
S19MT0dfUk9PVCh2aXNpdG9yLCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRp
bmVzIik7CiAgICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tz
KHZpc2l0b3IpOworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMudHJhY2VNYXJrZWRTdHVi
Um91dGluZXModmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
CiAgICAgICAgIH0KICAgICAKQEAgLTY2NSw2ICs2NjgsNyBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICB9CiAKICAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1faml0U3R1YlJvdXRpbmVzLmRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCiB2b2lkIEhlYXA6OmNv
bGxlY3RBbGxHYXJiYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNp
bmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgorI2luY2x1ZGUg
IkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtNDQs
MTAgKzQ1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBj
bGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CisgICAg
Y2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsK
ICAgICBjbGFzcyBIZWFwOwogICAgIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKICAgICBjbGFzcyBJ
bmNyZW1lbnRhbFN3ZWVwZXI7CisgICAgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgY2xhc3Mg
SlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU1ZhbHVlOwpAQCAt
MTY4LDYgKzE3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRT
dHViUm91dGluZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xh
c3MgTWFya2VkU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CkBA
IC0yMjksNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhbmRsZVNldCBtX2hh
bmRsZVNldDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICAgICAgREZH
Q29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CisgICAgICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1f
aml0U3R1YlJvdXRpbmVzOwogICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVy
OwogICAgICAgICAKICAgICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
SVRTdHViUm91dGluZVNldC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkdDQXdh
cmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKKyNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUU3R1YlJvdXRpbmVTZXQ6OkpJ
VFN0dWJSb3V0aW5lU2V0KCkgeyB9CitKSVRTdHViUm91dGluZVNldDo6fkpJVFN0dWJSb3V0aW5l
U2V0KCkgeyB9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmFkZChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUqIHJvdXRpbmUpCit7CisgICAgQVNTRVJUKCFyb3V0aW5lLT5tX2lzSmV0dGlzb25lZCk7
CisgICAgCisgICAgbV9saXN0T2ZSb3V0aW5lcy5hcHBlbmQocm91dGluZSk7CisgICAgCisgICAg
dWludHB0cl90IHN0YXJ0ID0gcm91dGluZS0+c3RhcnRBZGRyZXNzKCk7CisgICAgdWludHB0cl90
IGVuZCA9IHJvdXRpbmUtPmVuZEFkZHJlc3MoKTsKKyAgICB1aW50cHRyX3Qgc3RlcCA9IEpJVFN0
dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpOworICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFy
dDsgaXRlciA8IGVuZDsgaXRlciArPSBzdGVwKSB7CisgICAgICAgIEFTU0VSVChtX2FkZHJlc3NU
b1JvdXRpbmVNYXAuZmluZChpdGVyKSA9PSBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpOwor
ICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAuYWRkKGl0ZXIsIHJvdXRpbmUpOworICAgIH0K
K30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcygpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX2xpc3RP
ZlJvdXRpbmVzW2ldLT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgSklUU3R1
YlJvdXRpbmVTZXQ6Om1hcmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKQoreworICAgIEhhc2hNYXA8
dWludHB0cl90LCBHQ0F3YXJlSklUU3R1YlJvdXRpbmUqPjo6aXRlcmF0b3IgaXRlciA9CisgICAg
ICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5kKGFkZHJlc3MgJiB+KEpJVFN0dWJSb3V0aW5l
OjphZGRyZXNzU3RlcCgpIC0gMSkpOworICAgIAorICAgIGlmIChpdGVyID09IG1fYWRkcmVzc1Rv
Um91dGluZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGl0ZXItPnNlY29u
ZC0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7Cit9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6
OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2xpc3RPZlJvdXRpbmVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdD
QXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSA9IG1fbGlzdE9mUm91dGluZXNbaV07CisgICAg
ICAgIGlmICghcm91dGluZS0+bV9pc0pldHRpc29uZWQgfHwgcm91dGluZS0+bV9tYXlCZUV4ZWN1
dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdWludHB0cl90
IHN0YXJ0ID0gcm91dGluZS0+c3RhcnRBZGRyZXNzKCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmQg
PSByb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAgICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1
YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7CisgICAgICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBz
dGFydDsgaXRlciA8IGVuZDsgaXRlciArPSBzdGVwKSB7CisgICAgICAgICAgICBBU1NFUlQobV9h
ZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikgIT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVu
ZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVy
KS0+c2Vjb25kID09IHJvdXRpbmUpOworICAgICAgICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFw
LnJlbW92ZShpdGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcm91dGluZS0+ZGVs
ZXRlRnJvbUdDKCk7CisgICAgICAgIAorICAgICAgICBtX2xpc3RPZlJvdXRpbmVzW2ldID0gbV9s
aXN0T2ZSb3V0aW5lcy5sYXN0KCk7CisgICAgICAgIG1fbGlzdE9mUm91dGluZXMucmVtb3ZlTGFz
dCgpOworICAgICAgICBpLS07CisgICAgfQorfQorCit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0
cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gbV9saXN0T2ZSb3V0aW5lc1tpXTsKKyAgICAg
ICAgaWYgKCFyb3V0aW5lLT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICByb3V0aW5lLT5tYXJrUmVxdWlyZWRPYmplY3RzKHZpc2l0b3Ip
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5l
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHVi
Um91dGluZVNldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUU3R1YlJvdXRpbmVT
ZXRfaAorI2RlZmluZSBKSVRTdHViUm91dGluZVNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgor
I2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBHQ0F3
YXJlSklUU3R1YlJvdXRpbmU7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgSklUU3R1YlJv
dXRpbmVTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEpJVFN0dWJSb3V0aW5lU2V0KTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKK3B1YmxpYzoKKyAgICBKSVRTdHVi
Um91dGluZVNldCgpOworICAgIH5KSVRTdHViUm91dGluZVNldCgpOworICAgIAorICAgIHZvaWQg
YWRkKEdDQXdhcmVKSVRTdHViUm91dGluZSopOworCisgICAgdm9pZCBjbGVhck1hcmtzKCk7Cisg
ICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUFkZHJlc3MpCisgICAgeworICAgICAg
ICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRh
dGVBZGRyZXNzKTsKKyAgICAgICAgaWYgKCFKSVRTdHViUm91dGluZTo6cGFzc2VzRmlsdGVyKGFk
ZHJlc3MpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbWFya1Nsb3co
YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVk
U3R1YlJvdXRpbmVzKCk7CisgICAgCisgICAgdm9pZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhT
bG90VmlzaXRvciYpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIG1hcmtTbG93KHVpbnRwdHJf
dCBhZGRyZXNzKTsKKyAgICAKKyAgICBIYXNoTWFwPHVpbnRwdHJfdCwgR0NBd2FyZUpJVFN0dWJS
b3V0aW5lKj4gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwOworICAgIFZlY3RvcjxHQ0F3YXJlSklUU3R1
YlJvdXRpbmUqPiBtX2xpc3RPZlJvdXRpbmVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gSklUU3R1YlJvdXRpbmVTZXRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJr
ZXIuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFj
aGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBIZWFwOwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJv
b3RzOworICAgIGNsYXNzIEhlYXA7CiAKICAgICBjbGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hY2hpbmVUaHJlYWRzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0
ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOSArNzMsOSBAQCB2b2lkIFJlZ2lzdGVy
RmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vCiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJl
Z2luKCksIGVuZCgpKTsKIH0KIAotdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgREZHQ29kZUJsb2Nr
cyYgZGZnQ29kZUJsb2NrcykKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVS
b290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5l
U2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCiB7Ci0g
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpLCBkZmdDb2RlQmxvY2tzKTsK
KyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGppdFN0dWJSb3V0aW5l
cywgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQgUmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNz
Q2FwYWNpdHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3RlckZpbGUuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiAg
ICAgY2xhc3MgREZHQ29kZUJsb2NrczsKKyAgICBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKICAg
ICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBjbGFzcyBSZWdpc3RlckZpbGUg
ewpAQCAtNjQsNyArNjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgflJlZ2lzdGVyRmls
ZSgpOwogICAgICAgICAKICAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJiwgREZHQ29kZUJsb2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBE
RkdDb2RlQmxvY2tzJik7CiAKICAgICAgICAgUmVnaXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KICAgICAg
ICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3Ig
ewogcHVibGljOgogICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1l
dGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwor
ICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpCiAgICAgewogICAg
ICAgICBNdXRleExvY2tlciBsb2NrKGFsbG9jYXRvcnNNdXRleCgpKTsKICAgICAgICAgYWxsb2Nh
dG9ycygpLmFkZCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NiArNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTR2xvYmFsRGF0YTsKIHZvaWQgcmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJik7CiAKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBqaXRBbGxvY2F0aW9uR3JhbnVsZSA9IDMyOworCiBpbmxpbmUgc2l6ZV90IHJvdW5kVXBB
bGxvY2F0aW9uU2l6ZShzaXplX3QgcmVxdWVzdCwgc2l6ZV90IGdyYW51bGFyaXR5KQogewogICAg
IGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIGdyYW51bGFyaXR5KSA8
PSByZXF1ZXN0KQpAQCAtMTAxLDYgKzEwMywxOCBAQCB0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRv
ckhhbmRsZSBFeGVjdXRhCiBjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOwogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisjaWYgQ1BVKEFSTSkK
K3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxNiAq
IDEwMjQgKiAxMDI0OworI2VsaWYgQ1BVKFg4Nl82NCkKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CisjZWxzZQor
c3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICog
MTAyNCAqIDEwMjQ7CisjZW5kaWYKKworZXh0ZXJuIHVpbnRwdHJfdCBzdGFydE9mRml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbDsKKyNlbmRpZgorCiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsK
ICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwyNyArNDUsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAog
bmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jaWYgQ1BVKEFSTSkKLXN0YXRpYyBjb25zdCBzaXplX3Qg
Zml4ZWRQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7Ci0jZWxpZiBDUFUoWDg2XzY0KQotc3Rh
dGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0OwotI2Vs
c2UKLXN0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7
Ci0jZW5kaWYKK3VpbnRwdHJfdCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAog
Y2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0
b3IgewogcHVibGljOgogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAg
ICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMy
IGJ5dGVzCisgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8g
cm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAgewotICAgICAgICBtX3Jl
c2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRQ
b29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJ
VEFCTEUsIHRydWUpOworICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpy
ZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUsIE9TQWxs
b2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsK
ICNpZiAhKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBFTkFCTEUoTExJTlQpKQogICAg
ICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgpOwogI2VuZGlmCiAg
ICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZXNlcnZh
dGlvbi5zaXplKCkgPT0gZml4ZWRQb29sU2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQobV9yZXNl
cnZhdGlvbi5zaXplKCkgPT0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUpOwogICAgICAg
ICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNlcnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRp
b24uc2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RhcnRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlv
bi5iYXNlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkhl
YXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgi
CisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK0dDQXdhcmVKSVRTdHViUm91dGluZTo6R0NBd2FyZUpJVFN0dWJSb3V0
aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQorICAgIDogSklUU3R1YlJvdXRpbmUoY29kZSkKKyAgICAsIG1fbWF5QmVF
eGVjdXRpbmcoZmFsc2UpCisgICAgLCBtX2lzSmV0dGlzb25lZChmYWxzZSkKK3sKKyAgICBnbG9i
YWxEYXRhLmhlYXAubV9qaXRTdHViUm91dGluZXMuYWRkKHRoaXMpOworfQorICAgIAorR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lOjp+R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCkgeyB9CisKK3ZvaWQgR0NB
d2FyZUpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVyb1JlZkNvdW50KCkKK3sKKyAgICBBU1NFUlQo
IW1faXNKZXR0aXNvbmVkKTsKKyAgICBBU1NFUlQoIW1fcmVmQ291bnQpOworCisgICAgbV9pc0pl
dHRpc29uZWQgPSB0cnVlOworfQorCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRl
RnJvbUdDKCkKK3sKKyAgICBBU1NFUlQobV9pc0pldHRpc29uZWQpOworICAgIEFTU0VSVCghbV9y
ZWZDb3VudCk7CisgICAgQVNTRVJUKCFtX21heUJlRXhlY3V0aW5nKTsKKyAgICAKKyAgICBkZWxl
dGUgdGhpczsKK30KKwordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9i
amVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpCit7Cit9CisKK01hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0OjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9u
ZU9iamVjdCgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBKU0NlbGwqIG9iamVj
dCkKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCBnbG9iYWxEYXRhKQorICAgICwg
bV9vYmplY3QoZ2xvYmFsRGF0YSwgb3duZXIsIG9iamVjdCkKK3sKK30KKworTWFya2luZ0dDQXdh
cmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0
aW5lV2l0aE9uZU9iamVjdCgpCit7Cit9CisKK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91
dGluZVdpdGhPbmVPYmplY3Q6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9vYmplY3QpOworfQorCitQYXNz
UmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LAorICAgIGNvbnN0IEpTQ2VsbCosCisgICAgYm9vbCBtYWtlc0NhbGxzKQoreworICAgIGlmICgh
bWFrZXNDYWxscykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShj
b2RlKSk7CisKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4o
CisgICAgICAgIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgZ2xvYmFs
RGF0YSkpKTsKK30KKworUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJv
dXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAorICAgIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwKKyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgIGJvb2wg
bWFrZXNDYWxscywKKyAgICBKU0NlbGwqIG9iamVjdCkKK3sKKyAgICBpZiAoIW1ha2VzQ2FsbHMp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOworICAg
IAorICAgIHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEpJVFN0dWJSb3V0aW5lPigKKyAgICAg
ICAgYWRvcHRSZWYobmV3IE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0
KGNvZGUsIGdsb2JhbERhdGEsIG93bmVyLCBvYmplY3QpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVfaAorI2RlZmluZSBH
Q0F3YXJlSklUU3R1YlJvdXRpbmVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVy
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworLy8gVXNl
IHRoaXMgc3R1YiByb3V0aW5lIGlmIHlvdSBrbm93IHRoYXQgeW91ciBjb2RlIG1pZ2h0IGJlIG9u
IHN0YWNrIHdoZW4KKy8vIGVpdGhlciBHQyBvciBvdGhlciBraW5kcyBvZiBzdHViIGRlbGV0aW9u
IGhhcHBlbi4gQmFzaWNhbHksIGlmIHlvdXIgc3R1YgorLy8gcm91dGluZSBtYWtlcyBjYWxscyAo
ZWl0aGVyIHRvIEpTIGNvZGUgb3IgdG8gQysrIGNvZGUpIHRoZW4geW91IHNob3VsZAorLy8gYXNz
dW1lIHRoYXQgaXQncyBwb3NzaWJsZSBmb3IgdGhhdCBKUyBvciBDKysgY29kZSB0byBkbyBzb21l
dGhpbmcgdGhhdAorLy8gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gdHJ5IHRvIGRlbGV0ZSB5b3VyIHJv
dXRpbmUuIFVzaW5nIHRoaXMgcm91dGluZSB0eXBlCisvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVh
bCBkZWxldGlvbiBpcyBkZWxheWVkIHVudGlsIHRoZSBHQyBwcm92ZXMgdGhhdCB0aGUKKy8vIHJv
dXRpbmUgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIFlvdSBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzIHJv
dXRpbmUgaWYgeW91CisvLyB3YW50IHRvIG1hcmsgYWRkaXRpb25hbCBvYmplY3RzIGR1cmluZyBH
QyBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGUKKy8vIHJvdXRpbmUgaXMga25vd24gdG8gYmUgZXhl
Y3V0aW5nLCBvciBpZiB5b3Ugd2FudCB0byBmb3JjZSB0aGlzIHJvdXRpbmUgdG8KKy8vIGtlZXAg
b3RoZXIgcm91dGluZXMgYWxpdmUgKGZvciBleGFtcGxlIGR1ZSB0byB0aGUgdXNlIG9mIGEgc2xv
dy1wYXRoCisvLyBsaXN0IHdoaWNoIGRvZXMgbm90IGdldCByZWNsYWltZWQgYWxsIGF0IG9uY2Up
LgorY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIDogcHVibGljIEpJVFN0dWJSb3V0aW5lIHsK
K3B1YmxpYzoKKyAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiwgSlNHbG9iYWxEYXRhJik7CisgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJSb3V0
aW5lKCk7CisgICAgCisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQorICAgIHsKKyAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0
b3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZUZyb21HQygpOworICAgIAorcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CisgICAgCisgICAg
dmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworICAgIGJv
b2wgbV9tYXlCZUV4ZWN1dGluZzsKKyAgICBib29sIG1faXNKZXR0aXNvbmVkOworfTsKKworLy8g
VXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gbWFyayBvbmUgYWRkaXRpb25hbCBvYmplY3QgZHVyaW5n
IEdDIGlmIHlvdXIgc3R1YgorLy8gcm91dGluZSBpcyBrbm93biB0byBiZSBleGVjdXRpbmcuCitj
bGFzcyBNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCA6IHB1YmxpYyBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIE1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmLCBKU0dsb2JhbERhdGEmLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqKTsKKyAgICB2
aXJ0dWFsIH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgpOworICAg
IAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJu
YWwoU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBt
X29iamVjdDsKK307CisKKy8vIEhlbHBlciBmb3IgZWFzaWx5IGNyZWF0aW5nIGEgR0MtYXdhcmUg
SklUIHN0dWIgcm91dGluZS4gRm9yIHRoZSB2YXJhcmdzLAorLy8gcGFzcyB6ZXJvIG9yIG1vcmUg
SlNDZWxsKidzLiBUaGlzIHdpbGwgZWl0aGVyIGNyZWF0ZSBhIEpJVFN0dWJSb3V0aW5lLCBhCisv
LyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUsIG9yIGFuIE9iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmUgYXMKKy8vIGFwcHJvcHJpYXRlLiBHZW5lcmFsbHkgeW91IG9ubHkgbmVlZCB0byBw
YXNzIHBvaW50ZXJzIHRoYXQgd2lsbCBiZSB1c2VkCisvLyBhZnRlciB0aGUgZmlyc3QgY2FsbCB0
byBDKysgb3IgSlMuCisvLyAKKy8vIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJ
VFN0dWJSb3V0aW5lKAorLy8gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAor
Ly8gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorLy8gICAgY29uc3QgSlNDZWxsKiBvd25l
ciwKKy8vICAgIGJvb2wgbWFrZXNDYWxscywKKy8vICAgIC4uLik7CisvLworLy8gTm90ZSB0aGF0
IHdlIGRvbid0IGFjdHVhbGx5IHVzZSBDLXN0eWxlIHZhcmFyZ3MgYmVjYXVzZSB0aGF0IGxlYWRz
IHRvCisvLyBzdHJhbmdlIHR5cGUtcmVsYXRlZCBwcm9ibGVtcy4gRm9yIGV4YW1wbGUgaXQgd291
bGQgcHJlY2x1ZGUgdXMgZnJvbSB1c2luZworLy8gb3VyIGN1c3RvbSBvZiBwYXNzaW5nICcwJyBh
cyBOVUxMIHBvaW50ZXIuIEJlc2lkZXMsIHdoZW4gSSBkaWQgdHJ5IHRvIHdyaXRlCisvLyB0aGlz
IGZ1bmN0aW9uIHVzaW5nIHZhcmFyZ3MsIEkgZW5kZWQgdXAgd2l0aCBtb3JlIGNvZGUgdGhhbiB0
aGlzIHNpbXBsZQorLy8gd2F5LgorCitQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVK
SVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2Jh
bERhdGEmLCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29sIG1ha2VzQ2FsbHMpOworUGFzc1JlZlB0
cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9v
bCBtYWtlc0NhbGxzLAorICAgIEpTQ2VsbCopOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBHQ0F3YXJlSklUU3R1YlJvdXRpbmVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgi
CkBAIC01NTcsMTIgKzU1OCwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlv
blB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAgIH0KICAgICAK
LSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBzdHViIGZv
ciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywg
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3Jl
YXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24g
c3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0
YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICB3aWxs
TmVlZFN0b3JhZ2VSZWFsbG9jLAorICAgICAgICBuZXdTdHJ1Y3R1cmUpOwogICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2Fs
bGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRC
eUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MjQsNyArNjMwLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1
YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKKyAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwK
ICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yIENvZGVC
bG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCkBAIC02MzMsNyArNjM5LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIC8vIEZpbmFsbHkgcGF0Y2gg
dGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBp
bnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0
cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRj
aCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjk0LDE2
ICs3MDAsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAg
IH0KIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlf
aWQgcHJvdG8gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAg
ICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAg
ICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1
ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENv
ZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAgICAgCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRf
YnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24o
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7
CkBAIC03NDcsNyArNzU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZM
aXN0KAogICAgICAgICB9CiAgICAgfSAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0
aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBj
YXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocG9seW1v
cnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAg
ICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5m
by0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5jb2xkUGF0aEJlZ2luKTsKICAgICAKQEAgLTc1NiwxOCArNzY2LDIyIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAg
ICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBzZWxmIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVw
LCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFz
ZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAg
ICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAg
ICAoIkJhc2VsaW5lIGdldF9ieV9pZCBzZWxmIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCBy
ZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAg
ICAgKm1fZ2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAorICAgICAgICBuZWVkc1N0dWJMaW5rKTsKIAogICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKICAgICAKICAg
ICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRj
aC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODE4LDI1ICs4MzIsMjkg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAgICB9CiAg
ICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVs
KEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzMiwgbGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnB1dFJlc3VsdCkpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAo
IkJhc2VsaW5lIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0
dXJuIHBvaW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRT
dHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAg
RklOQUxJWkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJC
YXNlbGluZSBnZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVy
biBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAq
bV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisg
ICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1
cmUsIGlzRGlyZWN0KTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBD
b2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0
aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJl
cywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtODkyLDE4ICs5MTAsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2gg
aW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5h
bCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdp
biA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIo
cHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkp
OwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgbGFzdFByb3RvQmVn
aW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkp
OwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9p
ZCBjaGFpbiBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAg
ICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQo
Ci0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJv
dXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQg
Y2hhaW4gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJl
c3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAg
ICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1Ykxp
bmspOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0
IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVj
dCk7CkBAIC05MTEsNyArOTMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENo
YWluTGlzdAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1
YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0
IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTk2OSwxNyArOTkxLDIxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQucHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVh
dGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVy
LAotICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQ
dHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisg
ICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
ICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0
dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAg
ICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwK
KyAgICAgICAgbmVlZHNTdHViTGluayk7CiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1
YlJvdXRpbmU7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5j
b2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlf
b3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1
bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
bGlzdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKQEAgLTU5
NSwxMiArNTk2LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8K
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0
aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVy
LAotICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciBDb2RlQmxvY2sg
JXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJv
dXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9yIENvZGVCbG9j
ayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxv
YywKKyAgICAgICAgbmV3U3RydWN0dXJlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9s
aW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGlu
ZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShy
ZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQpAQCAtNjU3LDcgKzY2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBh
dGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28g
dGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERSgKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJCYXNsaW5lIEpJ
VCBnZXRfYnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBv
aW50ICVwIiwKICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxh
YmVsQXRPZmZzZXQoCkBAIC02NjYsNyArNjcyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UGF0Y2hHZXRBcnJheUxlbgogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0
dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4g
ZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVy
LnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC03MjQsMTYgKzczMCwyMCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgICAgIH0KICAgICB9CiAgICAgLy8g
VHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVk
IGxhdGVyLgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAg
ICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgcHJvdG8g
c3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2Rl
QmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRp
bmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAg
ICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBzdHViIGZvciBDb2RlQmxv
Y2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
LAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgLy8gRmluYWxseSBwYXRj
aCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJl
IGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
c3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
LgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKQEAgLTc3Niw3ICs3
ODYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgfQog
CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNh
c2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChK
SVRTdHViUm91dGluZTo6YXNDb2RlUHRyKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAg
ICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7
CiAKQEAgLTc4NSwxOCArNzk1LDIyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2gg
Y29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVz
LgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsK
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IEZJTkFMSVpFX0NPREUoCi0g
ICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlz
dCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2Nv
ZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJDb2RlID0gY3JlYXRl
SklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBsaXN0IHN0dWIg
Zm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVC
bG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxl
QWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBpc0Rp
cmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNr
IGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25K
dW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNvZGUoKSkpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YkNvZGUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRl
eCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0
eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODQ4LDI0ICs4
NjIsMjggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIH0K
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJ
VFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzMSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Vz
MiwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQu
cHV0UmVzdWx0KSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBGSU5B
TElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBKSVQg
Z2V0X2J5X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQg
JXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViQ29kZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RF
KAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBn
ZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAl
cCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUu
Z2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxE
YXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5l
ZWRzU3R1YkxpbmspOwogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Q29kZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJh
c2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS0+Y29kZSgp
LmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNh
Y2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MjEsMTggKzkzOSwyMiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgfQogCiAgICAgLy8g
VXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRp
bmU6OmFzQ29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lKSk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxh
c3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJl
c3VsdCkpOwogCi0gICAgQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAg
ICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4g
bGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBt
X2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0g
Y3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAg
ICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBjaGFp
biBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAg
ICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAor
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAg
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7
CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxs
IGJlIGRlbGV0ZWQgbGF0ZXIuCiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwpAQCAt
OTQwLDcgKzk2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QK
ICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBo
b3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5w
YXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRP
ZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCkBAIC05OTksMTcgKzEwMjEsMjEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRS
ZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0
IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklU
IGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIs
Ci0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1
bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0
dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUo
CisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdl
dF9ieV9pZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisg
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1
YkxpbmspOwogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogCiAgICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2gu
YmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUg
dGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAg
ICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgor
CisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Nv
cGVDaGFpbi5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitKSVRTdHViUm91dGluZTo6fkpJVFN0dWJSb3V0aW5lKCkgeyB9CisKK3ZvaWQgSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQoKQoreworICAgIEFTU0VSVCghbV9yZWZDb3VudCk7
CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91
dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJv
dXRpbmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRTdHViUm91dGluZV9o
CisjZGVmaW5lIEpJVFN0dWJSb3V0aW5lX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEpJVFN0dWJSb3V0aW5lU2V0OworCisvLyBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgSklUIHN0
dWIgcm91dGluZXMsIGFuZCBhbHNvIHRoZSBjbGFzcyB5b3Ugd2FudAorLy8gdG8gaW5zdGFudGlh
dGUgZGlyZWN0bHkgaWYgeW91IGhhdmUgYSByb3V0aW5lIHRoYXQgZG9lcyBub3QgbmVlZCBhbnkK
Ky8vIGhlbHAgZnJvbSB0aGUgR0MuIElmIGluIGRvdWJ0LCB1c2Ugb25lIG9mIHRoZSBvdGhlciBz
dHViIHJvdXRpbmVzLiBCdXQKKy8vIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIHN0dWIg
cm91dGluZSBjYW5ub3QgYmUgb24gdGhlIHN0YWNrIHdoaWxlCisvLyBzb21lb25lIHRyaWdnZXJz
IGEgc3R1YiByb3V0aW5lIHJlc2V0LCB0aGVuIHVzaW5nIHRoaXMgd2lsbCBzcGVlZCB1cAorLy8g
bWVtb3J5IHJlY2xhbWF0aW9uLiBPbmUgY2FzZSB3aGVyZSBhIHN0dWIgcm91dGluZSBzYXRpc2Zp
ZXMgdGhpcworLy8gY29uZGl0aW9uIGlzIGlmIGl0IGRvZXNuJ3QgbWFrZSBhbnkgY2FsbHMsIHRv
IGVpdGhlciBDKysgb3IgSlMgY29kZS4gSW4KKy8vIHN1Y2ggYSByb3V0aW5lIHlvdSBrbm93IHRo
YXQgaXQgY2Fubm90IGJlIG9uIHRoZSBzdGFjayB3aGVuIGFueXRoaW5nCisvLyBpbnRlcmVzdGlu
ZyBoYXBwZW5zLgorLy8gU2VlIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGZvciB0aGUgb3RoZXIg
c3R1YiByb3V0aW5lcy4KK2NsYXNzIEpJVFN0dWJSb3V0aW5lIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShKSVRTdHViUm91dGluZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBj
b2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBD
b2RlUHRyIHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCisgICAgLy8gYSBSZWZQdHI8
SklUU3R1YlJvdXRpbmU+LgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBj
cmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBy
YXdDb2RlUG9pbnRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1
YlJvdXRpbmUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
cmF3Q29kZVBvaW50ZXIpKSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkpJVFN0dWJSb3V0
aW5lKCk7CisgICAgCisgICAgLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGlzIGNvcHlhYmxlLCBi
dXQgYXQgdGhlIGNvc3Qgb2YgcmVmZXJlbmNlCisgICAgLy8gY291bnRpbmcgY2h1cm4uIFJldHVy
bmluZyBhIHJlZmVyZW5jZSBpcyBhIGdvb2Qgd2F5IG9mIHJlZHVjaW5nCisgICAgLy8gdGhlIGNo
dXJuLgorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZTsgfQorICAgIAorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYXND
b2RlUHRyKFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQorICAgIHsKKyAg
ICAgICAgaWYgKCFzdHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1
bHQgPSBzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgQVNTRVJUKCEhcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCByZWYoKQor
ICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCsrOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlcmVm
KCkKKyAgICB7CisgICAgICAgIGlmICgtLW1fcmVmQ291bnQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG9ic2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICB9CisgICAgCisgICAgLy8gSGVs
cGVycyBmb3IgdGhlIEdDIHRvIGRldGVybWluZSBob3cgdG8gZGVhbCB3aXRoIG1hcmtpbmcgSklU
IHN0dWIKKyAgICAvLyByb3V0aW5lcy4KKyAgICB1aW50cHRyX3Qgc3RhcnRBZGRyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnRBc0ludGVnZXIoKTsg
fQorICAgIHVpbnRwdHJfdCBlbmRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLmV4ZWN1
dGFibGVNZW1vcnkoKS0+ZW5kQXNJbnRlZ2VyKCk7IH0KKyAgICBzdGF0aWMgdWludHB0cl90IGFk
ZHJlc3NTdGVwKCkgeyByZXR1cm4gaml0QWxsb2NhdGlvbkdyYW51bGU7IH0KKyAgICAKKyAgICBz
dGF0aWMgYm9vbCBjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIoKQorICAgIHsKKyNpZiBFTkFCTEUoRVhF
Q1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIHN0YXRpYyB1aW50cHRyX3Qg
ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKCkKKyAgICB7CisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0ZJWEVEKQorICAgICAgICByZXR1cm4gc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2w7CisjZWxzZQorICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICB9CisgICAgc3RhdGljIHNpemVfdCBmaWx0ZXJpbmdF
eHRlbnRTaXplKCkKKyAgICB7CisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVE
KQorICAgICAgICByZXR1cm4gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjZWxzZQor
ICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICAgICAgcmV0dXJuIDA7Cisj
ZW5kaWYKKyAgICB9CisgICAgc3RhdGljIGJvb2wgcGFzc2VzRmlsdGVyKHVpbnRwdHJfdCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgaWYgKCFjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGFkZHJlc3MgLSBmaWx0
ZXJpbmdTdGFydEFkZHJlc3MoKSA+PSBmaWx0ZXJpbmdFeHRlbnRTaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpOworCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50
OworfTsKKworLy8gSGVscGVyIGZvciB0aGUgY3JlYXRpb24gb2Ygc2ltcGxlIHN0dWIgcm91dGlu
ZXMgdGhhdCBuZWVkIG5vIGhlbHAgZnJvbSB0aGUgR0MuCisjZGVmaW5lIEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIocGF0Y2hCdWZmZXIsIGRhdGFMb2dBcmd1bWVudHMpIFwKKyAgICAoYWRvcHRSZWYo
bmV3IEpJVFN0dWJSb3V0aW5lKEZJTkFMSVpFX0NPREUoKHBhdGNoQnVmZmVyKSwgZGF0YUxvZ0Fy
Z3VtZW50cykpKSkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklU
KQorCisjZW5kaWYgLy8gSklUU3R1YlJvdXRpbmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjIsNyArMTcyMiw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBp
ZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAwLCBzdHViSW5mby0+dS5n
ZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgICAg
IHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTE3NDgs
MTIgKzE3NDgsMTIgQEAgc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZwog
ICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfcHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1
YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpLCB0
cnVlKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBz
dHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICAg
ICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8t
PnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51Lmdl
dEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLT5zdHViUm91
dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUuY2xlYXIoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHBy
b3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vz
c19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFu
ZGxlLmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JI
YW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTcgKzQ1LDI3IEBAIHByaXZhdGU6CiBwdWJs
aWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CiAgICAg
Ci0gICAgdm9pZCogc3RhcnQoKQorICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX3N0YXJ0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBlbmQoKQorICAgIHZv
aWQqIGVuZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9zaXplSW5CeXRl
cyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRBc0ludGVnZXIo
KSk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBzdGFydEFzSW50ZWdlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQp
OworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgZW5kQXNJbnRlZ2VyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGFydEFzSW50ZWdlcigpICsgbV9zaXplSW5CeXRlczsKICAgICB9
CiAgICAgICAgIAotICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgc2l6ZV90IHNpemVJbkJ5
dGVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151185</attachid>
            <date>2012-07-08 22:16:57 -0700</date>
            <delta_ts>2012-07-09 13:20:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>jettisonstubs_patch_9.diff</filename>
            <type>text/plain</type>
            <size>103392</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MiBA
QAorMjAxMi0wNy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqZXR0aXNvbiBKSVQgc3R1YiByb3V0aW5lcyBldmVu
IGlmIHRoZXkgYXJlIGN1cnJlbnRseSBydW5uaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnaXZlcyB0aGUgR0MgYXdhcmVuZXNz
IG9mIGFsbCBKSVQtZ2VuZXJhdGVkIHN0dWJzIGZvciBpbmxpbmUgY2FjaGVzLiBUaGF0CisgICAg
ICAgIG1lYW5zIHRoYXQgaWYgeW91IHdhbnQgdG8gZGVsZXRlIGEgSklULWdlbmVyYXRlZCBzdHVi
LCB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorICAgICAgICBhYm91dCB3aGV0aGVyIG9yIG5vdCBp
dCBpcyBjdXJyZW50bHkgcnVubmluZzogaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBtaWdo
dAorICAgICAgICBiZSwgdGhlIEdDIHdpbGwga2luZGx5IGRlZmVyIGRlbGV0aW9uIHVudGlsIG5v
bi1ydW5uaW5nLW5lc3MgaXMgcHJvdmVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKFBvbHltb3JwaGljU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBvbHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmg6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRBY2Nlc3M6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpQdXRCeUlk
QWNjZXNzOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZEFjY2Vzczo6c3R1YlJvdXRp
bmUpOgorICAgICAgICAoUHV0QnlJZEFjY2Vzcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
UHV0QnlJZExpc3Q6OmN1cnJlbnRTbG93UGF0aFRhcmdldCk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnJl
c2V0KToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2Fj
aGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURMaXN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QpOgorICAgICAgICAoSlND
OjpERkc6OmVtaXRQdXRSZXBsYWNlU3R1Yik6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRy
YW5zaXRpb25TdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKER1bW15TWFya0hv
b2spOgorICAgICAgICAoSlNDOjpEdW1teU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKEpTQzo6
Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgIChDb21wb3NpdGVNYXJrSG9vayk6Cisg
ICAgICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjpDb21wb3NpdGVNYXJrSG9vayk6CisgICAg
ICAgIChKU0M6OkNvbXBvc2l0ZU1hcmtIb29rOjptYXJrKToKKyAgICAgICAgKiBoZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoQ29uc2VydmF0aXZlUm9v
dHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SGVhcCk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6OkpJVFN0dWJSb3V0
aW5lU2V0KToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6On5KSVRTdHViUm91dGlu
ZVNldCk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpKSVRTdHViUm91dGluZVNldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lU2V0OjptYXJrU2xvdyk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lU2V0
OjpkZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMpOgorICAgICAgICAoSlNDOjpK
SVRTdHViUm91dGluZVNldDo6dHJhY2VNYXJrZWRTdHViUm91dGluZXMpOgorICAgICAgICAqIGhl
YXAvSklUU3R1YlJvdXRpbmVTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SklUU3R1YlJvdXRpbmVTZXQpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFy
ayk6CisgICAgICAgICogaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgICogaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcik6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6
On5HQ0F3YXJlSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJv
dXRpbmU6Om9ic2VydmVaZXJvUmVmQ291bnQpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1
YlJvdXRpbmU6OmRlbGV0ZUZyb21HQyk6CisgICAgICAgIChKU0M6OkdDQXdhcmVKSVRTdHViUm91
dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKEpTQzo6TWFya2lu
Z0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVPYmplY3Q6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoT25lT2JqZWN0KToKKyAgICAgICAgKEpTQzo6TWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVX
aXRoT25lT2JqZWN0OjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpjcmVhdGVKSVRTdHViUm91dGluZSk6CisgICAgICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91
dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChHQ0F3YXJlSklUU3R1YlJv
dXRpbmUpOgorICAgICAgICAoSlNDOjpHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJl
ZE9iamVjdHMpOgorICAgICAgICAoTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdpdGhPbmVP
YmplY3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW4pOgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6On5K
SVRTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KToKKyAgICAgICAgKiBqaXQvSklUU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRT
dHViUm91dGluZTo6SklUU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6Y3JlYXRlU2VsZk1hbmFnZWRSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRp
bmU6OmNvZGUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6YXNDb2RlUHRyKToKKyAg
ICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OnJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJS
b3V0aW5lOjpkZXJlZik6CisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpzdGFydEFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6ZW5kQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCk6CisgICAgICAgIChKU0M6OkpJVFN0
dWJSb3V0aW5lOjpjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIpOgorICAgICAgICAoSlNDOjpKSVRTdHVi
Um91dGluZTo6ZmlsdGVyaW5nU3RhcnRBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6SklUU3R1YlJv
dXRpbmU6OmZpbHRlcmluZ0V4dGVudFNpemUpOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGlu
ZTo6cGFzc2VzRmlsdGVyKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAo
SlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorCiAyMDEyLTA3LTA4ICBab2x0YW4gSGVyY3plZyAg
PHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtBUk1dIEltcGxlbWVudGluZyBt
aXNzaW5nIG1hY3JvIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMgYWZ0ZXIgcjEyMTkyNQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
NiArMTA5LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hlYXAuY3Bw
CiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
CisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKICAgICBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKICAgICBoZWFwL01hcmtlZEJs
b2NrLmNwcApAQCAtMTI5LDYgKzEzMCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAK
ICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAKKyAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCiAgICAgaml0L0pJVEFyaXRobWV0aWMuY3BwCiAgICAgaml0L0pJ
VENhbGwzMl82NC5jcHAKQEAgLTEzOSw2ICsxNDEsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGppdC9KSVRPcGNvZGVzLmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKyAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0
dWJSb3V0aW5lU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJv
dXRpbmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVy
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsU2NvcGUuaCBcCkBAIC0zNTQsNiArMzU2LDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0
SklUQ29kZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hvc3RDYWxsUmV0dXJuVmFsdWUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIFwKQEAgLTM3Myw2
ICszNzcsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHViQ2FsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJS
b3V0aW5lLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZp
c2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoZWFwL0hlYXAuY3Bw
IFwKICAgICBoZWFwL0hlYXBUaW1lci5jcHAgXAogICAgIGhlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcCBcCisgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAgXAogICAgIGhlYXAvTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBcCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwIFwKICAgICBoZWFwL01h
cmtlZEFsbG9jYXRvci5jcHAgXApAQCAtMTM3LDYgKzEzOCw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIFwKICAgICBqaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAgXAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcCBcCisg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgXAogICAgIGppdC9KSVRBcml0aG1ldGlj
LmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgXAogICAgIGppdC9KSVRDYWxs
LmNwcCBcCkBAIC0xNDcsNiArMTQ5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAgXAogICAgIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgXAogICAgIGppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBcCisgICAgaml0L0pJVFN0dWJSb3V0aW5lLmNwcCBc
CiAgICAgaml0L0pJVFN0dWJzLmNwcCBcCiAgICAgaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgXAog
ICAgIHBhcnNlci9MZXhlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyMjA1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODU4LDYgKzE4NTgs
MTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUu
aCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aml0XEpJVC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTkxOCw2ICsxOTI2LDE0IEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxK
SVRTdHViUm91dGluZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRTdHViUm91dGluZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxqaXRcSklUU3R1YnMuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTIyMTQsNiArMjIzMCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0
LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5caGVhcFxKSVRTdHViUm91dGluZVNldC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMiBAQAog
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0Iy
RTQgLyogREZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNzY2RDI4MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQyQjE1
QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLzsgfTsKKwkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc2NkQyQTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
Rjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJEMTVBOERD
REQwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OworCQkwRjc2NkQz
MDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjND
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZHQ0Nh
bGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEIxNEMzQ0Qy
RjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFi
aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NzUsNiArODgxLDEyIEBACiAJCTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRm
Zy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNzY2RDFDMTVBNTAy
OEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUU3R1
YlJvdXRpbmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyQTE1
QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3NjZEMkQxNUE4RENERDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0F3YXJlSklUU3R1
YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjc2NkQyRTE1QThE
Q0REMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdDQXdhcmVKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Iy
OTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxI
ZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkyLDYgKzE3MDQsOCBA
QAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRv
ci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwICovLAorCQkJCTBGNzY2RDJEMTVBOERDREQwMDhGMzYzRSAvKiBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGNzY2RDJFMTVBOERDREQwMDhGMzYz
RSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjQ2ODBEMDE0QkJDNUY4MDBC
RkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NjgwRDExNEJCQzVG
ODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCAqLywKIAkJCQkxNDI5RDkyRDBFRDIy
RDcwMDBCODk2MTkgLyogSklULmNwcCAqLywKQEAgLTE3MTEsNiArMTcyNSw4IEBACiAJCQkJODZD
Qzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLywKIAkJCQlB
N0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8s
CiAJCQkJOTYwNjI2OTUwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmggKi8sCisJCQkJ
MEY3NjZEMjYxNUE4Q0MxQjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmNwcCAqLywKKwkJCQkw
Rjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkxNEEy
M0Q2QzBGNEUxOUNFMDAyM0NEQUQgLyogSklUU3R1YnMuY3BwICovLAogCQkJCTE0QTY1ODFBMEY0
RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVicy5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKQEAgLTE3NTIsNiArMTc2OCw4IEBACiAJCQkJ
MTRCQTdBOTYxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCAqLywKIAkJCQlDMkM4RDAyRjE0QTND
RUZDMDA1NzhFNjUgLyogSGVhcEJsb2NrLmggKi8sCiAJCQkJMTRGOTc0NDYxMzhDODUzRTAwREEx
QzY3IC8qIEhlYXBSb290VmlzaXRvci5oICovLAorCQkJCTBGNzY2RDI5MTVBOENDMzQwMDhGMzYz
RSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8sCisJCQkJMEY3NjZEMkExNUE4Q0MzNDAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggKi8sCiAJCQkJMEY0MzE3MzYxNDZCQUM2NTAwN0Uz
ODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovLAogCQkJCTE0MkUzMTMwMTM0RkYwQTYwMEFGQURC
NSAvKiBMb2NhbC5oICovLAogCQkJCTE0MkUzMTMxMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNj
b3BlLmggKi8sCkBAIC0yODE1LDYgKzI4MzMsOSBAQAogCQkJCTBGRjQyNzY1MTU5MUExQ0UwMDRD
QjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzcyMTU5
Mjc1RDgwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMzAxNUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVK
SVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3NjZEMzExNUFBODExMjAwOEYz
NjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM0MDcsNiArMzQyOCw5
IEBACiAJCQkJQzJENThDMzQxNTkxMkZFRTAwMjFBODQ0IC8qIEdDQWN0aXZpdHlDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzcxMTU5Mjc1RDUwMDRDQjlG
RiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNzY2RDI4
MTVBOENDMUUwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjc2NkQyQjE1QThDQzM4MDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2lmbmRlZiBJbnN0cnVjdGlvbl9oCiAjZGVmaW5lIEluc3RydWN0aW9uX2gK
IAorI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKQEAgLTUy
LDggKzUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IFZhbHVlUHJvZmlsZTsKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlOwotCiAgICAgLy8gU3RydWN0
dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFt
LgogICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTYxLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0cnVjdCBQb2x5bW9ycGhpY1N0dWJJbmZvIHsKICAgICAgICAgICAgIGJvb2wg
aXNDaGFpbjsKICAgICAgICAgICAgIGJvb2wgaXNEaXJlY3Q7Ci0gICAgICAgICAgICBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGUgc3R1YlJvdXRpbmU7CisgICAg
ICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwogICAgICAgICAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gYmFzZTsKICAgICAgICAgICAgIHVuaW9uIHsKICAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gcHJvdG87CkBAIC03Myw3ICs3
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHUucHJvdG8uY2xlYXIoKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBib29sIGlzRGlyZWN0
KQorICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwq
IG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBfc3R1YlJvdXRpbmUsIFN0cnVjdHVy
ZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
c3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICAgICAgYmFzZS5zZXQoZ2xv
YmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKQEAgLTgyLDcgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICAgICAgdGhpcy0+aXNEaXJlY3QgPSBpc0RpcmVjdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCBzZXQoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGUgX3N0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9w
cm90bywgYm9vbCBpc0RpcmVjdCkKKyAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gX3N0
dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIF9iYXNlLCBTdHJ1Y3R1cmUqIF9wcm90bywgYm9vbCBpc0Rp
cmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHVi
Um91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jh
c2UpOwpAQCAtOTEsNyArOTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB0
aGlzLT5pc0RpcmVjdCA9IGlzRGlyZWN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3du
ZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJv
dXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZUNoYWluKiBfY2hhaW4sIGJvb2wgaXNE
aXJlY3QpCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IF9zdHViUm91dGluZSwgU3Ry
dWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsK
ICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwpAQCAt
MTA1LDE3ICsxMDQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwg
Ym9vbCBpc0RpcmVjdCkKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUGFzc1JlZlB0cjxKSVRTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogZmlyc3RCYXNlLCBib29sIGlzRGlyZWN0
KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwg
c3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVU
eXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFBy
b3RvLCBib29sIGlzRGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJ
VFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZSogZmlyc3RQcm90bywgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewogICAgICAgICAgICAgbGlz
dFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGZpcnN0
UHJvdG8sIGlzRGlyZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlz
RGlyZWN0KQorICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJz
dENoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBsaXN0WzBdLnNl
dChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwg
aXNEaXJlY3QpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAx
MjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRC
eUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUHV0QnlJZEFjY2Vz
cyBQdXRCeUlkQWNjZXNzOjpmcm9tU3RydWN0dQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9y
ZXBsYWNlOgogICAgICAgICByZXN1bHQubV90eXBlID0gUmVwbGFjZTsKICAgICAgICAgcmVzdWx0
Lm1fb2xkU3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9i
amVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHJlc3VsdC5tX3N0dWJSb3V0aW5lID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoaW5pdGlhbFNsb3dQYXRoKTsK
KyAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBKSVRTdHViUm91dGluZTo6Y3JlYXRlU2Vs
Zk1hbmFnZWRSb3V0aW5lKGluaXRpYWxTbG93UGF0aCk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY1B1
dEJ5SWRMaXN0LmgJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgcHVibGljOgogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKICAgICAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lKQorICAgICAgICBQ
YXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSkKICAgICB7CiAgICAgICAgIFB1
dEJ5SWRBY2Nlc3MgcmVzdWx0OwogICAgICAgICByZXN1bHQubV90eXBlID0gVHJhbnNpdGlvbjsK
QEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsCiAgICAgICAgIEpTQ2VsbCogb3duZXIsCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
LAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUpCisgICAgICAgIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQogICAgIHsKICAgICAgICAgUHV0
QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBSZXBsYWNlOwpAQCAt
MTIzLDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY2hhaW4uZ2V0KCk7CiAg
ICAgfQogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSgpIGNvbnN0
CisgICAgUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzVHJhbnNpdGlvbigpIHx8IGlzUmVwbGFjZSgpKTsKICAgICAg
ICAgcmV0dXJuIG1fc3R1YlJvdXRpbmU7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX29sZFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX25ld1N0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fY2hhaW47Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YlJvdXRpbmU7
CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3N0dWJSb3V0aW5lOwogfTsKIAogY2xhc3Mg
UG9seW1vcnBoaWNQdXRCeUlkTGlzdCB7CkBAIC0xNjEsNyArMTYxLDcgQEAgcHVibGljOgogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdXJyZW50U2xvd1BhdGhUYXJnZXQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuc3R1YlJvdXRpbmUoKS5jb2Rl
KCk7CisgICAgICAgIHJldHVybiBtX2xpc3QubGFzdCgpLnN0dWJSb3V0aW5lKCktPmNvZGUoKS5j
b2RlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWRkQWNjZXNzKGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9u
LmgiCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTY4
LDcgKzE2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBkZXJl
ZigpOwogICAgICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc191bnNldDsKLSAgICAgICAgICAg
IHN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgICAgICBzdHVi
Um91dGluZS5jbGVhcigpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBkZXJlZigpOwpAQCAt
Mjg2LDcgKzI4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfSBwdXRCeUlkTGlz
dDsKICAgICAgICAgfSB1OwogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91
dGluZTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAg
ICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CiAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxh
dGl2ZUpJVC5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIgpAQCAtMTA2LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIGxpbmtS
ZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxv
Y2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVs
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJh
dGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1
Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIApAQCAtMTY2LDcgKzE2Nyw3IEBAIHN0YXRpYyB2b2lk
IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWls
dXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CiAgICAgCi0gICAgc3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFKAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIHByb3RvdHlwZSBj
aGFpbiBhY2Nlc3Mgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAogICAg
ICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CkBAIC0yMjAsMTQgKzIyMSwxNCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZm
ZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERSgKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICAgICAoIkRGRyBHZXRC
eUlkIGFycmF5IGxlbmd0aCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIs
CiAgICAgICAgICAgICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIAogICAgICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc2LDcgKzI3Nyw3IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hh
aW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNl
dCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5l
LmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5m
by5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CkBAIC0zMjMsNyAr
MzI0LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAg
ICBsaXN0SW5kZXggPSAwOwogICAgIH0gZWxzZSBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91
dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdl
ZFJvdXRpbmUoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2Vs
Zi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICBs
aXN0SW5kZXggPSAxOwogICAgIH0gZWxzZSB7CkBAIC00MzMsNyArNDM0LDcgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW47CiAgICAgICAgIGlmIChsaXN0SW5kZXgpCi0gICAg
ICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAg
ICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb1Nsb3dDYXNlKTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwpAQCAt
NDQ1LDE3ICs0NDYsMjMgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVyQ2FsbCwgbG9va3VwRXhjZXB0
aW9uSGFuZGxlckluU3R1Yik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgICAgICBw
YXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIEdldEJ5SWQgcG9seW1vcnBoaWMgbGlzdCBh
Y2Nlc3MgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAgICAgICBl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoCi0gICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZSA9CisgICAgICAgICAgICBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAg
ICAgICAgICBGSU5BTElaRV9DT0RFKAorICAgICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgKCJERkcgR2V0QnlJZCBwb2x5bW9ycGhpYyBsaXN0IGFjY2Vz
cyBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgICAgICAg
ICAgZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgICAgICAgICAqZ2xv
YmFsRGF0YSwKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAor
ICAgICAgICAgICAgICAgIHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90
OjpHZXR0ZXIKKyAgICAgICAgICAgICAgICB8fCBzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09
IFByb3BlcnR5U2xvdDo6Q3VzdG9tKTsKICAgICAgICAgCiAgICAgICAgIHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAg
ICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQ5OSw3ICs1MDYsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhl
CiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikg
ewogICAgICAgICBBU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJS
b3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
LCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lLmNsZWFyKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlk
UHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9wcm90
b19saXN0KTsKQEAgLTUxMCwxMCArNTE3LDEwIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJ
RFByb3RvTGlzdChFeGUKICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNI
RV9TSVpFKSB7CiAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsr
OwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBD
b2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwogICAgICAg
ICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWJSb3V0aW5lOworICAgICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lOwogICAgICAgICAKICAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVj
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZn
LmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAg
IApAQCAtNTIxLDcgKzUyOCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlz
dChFeGUKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4
IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC01ODEsNyArNTg4LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHVi
KAogICAgIFB1dEtpbmQsCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZmFpbHVyZUxhYmVsLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJv
dXRpbmUpCisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJvdXRpbmUpCiB7CiAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBHUFJS
ZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VH
UFIpOwpAQCAtNjU1LDcgKzY2Miw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAK
LSAgICBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCisgICAgc3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJERkcg
UHV0QnlJZCByZXBsYWNlIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwK
ICAgICAgICAgIGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgKQEAgLTY3Myw3ICs2ODAsNyBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCiAgICAgU3RydWN0dXJl
Q2hhaW4qIHByb3RvdHlwZUNoYWluLAogICAgIENvZGVMb2NhdGlvbkxhYmVsIGZhaWx1cmVMYWJl
bCwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQorICAgIFJlZlB0cjxK
SVRTdHViUm91dGluZT4mIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTc1NCw4ICs3NjEsOCBAQCBzdGF0aWMg
dm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFp
bHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzLCBmYWlsdXJlTGFiZWwpOwotICAgICAgICAgICAgCi0gICAgc3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFKAorICAgIAorICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09E
RV9GT1JfU1RVQigKICAgICAgICAgcGF0Y2hCdWZmZXIsCiAgICAgICAgICgiREZHIFB1dEJ5SWQg
dHJhbnNpdGlvbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCiAgICAg
ICAgICBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoCkBAIC03OTksNyArODA2LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgp
KSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xv
dCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0
QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2luZCA9PSBEaXJl
Y3QpOwpAQCAtODQxLDcgKzg0OCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3Qo
RXhlY1N0YXQKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICBpZiAoc2xvdC5iYXNl
KCkgPT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKKyAgICAgICAgUmVm
UHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
bG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKQEAgLTg4OCw3ICs4OTUsNyBAQCBzdGF0
aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3QtPmlz
RnVsbCgpKQogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0
S2luZCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIs
NiBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkKICAgICBtX3Jvb3RzID0gbmV3Um9v
dHM7CiB9CiAKLWNsYXNzIER1bW15TWFya0hvb2sgewotcHVibGljOgotICAgIHZvaWQgbWFyayh2
b2lkKikgeyB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KIGlubGluZSB2b2lk
IENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcih2b2lkKiBwLCBUaW55Qmxvb21G
aWx0ZXIgZmlsdGVyLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CkBAIC0xMTAsMTUgKzEwNSw0OCBA
QCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2CiAgICAgICAgIGdlbmVy
aWNBZGRQb2ludGVyKCppdCwgZmlsdGVyLCBtYXJrSG9vayk7CiB9CiAKK2NsYXNzIER1bW15TWFy
a0hvb2sgeworcHVibGljOgorICAgIHZvaWQgbWFyayh2b2lkKikgeyB9Cit9OworCiB2b2lkIENv
bnNlcnZhdGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCkKIHsKLSAgICBEdW1t
eU1hcmtIb29rIGhvb2s7Ci0gICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaG9vayk7Cisg
ICAgRHVtbXlNYXJrSG9vayBkdW1teTsKKyAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBk
dW1teSk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9pZCBDb25zZXJ2YXRpdmVS
b290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMpCit7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgaml0U3R1YlJv
dXRpbmVzKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIENv
bXBvc2l0ZU1hcmtIb29rIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVNYXJrSG9vayhUJiBmaXJz
dCwgVSYgc2Vjb25kKQorICAgICAgICA6IG1fZmlyc3QoZmlyc3QpCisgICAgICAgICwgbV9zZWNv
bmQoc2Vjb25kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2ZpcnN0Lm1hcmsoYWRkcmVzcyk7CisgICAgICAgIG1fc2Vj
b25kLm1hcmsoYWRkcmVzcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFQmIG1fZmlyc3Q7Cisg
ICAgVSYgbV9zZWNvbmQ7Cit9OworCit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCisgICAg
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5l
cywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKIHsKLSAgICBnZW5lcmljQWRkU3Bhbihi
ZWdpbiwgZW5kLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBDb21wb3NpdGVNYXJrSG9vazxKSVRTdHVi
Um91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hvb2soCisgICAgICAgIGppdFN0dWJSb3V0
aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFy
a0hvb2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTIyMDUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOSArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTQ2Vs
bDsKIGNsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBIZWFwOworY2xhc3MgSklUU3R1YlJvdXRp
bmVTZXQ7CitjbGFzcyBKU0NlbGw7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1Ymxp
YzoKQEAgLTQyLDcgKzQzLDggQEAgcHVibGljOgogICAgIH5Db25zZXJ2YXRpdmVSb290cygpOwog
CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7Ci0gICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgREZHQ29kZUJsb2NrcyYpOworICAgIHZvaWQgYWRkKHZvaWQq
IGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0Jik7CisgICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7
CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNiAr
NDIwLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgLy8gV2UgZ2F0
aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2Ug
Y29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRl
cm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290
cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0b3JhZ2VT
cGFjZSk7CisgICAgbV9qaXRTdHViUm91dGluZXMuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAg
ICAgR0NQSEFTRShHYXRoZXJDb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgIG1fbWFjaGluZVRo
cmVhZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkp
OwpAQCAtNDI5LDcgKzQzMCw4IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQog
ICAgIG1fZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNF
KEdhdGhlclJlZ2lzdGVyRmlsZVJvb3RzKTsKLSAgICAgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMsIG1fZGZnQ29kZUJsb2Nrcyk7Cisg
ICAgICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAorICAgICAgICAg
ICAgcmVnaXN0ZXJGaWxlUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2RmZ0NvZGVCbG9ja3Mp
OwogICAgIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNTQwLDkgKzU0MiwxMCBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICAgICAgfQogICAgIAogICAgICAgICB7
Ci0gICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrcyk7Ci0gICAgICAgICAgICBNQVJL
X0xPR19ST09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyIpOworICAgICAgICAgICAgR0NQ
SEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOworICAgICAgICAgICAgTUFS
S19MT0dfUk9PVCh2aXNpdG9yLCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRp
bmVzIik7CiAgICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tz
KHZpc2l0b3IpOworICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMudHJhY2VNYXJrZWRTdHVi
Um91dGluZXModmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
CiAgICAgICAgIH0KICAgICAKQEAgLTY2NSw2ICs2NjgsNyBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICB9CiAKICAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1faml0U3R1YlJvdXRpbmVzLmRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCiB2b2lkIEhlYXA6OmNv
bGxlY3RBbGxHYXJiYWdlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNp
bmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgorI2luY2x1ZGUg
IkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgpAQCAtNDQs
MTAgKzQ1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVCbG9jazsKICAgICBj
bGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CisgICAg
Y2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jazsK
ICAgICBjbGFzcyBIZWFwOwogICAgIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKICAgICBjbGFzcyBJ
bmNyZW1lbnRhbFN3ZWVwZXI7CisgICAgY2xhc3MgSklUU3R1YlJvdXRpbmU7CiAgICAgY2xhc3Mg
SlNDZWxsOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU1ZhbHVlOwpAQCAt
MTY4LDYgKzE3MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRT
dHViUm91dGluZTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5lOwogICAgICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICBmcmllbmQgY2xh
c3MgTWFya2VkU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRBbGxvY2F0b3I7CkBA
IC0yMjksNiArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhbmRsZVNldCBtX2hh
bmRsZVNldDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKICAgICAgICAgREZH
Q29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CisgICAgICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1f
aml0U3R1YlJvdXRpbmVzOwogICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVy
OwogICAgICAgICAKICAgICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
SVRTdHViUm91dGluZVNldC5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkdDQXdh
cmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIlNjb3BlQ2hhaW4uaCIKKyNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSklUU3R1YlJvdXRpbmVTZXQ6OkpJ
VFN0dWJSb3V0aW5lU2V0KCkgeyB9CitKSVRTdHViUm91dGluZVNldDo6fkpJVFN0dWJSb3V0aW5l
U2V0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0gbV9saXN0T2ZS
b3V0aW5lc1tpXTsKKyAgICAgICAgCisgICAgICAgIHJvdXRpbmUtPm1fbWF5QmVFeGVjdXRpbmcg
PSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghcm91dGluZS0+bV9pc0pldHRpc29uZWQp
IHsKKyAgICAgICAgICAgIC8vIEluZm9ybSB0aGUgZGVyZWYoKSByb3V0aW5lIHRoYXQgaXQgc2hv
dWxkIGRlbGV0ZSB0aGlzIGd1eSBhcyBzb29uCisgICAgICAgICAgICAvLyBhcyB0aGUgcmVmIGNv
dW50IHJlYWNoZXMgemVyby4KKyAgICAgICAgICAgIHJvdXRpbmUtPm1faXNKZXR0aXNvbmVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByb3V0aW5lLT5kZWxldGVGcm9tR0MoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUU3R1YlJvdXRp
bmVTZXQ6OmFkZChHQ0F3YXJlSklUU3R1YlJvdXRpbmUqIHJvdXRpbmUpCit7CisgICAgQVNTRVJU
KCFyb3V0aW5lLT5tX2lzSmV0dGlzb25lZCk7CisgICAgCisgICAgbV9saXN0T2ZSb3V0aW5lcy5h
cHBlbmQocm91dGluZSk7CisgICAgCisgICAgdWludHB0cl90IHN0YXJ0ID0gcm91dGluZS0+c3Rh
cnRBZGRyZXNzKCk7CisgICAgdWludHB0cl90IGVuZCA9IHJvdXRpbmUtPmVuZEFkZHJlc3MoKTsK
KyAgICB1aW50cHRyX3Qgc3RlcCA9IEpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpOworICAg
IGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlciArPSBzdGVwKSB7
CisgICAgICAgIEFTU0VSVChtX2FkZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKSA9PSBtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZW5kKCkpOworICAgICAgICBtX2FkZHJlc3NUb1JvdXRpbmVNYXAu
YWRkKGl0ZXIsIHJvdXRpbmUpOworICAgIH0KK30KKwordm9pZCBKSVRTdHViUm91dGluZVNldDo6
Y2xlYXJNYXJrcygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fbGlzdE9mUm91dGluZXMuc2l6
ZSgpOyBpLS07KQorICAgICAgICBtX2xpc3RPZlJvdXRpbmVzW2ldLT5tX21heUJlRXhlY3V0aW5n
ID0gZmFsc2U7Cit9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6Om1hcmtTbG93KHVpbnRwdHJf
dCBhZGRyZXNzKQoreworICAgIEhhc2hNYXA8dWludHB0cl90LCBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUqPjo6aXRlcmF0b3IgaXRlciA9CisgICAgICAgIG1fYWRkcmVzc1RvUm91dGluZU1hcC5maW5k
KGFkZHJlc3MgJiB+KEpJVFN0dWJSb3V0aW5lOjphZGRyZXNzU3RlcCgpIC0gMSkpOworICAgIAor
ICAgIGlmIChpdGVyID09IG1fYWRkcmVzc1RvUm91dGluZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGl0ZXItPnNlY29uZC0+bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7Cit9
CisKK3ZvaWQgSklUU3R1YlJvdXRpbmVTZXQ6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJS
b3V0aW5lcygpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3RPZlJvdXRpbmVz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgIEdDQXdhcmVKSVRTdHViUm91dGluZSogcm91dGluZSA9
IG1fbGlzdE9mUm91dGluZXNbaV07CisgICAgICAgIGlmICghcm91dGluZS0+bV9pc0pldHRpc29u
ZWQgfHwgcm91dGluZS0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gcm91dGluZS0+c3RhcnRBZGRyZXNz
KCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmQgPSByb3V0aW5lLT5lbmRBZGRyZXNzKCk7CisgICAg
ICAgIHVpbnRwdHJfdCBzdGVwID0gSklUU3R1YlJvdXRpbmU6OmFkZHJlc3NTdGVwKCk7CisgICAg
ICAgIGZvciAodWludHB0cl90IGl0ZXIgPSBzdGFydDsgaXRlciA8IGVuZDsgaXRlciArPSBzdGVw
KSB7CisgICAgICAgICAgICBBU1NFUlQobV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmZpbmQoaXRlcikg
IT0gbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Fk
ZHJlc3NUb1JvdXRpbmVNYXAuZmluZChpdGVyKS0+c2Vjb25kID09IHJvdXRpbmUpOworICAgICAg
ICAgICAgbV9hZGRyZXNzVG9Sb3V0aW5lTWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcm91dGluZS0+ZGVsZXRlRnJvbUdDKCk7CisgICAgICAgIAorICAgICAg
ICBtX2xpc3RPZlJvdXRpbmVzW2ldID0gbV9saXN0T2ZSb3V0aW5lcy5sYXN0KCk7CisgICAgICAg
IG1fbGlzdE9mUm91dGluZXMucmVtb3ZlTGFzdCgpOworICAgICAgICBpLS07CisgICAgfQorfQor
Cit2b2lkIEpJVFN0dWJSb3V0aW5lU2V0Ojp0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9saXN0T2ZSb3V0aW5lcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKiByb3V0aW5lID0g
bV9saXN0T2ZSb3V0aW5lc1tpXTsKKyAgICAgICAgaWYgKCFyb3V0aW5lLT5tX21heUJlRXhlY3V0
aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICByb3V0aW5lLT5t
YXJrUmVxdWlyZWRPYmplY3RzKHZpc2l0b3IpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSklUU3R1YlJvdXRpbmVTZXRfaAorI2RlZmluZSBKSVRTdHViUm91dGluZVNl
dF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShKSVQpCisKKyNp
bmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CitjbGFzcyBTbG90
VmlzaXRvcjsKKworY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEpJVFN0dWJSb3V0aW5lU2V0KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICAKK3B1YmxpYzoKKyAgICBKSVRTdHViUm91dGluZVNldCgpOworICAgIH5KSVRTdHViUm91
dGluZVNldCgpOworICAgIAorICAgIHZvaWQgYWRkKEdDQXdhcmVKSVRTdHViUm91dGluZSopOwor
CisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRp
ZGF0ZUFkZHJlc3MpCisgICAgeworICAgICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKKyAgICAgICAgaWYgKCFKSVRT
dHViUm91dGluZTo6cGFzc2VzRmlsdGVyKGFkZHJlc3MpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgbWFya1Nsb3coYWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CisgICAgCisgICAgdm9p
ZCB0cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhTbG90VmlzaXRvciYpOworICAgIAorcHJpdmF0ZToK
KyAgICB2b2lkIG1hcmtTbG93KHVpbnRwdHJfdCBhZGRyZXNzKTsKKyAgICAKKyAgICBIYXNoTWFw
PHVpbnRwdHJfdCwgR0NBd2FyZUpJVFN0dWJSb3V0aW5lKj4gbV9hZGRyZXNzVG9Sb3V0aW5lTWFw
OworICAgIFZlY3RvcjxHQ0F3YXJlSklUU3R1YlJvdXRpbmUqPiBtX2xpc3RPZlJvdXRpbmVzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5k
aWYgLy8gSklUU3R1YlJvdXRpbmVTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaAkocmV2aXNpb24gMTIyMDUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDggKzI4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBIZWFw
OwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOworICAgIGNsYXNzIEhlYXA7CiAKICAgICBj
bGFzcyBNYWNoaW5lVGhyZWFkcyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hY2hp
bmVUaHJlYWRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOSArNzMsOSBAQCB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vCiAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpKTsKIH0KIAotdm9pZCBSZWdp
c3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKK3ZvaWQgUmVnaXN0
ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVC
bG9ja3MmIGRmZ0NvZGVCbG9ja3MpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2lu
KCksIGVuZCgpLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVn
aW4oKSwgZW5kKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQg
UmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkocmV2aXNpb24gMTIy
MDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiAgICAgY2xhc3MgREZHQ29kZUJsb2NrczsKKyAgICBj
bGFzcyBKSVRTdHViUm91dGluZVNldDsKICAgICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CiAKICAgICBjbGFzcyBSZWdpc3RlckZpbGUgewpAQCAtNjQsNyArNjUsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgflJlZ2lzdGVyRmlsZSgpOwogICAgICAgICAKICAgICAgICAgdm9pZCBn
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAgICAgICB2b2lk
IGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgREZHQ29kZUJsb2Nr
cyYpOworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CiAKICAgICAgICAgUmVn
aXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jl
c2VydmF0aW9uLmJhc2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZW5kOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2Nh
dG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIERlbWFuZEV4ZWN1dGFi
bGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFs
bCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxs
b2NhdGlvbkdyYW51bGUpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrKGFsbG9jYXRv
cnNNdXRleCgpKTsKICAgICAgICAgYWxsb2NhdG9ycygpLmFkZCh0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lv
biAxMjIwNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIEpTR2xvYmFsRGF0YTsKIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxE
YXRhJik7CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBqaXRBbGxvY2F0aW9uR3JhbnVsZSA9IDMy
OworCiBpbmxpbmUgc2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplX3QgcmVxdWVzdCwg
c2l6ZV90IGdyYW51bGFyaXR5KQogewogICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxzaXpl
X3Q+OjptYXgoKSAtIGdyYW51bGFyaXR5KSA8PSByZXF1ZXN0KQpAQCAtMTAxLDYgKzEwMywxOCBA
QCB0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhCiBjbGFzcyBEZW1hbmRF
eGVjdXRhYmxlQWxsb2NhdG9yOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExP
Q0FUT1JfRklYRUQpCisjaWYgQ1BVKEFSTSkKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OworI2VsaWYgQ1BVKFg4Nl82
NCkKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAx
MDI0ICogMTAyNCAqIDEwMjQ7CisjZWxzZQorc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKKworZXh0ZXJu
IHVpbnRwdHJfdCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKKyNlbmRpZgorCiBj
bGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsg
V3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAko
cmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyNyArNDUsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jaWYgQ1BV
KEFSTSkKLXN0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEw
MjQ7Ci0jZWxpZiBDUFUoWDg2XzY0KQotc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXpl
ID0gMTAyNCAqIDEwMjQgKiAxMDI0OwotI2Vsc2UKLXN0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQ
b29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7Ci0jZW5kaWYKK3VpbnRwdHJfdCBzdGFydE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAogY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91
bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgICAgIDogTWV0YUFsbG9jYXRv
cihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMy
IGJ5dGVzCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpy
ZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRQb29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29k
ZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgICAgICBtX3Jlc2Vy
dmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VU
QUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNpZiAhKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJF
VEVSKSB8fCBFTkFCTEUoTExJTlQpKQogICAgICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAg
ICAgICAgICBDUkFTSCgpOwogI2VuZGlmCiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0gZml4ZWRQb29sU2l6ZSk7
CisgICAgICAgICAgICBBU1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0gZml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbFNpemUpOwogICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNl
cnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorCisjaWYg
RU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKKyNpbmNsdWRlICJTY29wZUNoYWluLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0dDQXdhcmVKSVRTdHVi
Um91dGluZTo6R0NBd2FyZUpJVFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYgY29kZSwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIDogSklUU3R1YlJv
dXRpbmUoY29kZSkKKyAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCisgICAgLCBtX2lzSmV0
dGlzb25lZChmYWxzZSkKK3sKKyAgICBnbG9iYWxEYXRhLmhlYXAubV9qaXRTdHViUm91dGluZXMu
YWRkKHRoaXMpOworfQorICAgIAorR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjp+R0NBd2FyZUpJVFN0
dWJSb3V0aW5lKCkgeyB9CisKK3ZvaWQgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOjpvYnNlcnZlWmVy
b1JlZkNvdW50KCkKK3sKKyAgICBpZiAobV9pc0pldHRpc29uZWQpIHsKKyAgICAgICAgLy8gVGhp
cyBjYXNlIGlzIG5lZWRlZCBmb3Igd2hlbiB0aGUgc3lzdGVtIHNodXRzIGRvd24uIEl0IG1heSBi
ZSB0aGF0CisgICAgICAgIC8vIHRoZSBKSVQgc3R1YiByb3V0aW5lIHNldCBnZXRzIGRlbGV0ZWQg
YmVmb3JlIHdlIGdldCBhcm91bmQgdG8gZGVsZXRpbmcKKyAgICAgICAgLy8gdGhpcyBndXkuIElu
IHRoYXQgY2FzZSB0aGUgR0MgaW5mb3JtcyB1cyB0aGF0IHdlJ3JlIGpldHRpc29uZWQgYWxyZWFk
eQorICAgICAgICAvLyBhbmQgdGhhdCB3ZSBzaG91bGQgZGVsZXRlIG91cnNlbHZlcyBhcyBzb29u
IGFzIHRoZSByZWYgY291bnQgcmVhY2hlcworICAgICAgICAvLyB6ZXJvLgorICAgICAgICBkZWxl
dGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIW1faXNK
ZXR0aXNvbmVkKTsKKyAgICBBU1NFUlQoIW1fcmVmQ291bnQpOworCisgICAgbV9pc0pldHRpc29u
ZWQgPSB0cnVlOworfQorCit2b2lkIEdDQXdhcmVKSVRTdHViUm91dGluZTo6ZGVsZXRlRnJvbUdD
KCkKK3sKKyAgICBBU1NFUlQobV9pc0pldHRpc29uZWQpOworICAgIEFTU0VSVCghbV9yZWZDb3Vu
dCk7CisgICAgQVNTRVJUKCFtX21heUJlRXhlY3V0aW5nKTsKKyAgICAKKyAgICBkZWxldGUgdGhp
czsKK30KKwordm9pZCBHQ0F3YXJlSklUU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpCit7Cit9CisKK01hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRp
bmVXaXRoT25lT2JqZWN0OjpNYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVj
dCgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGUsIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICBKU0NlbGwqIG9iamVjdCkKKyAg
ICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCBnbG9iYWxEYXRhKQorICAgICwgbV9vYmpl
Y3QoZ2xvYmFsRGF0YSwgb3duZXIsIG9iamVjdCkKK3sKK30KKworTWFya2luZ0dDQXdhcmVKSVRT
dHViUm91dGluZVdpdGhPbmVPYmplY3Q6On5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0
aE9uZU9iamVjdCgpCit7Cit9CisKK3ZvaWQgTWFya2luZ0dDQXdhcmVKSVRTdHViUm91dGluZVdp
dGhPbmVPYmplY3Q6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9vYmplY3QpOworfQorCitQYXNzUmVmUHRy
PEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYmIGNvZGUsCisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorICAg
IGNvbnN0IEpTQ2VsbCosCisgICAgYm9vbCBtYWtlc0NhbGxzKQoreworICAgIGlmICghbWFrZXND
YWxscykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKSVRTdHViUm91dGluZShjb2RlKSk7
CisKKyAgICByZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxKSVRTdHViUm91dGluZT4oCisgICAg
ICAgIGFkb3B0UmVmKG5ldyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZSwgZ2xvYmFsRGF0YSkp
KTsKK30KKworUGFzc1JlZlB0cjxKSVRTdHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUo
CisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAorICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwKKyAgICBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgIGJvb2wgbWFrZXND
YWxscywKKyAgICBKU0NlbGwqIG9iamVjdCkKK3sKKyAgICBpZiAoIW1ha2VzQ2FsbHMpCisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRpbmUoY29kZSkpOworICAgIAorICAg
IHJldHVybiBzdGF0aWNfcG9pbnRlcl9jYXN0PEpJVFN0dWJSb3V0aW5lPigKKyAgICAgICAgYWRv
cHRSZWYobmV3IE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRpbmVXaXRoT25lT2JqZWN0KGNvZGUs
IGdsb2JhbERhdGEsIG93bmVyLCBvYmplY3QpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBHQ0F3YXJlSklUU3R1YlJvdXRpbmVfaAorI2RlZmluZSBHQ0F3YXJl
SklUU3R1YlJvdXRpbmVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoSklUKQorCisjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworLy8gVXNlIHRoaXMg
c3R1YiByb3V0aW5lIGlmIHlvdSBrbm93IHRoYXQgeW91ciBjb2RlIG1pZ2h0IGJlIG9uIHN0YWNr
IHdoZW4KKy8vIGVpdGhlciBHQyBvciBvdGhlciBraW5kcyBvZiBzdHViIGRlbGV0aW9uIGhhcHBl
bi4gQmFzaWNhbHksIGlmIHlvdXIgc3R1YgorLy8gcm91dGluZSBtYWtlcyBjYWxscyAoZWl0aGVy
IHRvIEpTIGNvZGUgb3IgdG8gQysrIGNvZGUpIHRoZW4geW91IHNob3VsZAorLy8gYXNzdW1lIHRo
YXQgaXQncyBwb3NzaWJsZSBmb3IgdGhhdCBKUyBvciBDKysgY29kZSB0byBkbyBzb21ldGhpbmcg
dGhhdAorLy8gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gdHJ5IHRvIGRlbGV0ZSB5b3VyIHJvdXRpbmUu
IFVzaW5nIHRoaXMgcm91dGluZSB0eXBlCisvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBkZWxl
dGlvbiBpcyBkZWxheWVkIHVudGlsIHRoZSBHQyBwcm92ZXMgdGhhdCB0aGUKKy8vIHJvdXRpbmUg
aXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIFlvdSBjYW4gYWxzbyBzdWJjbGFzcyB0aGlzIHJvdXRpbmUg
aWYgeW91CisvLyB3YW50IHRvIG1hcmsgYWRkaXRpb25hbCBvYmplY3RzIGR1cmluZyBHQyBpbiB0
aG9zZSBjYXNlcyB3aGVyZSB0aGUKKy8vIHJvdXRpbmUgaXMga25vd24gdG8gYmUgZXhlY3V0aW5n
LCBvciBpZiB5b3Ugd2FudCB0byBmb3JjZSB0aGlzIHJvdXRpbmUgdG8KKy8vIGtlZXAgb3RoZXIg
cm91dGluZXMgYWxpdmUgKGZvciBleGFtcGxlIGR1ZSB0byB0aGUgdXNlIG9mIGEgc2xvdy1wYXRo
CisvLyBsaXN0IHdoaWNoIGRvZXMgbm90IGdldCByZWNsYWltZWQgYWxsIGF0IG9uY2UpLgorY2xh
c3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIDogcHVibGljIEpJVFN0dWJSb3V0aW5lIHsKK3B1Ymxp
YzoKKyAgICBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiwgSlNHbG9iYWxEYXRhJik7CisgICAgdmlydHVhbCB+R0NBd2FyZUpJVFN0dWJSb3V0aW5lKCk7
CisgICAgCisgICAgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQorICAgIHsKKyAgICAgICAgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKHZpc2l0b3IpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZUZyb21HQygpOworICAgIAorcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBvYnNlcnZlWmVyb1JlZkNvdW50KCk7CisgICAgCisgICAgdmlydHVh
bCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKKworICAgIGJvb2wgbV9t
YXlCZUV4ZWN1dGluZzsKKyAgICBib29sIG1faXNKZXR0aXNvbmVkOworfTsKKworLy8gVXNlIHRo
aXMgaWYgeW91IHdhbnQgdG8gbWFyayBvbmUgYWRkaXRpb25hbCBvYmplY3QgZHVyaW5nIEdDIGlm
IHlvdXIgc3R1YgorLy8gcm91dGluZSBpcyBrbm93biB0byBiZSBleGVjdXRpbmcuCitjbGFzcyBN
YXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCA6IHB1YmxpYyBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRp
bmVXaXRoT25lT2JqZWN0KAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBK
U0dsb2JhbERhdGEmLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqKTsKKyAgICB2aXJ0dWFs
IH5NYXJraW5nR0NBd2FyZUpJVFN0dWJSb3V0aW5lV2l0aE9uZU9iamVjdCgpOworICAgIAorcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xv
dFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX29iamVj
dDsKK307CisKKy8vIEhlbHBlciBmb3IgZWFzaWx5IGNyZWF0aW5nIGEgR0MtYXdhcmUgSklUIHN0
dWIgcm91dGluZS4gRm9yIHRoZSB2YXJhcmdzLAorLy8gcGFzcyB6ZXJvIG9yIG1vcmUgSlNDZWxs
KidzLiBUaGlzIHdpbGwgZWl0aGVyIGNyZWF0ZSBhIEpJVFN0dWJSb3V0aW5lLCBhCisvLyBHQ0F3
YXJlSklUU3R1YlJvdXRpbmUsIG9yIGFuIE9iamVjdE1hcmtpbmdHQ0F3YXJlSklUU3R1YlJvdXRp
bmUgYXMKKy8vIGFwcHJvcHJpYXRlLiBHZW5lcmFsbHkgeW91IG9ubHkgbmVlZCB0byBwYXNzIHBv
aW50ZXJzIHRoYXQgd2lsbCBiZSB1c2VkCisvLyBhZnRlciB0aGUgZmlyc3QgY2FsbCB0byBDKysg
b3IgSlMuCisvLyAKKy8vIFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWJS
b3V0aW5lKAorLy8gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLAorLy8gICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLAorLy8gICAgY29uc3QgSlNDZWxsKiBvd25lciwKKy8v
ICAgIGJvb2wgbWFrZXNDYWxscywKKy8vICAgIC4uLik7CisvLworLy8gTm90ZSB0aGF0IHdlIGRv
bid0IGFjdHVhbGx5IHVzZSBDLXN0eWxlIHZhcmFyZ3MgYmVjYXVzZSB0aGF0IGxlYWRzIHRvCisv
LyBzdHJhbmdlIHR5cGUtcmVsYXRlZCBwcm9ibGVtcy4gRm9yIGV4YW1wbGUgaXQgd291bGQgcHJl
Y2x1ZGUgdXMgZnJvbSB1c2luZworLy8gb3VyIGN1c3RvbSBvZiBwYXNzaW5nICcwJyBhcyBOVUxM
IHBvaW50ZXIuIEJlc2lkZXMsIHdoZW4gSSBkaWQgdHJ5IHRvIHdyaXRlCisvLyB0aGlzIGZ1bmN0
aW9uIHVzaW5nIHZhcmFyZ3MsIEkgZW5kZWQgdXAgd2l0aCBtb3JlIGNvZGUgdGhhbiB0aGlzIHNp
bXBsZQorLy8gd2F5LgorCitQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVKSVRTdHVi
Um91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBKU0dsb2JhbERhdGEm
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBib29sIG1ha2VzQ2FsbHMpOworUGFzc1JlZlB0cjxKSVRT
dHViUm91dGluZT4gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmJiwgSlNHbG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiBvd25lciwgYm9vbCBtYWtl
c0NhbGxzLAorICAgIEpTQ2VsbCopOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBHQ0F3YXJlSklUU3R1YlJvdXRpbmVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJKSVQuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiSklUSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIkpJVFN0dWJDYWxsLmgiCkBAIC01
NTcsMTIgKzU1OCwxNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlv
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihj
dGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAgIH0KICAgICAKLSAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZl
ciwKLSAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfaWQgdHJhbnNpdGlvbiBzdHViIGZvciBDb2Rl
QmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklU
U3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1
ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJs
b2NrLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKSwKKyAgICAgICAgKm1fZ2xvYmFsRGF0YSwKKyAg
ICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICB3aWxsTmVlZFN0
b3JhZ2VSZWFsbG9jLAorICAgICAgICBuZXdTdHJ1Y3R1cmUpOwogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxs
ZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8t
PnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9U
cmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2Vs
ZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MjQsNyArNjMwLDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5wdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBo
YXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1Yklu
Zm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERSgKKyAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAg
ICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yIENvZGVCbG9jayAl
cCwgcmV0dXJuIHBvaW50ICVwIiwKICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCkBAIC02MzMsNyArNjM5LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVy
ZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3Jl
IHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjk0LDE2ICs3MDAs
MjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIH0KIAog
ICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUg
ZGVsZXRlZCBsYXRlci4KLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RF
KAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgcHJv
dG8gc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9j
b2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAg
ICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJv
dXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgICAgICgiQmFzZWxpbmUgZ2V0X2J5X2lkIHByb3RvIHN0dWIgZm9yIENvZGVCbG9j
ayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSks
CisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAgICAgCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5n
ZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03
NDcsNyArNzU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAog
ICAgICAgICB9CiAgICAgfSAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRv
IGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJv
dXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRp
b25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1
YlJvdXRpbmUuY29kZSgpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocG9seW1vcnBoaWNT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lKSk7CiAgICAgaWYg
KCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51
LmdldC5jb2xkUGF0aEJlZ2luKTsKICAgICAKQEAgLTc1NiwxOCArNzY2LDIyIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVy
biBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0g
dGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAo
IkJhc2VsaW5lIGdldF9ieV9pZCBzZWxmIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1
cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUu
dS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0
dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBG
SU5BTElaRV9DT0RFKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJh
c2VsaW5lIGdldF9ieV9pZCBzZWxmIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4g
cG9pbnQgJXAiLAorICAgICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKSwKKyAgICAgICAgKm1f
Z2xvYmFsRGF0YSwKKyAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAg
ICAgICBuZWVkc1N0dWJMaW5rKTsKIAogICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKICAgICAKICAgICAvLyBG
aW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0
byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNl
bGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3Rv
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNo
ZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODE4LDI1ICs4MzIsMjkgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAgICB9CiAgICAgfQog
ICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNl
cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVj
dHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0
dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXggLSAxXS5zdHViUm91dGluZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Vz
MSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwg
bGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8g
dGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUg
dG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnB1dFJlc3VsdCkpOwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGlu
ZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2Vs
aW5lIGdldF9ieV9pZCBwcm90byBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBv
aW50ICVwIiwKLSAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxh
YmVsQXRPZmZzZXQoCi0gICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0
LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJ
WkVfQ09ERSgKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGlu
ZSBnZXRfYnlfaWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2lu
dCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
bGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9i
YWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAg
IG5lZWRzU3R1YkxpbmspOwogCiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlz
RGlyZWN0KTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNv
ZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50
IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQpAQCAtODkyLDE4ICs5MTAsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3Jt
YXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93
IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENv
ZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJSb3V0aW5lOjphc0NvZGVQdHIocHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZSkpOwogICAg
IAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwog
ICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2Rl
LCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkpOwogICAg
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUo
Ci0gICAgICAgIHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFp
biBsaXN0IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKLSAgICAgICAg
IG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQoCi0gICAg
ICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmUg
PSBjcmVhdGVKSVRTdHViUm91dGluZSgKKyAgICAgICAgRklOQUxJWkVfQ09ERSgKKyAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAgICAgKCJCYXNlbGluZSBnZXRfYnlfaWQgY2hhaW4g
bGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwog
ICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CkBA
IC05MTEsNyArOTMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8t
PnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hl
ZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKQEAgLTk2OSwxNyArOTkxLDIxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0
UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAg
ICAgICAoIkJhc2VsaW5lIGdldF9ieV9pZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJl
dHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGlu
ZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklU
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAg
IEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgi
QmFzZWxpbmUgZ2V0X2J5X2lkIGNoYWluIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBv
aW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2ds
b2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAg
ICAgbmVlZHNTdHViTGluayk7CiAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRp
bmU7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFj
ayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiSklULmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKQEAgLTU5NSwxMiAr
NTk2LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVyLAotICAg
ICAgICAoIkJhc2VsaW5lIHB1dF9ieV9pZCB0cmFuc2l0aW9uIGZvciBDb2RlQmxvY2sgJXAsIHJl
dHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUo
CisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAg
ICAgICAgICgiQmFzZWxpbmUgcHV0X2J5X2lkIHRyYW5zaXRpb24gZm9yIENvZGVCbG9jayAlcCwg
cmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywgcmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgd2lsbE5lZWRTdG9yYWdlUmVhbGxvYywKKyAg
ICAgICAgbmV3U3RydWN0dXJlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9j
b2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJl
dHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2Rl
KCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5B
ZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQpAQCAtNjU3LDcgKzY2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBp
dCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERSgKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAogICAgICAgICBwYXRjaEJ1ZmZlciwKICAgICAgICAgKCJCYXNsaW5lIEpJVCBnZXRf
YnlfaWQgYXJyYXkgbGVuZ3RoIHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVw
IiwKICAgICAgICAgIG1fY29kZUJsb2NrLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRP
ZmZzZXQoCkBAIC02NjYsNyArNjcyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hH
ZXRBcnJheUxlbgogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJh
Y2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlv
bkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0
aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAK
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJl
IGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9hcnJheV9mYWlsKSk7CkBAIC03MjQsMTYgKzczMCwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVHJhY2sg
dGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVy
LgotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgcHJvdG8gc3R1YiBm
b3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAotICAgICAgICAgbV9jb2RlQmxvY2ss
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisg
ICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAg
ICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBwcm90byBzdHViIGZvciBDb2RlQmxvY2sgJXAs
IHJldHVybiBwb2ludCAlcCIsCisgICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBh
dGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAg
ICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksCisgICAgICAgIG5lZWRzU3R1YkxpbmspOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUg
anVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3Rl
YWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuc3RydWN0
dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0
aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5j
dGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKQEAgLTc3Niw3ICs3ODYsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgfQogCiAgICAg
Ly8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChKSVRTdHVi
Um91dGluZTo6YXNDb2RlUHRyKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXggLSAxXS5zdHViUm91dGluZSkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAg
IGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KC1zdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQuY29sZFBhdGhCZWdpbik7CiAKQEAg
LTc4NSwxOCArNzk1LDIyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlz
dCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwg
YXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpKTsKIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAg
IHBhdGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgbGlzdCBzdHVi
IGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVCbG9j
aywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJDb2RlID0gY3JlYXRlSklUU3R1
YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBsaXN0IHN0dWIgZm9yIENv
ZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBtX2NvZGVCbG9jaywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICBz
dHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVjdXRhYmxlQWRkcmVz
cygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7
CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRo
ZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1
bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LT5wYXRjaC5iYXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNvZGUoKSkpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNv
ZGUtPmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNl
dCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODQ4LDI0ICs4NjIsMjgg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIH0KIAogICAg
IC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBi
YWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKEpJVFN0dWJS
b3V0aW5lOjphc0NvZGVQdHIocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZSkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwg
bGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFz
dFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVz
dWx0KSk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBGSU5BTElaRV9D
T0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJCYXNlbGluZSBKSVQgZ2V0X2J5
X2lkIHByb3RvIGxpc3Qgc3R1YiBmb3IgQ29kZUJsb2NrICVwLCByZXR1cm4gcG9pbnQgJXAiLAot
ICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNl
dCgKLSAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHVi
Q29kZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKAorICAgICAgICBGSU5BTElaRV9DT0RFKAorICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlf
aWQgcHJvdG8gbGlzdCBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisg
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldCgKKyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1
dFJlc3VsdCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAor
ICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1
YkxpbmspOwogICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Km1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwg
c3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5l
LnUuZ2V0LnN0cnVjdHVyZUNoZWNrKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
bV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS0+Y29kZSgpLmNvZGUo
KSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBw
cm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFByb3BlcnR5T2Zmc2V0IGNhY2hlZE9m
ZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MjEsMTggKzkzOSwyMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOworICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwoSklUU3R1YlJvdXRpbmU6OmFz
Q29kZVB0cihwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJS
b3V0aW5lKSk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90
b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3VsdCkp
OwogCi0gICAgQ29kZVJlZiBzdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBh
dGNoQnVmZmVyLAotICAgICAgICAoIkJhc2VsaW5lIEpJVCBnZXRfYnlfaWQgY2hhaW4gbGlzdCBz
dHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAgICAgICBtX2NvZGVC
bG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gY3JlYXRl
SklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAgICAgICAgICBwYXRj
aEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9pZCBjaGFpbiBsaXN0
IHN0dWIgZm9yIENvZGVCbG9jayAlcCwgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICBt
X2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAorICAgICAg
ICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZWxpbmUudS5nZXQucHV0UmVzdWx0KS5leGVj
dXRhYmxlQWRkcmVzcygpKSksCisgICAgICAgICptX2dsb2JhbERhdGEsCisgICAgICAgIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgbmVlZHNTdHViTGluayk7CiAKICAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCiAgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhd
LnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwpAQCAtOTQwLDcg
Kzk2Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAv
LyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0
aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5i
YXNlbGluZS51LmdldC5zdHJ1Y3R1cmVDaGVjayk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENo
YWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBQcm9wZXJ0eU9mZnNldCBjYWNoZWRPZmZzZXQs
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBA
IC05OTksMTcgKzEwMjEsMjEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
KFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQp
KTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERSgKLSAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9i
eV9pZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCi0gICAg
ICAgICBtX2NvZGVCbG9jaywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlbGluZS51LmdldC5wdXRSZXN1bHQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0
aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoCisgICAgICAgIEZJTkFMSVpFX0NPREUoCisgICAg
ICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiQmFzZWxpbmUgSklUIGdldF9ieV9p
ZCBjaGFpbiBzdHViIGZvciBDb2RlQmxvY2sgJXAsIHJldHVybiBwb2ludCAlcCIsCisgICAgICAg
ICAgICAgbV9jb2RlQmxvY2ssIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldCgK
KyAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VsaW5lLnUuZ2V0LnB1dFJlc3Vs
dCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLAorICAgICAgICAqbV9nbG9iYWxEYXRhLAorICAgICAg
ICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgIG5lZWRzU3R1Ykxpbmsp
OwogICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChzdHViSW5mby0+cGF0Y2guYmFzZWxp
bmUudS5nZXQuc3RydWN0dXJlQ2hlY2spOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBv
bmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKSVRTdHViUm91dGluZS5oIgorCisjaWYg
RU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiU2NvcGVDaGFp
bi5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKSVRT
dHViUm91dGluZTo6fkpJVFN0dWJSb3V0aW5lKCkgeyB9CisKK3ZvaWQgSklUU3R1YlJvdXRpbmU6
Om9ic2VydmVaZXJvUmVmQ291bnQoKQoreworICAgIEFTU0VSVCghbV9yZWZDb3VudCk7CisgICAg
ZGVsZXRlIHRoaXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRp
bmUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRTdHViUm91dGluZV9oCisjZGVm
aW5lIEpJVFN0dWJSb3V0aW5lX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpJVFN0
dWJSb3V0aW5lU2V0OworCisvLyBUaGlzIGlzIGEgYmFzZS1jbGFzcyBmb3IgSklUIHN0dWIgcm91
dGluZXMsIGFuZCBhbHNvIHRoZSBjbGFzcyB5b3Ugd2FudAorLy8gdG8gaW5zdGFudGlhdGUgZGly
ZWN0bHkgaWYgeW91IGhhdmUgYSByb3V0aW5lIHRoYXQgZG9lcyBub3QgbmVlZCBhbnkKKy8vIGhl
bHAgZnJvbSB0aGUgR0MuIElmIGluIGRvdWJ0LCB1c2Ugb25lIG9mIHRoZSBvdGhlciBzdHViIHJv
dXRpbmVzLiBCdXQKKy8vIGlmIHlvdSBrbm93IGZvciBzdXJlIHRoYXQgdGhlIHN0dWIgcm91dGlu
ZSBjYW5ub3QgYmUgb24gdGhlIHN0YWNrIHdoaWxlCisvLyBzb21lb25lIHRyaWdnZXJzIGEgc3R1
YiByb3V0aW5lIHJlc2V0LCB0aGVuIHVzaW5nIHRoaXMgd2lsbCBzcGVlZCB1cAorLy8gbWVtb3J5
IHJlY2xhbWF0aW9uLiBPbmUgY2FzZSB3aGVyZSBhIHN0dWIgcm91dGluZSBzYXRpc2ZpZXMgdGhp
cworLy8gY29uZGl0aW9uIGlzIGlmIGl0IGRvZXNuJ3QgbWFrZSBhbnkgY2FsbHMsIHRvIGVpdGhl
ciBDKysgb3IgSlMgY29kZS4gSW4KKy8vIHN1Y2ggYSByb3V0aW5lIHlvdSBrbm93IHRoYXQgaXQg
Y2Fubm90IGJlIG9uIHRoZSBzdGFjayB3aGVuIGFueXRoaW5nCisvLyBpbnRlcmVzdGluZyBoYXBw
ZW5zLgorLy8gU2VlIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGZvciB0aGUgb3RoZXIgc3R1YiBy
b3V0aW5lcy4KK2NsYXNzIEpJVFN0dWJSb3V0aW5lIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShKSVRTdHViUm91dGluZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgSklUU3R1YlJvdXRpbmUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlKQor
ICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBDb2RlUHRy
IHRvIHNvbWVvbmUgd2hvIGluc2lzdHMgb24gdGFraW5nCisgICAgLy8gYSBSZWZQdHI8SklUU3R1
YlJvdXRpbmU+LgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBjcmVhdGVT
ZWxmTWFuYWdlZFJvdXRpbmUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByYXdDb2Rl
UG9pbnRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSklUU3R1YlJvdXRp
bmUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYocmF3Q29k
ZVBvaW50ZXIpKSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkpJVFN0dWJSb3V0aW5lKCk7
CisgICAgCisgICAgLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGlzIGNvcHlhYmxlLCBidXQgYXQg
dGhlIGNvc3Qgb2YgcmVmZXJlbmNlCisgICAgLy8gY291bnRpbmcgY2h1cm4uIFJldHVybmluZyBh
IHJlZmVyZW5jZSBpcyBhIGdvb2Qgd2F5IG9mIHJlZHVjaW5nCisgICAgLy8gdGhlIGNodXJuLgor
ICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZTsgfQorICAgIAorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYXNDb2RlUHRy
KFBhc3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lKQorICAgIHsKKyAgICAgICAg
aWYgKCFzdHViUm91dGluZSkKKyAgICAgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByZXN1bHQgPSBz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKTsKKyAgICAgICAgQVNTRVJUKCEhcmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCByZWYoKQorICAgIHsK
KyAgICAgICAgbV9yZWZDb3VudCsrOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlcmVmKCkKKyAg
ICB7CisgICAgICAgIGlmICgtLW1fcmVmQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG9ic2VydmVaZXJvUmVmQ291bnQoKTsKKyAgICB9CisgICAgCisgICAgLy8gSGVscGVycyBm
b3IgdGhlIEdDIHRvIGRldGVybWluZSBob3cgdG8gZGVhbCB3aXRoIG1hcmtpbmcgSklUIHN0dWIK
KyAgICAvLyByb3V0aW5lcy4KKyAgICB1aW50cHRyX3Qgc3RhcnRBZGRyZXNzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlLmV4ZWN1dGFibGVNZW1vcnkoKS0+c3RhcnRBc0ludGVnZXIoKTsgfQorICAg
IHVpbnRwdHJfdCBlbmRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kQXNJbnRlZ2VyKCk7IH0KKyAgICBzdGF0aWMgdWludHB0cl90IGFkZHJlc3NT
dGVwKCkgeyByZXR1cm4gaml0QWxsb2NhdGlvbkdyYW51bGU7IH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIoKQorICAgIHsKKyNpZiBFTkFCTEUoRVhFQ1VUQUJM
RV9BTExPQ0FUT1JfRklYRUQpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIHN0YXRpYyB1aW50cHRyX3QgZmlsdGVy
aW5nU3RhcnRBZGRyZXNzKCkKKyAgICB7CisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9S
X0ZJWEVEKQorICAgICAgICByZXR1cm4gc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2w7
CisjZWxzZQorICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICAgICAgcmV0
dXJuIDA7CisjZW5kaWYKKyAgICB9CisgICAgc3RhdGljIHNpemVfdCBmaWx0ZXJpbmdFeHRlbnRT
aXplKCkKKyAgICB7CisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQorICAg
ICAgICByZXR1cm4gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjZWxzZQorICAgICAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYK
KyAgICB9CisgICAgc3RhdGljIGJvb2wgcGFzc2VzRmlsdGVyKHVpbnRwdHJfdCBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgaWYgKCFjYW5QZXJmb3JtUmFuZ2VGaWx0ZXIoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGFkZHJlc3MgLSBmaWx0ZXJpbmdT
dGFydEFkZHJlc3MoKSA+PSBmaWx0ZXJpbmdFeHRlbnRTaXplKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgb2JzZXJ2ZVplcm9SZWZDb3VudCgpOworCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsK
KworLy8gSGVscGVyIGZvciB0aGUgY3JlYXRpb24gb2Ygc2ltcGxlIHN0dWIgcm91dGluZXMgdGhh
dCBuZWVkIG5vIGhlbHAgZnJvbSB0aGUgR0MuCisjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIocGF0Y2hCdWZmZXIsIGRhdGFMb2dBcmd1bWVudHMpIFwKKyAgICAoYWRvcHRSZWYobmV3IEpJ
VFN0dWJSb3V0aW5lKEZJTkFMSVpFX0NPREUoKHBhdGNoQnVmZmVyKSwgZGF0YUxvZ0FyZ3VtZW50
cykpKSkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisj
ZW5kaWYgLy8gSklUU3R1YlJvdXRpbmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTIyMDUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjIsNyArMTcyMiw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBpZiAoc3R1
YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAwLCBzdHViSW5mby0+dS5nZXRCeUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgICAgIHN0dWJJ
bmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBz
dHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTE3NDgsMTIgKzE3
NDgsMTIgQEAgc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZwogICAgIHN3
aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
cHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRp
bmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBz
dHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpLCB0cnVlKTsK
LSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7
CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZS5jbGVhcigpOwogICAgICAgICBzdHViSW5m
by0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICAgICAgcHJv
dG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Z2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRD
aGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUu
Y2xlYXIoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfcHJvdG9fbGlzdDoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJ
KHJldmlzaW9uIDEyMjA1MikKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTcgKzQ1LDI3IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CiAgICAgCi0gICAg
dm9pZCogc3RhcnQoKQorICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3N0YXJ0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBlbmQoKQorICAgIHZvaWQqIGVu
ZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9zaXplSW5CeXRlcyk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRBc0ludGVnZXIoKSk7Cisg
ICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBzdGFydEFzSW50ZWdlcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpOworICAg
IH0KKyAgICAKKyAgICB1aW50cHRyX3QgZW5kQXNJbnRlZ2VyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGFydEFzSW50ZWdlcigpICsgbV9zaXplSW5CeXRlczsKICAgICB9CiAgICAg
ICAgIAotICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwogICAgIH0K
</data>
<flag name="review"
          id="159590"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>