<?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>112838</bug_id>
          
          <creation_ts>2013-03-20 13:42:55 -0700</creation_ts>
          <short_desc>The DFG should be able to tier-up and OSR enter into the FTL</short_desc>
          <delta_ts>2013-09-03 23:25:24 -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>120326</dependson>
    
    <dependson>120453</dependson>
    
    <dependson>120486</dependson>
    
    <dependson>120489</dependson>
    
    <dependson>120567</dependson>
          <blocked>112836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>859678</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-20 13:42:55 -0700</bug_when>
    <thetext>This also means that DFG code block jettisoning logic, and the CodeBlock&apos;s ability to keep a linked list of alternate compilations of an executable, should all be aware of the fact that there are two kinds of DFG compilation - the lesser kind and the better kind (or whatever we end up calling it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921172</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-26 14:48:29 -0700</bug_when>
    <thetext>*** Bug 113625 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922746</commentid>
    <comment_count>2</comment_count>
      <attachid>210049</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-29 17:01:28 -0700</bug_when>
    <thetext>Created attachment 210049
it begins...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922785</commentid>
    <comment_count>3</comment_count>
      <attachid>210058</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-29 19:35:28 -0700</bug_when>
    <thetext>Created attachment 210058
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922865</commentid>
    <comment_count>4</comment_count>
      <attachid>210058</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-30 03:00:51 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1626877</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922868</commentid>
    <comment_count>5</comment_count>
      <attachid>210058</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-30 03:02:44 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1648038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922869</commentid>
    <comment_count>6</comment_count>
      <attachid>210058</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-30 03:16:17 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1651045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922870</commentid>
    <comment_count>7</comment_count>
      <attachid>210058</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-30 03:23:14 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1650047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922875</commentid>
    <comment_count>8</comment_count>
      <attachid>210058</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-30 03:41:30 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1646046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922876</commentid>
    <comment_count>9</comment_count>
      <attachid>210058</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-30 03:56:14 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1648044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922879</commentid>
    <comment_count>10</comment_count>
      <attachid>210058</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-30 04:14:16 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1582471</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922897</commentid>
    <comment_count>11</comment_count>
      <attachid>210058</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-30 05:34:47 -0700</bug_when>
    <thetext>Comment on attachment 210058
more things

Attachment 210058 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1648077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923144</commentid>
    <comment_count>12</comment_count>
      <attachid>210150</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-30 12:36:33 -0700</bug_when>
    <thetext>Created attachment 210150
I think I know what I&apos;m doing now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923160</commentid>
    <comment_count>13</comment_count>
      <attachid>210154</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-30 13:23:50 -0700</bug_when>
    <thetext>Created attachment 210154
it&apos;s sort of getting there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923229</commentid>
    <comment_count>14</comment_count>
      <attachid>210174</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-30 16:20:54 -0700</bug_when>
    <thetext>Created attachment 210174
slowly but surely!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923249</commentid>
    <comment_count>15</comment_count>
      <attachid>210180</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-30 19:39:42 -0700</bug_when>
    <thetext>Created attachment 210180
it&apos;s getting fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923318</commentid>
    <comment_count>16</comment_count>
      <attachid>210199</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-31 11:33:11 -0700</bug_when>
    <thetext>Created attachment 210199
even more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923356</commentid>
    <comment_count>17</comment_count>
      <attachid>210216</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-31 14:44:18 -0700</bug_when>
    <thetext>Created attachment 210216
getting there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923362</commentid>
    <comment_count>18</comment_count>
      <attachid>210219</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-31 15:48:15 -0700</bug_when>
    <thetext>Created attachment 210219
getting close

I think I need to rethink jettisoning, if I want any of this to make sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923800</commentid>
    <comment_count>19</comment_count>
      <attachid>210307</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 12:53:25 -0700</bug_when>
    <thetext>Created attachment 210307
starting to compile

This includes the patch for https://bugs.webkit.org/show_bug.cgi?id=120567 because I need that and it hasn&apos;t been reviewed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923801</commentid>
    <comment_count>20</comment_count>
      <attachid>210308</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 13:03:39 -0700</bug_when>
    <thetext>Created attachment 210308
builds with !ENABLE(FTL_JIT)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923805</commentid>
    <comment_count>21</comment_count>
      <attachid>210309</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 13:54:42 -0700</bug_when>
    <thetext>Created attachment 210309
it builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923810</commentid>
    <comment_count>22</comment_count>
      <attachid>210312</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 15:17:22 -0700</bug_when>
    <thetext>Created attachment 210312
JSC just did an OSR-entry hot loop transfer from the DFG to the FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923811</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 15:18:07 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=210312) [details]
&gt; JSC just did an OSR-entry hot loop transfer from the DFG to the FTL.

This would basically be ready for review, except that it depends on and includes https://bugs.webkit.org/show_bug.cgi?id=120567, which hasn&apos;t been reviewed or landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923846</commentid>
    <comment_count>24</comment_count>
      <attachid>210322</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 22:14:57 -0700</bug_when>
    <thetext>Created attachment 210322
it makes imaging-gaussian-blur faster

Turns out I had to rethink how OSR entrypoint creation works.  I&apos;m not sure I&apos;m 100% happy with it but it does the job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924065</commentid>
    <comment_count>25</comment_count>
      <attachid>210381</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 10:15:23 -0700</bug_when>
    <thetext>Created attachment 210381
the patch

Rebased.  I think it&apos;s ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924067</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-03 10:17:11 -0700</bug_when>
    <thetext>Attachment 210381 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/marsaglia.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSafeToExecute.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLink.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSREntry.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Register.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGJITCode.h:105:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/ftl/FTLState.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGOperations.cpp:2132:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLOSREntry.cpp:81:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/ftl/FTLOSREntry.cpp:89:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
Total errors found: 6 in 61 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>924071</commentid>
    <comment_count>27</comment_count>
      <attachid>210381</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-03 10:23:19 -0700</bug_when>
    <thetext>Comment on attachment 210381
the patch

Attachment 210381 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1697032</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924072</commentid>
    <comment_count>28</comment_count>
      <attachid>210381</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-03 10:26:08 -0700</bug_when>
    <thetext>Comment on attachment 210381
the patch

Attachment 210381 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1693306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924080</commentid>
    <comment_count>29</comment_count>
      <attachid>210384</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 10:38:19 -0700</bug_when>
    <thetext>Created attachment 210384
the patch

Style and build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924083</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-03 10:42:18 -0700</bug_when>
    <thetext>Attachment 210384 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/marsaglia.js&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSREntrypointCreationPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSafeToExecute.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLCapabilities.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLForOSREntryJITCode.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLink.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSREntry.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOSREntry.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLOutput.h&apos;, u&apos;Source/JavaScriptCore/ftl/FTLState.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/Register.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCode.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ftl/FTLOSREntry.cpp:89:  Declaration has space between type name and * in void *result  [whitespace/declaration] [3]
Total errors found: 1 in 64 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>924173</commentid>
    <comment_count>31</comment_count>
      <attachid>210408</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 13:54:59 -0700</bug_when>
    <thetext>Created attachment 210408
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924197</commentid>
    <comment_count>32</comment_count>
      <attachid>210414</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 15:20:39 -0700</bug_when>
    <thetext>Created attachment 210414
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924210</commentid>
    <comment_count>33</comment_count>
      <attachid>210414</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 16:30:06 -0700</bug_when>
    <thetext>Comment on attachment 210414
the patch

r=MarkH (reviewed in person)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924295</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 23:25:24 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/155023</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210049</attachid>
            <date>2013-08-29 17:01:28 -0700</date>
            <delta_ts>2013-08-29 19:35:28 -0700</delta_ts>
            <desc>it begins...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4124</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24g
MTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNiArNTksNjYgQEAgdm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgp
CiAgICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwogfQogCisjaWYgRU5BQkxF
KEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFj
aGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVyLmNoZWNr
SWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwor
fQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygq
Y29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAgICB0
aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBk
YXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNvb24uXG4i
KTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZU
TC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
ID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5l
d1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlv
bnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAgIGJhc2Vs
aW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJ
VCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29k
ZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2NrKiBiYXNl
bGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRlci5z
ZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShP
cHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJhc2VsaW5l
KTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVu
dGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGggY29uY3Vy
cmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNlU2xvd1Bh
dGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICAvLyBGdW4uICBJcyB0aGlzIGdvaW5n
IHRvIGJlIGEgYnVuY2ggb2YgY29kZSBkdXBsaWNhdGlvbiBtYWRuZXNzPworfQorI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR09T
UkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgogI2luY2x1ZGUgIkp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIKICNpbmNs
dWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CkBAIC05Miw5ICs5MywyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHdhdGNocG9pbnRzLmFwcGVuZCh3YXRjaHBvaW50KTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICAvLyBOQi4gQWxsIG9mIHRo
ZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJlY2F1c2UgdGhleSBtYXkgd2FudCB0byB1c2UK
KyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91dCBzY2FsaW5nIHRocmVzaG9sZHMuIEl0IHNo
b3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAgCisgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0
aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplTmV4dElu
dm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbihD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplQWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKik7Cisg
ICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVCbG9jayopOworICAgIHZvaWQgc2V0T3B0aW1p
emF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvZGVCbG9jayosIENvbXBp
bGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICAKICAgICB2b2lk
IHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigp
LgogCkBAIC0xMDYsNiArMTIwLDkgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxKdW1w
UmVwbGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKICAgICBERkc6OlZhcmlh
YmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlmaWVkR3Jh
cGggbWluaWZpZWRERkc7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgRXhlY3V0aW9uQ291bnRl
ciB0aWVyVXBDb3VudGVyOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210058</attachid>
            <date>2013-08-29 19:35:28 -0700</date>
            <delta_ts>2013-08-30 12:36:33 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19533</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0
ODU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
SW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgp
OwotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7
CiAKQEAgLTk2LDI1ICs5NCwyNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29t
cGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRpdmUKICAgICAvLyBlbm91Z2ggdG8g
YWxsb3cgZm9yIE9TUiBlbnRyeSB3aXRoIHRoZXNlIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1W
YXJzV2l0aFZhbHVlczsKLSAgICBpZiAob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgIGlmIChv
c3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVggJiYgb3NyRW50cnlCeXRlY29kZUluZGV4
KQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAg
IGVsc2UKICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgIFJlZlB0cjxQbGFuPiBw
bGFuID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50
cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBp
bnQgb3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAgICYmICFv
cGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFs
aXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAgICAvLyBVZ2gu
IElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQg
Z2FyYmFnZS4gSXQgd2lsbAotICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBk
b2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAg
ICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdy
b2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgLy8gc28gd2Ugc2Fu
aXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAgICAgICAgICAg
cGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tl
ZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0g
VUlOVF9NQVgpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4t
Pm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0Fy
Z3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgICAgIC8vIFVn
aC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9s
ZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2Vk
LiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywK
KyAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0
IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgICAg
ICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQu
CisgICAgICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYg
KzU5LDg5IEBAIHZvaWQgSklUQ29kZTo6c2hyaW5rVG9GaXQoKQogICAgIHZhcmlhYmxlRXZlbnRT
dHJlYW0uc2hyaW5rVG9GaXQoKTsKIH0KIAorI2lmIEVOQUJMRShGVExfSklUKQorYm9vbCBKSVRD
b2RlOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICByZXR1cm4gdGllclVwQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9w
dGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7CisgICAgdGllclVwQ291bnRlci5zZXROZXdU
aHJlc2hvbGQoMCwgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6ZG9udE9wdGltaXplQW55dGltZVNvb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBOb3QgRlRMLW9wdGltaXppbmcgYW55dGltZSBzb29uLlxuIik7CisgICAgdGllclVwQ291bnRl
ci5kZWZlckluZGVmaW5pdGVseSgpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplQWZ0ZXJX
YXJtVXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBhZnRlciB3
YXJtLXVwLlxuIik7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAg
IGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExP
cHRpbWl6ZUFmdGVyV2FybVVwKCkpLAorICAgICAgICBiYXNlbGluZSk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6b3B0aW1pemVTb29uKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGlt
aXppbmcgc29vbi5cbiIpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAg
ICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9y
RlRMT3B0aW1pemVTb29uKCkpLAorICAgICAgICBiYXNlbGluZSk7Cit9CisKK3ZvaWQgSklUQ29k
ZTo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpj
b2RlQmxvY2ssICI6IEZvcmNpbmcgc2xvdyBwYXRoIGNvbmN1cnJlbnRseSBmb3IgRlRMIGVudHJ5
LlxuIik7CisgICAgdGllclVwQ291bnRlci5mb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9
CisKK3ZvaWQgSklUQ29kZTo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQpCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDoKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbihjb2RlQmxvY2spOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAgICAgICAgZG9udE9wdGlt
aXplQW55dGltZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVkOgorICAgICAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52
YWxpZGF0ZWQ6CisgICAgICAgIC8vIFRoaXMgaXMgd2VpcmQgLSBpdCB3aWxsIG9ubHkgaGFwcGVu
IGluIGNhc2VzIHdoZW4gdGhlIERGRyBjb2RlIGJsb2NrIChpLmUuCisgICAgICAgIC8vIHRoZSBj
b2RlIGJsb2NrIHRoYXQgdGhpcyBKSVRDb2RlIGJlbG9uZ3MgdG8pIGlzIGFsc28gaW52YWxpZGF0
ZWQuIFNvIGl0CisgICAgICAgIC8vIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGF0IHdlIGRvLiBC
dXQsIHdlIGRvIHRoZSByaWdodCB0aGluZyBhbnl3YXkuIE5vdGUKKyAgICAgICAgLy8gdGhhdCB1
cyBjb3VudGluZyB0aGUgcmVvcHRpbWl6YXRpb24gYWN0dWFsbHkgbWVhbnMgdGhhdCB3ZSBtaWdo
dCBjb3VudCBpdAorICAgICAgICAvLyB0d2ljZS4gQnV0IHRoYXQncyBnZW5lcmFsbHkgT0suIEl0
J3MgYmV0dGVyIHRvIG92ZXJjb3VudCByZW9wdGltaXphdGlvbnMKKyAgICAgICAgLy8gdGhhbiBp
dCBpcyB0byB1bmRlcmNvdW50IHRoZW0uCisgICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgb3B0aW1pemVBZnRlcldhcm1V
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNv
dW50ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KQEAgLTkyLDkg
KzkzLDIyIEBAIHB1YmxpYzoKICAgICAgICAgd2F0Y2hwb2ludHMuYXBwZW5kKHdhdGNocG9pbnQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworI2lmIEVOQUJMRShGVExfSklUKQor
ICAgIC8vIE5CLiBBbGwgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVCbG9jayogYmVjYXVzZSB0
aGV5IG1heSB3YW50IHRvIHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxvZ2ljIGFib3V0IHNjYWxp
bmcgdGhyZXNob2xkcy4gSXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9jay4KKyAgICAKKyAgICBi
b29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayopOworICAg
IHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGRvbnRP
cHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVBZnRlcldh
cm1VcChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplU29vbihDb2RlQmxvY2sqKTsKKyAg
ICB2b2lkIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2NrKik7
CisgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogICAgIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgCisgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIg
dG8gY2FsbCBzZXRDb2RlUmVmKCkuCiAKQEAgLTEwNiw2ICsxMjAsOSBAQCBwdWJsaWM6CiAgICAg
U2VnbWVudGVkVmVjdG9yPEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQsIDEsIDA+IHdhdGNocG9p
bnRzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwog
ICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KyAgICBFeGVjdXRpb25Db3VudGVyIHRpZXJVcENvdW50ZXI7CisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMTUsNiArMjAxNSwxMDggQEAgZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04g
dHJpZ2dlclJlbwogICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogfQogCisjaWYgRU5BQkxF
KEZUTF9KSVQpCit2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAg
IEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0
ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7
CisgICAgfQorICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVz
aG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAi
LCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29y
a2xpc3QgPSB2bS53b3JrbGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29y
a2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgdm0sIENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAK
KyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAg
IGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3Vs
dChDb21waWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIC8v
IFRoYXQncyBncmVhdCwgd2UndmUgY29tcGlsZWQgdGhlIGNvZGUgLSBuZXh0IHRpbWUgd2UgY2Fs
bCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAvLyB3ZSdsbCBlbnRlciB0aGF0IHJlcGxhY2VtZW50
LgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09
IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgZmlu
aXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUKKyAg
ICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9j
ayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgorICAgIFJlZlB0cjxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0KKyAgICAgICAgREZHVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVC
bG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAKKyAgICBERkc6OmNvbXBp
bGUoCisgICAgICAgIGV4ZWMsIG5ld0NvZGVCbG9jay5nZXQoKSwgRlRMTW9kZSwgVUlOVF9NQVgs
IGNhbGxiYWNrLCB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciogREZHX09QRVJBVElP
TiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKikKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBE
ZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+
aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHRy
aWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBqaXRD
b2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2Rl
LT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9v
c2luZyBub3QgdG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3Rh
dGU7CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLndvcmtsaXN0LmdldCgpKSB7Cisg
ICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9y
Vk0oCisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmts
aXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3Rh
dGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJl
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IGl0J3Mgbm90
IGVudGlyZWx5IGNsZWFyIHRvIG1lIHdoYXQgdGhlIGJlc3Qgc3RyYXRlZ3kgaXMgZm9yIGRlYWxp
bmcgd2l0aAorICAgIC8vIHRoYXQgc3BlY2lhbCBlbnRyeSBjb2RlIGJsb2NrLgorICAgIAorICAg
IGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBG
SVhNRQorICAgIH0gZWxzZSBpZiAoaGFzIHRoZSBzcGVjaWFsIGVudHJ5IGNvZGUgYmxvY2spIHsK
KyAgICAgICAgaWYgKGhhZCBmYWlsZWQgdG8gZW50ZXIgaW50byB0aGUgc3BlY2lhbCB0aGluZ3kg
aW4gdGhlIHBhc3QpCisgICAgICAgICAgICBnZXQgcmlkIG9mIHRoZSBzcGVjaWFsIHRoaW5neTsK
KyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gLy8gZXh0ZXJuICJDIgog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw2ICszMDIs
MTEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogCiB2b2lkIERG
R19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRF
Uk5BTDsKIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJU
aWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiB0
cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9u
X0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJ
KHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsOCArMjc3LDYgQEAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZQogCiBXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3QoKQog
ewotICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQotICAgICAgICByZXR1cm4gMDsKICAg
ICBwdGhyZWFkX29uY2UoJmluaXRpYWxpemVHbG9iYWxXb3JrbGlzdEtleU9uY2UsIGluaXRpYWxp
emVHbG9iYWxXb3JrbGlzdE9uY2UpOwogICAgIHJldHVybiB0aGVHbG9iYWxXb3JrbGlzdDsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDE1
NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsOSArOTgsNiBAQCBwcml2YXRlOgogLy8gRm9yIG5vdyB3ZSB1c2UgYSBz
aW5nbGUgZ2xvYmFsIHdvcmtsaXN0LiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMKIC8vIGlzIHRo
ZSByaWdodCB0aGluZyB0byBkbywgYnV0IGl0IGlzIHdoYXQgd2UgZG8sIGZvciBub3cuIFRoaXMg
ZnVuY3Rpb24KIC8vIHdpbGwgbGF6aWx5IGNyZWF0ZSBvbmUgd2hlbiBpdCdzIG5lZWRlZC4KLS8v
Ci0vLyBUaGlzIHJldHVybnMgbnVsbCBpZiBmb3IgYW55IHJlYXNvbiB3ZSBzaG91bGRuJ3QgYmUg
ZG9pbmcgY29uY3VycmVudAotLy8gY29tcGlsYXRpb24uCiBXb3JrbGlzdCogZ2xvYmFsV29ya2xp
c3QoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDEyICsxMDQw
LDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgICAgICBK
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7CiAgICAgICAgIFJl
ZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQo
KTsKICAgICAgICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2bS53
b3JrbGlzdCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKLSAgICAgICAgCiAgICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKICAgICAgICAgICAgIGNhbGxGcmFt
ZSwgbmV3Q29kZUJsb2NrLmdldCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsIGNhbGxi
YWNrLAotICAgICAgICAgICAgdm0ud29ya2xpc3QuZ2V0KCkpOworICAgICAgICAgICAgdm0uZW5z
dXJlV29ya2xpc3QoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA5LDYgKzcwOSwxNSBAQCB2
b2lkIFZNOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2CiAgICAgICAgIH0KICAgICB9
CiB9CisKK0RGRzo6V29ya2xpc3QqIFZNOjplbnN1cmVXb3JrbGlzdCgpCit7CisgICAgaWYgKCFl
bmFibGVDb25jdXJyZW50SklUKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghd29ya2xp
c3QpCisgICAgICAgIHdvcmtsaXN0ID0gREZHOjpnbG9iYWxXb3JrbGlzdCgpOworICAgIHJldHVy
biB3b3JrbGlzdC5nZXQoKTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5H
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTQ4NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNiArMTkzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB+Vk0oKTsKIAogICAgICAgICB2b2lkIG1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkg
eyBoZWFwLm1hY2hpbmVUaHJlYWRzKCkubWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKTsg
fQorICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAgICAgREZHOjpXb3JrbGlzdCog
ZW5zdXJlV29ya2xpc3QoKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIFJlZlB0cjxKU0xvY2s+IG1fYXBpTG9jazsK
</data>
<flag name="commit-queue"
          id="232169"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210150</attachid>
            <date>2013-08-30 12:36:33 -0700</date>
            <delta_ts>2013-08-30 13:23:50 -0700</delta_ts>
            <desc>I think I know what I&apos;m doing now</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32845</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0
ODU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
SW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgp
OwotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7
CiAKQEAgLTk2LDI1ICs5NCwyNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29t
cGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRpdmUKICAgICAvLyBlbm91Z2ggdG8g
YWxsb3cgZm9yIE9TUiBlbnRyeSB3aXRoIHRoZXNlIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1W
YXJzV2l0aFZhbHVlczsKLSAgICBpZiAob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgIGlmIChv
c3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVggJiYgb3NyRW50cnlCeXRlY29kZUluZGV4
KQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAg
IGVsc2UKICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgIFJlZlB0cjxQbGFuPiBw
bGFuID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50
cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBp
bnQgb3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwot
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAgICYmICFv
cGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFs
aXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAgICAvLyBVZ2gu
IElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQg
Z2FyYmFnZS4gSXQgd2lsbAotICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBk
b2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAg
ICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdy
b2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgLy8gc28gd2Ugc2Fu
aXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAgICAgICAgICAg
cGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tl
ZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0g
VUlOVF9NQVgpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4t
Pm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0Fy
Z3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgICAgIC8vIFVn
aC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9s
ZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2Vk
LiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywK
KyAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0
IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgICAg
ICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQu
CisgICAgICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYg
KzU5LDg5IEBAIHZvaWQgSklUQ29kZTo6c2hyaW5rVG9GaXQoKQogICAgIHZhcmlhYmxlRXZlbnRT
dHJlYW0uc2hyaW5rVG9GaXQoKTsKIH0KIAorI2lmIEVOQUJMRShGVExfSklUKQorYm9vbCBKSVRD
b2RlOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICByZXR1cm4gdGllclVwQ291bnRlci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFu
ZFNldChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9w
dGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7CisgICAgdGllclVwQ291bnRlci5zZXROZXdU
aHJlc2hvbGQoMCwgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6ZG9udE9wdGltaXplQW55dGltZVNvb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBOb3QgRlRMLW9wdGltaXppbmcgYW55dGltZSBzb29uLlxuIik7CisgICAgdGllclVwQ291bnRl
ci5kZWZlckluZGVmaW5pdGVseSgpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplQWZ0ZXJX
YXJtVXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBhZnRlciB3
YXJtLXVwLlxuIik7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAg
IGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExP
cHRpbWl6ZUFmdGVyV2FybVVwKCkpLAorICAgICAgICBiYXNlbGluZSk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6b3B0aW1pemVTb29uKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGlt
aXppbmcgc29vbi5cbiIpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAg
ICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9y
RlRMT3B0aW1pemVTb29uKCkpLAorICAgICAgICBiYXNlbGluZSk7Cit9CisKK3ZvaWQgSklUQ29k
ZTo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpj
b2RlQmxvY2ssICI6IEZvcmNpbmcgc2xvdyBwYXRoIGNvbmN1cnJlbnRseSBmb3IgRlRMIGVudHJ5
LlxuIik7CisgICAgdGllclVwQ291bnRlci5mb3JjZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9
CisKK3ZvaWQgSklUQ29kZTo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQpCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDoKKyAgICAgICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbihjb2RlQmxvY2spOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAgICAgICAgZG9udE9wdGlt
aXplQW55dGltZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24gPSB0cnVlOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVkOgorICAgICAgICBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52
YWxpZGF0ZWQ6CisgICAgICAgIC8vIFRoaXMgaXMgd2VpcmQgLSBpdCB3aWxsIG9ubHkgaGFwcGVu
IGluIGNhc2VzIHdoZW4gdGhlIERGRyBjb2RlIGJsb2NrIChpLmUuCisgICAgICAgIC8vIHRoZSBj
b2RlIGJsb2NrIHRoYXQgdGhpcyBKSVRDb2RlIGJlbG9uZ3MgdG8pIGlzIGFsc28gaW52YWxpZGF0
ZWQuIFNvIGl0CisgICAgICAgIC8vIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciB3aGF0IHdlIGRvLiBC
dXQsIHdlIGRvIHRoZSByaWdodCB0aGluZyBhbnl3YXkuIE5vdGUKKyAgICAgICAgLy8gdGhhdCB1
cyBjb3VudGluZyB0aGUgcmVvcHRpbWl6YXRpb24gYWN0dWFsbHkgbWVhbnMgdGhhdCB3ZSBtaWdo
dCBjb3VudCBpdAorICAgICAgICAvLyB0d2ljZS4gQnV0IHRoYXQncyBnZW5lcmFsbHkgT0suIEl0
J3MgYmV0dGVyIHRvIG92ZXJjb3VudCByZW9wdGltaXphdGlvbnMKKyAgICAgICAgLy8gdGhhbiBp
dCBpcyB0byB1bmRlcmNvdW50IHRoZW0uCisgICAgICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAgb3B0aW1pemVBZnRlcldhcm1V
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNv
dW50ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSnVtcFJlcGxhY2VtZW50
V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KQEAgLTkyLDkg
KzkzLDIyIEBAIHB1YmxpYzoKICAgICAgICAgd2F0Y2hwb2ludHMuYXBwZW5kKHdhdGNocG9pbnQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworI2lmIEVOQUJMRShGVExfSklUKQor
ICAgIC8vIE5CLiBBbGwgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVCbG9jayogYmVjYXVzZSB0
aGV5IG1heSB3YW50IHRvIHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxvZ2ljIGFib3V0IHNjYWxp
bmcgdGhyZXNob2xkcy4gSXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9jay4KKyAgICAKKyAgICBi
b29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayopOworICAg
IHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGRvbnRP
cHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVBZnRlcldh
cm1VcChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplU29vbihDb2RlQmxvY2sqKTsKKyAg
ICB2b2lkIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2NrKik7
CisgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogICAgIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgCisgICAgCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIg
dG8gY2FsbCBzZXRDb2RlUmVmKCkuCiAKQEAgLTEwNiw2ICsxMjAsMTAgQEAgcHVibGljOgogICAg
IFNlZ21lbnRlZFZlY3RvcjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBv
aW50czsKICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsK
ICAgICBERkc6Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRERkc7CisjaWYgRU5BQkxFKEZUTF9KSVQp
CisgICAgRXhlY3V0aW9uQ291bnRlciB0aWVyVXBDb3VudGVyOworICAgIFJlZlB0cjxDb2RlQmxv
Y2s+IG9zckVudHJ5QmxvY2s7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0NywzNCBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT1NSIGlu
ICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKKyAgICAg
ICAgICAgICJERkcgT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwg
KmNvZGVCbG9jaywKICAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4i
KTsKICAgICB9CiAgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICAvLyBXaGVuIHdp
bGwgdGhpcyBoYXBwZW4/IFdlIGNvdWxkIGhhdmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0g
QW4gZXhpdCBmcm9tIHRoZSBGVEwgSklUIGludG8gdGhlIGJhc2VsaW5lIEpJVCBmb2xsb3dlZCBi
eSBhbiBhdHRlbXB0CisgICAgICAgIC8vICAgdG8gcmVlbnRlci4gV2UncmUgZmluZSB3aXRoIGFs
bG93aW5nIHRoaXMgdG8gZmFpbC4gSWYgaXQgaGFwcGVucworICAgICAgICAvLyAgIGVub3VnaCB3
ZSdsbCBqdXN0IHJlb3B0aW1pemUuIEl0IGJhc2ljYWxseSBtZWFucyB0aGF0IHRoZSBPU1IgZXhp
dCBjb3N0CisgICAgICAgIC8vICAgdXMgZGVhcmx5IGFuZCBzbyByZW9wdGltaXppbmcgaXMgdGhl
IHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIGhhdmUgcmVj
dXJzaXZlIGNvZGUgd2l0aCBob3QgbG9vcHMuIENvbnNpZGVyIHRoYXQgZm9vIGhhcyBhIGhvdCBs
b29wCisgICAgICAgIC8vICAgdGhhdCBjYWxscyBpdHNlbGYuIFdlIGhhdmUgdHdvIGZvbydzIG9u
IHRoZSBzdGFjaywgbGV0cyBjYWxsIHRoZW0gZm9vMQorICAgICAgICAvLyAgIGFuZCBmb28yLCB3
aXRoIGZvbzEgaGF2aW5nIGNhbGxlZCBmb28yIGZyb20gZm9vJ3MgaG90IGxvb3AuIGZvbzIgZ2V0
cworICAgICAgICAvLyAgIG9wdGltaXplZCBhbGwgdGhlIHdheSBpbnRvIHRoZSBGVEwuIFRoZW4g
aXQgcmV0dXJucyBpbnRvIGZvbzEsIGFuZCB0aGVuCisgICAgICAgIC8vICAgZm9vMSB3YW50cyB0
byBnZXQgb3B0aW1pemVkLiBJdCBtaWdodCByZWFjaCB0aGlzIGNvbmNsdXNpb24gZnJvbSBpdHMK
KyAgICAgICAgLy8gICBob3QgbG9vcCBhbmQgYXR0ZW1wdCB0byBPU1IgZW50ZXIuIEFuZCB3ZSds
bCB0ZWxsIGl0IHRoYXQgaXQgY2FuJ3QuIEl0CisgICAgICAgIC8vICAgbWlnaHQgYmUgd29ydGgg
YWRkcmVzc2luZyB0aGlzIGNhc2UsIGJ1dCBJIGp1c3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAg
ICAgICAgLy8gICBiZSBzdXBlciByYXJlLiBGb3Igbm93LCBpZiBpdCBkb2VzIGhhcHBlbiwgaXQn
bGwgY2F1c2Ugc29tZSBjb21waWxhdGlvbgorICAgICAgICAvLyAgIHRocmFzaGluZy4KKyAgICAg
ICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJnZXQgY29kZSBibG9jayBpcyBub3Qg
REZHLlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAgICBPU1JFbnRyeURh
dGEqIGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFbnRyeURhdGFGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGlmICghZW50cnkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBpcyBvbmx5IGZvciBjb21waWxhdGlv
biBwaXBlbGluZXMgdGhhdCBnbyB0aHJvdWdoIFNTQS4KKy8vCisvLyBDcmVhdGVzIGFuIE9TUiBl
bnRyeXBvaW50IHRoYXQgZXN0YWJsaXNoZXMgYWxsIGFyZ3VtZW50IGFuZCBsb2NhbCB2YXJpYWJs
ZQorLy8gdmFsdWVzLiBBbHNvIGFjY2VwdHMgYSBieXRlY29kZSBpbmRleCBpbmRpY2F0aW5nIHdo
ZXJlIHdlIHdhbnQgdG8gZW50ZXIuCisvLyBVc2VzIGEga2luZCBvZiBzd2l0Y2ggc3RhdGVtZW50
IHRvIGRlY2lkZSB3aGljaCBiYXNpYyBibG9jayB0byBnbyB0by4gV2UKKy8vIGNvbXBpbGUgYWxs
IGxvb3AgaGVhZGVycyB0aGF0IGhhdmUgYW4gZW1wdHkgaW5saW5lIGNhbGwgZnJhbWUgYXMgcG9z
c2libGUKKy8vIGVudHJ5cG9pbnRzLCBidXQgd2Ugc2tpcCBhcm91bmQgdGhlIGZ1bmN0aW9uJ3Mg
cHJvbG9ndWUgYW5kIGFueXRoaW5nIG5vdAorLy8gZG9taW5hdGVkIGJ5IGxvb3AgaGVhZGVycy4K
KworYm9vbCBwZXJmb3JtT1NSRW50cnlwb2ludENyZWF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMTUsNiArMjAxNSwxNjggQEAgZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJp
Z2dlclJlbwogICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogfQogCisjaWYgRU5BQkxFKEZU
TF9KSVQpCit2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEpJ
VENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNv
dW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7Cisg
ICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZh
aWxGVExDb21waWxhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQor
ICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUu
XG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZWJsb2Nr
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5v
dCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAg
ICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gdm0ud29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAg
d29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAg
ICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
LCBGVExNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlz
dDo6Tm90S25vd247CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNv
bXBpbGluZykgeworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1l
bnQoKSkgeworICAgICAgICAvLyBUaGF0J3MgZ3JlYXQsIHdlJ3ZlIGNvbXBpbGVkIHRoZSBjb2Rl
IC0gbmV4dCB0aW1lIHdlIGNhbGwgdGhpcyBmdW5jdGlvbiwKKyAgICAgICAgLy8gd2UnbGwgZW50
ZXIgdGhhdCByZXBsYWNlbWVudC4KKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29y
a2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBmaW5pc2hl
ZCBjb21waWxpbmcsIGJ1dCBmYWlsZWQgc29tZWhvdzsgaW4gdGhhdCBjYXNlIHRoZQorICAgICAg
ICAvLyB0aHJlc2hvbGRzIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIs
ICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBX
ZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCisgICAgREZHOjpjb21waWxlKAorICAgICAgICBl
eGVjLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFY
LAorICAgICAgICBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCks
IHZtLmVuc3VyZVdvcmtsaXN0KCkpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJP
U1JFbnRyeU5vdyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBKSVRDb2RlKiBqaXRDb2Rl
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIAorICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ss
ICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAg
ICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgaW5k
ZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWlsdXJlLlxuIik7CisgICAgICAg
IGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVibG9jayk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5jaGVja0lmT3B0aW1pemF0aW9u
VGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gRlRMLW9wdGlt
aXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKFdvcmtsaXN0
KiB3b3JrbGlzdCA9IHZtLndvcmtsaXN0LmdldCgpKSB7CisgICAgICAgIHdvcmtsaXN0U3RhdGUg
PSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCisgICAgICAgICAgICB2bSwg
Q29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50
cnlNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6
Tm90S25vd247CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBp
bGluZykgeworICAgICAgICBBU1NFUlQoIWppdENvZGUtPm9zckVudHJ5QmxvY2spOworICAgICAg
ICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0
KCkpIHsKKyAgICAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeShl
eGVjLCBlbnRyeUJsb2NrLCBieXRlY29kZUluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBhZGRy
ZXNzOworICAgICAgICAKKyAgICAgICAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29k
ZSA9IGVudHJ5QmxvY2stPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgICAgIGVudHJ5Q29kZS0+Y291
bnRFbnRyeUZhaWx1cmUoKTsKKyAgICAgICAgaWYgKGVudHJ5Q29kZS0+ZW50cnlGYWlsdXJlQ291
bnQoKSA8CisgICAgICAgICAgICBPcHRpb25zOjpmdGxPU1JFbnRyeUZhaWx1cmVDb3VudEZvclJl
b3B0aW1pemF0aW9uKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaml0Q29kZS0+b3B0
aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gT1NSIGVudHJ5IGZhaWxlZC4gT2ggbm8hIFRoaXMgaW1wbGll
cyB0aGF0IHdlIG5lZWQgdG8gcmV0cnkuIFdlIHJldHJ5CisgICAgICAgIC8vIHdpdGhvdXQgZXhw
b25lbnRpYWwgYmFja29mZiBhbmQgd2Ugb25seSBkbyB0aGlzIGZvciB0aGUgZW50cnkgY29kZSBi
bG9jay4KKyAgICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jay5jbGVhcigpOworICAgICAgICAK
KyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xp
c3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBjb21waWxhdGlvbiBm
YWlsZWQgYW5kIHdlIGFscmVhZHkgc2V0IHRoZSB0aHJlc2hvbGRzLgorICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAq
Y29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXpl
ZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhl
IGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIHRyaWdnZXIgYSBmb3ItZW50cnkgY29tcGls
ZS4KKyAgICBDb21waWxhdGlvblJlc3VsdCBmb3JFbnRyeVJlc3VsdCA9IERGRzo6Y29tcGlsZSgK
KyAgICAgICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExGb3JP
U1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgIERGR1RvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLCB2bS5lbnN1cmVXb3JrbGlzdCgp
KTsKKyAgICAKKyAgICAvLyBCdXQgd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgYSByZXBsYWNlbWVu
dCBjb21waWxlLiBPZiBjb3Vyc2UsIHdlIGRvbid0IHdhbnQgdG8KKyAgICAvLyB0cmlnZ2VyIGl0
IGlmIHdlIGRvbid0IG5lZWQgdG8uIE5vdGUgdGhhdCB0aGlzIGlzIGtpbmQgb2Ygd2VpcmQgYmVj
YXVzZSB3ZSBtaWdodAorICAgIC8vIGhhdmUganVzdCBmaW5pc2hlZCBhbiBGVEwgY29tcGlsZSBh
bmQgdGhhdCBjb21waWxlIGZhaWxlZCBvciB3YXMgaW52YWxpZGF0ZWQuCisgICAgLy8gQnV0IHRo
aXMgc2VlbXMgdW5jb21tb24gZW5vdWdoIHRoYXQgd2Ugc29ydCBvZiBkb24ndCBjYXJlLiBJdCdz
IGNlcnRhaW5seSBzb3VuZAorICAgIC8vIHRvIGZpcmUgb2ZmIGFub3RoZXIgY29tcGlsZSByaWdo
dCBub3cgc28gbG9uZyBhcyB3ZSdyZSBub3QgYWxyZWFkeSBjb21waWxpbmcgYW5kCisgICAgLy8g
d2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudC4KKyAgICBDb21w
aWxhdGlvbktleSBrZXlGb3JSZXBsYWNlbWVudChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
LCBGVExNb2RlKTsKKyAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
KQorICAgICAgICAmJiAoIXZtLndvcmtsaXN0LmdldCgpCisgICAgICAgICAgICB8fCB2bS53b3Jr
bGlzdC0+Y29tcGlsYXRpb25TdGF0ZShrZXlGb3JSZXBsYWNlbWVudCkgIT0gV29ya2xpc3Q6Ok5v
dEtub3duKSkgeworICAgICAgICBERkc6OmNvbXBpbGUoCisgICAgICAgICAgICBleGVjLCBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLAorICAgICAg
ICAgICAgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLCB2bS5l
bnN1cmVXb3JrbGlzdCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8g
SXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmb3ItZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1Y2NlZWRl
ZC4gSW4gdGhhdCBjYXNlIE9TUgorICAgIC8vIGVudHJ5ICptdXN0KiBzdWNjZWVkLgorICAgIHZv
aWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeShleGVjLCBqaXRDb2RlLT5vc3JFbnRy
eUJsb2NrLmdldCgpLCBieXRlY29kZUluZGV4KTsKKyAgICBSRUxFQVNFX0FTU0VSVChhZGRyZXNz
KTsKKyAgICByZXR1cm4gYWRkcmVzczsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwog
fSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTQ4NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAyLDYgKzMwMiwxMSBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25Q
cmludFNwCiAKIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29k
ZUJsb2NrKikgV1RGX0lOVEVSTkFMOwogCisjaWYgRU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19P
UEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KSBXVEZfSU5URVJOQUw7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
IH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25O
ZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTU0ODU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29y
a2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7Ci0gICAgaWYgKCFlbmFi
bGVDb25jdXJyZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHB0aHJlYWRfb25jZSgm
aW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0
T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0ODU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5
ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgd29y
a2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhlIHJpZ2h0IHRoaW5nIHRv
IGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBmdW5jdGlvbgogLy8gd2ls
bCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8KLS8vIFRoaXMgcmV0dXJu
cyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBkb2luZyBjb25jdXJyZW50
Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorI2RlZmluZSBGVExGb3JPU1JFbnRy
eUpJVENvZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCisvLyBPU1IgZW50cnkgaW50byB0aGUgRlRMIGhhcyBhIG51bWJlciBvZiBx
dWlya3M6CisvLworLy8gLSBPU1IgZW50cnkgb25seSBoYXBwZW5zIHRocm91Z2ggc3BlY2lhbCBP
U1IgZW50cnkgY29tcGlsYXRpb25zLiBUaGV5IGhhdmUgdGhlaXIKKy8vICAgb3duIENvZGVCbG9j
ayBhbmQgdGhlaXIgb3duIEpJVENvZGUuCisvLworLy8gLSBXZSBvbmx5IE9TUiBlbnRlciBpbiBs
b29wIGhlYWRlcnMgdGhhdCBoYXZlIGEgbnVsbCBpbmxpbmUgY2FsbCBmcmFtZS4KKy8vCisvLyAt
IEVhY2ggT1NSIGVudHJ5IGNvbXBpbGF0aW9uIGFsbG93cyBlbnRyeSB0aHJvdWdoIG9ubHkgb25l
IGJ5dGVjb2RlIGluZGV4LgorCitjbGFzcyBGb3JPU1JFbnRyeUpJVENvZGUgOiBwdWJsaWMgRlRM
OjpKSVRDb2RlIHsKK3B1YmxpYzoKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUoKTsKKyAgICB+Rm9y
T1NSRW50cnlKSVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplRW50cnlCdWZmZXIo
Vk0mLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpOworICAgIFNjcmF0Y2hCdWZmZXIqIGVu
dHJ5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUJ1ZmZlcjsgfQorICAgIAorICAgIHZv
aWQgc2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCB2YWx1ZSkgeyBtX2J5dGVjb2RlSW5kZXggPSB2
YWx1ZTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVjb2RlSW5kZXg7IH0KKyAgICAKKyAgICB2b2lkIGNvdW50RW50cnlGYWlsdXJlKCk7CisgICAg
dW5zaWduZWQgZW50cnlGYWlsdXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5RmFpbHVy
ZUNvdW50OyB9CisgICAgCisgICAgRm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgp
OworICAgIAorcHJpdmF0ZToKKyAgICBTY3JhdGNoQnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBP
bmx5IGZvciBPU1IgZW50cnkgY29kZSBibG9ja3MuCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUlu
ZGV4OworICAgIHVuc2lnbmVkIG1fZW50cnlGYWlsdXJlQ291bnQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRkxUX0pJVCkKKworI2VuZGlmIC8v
IEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywxMSBA
QCBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
dm9pZCBKSVRDb2RlOjppbml0aWFsaXplRW50cnlCdWZmZXIoVk0mIHZtLCB1bnNpZ25lZCBudW1D
YWxsZWVSZWdpc3RlcnMpCit7CisgICAgbV9lbnRyeUJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJG
b3JTaXplKG51bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworfQor
CiBKSVRDb2RlOjpDb2RlUHRyIEpJVENvZGU6OmV4aXRUaHVua3MoKQogewogICAgIHJldHVybiBt
X2V4aXRUaHVua3MuY29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRD
b2RlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIHB1YmxpYzoKICAgICBz
aXplX3Qgc2l6ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCopOwogICAgIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsK
KyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlC
dWZmZXI7IH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwog
ICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4pOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoQ29kZVJlZiBlbnRyeXBvaW50KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiAr
NjYsMTIgQEAgRlRMOjpKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQog
CitGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogSklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBh
c3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYg
Y29kZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9z
dENhbGxUaHVuaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlz
aW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24oKTsKICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7
CiAgICAgdmlydHVhbCBGVEw6OkpJVENvZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JP
U1JFbnRyeUpJVENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVj
dXRlKEpTU3RhY2sqLCBDYWxsRnJhbWUqLCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDEyICsx
MDQwLDkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgICAg
ICBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7CiAgICAgICAg
IFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2
bS53b3JrbGlzdCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKLSAgICAgICAgCiAgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKICAgICAgICAgICAgIGNhbGxG
cmFtZSwgbmV3Q29kZUJsb2NrLmdldCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsIGNh
bGxiYWNrLAotICAgICAgICAgICAgdm0ud29ya2xpc3QuZ2V0KCkpOworICAgICAgICAgICAgdm0u
ZW5zdXJlV29ya2xpc3QoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNTQsMTUgKzEwNTEs
NiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICBDb2RlQmxvY2sq
IG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKICAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgp
KSk7CiAgICAgCi0gICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkZUTEpJVCkgewotICAgICAgICAvLyBGVEwgSklUIGRvZXNuJ3Qgc3VwcG9ydCBPU1IgZW50
cnkgeWV0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzNjI1Ci0gICAgICAgIAotICAgICAgICAvLyBEb24ndCBhdHRlbXB0IE9TUiBlbnRyeSBh
Z2Fpbi4KLSAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpw
cmVwYXJlT1NSRW50cnkoY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5k
ZXgpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAg
IGRhdGFMb2coCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwOSw2ICs3MDksMTUgQEAgdm9pZCBWTTo6Z2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydgogICAgICAgICB9CiAgICAgfQogfQorCitERkc6OldvcmtsaXN0KiBWTTo6
ZW5zdXJlV29ya2xpc3QoKQoreworICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERG
Rzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBt
YWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2Nr
PiBtX2FwaUxvY2s7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210154</attachid>
            <date>2013-08-30 13:23:50 -0700</date>
            <delta_ts>2013-08-30 16:20:54 -0700</delta_ts>
            <desc>it&apos;s sort of getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38396</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUzLDYgKzMxNTMsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7
CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0ODU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAotICAgIEFTU0VSVChvc3JFbnRy
eUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdK
SVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAKQEAgLTk2LDI1ICs5NCwyNyBAQCBzdGF0aWMg
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2Yg
bXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25z
ZXJ2YXRpdmUKICAgICAvLyBlbm91Z2ggdG8gYWxsb3cgZm9yIE9TUiBlbnRyeSB3aXRoIHRoZXNl
IHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKLSAgICBpZiAob3NyRW50
cnlCeXRlY29kZUluZGV4KQorICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9N
QVggJiYgb3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9
IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGVsc2UKICAgICAgICAgbnVtVmFyc1dpdGhWYWx1
ZXMgPSAwOwogICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQ
bGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZh
bHVlcykpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVW
YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkKLSAgICAgICAgICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQotICAg
ICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAg
ICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7Ci0gICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRo
ZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAotICAgICAgICAgICAg
Ly8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRv
IHRoZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4g
YWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2Vz
LAotICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGlu
dG8gVW5kZWZpbmVkLgotICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpz
VW5kZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRs
ZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgIGlm
IChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvcklu
ZGV4KGkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAg
ICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAg
ICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAg
ICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVj
dCkgeworICAgICAgICAgICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3Rvciwg
dGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAg
ICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1
dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFz
IHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQg
REZHIHBhc3NlcywKKyAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5
IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCisgICAgICAgICAgICAgICAgcGxhbi0+bXVzdEhh
bmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihv
cGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKHdvcmts
aXN0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
NTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5OCw2ICs2OTgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50
czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1l
bnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOworICAgIEJpdFZlY3Rv
ciBtX2xhenlWYXJzOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIE5hdHVyYWxM
b29wcyBtX25hdHVyYWxMb29wczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0ODUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNiArNTksODkgQEAgdm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFy
aWFibGVFdmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwogfQogCisjaWYgRU5BQkxFKEZUTF9KSVQp
Citib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVyLmNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworfQorCit2b2lk
IEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2Nr
LCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAgICB0aWVyVXBDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKK30K
Kwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpj
b2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNvb24uXG4iKTsKKyAgICB0
aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6b3B0
aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZUTC1vcHRpbWl6
aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9s
ZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVz
aG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAgIGJhc2VsaW5lKTsKK30K
Kwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJl
c2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJhc2VsaW5lKTsKK30KKwor
dm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
IGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGggY29uY3VycmVudGx5IGZv
ciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJy
ZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGls
YXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKGNvZGVCbG9j
ayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAg
ICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9IHRydWU7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29t
cGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCAtIGl0IHdpbGwg
b25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNvZGUgYmxvY2sgKGkuZS4KKyAgICAg
ICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENvZGUgYmVsb25ncyB0bykgaXMgYWxz
byBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9lc24ndCByZWFsbHkgbWF0dGVyIHdo
YXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5nIGFueXdheS4gTm90ZQorICAgICAg
ICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXphdGlvbiBhY3R1YWxseSBtZWFucyB0
aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3aWNlLiBCdXQgdGhhdCdzIGdlbmVy
YWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJlb3B0aW1pemF0aW9ucworICAgICAg
ICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4KKyAgICAgICAgY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTU0ODUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09T
UkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisjaW5jbHVkZSAi
RXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKdW1w
UmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5o
PgpAQCAtOTIsOSArOTMsMjIgQEAgcHVibGljOgogICAgICAgICB3YXRjaHBvaW50cy5hcHBlbmQo
d2F0Y2hwb2ludCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisgICAgLy8gTkIuIEFsbCBvZiB0aGVzZSBtZXRob2RzIHRha2UgQ29kZUJsb2Nr
KiBiZWNhdXNlIHRoZXkgbWF5IHdhbnQgdG8gdXNlCisgICAgLy8gQ29kZUJsb2NrJ3MgbG9naWMg
YWJvdXQgc2NhbGluZyB0aHJlc2hvbGRzLiBJdCBzaG91bGQgYmUgYSBERkcgQ29kZUJsb2NrLgor
ICAgIAorICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoQ29kZUJs
b2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9jayopOworICAg
IHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVTb29uKENvZGVC
bG9jayopOworICAgIHZvaWQgZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseShD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21w
aWxhdGlvblJlc3VsdChDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgICAgICAK
KyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBK
SVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KIApAQCAtMTA2LDYgKzEyMCwxMCBAQCBw
dWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQsIDEs
IDA+IHdhdGNocG9pbnRzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2
ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKyAgICBFeGVjdXRpb25Db3VudGVyIHRpZXJVcENvdW50ZXI7CisgICAgUmVm
UHRyPENvZGVCbG9jaz4gb3NyRW50cnlCbG9jazsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEg
KzQ3LDM0IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKIAogICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICJPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJs
b2NrLAorICAgICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSwgIiAtPiAiLCAqY29kZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2Rl
SW5kZXgsICJcbiIpOwogICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAg
IC8vIFdoZW4gd2lsbCB0aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gLSBBbiBleGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUgYmFzZWxpbmUgSklU
IGZvbGxvd2VkIGJ5IGFuIGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVudGVyLiBXZSdyZSBm
aW5lIHdpdGggYWxsb3dpbmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5zCisgICAgICAgIC8v
ICAgZW5vdWdoIHdlJ2xsIGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQg
dGhlIE9TUiBleGl0IGNvc3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5kIHNvIHJlb3B0aW1p
emluZyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0g
V2UgaGF2ZSByZWN1cnNpdmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lkZXIgdGhhdCBmb28g
aGFzIGEgaG90IGxvb3AKKyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2VsZi4gV2UgaGF2ZSB0
d28gZm9vJ3Mgb24gdGhlIHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisgICAgICAgIC8vICAg
YW5kIGZvbzIsIHdpdGggZm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBmb28ncyBob3QgbG9v
cC4gZm9vMiBnZXRzCisgICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUgd2F5IGludG8gdGhl
IEZUTC4gVGhlbiBpdCByZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAgICAgICAgLy8gICBm
b28xIHdhbnRzIHRvIGdldCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRoaXMgY29uY2x1c2lv
biBmcm9tIGl0cworICAgICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0IHRvIE9TUiBlbnRl
ci4gQW5kIHdlJ2xsIHRlbGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAgICAgLy8gICBtaWdo
dCBiZSB3b3J0aCBhZGRyZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0aGluayB0aGlzIGNh
c2Ugd2lsbAorICAgICAgICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3csIGlmIGl0IGRvZXMg
aGFwcGVuLCBpdCdsbCBjYXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAgIC8vICAgdGhyYXNo
aW5nLgorICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIGJs
b2NrIGlzIG5vdCBERkcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAg
IE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVu
dHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFl
bnRyeSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGVudHJ5
cG9pbnQgY3JlYXRpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5
Qnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgICAg
ICAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IG1fZ3JhcGgubV9wcm9maWxlZEJsb2Nr
OworICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0OworICAg
ICAgICAKKyAgICAgICAgbV90YXJnZXQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luID09IGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBtX3RhcmdldCA9IGJsb2NrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3RhcmdldCkgeworICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHRlcnJpYmxlIG91dGNvbWUuIEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4g
YnV0IGl0IG1pZ2h0CisgICAgICAgICAgICAvLyBoYXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZl
bmQgYWdhaW5zdCBpdC4gSWYgaXQgaGFwcGVucywgdGhlbiB0aGlzCisgICAgICAgICAgICAvLyBj
b21waWxhdGlvbiBpcyBhIGZhaWx1cmUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fbmV3Um9vdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dCgwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBiYXNlbGluZS0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KQorICAgICAgICAgICAgY3Jl
YXRlU2V0QXJndW1lbnQoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKTsKKyAgICAgICAgZm9y
IChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsg
Kytsb2NhbCkKKyAgICAgICAgICAgIGNyZWF0ZVNldEFyZ3VtZW50KGxvY2FsKTsKKyAgICAgICAg
CisgICAgICAgIG1fbmV3Um9vdC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwg
bV90YXJnZXQtPmF0KDApLT5jb2RlT3JpZ2luLCBPcEluZm8obV90YXJnZXQpKTsKKyAgICAgICAg
cmV0dXJuIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgY3JlYXRlU2V0QXJndW1lbnQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICAvLyBGSVhN
RTogSXQgbWlnaHQgYWN0dWFsbHkgYmUgYmV0dGVyIHRvIHJ1biB0aGlzIGFmdGVyIHVuaWZpY2F0
aW9uIGFuZCBldmVuCisgICAgICAgIC8vIGFmdGVyIHByZWRpY3Rpb24gaW5qZWN0aW9uLi4uCisg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGNvZGVCbG9jaygpLT5pc0NhcHR1cmVkKG9wZXJhbmQpKTsK
KyAgICAgICAgCisgICAgfQorICAgIAorICAgIEJhc2ljQmxvY2sqIG1fdGFyZ2V0OworICAgIEJh
c2ljQmxvY2sqIG1fbmV3Um9vdDsKK307CisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVh
dGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBPU1IgRW50cnlwb2ludCBDcmVhdGlvbiIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZV9oCisjZGVmaW5lIERGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIFRoaXMgcGhhc2UgaXMgb25seSBmb3IgY29tcGlsYXRpb24gcGlwZWxpbmVzIHRo
YXQgZ28gdGhyb3VnaCBTU0EsIGFuZCB0aGF0CisvLyBkbyBhIHNwZWNpYWxpemVkIE9TUiBlbnRy
eSBjb21waWxlLiBDdXJyZW50bHkgdGhhdCBtZWFucyBGVEwuCisvLworLy8gQ3JlYXRlcyBhbiBP
U1IgZW50cnlwb2ludCB0aGF0IGVzdGFibGlzaGVzIGFsbCBhcmd1bWVudCBhbmQgbG9jYWwgdmFy
aWFibGUKKy8vIHZhbHVlcy4gVGhpcyBlbnRyeXBvaW50IG9ubHkgd29ya3MgZm9yIHRoZSBQbGFu
Ojpvc3JFbnRyeUJ5dGVjb2RlSW5kZXguCisvLyBVbmxpa2Ugb3JkaW5hcnkgT1NSIGVudHJ5IGlu
dG8gdGhlIERGRywgdGhpcyBmb3JjZXMgYWxsIHZhcmlhYmxlcyBzbHVycGVkCisvLyBpbiB0aHJv
dWdoIE9TUiBlbnRyeSB0byBhcHBlYXIgVE9QIHRvIHRoZSBDRkEuIEhlbmNlIHRoaXMgcGhhc2Ug
bXVzdCBiZSBydW4KKy8vIGVhcmx5IC0gYmVmb3JlIGRvaW5nIGFueSBDRkEuIEJ1dCB0aGlzIGFs
c28gZG9lcyBzb21lIGFkZGl0aW9uYWwgaGFja3MgdGhhdAorLy8gcmVxdWlyZSB0aGlzIHRvIHJ1
biBiZWZvcmUgdW5pZmljYXRpb24uCisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE1LDYgKzIwMTUsMTY4IEBAIGV4dGVybiAiQyIg
dm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW8KICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
KTsKIH0KIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJU
aWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKKyAgICAKKyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZygpOworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRp
ZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRp
ZXJVcENvdW50ZXIsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwt
b3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhl
cmUgd2FzIGFuIEZUTCBmYWlsdXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6
ZUFueXRpbWVTb29uKGNvZGVibG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFqaXRDb2RlLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2Rl
QmxvY2spKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAg
ICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIg
eWV0LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0
YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLndvcmts
aXN0LmdldCgpKSB7CisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVB
bGxSZWFkeVBsYW5zRm9yVk0oCisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3
b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlz
dFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0
aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVm
ZXJyZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2st
Pmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgLy8gVGhhdCdzIGdyZWF0LCB3
ZSd2ZSBjb21waWxlZCB0aGUgY29kZSAtIG5leHQgdGltZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24s
CisgICAgICAgIC8vIHdlJ2xsIGVudGVyIHRoYXQgcmVwbGFjZW1lbnQuCisgICAgICAgIGppdENv
ZGUtPm9wdGltaXplU29vbigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
ICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2UgZmluaXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGlu
IHRoYXQgY2FzZSB0aGUKKyAgICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3By
aWF0ZWx5LgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAg
ZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQg
ZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgorICAgIERG
Rzo6Y29tcGlsZSgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdl
dCgpLCBGVExNb2RlLCBVSU5UX01BWCwKKyAgICAgICAgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLCB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciog
REZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhl
YXApOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAg
CisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAg
ICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBl
eGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAi
XG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkt
Pm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBv
ZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwg
ZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29vbihj
b2RlYmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghaml0Q29k
ZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hv
b3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0
YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2bS53b3JrbGlzdC5nZXQoKSkgewor
ICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKAorICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCksIEZUTEZvck9TUkVudHJ5TW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3Jr
bGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0
YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlLT5v
c3JFbnRyeUJsb2NrKTsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRD
b2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpKSB7CisgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0g
RlRMOjpwcmVwYXJlT1NSRW50cnkoZXhlYywgZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCkpCisg
ICAgICAgICAgICByZXR1cm4gYWRkcmVzczsKKyAgICAgICAgCisgICAgICAgIEZUTDo6Rm9yT1NS
RW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUJsb2NrLT5mdGxGb3JPU1JFbnRyeSgpOwor
ICAgICAgICBlbnRyeUNvZGUtPmNvdW50RW50cnlGYWlsdXJlKCk7CisgICAgICAgIGlmIChlbnRy
eUNvZGUtPmVudHJ5RmFpbHVyZUNvdW50KCkgPAorICAgICAgICAgICAgT3B0aW9uczo6ZnRsT1NS
RW50cnlGYWlsdXJlQ291bnRGb3JSZW9wdGltaXphdGlvbigpKSB7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE9TUiBlbnRyeSBmYWls
ZWQuIE9oIG5vISBUaGlzIGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHJldHJ5LiBXZSByZXRyeQor
ICAgICAgICAvLyB3aXRob3V0IGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIHdlIG9ubHkgZG8gdGhp
cyBmb3IgdGhlIGVudHJ5IGNvZGUgYmxvY2suCisgICAgICAgIGppdENvZGUtPm9zckVudHJ5Qmxv
Y2suY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJt
VXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlmICh3
b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgY29tcGlsYXRpb24gZmFpbGVkIGFuZCB3ZSBhbHJlYWR5IHNldCB0aGUgdGhyZXNo
b2xkcy4KKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRv
ZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB0cmln
Z2VyIGEgZm9yLWVudHJ5IGNvbXBpbGUuCisgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlS
ZXN1bHQgPSBERkc6OmNvbXBpbGUoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFj
ZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAg
ICBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUo
KSwgdm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgCisgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0
byB0cmlnZ2VyIGEgcmVwbGFjZW1lbnQgY29tcGlsZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50
IHRvCisgICAgLy8gdHJpZ2dlciBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhp
cyBpcyBraW5kIG9mIHdlaXJkIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAvLyBoYXZlIGp1c3QgZmlu
aXNoZWQgYW4gRlRMIGNvbXBpbGUgYW5kIHRoYXQgY29tcGlsZSBmYWlsZWQgb3Igd2FzIGludmFs
aWRhdGVkLgorICAgIC8vIEJ1dCB0aGlzIHNlZW1zIHVuY29tbW9uIGVub3VnaCB0aGF0IHdlIHNv
cnQgb2YgZG9uJ3QgY2FyZS4gSXQncyBjZXJ0YWlubHkgc291bmQKKyAgICAvLyB0byBmaXJlIG9m
ZiBhbm90aGVyIGNvbXBpbGUgcmlnaHQgbm93IHNvIGxvbmcgYXMgd2UncmUgbm90IGFscmVhZHkg
Y29tcGlsaW5nIGFuZAorICAgIC8vIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQuCisgICAgQ29tcGlsYXRpb25LZXkga2V5Rm9yUmVwbGFjZW1lbnQoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSk7CisgICAgaWYgKCFjb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKKyAgICAgICAgJiYgKCF2bS53b3JrbGlzdC5nZXQoKQor
ICAgICAgICAgICAgfHwgdm0ud29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFj
ZW1lbnQpICE9IFdvcmtsaXN0OjpOb3RLbm93bikpIHsKKyAgICAgICAgREZHOjpjb21waWxlKAor
ICAgICAgICAgICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExN
b2RlLCBVSU5UX01BWCwKKyAgICAgICAgICAgIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoKSwgdm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgfQorICAgIAorICAg
IGlmIChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVudHJ5IGNv
bXBpbGUgYWxyZWFkeSBzdWNjZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKKyAgICAvLyBlbnRyeSAq
bXVzdCogc3VjY2VlZC4KKyAgICB2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnko
ZXhlYywgaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSwgYnl0ZWNvZGVJbmRleCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoYWRkcmVzcyk7CisgICAgcmV0dXJuIGFkZHJlc3M7Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKIH0gLy8gZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw2ICszMDIsMTEgQEAgdm9pZCBERkdfT1BF
UkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogCiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dl
clJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRFUk5BTDsKIAorI2lmIEVOQUJM
RShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3co
RXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3Bl
cmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFy
cmF5VHlwZSB0eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsOCArMjc3LDYgQEAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZQogCiBXb3JrbGlzdCogZ2xvYmFsV29ya2xp
c3QoKQogewotICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQotICAgICAgICByZXR1cm4g
MDsKICAgICBwdGhyZWFkX29uY2UoJmluaXRpYWxpemVHbG9iYWxXb3JrbGlzdEtleU9uY2UsIGlu
aXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2UpOwogICAgIHJldHVybiB0aGVHbG9iYWxXb3JrbGlz
dDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlz
aW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNiBAQCBwcml2YXRlOgogLy8gRm9yIG5vdyB3ZSB1
c2UgYSBzaW5nbGUgZ2xvYmFsIHdvcmtsaXN0LiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMKIC8v
IGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgYnV0IGl0IGlzIHdoYXQgd2UgZG8sIGZvciBub3cu
IFRoaXMgZnVuY3Rpb24KIC8vIHdpbGwgbGF6aWx5IGNyZWF0ZSBvbmUgd2hlbiBpdCdzIG5lZWRl
ZC4KLS8vCi0vLyBUaGlzIHJldHVybnMgbnVsbCBpZiBmb3IgYW55IHJlYXNvbiB3ZSBzaG91bGRu
J3QgYmUgZG9pbmcgY29uY3VycmVudAotLy8gY29tcGlsYXRpb24uCiBXb3JrbGlzdCogZ2xvYmFs
V29ya2xpc3QoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gK
KyNkZWZpbmUgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGludG8gdGhl
IEZUTCBoYXMgYSBudW1iZXIgb2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9ubHkgaGFw
cGVucyB0aHJvdWdoIHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBoYXZlIHRo
ZWlyCisvLyAgIG93biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8KKy8vIC0g
V2Ugb25seSBPU1IgZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwgaW5saW5l
IGNhbGwgZnJhbWUuCisvLworLy8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBhbGxvd3Mg
ZW50cnkgdGhyb3VnaCBvbmx5IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9yT1NSRW50
cnlKSVRDb2RlIDogcHVibGljIEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9yT1NSRW50
cnlKSVRDb2RlKCk7CisgICAgfkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsK
KyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlC
dWZmZXI7IH0KKyAgICAKKyAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUp
IHsgbV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBjb3Vu
dEVudHJ5RmFpbHVyZSgpOworICAgIHVuc2lnbmVkIGVudHJ5RmFpbHVyZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9lbnRyeUZhaWx1cmVDb3VudDsgfQorICAgIAorICAgIEZvck9TUkVudHJ5SklU
Q29kZSogZnRsRm9yT1NSRW50cnkoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2NyYXRjaEJ1ZmZl
ciogbV9lbnRyeUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLgorICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNv
dW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZMVF9KSVQpCisKKyNlbmRpZiAvLyBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDg1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw2ICsxMDMsMTEgQEAgYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lkKikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5QnVmZmVy
KFZNJiB2bSwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKQoreworICAgIG1fZW50cnlCdWZm
ZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKK30KKwogSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjpleGl0VGh1
bmtzKCkKIHsKICAgICByZXR1cm4gbV9leGl0VGh1bmtzLmNvZGUoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5zKHZv
aWQqKTsKICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFbnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVk
IG51bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZlciogZW50cnlCdWZmZXIoKSBj
b25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXpl
RXhpdFRodW5rcyhDb2RlUmVmKTsKICAgICB2b2lkIGFkZEhhbmRsZShQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+KTsKICAgICB2b2lkIGluaXRpYWxpemVDb2RlKENvZGVSZWYgZW50
cnlwb2ludCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlz
aW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEyIEBAIEZUTDo6SklUQ29kZSogSklUQ29kZTo6ZnRs
KCkKICAgICByZXR1cm4gMDsKIH0KIAorRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6
OmZ0bEZvck9TUkVudHJ5KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOworfQorCiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVENvZGU6Omhvc3RGdW5j
dGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
aXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCk7CiAgICAgdmlydHVh
bCBERkc6OkpJVENvZGUqIGRmZygpOwogICAgIHZpcnR1YWwgRlRMOjpKSVRDb2RlKiBmdGwoKTsK
KyAgICB2aXJ0dWFsIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOwog
ICAgIAogICAgIEpTVmFsdWUgZXhlY3V0ZShKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgVk0qKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAx
NTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0MCwxMiArMTA0MCw5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQs
IG9wdGltaXplKQogICAgICAgICAgICAgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXZtLndv
cmtsaXN0KQotICAgICAgICAgICAgdm0ud29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7
Ci0gICAgICAgIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBp
bGUoCiAgICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9jay5nZXQoKSwgREZHOjpERkdN
b2RlLCBieXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAgICAgIHZtLndvcmtsaXN0Lmdl
dCgpKTsKKyAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xMDU0LDE1ICsxMDUxLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0
aW1pemUpCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRMIEpJVCBk
b2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAgLy8gRG9u
J3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGlt
aXplQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBpZiAo
dm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVk
Q29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDksNiArNzA5LDE1IEBAIHZvaWQg
Vk06OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnYKICAgICAgICAgfQogICAgIH0KIH0K
KworREZHOjpXb3JrbGlzdCogVk06OmVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBpZiAoIWVuYWJs
ZUNvbmN1cnJlbnRKSVQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkK
KyAgICAgICAgd29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdv
cmtsaXN0LmdldCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2
ICsxOTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5W
TSgpOwogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhl
YXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9Cisg
ICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1
cmVXb3JrbGlzdCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210174</attachid>
            <date>2013-08-30 16:20:54 -0700</date>
            <delta_ts>2013-08-30 19:39:42 -0700</delta_ts>
            <desc>slowly but surely!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46082</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUzLDYgKzMxNTMsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7
CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjM2LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9j
ayk7CisgICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBo
LmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmls
aXR5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFi
bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tz
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxv
Y2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJU
KCFibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBw
aGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBt
X2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0g
ICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkp
OwotICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAg
ICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxv
Y2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1
NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMyArMjkxLDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2Nh
bE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgfQogICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2Fub25p
Y2FsaXplU2V0QXJndW1lbnRGb3IoTm9kZSogbm9kZSwgc2l6ZV90IGlkeCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihp
ZHgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3Bl
cmFuZEtpbmQ+KGlkeCkpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8
b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgIH0KKyAgICAKICAgICB2b2lk
IGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpbnQg
bG9jYWwgPSBub2RlLT5sb2NhbCgpOwotICAgICAgICBBU1NFUlQob3BlcmFuZElzQXJndW1lbnQo
bG9jYWwpKTsKLSAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobG9jYWwp
OwotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUo
YXJndW1lbnQsIG5vZGUpOwotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOworICAgICAgICBpbnQgb3BlcmFuZCA9IG5v
ZGUtPmxvY2FsKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAg
ICAgICAgICAgIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50Rm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjYW5vbmljYWxpemVTZXRBcmd1bWVudEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIG9wZXJhbmQp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0ODU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwot
CiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAK
QEAgLTk2LDI1ICs5NCwyNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
CiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGls
YXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRpdmUKICAgICAvLyBlbm91Z2ggdG8gYWxs
b3cgZm9yIE9TUiBlbnRyeSB3aXRoIHRoZXNlIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1WYXJz
V2l0aFZhbHVlczsKLSAgICBpZiAob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgIGlmIChvc3JF
bnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVggJiYgb3NyRW50cnlCeXRlY29kZUluZGV4KQog
ICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGVs
c2UKICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlC
eXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpbnQg
b3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAgICYmICFvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAgICAvLyBVZ2guIElm
IHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2Fy
YmFnZS4gSXQgd2lsbAotICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vz
bid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAgICAg
ICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2tr
ZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRp
emUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAgICAgICAgICAgcGxh
bi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIo
b3BlcmFuZCkuanNWYWx1ZSgpOworICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlO
VF9NQVgpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4tPm11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3Vt
ZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRp
b25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgICAgIC8vIFVnaC4g
SWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBn
YXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJ
dCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAg
ICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNh
biBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgICAgICAv
LyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCisg
ICAgICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFs
dWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsMjkg
QEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVybWluZVJlYWNoYWJp
bGl0eSgpOwogfQogCit2b2lkIEdyYXBoOjpraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Js
b2NrKiBibG9jaykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMu
c2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhp
c1twaGlJbmRleF0pOworICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUo
KTsgbm9kZUluZGV4LS07KQorICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2Rl
SW5kZXgpKTsKKyAgICAKKyAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7Cit9CisKK3ZvaWQg
R3JhcGg6OmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpCit7CisgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChibG9j
ay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IG1fa2lsbEJsb2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwogdm9pZCBHcmFw
aDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODks
NiArNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Js
b2NrKik7CisgICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAKICAg
ICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNh
bChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBAIHB1YmxpYzoK
ICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBt
X2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX3ByZXNl
cnZlZFZhcnM7CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5hdG9ycyBtX2Rv
bWluYXRvcnM7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAgIHVuc2lnbmVk
IG1fbG9jYWxWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZSgpCiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNm
YUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290
LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIHJvb3Qt
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworCiAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOSwxNiArMTMxLDIx
IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0NlbGwpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwotICAgICAgICAKLSAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gcm9vdC0+
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZSAmJiBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgcm9vdC0+dmFsdWVz
QXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwo
aSkuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnkgJiYgaSA8IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVy
cykgeworICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0KGkpKQorICAgICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tZXJnZShTcGVjRW1wdHkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CiAgICAgfQogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSw4OSBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICB2YXJpYWJs
ZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7CiB9CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK2Jv
b2wgSklUQ29kZTo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHRpZXJVcENvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENy
b3NzZWRBbmRTZXQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6b3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6
IEZUTC1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi5cbiIpOworICAgIHRpZXJVcENvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKDAsIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworfQorCit2
b2lkIEpJVENvZGU6OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
OworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVC
bG9jaywgIjogTm90IEZUTC1vcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOworICAgIHRpZXJV
cENvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcg
YWZ0ZXIgd2FybS11cC5cbiIpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAor
ICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xk
Rm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcCgpKSwKKyAgICAgICAgYmFzZWxpbmUpOworfQorCit2
b2lkIEpJVENvZGU6Om9wdGltaXplU29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZU
TC1vcHRpbWl6aW5nIHNvb24uXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9s
ZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVz
aG9sZEZvckZUTE9wdGltaXplU29vbigpKSwKKyAgICAgICAgYmFzZWxpbmUpOworfQorCit2b2lk
IEpJVENvZGU6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygqY29kZUJsb2NrLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkgZm9yIEZU
TCBlbnRyeS5cbiIpOworICAgIHRpZXJVcENvdW50ZXIuZm9yY2VTbG93UGF0aENvbmN1cnJlbnRs
eSgpOworfQorCit2b2lkIEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25D
b21waWxhdGlvblJlc3VsdCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpERkdKSVQpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlv
blN1Y2Nlc3NmdWw6CisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oY29kZUJsb2NrKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgIGRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKKyAgICAgICAgb3B0aW1pemVB
ZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxh
dGlvbkludmFsaWRhdGVkOgorICAgICAgICAvLyBUaGlzIGlzIHdlaXJkIC0gaXQgd2lsbCBvbmx5
IGhhcHBlbiBpbiBjYXNlcyB3aGVuIHRoZSBERkcgY29kZSBibG9jayAoaS5lLgorICAgICAgICAv
LyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgSklUQ29kZSBiZWxvbmdzIHRvKSBpcyBhbHNvIGlu
dmFsaWRhdGVkLiBTbyBpdAorICAgICAgICAvLyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hhdCB3
ZSBkby4gQnV0LCB3ZSBkbyB0aGUgcmlnaHQgdGhpbmcgYW55d2F5LiBOb3RlCisgICAgICAgIC8v
IHRoYXQgdXMgY291bnRpbmcgdGhlIHJlb3B0aW1pemF0aW9uIGFjdHVhbGx5IG1lYW5zIHRoYXQg
d2UgbWlnaHQgY291bnQgaXQKKyAgICAgICAgLy8gdHdpY2UuIEJ1dCB0aGF0J3MgZ2VuZXJhbGx5
IE9LLiBJdCdzIGJldHRlciB0byBvdmVyY291bnQgcmVvcHRpbWl6YXRpb25zCisgICAgICAgIC8v
IHRoYW4gaXQgaXMgdG8gdW5kZXJjb3VudCB0aGVtLgorICAgICAgICBjb2RlQmxvY2stPmJhc2Vs
aW5lVmVyc2lvbigpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhp
dC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGVj
dXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkp1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CkBA
IC05Miw5ICs5MywyMiBAQCBwdWJsaWM6CiAgICAgICAgIHdhdGNocG9pbnRzLmFwcGVuZCh3YXRj
aHBvaW50KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKyAgICAvLyBOQi4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJl
Y2F1c2UgdGhleSBtYXkgd2FudCB0byB1c2UKKyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91
dCBzY2FsaW5nIHRocmVzaG9sZHMuIEl0IHNob3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAg
CisgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXpl
QWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKICAgICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENv
bXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgogCkBAIC0xMDYsNiArMTIwLDEwIEBAIHB1Ymxp
YzoKICAgICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4g
d2F0Y2hwb2ludHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRT
dHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworI2lmIEVOQUJMRShG
VExfSklUKQorICAgIEV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBvc3JFbnRyeUJsb2NrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcs
MzQgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogCiAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAg
Ik9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIC0+ICIsICpjb2RlQmxvY2ss
CisgICAgICAgICAgICAiREZHIE9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAi
IC0+ICIsICpjb2RlQmxvY2ssCiAgICAgICAgICAgICAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRl
eCwgIlxuIik7CiAgICAgfQogICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgLy8g
V2hlbiB3aWxsIHRoaXMgaGFwcGVuPyBXZSBjb3VsZCBoYXZlOgorICAgICAgICAvLworICAgICAg
ICAvLyAtIEFuIGV4aXQgZnJvbSB0aGUgRlRMIEpJVCBpbnRvIHRoZSBiYXNlbGluZSBKSVQgZm9s
bG93ZWQgYnkgYW4gYXR0ZW1wdAorICAgICAgICAvLyAgIHRvIHJlZW50ZXIuIFdlJ3JlIGZpbmUg
d2l0aCBhbGxvd2luZyB0aGlzIHRvIGZhaWwuIElmIGl0IGhhcHBlbnMKKyAgICAgICAgLy8gICBl
bm91Z2ggd2UnbGwganVzdCByZW9wdGltaXplLiBJdCBiYXNpY2FsbHkgbWVhbnMgdGhhdCB0aGUg
T1NSIGV4aXQgY29zdAorICAgICAgICAvLyAgIHVzIGRlYXJseSBhbmQgc28gcmVvcHRpbWl6aW5n
IGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSBo
YXZlIHJlY3Vyc2l2ZSBjb2RlIHdpdGggaG90IGxvb3BzLiBDb25zaWRlciB0aGF0IGZvbyBoYXMg
YSBob3QgbG9vcAorICAgICAgICAvLyAgIHRoYXQgY2FsbHMgaXRzZWxmLiBXZSBoYXZlIHR3byBm
b28ncyBvbiB0aGUgc3RhY2ssIGxldHMgY2FsbCB0aGVtIGZvbzEKKyAgICAgICAgLy8gICBhbmQg
Zm9vMiwgd2l0aCBmb28xIGhhdmluZyBjYWxsZWQgZm9vMiBmcm9tIGZvbydzIGhvdCBsb29wLiBm
b28yIGdldHMKKyAgICAgICAgLy8gICBvcHRpbWl6ZWQgYWxsIHRoZSB3YXkgaW50byB0aGUgRlRM
LiBUaGVuIGl0IHJldHVybnMgaW50byBmb28xLCBhbmQgdGhlbgorICAgICAgICAvLyAgIGZvbzEg
d2FudHMgdG8gZ2V0IG9wdGltaXplZC4gSXQgbWlnaHQgcmVhY2ggdGhpcyBjb25jbHVzaW9uIGZy
b20gaXRzCisgICAgICAgIC8vICAgaG90IGxvb3AgYW5kIGF0dGVtcHQgdG8gT1NSIGVudGVyLiBB
bmQgd2UnbGwgdGVsbCBpdCB0aGF0IGl0IGNhbid0LiBJdAorICAgICAgICAvLyAgIG1pZ2h0IGJl
IHdvcnRoIGFkZHJlc3NpbmcgdGhpcyBjYXNlLCBidXQgSSBqdXN0IHRoaW5rIHRoaXMgY2FzZSB3
aWxsCisgICAgICAgIC8vICAgYmUgc3VwZXIgcmFyZS4gRm9yIG5vdywgaWYgaXQgZG9lcyBoYXBw
ZW4sIGl0J2xsIGNhdXNlIHNvbWUgY29tcGlsYXRpb24KKyAgICAgICAgLy8gICB0aHJhc2hpbmcu
CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAg
ICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IGNvZGUgYmxvY2sg
aXMgbm90IERGRy5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgT1NS
RW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRW50cnlE
YXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAKICAgICBpZiAoIWVudHJ5
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgZW50cnlwb2lu
dCBjcmVhdGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVj
b2RlSW5kZXg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKKyAgICAgICAgCisg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsKKyAg
ICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldDsKKyAgICAgICAg
CisgICAgICAgIG1fdGFyZ2V0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChi
bG9jay0+Ynl0ZWNvZGVCZWdpbiA9PSBieXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICAgICAg
bV90YXJnZXQgPSBibG9jazsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbV90YXJnZXQpIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgYSB0ZXJyaWJsZSBvdXRjb21lLiBJdCBzaG91bGRuJ3Qgb2Z0ZW4gaGFwcGVuIGJ1dCBp
dCBtaWdodAorICAgICAgICAgICAgLy8gaGFwcGVuIGFuZCBzbyB3ZSBzaG91bGQgZGVmZW5kIGFn
YWluc3QgaXQuIElmIGl0IGhhcHBlbnMsIHRoZW4gdGhpcworICAgICAgICAgICAgLy8gY29tcGls
YXRpb24gaXMgYSBmYWlsdXJlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX25ld1Jvb3QgPSBtX2luc2VydGlvblNldC5pbnNlcnQoMCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFz
ZWxpbmUtPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkKKyAgICAgICAgICAgIGNyZWF0ZVNl
dEFyZ3VtZW50KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSk7CisgICAgICAgIGZvciAoaW50
IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9j
YWwpCisgICAgICAgICAgICBjcmVhdGVTZXRBcmd1bWVudChsb2NhbCk7CisgICAgICAgIAorICAg
ICAgICBtX25ld1Jvb3QtPmFwcGVuZE5vZGUobV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIG1fdGFy
Z2V0LT5hdCgwKS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fdGFyZ2V0KSk7CisgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsK
KyAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlU2V0QXJndW1lbnQoaW50
IG9wZXJhbmQpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9uZXdSb290LT5hcHBlbmRO
b2RlKAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50LCBtX3Rhcmdl
dC0+YXQoMCktPmNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV90YXJnZXQtPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOworICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBtX2dyYXBo
Lm1fYXJndW1lbnRzW29wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpXSA9IG5vZGU7CisgICAgfQor
ICAgIAorICAgIEJhc2ljQmxvY2sqIG1fdGFyZ2V0OworICAgIEJhc2ljQmxvY2sqIG1fbmV3Um9v
dDsKK307CisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYgZ3JhcGgp
Cit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRW50cnlwb2lu
dCBDcmVhdGlvbiIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZV9oCisjZGVmaW5lIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgcGhh
c2UgaXMgb25seSBmb3IgY29tcGlsYXRpb24gcGlwZWxpbmVzIHRoYXQgZ28gdGhyb3VnaCBTU0Es
IGFuZCB0aGF0CisvLyBkbyBhIHNwZWNpYWxpemVkIE9TUiBlbnRyeSBjb21waWxlLiBDdXJyZW50
bHkgdGhhdCBtZWFucyBGVEwuCisvLworLy8gQ3JlYXRlcyBhbiBPU1IgZW50cnlwb2ludCB0aGF0
IGVzdGFibGlzaGVzIGFsbCBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKy8vIHZhbHVlcy4g
VGhpcyBlbnRyeXBvaW50IG9ubHkgd29ya3MgZm9yIHRoZSBQbGFuOjpvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXguCisvLyBVbmxpa2Ugb3JkaW5hcnkgT1NSIGVudHJ5IGludG8gdGhlIERGRywgdGhpcyBm
b3JjZXMgYWxsIHZhcmlhYmxlcyBzbHVycGVkCisvLyBpbiB0aHJvdWdoIE9TUiBlbnRyeSB0byBh
cHBlYXIgVE9QIHRvIHRoZSBDRkEuIEhlbmNlIHRoaXMgcGhhc2UgbXVzdCBiZSBydW4KKy8vIGVh
cmx5IC0gYmVmb3JlIGRvaW5nIGFueSBDRkEuIEJ1dCB0aGlzIGFsc28gZG9lcyBzb21lIGFkZGl0
aW9uYWwgaGFja3MgdGhhdAorLy8gcmVxdWlyZSB0aGlzIHRvIHJ1biBiZWZvcmUgdW5pZmljYXRp
b24uCisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDE1LDYgKzIwMTUsMTY4IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9O
IHRyaWdnZXJSZW8KICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKIH0KIAorI2lmIEVOQUJM
RShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAg
ICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIAor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9k
aWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWls
dXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVi
bG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5j
aGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2lu
ZyBub3QgdG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7
CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLndvcmtsaXN0LmdldCgpKSB7CisgICAg
ICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
CisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSwgRlRMTW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29y
a2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0
OjpDb21waWxpbmcpIHsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxh
Y2VtZW50KCkpIHsKKyAgICAgICAgLy8gVGhhdCdzIGdyZWF0LCB3ZSd2ZSBjb21waWxlZCB0aGUg
Y29kZSAtIG5leHQgdGltZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24sCisgICAgICAgIC8vIHdlJ2xs
IGVudGVyIHRoYXQgcmVwbGFjZW1lbnQuCisgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09
IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgZmlu
aXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUKKyAg
ICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9j
ayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgorICAgIERGRzo6Y29tcGlsZSgKKyAgICAg
ICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5U
X01BWCwKKyAgICAgICAgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSgpLCB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiB0cmln
Z2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0
Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJs
b2NrLCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIs
CisgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAg
CisgICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBp
bGF0aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAg
ICBkYXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
IGluZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAg
ICAgICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlYmxvY2spOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXph
dGlvblRocmVzaG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1v
cHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3Jr
bGlzdCogd29ya2xpc3QgPSB2bS53b3JrbGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0
YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAg
dm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9T
UkVudHJ5TW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xp
c3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpD
b21waWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKTsKKyAg
ICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2Nr
LmdldCgpKSB7CisgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50
cnkoZXhlYywgZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4g
YWRkcmVzczsKKyAgICAgICAgCisgICAgICAgIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBlbnRy
eUNvZGUgPSBlbnRyeUJsb2NrLT5mdGxGb3JPU1JFbnRyeSgpOworICAgICAgICBlbnRyeUNvZGUt
PmNvdW50RW50cnlGYWlsdXJlKCk7CisgICAgICAgIGlmIChlbnRyeUNvZGUtPmVudHJ5RmFpbHVy
ZUNvdW50KCkgPAorICAgICAgICAgICAgT3B0aW9uczo6ZnRsT1NSRW50cnlGYWlsdXJlQ291bnRG
b3JSZW9wdGltaXphdGlvbigpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdENvZGUt
Pm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIE9TUiBlbnRyeSBmYWlsZWQuIE9oIG5vISBUaGlzIGlt
cGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHJldHJ5LiBXZSByZXRyeQorICAgICAgICAvLyB3aXRob3V0
IGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIHdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGVudHJ5IGNv
ZGUgYmxvY2suCisgICAgICAgIGppdENvZGUtPm9zckVudHJ5QmxvY2suY2xlYXIoKTsKKyAgICAg
ICAgCisgICAgICAgIGppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdv
cmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgY29tcGlsYXRp
b24gZmFpbGVkIGFuZCB3ZSBhbHJlYWR5IHNldCB0aGUgdGhyZXNob2xkcy4KKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvZGUgYmxvY2sg
IiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRp
bWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB0cmlnZ2VyIGEgZm9yLWVudHJ5IGNv
bXBpbGUuCisgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBERkc6OmNvbXBp
bGUoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRM
Rm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICBERkdUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSwgdm0uZW5zdXJlV29ya2xp
c3QoKSk7CisgICAgCisgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGEgcmVwbGFj
ZW1lbnQgY29tcGlsZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8gdHJpZ2dl
ciBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhpcyBpcyBraW5kIG9mIHdlaXJk
IGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAvLyBoYXZlIGp1c3QgZmluaXNoZWQgYW4gRlRMIGNvbXBp
bGUgYW5kIHRoYXQgY29tcGlsZSBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLgorICAgIC8vIEJ1
dCB0aGlzIHNlZW1zIHVuY29tbW9uIGVub3VnaCB0aGF0IHdlIHNvcnQgb2YgZG9uJ3QgY2FyZS4g
SXQncyBjZXJ0YWlubHkgc291bmQKKyAgICAvLyB0byBmaXJlIG9mZiBhbm90aGVyIGNvbXBpbGUg
cmlnaHQgbm93IHNvIGxvbmcgYXMgd2UncmUgbm90IGFscmVhZHkgY29tcGlsaW5nIGFuZAorICAg
IC8vIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuCisgICAg
Q29tcGlsYXRpb25LZXkga2V5Rm9yUmVwbGFjZW1lbnQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSwgRlRMTW9kZSk7CisgICAgaWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2Vt
ZW50KCkKKyAgICAgICAgJiYgKCF2bS53b3JrbGlzdC5nZXQoKQorICAgICAgICAgICAgfHwgdm0u
d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFjZW1lbnQpICE9IFdvcmtsaXN0
OjpOb3RLbm93bikpIHsKKyAgICAgICAgREZHOjpjb21waWxlKAorICAgICAgICAgICAgZXhlYywg
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwKKyAg
ICAgICAgICAgIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSwg
dm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgfQorICAgIAorICAgIGlmIChmb3JFbnRyeVJlc3Vs
dCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAg
IC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVudHJ5IGNvbXBpbGUgYWxyZWFkeSBzdWNj
ZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKKyAgICAvLyBlbnRyeSAqbXVzdCogc3VjY2VlZC4KKyAg
ICB2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoZXhlYywgaml0Q29kZS0+b3Ny
RW50cnlCbG9jay5nZXQoKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQoYWRk
cmVzcyk7CisgICAgcmV0dXJuIGFkZHJlc3M7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKIH0gLy8gZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0ODUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMiw2ICszMDIsMTEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0
aW9uUHJpbnRTcAogCiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93
KENvZGVCbG9jayopIFdURl9JTlRFUk5BTDsKIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBE
RkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwor
Y2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0
aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjUsNiArMTY1LDE2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsK
ICAgICAKKyAgICBpZiAobW9kZSA9PSBGVExGb3JPU1JFbnRyeSkgeworICAgICAgICBib29sIHJl
c3VsdCA9IHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oZGZnKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UmVmKG5ldyBGYWlsZWRGaW5h
bGl6ZXIoKnRoaXMpKTsKKyAgICAgICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAgICB9Cisg
ICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgdmFsaWRhdGUoZGZn
KTsKKyAgICB9CisgICAgCiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAg
ICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChk
ZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJl
dmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsOCArMjc3LDYgQEAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZUdsb2JhbFdvcmtsaXN0T25jZQogCiBXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3QoKQogewot
ICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQotICAgICAgICByZXR1cm4gMDsKICAgICBw
dGhyZWFkX29uY2UoJmluaXRpYWxpemVHbG9iYWxXb3JrbGlzdEtleU9uY2UsIGluaXRpYWxpemVH
bG9iYWxXb3JrbGlzdE9uY2UpOwogICAgIHJldHVybiB0aGVHbG9iYWxXb3JrbGlzdDsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDE1NDg1
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtOTgsOSArOTgsNiBAQCBwcml2YXRlOgogLy8gRm9yIG5vdyB3ZSB1c2UgYSBzaW5n
bGUgZ2xvYmFsIHdvcmtsaXN0LiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMKIC8vIGlzIHRoZSBy
aWdodCB0aGluZyB0byBkbywgYnV0IGl0IGlzIHdoYXQgd2UgZG8sIGZvciBub3cuIFRoaXMgZnVu
Y3Rpb24KIC8vIHdpbGwgbGF6aWx5IGNyZWF0ZSBvbmUgd2hlbiBpdCdzIG5lZWRlZC4KLS8vCi0v
LyBUaGlzIHJldHVybnMgbnVsbCBpZiBmb3IgYW55IHJlYXNvbiB3ZSBzaG91bGRuJ3QgYmUgZG9p
bmcgY29uY3VycmVudAotLy8gY29tcGlsYXRpb24uCiBXb3JrbGlzdCogZ2xvYmFsV29ya2xpc3Qo
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKyNkZWZpbmUg
RlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGludG8gdGhlIEZUTCBoYXMg
YSBudW1iZXIgb2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9ubHkgaGFwcGVucyB0aHJv
dWdoIHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBoYXZlIHRoZWlyCisvLyAg
IG93biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8KKy8vIC0gV2Ugb25seSBP
U1IgZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwgaW5saW5lIGNhbGwgZnJh
bWUuCisvLworLy8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBhbGxvd3MgZW50cnkgdGhy
b3VnaCBvbmx5IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9yT1NSRW50cnlKSVRDb2Rl
IDogcHVibGljIEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9yT1NSRW50cnlKSVRDb2Rl
KCk7CisgICAgfkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6
ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBTY3Jh
dGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0K
KyAgICAKKyAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9ieXRl
Y29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBjb3VudEVudHJ5RmFp
bHVyZSgpOworICAgIHVuc2lnbmVkIGVudHJ5RmFpbHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9lbnRyeUZhaWx1cmVDb3VudDsgfQorICAgIAorICAgIEZvck9TUkVudHJ5SklUQ29kZSogZnRs
Rm9yT1NSRW50cnkoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRy
eUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLgorICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNvdW50OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZMVF9KSVQp
CisKKyNlbmRpZiAvLyBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Myw2ICsxMDMsMTEgQEAgYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lkKikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiB2bSwg
dW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKQoreworICAgIG1fZW50cnlCdWZmZXIgPSB2bS5z
Y3JhdGNoQnVmZmVyRm9yU2l6ZShudW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKTsKK30KKwogSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjpleGl0VGh1bmtzKCkKIHsK
ICAgICByZXR1cm4gbV9leGl0VGh1bmtzLmNvZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKICAg
ICAKKyAgICB2b2lkIGluaXRpYWxpemVFbnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxl
ZVJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJl
dHVybiBtX2VudHJ5QnVmZmVyOyB9CisgICAgCiAgICAgdm9pZCBpbml0aWFsaXplRXhpdFRodW5r
cyhDb2RlUmVmKTsKICAgICB2b2lkIGFkZEhhbmRsZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+KTsKICAgICB2b2lkIGluaXRpYWxpemVDb2RlKENvZGVSZWYgZW50cnlwb2ludCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDg1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDYgKzY2LDEyIEBAIEZUTDo6SklUQ29kZSogSklUQ29kZTo6ZnRsKCkKICAgICBy
ZXR1cm4gMDsKIH0KIAorRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvck9T
UkVudHJ5KCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAwOworfQorCiBQYXNzUmVmUHRyPEpJVENvZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRD
b2RlOjpDb2RlUmVmIGNvZGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRD
b2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCk7CiAgICAgdmlydHVhbCBERkc6OkpJ
VENvZGUqIGRmZygpOwogICAgIHZpcnR1YWwgRlRMOjpKSVRDb2RlKiBmdGwoKTsKKyAgICB2aXJ0
dWFsIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOwogICAgIAogICAg
IEpTVmFsdWUgZXhlY3V0ZShKU1N0YWNrKiwgQ2FsbEZyYW1lKiwgVk0qKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA0MCwxMiArMTA0MCw5IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXpl
KQogICAgICAgICAgICAgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSgpOwogICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBjb2RlQmxvY2st
Pm5ld1JlcGxhY2VtZW50KCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXZtLndvcmtsaXN0KQot
ICAgICAgICAgICAgdm0ud29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7Ci0gICAgICAg
IAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCiAgICAg
ICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9jay5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRl
Y29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAgICAgIHZtLndvcmtsaXN0LmdldCgpKTsKKyAg
ICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHJl
c3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0x
MDU0LDE1ICsxMDUxLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAg
ICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRMIEpJVCBkb2Vzbid0IHN1
cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAgLy8gRG9uJ3QgYXR0ZW1w
dCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGlt
ZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBpZiAodm9pZCogYWRk
cmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2Nr
LCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDksNiArNzA5LDE1IEBAIHZvaWQgVk06OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnYKICAgICAgICAgfQogICAgIH0KIH0KKworREZHOjpX
b3JrbGlzdCogVk06OmVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBpZiAoIWVuYWJsZUNvbmN1cnJl
bnRKSVQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAgICAgICAg
d29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmtsaXN0Lmdl
dCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAg
ICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGlu
ZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAgICAgIAor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVXb3JrbGlz
dCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210180</attachid>
            <date>2013-08-30 19:39:42 -0700</date>
            <delta_ts>2013-08-31 11:33:11 -0700</delta_ts>
            <desc>it&apos;s getting fun.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57118</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUzLDYgKzMxNTMsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7
CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjM2LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9j
ayk7CisgICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBo
LmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmls
aXR5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFi
bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tz
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxv
Y2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJU
KCFibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBw
aGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBt
X2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0g
ICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkp
OwotICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAg
ICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxv
Y2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1
NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMyArMjkxLDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2Nh
bE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgfQogICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2Fub25p
Y2FsaXplU2V0QXJndW1lbnRGb3IoTm9kZSogbm9kZSwgc2l6ZV90IGlkeCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihp
ZHgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3Bl
cmFuZEtpbmQ+KGlkeCkpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8
b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgIH0KKyAgICAKICAgICB2b2lk
IGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpbnQg
bG9jYWwgPSBub2RlLT5sb2NhbCgpOwotICAgICAgICBBU1NFUlQob3BlcmFuZElzQXJndW1lbnQo
bG9jYWwpKTsKLSAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobG9jYWwp
OwotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUo
YXJndW1lbnQsIG5vZGUpOwotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOworICAgICAgICBpbnQgb3BlcmFuZCA9IG5v
ZGUtPmxvY2FsKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAg
ICAgICAgICAgIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50Rm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjYW5vbmljYWxpemVTZXRBcmd1bWVudEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIG9wZXJhbmQp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0ODU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwot
CiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAK
QEAgLTk2LDI1ICs5NCwyNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
CiAgICAgLy8gRGVyaXZlIG91ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGls
YXRpb24gbXVzdCBiZSBhdCBsZWFzdCBjb25zZXJ2YXRpdmUKICAgICAvLyBlbm91Z2ggdG8gYWxs
b3cgZm9yIE9TUiBlbnRyeSB3aXRoIHRoZXNlIHZhbHVlcy4KICAgICB1bnNpZ25lZCBudW1WYXJz
V2l0aFZhbHVlczsKLSAgICBpZiAob3NyRW50cnlCeXRlY29kZUluZGV4KQorICAgIGlmIChvc3JF
bnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVggJiYgb3NyRW50cnlCeXRlY29kZUluZGV4KQog
ICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGVs
c2UKICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOwogICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYoCiAgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlC
eXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpbnQg
b3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAgICYmICFvcGVy
YW5kVG9Bcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Ci0gICAgICAgICAgICAvLyBVZ2guIElm
IHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2Fy
YmFnZS4gSXQgd2lsbAotICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vz
bid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAgICAg
ICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2tr
ZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAotICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRp
emUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgotICAgICAgICAgICAgcGxh
bi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIo
b3BlcmFuZCkuanNWYWx1ZSgpOworICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlO
VF9NQVgpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4tPm11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3Vt
ZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRp
b25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgICAgIC8vIFVnaC4g
SWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBn
YXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJ
dCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAg
ICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNh
biBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgICAgICAv
LyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCisg
ICAgICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFs
dWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsMjkg
QEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgIGRldGVybWluZVJlYWNoYWJp
bGl0eSgpOwogfQogCit2b2lkIEdyYXBoOjpraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Js
b2NrKiBibG9jaykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMu
c2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhp
c1twaGlJbmRleF0pOworICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUo
KTsgbm9kZUluZGV4LS07KQorICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2Rl
SW5kZXgpKTsKKyAgICAKKyAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7Cit9CisKK3ZvaWQg
R3JhcGg6OmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpCit7CisgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChibG9j
ay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IG1fa2lsbEJsb2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwogdm9pZCBHcmFw
aDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODks
NiArNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Js
b2NrKik7CisgICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAKICAg
ICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNh
bChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBAIHB1YmxpYzoK
ICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBt
X2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX3ByZXNl
cnZlZFZhcnM7CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5hdG9ycyBtX2Rv
bWluYXRvcnM7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAgIHVuc2lnbmVk
IG1fbG9jYWxWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNiArMTA3LDggQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZSgpCiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNm
YUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290
LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIHJvb3Qt
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOworCiAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOSwxNiArMTMxLDIx
IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0NlbGwpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwotICAgICAgICAKLSAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gcm9vdC0+
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwotICAgICAgICBpZiAobm9kZSAmJiBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgcm9vdC0+dmFsdWVz
QXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwo
aSkuY2xlYXIoKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnkgJiYgaSA8IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVy
cykgeworICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0KGkpKQorICAgICAgICAgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5tZXJnZShTcGVjRW1wdHkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgcm9vdC0+dmFs
dWVzQXRIZWFkLmxvY2FsKGkpLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CiAgICAgfQogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSw4OSBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICB2YXJpYWJs
ZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7CiB9CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK2Jv
b2wgSklUQ29kZTo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHRpZXJVcENvdW50ZXIuY2hlY2tJZlRocmVzaG9sZENy
b3NzZWRBbmRTZXQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Cit9CisKK3ZvaWQgSklU
Q29kZTo6b3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6
IEZUTC1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi5cbiIpOworICAgIHRpZXJVcENvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKDAsIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworfQorCit2
b2lkIEpJVENvZGU6OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
OworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVC
bG9jaywgIjogTm90IEZUTC1vcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOworICAgIHRpZXJV
cENvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6
ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcg
YWZ0ZXIgd2FybS11cC5cbiIpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhyZXNob2xkKAor
ICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhyZXNob2xk
Rm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcCgpKSwKKyAgICAgICAgYmFzZWxpbmUpOworfQorCit2
b2lkIEpJVENvZGU6Om9wdGltaXplU29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZU
TC1vcHRpbWl6aW5nIHNvb24uXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9s
ZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVz
aG9sZEZvckZUTE9wdGltaXplU29vbigpKSwKKyAgICAgICAgYmFzZWxpbmUpOworfQorCit2b2lk
IEpJVENvZGU6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygqY29kZUJsb2NrLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkgZm9yIEZU
TCBlbnRyeS5cbiIpOworICAgIHRpZXJVcENvdW50ZXIuZm9yY2VTbG93UGF0aENvbmN1cnJlbnRs
eSgpOworfQorCit2b2lkIEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25D
b21waWxhdGlvblJlc3VsdCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpERkdKSVQpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21waWxhdGlv
blN1Y2Nlc3NmdWw6CisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oY29kZUJsb2NrKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgIGRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKKyAgICAgICAgb3B0aW1pemVB
ZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxh
dGlvbkludmFsaWRhdGVkOgorICAgICAgICAvLyBUaGlzIGlzIHdlaXJkIC0gaXQgd2lsbCBvbmx5
IGhhcHBlbiBpbiBjYXNlcyB3aGVuIHRoZSBERkcgY29kZSBibG9jayAoaS5lLgorICAgICAgICAv
LyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgSklUQ29kZSBiZWxvbmdzIHRvKSBpcyBhbHNvIGlu
dmFsaWRhdGVkLiBTbyBpdAorICAgICAgICAvLyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hhdCB3
ZSBkby4gQnV0LCB3ZSBkbyB0aGUgcmlnaHQgdGhpbmcgYW55d2F5LiBOb3RlCisgICAgICAgIC8v
IHRoYXQgdXMgY291bnRpbmcgdGhlIHJlb3B0aW1pemF0aW9uIGFjdHVhbGx5IG1lYW5zIHRoYXQg
d2UgbWlnaHQgY291bnQgaXQKKyAgICAgICAgLy8gdHdpY2UuIEJ1dCB0aGF0J3MgZ2VuZXJhbGx5
IE9LLiBJdCdzIGJldHRlciB0byBvdmVyY291bnQgcmVvcHRpbWl6YXRpb25zCisgICAgICAgIC8v
IHRoYW4gaXQgaXMgdG8gdW5kZXJjb3VudCB0aGVtLgorICAgICAgICBjb2RlQmxvY2stPmJhc2Vs
aW5lVmVyc2lvbigpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIG9wdGltaXplQWZ0
ZXJXYXJtVXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhp
dC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGVj
dXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkp1bXBSZXBs
YWNlbWVudFdhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CkBA
IC05Miw5ICs5MywyMiBAQCBwdWJsaWM6CiAgICAgICAgIHdhdGNocG9pbnRzLmFwcGVuZCh3YXRj
aHBvaW50KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKyAgICAvLyBOQi4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJl
Y2F1c2UgdGhleSBtYXkgd2FudCB0byB1c2UKKyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91
dCBzY2FsaW5nIHRocmVzaG9sZHMuIEl0IHNob3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAg
CisgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXpl
QWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKICAgICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENv
bXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgogCkBAIC0xMDYsNiArMTIwLDEwIEBAIHB1Ymxp
YzoKICAgICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4g
d2F0Y2hwb2ludHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRT
dHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworI2lmIEVOQUJMRShG
VExfSklUKQorICAgIEV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBvc3JFbnRyeUJsb2NrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMSArNDcs
MzQgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogCiAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAg
Ik9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIC0+ICIsICpjb2RlQmxvY2ss
CisgICAgICAgICAgICAiREZHIE9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAi
IC0+ICIsICpjb2RlQmxvY2ssCiAgICAgICAgICAgICAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRl
eCwgIlxuIik7CiAgICAgfQogICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgLy8g
V2hlbiB3aWxsIHRoaXMgaGFwcGVuPyBXZSBjb3VsZCBoYXZlOgorICAgICAgICAvLworICAgICAg
ICAvLyAtIEFuIGV4aXQgZnJvbSB0aGUgRlRMIEpJVCBpbnRvIHRoZSBiYXNlbGluZSBKSVQgZm9s
bG93ZWQgYnkgYW4gYXR0ZW1wdAorICAgICAgICAvLyAgIHRvIHJlZW50ZXIuIFdlJ3JlIGZpbmUg
d2l0aCBhbGxvd2luZyB0aGlzIHRvIGZhaWwuIElmIGl0IGhhcHBlbnMKKyAgICAgICAgLy8gICBl
bm91Z2ggd2UnbGwganVzdCByZW9wdGltaXplLiBJdCBiYXNpY2FsbHkgbWVhbnMgdGhhdCB0aGUg
T1NSIGV4aXQgY29zdAorICAgICAgICAvLyAgIHVzIGRlYXJseSBhbmQgc28gcmVvcHRpbWl6aW5n
IGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSBo
YXZlIHJlY3Vyc2l2ZSBjb2RlIHdpdGggaG90IGxvb3BzLiBDb25zaWRlciB0aGF0IGZvbyBoYXMg
YSBob3QgbG9vcAorICAgICAgICAvLyAgIHRoYXQgY2FsbHMgaXRzZWxmLiBXZSBoYXZlIHR3byBm
b28ncyBvbiB0aGUgc3RhY2ssIGxldHMgY2FsbCB0aGVtIGZvbzEKKyAgICAgICAgLy8gICBhbmQg
Zm9vMiwgd2l0aCBmb28xIGhhdmluZyBjYWxsZWQgZm9vMiBmcm9tIGZvbydzIGhvdCBsb29wLiBm
b28yIGdldHMKKyAgICAgICAgLy8gICBvcHRpbWl6ZWQgYWxsIHRoZSB3YXkgaW50byB0aGUgRlRM
LiBUaGVuIGl0IHJldHVybnMgaW50byBmb28xLCBhbmQgdGhlbgorICAgICAgICAvLyAgIGZvbzEg
d2FudHMgdG8gZ2V0IG9wdGltaXplZC4gSXQgbWlnaHQgcmVhY2ggdGhpcyBjb25jbHVzaW9uIGZy
b20gaXRzCisgICAgICAgIC8vICAgaG90IGxvb3AgYW5kIGF0dGVtcHQgdG8gT1NSIGVudGVyLiBB
bmQgd2UnbGwgdGVsbCBpdCB0aGF0IGl0IGNhbid0LiBJdAorICAgICAgICAvLyAgIG1pZ2h0IGJl
IHdvcnRoIGFkZHJlc3NpbmcgdGhpcyBjYXNlLCBidXQgSSBqdXN0IHRoaW5rIHRoaXMgY2FzZSB3
aWxsCisgICAgICAgIC8vICAgYmUgc3VwZXIgcmFyZS4gRm9yIG5vdywgaWYgaXQgZG9lcyBoYXBw
ZW4sIGl0J2xsIGNhdXNlIHNvbWUgY29tcGlsYXRpb24KKyAgICAgICAgLy8gICB0aHJhc2hpbmcu
CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAg
ICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IGNvZGUgYmxvY2sg
aXMgbm90IERGRy5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgT1NS
RW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRW50cnlE
YXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKICAgICAKICAgICBpZiAoIWVudHJ5
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgZW50cnlwb2lu
dCBjcmVhdGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX2dyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVj
b2RlSW5kZXg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKKyAgICAgICAgCisg
ICAgICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsKKyAg
ICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldDsKKyAgICAgICAg
CisgICAgICAgIG1fdGFyZ2V0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChi
bG9jay0+Ynl0ZWNvZGVCZWdpbiA9PSBieXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICAgICAg
bV90YXJnZXQgPSBibG9jazsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghbV90YXJnZXQpIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgYSB0ZXJyaWJsZSBvdXRjb21lLiBJdCBzaG91bGRuJ3Qgb2Z0ZW4gaGFwcGVuIGJ1dCBp
dCBtaWdodAorICAgICAgICAgICAgLy8gaGFwcGVuIGFuZCBzbyB3ZSBzaG91bGQgZGVmZW5kIGFn
YWluc3QgaXQuIElmIGl0IGhhcHBlbnMsIHRoZW4gdGhpcworICAgICAgICAgICAgLy8gY29tcGls
YXRpb24gaXMgYSBmYWlsdXJlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX25ld1Jvb3QgPSBtX2luc2VydGlvblNldC5pbnNlcnQoMCk7
CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFz
ZWxpbmUtPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkKKyAgICAgICAgICAgIGNyZWF0ZVNl
dEFyZ3VtZW50KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSk7CisgICAgICAgIGZvciAoaW50
IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9j
YWwpCisgICAgICAgICAgICBjcmVhdGVTZXRBcmd1bWVudChsb2NhbCk7CisgICAgICAgIAorICAg
ICAgICBtX25ld1Jvb3QtPmFwcGVuZE5vZGUobV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIG1fdGFy
Z2V0LT5hdCgwKS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fdGFyZ2V0KSk7CisgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsK
KyAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlU2V0QXJndW1lbnQoaW50
IG9wZXJhbmQpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9uZXdSb290LT5hcHBlbmRO
b2RlKAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50LCBtX3Rhcmdl
dC0+YXQoMCktPmNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV90YXJnZXQtPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOworICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBtX2dyYXBo
Lm1fYXJndW1lbnRzW29wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpXSA9IG5vZGU7CisgICAgfQor
ICAgIAorICAgIEJhc2ljQmxvY2sqIG1fdGFyZ2V0OworICAgIEJhc2ljQmxvY2sqIG1fbmV3Um9v
dDsKK307CisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYgZ3JhcGgp
Cit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRW50cnlwb2lu
dCBDcmVhdGlvbiIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZV9oCisjZGVmaW5lIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgcGhh
c2UgaXMgb25seSBmb3IgY29tcGlsYXRpb24gcGlwZWxpbmVzIHRoYXQgZ28gdGhyb3VnaCBTU0Es
IGFuZCB0aGF0CisvLyBkbyBhIHNwZWNpYWxpemVkIE9TUiBlbnRyeSBjb21waWxlLiBDdXJyZW50
bHkgdGhhdCBtZWFucyBGVEwuCisvLworLy8gQ3JlYXRlcyBhbiBPU1IgZW50cnlwb2ludCB0aGF0
IGVzdGFibGlzaGVzIGFsbCBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKy8vIHZhbHVlcy4g
VGhpcyBlbnRyeXBvaW50IG9ubHkgd29ya3MgZm9yIHRoZSBQbGFuOjpvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXguCisvLyBVbmxpa2Ugb3JkaW5hcnkgT1NSIGVudHJ5IGludG8gdGhlIERGRywgdGhpcyBm
b3JjZXMgYWxsIHZhcmlhYmxlcyBzbHVycGVkCisvLyBpbiB0aHJvdWdoIE9TUiBlbnRyeSB0byBh
cHBlYXIgVE9QIHRvIHRoZSBDRkEuIEhlbmNlIHRoaXMgcGhhc2UgbXVzdCBiZSBydW4KKy8vIGVh
cmx5IC0gYmVmb3JlIGRvaW5nIGFueSBDRkEuIEJ1dCB0aGlzIGFsc28gZG9lcyBzb21lIGFkZGl0
aW9uYWwgaGFja3MgdGhhdAorLy8gcmVxdWlyZSB0aGlzIHRvIHJ1biBiZWZvcmUgdW5pZmljYXRp
b24uCisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDE1LDYgKzIwMTUsMTcwIEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9O
IHRyaWdnZXJSZW8KICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKIH0KIAorI2lmIEVOQUJM
RShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAg
ICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIAor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9k
aWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWls
dXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVi
bG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5j
aGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2lu
ZyBub3QgdG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7
CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLndvcmtsaXN0LmdldCgpKSB7CisgICAg
ICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
CisgICAgICAgICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSwgRlRMTW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29y
a2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0
OjpDb21waWxpbmcpIHsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxh
Y2VtZW50KCkpIHsKKyAgICAgICAgLy8gVGhhdCdzIGdyZWF0LCB3ZSd2ZSBjb21waWxlZCB0aGUg
Y29kZSAtIG5leHQgdGltZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24sCisgICAgICAgIC8vIHdlJ2xs
IGVudGVyIHRoYXQgcmVwbGFjZW1lbnQuCisgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09
IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgZmlu
aXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUKKyAg
ICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9j
ayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgorICAgIERGRzo6Y29tcGlsZSgKKyAgICAg
ICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5U
X01BWCwKKyAgICAgICAgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSgpLCB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiB0cmln
Z2VyT1NSRW50cnlOb3coCisgICAgRXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
dW5zaWduZWQgc3RyZWFtSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLT5oZWFwKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOworICAgIAorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVw
Tm93IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29kZS0+dGllclVw
Q291bnRlciwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIEZUTC1vcHRp
bWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVjYXVzZSB0aGVyZSB3
YXMgYW4gRlRMIGZhaWx1cmUuXG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9udE9wdGltaXplQW55
dGltZVNvb24oY29kZWJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKGNvZGVCbG9j
aykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQu
XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUg
d29ya2xpc3RTdGF0ZTsKKyAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gdm0ud29ya2xpc3Qu
Z2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJl
YWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAgICBpZiAo
d29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIEFTU0VSVCgh
aml0Q29kZS0+b3NyRW50cnlCbG9jayk7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlv
blRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvbkRlZmVycmVkKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoQ29kZUJsb2NrKiBlbnRyeUJs
b2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSkgeworICAgICAgICBpZiAodm9pZCog
YWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KAorICAgICAgICAgICAgICAgIGV4ZWMsIGNv
ZGVCbG9jaywgZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKQorICAgICAg
ICAgICAgcmV0dXJuIGFkZHJlc3M7CisgICAgICAgIAorICAgICAgICBGVEw6OkZvck9TUkVudHJ5
SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlCbG9jay0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAg
ICAgZW50cnlDb2RlLT5jb3VudEVudHJ5RmFpbHVyZSgpOworICAgICAgICBpZiAoZW50cnlDb2Rl
LT5lbnRyeUZhaWx1cmVDb3VudCgpIDwKKyAgICAgICAgICAgIE9wdGlvbnM6OmZ0bE9TUkVudHJ5
RmFpbHVyZUNvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSkgeworICAgICAgICAgICAgCisgICAgICAg
ICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBPU1IgZW50cnkgZmFpbGVkLiBP
aCBubyEgVGhpcyBpbXBsaWVzIHRoYXQgd2UgbmVlZCB0byByZXRyeS4gV2UgcmV0cnkKKyAgICAg
ICAgLy8gd2l0aG91dCBleHBvbmVudGlhbCBiYWNrb2ZmIGFuZCB3ZSBvbmx5IGRvIHRoaXMgZm9y
IHRoZSBlbnRyeSBjb2RlIGJsb2NrLgorICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmNs
ZWFyKCk7CisgICAgICAgIAorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xp
c3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IGNvbXBpbGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMu
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0
IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBUaGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdHJpZ2dlciBh
IGZvci1lbnRyeSBjb21waWxlLgorICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0
ID0gREZHOjpjb21waWxlKAorICAgICAgICBleGVjLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50
KCkuZ2V0KCksIEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksIHZt
LmVuc3VyZVdvcmtsaXN0KCkpOworICAgIAorICAgIC8vIEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdHJp
Z2dlciBhIHJlcGxhY2VtZW50IGNvbXBpbGUuIE9mIGNvdXJzZSwgd2UgZG9uJ3Qgd2FudCB0bwor
ICAgIC8vIHRyaWdnZXIgaXQgaWYgd2UgZG9uJ3QgbmVlZCB0by4gTm90ZSB0aGF0IHRoaXMgaXMg
a2luZCBvZiB3ZWlyZCBiZWNhdXNlIHdlIG1pZ2h0CisgICAgLy8gaGF2ZSBqdXN0IGZpbmlzaGVk
IGFuIEZUTCBjb21waWxlIGFuZCB0aGF0IGNvbXBpbGUgZmFpbGVkIG9yIHdhcyBpbnZhbGlkYXRl
ZC4KKyAgICAvLyBCdXQgdGhpcyBzZWVtcyB1bmNvbW1vbiBlbm91Z2ggdGhhdCB3ZSBzb3J0IG9m
IGRvbid0IGNhcmUuIEl0J3MgY2VydGFpbmx5IHNvdW5kCisgICAgLy8gdG8gZmlyZSBvZmYgYW5v
dGhlciBjb21waWxlIHJpZ2h0IG5vdyBzbyBsb25nIGFzIHdlJ3JlIG5vdCBhbHJlYWR5IGNvbXBp
bGluZyBhbmQKKyAgICAvLyB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxh
Y2VtZW50LgorICAgIENvbXBpbGF0aW9uS2V5IGtleUZvclJlcGxhY2VtZW50KGNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpOworICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpCisgICAgICAgICYmICghdm0ud29ya2xpc3QuZ2V0KCkKKyAgICAg
ICAgICAgIHx8IHZtLndvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKGtleUZvclJlcGxhY2VtZW50
KSAhPSBXb3JrbGlzdDo6Tm90S25vd24pKSB7CisgICAgICAgIERGRzo6Y29tcGlsZSgKKyAgICAg
ICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMTW9kZSwg
VUlOVF9NQVgsCisgICAgICAgICAgICBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAo
Zm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBjb21waWxl
IGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAgLy8gZW50cnkgKm11c3Qq
IHN1Y2NlZWQuCisgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KGV4ZWMs
IGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0KCksIGJ5dGVjb2RlSW5kZXgpOworICAgIFJFTEVB
U0VfQVNTRVJUKGFkZHJlc3MpOworICAgIHJldHVybiBhZGRyZXNzOworfQorI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCiB9IC8vIGV4dGVybiAiQyIKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDExIEBAIHZvaWQgREZHX09QRVJBVElP
TiBkZWJ1Z09wZXJhdGlvblByaW50U3AKIAogdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW9w
dGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIHN0cmVhbUluZGV4KSBXVEZf
SU5URVJOQUw7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gLy8gZXh0ZXJuICJDIgog
CiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNp
emVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsMTYgQEAgUGxh
bjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGlmICh2YWxpZGF0aW9u
RW5hYmxlZCgpKQogICAgICAgICB2YWxpZGF0ZShkZmcpOwogICAgIAorICAgIGlmIChtb2RlID09
IEZUTEZvck9TUkVudHJ5KSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gcGVyZm9ybU9TUkVudHJ5
cG9pbnRDcmVhdGlvbihkZmcpOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ZmluYWxpemVyID0gYWRvcHRSZWYobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOworICAgICAg
ICAgICAgcmV0dXJuIEZUTFBhdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbGlkYXRpb25F
bmFibGVkKCkpCisgICAgICAgICAgICB2YWxpZGF0ZShkZmcpOworICAgIH0KKyAgICAKICAgICBw
ZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtUHJlZGljdGlvblBy
b3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTU0ODU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNl
CiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7Ci0gICAgaWYgKCFlbmFibGVDb25jdXJy
ZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6
ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSk7CiAg
ICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0ODU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5OCw2IEBA
IHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgd29ya2xpc3QuIEl0
J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQg
aXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBmdW5jdGlvbgogLy8gd2lsbCBsYXppbHkg
Y3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8KLS8vIFRoaXMgcmV0dXJucyBudWxsIGlm
IGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBkb2luZyBjb25jdXJyZW50Ci0vLyBjb21w
aWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworRm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JP
U1JFbnRyeUpJVENvZGU6On5Gb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JFbnRy
eUpJVENvZGUqIEZvck9TUkVudHJ5SklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIHJl
dHVybiB0aGlzOworfQorCit2b2lkIEZvck9TUkVudHJ5SklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5
QnVmZmVyKFZNJiB2bSwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKQoreworICAgIG1fZW50
cnlCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1DYWxsZWVSZWdpc3RlcnMgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisjZGVmaW5lIEZU
TEZvck9TUkVudHJ5SklUQ29kZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwgaGFzIGEg
bnVtYmVyIG9mIHF1aXJrczoKKy8vCisvLyAtIE9TUiBlbnRyeSBvbmx5IGhhcHBlbnMgdGhyb3Vn
aCBzcGVjaWFsIE9TUiBlbnRyeSBjb21waWxhdGlvbnMuIFRoZXkgaGF2ZSB0aGVpcgorLy8gICBv
d24gQ29kZUJsb2NrIGFuZCB0aGVpciBvd24gSklUQ29kZS4KKy8vCisvLyAtIFdlIG9ubHkgT1NS
IGVudGVyIGluIGxvb3AgaGVhZGVycyB0aGF0IGhhdmUgYSBudWxsIGlubGluZSBjYWxsIGZyYW1l
LgorLy8KKy8vIC0gRWFjaCBPU1IgZW50cnkgY29tcGlsYXRpb24gYWxsb3dzIGVudHJ5IHRocm91
Z2ggb25seSBvbmUgYnl0ZWNvZGUgaW5kZXguCisKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZSA6
IHB1YmxpYyBGVEw6OkpJVENvZGUgeworcHVibGljOgorICAgIEZvck9TUkVudHJ5SklUQ29kZSgp
OworICAgIH5Gb3JPU1JFbnRyeUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVF
bnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgU2NyYXRj
aEJ1ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9Cisg
ICAgCisgICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNv
ZGVJbmRleCA9IHZhbHVlOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIAorICAgIHZvaWQgY291bnRFbnRyeUZhaWx1
cmUoKTsKKyAgICB1bnNpZ25lZCBlbnRyeUZhaWx1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW50cnlGYWlsdXJlQ291bnQ7IH0KKyAgICAKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZv
ck9TUkVudHJ5KCk7CisgICAgCitwcml2YXRlOgorICAgIFNjcmF0Y2hCdWZmZXIqIG1fZW50cnlC
dWZmZXI7IC8vIE9ubHkgZm9yIE9TUiBlbnRyeSBjb2RlIGJsb2Nrcy4KKyAgICB1bnNpZ25lZCBt
X2J5dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9lbnRyeUZhaWx1cmVDb3VudDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGTFRfSklUKQor
CisjZW5kaWYgLy8gRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5
IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCop
OwogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVt
Q2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemVFeGl0
VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4pOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoQ29kZVJlZiBlbnRyeXBv
aW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgxLDggKzQ4MSwyNCBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIGludCBvcGVyYW5kID0gdmFy
aWFibGUtPm9wZXJhbmQoKTsKLQotICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2
NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBqc1ZhbHVl
OworICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICAgICAgY2FzZSBG
VExNb2RlOgorICAgICAgICAgICAganNWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZUTEZvck9TUkVudHJ5
TW9kZToKKyAgICAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAg
ICAgICAgICAgICBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAganNWYWx1ZSA9IG1fb3V0LmxvYWQ2
NChtX291dC5hYnNvbHV0ZShzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICAg
ICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVm
ZmVyKCkpICsgb3BlcmFuZCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoICh1c2VL
aW5kRm9yKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSkgewogICAgICAgICBjYXNlIEludDMyVXNl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JF
bnRyeS5oIgorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29k
ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssCisgICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpCit7CisgICAgQ29kZUJs
b2NrKiBiYXNlbGluZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgREZH
OjpKSVRDb2RlKiBkZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAg
IEZvck9TUkVudHJ5SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlDb2RlQmxvY2stPmppdENvZGUo
KS0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAKKyAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBy
ZWNvdmVyaWVzOworICAgIGRmZ0NvZGUtPnZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3Qo
CisgICAgICAgIGRmZ0NvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwgZGZnQ29k
ZS0+bWluaWZpZWRERkcsIHN0cmVhbUluZGV4LAorICAgICAgICByZWNvdmVyaWVzKTsKKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVChyZWNvdmVyaWVzLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzZWxp
bmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvdmVy
aWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSBy
ZWNvdmVyeSA9IHJlY292ZXJpZXMuYXJndW1lbnQoaSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEFscmVhZHlJbkpTU3RhY2spOworICAgIH0KKyAgICAK
KyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVl
Kj4oCisgICAgICAgIGVudHJ5Q29kZS0+ZW50cnlCdWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvdmVyaWVzLm51bWJlck9mTG9jYWxzKCk7IGktLTspIHsK
KyAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSA9IHJlY292ZXJpZXMubG9jYWwoaSk7Cisg
ICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrOgorICAgICAgICBjYXNlIEFscmVh
ZHlJbkpTU3RhY2tBc1VuYm94ZWRDZWxsOgorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tB
c1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9IGV4ZWNbaV0uanNWYWx1ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hl
ZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJlcihleGVjW2ldLnVuYm94ZWRJbnQz
MigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tB
c1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9IGpzRG91YmxlTnVtYmVyKGV4ZWNb
aV0udW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSByZWNvdmVyeS5jb25zdGFudCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgor
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhpcyBhdCBzb21lIHBvaW50
LgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgc2NyYXRjaFtpXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIC8vIEZJWE1FOiBkbyBtb3JlIHRoaW5ncworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGVExPU1JFbnRyeV9oCisjZGVmaW5lIEZUTE9TUkVudHJ5X2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBFeGVjU3RhdGU7CisKK25hbWVzcGFjZSBGVEwgewor
Cit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiBkZmdD
b2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsCisgICAgdW5zaWduZWQgc3RyZWFtSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkVudHJ5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9u
IDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MCw5ICs0Miwy
MyBAQCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgICwgY29udGV4dChMTFZNQ29udGV4
dENyZWF0ZSgpKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQotICAgICwgaml0
Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDAp
CiB7CisgICAgc3dpdGNoIChncmFwaC5tX3BsYW4ubW9kZSkgeworICAgIGNhc2UgRlRMTW9kZToK
KyAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZToKKyAgICAgICAgUmVmUHRyPEZvck9TUkVu
dHJ5SklUQ29kZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7Cisg
ICAgICAgIGNvZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3Byb2ZpbGVkQmxvY2st
Pm1fbnVtQ2FsbGVSZWdpc3RlcnMpOworICAgICAgICBjb2RlLT5zZXRCeXRlY29kZUluZGV4KGdy
YXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBqaXRDb2RlID0gY29k
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAogICAgIGZpbmFsaXpl
ciA9IG5ldyBKSVRGaW5hbGl6ZXIoZ3JhcGgubV9wbGFuKTsKICAgICBncmFwaC5tX3BsYW4uZmlu
YWxpemVyID0gYWRvcHRQdHIoZmluYWxpemVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBhc0lubGluZUNhbGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQz
MigpIGNvbnN0OwogICAgICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAgICAg
IGRvdWJsZSB1bmJveGVkRG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hlZENl
bGwoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAgIGlu
dDMyX3QgdGFnKCkgY29uc3Q7CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBlbmNv
ZGVkVmFsdWU7CisgICAgICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAgICAg
fTsKIApAQCAtMTg4LDYgKzE5MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJu
ICEhcGF5bG9hZCgpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lzdGVy
Ojp1bmJveGVkRG91YmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJlcjsK
KyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRDZWxs
KCkgY29uc3QKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAg
RlRMOjpKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZv
ck9TUkVudHJ5SklUQ29kZSogSklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8
SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVu
aykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDg1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjMsNiArMTYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24oKTsKICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAgICAgdmly
dHVhbCBGVEw6OkpJVENvZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JFbnRyeUpJ
VENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3Rh
Y2sqLCBDYWxsRnJhbWUqLCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDEyICsxMDQwLDkgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgICAgICBKSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7CiAgICAgICAgIFJlZlB0cjxD
b2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2bS53b3JrbGlz
dCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKLSAgICAgICAgCiAgICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKICAgICAgICAgICAgIGNhbGxGcmFtZSwgbmV3
Q29kZUJsb2NrLmdldCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLAot
ICAgICAgICAgICAgdm0ud29ya2xpc3QuZ2V0KCkpOworICAgICAgICAgICAgdm0uZW5zdXJlV29y
a2xpc3QoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNTQsMTUgKzEwNTEsNiBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICBDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAg
Ci0gICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJ
VCkgewotICAgICAgICAvLyBGVEwgSklUIGRvZXNuJ3Qgc3VwcG9ydCBPU1IgZW50cnkgeWV0Lgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjI1
Ci0gICAgICAgIAotICAgICAgICAvLyBEb24ndCBhdHRlbXB0IE9TUiBlbnRyeSBhZ2Fpbi4KLSAg
ICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAogICAgIGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpwcmVwYXJlT1NS
RW50cnkoY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2co
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTQ4NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcwOSw2ICs3MDksMTUgQEAgdm9pZCBWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29u
c2VydgogICAgICAgICB9CiAgICAgfQogfQorCitERkc6OldvcmtsaXN0KiBWTTo6ZW5zdXJlV29y
a2xpc3QoKQoreworICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERGRzo6Z2xvYmFs
V29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBtYWtlVXNhYmxl
RnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVG
cm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisg
ICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxv
Y2s7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210199</attachid>
            <date>2013-08-31 11:33:11 -0700</date>
            <delta_ts>2013-08-31 14:44:18 -0700</delta_ts>
            <desc>even more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65561</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUzLDYgKzMxNTMsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOwor
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7
CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjM2LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICgh
YmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9j
ayk7CisgICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBo
LmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmls
aXR5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFi
bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tz
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxv
Y2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJU
KCFibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBw
aGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBt
X2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0g
ICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkp
OwotICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAg
ICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxv
Y2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1
NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSwxMyArMjkxLDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBMb2Nh
bE9wZXJhbmQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgfQogICAg
IAorICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgorICAgIHZvaWQgY2Fub25p
Y2FsaXplU2V0QXJndW1lbnRGb3IoTm9kZSogbm9kZSwgc2l6ZV90IGlkeCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmF0Rm9yPG9wZXJhbmRLaW5kPihp
ZHgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXRGb3I8b3Bl
cmFuZEtpbmQ+KGlkeCkpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXRGb3I8
b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGlkeCkgPSBub2RlOworICAgIH0KKyAgICAKICAgICB2b2lk
IGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpbnQg
bG9jYWwgPSBub2RlLT5sb2NhbCgpOwotICAgICAgICBBU1NFUlQob3BlcmFuZElzQXJndW1lbnQo
bG9jYWwpKTsKLSAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZFRvQXJndW1lbnQobG9jYWwp
OwotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUo
YXJndW1lbnQsIG5vZGUpOwotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGUpOworICAgICAgICBpbnQgb3BlcmFuZCA9IG5v
ZGUtPmxvY2FsKCk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAg
ICAgICAgICAgIGNhbm9uaWNhbGl6ZVNldEFyZ3VtZW50Rm9yPEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjYW5vbmljYWxpemVTZXRBcmd1bWVudEZvcjxMb2NhbE9wZXJhbmQ+KG5vZGUsIG9wZXJhbmQp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0ODU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw5ICs1NSw5IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgK
LSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1v
ZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKLSAgICBXb3JrbGlzdCogd29y
a2xpc3QpCisgICAgVk0mLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1v
ZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVyYW5kczxK
U1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CiAg
ICAgCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwot
CiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAK
QEAgLTc4LDggKzc2LDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAog
ICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZygiREZHKERy
aXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMg
PSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCi0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgc3R1YnMg
dGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdhbnQgdG8K
ICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMgZmluYWxp
emF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpOwpAQCAtOTMsMjkgKzg5LDggQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8vIERlcml2ZSBvdXIg
c2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUgYXQgbGVh
c3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50cnkgd2l0
aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0gICAgaWYg
KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2Rl
QmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0g
MDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcgUGxhbihj
b2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMp
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxlVmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAg
ICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgICAg
ICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkg
ewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3Ro
aXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAgIC8vIGFs
c28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUg
dmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVh
bCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKLSAg
ICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVu
ZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1VuZGVm
aW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB9CisgICAg
ICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0
SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAgICAgICAgIHBsYW4t
PmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENvZGVCbG9jayosIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwKICAgICBQ
YXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0KikKIHsKICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywxMyBAQCBzdGF0aWMg
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5k
bGVWYWx1ZXMsCisgICAgSlNQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4g
cGFzc2VkQ2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAgICBSZWZQdHI8RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9IHBhc3NlZENhbGxiYWNrOwogICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvbXBpbGVJbXBsKAotICAgICAgICBleGVjLCBjb2Rl
QmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY2FsbGJhY2ssIHdvcmtsaXN0KTsK
KyAgICAgICAgdm0sIGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0
SGFuZGxlVmFsdWVzLCBjYWxsYmFjaywgd29ya2xpc3QpOwogICAgIGlmIChyZXN1bHQgIT0gQ29t
cGlsYXRpb25EZWZlcnJlZCkKICAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoY29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDkgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYQogCiAvLyBJZiB0
aGUgd29ya2xpc3QgaXMgbm9uLW51bGwsIHdlIGRvIGEgY29uY3VycmVudCBjb21waWxlLiBPdGhl
cndpc2Ugd2UgZG8gYSBzeW5jaHJvbm91cwogLy8gY29tcGlsZS4gRXZlbiBpZiB3ZSBkbyBhIHN5
bmNocm9ub3VzIGNvbXBpbGUsIHdlIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHJlc3VsdC4K
LUNvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgQ29tcGls
YXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiwgV29ya2xpc3QqKTsKK0NvbXBpbGF0aW9uUmVzdWx0
IGNvbXBpbGUoCisgICAgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg3LDYgKzQ4NywyOSBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJp
bGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3JhcGg6Omtp
bGxCbG9ja0FuZEl0c0NvbnRlbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGZvciAodW5z
aWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAg
ICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgIG1f
YWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIAorICAgIG1fZ3JhcGgu
a2lsbEJsb2NrKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tz
KCkKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBu
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
dGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9raWxsQmxvY2tBbmRJdHNDb250ZW50cyhi
bG9jayk7CisgICAgfQorfQorCiB2b2lkIEdyYXBoOjpyZXNldEV4aXRTdGF0ZXMoKQogewogICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksMTAgQEAgcHVibGljOgogICAgICAg
ICBraWxsQmxvY2soYmFzaWNCbG9jay0+aW5kZXgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGtp
bGxCbG9ja0FuZEl0c0NvbnRlbnRzKEJhc2ljQmxvY2sqKTsKKyAgICAKKyAgICB2b2lkIGtpbGxV
bnJlYWNoYWJsZUJsb2NrcygpOworICAgIAogICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwo
Tm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpICYmIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7
CkBAIC02OTgsNiArNzAyLDcgQEAgcHVibGljOgogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CiAg
ICAgSGFzaFNldDxFeGVjdXRhYmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0Vz
Y2FwZWQ7CiAgICAgQml0VmVjdG9yIG1fcHJlc2VydmVkVmFyczsKKyAgICBCaXRWZWN0b3IgbV9s
YXp5VmFyczsKICAgICBEb21pbmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBOYXR1cmFsTG9vcHMg
bV9uYXR1cmFsTG9vcHM7CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsOCBAQCB2
b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICByb290LT5jZmFIYXNW
aXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CisKICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICAg
ICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtMTI5LDE2ICsxMzEsMjEgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQo
aSkuc2V0VHlwZShTcGVjQ2VsbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJvb3QtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7Ci0gICAgICAgIAotICAgICAgICByb290
LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7Ci0g
ICAgICAgIGlmIChub2RlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVk
KCkpCi0gICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xl
YXIoKTsKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CisgICAg
ICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5sb2NhbChpKS5jbGVhcigpOworICAgICAgICBpZiAobV9n
cmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeSAmJiBpIDwgbV9ncmFwaC5tX3Byb2Zp
bGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKSB7CisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgpOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9s
YXp5VmFycy5nZXQoaSkpCisgICAgICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2Fs
KGkpLm1lcmdlKFNwZWNFbXB0eSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJl
ZCgpKSB7CisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkubWFrZVRvcCgp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICB9CiAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAxIDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7
ICsrYmxvY2tJbmRleCkgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDE0NSBAQCB2b2lkIEpJVENv
ZGU6OnNocmlua1RvRml0KCkKICAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7
CiB9CiAKK3ZvaWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsCisgICAgT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4mIHJlc3VsdCkKK3sKKyAgICB2YXJpYWJsZUV2ZW50U3RyZWFt
LnJlY29uc3RydWN0KAorICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIG1pbmlmaWVkREZH
LCBzdHJlYW1JbmRleCwgcmVzdWx0KTsKK30KKwordm9pZCBKSVRDb2RlOjpyZWNvbnN0cnVjdCgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAorICAgIE9wZXJhbmRzPEpTVmFsdWU+JiBy
ZXN1bHQpCit7CisgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gcmVjb3ZlcmllczsKKyAgICBy
ZWNvbnN0cnVjdChjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIHN0cmVhbUluZGV4LCByZWNvdmVyaWVz
KTsKKyAgICAKKyAgICByZXN1bHQgPSBPcGVyYW5kczxKU1ZhbHVlPihPcGVyYW5kc0xpa2UsIHJl
Y292ZXJpZXMpOworICAgIGZvciAoc2l6ZV90IGkgPSByZXN1bHQuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgIGludCBvcGVyYW5kID0gcmVzdWx0Lm9wZXJhbmRzRm9ySW5kZXgoaSk7CisgICAgICAg
IAorICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICYm
ICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5j
b2RldHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVj
aWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAgICAvLyBV
Z2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhv
bGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJ
dCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAg
ICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJl
IGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAgICAgICAgICAgLy8gc28gd2Ug
c2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgorICAgICAgICAg
ICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0gcmVjb3Zl
cmllc1tpXTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2s6CisgICAgICAg
IGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZENlbGw6CisgICAgICAgIGNhc2UgQWxyZWFk
eUluSlNTdGFja0FzVW5ib3hlZERvdWJsZToKKyAgICAgICAgICAgIHZhbHVlID0gZXhlY1tpXS5q
c1ZhbHVlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0
YWNrQXNVbmJveGVkSW50MzI6CisgICAgICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGV4ZWNbaV0u
dW5ib3hlZEludDMyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFk
eUluSlNTdGFja0FzVW5ib3hlZERvdWJsZToKKyAgICAgICAgICAgIHZhbHVlID0ganNEb3VibGVO
dW1iZXIoZXhlY1tpXS51bmJveGVkRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICB2YWx1ZSA9IHJlY292ZXJ5LmNvbnN0YW50
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKK2Jvb2wgSklUQ29kZTo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHRpZXJVcENvdW50ZXIuY2hlY2tJZlRo
cmVzaG9sZENyb3NzZWRBbmRTZXQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Cit9CisK
K3ZvaWQgSklUQ29kZTo6b3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2Rl
QmxvY2ssICI6IEZUTC1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi5cbiIpOworICAgIHRpZXJV
cENvdW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkp
OworfQorCit2b2lkIEpJVENvZGU6OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFM
b2coKmNvZGVCbG9jaywgIjogTm90IEZUTC1vcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOwor
ICAgIHRpZXJVcENvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKK30KKwordm9pZCBKSVRDb2Rl
OjpvcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9w
dGltaXppbmcgYWZ0ZXIgd2FybS11cC5cbiIpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhy
ZXNob2xkKAorICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6
dGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcCgpKSwKKyAgICAgICAgYmFzZWxpbmUp
OworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplU29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsK
KyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxv
Y2ssICI6IEZUTC1vcHRpbWl6aW5nIHNvb24uXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
ID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5l
d1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlv
bnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbigpKSwKKyAgICAgICAgYmFzZWxpbmUpOwor
fQorCit2b2lkIEpJVENvZGU6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHko
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50
bHkgZm9yIEZUTCBlbnRyeS5cbiIpOworICAgIHRpZXJVcENvdW50ZXIuZm9yY2VTbG93UGF0aENv
bmN1cnJlbnRseSgpOworfQorCit2b2lkIEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9s
ZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBD
b21waWxhdGlvblN1Y2Nlc3NmdWw6CisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oY29k
ZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Cisg
ICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKKyAgICAgICAg
b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDb21waWxhdGlvbkludmFsaWRhdGVkOgorICAgICAgICAvLyBUaGlzIGlzIHdlaXJkIC0gaXQg
d2lsbCBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVuIHRoZSBERkcgY29kZSBibG9jayAoaS5lLgor
ICAgICAgICAvLyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgSklUQ29kZSBiZWxvbmdzIHRvKSBp
cyBhbHNvIGludmFsaWRhdGVkLiBTbyBpdAorICAgICAgICAvLyBkb2Vzbid0IHJlYWxseSBtYXR0
ZXIgd2hhdCB3ZSBkby4gQnV0LCB3ZSBkbyB0aGUgcmlnaHQgdGhpbmcgYW55d2F5LiBOb3RlCisg
ICAgICAgIC8vIHRoYXQgdXMgY291bnRpbmcgdGhlIHJlb3B0aW1pemF0aW9uIGFjdHVhbGx5IG1l
YW5zIHRoYXQgd2UgbWlnaHQgY291bnQgaXQKKyAgICAgICAgLy8gdHdpY2UuIEJ1dCB0aGF0J3Mg
Z2VuZXJhbGx5IE9LLiBJdCdzIGJldHRlciB0byBvdmVyY291bnQgcmVvcHRpbWl6YXRpb25zCisg
ICAgICAgIC8vIHRoYW4gaXQgaXMgdG8gdW5kZXJjb3VudCB0aGVtLgorICAgICAgICBjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKKyNpbmNs
dWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUg
Ikp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVj
dG9yLmg+CkBAIC05Myw4ICs5NCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAorICAgIHZvaWQgcmVjb25zdHJ1Y3QoCisgICAgICAgIENvZGVCbG9jayos
IENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PiYgcmVzdWx0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdy
ZSBhdCBhIHBvaW50IHdoZXJlIGFsbCB2YWx1ZXMgYXJlIHNwaWxsZWQgdG8gdGhlCisgICAgLy8g
c3RhY2suIEN1cnJlbnRseSwgaXQgYWxzbyBoYXMgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhlIHZh
bHVlcyBtdXN0IGJlIGluIHRoZWlyCisgICAgLy8gYnl0ZWNvZGUtZGVzaWduYXRlZCBzdGFjayBz
bG90cy4KKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAgICAgICBFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAorICAgICAgICBPcGVy
YW5kczxKU1ZhbHVlPiYgcmVzdWx0KTsKKworI2lmIEVOQUJMRShGVExfSklUKQorICAgIC8vIE5C
LiBBbGwgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVCbG9jayogYmVjYXVzZSB0aGV5IG1heSB3
YW50IHRvIHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxvZ2ljIGFib3V0IHNjYWxpbmcgdGhyZXNo
b2xkcy4gSXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9jay4KKyAgICAKKyAgICBib29sIGNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0
aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcChDb2Rl
QmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGZv
cmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29kZUJs
b2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAg
IAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgCisgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBz
ZXRDb2RlUmVmKCkuCiAKQEAgLTEwNiw2ICsxMzAsMTAgQEAgcHVibGljOgogICAgIFNlZ21lbnRl
ZFZlY3RvcjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKICAg
ICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6
Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRERkc7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgRXhl
Y3V0aW9uQ291bnRlciB0aWVyVXBDb3VudGVyOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG9zckVu
dHJ5QmxvY2s7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0NywzNCBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT1NSIGluICIsICpjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICJE
RkcgT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9j
aywKICAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4iKTsKICAgICB9
CiAgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgaWYgKGNvZGVCbG9jay0+aml0
VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICAvLyBXaGVuIHdpbGwgdGhpcyBo
YXBwZW4/IFdlIGNvdWxkIGhhdmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gQW4gZXhpdCBm
cm9tIHRoZSBGVEwgSklUIGludG8gdGhlIGJhc2VsaW5lIEpJVCBmb2xsb3dlZCBieSBhbiBhdHRl
bXB0CisgICAgICAgIC8vICAgdG8gcmVlbnRlci4gV2UncmUgZmluZSB3aXRoIGFsbG93aW5nIHRo
aXMgdG8gZmFpbC4gSWYgaXQgaGFwcGVucworICAgICAgICAvLyAgIGVub3VnaCB3ZSdsbCBqdXN0
IHJlb3B0aW1pemUuIEl0IGJhc2ljYWxseSBtZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBjb3N0Cisg
ICAgICAgIC8vICAgdXMgZGVhcmx5IGFuZCBzbyByZW9wdGltaXppbmcgaXMgdGhlIHJpZ2h0IHRo
aW5nIHRvIGRvLgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIGhhdmUgcmVjdXJzaXZlIGNv
ZGUgd2l0aCBob3QgbG9vcHMuIENvbnNpZGVyIHRoYXQgZm9vIGhhcyBhIGhvdCBsb29wCisgICAg
ICAgIC8vICAgdGhhdCBjYWxscyBpdHNlbGYuIFdlIGhhdmUgdHdvIGZvbydzIG9uIHRoZSBzdGFj
aywgbGV0cyBjYWxsIHRoZW0gZm9vMQorICAgICAgICAvLyAgIGFuZCBmb28yLCB3aXRoIGZvbzEg
aGF2aW5nIGNhbGxlZCBmb28yIGZyb20gZm9vJ3MgaG90IGxvb3AuIGZvbzIgZ2V0cworICAgICAg
ICAvLyAgIG9wdGltaXplZCBhbGwgdGhlIHdheSBpbnRvIHRoZSBGVEwuIFRoZW4gaXQgcmV0dXJu
cyBpbnRvIGZvbzEsIGFuZCB0aGVuCisgICAgICAgIC8vICAgZm9vMSB3YW50cyB0byBnZXQgb3B0
aW1pemVkLiBJdCBtaWdodCByZWFjaCB0aGlzIGNvbmNsdXNpb24gZnJvbSBpdHMKKyAgICAgICAg
Ly8gICBob3QgbG9vcCBhbmQgYXR0ZW1wdCB0byBPU1IgZW50ZXIuIEFuZCB3ZSdsbCB0ZWxsIGl0
IHRoYXQgaXQgY2FuJ3QuIEl0CisgICAgICAgIC8vICAgbWlnaHQgYmUgd29ydGggYWRkcmVzc2lu
ZyB0aGlzIGNhc2UsIGJ1dCBJIGp1c3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgLy8g
ICBiZSBzdXBlciByYXJlLiBGb3Igbm93LCBpZiBpdCBkb2VzIGhhcHBlbiwgaXQnbGwgY2F1c2Ug
c29tZSBjb21waWxhdGlvbgorICAgICAgICAvLyAgIHRocmFzaGluZy4KKyAgICAgICAgCisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJnZXQgY29kZSBibG9jayBpcyBub3QgREZHLlxuIik7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFbnRyeURhdGFGb3JCeXRlY29kZUlu
ZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGlmICghZW50cnkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFw
aCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAg
ICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1v
ZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFw
aC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZSA9IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrOworICAgICAgICAKKyAgICAgICAg
QmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0OworICAgICAgICAKKyAgICAgICAgbV90YXJn
ZXQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJl
Z2luID09IGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBtX3RhcmdldCA9IGJsb2Nr
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFtX3RhcmdldCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHRlcnJpYmxl
IG91dGNvbWUuIEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4gYnV0IGl0IG1pZ2h0CisgICAgICAg
ICAgICAvLyBoYXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZlbmQgYWdhaW5zdCBpdC4gSWYgaXQg
aGFwcGVucywgdGhlbiB0aGlzCisgICAgICAgICAgICAvLyBjb21waWxhdGlvbiBpcyBhIGZhaWx1
cmUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIG1fbmV3Um9vdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgwKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoaW50IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNlbGluZS0+bnVtUGFyYW1l
dGVycygpOyArK2FyZ3VtZW50KQorICAgICAgICAgICAgY3JlYXRlU2V0QXJndW1lbnQoYXJndW1l
bnRUb09wZXJhbmQoYXJndW1lbnQpKTsKKyAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2Nh
bCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkKKyAgICAgICAgICAg
IGNyZWF0ZVNldEFyZ3VtZW50KGxvY2FsKTsKKyAgICAgICAgCisgICAgICAgIG1fbmV3Um9vdC0+
YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgbV90YXJnZXQtPmF0KDApLT5jb2Rl
T3JpZ2luLCBPcEluZm8obV90YXJnZXQpKTsKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
KTsKKyAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICBtX2dyYXBo
LmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVTZXRBcmd1bWVudChpbnQgb3BlcmFuZCkKKyAgICB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAg
ICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0QXJndW1lbnQsIG1fdGFyZ2V0LT5hdCgwKS0+Y29kZU9y
aWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhtX3RhcmdldC0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQob3BlcmFuZCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CisgICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbb3Bl
cmFuZFRvQXJndW1lbnQob3BlcmFuZCldID0gbm9kZTsKKyAgICB9CisgICAgCisgICAgQmFzaWNC
bG9jayogbV90YXJnZXQ7CisgICAgQmFzaWNCbG9jayogbV9uZXdSb290OworfTsKKworYm9vbCBw
ZXJmb3JtT1NSRW50cnlwb2ludENyZWF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9TUiBFbnRyeXBvaW50IENyZWF0aW9uIik7Cisg
ICAgcmV0dXJuIHJ1blBoYXNlPE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlPihncmFwaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKyNk
ZWZpbmUgREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBpcyBvbmx5IGZvciBj
b21waWxhdGlvbiBwaXBlbGluZXMgdGhhdCBnbyB0aHJvdWdoIFNTQSwgYW5kIHRoYXQKKy8vIGRv
IGEgc3BlY2lhbGl6ZWQgT1NSIGVudHJ5IGNvbXBpbGUuIEN1cnJlbnRseSB0aGF0IG1lYW5zIEZU
TC4KKy8vCisvLyBDcmVhdGVzIGFuIE9TUiBlbnRyeXBvaW50IHRoYXQgZXN0YWJsaXNoZXMgYWxs
IGFyZ3VtZW50IGFuZCBsb2NhbCB2YXJpYWJsZQorLy8gdmFsdWVzLiBUaGlzIGVudHJ5cG9pbnQg
b25seSB3b3JrcyBmb3IgdGhlIFBsYW46Om9zckVudHJ5Qnl0ZWNvZGVJbmRleC4KKy8vIFVubGlr
ZSBvcmRpbmFyeSBPU1IgZW50cnkgaW50byB0aGUgREZHLCB0aGlzIGZvcmNlcyBhbGwgdmFyaWFi
bGVzIHNsdXJwZWQKKy8vIGluIHRocm91Z2ggT1NSIGVudHJ5IHRvIGFwcGVhciBUT1AgdG8gdGhl
IENGQS4gSGVuY2UgdGhpcyBwaGFzZSBtdXN0IGJlIHJ1bgorLy8gZWFybHkgLSBiZWZvcmUgZG9p
bmcgYW55IENGQS4gQnV0IHRoaXMgYWxzbyBkb2VzIHNvbWUgYWRkaXRpb25hbCBoYWNrcyB0aGF0
CisvLyByZXF1aXJlIHRoaXMgdG8gcnVuIGJlZm9yZSB1bmlmaWNhdGlvbi4KKworYm9vbCBwZXJm
b3JtT1NSRW50cnlwb2ludENyZWF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRW50
cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTUsNiAr
MjAxNSwxODQgQEAgZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlbwogICAg
IGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogfQogCisjaWYgRU5BQkxFKEZUTF9KSVQpCit2b2lk
IERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEpJVENvZGUqIGppdENv
ZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9j
aywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAor
ICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CisgICAgfQorICAgIAor
ICAgIGlmIChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxh
dGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAg
ZGF0YUxvZygiRGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBp
bmRlZmluaXRlbHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUuXG4iKTsKKyAgICAg
ICAgaml0Q29kZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZWJsb2NrKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRp
b25UaHJlc2hvbGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0
aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBpZiAoV29ya2xp
c3QqIHdvcmtsaXN0ID0gdm0ud29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0
ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgIHZt
LCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7
CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247
CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgewor
ICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQoQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAg
ICAgICAvLyBUaGF0J3MgZ3JlYXQsIHdlJ3ZlIGNvbXBpbGVkIHRoZSBjb2RlIC0gbmV4dCB0aW1l
IHdlIGNhbGwgdGhpcyBmdW5jdGlvbiwKKyAgICAgICAgLy8gd2UnbGwgZW50ZXIgdGhhdCByZXBs
YWNlbWVudC4KKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBp
bGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBmaW5pc2hlZCBjb21waWxpbmcs
IGJ1dCBmYWlsZWQgc29tZWhvdzsgaW4gdGhhdCBjYXNlIHRoZQorICAgICAgICAvLyB0aHJlc2hv
bGRzIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ss
ICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2Vt
ZW50LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNv
bXBpbGUgdGhlIGNvZGUuCisgICAgREZHOjpjb21waWxlKAorICAgICAgICBleGVjLCBjb2RlQmxv
Y2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxK
U1ZhbHVlPigpLAorICAgICAgICBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9O
IHRyaWdnZXJPU1JFbnRyeU5vdygKKyAgICBFeGVjU3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBEZWZlckdD
IGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHRyaWdnZXJU
aWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBqaXRDb2RlLT50
aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+YmFz
ZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgRlRM
LW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5pdGVseSBiZWNhdXNlIHRo
ZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRDb2RlLT5kb250T3B0aW1p
emVBbnl0aW1lU29vbihjb2RlYmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoY29k
ZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAg
ICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAi
IHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdvcmtsaXN0OjpT
dGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2bS53b3Jr
bGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRl
QWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9TUkVudHJ5TW9kZSkpOworICAgIH0gZWxz
ZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIAorICAg
IGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAgQVNT
RVJUKCFqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKTsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1p
emF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVmZXJy
ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChDb2RlQmxvY2sqIGVu
dHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpKSB7CisgICAgICAgIGlmICh2
b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCisgICAgICAgICAgICAgICAgZXhl
YywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCkpIHsK
KyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAg
ICAgcmV0dXJuIGFkZHJlc3M7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEZUTDo6Rm9y
T1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUJsb2NrLT5mdGxGb3JPU1JFbnRyeSgp
OworICAgICAgICBlbnRyeUNvZGUtPmNvdW50RW50cnlGYWlsdXJlKCk7CisgICAgICAgIGlmIChl
bnRyeUNvZGUtPmVudHJ5RmFpbHVyZUNvdW50KCkgPAorICAgICAgICAgICAgT3B0aW9uczo6ZnRs
T1NSRW50cnlGYWlsdXJlQ291bnRGb3JSZW9wdGltaXphdGlvbigpKSB7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE9TUiBlbnRyeSBm
YWlsZWQuIE9oIG5vISBUaGlzIGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHJldHJ5LiBXZSByZXRy
eQorICAgICAgICAvLyB3aXRob3V0IGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIHdlIG9ubHkgZG8g
dGhpcyBmb3IgdGhlIGVudHJ5IGNvZGUgYmxvY2suCisgICAgICAgIGppdENvZGUtPm9zckVudHJ5
QmxvY2suY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGppdENvZGUtPm9wdGltaXplQWZ0ZXJX
YXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlm
ICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgY29tcGlsYXRpb24gZmFpbGVkIGFuZCB3ZSBhbHJlYWR5IHNldCB0aGUgdGhy
ZXNob2xkcy4KKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0
IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB0
cmlnZ2VyIGEgZm9yLWVudHJ5IGNvbXBpbGUuCisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhh
bmRsZVZhbHVlczsKKyAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRs
ZVZhbHVlcyk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBERkc6OmNv
bXBpbGUoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwg
RlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICBtdXN0SGFuZGxlVmFs
dWVzLCBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUoKSwKKyAgICAgICAgdm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgCisgICAgLy8gQnV0IHdl
IGFsc28gd2FudCB0byB0cmlnZ2VyIGEgcmVwbGFjZW1lbnQgY29tcGlsZS4gT2YgY291cnNlLCB3
ZSBkb24ndCB3YW50IHRvCisgICAgLy8gdHJpZ2dlciBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvLiBO
b3RlIHRoYXQgdGhpcyBpcyBraW5kIG9mIHdlaXJkIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAvLyBo
YXZlIGp1c3QgZmluaXNoZWQgYW4gRlRMIGNvbXBpbGUgYW5kIHRoYXQgY29tcGlsZSBmYWlsZWQg
b3Igd2FzIGludmFsaWRhdGVkLgorICAgIC8vIEJ1dCB0aGlzIHNlZW1zIHVuY29tbW9uIGVub3Vn
aCB0aGF0IHdlIHNvcnQgb2YgZG9uJ3QgY2FyZS4gSXQncyBjZXJ0YWlubHkgc291bmQKKyAgICAv
LyB0byBmaXJlIG9mZiBhbm90aGVyIGNvbXBpbGUgcmlnaHQgbm93IHNvIGxvbmcgYXMgd2UncmUg
bm90IGFscmVhZHkgY29tcGlsaW5nIGFuZAorICAgIC8vIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBh
biBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuIE5vdGUsIHdlIGRvbid0IGRvIHRoaXMgZm9yCisgICAg
Ly8gb2J2aW91c2x5IGJhZCBjYXNlcyBsaWtlIGdsb2JhbCBjb2RlLCB3aGVyZSB3ZSBrbm93IHRo
YXQgdGhlcmUgaXMgYSBzbGltIGNoYW5jZQorICAgIC8vIG9mIHRoaXMgY29kZSBiZWluZyBpbnZv
a2VkIGV2ZXIgYWdhaW4uCisgICAgQ29tcGlsYXRpb25LZXkga2V5Rm9yUmVwbGFjZW1lbnQoY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSk7CisgICAgaWYgKGNvZGVCbG9jay0+
Y29kZVR5cGUoKSAhPSBHbG9iYWxDb2RlCisgICAgICAgICYmICFjb2RlQmxvY2stPmhhc09wdGlt
aXplZFJlcGxhY2VtZW50KCkKKyAgICAgICAgJiYgKCF2bS53b3JrbGlzdC5nZXQoKQorICAgICAg
ICAgICAgfHwgdm0ud29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFjZW1lbnQp
ICE9IFdvcmtsaXN0OjpOb3RLbm93bikpIHsKKyAgICAgICAgREZHOjpjb21waWxlKAorICAgICAg
ICAgICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBV
SU5UX01BWCwKKyAgICAgICAgICAgIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoKSwgdm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgfQorICAgIAorICAgIGlmIChm
b3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVudHJ5IGNvbXBpbGUg
YWxyZWFkeSBzdWNjZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKKyAgICAvLyBlbnRyeSB3aWxsIHN1
Y2NlZWQgdW5sZXNzIHdlIHJhbiBvdXQgb2Ygc3RhY2suIEl0J3Mgbm90IGNsZWFyIHdoYXQgd2Ug
c2hvdWxkIGRvLgorICAgIC8vIFdlIHNpZ25hbCB0byB0cnkgYWdhaW4gYWZ0ZXIgYSB3aGlsZSBp
ZiB0aGF0IGhhcHBlbnMuCisgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5
KAorICAgICAgICBleGVjLCBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpLCBieXRlY29kZUlu
ZGV4LCBzdHJlYW1JbmRleCk7CisgICAgaWYgKGFkZHJlc3MpCisgICAgICAgIGppdENvZGUtPm9w
dGltaXplU29vbihjb2RlQmxvY2spOworICAgIGVsc2UKKyAgICAgICAgaml0Q29kZS0+b3B0aW1p
emVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgIHJldHVybiBhZGRyZXNzOworfQorI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCiB9IC8vIGV4dGVybiAiQyIKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDExIEBAIHZvaWQgREZHX09Q
RVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKIAogdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdn
ZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIHN0cmVhbUluZGV4
KSBXVEZfSU5URVJOQUw7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gLy8gZXh0ZXJu
ICJDIgogCiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdUeXBlZEFycmF5
V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEzICs4MSwxMyBA
QCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiAKIFBsYW46OlBsYW4o
CiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25lZCBu
dW1WYXJzV2l0aFZhbHVlcykKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogdm0oKnBhc3Nl
ZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAgICAg
LCBtb2RlKG1vZGUpCiAgICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29k
ZUluZGV4KQogICAgICwgbnVtVmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAg
LCBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0
aFZhbHVlcykKKyAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAs
IGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRv
cHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSksIFByb2Zp
bGVyOjpERkcpKSA6IDApCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAgICAg
LCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCkBAIC0xNjUsNiArMTY1LDE2IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBpZiAodmFsaWRhdGlv
bkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAgICAKKyAgICBpZiAobW9kZSA9
PSBGVExGb3JPU1JFbnRyeSkgeworICAgICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm1PU1JFbnRy
eXBvaW50Q3JlYXRpb24oZGZnKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAg
IGZpbmFsaXplciA9IGFkb3B0UmVmKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKKyAgICAg
ICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAgICB9CisgICAgICAgIGlmICh2YWxpZGF0aW9u
RW5hYmxlZCgpKQorICAgICAgICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICB9CisgICAgCiAgICAg
cGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Q
cm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGNs
YXNzIExvbmdMaXZlZFN0YXRlOwogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8UGxhbj4gewogICAgIFBsYW4oCiAgICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiwg
Q29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgICAg
IHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgY29uc3QgT3BlcmFuZHM8SlNW
YWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAgICAgdm9pZCBj
b21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDgg
KzI3Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2UKIAogV29y
a2xpc3QqIGdsb2JhbFdvcmtsaXN0KCkKIHsKLSAgICBpZiAoIWVuYWJsZUNvbmN1cnJlbnRKSVQo
KSkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgcHRocmVhZF9vbmNlKCZpbml0aWFsaXplR2xvYmFs
V29ya2xpc3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKTsKICAgICByZXR1
cm4gdGhlR2xvYmFsV29ya2xpc3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDYgQEAgcHJpdmF0
ZToKIC8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQncyBub3Qg
Y2xlYXIgdGhhdCB0aGlzCiAvLyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBpcyB3
aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0aW9uCiAvLyB3aWxsIGxhemlseSBjcmVhdGUg
b25lIHdoZW4gaXQncyBuZWVkZWQuCi0vLwotLy8gVGhpcyByZXR1cm5zIG51bGwgaWYgZm9yIGFu
eSByZWFzb24gd2Ugc2hvdWxkbid0IGJlIGRvaW5nIGNvbmN1cnJlbnQKLS8vIGNvbXBpbGF0aW9u
LgogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCk7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVu
dHJ5SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitGb3JP
U1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5
SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29k
ZSogRm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7CisgICAgcmV0dXJuIHRo
aXM7Cit9CisKK3ZvaWQgRm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlCdWZmZXIo
Vk0mIHZtLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpCit7CisgICAgbV9lbnRyeUJ1ZmZl
ciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKyNkZWZpbmUgRlRMRm9yT1NS
RW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGludG8gdGhlIEZUTCBoYXMgYSBudW1iZXIg
b2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9ubHkgaGFwcGVucyB0aHJvdWdoIHNwZWNp
YWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBoYXZlIHRoZWlyCisvLyAgIG93biBDb2Rl
QmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8KKy8vIC0gV2Ugb25seSBPU1IgZW50ZXIg
aW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwgaW5saW5lIGNhbGwgZnJhbWUuCisvLwor
Ly8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBhbGxvd3MgZW50cnkgdGhyb3VnaCBvbmx5
IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9yT1NSRW50cnlKSVRDb2RlIDogcHVibGlj
IEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9yT1NSRW50cnlKSVRDb2RlKCk7CisgICAg
fkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVm
ZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVy
KiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KKyAgICAKKyAg
ICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9ieXRlY29kZUluZGV4
ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVyZSgpOwor
ICAgIHVuc2lnbmVkIGVudHJ5RmFpbHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUZh
aWx1cmVDb3VudDsgfQorICAgIAorICAgIEZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50
cnkoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsg
Ly8gT25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLgorICAgIHVuc2lnbmVkIG1fYnl0ZWNv
ZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNvdW50OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZMVF9KSVQpCisKKyNlbmRp
ZiAvLyBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgcHVi
bGljOgogICAgIHNpemVfdCBzaXplKCk7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAg
CisgICAgdm9pZCBpbml0aWFsaXplRW50cnlCdWZmZXIoVk0mLCB1bnNpZ25lZCBudW1DYWxsZWVS
ZWdpc3RlcnMpOworICAgIFNjcmF0Y2hCdWZmZXIqIGVudHJ5QnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9lbnRyeUJ1ZmZlcjsgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVua3Mo
Q29kZVJlZik7CiAgICAgdm9pZCBhZGRIYW5kbGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29kZShDb2RlUmVmIGVudHJ5cG9pbnQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODEsOCArNDgxLDI0IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgaW50IG9wZXJhbmQgPSB2YXJpYWJsZS0+
b3BlcmFuZCgpOwotCi0gICAgICAgIExWYWx1ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3Iob3BlcmFuZCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpzVmFsdWU7CisgICAg
ICAgIHN3aXRjaCAobV9ncmFwaC5tX3BsYW4ubW9kZSkgeworICAgICAgICBjYXNlIEZUTE1vZGU6
CisgICAgICAgICAgICBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgor
ICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAg
ICAgIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KG1fb3V0
LmFic29sdXRlKHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgICAgICAgICAg
ICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKSkg
KyBvcGVyYW5kKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKHVzZUtpbmRGb3Io
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5Lmgi
CisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
Cit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sq
IGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpOworICAgIERGRzo6SklUQ29kZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmcoKTsKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgCisgICAgZGF0YUxv
ZygKKyAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRy
eUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICBieXRlY29kZUluZGV4LCAiLlxuIik7Cisg
ICAgCisgICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCkp
IHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZv
ciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5
dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBPcGVy
YW5kczxKU1ZhbHVlPiB2YWx1ZXM7CisgICAgZGZnQ29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAg
IGV4ZWMsIGRmZ0NvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5k
ZXgsIHZhbHVlcyk7CisgICAgCisgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisg
ICAgICAgICAgICBleGVjW2FyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KV0uanNWYWx1ZSgpID09
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVCh2YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdp
c3RlcnMpOworICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPigKKyAgICAgICAgZW50cnlDb2RlLT5lbnRyeUJ1ZmZlcigpLT5kYXRh
KCkpOworICAgIAorICAgIGZvciAoaW50IGxvY2FsID0gdmFsdWUubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwtLTspCisgICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
cy5sb2NhbChsb2NhbCkpOworICAgIAorICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCku
Z3JvdygKKyAgICAgICAgICAgICZleGVjLT5yZWdpc3RlcnMoKVtlbnRyeUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVyc10pKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZh
aWxlZC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgZXhlYy0+c2V0
Q29kZUJsb2NrKGVudHJ5Q29kZUJsb2NrKTsKKyAgICAKKyAgICB2b2lkICpyZXN1bHQgPSBlbnRy
eUNvZGUtPmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNj
ZWVkLCBnb2luZyB0byBhZGRyZXNzIiwgUmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JFbnRy
eV9oCisjZGVmaW5lIEZUTE9TUkVudHJ5X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxv
Y2s7CitjbGFzcyBFeGVjU3RhdGU7CisKK25hbWVzcGFjZSBGVEwgeworCit2b2lkKiBwcmVwYXJl
T1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVC
bG9jayogZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCisgICAgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkVudHJ5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRG
aW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MCw5ICs0MiwyMyBAQCBTdGF0ZTo6U3Rh
dGUoR3JhcGgmIGdyYXBoKQogICAgICwgY29udGV4dChMTFZNQ29udGV4dENyZWF0ZSgpKQogICAg
ICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQotICAgICwgaml0Q29kZShhZG9wdFJlZihu
ZXcgSklUQ29kZSgpKSkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCiB7CisgICAgc3dpdGNo
IChncmFwaC5tX3BsYW4ubW9kZSkgeworICAgIGNhc2UgRlRMTW9kZToKKyAgICAgICAgaml0Q29k
ZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZU
TEZvck9TUkVudHJ5TW9kZToKKyAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklUQ29kZT4gY29k
ZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CisgICAgICAgIGNvZGUtPmlu
aXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVSZWdp
c3RlcnMpOworICAgICAgICBjb2RlLT5zZXRCeXRlY29kZUluZGV4KGdyYXBoLm1fcGxhbi5vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBqaXRDb2RlID0gY29kZTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAogICAgIGZpbmFsaXplciA9IG5ldyBKSVRGaW5h
bGl6ZXIoZ3JhcGgubV9wbGFuKTsKICAgICBncmFwaC5tX3BsYW4uZmluYWxpemVyID0gYWRvcHRQ
dHIoZmluYWxpemVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBhc0lubGluZUNhbGxG
cmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQzMigpIGNvbnN0OwogICAg
ICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSB1bmJveGVk
RG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hlZENlbGwoKSBjb25zdDsKICAg
ICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgdGFnKCkgY29u
c3Q7CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSW5zdHJ1
Y3Rpb24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBlbmNvZGVkVmFsdWU7CisgICAg
ICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAgICAgfTsKIApAQCAtMTg4LDYg
KzE5MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuICEhcGF5bG9hZCgpOwog
ICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lzdGVyOjp1bmJveGVkRG91Ymxl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJlcjsKKyAgICB9CisKICAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkgY29uc3QKICAgICB7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAgRlRMOjpKSVRDb2RlKiBK
SVRDb2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZvck9TUkVudHJ5SklUQ29k
ZSogSklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29k
ZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYz
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKTsK
ICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAgICAgdmlydHVhbCBGVEw6OkpJVENv
ZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9T
UkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqLCBDYWxsRnJhbWUq
LCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE2ICsxMDM2LDMyIEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9Ci0gICAgICAgICAgICBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7Ci0gICAgICAgIFJlZlB0cjxDb2Rl
QmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2bS53b3JrbGlzdCA9
IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1
ZXM7CisgICAgICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICBudW1W
YXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CisgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+
IG11c3RIYW5kbGVWYWx1ZXMoCisgICAgICAgICAgICBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11
c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0g
bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJn
dW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAgICAgICAgLy8gVWdo
LiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xk
IGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQu
IEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAor
ICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQg
Y2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAgICAgICAgICAgICAg
IC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4K
KyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCi0g
ICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9jay5nZXQoKSwgREZHOjpERkdNb2RlLCBi
eXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAgICAgIHZtLndvcmtsaXN0LmdldCgpKTsK
KyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCksIERGRzo6REZHTW9k
ZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSwKKyAgICAgICAgICAgIHZtLmVu
c3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxh
dGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDU0LDE1ICsxMDcwLDYg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgQ29kZUJsb2NrKiBv
cHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CiAgICAgQVNTRVJU
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkp
OwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRMIEpJVCBkb2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5
IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMzYyNQotICAgICAgICAKLSAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdh
aW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJl
cGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4
KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24g
MTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MDksNiArNzA5LDE1IEBAIHZvaWQgVk06OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKENvbnNlcnYKICAgICAgICAgfQogICAgIH0KIH0KKworREZHOjpXb3JrbGlzdCogVk06OmVu
c3VyZVdvcmtsaXN0KCkKK3sKKyAgICBpZiAoIWVuYWJsZUNvbmN1cnJlbnRKSVQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAgICAgICAgd29ya2xpc3QgPSBERkc6
Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmtsaXN0LmdldCgpOworfQogI2VuZGlm
CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAgICAgICAgIHZvaWQgbWFr
ZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAgICAgIAorI2lmIEVOQUJMRShERkdf
SklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVXb3JrbGlzdCgpOworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEpTTG9jaz4g
bV9hcGlMb2NrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210216</attachid>
            <date>2013-08-31 14:44:18 -0700</date>
            <delta_ts>2013-08-31 15:48:15 -0700</delta_ts>
            <desc>getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86759</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNiArMTUwLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOwogICAgICAgICBicmVhazsK
ICAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6IHsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKQEAgLTE1
MTUsNiArMTUyMCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICBjYXNlIENvdW50
RXhlY3V0aW9uOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1Rp
ZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTUzLDYgKzMxNTMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVn
OiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0
SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7CisgICAgICAgICAgICBtX2dyYXBoLm1f
bGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMzYzNCw3ICszNjM2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0g
ICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CisgICAgICAgICAgICBtX2dyYXBo
LmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ4NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhh
c2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwot
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNp
emUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUo
YmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1fYWxs
b2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwotICAgICAgICAKLSAgICAgICAgbV9n
cmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5k
QWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGUqIGxp
dmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIExv
Z2ljYWxOb3Q6CiAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6CkBAIC0xMzMsNiArMTM0LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgUmV0dXJuOgogICAg
IGNhc2UgVW5yZWFjaGFibGU6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsOSArNTUsOSBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUs
Ci0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQor
ICAgIFZNJiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4m
IG11c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwogICAgIApAQCAt
NjcsOCArNjcsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAK
LSAgICBBU1NFUlQob3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKLQogICAgIGlm
ICghT3B0aW9uczo6dXNlREZHSklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCkBAIC03OCw4
ICs3Niw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBpZiAo
bG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2coIkRGRyhEcml2ZXIpIGNv
bXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwogICAgIAotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhl
IERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgYWwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBv
biB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKTsKQEAgLTkzLDI5ICs4OSw4IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKICAgICB2bS5nZXRDVElTdHViKEZUTDo6b3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik7CiAjZW5kaWYKICAgICAKLSAgICAvLyBEZXJpdmUgb3VyIHNldCBvZiBt
dXN0LWhhbmRsZSB2YWx1ZXMuIFRoZSBjb21waWxhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IGNvbnNl
cnZhdGl2ZQotICAgIC8vIGVub3VnaCB0byBhbGxvdyBmb3IgT1NSIGVudHJ5IHdpdGggdGhlc2Ug
dmFsdWVzLgotICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOwotICAgIGlmIChvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5t
X251bVZhcnM7Ci0gICAgZWxzZQotICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFBsYW4oY29kZUJsb2Nr
LCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51bVZhcnNXaXRoVmFsdWVzKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAg
ICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiBj
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCi0gICAgICAgICAgICAmJiBjb2Rl
QmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKLSAgICAg
ICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1
bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCi0gICAgICAgICAgICAvLyBhbHNvIG5ldmVy
IGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZv
ciB0aGlzLAotICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1YWwgdmFsdWUg
dGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCi0gICAgICAgICAg
ICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQu
Ci0gICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0g
ZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgfQorICAgICAgICBuZXcg
UGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZh
bHVlcykpOwogICAgIAogICAgIGlmICh3b3JrbGlzdCkgewogICAgICAgICBwbGFuLT5jYWxsYmFj
ayA9IGNhbGxiYWNrOwpAQCAtMTMwLDcgKzEwNSw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKIH0KICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYsCiAgICAgUGFzc1JlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopCiB7CiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTM4LDEzICsxMTMsMTMgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3Nl
ZENhbGxiYWNrLAotICAgIFdvcmtsaXN0KiB3b3JrbGlzdCkKKyAgICBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVz
LAorICAgIEpTUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3NlZENh
bGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBt
b2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlzdCk7CisgICAgICAg
IHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZh
bHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9u
RGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVC
bG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw5IEBAIEpT
X0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGEKIAogLy8gSWYgdGhlIHdvcmts
aXN0IGlzIG5vbi1udWxsLCB3ZSBkbyBhIGNvbmN1cnJlbnQgY29tcGlsZS4gT3RoZXJ3aXNlIHdl
IGRvIGEgc3luY2hyb25vdXMKIC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2UgZG8gYSBzeW5jaHJvbm91
cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXN1bHQuCi1Db21waWxh
dGlvblJlc3VsdCBjb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0Kik7CitDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KAorICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNh
c2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAg
ICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9j
YWw6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNiw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFu
ZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEp
LCAiKSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7CisgICAg
ICAgIGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJh
cmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9CiAgICAgaWYgKG5vZGUt
Pmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAg
ICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CkBAIC00ODcsNiArNDk0
LDI5IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2st
PnBoaXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQo
bm9kZUluZGV4KSk7CisgICAgCisgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOworfQorCit2
b2lkIEdyYXBoOjpraWxsVW5yZWFjaGFibGVCbG9ja3MoKQoreworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBtX2tpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsKKyAgICB9Cit9CisKIHZvaWQg
R3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1NDg1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
NDg5LDYgKzQ4OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGtpbGxCbG9jayhiYXNpY0Jsb2NrLT5p
bmRleCk7CiAgICAgfQogICAgIAorICAgIHZvaWQga2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFz
aWNCbG9jayopOworICAgIAorICAgIHZvaWQga2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CisgICAg
CiAgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgJiYgaXNOdW1l
cmljYWwobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpKTsKQEAgLTY5OCw2ICs3MDIsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNl
Kj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9w
cmVzZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX2xhenlWYXJzOwogICAgIERvbWluYXRvcnMg
bV9kb21pbmF0b3JzOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKICAgICB1bnNp
Z25lZCBtX2xvY2FsVmFyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6
OmluaXRpYWxpemUoKQogICAgIHJvb3QtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKICAgICByb290
LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBy
b290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSkgewogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5LDggKzEzMCw2
IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0NlbGwpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwotICAgICAgICAKLSAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gcm9vdC0+
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxNDUgQEAg
dm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJp
bmtUb0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4
LAorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7CisgICAgdmFyaWFibGVF
dmVudFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBt
aW5pZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6cmVj
b25zdHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxK
U1ZhbHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJp
ZXM7CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwg
cmVjb3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFu
ZHNMaWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsg
aS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kc0ZvckluZGV4KGkp
OworICAgICAgICAKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAg
ICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICYmIGNv
ZGVCbG9jay0+Y29kZXR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKKyAgICAgICAgICAgICYmIGNvZGVC
bG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAg
ICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3Vt
ZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIg
YmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9y
IHRoaXMsCisgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0
aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAg
IC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4K
KyAgICAgICAgICAgIHJlc3VsdFtpXSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVy
eSA9IHJlY292ZXJpZXNbaV07CisgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNr
OgorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRDZWxsOgorICAgICAgICBj
YXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9
IGV4ZWNbaV0uanNWYWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxy
ZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihleGVjW2ldLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9
IGpzRG91YmxlTnVtYmVyKGV4ZWNbaV0udW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSByZWNvdmVy
eS5jb25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVy
LmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCkpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsK
KyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNv
b24uXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3Zv
aWQgSklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ss
ICI6IEZUTC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVy
LnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVl
KE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAg
IGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxv
ZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJW
YWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJh
c2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29u
Y3VycmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGgg
Y29uY3VycmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNl
U2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgewor
ICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9u
RmFpbGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAg
ICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlv
biA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6
CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhpcyBpcyB3
ZWlyZCAtIGl0IHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNvZGUgYmxv
Y2sgKGkuZS4KKyAgICAgICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENvZGUgYmVs
b25ncyB0bykgaXMgYWxzbyBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9lc24ndCBy
ZWFsbHkgbWF0dGVyIHdoYXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5nIGFueXdh
eS4gTm90ZQorICAgICAgICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXphdGlvbiBh
Y3R1YWxseSBtZWFucyB0aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3aWNlLiBC
dXQgdGhhdCdzIGdlbmVyYWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJlb3B0aW1p
emF0aW9ucworICAgICAgICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4KKyAgICAg
ICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOwor
ICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNp
b24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgpAQCAtOTMsOCArOTQsMzEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAgICAgICBD
b2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4mIHJlc3VsdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBvbmx5IGFwcGxpY2Fi
bGUgaWYgd2UncmUgYXQgYSBwb2ludCB3aGVyZSBhbGwgdmFsdWVzIGFyZSBzcGlsbGVkIHRvIHRo
ZQorICAgIC8vIHN0YWNrLiBDdXJyZW50bHksIGl0IGFsc28gaGFzIHRoZSByZXN0cmljdGlvbiB0
aGF0IHRoZSB2YWx1ZXMgbXVzdCBiZSBpbiB0aGVpcgorICAgIC8vIGJ5dGVjb2RlLWRlc2lnbmF0
ZWQgc3RhY2sgc2xvdHMuCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAg
ICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4mIHJlc3VsdCk7CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KyAgICAvLyBOQi4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJlY2F1c2Ug
dGhleSBtYXkgd2FudCB0byB1c2UKKyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91dCBzY2Fs
aW5nIHRocmVzaG9sZHMuIEl0IHNob3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAgCisgICAg
Ym9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sqKTsKKyAg
ICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBkb250
T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplQWZ0ZXJX
YXJtVXAoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKik7Cisg
ICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVCbG9jayop
OworICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKyAgICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAgIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVy
IHRvIGNhbGwgc2V0Q29kZVJlZigpLgogCkBAIC0xMDYsNiArMTMwLDEwIEBAIHB1YmxpYzoKICAg
ICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hw
b2ludHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07
CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworI2lmIEVOQUJMRShGVExfSklU
KQorICAgIEV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKKyAgICBSZWZQdHI8Q29kZUJs
b2NrPiBvc3JFbnRyeUJsb2NrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDIwIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0KICAgICAK
KyAgICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2FzZSBFeHRyYWN0
T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChv
cCgpID09IEdldExvY2FsVW5saW5rZWQpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2Nh
bCgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9vcElu
Zm8pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAorICAgIC8qIFNwZWNpYWwgbm9kZSBmb3Ig
T1NSIGVudHJ5IGludG8gdGhlIEZUTC4gSW5kaWNhdGVzIHRoYXQgd2UncmUgbG9hZGluZyBhIGxv
Y2FsICovXAorICAgIC8qIHZhcmlhYmxlIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1wKKyAg
ICBtYWNybyhFeHRyYWN0T1NSRW50cnlMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCisgICAgXAorICAg
IC8qIFRpZXItdXAgY2hlY2tzIGZyb20gdGhlIERGRyB0byB0aGUgRlRMLiAqL1wKKyAgICBtYWNy
byhDaGVja1RpZXJVcEluTG9vcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNr
VGllclVwQW5kT1NSRW50ZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1Rp
ZXJVcEF0UmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAogICAgIC8qIEdldCB0aGUg
dmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhlIFZhcmlh
YmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9y
IHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9cCiAgICAg
LyogYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBsb2NhbCBhY2Nlc3MsIGFuZCB0aHVzIGhhZCB0
aGVpciBvd24gcHJvZmlsaW5nLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3LDM0IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKIAogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJPU1Ig
aW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAorICAg
ICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAi
LCAqY29kZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJc
biIpOwogICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgIC8vIFdoZW4g
d2lsbCB0aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
LSBBbiBleGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUgYmFzZWxpbmUgSklUIGZvbGxvd2Vk
IGJ5IGFuIGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVudGVyLiBXZSdyZSBmaW5lIHdpdGgg
YWxsb3dpbmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5zCisgICAgICAgIC8vICAgZW5vdWdo
IHdlJ2xsIGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgdGhlIE9TUiBl
eGl0IGNvc3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5kIHNvIHJlb3B0aW1pemluZyBpcyB0
aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgaGF2ZSBy
ZWN1cnNpdmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lkZXIgdGhhdCBmb28gaGFzIGEgaG90
IGxvb3AKKyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2VsZi4gV2UgaGF2ZSB0d28gZm9vJ3Mg
b24gdGhlIHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisgICAgICAgIC8vICAgYW5kIGZvbzIs
IHdpdGggZm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBmb28ncyBob3QgbG9vcC4gZm9vMiBn
ZXRzCisgICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUgd2F5IGludG8gdGhlIEZUTC4gVGhl
biBpdCByZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAgICAgICAgLy8gICBmb28xIHdhbnRz
IHRvIGdldCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRoaXMgY29uY2x1c2lvbiBmcm9tIGl0
cworICAgICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0IHRvIE9TUiBlbnRlci4gQW5kIHdl
J2xsIHRlbGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAgICAgLy8gICBtaWdodCBiZSB3b3J0
aCBhZGRyZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0aGluayB0aGlzIGNhc2Ugd2lsbAor
ICAgICAgICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3csIGlmIGl0IGRvZXMgaGFwcGVuLCBp
dCdsbCBjYXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAgIC8vICAgdGhyYXNoaW5nLgorICAg
ICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIGJsb2NrIGlzIG5v
dCBERkcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIE9TUkVudHJ5
RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5RGF0YUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFlbnRyeSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICAgICAgLCBtX2luc2Vy
dGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhy
ZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1f
Z3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgg
IT0gVUlOVF9NQVgpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IG1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrOworICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25T
ZXQgaW5zZXJ0aW9uU2V0OworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0g
MDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiA9
PSBieXRlY29kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYmxvY2s7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXRhcmdldCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHRlcnJpYmxlIG91dGNvbWUu
IEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4gYnV0IGl0IG1pZ2h0CisgICAgICAgICAgICAvLyBo
YXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZlbmQgYWdhaW5zdCBpdC4gSWYgaXQgaGFwcGVucywg
dGhlbiB0aGlzCisgICAgICAgICAgICAvLyBjb21waWxhdGlvbiBpcyBhIGZhaWx1cmUuCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2lj
QmxvY2sqIG5ld1Jvb3QgPSBtX2luc2VydGlvblNldC5pbnNlcnQoMCk7CisgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IHRhcmdldC0+YXQoMCktPmNvZGVPcmlnaW47CisgICAgICAgIAor
ICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzZWxpbmUtPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5ld1Jv
b3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFy
Z3VtZW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXQtPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOworICAg
ICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV9hcmd1bWVudHNbb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCldID0gbm9kZTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CisgICAgICAgICAgICBOb2RlKiBwcmV2
aW91c0hlYWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+YXBw
ZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUo
CisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2lu
LCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgY29kZU9y
aWdpbiwgT3BJbmZvKHRhcmdldCkpOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwor
ICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgIG1fZ3JhcGgua2ls
bFVucmVhY2hhYmxlQmxvY2tzKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRW50cnlwb2ludCBDcmVhdGlv
biIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZT4oZ3Jh
cGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZV9oCisjZGVmaW5lIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgcGhhc2UgaXMgb25s
eSBmb3IgY29tcGlsYXRpb24gcGlwZWxpbmVzIHRoYXQgZ28gdGhyb3VnaCBTU0EsIGFuZCB0aGF0
CisvLyBkbyBhIHNwZWNpYWxpemVkIE9TUiBlbnRyeSBjb21waWxlLiBDdXJyZW50bHkgdGhhdCBt
ZWFucyBGVEwuCisvLworLy8gQ3JlYXRlcyBhbiBPU1IgZW50cnlwb2ludCB0aGF0IGVzdGFibGlz
aGVzIGFsbCBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKy8vIHZhbHVlcy4gVGhpcyBlbnRy
eXBvaW50IG9ubHkgd29ya3MgZm9yIHRoZSBQbGFuOjpvc3JFbnRyeUJ5dGVjb2RlSW5kZXguCisv
LyBVbmxpa2Ugb3JkaW5hcnkgT1NSIGVudHJ5IGludG8gdGhlIERGRywgdGhpcyBmb3JjZXMgYWxs
IHZhcmlhYmxlcyBzbHVycGVkCisvLyBpbiB0aHJvdWdoIE9TUiBlbnRyeSB0byBhcHBlYXIgVE9Q
IHRvIHRoZSBDRkEuIEhlbmNlIHRoaXMgcGhhc2UgbXVzdCBiZSBydW4KKy8vIGVhcmx5IC0gYmVm
b3JlIGRvaW5nIGFueSBDRkEuIEJ1dCB0aGlzIGFsc28gZG9lcyBzb21lIGFkZGl0aW9uYWwgaGFj
a3MgdGhhdAorLy8gcmVxdWlyZSB0aGlzIHRvIHJ1biBiZWZvcmUgdW5pZmljYXRpb24uCisKK2Jv
b2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDE1LDYgKzIwMTUsMTg0IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJS
ZW8KICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKIH0KIAorI2lmIEVOQUJMRShGVExfSklU
KQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBKSVRDb2Rl
KiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIAorICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpj
b2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVy
ID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIpOworICAgIH0K
KyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxv
Y2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWlsdXJlLlxuIik7
CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVibG9jayk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5jaGVja0lmT3B0
aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8g
RlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYg
KFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLndvcmtsaXN0LmdldCgpKSB7CisgICAgICAgIHdvcmts
aXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCisgICAgICAg
ICAgICB2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRM
TW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5v
dEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxp
bmcpIHsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkp
IHsKKyAgICAgICAgLy8gVGhhdCdzIGdyZWF0LCB3ZSd2ZSBjb21waWxlZCB0aGUgY29kZSAtIG5l
eHQgdGltZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24sCisgICAgICAgIC8vIHdlJ2xsIGVudGVyIHRo
YXQgcmVwbGFjZW1lbnQuCisgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0
OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgZmluaXNoZWQgY29t
cGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUKKyAgICAgICAgLy8g
dGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29k
ZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCBy
ZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVl
ZCB0byBjb21waWxlIHRoZSBjb2RlLgorICAgIERGRzo6Y29tcGlsZSgKKyAgICAgICAgZXhlYywg
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3Bl
cmFuZHM8SlNWYWx1ZT4oKSwKKyAgICAgICAgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s6OmNyZWF0ZSgpLCB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciogREZHX09Q
RVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCisgICAgRXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
RGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0
cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgaml0
Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgeworICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJy
aW5nIEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVj
YXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUuXG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9u
dE9wdGltaXplQW55dGltZVNvb24oY29kZWJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFj
aGVkKGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVC
bG9jaywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBXb3Jr
bGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0g
dm0ud29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5j
b21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktl
eShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAg
ICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAg
ICAgIEFTU0VSVCghaml0Q29kZS0+b3NyRW50cnlCbG9jayk7CisgICAgICAgIGppdENvZGUtPnNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlv
bkRlZmVycmVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoQ29kZUJs
b2NrKiBlbnRyeUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSkgeworICAgICAg
ICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KAorICAgICAgICAgICAg
ICAgIGV4ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5k
ZXgpKSB7CisgICAgICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIHJldHVybiBhZGRyZXNzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBG
VEw6OkZvck9TUkVudHJ5SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlCbG9jay0+ZnRsRm9yT1NS
RW50cnkoKTsKKyAgICAgICAgZW50cnlDb2RlLT5jb3VudEVudHJ5RmFpbHVyZSgpOworICAgICAg
ICBpZiAoZW50cnlDb2RlLT5lbnRyeUZhaWx1cmVDb3VudCgpIDwKKyAgICAgICAgICAgIE9wdGlv
bnM6OmZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSkgeworICAgICAg
ICAgICAgCisgICAgICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBPU1Ig
ZW50cnkgZmFpbGVkLiBPaCBubyEgVGhpcyBpbXBsaWVzIHRoYXQgd2UgbmVlZCB0byByZXRyeS4g
V2UgcmV0cnkKKyAgICAgICAgLy8gd2l0aG91dCBleHBvbmVudGlhbCBiYWNrb2ZmIGFuZCB3ZSBv
bmx5IGRvIHRoaXMgZm9yIHRoZSBlbnRyeSBjb2RlIGJsb2NrLgorICAgICAgICBqaXRDb2RlLT5v
c3JFbnRyeUJsb2NrLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6
ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAK
KyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAg
Ly8gVGhpcyBtZWFucyB0aGF0IGNvbXBpbGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQg
dGhlIHRocmVzaG9sZHMuCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAg
ICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVk
IGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LlxuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3Mg
aXMgdG8gdHJpZ2dlciBhIGZvci1lbnRyeSBjb21waWxlLgorICAgIE9wZXJhbmRzPEpTVmFsdWU+
IG11c3RIYW5kbGVWYWx1ZXM7CisgICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAgIGV4
ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11
c3RIYW5kbGVWYWx1ZXMpOworICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0g
REZHOjpjb21waWxlKAorICAgICAgICBleGVjLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCku
Z2V0KCksIEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgbXVzdEhh
bmRsZVZhbHVlcywgREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6Y3JlYXRlKCksCisgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworICAgIAorICAgIC8v
IEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBhIHJlcGxhY2VtZW50IGNvbXBpbGUuIE9mIGNv
dXJzZSwgd2UgZG9uJ3Qgd2FudCB0bworICAgIC8vIHRyaWdnZXIgaXQgaWYgd2UgZG9uJ3QgbmVl
ZCB0by4gTm90ZSB0aGF0IHRoaXMgaXMga2luZCBvZiB3ZWlyZCBiZWNhdXNlIHdlIG1pZ2h0Cisg
ICAgLy8gaGF2ZSBqdXN0IGZpbmlzaGVkIGFuIEZUTCBjb21waWxlIGFuZCB0aGF0IGNvbXBpbGUg
ZmFpbGVkIG9yIHdhcyBpbnZhbGlkYXRlZC4KKyAgICAvLyBCdXQgdGhpcyBzZWVtcyB1bmNvbW1v
biBlbm91Z2ggdGhhdCB3ZSBzb3J0IG9mIGRvbid0IGNhcmUuIEl0J3MgY2VydGFpbmx5IHNvdW5k
CisgICAgLy8gdG8gZmlyZSBvZmYgYW5vdGhlciBjb21waWxlIHJpZ2h0IG5vdyBzbyBsb25nIGFz
IHdlJ3JlIG5vdCBhbHJlYWR5IGNvbXBpbGluZyBhbmQKKyAgICAvLyB3ZSBkb24ndCBhbHJlYWR5
IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiBOb3RlLCB3ZSBkb24ndCBkbyB0aGlzIGZv
cgorICAgIC8vIG9idmlvdXNseSBiYWQgY2FzZXMgbGlrZSBnbG9iYWwgY29kZSwgd2hlcmUgd2Ug
a25vdyB0aGF0IHRoZXJlIGlzIGEgc2xpbSBjaGFuY2UKKyAgICAvLyBvZiB0aGlzIGNvZGUgYmVp
bmcgaW52b2tlZCBldmVyIGFnYWluLgorICAgIENvbXBpbGF0aW9uS2V5IGtleUZvclJlcGxhY2Vt
ZW50KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpOworICAgIGlmIChjb2Rl
QmxvY2stPmNvZGVUeXBlKCkgIT0gR2xvYmFsQ29kZQorICAgICAgICAmJiAhY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCisgICAgICAgICYmICghdm0ud29ya2xpc3QuZ2V0KCkK
KyAgICAgICAgICAgIHx8IHZtLndvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKGtleUZvclJlcGxh
Y2VtZW50KSAhPSBXb3JrbGlzdDo6Tm90S25vd24pKSB7CisgICAgICAgIERGRzo6Y29tcGlsZSgK
KyAgICAgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRM
TW9kZSwgVUlOVF9NQVgsCisgICAgICAgICAgICBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjazo6Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBj
b21waWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAgLy8gZW50cnkg
d2lsbCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3
aGF0IHdlIHNob3VsZCBkby4KKyAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEg
d2hpbGUgaWYgdGhhdCBoYXBwZW5zLgorICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVP
U1JFbnRyeSgKKyAgICAgICAgZXhlYywgaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSwgYnl0
ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgIGlmIChhZGRyZXNzKQorICAgICAgICBqaXRD
b2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIGppdENvZGUt
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICByZXR1cm4gYWRkcmVzczsKK30K
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiwxMSBAQCB2b2lk
IERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAKIHZvaWQgREZHX09QRVJBVElP
TiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwogCisj
aWYgRU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhF
eGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JF
bnRyeU5vdyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJl
YW1JbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9IC8v
IGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlw
ZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw2IEBACiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKICNpZiBFTkFCTEUoRlRMX0pJ
VCkKLSNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJGVExDb21waWxlLmgi
CiAjaW5jbHVkZSAiRlRMRmFpbC5oIgogI2luY2x1ZGUgIkZUTExpbmsuaCIKQEAgLTgxLDEzICs4
MCwxMyBAQCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiAKIFBsYW46
OlBsYW4oCiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29tcGls
YXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNp
Z25lZCBudW1WYXJzV2l0aFZhbHVlcykKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogdm0o
KnBhc3NlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2sp
CiAgICAgLCBtb2RlKG1vZGUpCiAgICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlC
eXRlY29kZUluZGV4KQogICAgICwgbnVtVmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMp
Ci0gICAgLCBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1W
YXJzV2l0aFZhbHVlcykKKyAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykK
ICAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1f
cGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSks
IFByb2ZpbGVyOjpERkcpKSA6IDApCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkp
CiAgICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCkBAIC0xNjUsNiArMTY0LDE2
IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBpZiAodmFs
aWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAgICAKKyAgICBpZiAo
bW9kZSA9PSBGVExGb3JPU1JFbnRyeSkgeworICAgICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm1P
U1JFbnRyeXBvaW50Q3JlYXRpb24oZGZnKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgICAgIGZpbmFsaXplciA9IGFkb3B0UmVmKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsK
KyAgICAgICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAgICB9CisgICAgICAgIGlmICh2YWxp
ZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICB9CisgICAg
CiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRp
Y3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwpAQCAtMjA2LDEw
ICsyMTUsMTkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
ICAgICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7CiAgICAgfQog
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBERkdNb2RlOiB7CisgICAgICAgIHBlcmZv
cm1UaWVyVXBDaGVja0luamVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgY2FzZSBGVExNb2RlOgorICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CiAjaWYgRU5B
QkxFKEZUTF9KSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCi0gICAg
ICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgJiYg
RlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAgICAgICAgaWYgKCFGVEw6OmNhbkNvbXBpbGUoZGZn
KSkgeworICAgICAgICAgICAgZmluYWxpemVyID0gYWRvcHRSZWYobmV3IEZhaWxlZEZpbmFsaXpl
cigqdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CisgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwogICAgICAgICBw
ZXJmb3JtTG9vcFByZUhlYWRlckNyZWF0aW9uKGRmZyk7CkBAIC0yNDQsMTAgKzI2MiwxNiBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIEZUTDo6Y29t
cGlsZShzdGF0ZSk7CiAgICAgICAgIEZUTDo6bGluayhzdGF0ZSk7CiAgICAgICAgIHJldHVybiBG
VExQYXRoOwotICAgIH0KICNlbHNlCi0gICAgUkVMRUFTRV9BU1NFUlQoIU9wdGlvbnM6OnVzZUV4
cGVyaW1lbnRhbEZUTCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7CiAgICAgcGVyZm9ybURDRShkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIExvbmdMaXZlZFN0
YXRlOwogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oCiAgICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiwgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIHVuc2lnbmVkIG51bVZh
cnNXaXRoVmFsdWVzKTsKKyAgICAgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5k
bGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQo
TG9uZ0xpdmVkU3RhdGUmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCwxMCBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgTW92SGlu
dDoKICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNhc2UgWm9tYmllSGlu
dDogeworICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBD
aGVja1RpZXJVcEFuZE9TUkVudGVyOiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxk
IG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAg
ICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFz
ZS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NTEsNiAr
NTU0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNh
dXNlIGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KKyAgICAgICAgY2FzZSBFeHRyYWN0T1NS
RW50cnlMb2NhbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIC8v
IFRoZXNlIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCiAgICAg
ICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgogICAg
IGNhc2UgTmV3VHlwZWRBcnJheToKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNhc2UgRXh0
cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgzNSw2ICs0ODM1
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNl
IFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNl
IEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAg
Y2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRl
cjoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjgxLDEw
ICs0NjgxLDY2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlNpZ25lZCwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihPcHRpb25zOjpmdGxUaWVy
VXBDb3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291bnRlci5tX2NvdW50
ZXIpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291
bnRlckluY3JlbWVudEZvclJldHVybigpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291bnRlci5tX2NvdW50ZXIp
KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJS
ZWcpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOiB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2Rl
KCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAg
ICAgICAgIHRyaWdnZXJPU1JFbnRyeU5vdywgdGVtcEdQUiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4LCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9udEVudGVyID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
dGVtcEdQUik7CisgICAgICAgIG1faml0Lmp1bXAodGVtcEdQUik7CisgICAgICAgIGRvbnRFbnRl
ci5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7
CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CisgICAgICAg
IEZJWE1FOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6
CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6
CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFRp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFRp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdy
YXBoLCAidGllci11cCBjaGVjayBpbmplY3Rpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0
KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBERkdNb2RlKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICAgICAgRlRMOjpD
YXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBGVEw6OmNhbkNvbXBpbGUobV9ncmFwaCk7CisgICAgICAg
IGlmIChsZXZlbCA9PSBDYW5ub3RDb21waWxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3Nh
cnkobV9ncmFwaCk7CisKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBo
KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9jaykpIHsKKyAgICAgICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBibG9jay0+YXQoMCktPmNvZGVPcmlnaW47CisgICAgICAgICAg
ICAgICAgTm9kZVR5cGUgbm9kZVR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGxldmVsID09IEZU
TDo6Q2FuQ29tcGlsZUFuZE9TUkVudGVyICYmICFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVj
a1RpZXJVcEluTG9vcDsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgw
LCBTcGVjTm9uZSwgbm9kZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4pIHsK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPnNpemUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLCBu
b2RlLT5sYXN0KCktPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1UaWVy
VXBDaGVja0luamVjdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBUaWVyLXVwIENoZWNrIEluamVjdGlvbiIpOworICAgIHJldHVybiBy
dW5QaGFzZTxUaWVyVXBDaGVja0luamVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorI2RlZmluZSBERkdUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgR3JhcGg7CisKKy8vIFRoaXMgcGhhc2UgY2hlY2tzIGlmIHRoZSB0aGlzIGNvZGUgYmxvY2sg
Y291bGQgYmUgcmVjb21waWxlZCB3aXRoIHRoZSBGVEwsCisvLyBhbmQgaWYgc28sIGl0IGluamVj
dHMgdGllci11cCBjaGVja3MuCisKK2Jvb2wgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKEdy
YXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAx
NTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjc3LDggKzI3Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9i
YWxXb3JrbGlzdE9uY2UKIAogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCkKIHsKLSAgICBpZiAo
IWVuYWJsZUNvbmN1cnJlbnRKSVQoKSkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgcHRocmVhZF9v
bmNlKCZpbml0aWFsaXplR2xvYmFsV29ya2xpc3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFsV29y
a2xpc3RPbmNlKTsKICAgICByZXR1cm4gdGhlR2xvYmFsV29ya2xpc3Q7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDkgKzk4LDYgQEAgcHJpdmF0ZToKIC8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xlIGdsb2Jh
bCB3b3JrbGlzdC4gSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzCiAvLyBpcyB0aGUgcmlnaHQgdGhp
bmcgdG8gZG8sIGJ1dCBpdCBpcyB3aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0aW9uCiAv
LyB3aWxsIGxhemlseSBjcmVhdGUgb25lIHdoZW4gaXQncyBuZWVkZWQuCi0vLwotLy8gVGhpcyBy
ZXR1cm5zIG51bGwgaWYgZm9yIGFueSByZWFzb24gd2Ugc2hvdWxkbid0IGJlIGRvaW5nIGNvbmN1
cnJlbnQKLS8vIGNvbXBpbGF0aW9uLgogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
OCArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1l
c3BhY2UgREZHOwogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCitpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKIHsKKyAgICAvLyBOT1RFOiBJ
ZiB3ZSBldmVyIGhhdmUgcGhhbnRvbSBhcmd1bWVudHMsIHdlIGNhbiBjb21waWxlIHRoZW0gYnV0
IHdlIGNhbm5vdAorICAgIC8vIE9TUiBlbnRlci4KKyAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKQEAg
LTgxLDYgKzg0LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNh
c2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKKyAgICBj
YXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC05MCwzOSArOTQsMzkgQEAg
aW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5D
b21waWxlQW5kT1NSRW50ZXI7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBj
YXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAg
IHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkuc3BlY3VsYXRpb24oKSkgewogICAgICAgICBjYXNl
IEFycmF5OjpTYW5lQ2hhaW46CiAgICAgICAgIGNhc2UgQXJyYXk6OkluQm91bmRzOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1
cm4gQ2FuQ29tcGlsZUFuZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTEzMyw3ICsxMzcsNyBAQCBp
bmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBp
bGU7CiAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlcjoKQEAgLTE0Miw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUt
PmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBC
cmFuY2g6CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewpAQCAtMTUyLDcgKzE1Niw3IEBAIGlubGluZSBib29sIGNhbkNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICBjYXNlIFN3aXRjaDoKQEAgLTE2MSwxOCArMTY1LDIzIEBAIGlubGluZSBib29sIGNh
bkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55
dGhpbmcgZWxzZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENhbkNvbXBpbGVB
bmRPU1JFbnRlcjsKIH0KIAotYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKK0NhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKIHsKKyAgICBpZiAoZ3JhcGgubV9jb2Rl
QmxvY2stPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlKQorICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKKyAgICAKKyAgICBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gQ2FuQ29tcGlsZUFu
ZE9TUkVudGVyOworICAgIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTIxMCwy
NSArMjE5LDMyIEBAIGJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIG5vZGUgYmVjYXVzZSBvZiBiYWQgdXNl
IGtpbmQ6ICIsIGVkZ2UudXNlS2luZCgpLCAiIGluIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGdyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWNhbkNvbXBp
bGUobm9kZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FuQ29tcGlsZShub2RlKSkgeworICAg
ICAgICAgICAgY2FzZSBDYW5ub3RDb21waWxlOiAKICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZU
TCByZWplY3Rpbmcgbm9kZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICBncmFwaC5kdW1wKFdU
Rjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21w
aWxlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlOgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IENhbkNvbXBpbGU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRPU1JFbnRl
cjoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBpZiB3ZSBjYW4gY29tcGlsZSBhbnl0aGluZyBh
ZnRlciBhIGZvcmNlLWV4aXQuCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGb3JjZU9T
UkV4aXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCwxMyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLWJvb2wgY2FuQ29tcGlsZShERkc6OkdyYXBo
Jik7CitlbnVtIENhcGFiaWxpdHlMZXZlbCB7CisgICAgQ2Fubm90Q29tcGlsZSwKKyAgICBDYW5D
b21waWxlLAorICAgIENhbkNvbXBpbGVBbmRPU1JFbnRlcgorfTsKKworQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitGb3JPU1JF
bnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklU
Q29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZSog
Rm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7CisgICAgcmV0dXJuIHRoaXM7
Cit9CisKK3ZvaWQgRm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlCdWZmZXIoVk0m
IHZtLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpCit7CisgICAgbV9lbnRyeUJ1ZmZlciA9
IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKyNkZWZpbmUgRlRMRm9yT1NSRW50
cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGludG8gdGhlIEZUTCBoYXMgYSBudW1iZXIgb2Yg
cXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9ubHkgaGFwcGVucyB0aHJvdWdoIHNwZWNpYWwg
T1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBoYXZlIHRoZWlyCisvLyAgIG93biBDb2RlQmxv
Y2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8KKy8vIC0gV2Ugb25seSBPU1IgZW50ZXIgaW4g
bG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwgaW5saW5lIGNhbGwgZnJhbWUuCisvLworLy8g
LSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBhbGxvd3MgZW50cnkgdGhyb3VnaCBvbmx5IG9u
ZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9yT1NSRW50cnlKSVRDb2RlIDogcHVibGljIEZU
TDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9yT1NSRW50cnlKSVRDb2RlKCk7CisgICAgfkZv
ck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVy
KFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBl
bnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KKyAgICAKKyAgICB2
b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9ieXRlY29kZUluZGV4ID0g
dmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVyZSgpOworICAg
IHVuc2lnbmVkIGVudHJ5RmFpbHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUZhaWx1
cmVDb3VudDsgfQorICAgIAorICAgIEZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnko
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsgLy8g
T25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLgorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNvdW50OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZMVF9KSVQpCisKKyNlbmRpZiAv
LyBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgcHVibGlj
OgogICAgIHNpemVfdCBzaXplKCk7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAgCisg
ICAgdm9pZCBpbml0aWFsaXplRW50cnlCdWZmZXIoVk0mLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdp
c3RlcnMpOworICAgIFNjcmF0Y2hCdWZmZXIqIGVudHJ5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
bV9lbnRyeUJ1ZmZlcjsgfQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29k
ZVJlZik7CiAgICAgdm9pZCBhZGRIYW5kbGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29kZShDb2RlUmVmIGVudHJ5cG9pbnQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVu
dCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9j
YWw6CisgICAgICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY29tcGlsZUdl
dExvY2FsKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUwNiw2ICs1MDksMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVFeHRyYWN0T1NSRW50
cnlMb2NhbCgpCisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5h
YnNvbHV0ZShzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICAgICAgbV9mdGxT
dGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpKSArIG9wZXJhbmQp
KSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKICAgICB7CiAgICAg
ICAgIC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5Lmgi
CisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
Cit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sq
IGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpOworICAgIERGRzo6SklUQ29kZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmcoKTsKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgCisgICAgZGF0YUxv
ZygKKyAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRy
eUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICBieXRlY29kZUluZGV4LCAiLlxuIik7Cisg
ICAgCisgICAgaWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCkp
IHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZv
ciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5
dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBPcGVy
YW5kczxKU1ZhbHVlPiB2YWx1ZXM7CisgICAgZGZnQ29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAg
IGV4ZWMsIGRmZ0NvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5k
ZXgsIHZhbHVlcyk7CisgICAgCisgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVy
T2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisg
ICAgICAgICAgICBleGVjW2FyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KV0uanNWYWx1ZSgpID09
IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVCh2YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdp
c3RlcnMpOworICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc3RhdGljX2Nhc3Q8
RW5jb2RlZEpTVmFsdWUqPigKKyAgICAgICAgZW50cnlDb2RlLT5lbnRyeUJ1ZmZlcigpLT5kYXRh
KCkpOworICAgIAorICAgIGZvciAoaW50IGxvY2FsID0gdmFsdWUubnVtYmVyT2ZMb2NhbHMoKTsg
bG9jYWwtLTspCisgICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
cy5sb2NhbChsb2NhbCkpOworICAgIAorICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCku
Z3JvdygKKyAgICAgICAgICAgICZleGVjLT5yZWdpc3RlcnMoKVtlbnRyeUJsb2NrLT5tX251bUNh
bGxlZVJlZ2lzdGVyc10pKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiY2F1c2Ugc3RhY2sgZ3Jvd3RoIGZh
aWxlZC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgZXhlYy0+c2V0
Q29kZUJsb2NrKGVudHJ5Q29kZUJsb2NrKTsKKyAgICAKKyAgICB2b2lkICpyZXN1bHQgPSBlbnRy
eUNvZGUtPmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIgICAgRW50cnkgd2lsbCBzdWNj
ZWVkLCBnb2luZyB0byBhZGRyZXNzIiwgUmF3UG9pbnRlcihyZXN1bHQpLCAiXG4iKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JFbnRy
eV9oCisjZGVmaW5lIEZUTE9TUkVudHJ5X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxv
Y2s7CitjbGFzcyBFeGVjU3RhdGU7CisKK25hbWVzcGFjZSBGVEwgeworCit2b2lkKiBwcmVwYXJl
T1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVC
bG9jayogZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsCisgICAgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkVudHJ5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRG
aW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MCw5ICs0MiwyMyBAQCBTdGF0ZTo6U3Rh
dGUoR3JhcGgmIGdyYXBoKQogICAgICwgY29udGV4dChMTFZNQ29udGV4dENyZWF0ZSgpKQogICAg
ICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQotICAgICwgaml0Q29kZShhZG9wdFJlZihu
ZXcgSklUQ29kZSgpKSkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCiB7CisgICAgc3dpdGNo
IChncmFwaC5tX3BsYW4ubW9kZSkgeworICAgIGNhc2UgRlRMTW9kZToKKyAgICAgICAgaml0Q29k
ZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZU
TEZvck9TUkVudHJ5TW9kZToKKyAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklUQ29kZT4gY29k
ZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CisgICAgICAgIGNvZGUtPmlu
aXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVSZWdp
c3RlcnMpOworICAgICAgICBjb2RlLT5zZXRCeXRlY29kZUluZGV4KGdyYXBoLm1fcGxhbi5vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBqaXRDb2RlID0gY29kZTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAogICAgIGZpbmFsaXplciA9IG5ldyBKSVRGaW5h
bGl6ZXIoZ3JhcGgubV9wbGFuKTsKICAgICBncmFwaC5tX3BsYW4uZmluYWxpemVyID0gYWRvcHRQ
dHIoZmluYWxpemVyKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBhc0lubGluZUNhbGxG
cmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQzMigpIGNvbnN0OwogICAg
ICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSB1bmJveGVk
RG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hlZENlbGwoKSBjb25zdDsKICAg
ICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgdGFnKCkgY29u
c3Q7CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSW5zdHJ1
Y3Rpb24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBlbmNvZGVkVmFsdWU7CisgICAg
ICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAgICAgfTsKIApAQCAtMTg4LDYg
KzE5MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuICEhcGF5bG9hZCgpOwog
ICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lzdGVyOjp1bmJveGVkRG91Ymxl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJlcjsKKyAgICB9CisKICAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkgY29uc3QKICAgICB7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwor
ICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFk
ZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICBK
SVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3B0aW1pemUpOwogICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgQVNTRVJUKCFt
X2J5dGVjb2RlT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNw
cAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAgRlRMOjpKSVRDb2RlKiBKSVRD
b2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZvck9TUkVudHJ5SklUQ29kZSog
SklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6
aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKTsKICAg
ICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAgICAgdmlydHVhbCBGVEw6OkpJVENvZGUq
IGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9TUkVu
dHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqLCBDYWxsRnJhbWUqLCBW
TSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJl
dmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE2ICsxMDM2LDMyIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQog
ICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24gb2Yg
IiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9Ci0gICAgICAgICAgICBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7Ci0gICAgICAgIFJlZlB0cjxDb2RlQmxv
Y2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2bS53b3JrbGlzdCA9IERG
Rzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7
CisgICAgICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICBudW1WYXJz
V2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CisgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11
c3RIYW5kbGVWYWx1ZXMoCisgICAgICAgICAgICBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
bnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVz
dEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1l
bnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAgICAgICAgLy8gVWdoLiBJ
ZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdh
cmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0
IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAorICAg
ICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2Fu
IGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAgICAgICAgICAgICAgIC8v
IHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAg
ICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCi0gICAg
ICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9jay5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRl
Y29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAgICAgIHZtLndvcmtsaXN0LmdldCgpKTsKKyAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCksIERGRzo6REZHTW9kZSwg
Ynl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSwKKyAgICAgICAgICAgIHZtLmVuc3Vy
ZVdvcmtsaXN0KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlv
blN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDU0LDE1ICsxMDcwLDYgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgQ29kZUJsb2NrKiBvcHRp
bWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
ICAgIAotICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpG
VExKSVQpIHsKLSAgICAgICAgLy8gRlRMIEpJVCBkb2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5IHll
dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzYyNQotICAgICAgICAKLSAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4u
Ci0gICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKICAgICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFy
ZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkg
ewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRh
TG9nKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRp
b25SYW5nZTsKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24sIDEwMDApIFwK
ICAgICBcCiAgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsIDEp
IFwKLSAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSkg
XAorICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSwgMTUpIFwK
ICAgICBcCiAgICAgdihpbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwKSBcCiAgICAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0ODUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MDksNiArNzA5LDE1IEBAIHZvaWQgVk06OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnYKICAgICAgICAgfQogICAgIH0KIH0KKworREZHOjpXb3JrbGlzdCogVk06OmVuc3VyZVdv
cmtsaXN0KCkKK3sKKyAgICBpZiAoIWVuYWJsZUNvbmN1cnJlbnRKSVQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAgICAgICAgd29ya2xpc3QgPSBERkc6Omdsb2Jh
bFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmtsaXN0LmdldCgpOworfQogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJs
ZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxl
RnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQor
ICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVXb3JrbGlzdCgpOworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlM
b2NrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210219</attachid>
            <date>2013-08-31 15:48:15 -0700</date>
            <delta_ts>2013-09-02 12:53:25 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109909</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVt
VmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAg
LCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGls
YXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9v
d25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwg
bV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdl
dCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92
bSkKQEAgLTE1MjUsNiArMTUyNiw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQog
ICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRM
Q29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAsIG1fb3duZXJF
eGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBAIC0yMzgzLDE3
ICsyMzg1LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24oKQogfQog
CiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJuIEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1JlcGxhY2UpOwor
fQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQogewotICAgIEFT
U0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBib29sIHJlc3Vs
dCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5
cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoaml0VHlwZSgp
KTsKIH0KICNlbmRpZgogCkBAIC0zMDQ1LDEwICszMDQ0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2Vt
ZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxl
ZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8v
IFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3Qg
YmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5
KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzA1NiwxNiArMzA1NSwxNCBAQCB2
b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0
aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSByZXRyeSBhbmQg
cmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUgcmVhZHkuCiAg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5
IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGltaXphdGlvbigp
OwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyArMzExLDggQEAg
cHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxT
dGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAgIGJvb2wgaGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50
KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBlCiAjZW5kaWYK
IAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NjAsNiArOTYxLDggQEAgcHVibGljOgog
ICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRp
b25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgog
ICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNiArMTUwLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOwogICAgICAgICBicmVhazsK
ICAgICB9CisgICAgICAgIAorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6IHsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKQEAgLTE1
MTUsNiArMTUyMCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICBjYXNlIENvdW50
RXhlY3V0aW9uOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1Rp
ZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTUzLDYgKzMxNTMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVn
OiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0
SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7CisgICAgICAgICAgICBtX2dyYXBoLm1f
bGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMzYzNCw3ICszNjM2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0g
ICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CisgICAgICAgICAgICBtX2dyYXBo
LmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ4NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhh
c2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwot
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNp
emUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUo
YmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1fYWxs
b2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwotICAgICAgICAKLSAgICAgICAgbV9n
cmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5k
QWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGUqIGxp
dmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3Bl
cmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIExv
Z2ljYWxOb3Q6CiAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6CkBAIC0xMzMsNiArMTM0LDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgUmV0dXJuOgogICAg
IGNhc2UgVW5yZWFjaGFibGU6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsOSArNTUsOSBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUs
Ci0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQor
ICAgIFZNJiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4m
IG11c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwogICAgIApAQCAt
NjcsOCArNjcsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAK
LSAgICBBU1NFUlQob3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKLQogICAgIGlm
ICghT3B0aW9uczo6dXNlREZHSklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCkBAIC03OCw4
ICs3Niw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBpZiAo
bG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCiAgICAgICAgIGRhdGFMb2coIkRGRyhEcml2ZXIpIGNv
bXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwogICAgIAotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhl
IERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8g
bWFrZSBzdXJlIHRoYXQgYWwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXphdGlvbiBv
biB0aGUgbWFpbiB0aHJlYWQuCiAgICAgdm0uZ2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKTsKQEAgLTkzLDI5ICs4OSw4IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKICAgICB2bS5nZXRDVElTdHViKEZUTDo6b3NyRXhpdEdlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik7CiAjZW5kaWYKICAgICAKLSAgICAvLyBEZXJpdmUgb3VyIHNldCBvZiBt
dXN0LWhhbmRsZSB2YWx1ZXMuIFRoZSBjb21waWxhdGlvbiBtdXN0IGJlIGF0IGxlYXN0IGNvbnNl
cnZhdGl2ZQotICAgIC8vIGVub3VnaCB0byBhbGxvdyBmb3IgT1NSIGVudHJ5IHdpdGggdGhlc2Ug
dmFsdWVzLgotICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOwotICAgIGlmIChvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5t
X251bVZhcnM7Ci0gICAgZWxzZQotICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFBsYW4oY29kZUJsb2Nr
LCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51bVZhcnNXaXRoVmFsdWVzKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5k
Rm9ySW5kZXgoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQotICAg
ICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiBj
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCi0gICAgICAgICAgICAmJiBjb2Rl
QmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKLSAgICAg
ICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1
bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCi0gICAgICAgICAgICAvLyBhbHNvIG5ldmVy
IGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhlIHZhbHVlIGZv
ciB0aGlzLAotICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1YWwgdmFsdWUg
dGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCi0gICAgICAgICAg
ICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQu
Ci0gICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0g
ZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAgfQorICAgICAgICBuZXcg
UGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZh
bHVlcykpOwogICAgIAogICAgIGlmICh3b3JrbGlzdCkgewogICAgICAgICBwbGFuLT5jYWxsYmFj
ayA9IGNhbGxiYWNrOwpAQCAtMTMwLDcgKzEwNSw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlSW1wbCgKIH0KICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYsCiAgICAgUGFzc1JlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopCiB7CiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTM4LDEzICsxMTMsMTMgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3Nl
ZENhbGxiYWNrLAotICAgIFdvcmtsaXN0KiB3b3JrbGlzdCkKKyAgICBWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVz
LAorICAgIEpTUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3NlZENh
bGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAgICBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBt
b2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlzdCk7CisgICAgICAg
IHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZh
bHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9u
RGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVC
bG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw5IEBAIEpT
X0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGEKIAogLy8gSWYgdGhlIHdvcmts
aXN0IGlzIG5vbi1udWxsLCB3ZSBkbyBhIGNvbmN1cnJlbnQgY29tcGlsZS4gT3RoZXJ3aXNlIHdl
IGRvIGEgc3luY2hyb25vdXMKIC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2UgZG8gYSBzeW5jaHJvbm91
cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXN1bHQuCi1Db21waWxh
dGlvblJlc3VsdCBjb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0Kik7CitDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KAorICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNh
c2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAg
ICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9j
YWw6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNiw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFu
ZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEp
LCAiKSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7CisgICAg
ICAgIGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJh
cmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9CiAgICAgaWYgKG5vZGUt
Pmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAg
ICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CkBAIC00ODcsNiArNDk0
LDI5IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2st
PnBoaXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQo
bm9kZUluZGV4KSk7CisgICAgCisgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOworfQorCit2
b2lkIEdyYXBoOjpraWxsVW5yZWFjaGFibGVCbG9ja3MoKQoreworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo
YmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBtX2tpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsKKyAgICB9Cit9CisKIHZvaWQg
R3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1NDg1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
NDg5LDYgKzQ4OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGtpbGxCbG9jayhiYXNpY0Jsb2NrLT5p
bmRleCk7CiAgICAgfQogICAgIAorICAgIHZvaWQga2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFz
aWNCbG9jayopOworICAgIAorICAgIHZvaWQga2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CisgICAg
CiAgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgJiYgaXNOdW1l
cmljYWwobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpKTsKQEAgLTY5OCw2ICs3MDIsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNl
Kj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9w
cmVzZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX2xhenlWYXJzOwogICAgIERvbWluYXRvcnMg
bV9kb21pbmF0b3JzOwogICAgIE5hdHVyYWxMb29wcyBtX25hdHVyYWxMb29wczsKICAgICB1bnNp
Z25lZCBtX2xvY2FsVmFyczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6
OmluaXRpYWxpemUoKQogICAgIHJvb3QtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKICAgICByb290
LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBy
b290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSkgewogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGkpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI5LDggKzEzMCw2
IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5cGUoU3BlY0NlbGwpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwotICAgICAgICAKLSAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNs
ZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gcm9vdC0+
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxNDUgQEAg
dm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJp
bmtUb0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4
LAorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7CisgICAgdmFyaWFibGVF
dmVudFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBt
aW5pZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6cmVj
b25zdHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxK
U1ZhbHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJp
ZXM7CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwg
cmVjb3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFu
ZHNMaWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsg
aS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kc0ZvckluZGV4KGkp
OworICAgICAgICAKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAg
ICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICYmIGNv
ZGVCbG9jay0+Y29kZXR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKKyAgICAgICAgICAgICYmIGNvZGVC
bG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAg
ICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3Vt
ZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIg
YmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9y
IHRoaXMsCisgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0
aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAg
IC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4K
KyAgICAgICAgICAgIHJlc3VsdFtpXSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVy
eSA9IHJlY292ZXJpZXNbaV07CisgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNr
OgorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWRDZWxsOgorICAgICAgICBj
YXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9
IGV4ZWNbaV0uanNWYWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxy
ZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihleGVjW2ldLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9
IGpzRG91YmxlTnVtYmVyKGV4ZWNbaV0udW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSByZWNvdmVy
eS5jb25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVy
LmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCkpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsK
KyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNv
b24uXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3Zv
aWQgSklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ss
ICI6IEZUTC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVy
LnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVl
KE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAg
IGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxv
ZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJW
YWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJh
c2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29u
Y3VycmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGgg
Y29uY3VycmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNl
U2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgewor
ICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9u
RmFpbGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAg
ICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlv
biA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6
CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhpcyBpcyB3
ZWlyZCAtIGl0IHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNvZGUgYmxv
Y2sgKGkuZS4KKyAgICAgICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENvZGUgYmVs
b25ncyB0bykgaXMgYWxzbyBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9lc24ndCBy
ZWFsbHkgbWF0dGVyIHdoYXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5nIGFueXdh
eS4gTm90ZQorICAgICAgICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXphdGlvbiBh
Y3R1YWxseSBtZWFucyB0aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3aWNlLiBC
dXQgdGhhdCdzIGdlbmVyYWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJlb3B0aW1p
emF0aW9ucworICAgICAgICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4KKyAgICAg
ICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOwor
ICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNp
b24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgpAQCAtOTMsOCArOTQsMzEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAgICAgICBD
b2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4mIHJlc3VsdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBvbmx5IGFwcGxpY2Fi
bGUgaWYgd2UncmUgYXQgYSBwb2ludCB3aGVyZSBhbGwgdmFsdWVzIGFyZSBzcGlsbGVkIHRvIHRo
ZQorICAgIC8vIHN0YWNrLiBDdXJyZW50bHksIGl0IGFsc28gaGFzIHRoZSByZXN0cmljdGlvbiB0
aGF0IHRoZSB2YWx1ZXMgbXVzdCBiZSBpbiB0aGVpcgorICAgIC8vIGJ5dGVjb2RlLWRlc2lnbmF0
ZWQgc3RhY2sgc2xvdHMuCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAg
ICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4mIHJlc3VsdCk7CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KyAgICAvLyBOQi4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJlY2F1c2Ug
dGhleSBtYXkgd2FudCB0byB1c2UKKyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91dCBzY2Fs
aW5nIHRocmVzaG9sZHMuIEl0IHNob3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAgCisgICAg
Ym9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sqKTsKKyAg
ICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBkb250
T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplQWZ0ZXJX
YXJtVXAoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKik7Cisg
ICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVCbG9jayop
OworICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKyAgICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAgIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENvbXBpbGVy
IHRvIGNhbGwgc2V0Q29kZVJlZigpLgogCkBAIC0xMDYsNiArMTMwLDEwIEBAIHB1YmxpYzoKICAg
ICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hw
b2ludHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07
CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworI2lmIEVOQUJMRShGVExfSklU
KQorICAgIEV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKKyAgICBSZWZQdHI8Q29kZUJs
b2NrPiBvc3JFbnRyeUJsb2NrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDIwIEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0KICAgICAK
KyAgICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2FzZSBFeHRyYWN0
T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChv
cCgpID09IEdldExvY2FsVW5saW5rZWQpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2Nh
bCgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obV9vcElu
Zm8pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAorICAgIC8qIFNwZWNpYWwgbm9kZSBmb3Ig
T1NSIGVudHJ5IGludG8gdGhlIEZUTC4gSW5kaWNhdGVzIHRoYXQgd2UncmUgbG9hZGluZyBhIGxv
Y2FsICovXAorICAgIC8qIHZhcmlhYmxlIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1wKKyAg
ICBtYWNybyhFeHRyYWN0T1NSRW50cnlMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCisgICAgXAorICAg
IC8qIFRpZXItdXAgY2hlY2tzIGZyb20gdGhlIERGRyB0byB0aGUgRlRMLiAqL1wKKyAgICBtYWNy
byhDaGVja1RpZXJVcEluTG9vcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNr
VGllclVwQW5kT1NSRW50ZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1Rp
ZXJVcEF0UmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAogICAgIC8qIEdldCB0aGUg
dmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhlIFZhcmlh
YmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9y
IHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9cCiAgICAg
LyogYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBsb2NhbCBhY2Nlc3MsIGFuZCB0aHVzIGhhZCB0
aGVpciBvd24gcHJvZmlsaW5nLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3LDM0IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKIAogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJPU1Ig
aW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAorICAg
ICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAi
LCAqY29kZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJc
biIpOwogICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgIC8vIFdoZW4g
d2lsbCB0aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
LSBBbiBleGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUgYmFzZWxpbmUgSklUIGZvbGxvd2Vk
IGJ5IGFuIGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVudGVyLiBXZSdyZSBmaW5lIHdpdGgg
YWxsb3dpbmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5zCisgICAgICAgIC8vICAgZW5vdWdo
IHdlJ2xsIGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgdGhlIE9TUiBl
eGl0IGNvc3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5kIHNvIHJlb3B0aW1pemluZyBpcyB0
aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgaGF2ZSBy
ZWN1cnNpdmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lkZXIgdGhhdCBmb28gaGFzIGEgaG90
IGxvb3AKKyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2VsZi4gV2UgaGF2ZSB0d28gZm9vJ3Mg
b24gdGhlIHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisgICAgICAgIC8vICAgYW5kIGZvbzIs
IHdpdGggZm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBmb28ncyBob3QgbG9vcC4gZm9vMiBn
ZXRzCisgICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUgd2F5IGludG8gdGhlIEZUTC4gVGhl
biBpdCByZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAgICAgICAgLy8gICBmb28xIHdhbnRz
IHRvIGdldCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRoaXMgY29uY2x1c2lvbiBmcm9tIGl0
cworICAgICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0IHRvIE9TUiBlbnRlci4gQW5kIHdl
J2xsIHRlbGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAgICAgLy8gICBtaWdodCBiZSB3b3J0
aCBhZGRyZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0aGluayB0aGlzIGNhc2Ugd2lsbAor
ICAgICAgICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3csIGlmIGl0IGRvZXMgaGFwcGVuLCBp
dCdsbCBjYXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAgIC8vICAgdGhyYXNoaW5nLgorICAg
ICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIGJsb2NrIGlzIG5v
dCBERkcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIE9TUkVudHJ5
RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5RGF0YUZv
ckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFlbnRyeSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgor
ICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICAgICAgLCBtX2luc2Vy
dGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NS
RW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhy
ZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1f
Z3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXgg
IT0gVUlOVF9NQVgpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IG1f
Z3JhcGgubV9wcm9maWxlZEJsb2NrOworICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25T
ZXQgaW5zZXJ0aW9uU2V0OworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0g
MDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPmNvZGVPcmln
aW4gPT0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkgeworICAgICAgICAgICAgICAgIHRhcmdl
dCA9IGJsb2NrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF0YXJnZXQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0
ZXJyaWJsZSBvdXRjb21lLiBJdCBzaG91bGRuJ3Qgb2Z0ZW4gaGFwcGVuIGJ1dCBpdCBtaWdodAor
ICAgICAgICAgICAgLy8gaGFwcGVuIGFuZCBzbyB3ZSBzaG91bGQgZGVmZW5kIGFnYWluc3QgaXQu
IElmIGl0IGhhcHBlbnMsIHRoZW4gdGhpcworICAgICAgICAgICAgLy8gY29tcGlsYXRpb24gaXMg
YSBmYWlsdXJlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0KDAp
OworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5jb2RlT3Jp
Z2luOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IFNwZWNOb25lLCBTZXRBcmd1bWVudCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcElu
Zm8odGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkK
KyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW29wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpXSA9IG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBs
b2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgeworICAgICAg
ICAgICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZChvcGVyYW5kKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBw
cmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgdmFyaWFi
bGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIGNvZGVPcmlnaW4sCisgICAg
ICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBuZXdS
b290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBTZXRM
b2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUobV9ncmFwaCwgU3BlY05v
bmUsIEp1bXAsIGNvZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXQpKTsKKyAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0eSgpOworICAg
ICAgICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEVu
dHJ5cG9pbnQgQ3JlYXRpb24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBU
aGlzIHBoYXNlIGlzIG9ubHkgZm9yIGNvbXBpbGF0aW9uIHBpcGVsaW5lcyB0aGF0IGdvIHRocm91
Z2ggU1NBLCBhbmQgdGhhdAorLy8gZG8gYSBzcGVjaWFsaXplZCBPU1IgZW50cnkgY29tcGlsZS4g
Q3VycmVudGx5IHRoYXQgbWVhbnMgRlRMLgorLy8KKy8vIENyZWF0ZXMgYW4gT1NSIGVudHJ5cG9p
bnQgdGhhdCBlc3RhYmxpc2hlcyBhbGwgYXJndW1lbnQgYW5kIGxvY2FsIHZhcmlhYmxlCisvLyB2
YWx1ZXMuIFRoaXMgZW50cnlwb2ludCBvbmx5IHdvcmtzIGZvciB0aGUgUGxhbjo6b3NyRW50cnlC
eXRlY29kZUluZGV4LgorLy8gVW5saWtlIG9yZGluYXJ5IE9TUiBlbnRyeSBpbnRvIHRoZSBERkcs
IHRoaXMgZm9yY2VzIGFsbCB2YXJpYWJsZXMgc2x1cnBlZAorLy8gaW4gdGhyb3VnaCBPU1IgZW50
cnkgdG8gYXBwZWFyIFRPUCB0byB0aGUgQ0ZBLiBIZW5jZSB0aGlzIHBoYXNlIG11c3QgYmUgcnVu
CisvLyBlYXJseSAtIGJlZm9yZSBkb2luZyBhbnkgQ0ZBLiBCdXQgdGhpcyBhbHNvIGRvZXMgc29t
ZSBhZGRpdGlvbmFsIGhhY2tzIHRoYXQKKy8vIHJlcXVpcmUgdGhpcyB0byBydW4gYmVmb3JlIHVu
aWZpY2F0aW9uLgorCitib29sIHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oR3JhcGgmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU0
ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjAxNSw2ICsyMDE1LDE4NCBAQCBleHRlcm4gIkMiIHZvaWQgREZHX09Q
RVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0t
PmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Cisg
ICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsK
KyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0
aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVy
LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBG
VEwgZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29v
bihjb2RlYmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghaml0
Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgewor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygi
Q2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlz
dFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2bS53b3JrbGlzdC5nZXQoKSkg
eworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKAorICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCksIEZUTE1vZGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0
ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBX
b3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvbkRlZmVycmVkKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6
ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIC8vIFRoYXQncyBncmVhdCwgd2UndmUgY29tcGls
ZWQgdGhlIGNvZGUgLSBuZXh0IHRpbWUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAv
LyB3ZSdsbCBlbnRlciB0aGF0IHJlcGxhY2VtZW50LgorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6
ZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RT
dGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHdlIGZpbmlzaGVkIGNvbXBpbGluZywgYnV0IGZhaWxlZCBzb21laG93OyBpbiB0aGF0IGNhc2Ug
dGhlCisgICAgICAgIC8vIHRocmVzaG9sZHMgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNv
ZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2
ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KKyAgICBjb21waWxlKAorICAg
ICAgICBleGVjLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJ
TlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAorICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjazo6Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworfQorCitjaGFy
KiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKKyAgICBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKK3sKKyAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBF
bnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAg
ICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYg
KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5p
dGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRD
b2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlYmxvY2spOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVz
aG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAi
LCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29y
a2xpc3QgPSB2bS53b3JrbGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29y
a2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgdm0sIENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9TUkVudHJ5TW9k
ZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtu
b3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcp
IHsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKTsKKyAgICAgICAgaml0
Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENv
bXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
IChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpKSB7
CisgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCisgICAg
ICAgICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRlY29kZUluZGV4LCBz
dHJlYW1JbmRleCkpIHsKKyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxv
Y2spOworICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3M7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUJsb2NrLT5m
dGxGb3JPU1JFbnRyeSgpOworICAgICAgICBlbnRyeUNvZGUtPmNvdW50RW50cnlGYWlsdXJlKCk7
CisgICAgICAgIGlmIChlbnRyeUNvZGUtPmVudHJ5RmFpbHVyZUNvdW50KCkgPAorICAgICAgICAg
ICAgT3B0aW9uczo6ZnRsT1NSRW50cnlGYWlsdXJlQ291bnRGb3JSZW9wdGltaXphdGlvbigpKSB7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxv
Y2spOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIE9TUiBlbnRyeSBmYWlsZWQuIE9oIG5vISBUaGlzIGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRv
IHJldHJ5LiBXZSByZXRyeQorICAgICAgICAvLyB3aXRob3V0IGV4cG9uZW50aWFsIGJhY2tvZmYg
YW5kIHdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGVudHJ5IGNvZGUgYmxvY2suCisgICAgICAgIGpp
dENvZGUtPm9zckVudHJ5QmxvY2suY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGppdENvZGUt
Pm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgewor
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgY29tcGlsYXRpb24gZmFpbGVkIGFuZCB3ZSBhbHJl
YWR5IHNldCB0aGUgdGhyZXNob2xkcy4KKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMg
Y29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBmaXJzdCBvcmRlciBvZiBi
dXNpbmVzcyBpcyB0byB0cmlnZ2VyIGEgZm9yLWVudHJ5IGNvbXBpbGUuCisgICAgT3BlcmFuZHM8
SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKyAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgKKyAg
ICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1J
bmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlS
ZXN1bHQgPSBERkc6OmNvbXBpbGUoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFj
ZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAg
ICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoKSwKKyAgICAgICAgdm0uZW5zdXJlV29ya2xpc3QoKSk7CisgICAgCisg
ICAgLy8gQnV0IHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGEgcmVwbGFjZW1lbnQgY29tcGlsZS4g
T2YgY291cnNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8gdHJpZ2dlciBpdCBpZiB3ZSBkb24n
dCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhpcyBpcyBraW5kIG9mIHdlaXJkIGJlY2F1c2Ugd2UgbWln
aHQKKyAgICAvLyBoYXZlIGp1c3QgZmluaXNoZWQgYW4gRlRMIGNvbXBpbGUgYW5kIHRoYXQgY29t
cGlsZSBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLgorICAgIC8vIEJ1dCB0aGlzIHNlZW1zIHVu
Y29tbW9uIGVub3VnaCB0aGF0IHdlIHNvcnQgb2YgZG9uJ3QgY2FyZS4gSXQncyBjZXJ0YWlubHkg
c291bmQKKyAgICAvLyB0byBmaXJlIG9mZiBhbm90aGVyIGNvbXBpbGUgcmlnaHQgbm93IHNvIGxv
bmcgYXMgd2UncmUgbm90IGFscmVhZHkgY29tcGlsaW5nIGFuZAorICAgIC8vIHdlIGRvbid0IGFs
cmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuIE5vdGUsIHdlIGRvbid0IGRvIHRo
aXMgZm9yCisgICAgLy8gb2J2aW91c2x5IGJhZCBjYXNlcyBsaWtlIGdsb2JhbCBjb2RlLCB3aGVy
ZSB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgYSBzbGltIGNoYW5jZQorICAgIC8vIG9mIHRoaXMgY29k
ZSBiZWluZyBpbnZva2VkIGV2ZXIgYWdhaW4uCisgICAgQ29tcGlsYXRpb25LZXkga2V5Rm9yUmVw
bGFjZW1lbnQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSk7CisgICAgaWYg
KGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBHbG9iYWxDb2RlCisgICAgICAgICYmICFjb2RlQmxv
Y2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKKyAgICAgICAgJiYgKCF2bS53b3JrbGlzdC5n
ZXQoKQorICAgICAgICAgICAgfHwgdm0ud29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9y
UmVwbGFjZW1lbnQpICE9IFdvcmtsaXN0OjpOb3RLbm93bikpIHsKKyAgICAgICAgY29tcGlsZSgK
KyAgICAgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRM
TW9kZSwgVUlOVF9NQVgsCisgICAgICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjazo6Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0KKyAgICAKKyAgICBp
ZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBjb21w
aWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAgLy8gZW50cnkgd2ls
bCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3aGF0
IHdlIHNob3VsZCBkby4KKyAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEgd2hp
bGUgaWYgdGhhdCBoYXBwZW5zLgorICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JF
bnRyeSgKKyAgICAgICAgZXhlYywgaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSwgYnl0ZWNv
ZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgIGlmIChhZGRyZXNzKQorICAgICAgICBqaXRDb2Rl
LT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIGppdENvZGUtPm9w
dGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICByZXR1cm4gYWRkcmVzczsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiwxMSBAQCB2b2lkIERG
R19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAKIHZvaWQgREZHX09QRVJBVElPTiB0
cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwogCisjaWYg
RU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVj
U3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRy
eU5vdyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJlYW1J
bmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9IC8vIGV4
dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRB
cnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2
IEBACiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
LSNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJGVExDb21waWxlLmgiCiAj
aW5jbHVkZSAiRlRMRmFpbC5oIgogI2luY2x1ZGUgIkZUTExpbmsuaCIKQEAgLTgxLDEzICs4MCwx
MyBAQCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiAKIFBsYW46OlBs
YW4oCiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29tcGlsYXRp
b25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBudW1WYXJzV2l0aFZhbHVlcykKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogdm0oKnBh
c3NlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAg
ICAgLCBtb2RlKG1vZGUpCiAgICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRl
Y29kZUluZGV4KQogICAgICwgbnVtVmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCi0g
ICAgLCBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJz
V2l0aFZhbHVlcykKKyAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAg
ICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8g
YWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVy
Qnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSksIFBy
b2ZpbGVyOjpERkcpKSA6IDApCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAg
ICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCkBAIC0xNjUsNiArMTY0LDE2IEBA
IFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBpZiAodmFsaWRh
dGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAgICAKKyAgICBpZiAobW9k
ZSA9PSBGVExGb3JPU1JFbnRyeSkgeworICAgICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm1PU1JF
bnRyeXBvaW50Q3JlYXRpb24oZGZnKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
ICAgIGZpbmFsaXplciA9IGFkb3B0UmVmKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKKyAg
ICAgICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAgICB9CisgICAgICAgIGlmICh2YWxpZGF0
aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgdmFsaWRhdGUoZGZnKTsKKyAgICB9CisgICAgCiAg
ICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rp
b25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOwpAQCAtMjA2LDEwICsy
MTUsMTkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAg
ICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7CiAgICAgfQogCisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBERkdNb2RlOiB7CisgICAgICAgIHBlcmZvcm1U
aWVyVXBDaGVja0luamVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
Y2FzZSBGVExNb2RlOgorICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CiAjaWYgRU5BQkxF
KEZUTF9KSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCi0gICAgICAg
ICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgJiYgRlRM
OjpjYW5Db21waWxlKGRmZykpIHsKKyAgICAgICAgaWYgKCFGVEw6OmNhbkNvbXBpbGUoZGZnKSkg
eworICAgICAgICAgICAgZmluYWxpemVyID0gYWRvcHRSZWYobmV3IEZhaWxlZEZpbmFsaXplcigq
dGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwogICAgICAgICBwZXJm
b3JtTG9vcFByZUhlYWRlckNyZWF0aW9uKGRmZyk7CkBAIC0yNDQsMTAgKzI2MiwxNiBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIEZUTDo6Y29tcGls
ZShzdGF0ZSk7CiAgICAgICAgIEZUTDo6bGluayhzdGF0ZSk7CiAgICAgICAgIHJldHVybiBGVExQ
YXRoOwotICAgIH0KICNlbHNlCi0gICAgUkVMRUFTRV9BU1NFUlQoIU9wdGlvbnM6OnVzZUV4cGVy
aW1lbnRhbEZUTCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgcGVyZm9ybURDRShkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHJldmlzaW9uIDE1NDg1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIExvbmdMaXZlZFN0YXRl
Owogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAg
IFBsYW4oCiAgICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiwgQ29tcGlsYXRpb25Nb2RlLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNX
aXRoVmFsdWVzKTsKKyAgICAgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVW
YWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9u
Z0xpdmVkU3RhdGUmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ4
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCwxMCBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNhc2UgWm9tYmllSGludDog
eworICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxv
b3A6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVj
a1RpZXJVcEFuZE9TUkVudGVyOiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5l
dmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAg
ICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4K
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NTEsNiArNTU0
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNl
IGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KKyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZXNlIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCiAgICAgICAg
IGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgogICAgIGNh
c2UgTmV3VHlwZWRBcnJheToKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENo
ZWNrVGllclVwQXRSZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgzNSw2ICs0ODM1LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFBo
aToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4
dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2Fz
ZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjgxLDEwICs0
NjgxLDY2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OlNpZ25lZCwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihPcHRpb25zOjpmdGxUaWVyVXBD
b3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291bnRlci5tX2NvdW50ZXIp
KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJS
ZWcpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpT
aWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRl
ckluY3JlbWVudEZvclJldHVybigpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNv
bHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291bnRlci5tX2NvdW50ZXIpKTsK
KyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOiB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAg
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVk
SW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCkt
PnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAg
ICAgIHRyaWdnZXJPU1JFbnRyeU5vdywgdGVtcEdQUiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4LCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9udEVudGVyID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVt
cEdQUik7CisgICAgICAgIG1faml0Lmp1bXAodGVtcEdQUik7CisgICAgICAgIGRvbnRFbnRlci5s
aW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7Cisg
ICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CisgICAgICAgIEZJ
WE1FOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAg
ICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6Cisg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFRpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFRpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
LCAidGllci11cCBjaGVjayBpbmplY3Rpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdy
YXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBERkdNb2RlKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICAgICAgRlRMOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBGVEw6OmNhbkNvbXBpbGUobV9ncmFwaCk7CisgICAgICAgIGlm
IChsZXZlbCA9PSBDYW5ub3RDb21waWxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3Nhcnko
bV9ncmFwaCk7CisKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9jaykpIHsKKyAgICAgICAgICAgICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBibG9jay0+YXQoMCktPmNvZGVPcmlnaW47CisgICAgICAgICAgICAg
ICAgTm9kZVR5cGUgbm9kZVR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGxldmVsID09IEZUTDo6
Q2FuQ29tcGlsZUFuZE9TUkVudGVyICYmICFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1Rp
ZXJVcEluTG9vcDsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBT
cGVjTm9uZSwgbm9kZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPnNpemUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLCBub2Rl
LT5sYXN0KCktPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1UaWVyVXBD
aGVja0luamVjdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oIkRGRyBUaWVyLXVwIENoZWNrIEluamVjdGlvbiIpOworICAgIHJldHVybiBydW5Q
aGFzZTxUaWVyVXBDaGVja0luamVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorI2RlZmluZSBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIFRoaXMgcGhhc2UgY2hlY2tzIGlmIHRoZSB0aGlzIGNvZGUgYmxvY2sgY291
bGQgYmUgcmVjb21waWxlZCB3aXRoIHRoZSBGVEwsCisvLyBhbmQgaWYgc28sIGl0IGluamVjdHMg
dGllci11cCBjaGVja3MuCisKK2Jvb2wgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2lmIEVOQUJMRShGVExf
SklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1RvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygKKyAgICBQYXNz
UmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQorICAgIDogbV9kZmdDb2RlQmxvY2soZGZn
Q29kZUJsb2NrKQoreworfQorCitUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9CisKK1Bhc3NSZWZQdHI8VG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KGRmZ0NvZGVCbG9jaykpOworfQorCit2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIGRp
ZCBiZWNvbWUgcmVhZHkuXG4iKTsKKyAgICB9CisgICAgCisgICAgbV9kZmdDb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCisg
ICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpKTsKK30KKwordm9pZCBUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6
aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxv
Y2ssCisgICAgICAgICAgICAiKSByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CisgICAgfQorICAg
IAorICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBjb2Rl
QmxvY2stPmluc3RhbGwoKTsKKyAgICAKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAor
ICAgICAgICByZXN1bHQpOworfQorCit9IH0gLy8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBERkdUb0ZUTERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNj
cmlwdEV4ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sg
eworcHJvdGVjdGVkOgorICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworCitwdWJsaWM6CisgICAgdmlydHVhbCB+
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoCisgICAgICAgIFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKik7Cisg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGls
YXRpb25SZXN1bHQpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fZGZnQ29k
ZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQor
ICAgIDogbV9kZmdDb2RlQmxvY2soZGZnQ29kZUJsb2NrKQoreworfQorCitUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaygpCit7Cit9CisKK1Bhc3NSZWZQdHI8VG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4KK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZn
Q29kZUJsb2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhkZmdDb2RlQmxvY2spKTsKK30KKwordm9pZCBUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJl
Y29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIs
ICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsK
KyAgICB9CisgICAgCisgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNl
T3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCisgICAgICAgIG1fZGZnQ29kZUJsb2Nr
LmdldCgpKTsKK30KKwordm9pZCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAorICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGls
YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAg
ICAgICAgICIpIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYg
KHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIG1fZGZnQ29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZygpLT5vc3JFbnRyeUJsb2NrID0gY29kZUJsb2NrOworICAgIAorICAg
IC8vIEZJWE1FOiBpZiB3ZSBmYWlsZWQsIHdlIG1pZ2h0IHdhbnQgdG8ganVzdCB0dXJuIG9mZiBP
U1IgZW50cnkgcmF0aGVyIHRoYW4KKyAgICAvLyB0b3RhbGx5IHR1cm5pbmcgb2ZmIHRpZXItdXAu
CisgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICAgICAgcmVzdWx0KTsKK30KKwor
fSB9IC8vIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBE
RkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKworbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIHsKK3Byb3RlY3RlZDoK
KyAgICBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworCitwdWJsaWM6CisgICAgdmlydHVhbCB+VG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4g
Y3JlYXRlKAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91
c2x5KENvZGVCbG9jayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRl
KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc3LDggKzI3Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2UK
IAogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCkKIHsKLSAgICBpZiAoIWVuYWJsZUNvbmN1cnJl
bnRKSVQoKSkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgcHRocmVhZF9vbmNlKCZpbml0aWFsaXpl
R2xvYmFsV29ya2xpc3RLZXlPbmNlLCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlKTsKICAg
ICByZXR1cm4gdGhlR2xvYmFsV29ya2xpc3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDkgKzk4LDYgQEAg
cHJpdmF0ZToKIC8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xlIGdsb2JhbCB3b3JrbGlzdC4gSXQn
cyBub3QgY2xlYXIgdGhhdCB0aGlzCiAvLyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIGJ1dCBp
dCBpcyB3aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0aW9uCiAvLyB3aWxsIGxhemlseSBj
cmVhdGUgb25lIHdoZW4gaXQncyBuZWVkZWQuCi0vLwotLy8gVGhpcyByZXR1cm5zIG51bGwgaWYg
Zm9yIGFueSByZWFzb24gd2Ugc2hvdWxkbid0IGJlIGRvaW5nIGNvbmN1cnJlbnQKLS8vIGNvbXBp
bGF0aW9uLgogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCk7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCi1p
bmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCitpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKIHsKKyAgICAvLyBOT1RFOiBJZiB3ZSBldmVyIGhhdmUg
cGhhbnRvbSBhcmd1bWVudHMsIHdlIGNhbiBjb21waWxlIHRoZW0gYnV0IHdlIGNhbm5vdAorICAg
IC8vIE9TUiBlbnRlci4KKyAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNl
IEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKQEAgLTgxLDYgKzg0LDcgQEAg
aW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0
OgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIEV4dHJhY3RPU1JF
bnRyeUxvY2FsOgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC05MCwzOSArOTQsMzkgQEAgaW5saW5lIGJvb2wgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50
ZXI7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS0+
YXJyYXlNb2RlKCkuc3BlY3VsYXRpb24oKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTYW5lQ2hh
aW46CiAgICAgICAgIGNhc2UgQXJyYXk6OkluQm91bmRzOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNl
IFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFu
ZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTEzMyw3ICsxMzcsNyBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUt
PmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKQEAgLTE0Miw3ICsxNDYsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2lu
ZChOdW1iZXJVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2Fz
ZSBMb2dpY2FsTm90OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
ewpAQCAtMTUyLDcgKzE1Niw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN3
aXRjaDoKQEAgLTE2MSwxOCArMTY1LDIzIEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICB9
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKIH0K
IAotYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKEdyYXBoJiBncmFwaCkKIHsKKyAgICBpZiAoZ3JhcGgubV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgIT0gRnVuY3Rpb25Db2RlKQorICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAK
KyAgICBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gQ2FuQ29tcGlsZUFuZE9TUkVudGVyOworICAg
IAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTIxMCwyNSArMjE5LDMyIEBAIGJv
b2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJGVEwgcmVqZWN0aW5nIG5vZGUgYmVjYXVzZSBvZiBiYWQgdXNlIGtpbmQ6ICIsIGVkZ2Uu
dXNlS2luZCgpLCAiIGluIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBo
LmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWNhbkNvbXBpbGUobm9kZSkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY2FuQ29tcGlsZShub2RlKSkgeworICAgICAgICAgICAgY2FzZSBD
YW5ub3RDb21waWxlOiAKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZUTCByZWplY3Rpbmcgbm9k
ZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICBncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwg
IiAgICAiLCBub2RlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9IENhbkNvbXBpbGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIENhbkNvbXBpbGVBbmRPU1JFbnRlcjoKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgY2FyZSBpZiB3ZSBjYW4gY29tcGlsZSBhbnl0aGluZyBhZnRlciBhIGZvcmNlLWV4
aXQuCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBGb3JjZU9TUkV4aXQpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCShyZXZpc2lv
biAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKLWJvb2wgY2FuQ29tcGlsZShERkc6OkdyYXBoJik7CitlbnVtIENhcGFi
aWxpdHlMZXZlbCB7CisgICAgQ2Fubm90Q29tcGlsZSwKKyAgICBDYW5Db21waWxlLAorICAgIENh
bkNvbXBpbGVBbmRPU1JFbnRlcgorfTsKKworQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoREZH
OjpHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitGb3JPU1JFbnRyeUpJVENvZGU6OkZv
ck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVu
dHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZSogRm9yT1NSRW50cnlKSVRD
b2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgRm9y
T1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlCdWZmZXIoVk0mIHZtLCB1bnNpZ25lZCBu
dW1DYWxsZWVSZWdpc3RlcnMpCit7CisgICAgbV9lbnRyeUJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZm
ZXJGb3JTaXplKG51bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVu
dHJ5SklUQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExGb3JPU1JFbnRyeUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
Rm9yT1NSRW50cnlKSVRDb2RlX2gKKyNkZWZpbmUgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJGVExKSVRDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Ly8gT1NSIGVudHJ5IGludG8gdGhlIEZUTCBoYXMgYSBudW1iZXIgb2YgcXVpcmtzOgorLy8KKy8v
IC0gT1NSIGVudHJ5IG9ubHkgaGFwcGVucyB0aHJvdWdoIHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBp
bGF0aW9ucy4gVGhleSBoYXZlIHRoZWlyCisvLyAgIG93biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93
biBKSVRDb2RlLgorLy8KKy8vIC0gV2Ugb25seSBPU1IgZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRo
YXQgaGF2ZSBhIG51bGwgaW5saW5lIGNhbGwgZnJhbWUuCisvLworLy8gLSBFYWNoIE9TUiBlbnRy
eSBjb21waWxhdGlvbiBhbGxvd3MgZW50cnkgdGhyb3VnaCBvbmx5IG9uZSBieXRlY29kZSBpbmRl
eC4KKworY2xhc3MgRm9yT1NSRW50cnlKSVRDb2RlIDogcHVibGljIEZUTDo6SklUQ29kZSB7Citw
dWJsaWM6CisgICAgRm9yT1NSRW50cnlKSVRDb2RlKCk7CisgICAgfkZvck9TUkVudHJ5SklUQ29k
ZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQg
bnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KKyAgICAKKyAgICB2b2lkIHNldEJ5dGVjb2Rl
SW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1
bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9
CisgICAgCisgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVyZSgpOworICAgIHVuc2lnbmVkIGVudHJ5
RmFpbHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUZhaWx1cmVDb3VudDsgfQorICAg
IAorICAgIEZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKKyAgICAKK3ByaXZh
dGU6CisgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVu
dHJ5IGNvZGUgYmxvY2tzLgorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB1bnNp
Z25lZCBtX2VudHJ5RmFpbHVyZUNvdW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZMVF9KSVQpCisKKyNlbmRpZiAvLyBGVExGb3JPU1JFbnRy
eUpJVENvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
cmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgcHVibGljOgogICAgIHNpemVfdCBz
aXplKCk7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAgCisgICAgdm9pZCBpbml0aWFs
aXplRW50cnlCdWZmZXIoVk0mLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpOworICAgIFNj
cmF0Y2hCdWZmZXIqIGVudHJ5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUJ1ZmZlcjsg
fQorICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZik7CiAgICAgdm9p
ZCBhZGRIYW5kbGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPik7CiAgICAgdm9p
ZCBpbml0aWFsaXplQ29kZShDb2RlUmVmIGVudHJ5cG9pbnQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU0ODUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw3ICs2NCw5IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0
aW9uKCkKICAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJp
bmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6
RlRMSklUKSkuZGF0YSgpKSkpOwogICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBP
U1IgZXhpdHMsIHNvIG5vIGV4aXQgdGh1bmtzLgogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciB3aXRoQXJpdHlDaGVjayA9IG1fZW50cnlwb2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2Yo
bV9hcml0eUNoZWNrKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7
CisgICAgaWYgKG1fYXJpdHlDaGVjay5pc1NldCgpKQorICAgICAgICB3aXRoQXJpdHlDaGVjayA9
IG1fZW50cnlwb2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKICAgICBt
X2ppdENvZGUtPmluaXRpYWxpemVDb2RlKAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAg
ICAgICAgICAgICptX2VudHJ5cG9pbnRMaW5rQnVmZmVyLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3OSArNTUsMTE0IEBA
IHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgLy8gTExWTSB3aWxsIGNyZWF0ZSBpdHMgb3du
IGp1bXAgdGFibGVzIGFzIG5lZWRlZC4KICAgICBjb2RlQmxvY2stPmNsZWFyU3dpdGNoSnVtcFRh
YmxlcygpOwogICAgIAotICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4KLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExMVk0gc2hvdWxkIGp1c3QgdXNlIG91ciBjYWxs
aW5nIGNvbnZlbnRpb24uCisgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQg
d2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CisgICAgLy8gZGVwZW5k
aW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KKyAgICAvLyBGSVhN
RTogRXhjZXB0IGZvciBPU1IgZW50cnksIHRoaXMgaXMgYSB0b3RhbCBrbHVkZ2UgLSBMTFZNIHNo
b3VsZCBqdXN0IHVzZSBvdXIKKyAgICAvLyBjYWxsaW5nIGNvbnZlbnRpb24uCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMQogICAgIENDYWxsSGVs
cGVycyBqaXQoJnN0YXRlLmdyYXBoLm1fdm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAgY29tcGls
ZUVudHJ5KGppdCk7CisgICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXI7CisgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBhcml0eUNoZWNrOworICAgIHN3aXRjaCAoc3RhdGUuZ3JhcGgubV9w
bGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudHJ5KGpp
dCk7CiAgICAgCi0gICAgLy8gVGhpcyBwYXJ0IGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBmdW5jdGlv
bnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUgZnVuY3Rpb25zLgorICAgICAgICAvLyBUaGlz
IHBhcnQgaXMgb25seSBuZWNlc3NhcnkgZm9yIGZ1bmN0aW9ucy4gV2UgY3VycmVudGx5IG9ubHkg
Y29tcGlsZSBmdW5jdGlvbnMuCiAgICAgICAgIAotICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJv
bUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBm
cm9tQXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOwogICAgICAgICAKLSAgICAvLyBQbGFudCBhIGNo
ZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCi0g
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5
MQotICAgIGppdC5hZGRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNv
ZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKLSAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc3RhY2tDaGVjayA9IGppdC5icmFuY2hQdHIoCi0gICAgICAgIENDYWxs
SGVscGVyczo6QmVsb3csCi0gICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHN0
YXRlLmdyYXBoLm1fdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLAotICAg
ICAgICBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBmcm9tU3RhY2tD
aGVjayA9IGppdC5sYWJlbCgpOwotICAgICAgICAKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNh
bGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgaml0LnJlc3RvcmVS
ZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQucmV0KCk7
Ci0gICAgICAgIAotICAgIHN0YWNrQ2hlY2subGluaygmaml0KTsKLSAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIGppdC5wb2tlKAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAg
ICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6
ZW9mKHZvaWQqKSk7Ci0gICAgICAgIAotICAgIGppdC5zdG9yZTMyKAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2Rl
T2Zmc2V0KDApKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsU3RhY2tDaGVjayA9IGppdC5jYWxsKCk7Ci0gICAgLy8gRklYTUU6IG5lZWQg
dG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhv
dy4gVGhpcyBpcwotICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBi
ZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKLSAgICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7
Ci0gICAgICAgIAotICAgIENDYWxsSGVscGVyczo6TGFiZWwgYXJpdHlDaGVjayA9IGppdC5sYWJl
bCgpOwotICAgIGNvbXBpbGVFbnRyeShqaXQpOwotICAgIGppdC5sb2FkMzIoCi0gICAgICAgIEND
YWxsSGVscGVyczo6cGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5i
cmFuY2gzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJl
Z1QxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkpCi0gICAgICAgIC5saW5rVG8oZnJvbUFyaXR5Q2hlY2ssICZqaXQpOwotICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgaml0LnBva2UoCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLAotICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNh
bGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRl
Y29kZU9mZnNldCgwKSksCi0gICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOwotICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNv
bWVob3cuIFRoaXMgaXMKLSAgICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91
bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCi0gICAgaml0LmJyYW5jaFRlc3QzMihDQ2Fs
bEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwKS5saW5rVG8oZnJvbUFyaXR5Q2hlY2ssICZq
aXQpOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKCk7
Ci0gICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOwotICAgICAgICAKLSAgICBPd25QdHI8TGlu
a0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBo
Lm1fdm0sICZqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOwotICAg
IGxpbmtCdWZmZXItPmxpbmsoY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7Ci0gICAg
bGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0
b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNr
KTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigoc3Rh
dGUuZ3JhcGgubV92bS5nZXRDVElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOworICAgICAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFj
ZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCisgICAgICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKKyAgICAgICAgaml0LmFkZFB0
cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBzdGFja0NoZWNrID0gaml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6QmVsb3csCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVz
cyhzdGF0ZS5ncmFwaC5tX3ZtLmludGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwK
KyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJl
bCBmcm9tU3RhY2tDaGVjayA9IGppdC5sYWJlbCgpOworICAgICAgICAKKyAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRl
LmdlbmVyYXRlZEZ1bmN0aW9uKSksCisgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVn
VDEpOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
aml0LnJldCgpOworICAgICAgICAKKyAgICAgICAgc3RhY2tDaGVjay5saW5rKCZqaXQpOworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICBqaXQucG9rZSgKKyAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBK
SVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgIAorICAg
ICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bFN0YWNrQ2hlY2sgPSBqaXQuY2FsbCgpOworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtl
IHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlz
IGlzCisgICAgICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCisgICAgICAgIGppdC5qdW1wKGZyb21TdGFja0No
ZWNrKTsKKyAgICAgICAgCisgICAgICAgIGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICAg
ICAgY29tcGlsZUVudHJ5KGppdCk7CisgICAgICAgIGppdC5sb2FkMzIoCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFs
LCBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAgICAgICAgIC5saW5rVG8oZnJvbUFy
aXR5Q2hlY2ssICZqaXQpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQucG9rZSgK
KyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgT0JK
RUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZv
aWQqKSk7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgw
KSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKCk7CisgICAgICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNv
bWVob3cuIFRoaXMgaXMKKyAgICAgICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwg
c2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKKyAgICAgICAgaml0LmJyYW5j
aFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwKS5saW5rVG8oZnJvbUFy
aXR5Q2hlY2ssICZqaXQpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Rml4
dXAgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcChmcm9tQXJpdHlDaGVjayk7CisgICAg
ICAgIAorICAgICAgICBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoc3RhdGUu
Z3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7
CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVj
ayk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+
bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2Nh
bGxfYXJpdHlDaGVjayk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAs
IEZ1bmN0aW9uUHRyKChzdGF0ZS5ncmFwaC5tX3ZtLmdldENUSVN0dWIoYXJpdHlGaXh1cCkpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICAgICAgLy8gV2UganVtcCB0
byBoZXJlIHN0cmFpZ2h0IGZyb20gREZHIGNvZGUsIGFmdGVyIGhhdmluZyBib3hlZCB1cCBhbGwg
b2YgdGhlCisgICAgICAgIC8vIHZhbHVlcyBpbnRvIHRoZSBzY3JhdGNoIGJ1ZmZlci4gRXZlcnl0
aGluZyBzaG91bGQgYmUgZ29vZCB0byBnbyAtIGF0IHRoaXMKKyAgICAgICAgLy8gcG9pbnQgd2Un
dmUgZXZlbiBkb25lIHRoZSBzdGFjayBjaGVjay4gQmFzaWNhbGx5IHdlIGp1c3QgaGF2ZSB0byBt
YWtlIHRoZQorICAgICAgICAvLyBjYWxsIHRvIHRoZSBMTFZNLWdlbmVyYXRlZCBjb2RlLgorICAg
ICAgICBqaXQuc2V0dXBBUmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgaml0Lm1vdmUoCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSwKKyAgICAgICAgICAgIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAg
ICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIAorICAgICAgICBsaW5rQnVmZmVyID0gYWRv
cHRQdHIobmV3IExpbmtCdWZmZXIoCisgICAgICAgICAgICBzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgc3RhdGUuZmlu
YWxpemVyLT5pbml0aWFsaXplRW50cnlwb2ludExpbmtCdWZmZXIobGlua0J1ZmZlci5yZWxlYXNl
KCkpOwogICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUZ1bmN0aW9uKHN0YXRlLmdlbmVy
YXRlZEZ1bmN0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDYg
KzI0Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgICAg
ICBjb21waWxlR2V0QXJndW1lbnQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRy
eUxvY2FsKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAg
ICAgICAgICAgIGNvbXBpbGVHZXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDYs
NiArNTA5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBj
b21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigK
KyAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlC
dWZmZXIoKSkgKyBvcGVyYW5kKSkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRM
b2NhbCgpCiAgICAgewogICAgICAgICAvLyBHZXRMb2NhbHMgYXJpc2Ugb25seSBmb3IgY2FwdHVy
ZWQgdmFyaWFibGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRy
eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVu
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExPU1JFbnRyeS5oIgorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTEZvck9T
UkVudHJ5SklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxv
Y2ssCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gZGZn
Q29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICBERkc6OkpJVENvZGUqIGRmZ0NvZGUg
PSBkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgRm9yT1NSRW50cnlKSVRDb2Rl
KiBlbnRyeUNvZGUgPSBlbnRyeUNvZGVCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgp
OworICAgIAorICAgIGRhdGFMb2coCisgICAgICAgICJGVEwgT1NSIGZyb20gIiwgKmRmZ0NvZGVC
bG9jaywgIiB0byAiLCAqZW50cnlDb2RlQmxvY2ssICIgYXQgYmMjIiwKKyAgICAgICAgYnl0ZWNv
ZGVJbmRleCwgIi5cbiIpOworICAgIAorICAgIGlmIChieXRlY29kZUluZGV4ICE9IGVudHJ5Q29k
ZS0+Ynl0ZWNvZGVJbmRleCgpKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHdlIGRvbid0IGhh
dmUgYW4gZW50cnlwb2ludCBmb3IgYmMjIiwgYnl0ZWNvZGVJbmRleCwgIjsgb3VycyBpcyBmb3Ig
YmMjIiwgZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgCisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gdmFsdWVzOworICAgIGRmZ0NvZGUtPnJl
Y29uc3RydWN0KAorICAgICAgICBleGVjLCBkZmdDb2RlQmxvY2ssIENvZGVPcmlnaW4oYnl0ZWNv
ZGVJbmRleCksIHN0cmVhbUluZGV4LCB2YWx1ZXMpOworICAgIAorICAgIGZvciAoaW50IGFyZ3Vt
ZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKAorICAgICAgICAgICAgZXhlY1thcmd1bWVudFRvT3BlcmFuZChhcmd1
bWVudCldLmpzVmFsdWUoKSA9PSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQodmFsdWVzLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzZWxp
bmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICAKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2Ny
YXRjaCA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgIGVudHJ5Q29kZS0+
ZW50cnlCdWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAgICBmb3IgKGludCBsb2NhbCA9IHZhbHVl
Lm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KQorICAgICAgICBzY3JhdGNoW2xvY2FsXSA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZXMubG9jYWwobG9jYWwpKTsKKyAgICAKKyAgICBpZiAoIXZtLmlu
dGVycHJldGVyLT5zdGFjaygpLmdyb3coCisgICAgICAgICAgICAmZXhlYy0+cmVnaXN0ZXJzKClb
ZW50cnlCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgeworICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmNh
dXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIAorICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CisgICAgCisgICAg
dm9pZCAqcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygi
ICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1BvaW50ZXIocmVz
dWx0KSwgIlxuIik7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMT1NSRW50cnlfaAorI2RlZmluZSBGVExPU1JFbnRyeV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgRXhlY1N0YXRlOworCituYW1lc3BhY2UgRlRM
IHsKKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayog
ZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LAorICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JF
bnRyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZp
c2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAj
aW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDAsOSAr
NDIsMjMgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIGNvbnRleHQoTExWTUNv
bnRleHRDcmVhdGUoKSkKICAgICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKLSAgICAs
IGppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUoKSkpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlv
bigwKQogeworICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1v
ZGU6CisgICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgSklUQ29kZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6CisgICAgICAgIFJlZlB0cjxGb3JP
U1JFbnRyeUpJVENvZGU+IGNvZGUgPSBhZG9wdFJlZihuZXcgRm9yT1NSRW50cnlKSVRDb2RlKCkp
OworICAgICAgICBjb2RlLT5pbml0aWFsaXplRW50cnlCdWZmZXIoZ3JhcGgubV9wcm9maWxlZEJs
b2NrLT5tX251bUNhbGxlUmVnaXN0ZXJzKTsKKyAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJbmRl
eChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgaml0Q29kZSA9
IGNvZGU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKICAgICBmaW5h
bGl6ZXIgPSBuZXcgSklURmluYWxpemVyKGdyYXBoLm1fcGxhbik7CiAgICAgZ3JhcGgubV9wbGFu
LmZpbmFsaXplciA9IGFkb3B0UHRyKGZpbmFsaXplcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2aXNpb24gMTU0ODUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc0LDYgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElubGluZUNhbGxG
cmFtZSogYXNJbmxpbmVDYWxsRnJhbWUoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCB1bmJveGVk
SW50MzIoKSBjb25zdDsKICAgICAgICAgYm9vbCB1bmJveGVkQm9vbGVhbigpIGNvbnN0OworICAg
ICAgICBkb3VibGUgdW5ib3hlZERvdWJsZSgpIGNvbnN0OwogICAgICAgICBKU0NlbGwqIHVuYm94
ZWRDZWxsKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgcGF5bG9hZCgpIGNvbnN0OwogICAgICAg
ICBpbnQzMl90IHRhZygpIGNvbnN0OwpAQCAtOTYsNiArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIEluc3RydWN0aW9uKiB2UEM7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3Ig
ZW5jb2RlZFZhbHVlOworICAgICAgICAgICAgZG91YmxlIG51bWJlcjsKICAgICAgICAgfSB1Owog
ICAgIH07CiAKQEAgLTE4OCw2ICsxOTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiAhIXBheWxvYWQoKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBSZWdp
c3Rlcjo6dW5ib3hlZERvdWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5udW1i
ZXI7CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIFJlZ2lzdGVyOjp1bmJveGVk
Q2VsbCgpIGNvbnN0CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEpJ
VDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuKCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4
ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNp
Z25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JF
bnRyeSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRl
Q291bnRlcigpKSk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wdGltaXpl
KTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNl
dCkpOwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDg1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEyIEBA
IEZUTDo6SklUQ29kZSogSklUQ29kZTo6ZnRsKCkKICAgICByZXR1cm4gMDsKIH0KIAorRlRMOjpG
b3JPU1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvck9TUkVudHJ5KCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiBQYXNzUmVmUHRy
PEpJVENvZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1
bmspKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ4
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTYzLDYgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uKCk7CiAgICAgdmlydHVhbCBERkc6OkpJVENvZGUqIGRmZygpOwogICAgIHZp
cnR1YWwgRlRMOjpKSVRDb2RlKiBmdGwoKTsKKyAgICB2aXJ0dWFsIEZUTDo6Rm9yT1NSRW50cnlK
SVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOwogICAgIAogICAgIEpTVmFsdWUgZXhlY3V0ZShKU1N0
YWNrKiwgQ2FsbEZyYW1lKiwgVk0qKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTQ4NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNiwxNiArMTAzNiwzMiBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1p
emVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPQotICAgICAg
ICAgICAgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpOwotICAg
ICAgICBSZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxh
Y2VtZW50KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZtLndvcmtsaXN0KQotICAgICAgICAg
ICAgdm0ud29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgICAgIHVuc2lnbmVk
IG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICBpZiAob3NyRW50cnlCeXRlY29kZUluZGV4KQor
ICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOworICAgICAgICBP
cGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzKAorICAgICAgICAgICAgY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAg
ICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAg
JiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVC
bG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAg
ICAgICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBh
cmd1bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxz
byBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2
YWx1ZSBmb3IgdGhpcywKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFj
dHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywK
KyAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQg
aW50byBVbmRlZmluZWQuCisgICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpz
VW5kZWZpbmVkKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtdXN0SGFu
ZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsK
KyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0g
REZHOjpjb21waWxlKAotICAgICAgICAgICAgY2FsbEZyYW1lLCBuZXdDb2RlQmxvY2suZ2V0KCks
IERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwgY2FsbGJhY2ssCi0gICAgICAgICAgICB2bS53
b3JrbGlzdC5nZXQoKSk7CisgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVu
dCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBtdXN0SGFuZGxl
VmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksCisg
ICAgICAgICAgICB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChy
ZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTA1NCwxNSArMTA3MCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQog
ICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVkQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKICAgICAKLSAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKSB7Ci0gICAgICAgIC8vIEZUTCBKSVQgZG9lc24ndCBz
dXBwb3J0IE9TUiBlbnRyeSB5ZXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjUKLSAgICAgICAgCi0gICAgICAgIC8vIERvbid0IGF0dGVt
cHQgT1NSIGVudHJ5IGFnYWluLgotICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgaWYgKHZvaWQqIGFk
ZHJlc3MgPSBERkc6OnByZXBhcmVPU1JFbnRyeShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9j
aywgYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
ewogICAgICAgICAgICAgZGF0YUxvZygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiAr
OTIsNyBAQCBJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmluc2ljKCkgCiAKICNpZiBF
TkFCTEUoSklUKQogLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBmb3IgamV0dGlzb25pbmcgY29kZSBi
bG9ja3MuCisvLyBGSVhNRTogdGhpcyBpcyBraW5kIG9mIGJvZ3VzLgogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KIHN0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKFZNJiB2bSwgUmVmUHRyPFQ+JiBj
b2RlQmxvY2spCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CShyZXZpc2lvbiAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsNyBAQCB0eXBlZGVmIE9wdGlvblJh
bmdlIG9wdGlvblJhbmdlOwogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplU29vbiwg
MTAwMCkgXAogICAgIFwKICAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
TG9vcCwgMSkgXAotICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1
cm4sIDE1KSBcCisgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5
LCAxNSkgXAogICAgIFwKICAgICB2KGludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTAp
IFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNTQ4NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwOSw2ICs3MDksMTUgQEAgdm9pZCBWTTo6Z2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydgogICAgICAgICB9CiAgICAgfQogfQorCitERkc6OldvcmtsaXN0KiBWTTo6
ZW5zdXJlV29ya2xpc3QoKQoreworICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERG
Rzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTU0ODUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBt
YWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2Nr
PiBtX2FwaUxvY2s7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210307</attachid>
            <date>2013-09-02 12:53:25 -0700</date>
            <delta_ts>2013-09-02 13:03:39 -0700</delta_ts>
            <desc>starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>184060</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGhhcyBzb21lIHNtYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9u
cy4gSlNCZW5jaC9nb29nbGUKKyAgICAgICAgc2hvd3MgYSB+OSUgcmVncmVzc2lvbiBiZWNhdXNl
IGl0IEdDJ3MgbW9yZSBmcmVxdWVudGx5LiBIb3dldmVyLCB0aGF0CisgICAgICAgIHJlZ3Jlc3Np
b24gaXMgbm90IGR1ZSB0byB0aGUgamV0dGlzb24gcmVmYWN0b3JpbmcgLSBpbnN0ZWFkIGl0J3Mg
ZHVlIHRvCisgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhpcyBjaGFuZ2UgYWxzbyBtYWtlcyB1cyBt
b3JlIHByZWNpc2VseSB0cmFjayBDb2RlQmxvY2sKKyAgICAgICAgbWVtb3J5IGZvb3RwcmludC4g
UHJldmlvdXNseSwgd2UgaWdub3JlZCB0aGUgc2l6ZSBvZiB0aGUgYnl0ZWNvZGUgc3RyZWFtLgor
ICAgICAgICBOb3cgd2UgZG9uJ3QgaWdub3JlIGl0IGFueXdheS4gVGhpcyBjYXVzZXMgc29tZSBi
ZW5jaG1hcmtzIHRvIEdDIG1vcmUKKyAgICAgICAgZnJlcXVlbnRseS4gSXQncyBhIGJ1ZyB0byBo
YXZlIHRoZSBHQyBpZ25vcmUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAgICAgQ29kZUJs
b2NrcywgYW5kIGlmIHRoYXQgYnVnIGNhdXNlcyBzb21lIGJlbmNobWFyayB0byBydW4gYSBiaXQg
ZmFzdGVyCisgICAgICAgIHdoaWxlIHVzaW5nIGEgYml0IG1vcmUgbWVtb3J5LCB0aGVuIGl0J3Mg
c3RpbGwgYSBidWcgYW5kIHdlIHNob3VsZCBzdGlsbAorICAgICAgICBmaXggaXQuIFRoZXJlIGFy
ZSBubyBvdGhlciBwZXJmb3JtYW5jZSBjaGFuZ2VzIGR1ZSB0byB0aGlzIGNoYW5nZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRk
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgor
ICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNr
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBmb3IgSGFyZEF1dG9y
ZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwzMCArMTY5
LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGlzYXNzZW1ibGVyL1g4NkRp
c2Fzc2VtYmxlci5jcHAKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3IuY3BwCi0gICAgaGVhcC9D
b3BpZWRTcGFjZS5jcHAKLSAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAotICAgIGhlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAot
ICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKLSAgICBoZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCi0gICAgaGVhcC9HQ1RocmVhZC5jcHAKLSAgICBoZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKLSAgICBoZWFwL0hhbmRsZVNldC5jcHAKLSAgICBoZWFw
L0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSGVhcC5jcHAKLSAgICBoZWFwL0hlYXBTdGF0aXN0
aWNzLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAotICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAotICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCi0gICAgaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCi0KLSAgICBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAorICAgIGhlYXAv
Q29kZUJsb2NrU2V0LmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVh
cC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvREZH
Q29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcApAQCAtMjAwLDYgKzE4MCw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAv
SGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCisgICAgaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBo
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAgICBoZWFwL01hcmtTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQyLDYgKzQ0Miw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaCBcCkBAIC00NTYsOCArNDU4
LDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDExICs4MiwxMSBAQCBTT1VSQ0VTICs9IFwK
ICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAorICAg
IGhlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAgICAgaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaCBc
CiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwIFwK
ICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tz
LmNwcCBcCiAgICAgaGVhcC9XZWFrLmNwcCBcCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwIFwKICAg
ICBoZWFwL1dlYWtIYW5kbGVPd25lci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RyaXZlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNz
ZW1ibGVyXERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxDb2RlQmxvY2tTZXQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29uc2VydmF0aXZlUm9vdHMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29waWVkU3BhY2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVZpc2l0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
REZHQ29kZUJsb2Nrcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxH
Q1RocmVhZC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGFu
ZGxlU2V0LmNwcCIgLz4NCkBAIC02NzksNiArNjc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3BpZWRBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcGllZEJsb2NrLmgiIC8+DQpAQCAtNjg5LDcgKzY5MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvcklubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXENvcHlXb3JrTGlzdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcREZHQ29kZUJsb2Nrcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1RocmVhZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWRTaGFyZWREYXRhLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4
LDYgQEAKIAkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0QzE1
MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLzsgfTsKIAkJMEYyQkRDNEYx
NTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBE
RkdWYWx1ZVNvdXJjZS5jcHAgKi87IH07CiAJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkxMCAvKiBE
RkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNw
cCAqLzsgfTsKLQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9
OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAw
M0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZp
ZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5
NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAq
LzsgfTsKQEAgLTM2OSw2ICszNjcsMjAgQEAKIAkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07
CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CisJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xMzU0LDgg
KzEzNjYsNiBAQAogCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkTm9k
ZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVlU291cmNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29kZUJs
b2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MDE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7
IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNl
S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU4LDYgKzE1NjgsMjAg
QEAKIAkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTUz
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVj
dWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzExMTdE
NDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMRm9yT1NSRW50cnlKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE3MTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPU1JFbnRyeS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRW50cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NS
RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRW50cnkuaDsg
cGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMUUxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIw
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHBhdGgg
PSBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgcGF0aCA9IGRmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRsL0ZU
TEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dv
cmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTM5LDYgKzI1NjMsOCBAQAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEw
NDE3QSAvKiBGVExGYWlsLmNwcCAqLywKIAkJCQlBN0YyOTk2QTE3QTBCQjY3MDAxMDQxN0EgLyog
RlRMRmFpbC5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0
ZWRWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwICovLAorCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyog
RlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBBMjIxNzA5NjA2OTAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTI1NTEsNiArMjU3Nyw4
IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNw
cCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
aCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1
ZS5oICovLAorCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAg
Ki8sCisJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggKi8sCiAJ
CQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICovLAogCQkJCTBG
MjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCiAJCQkJMEYyMzVCQzgx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLywKQEAgLTI3
MTUsNiArMjc0Myw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgxNkUxOTE1NENDNTZDMDBC
ODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuY3BwICovLAogCQkJCTE0ODE2RTFBMTU0Q0M1NkMwMEI4
MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovLAorCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0
MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAorCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAv
KiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCAqLywKQEAgLTI3MjksOCArMjc1OSw2IEBACiAJCQkJQzIyMzlEMTQx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMThEMTNG
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFE
NjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAotCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKLQkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBH
Q0Fzc2VydGlvbnMuaCAqLywKIAkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCAqLywKIAkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCkBAIC0zNTI0LDYgKzM1NTIsOCBAQAogCQkJ
CUE3RDg5Q0VGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLywK
KwkJCQkwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwICovLAorCQkJCTBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovLAogCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgKi8sCkBAIC0zNTY2LDYgKzM1OTYsMTIgQEAKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlG
MTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4
QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZEOEEzMjAx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLywKKwkJ
CQkwRkQ4QTMyMTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovLAorCQkJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCTBGRDhBMzIzMTdENTFGNTcw
MENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCAqLywKKwkJCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGNjM5NDNDMTVDNzVG
MTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjYz
OTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKQEAgLTM4OTEsNyArMzkyNyw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQw
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTk5LDcgQEAKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTc3LDYg
KzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2
RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBACiAJCQkJMTRCQTdBOTgxM0FBREZGODAw
NUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0Uw
MERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTIsNiArNDMzMCw3IEBACiAJ
CQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJB
MyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBC
MzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3
QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzFBMTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJl
Z0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1LDYgKzQzODUsNyBAQAogCQkJCTBGQjdG
MzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5
NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FC
NjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8q
IFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2
QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZE
RDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMy
QTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAv
KiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYg
KzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENv
bW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZl
cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDgyNSw3ICs0ODY5LDYgQEAKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdB
NDI0MTE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4ODYsNiArNDkyOSw3IEBA
CiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI5MTdENTFG
NTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0
QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5ODcsNiArNTAzMSw3IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pT
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8q
IEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzEzMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcgQEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JF
OEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkx
NkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTExLDYgKzUxNTcsNyBA
QAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxNDEsNiAr
NTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBT
dXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1f
aXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAg
ICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9vd25lckV4ZWN1dGFi
bGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293
bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92bSkKQEAgLTE1MDQsNiAr
MTUwNSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5k
aWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxOCw5IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVhcC0+
bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTUyNSw2ICsxNTMwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSkKICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQogICAgICwgbV9v
d25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQogICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE1
NDQsNyArMTU1MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8K
ICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQp
CiAjZW5kaWYKIHsKLSAgICBtX3ZtLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAKICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNl
dE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CkBAIC0x
ODQyLDcgKzE4NDgsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBk
dW1wQnl0ZWNvZGUoKTsKLSAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKyAgICBt
X2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4NTAs
MTIgKzE4NTcsNiBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGlmIChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CiAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
Ly8gUmVtb3ZlIG15c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBOb3RlIHRo
YXQgSSBtYXkgbm90IGJlIGluIHRoaXMgc2V0Ci0gICAgLy8gKGJlY2F1c2UgSSdtIG5vdCBhIERG
RyBjb2RlIGJsb2NrKSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5LgotICAg
IG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsKLSNlbmRpZgot
ICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKICNlbmRpZgpAQCAtMTkwNSwzMyArMTkwNiwzNSBAQCB2b2lkIEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgewotICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15
c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHku
Ci0gICAgICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3Zl
IGJlZW4gY2FsbGVkIGFscmVhZHkuIE9ubHkgb25lIHRocmVhZAotICAgICAgICAvLyBtYXkgcHJv
Y2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIENBUyByYWNlLgot
ICAgICAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb2xk
VmFsdWUgPSBkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKLSAgICAgICAg
ICAgIGlmIChvbGRWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Ci0g
ICAgICAgICAgICAgICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4g
RG9pbmcgc28gaXMgaGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBi
ZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBKU1Zh
bHVlcywgd2hpY2ggY2FuCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24g
MzItYml0LCBsZWFkaW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmVhcmx5IGltcG9zc2libGUgdG8gdHJhY2sgZG93bi4K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBt
dXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVhcmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQotICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIHRydWUgKHdlbGwsICh1bnNpZ25lZCkxKSwgc2luY2Ugb25jZSBh
IEdDIHRocmVhZCBpcyBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGFuZCBoYXMg
d29uIHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZh
bHVlIHRydWUpCi0gICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5IGNvbXBsZXRl
IHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKLSAgICAgICAgICAgICAg
ICAvLyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmZGZnQ29tbW9uLT52
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0dDKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2Us
IGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgIC8vIFRvIHRoaXMgZW5k
LCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuIE9u
bHkgb25lIHRocmVhZAorICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCisgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAg
ZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwor
ICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Cisg
ICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2lu
ZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgbXV0YXRp
bmcgdGhlIHN0YXRlIG9mIFZhbHVlUHJvZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdo
aWNoIGNhbgorICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFk
aW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCisgICAgICAgICAgICAvLyB0
aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVh
cmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
CisgICAgICAgICAgICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3Bv
bnNpYmxlIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgLy8gaXQgd2ls
bCBkZWZpbml0ZWx5IGNvbXBsZXRlIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNs
YXJpbmcKKyAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX3Zpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExF
TF9HQykKKyAgICAKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZW9mKENv
ZGVCbG9jaykpOworICAgIGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlVc2FnZShtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25z
LnNpemUoKSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZD
b3VudCgpKTsKICAgICAKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVy
bmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTIzNzksMTcgKzIzODIsMTQgQEAg
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUo
SklUKQorYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Cit9CisKIGJvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGJvb2wgcmVzdWx0ID0gSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxh
Y2VtZW50KCktPmppdFR5cGUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudCgpID09IHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOwogfQogI2VuZGlm
CiAKQEAgLTI3NDAsMjggKzI3NDAsMTQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25D
b2RlQmxvY2s6OgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQogeworICAgIERlZmVyR0Mg
ZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwogICAgIGFsdGVy
bmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRh
dGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzLCAiLlxuIik7Ci0gICAgamV0dGlzb25JbXBsKCk7
Ci19Ci0KLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKCp2bSgpKTsKLX0KLQotdm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbklt
cGwoKQotewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgp
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAg
IGFsdGVybmF0aXZlKCktPmluc3RhbGwoKTsKIH0KICNlbmRpZgogCkBAIC0zMDM4LDEwICszMDI0
LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0
aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0
aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApA
QCAtMzA0OSwxNiArMzAzNSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3Rp
bGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
b3B0aW1pemVkIGNvZGUgcmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAg
ICAgY291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0hhc2guaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlw
ZS5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJs
b2Nrcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtODMsNyArODMsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0yNzMs
MTQgKzI3MiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVj
aykKICAgICB7CisgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisgICAgICAg
IG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2Nr
IHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJh
bm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKICAgICAgICAgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvcihtX2pp
dENvZGUpKSkKLSAgICAgICAgICAgIG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFk
ZCh0aGlzKTsKLSNlbmRpZgogICAgIH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KQEAg
LTMxMSw3ICszMDgsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsg
fQogCi0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOworICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBi
b29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15
IEpJVFR5cGUKICNlbmRpZgogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTk2MCwxMCAr
OTU4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAg
Ym9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247
CisgICAgCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIApAQCAtOTc0LDcgKzk3MSw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2tTZXQ7CiAgICAgCiAgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSk7CiAgICAgCkBAIC0xMDE3LDE3ICsxMDE0LDE2IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpCiAgICAgewotICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFucyB0
aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKLSAgICAg
ICAgLy8gQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28KLSAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQg
Q29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0
IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCiAgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJs
b2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFk
IHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCiAgICAgICAgIC8vIGFs
bG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9q
aXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmIChtX21heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwNjcsNiArMTA2Myw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2
YXRpb247CisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAgIHVpbnQ4X3QgbV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291
cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTE4Niw3ICsxMTg0LDYgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjA5LDcgKzEyMDYsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjMyLDcg
KzEyMjgsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjkxLDggKzEyODYsNyBAQCBpbmxpbmUgSlNW
YWx1ZSBFeGVjU3RhdGU6OmFyZ3VtZW50QWZ0ZXJDCiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5qc1ZhbHVlKCk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLWlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAw
IGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMu
CiAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CkBAIC0xMzA3LDkgKzEzMDEsOCBAQCBpbmxpbmUgdm9pZCBERkdDb2Rl
QmxvY2tzOjptYXJrKHZvaWQqIGNhCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRy
dWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYgKzE1MjAsOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9t
OgogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBj
YXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAg
ICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1Myw2
ICszMTUzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzogewogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEpTQ29uc3RhbnRGb3JWYWx1
ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kID49IDApOworICAgICAgICAgICAgbV9ncmFwaC5tX2xhenlWYXJzLnNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2luaXRfbGF6eV9yZWcpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM2MzQsNyArMzYz
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBBU1NFUlQoYmxvY2sp
OwogICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkgewotICAgICAgICAgICAgbV9ncmFw
aC5raWxsQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJdHND
b250ZW50cyhibG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcwLDE2ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5yZXNldFJlYWNoYWJpbGl0eSgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBraWxsVW5yZWFjaGFibGUo
YmxvY2spOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLmtpbGxV
bnJlYWNoYWJsZUJsb2NrcygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCkBAIC0zMjAsMTkg
KzMxMSw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGtpbGxVbnJl
YWNoYWJsZShCYXNpY0Jsb2NrKiBibG9jaykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChibG9jayk7
Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07
KQotICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUlu
ZGV4XSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KQotICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5hdChub2RlSW5kZXgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgua2lsbEJsb2NrKGJs
b2NrKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlKiBsaXZlbmVzc05vZGUgPSBqZXR0
aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNiArMTExLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNh
c2UgSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludEFuZENoZWNrOgpAQCAtMTMzLDYg
KzEzNCw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxl
OgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAgd3JpdGUoU2lk
ZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2Niw3
IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7CiBjbGFzcyBDb21tb25EYXRhIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKLSAgICBDb21t
b25EYXRhKCkKLSAgICAgICAgOiBtYXlCZUV4ZWN1dGluZyhmYWxzZSkKLSAgICAgICAgLCBpc0pl
dHRpc29uZWQoZmFsc2UpCi0gICAgewotICAgIH0KKyAgICBDb21tb25EYXRhKCkgeyB9CiAgICAg
CiAgICAgdm9pZCBub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mLCBDb2Rl
QmxvY2sqLCBOb2RlKik7CiAgICAgCkBAIC04MSwxMSArNzcsOCBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7CiAgICAgCiAgICAgUmVm
UHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247Ci0gICAgYm9vbCBtYXlCZUV4
ZWN1dGluZzsKLSAgICBib29sIGlzSmV0dGlzb25lZDsKICAgICBib29sIGxpdmVuZXNzSGFzQmVl
blByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAgYm9vbCBh
bGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBl
dmVyeSBHQy4KLSAgICB1bnNpZ25lZCB2aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7IC8vIFVu
c2lnbmVkIHRvIG1ha2UgaXQgd29yayBzZWFtbGVzc2x5IHdpdGggdGhlIGJyb2FkZXN0IHNldCBv
ZiBDQVMgaW1wbGVtZW50YXRpb25zLgogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0
OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw5ICs1NSw5IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlv
bk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQ
dHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKLSAgICBXb3JrbGlzdCog
d29ya2xpc3QpCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVy
YW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIp
Iik7CiAgICAgCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlSW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9N
QVgpOwotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CiAKQEAgLTc4LDggKzc2LDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZygi
REZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCi0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkg
c3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdh
bnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMg
ZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwpAQCAtOTMsMjkgKzg5LDggQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8vIERlcml2
ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUg
YXQgbGVhc3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50
cnkgd2l0aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0g
ICAgaWYgKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMg
PSBjb2RlQmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNXaXRoVmFs
dWVzID0gMDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcg
UGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhW
YWx1ZXMpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAg
ICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAg
ICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0
cnVjdCkgewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0
aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAg
IC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50
byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFu
IGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3Nl
cywKLSAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBp
bnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5k
bGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB9
CisgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4
LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAgICAgICAg
IHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENvZGVCbG9j
ayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwK
ICAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0KikK
IHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywxMyBAQCBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+IHBhc3NlZENhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywg
Y29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlz
dCk7CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
bXVzdEhhbmRsZVZhbHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9
IENvbXBpbGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENv
bXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0NiwxMCBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhCiAKIC8v
IElmIHRoZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2UgZG8gYSBjb25jdXJyZW50IGNvbXBpbGUu
IE90aGVyd2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAvLyBjb21waWxlLiBFdmVuIGlmIHdlIGRv
IGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVz
dWx0LgotQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBD
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOworQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZSgKKyAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+
JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrPiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAg
ICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6
CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
Niw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwg
IigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAi
KSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7CisgICAgICAg
IGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmci
LCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9CiAgICAgaWYgKG5vZGUtPmhh
c0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAgICAg
b3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CkBAIC00ODcsNiArNDk0LDI5
IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFzaWNC
bG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBo
aXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9k
ZUluZGV4KSk7CisgICAgCisgICAga2lsbEJsb2NrKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6
a2lsbFVucmVhY2hhYmxlQmxvY2tzKCkKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBudW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc1Jl
YWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAga2lsbEJs
b2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwogdm9pZCBHcmFwaDo6cmVzZXRF
eGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4KTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Jsb2NrKik7Cisg
ICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAKICAgICBib29sIGlz
UHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gaXNO
dW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBAIHB1YmxpYzoKICAgICBib29s
IG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFi
bGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7
CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxW
YXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsNiArMTA3LDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgp
CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29u
c3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
U1NBKSB7CiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjksOCArMTMwLDYgQEAgdm9pZCBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQ2VsbCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7Ci0gICAgICAg
IAotICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5j
cHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogSklUQ29kZTo6SklUQ29kZSgpCkBAIC01OSw2ICs2MSwxNDUgQEAgdm9p
ZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJpbmtU
b0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAor
ICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7CisgICAgdmFyaWFibGVFdmVu
dFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBtaW5p
ZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6cmVjb25z
dHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxKU1Zh
bHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJpZXM7
CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVj
b3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFuZHNM
aWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0t
OykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAg
ICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAg
ICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQg
bWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1
c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhp
cywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQg
Y2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAgICAgICAgICAgLy8g
c28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgorICAg
ICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0g
cmVjb3Zlcmllc1tpXTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2s6Cisg
ICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZENlbGw6CisgICAgICAgIGNhc2Ug
QWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEJvb2xlYW46CisgICAgICAgICAgICB2YWx1ZSA9IGV4
ZWMtPnIoaSkuanNWYWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxy
ZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihleGVjLT5yKGkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1
ZSA9IGpzRG91YmxlTnVtYmVyKGV4ZWMtPnIoaSkudW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSBy
ZWNvdmVyeS5jb25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBD
b3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCkpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24u
XG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1l
U29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0
aW1lIHNvb24uXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9
CisKK3ZvaWQgSklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2Rl
QmxvY2ssICI6IEZUTC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBD
b3VudGVyLnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRl
clZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisg
ICAgICAgIGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGll
clVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENv
dW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAg
ICAgIGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQ
YXRoQ29uY3VycmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93
IHBhdGggY29uY3VycmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVy
LmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3Vs
dCkgeworICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5l
eHRJbnZvY2F0aW9uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBp
bGF0aW9uRmFpbGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2sp
OworICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21w
aWxhdGlvbiA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVm
ZXJyZWQ6CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhp
cyBpcyB3ZWlyZCAtIGl0IHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNv
ZGUgYmxvY2sgKGkuZS4KKyAgICAgICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENv
ZGUgYmVsb25ncyB0bykgaXMgYWxzbyBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9l
c24ndCByZWFsbHkgbWF0dGVyIHdoYXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5n
IGFueXdheS4gTm90ZQorICAgICAgICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXph
dGlvbiBhY3R1YWxseSBtZWFucyB0aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3
aWNlLiBCdXQgdGhhdCdzIGdlbmVyYWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJl
b3B0aW1pemF0aW9ucworICAgICAgICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4K
KyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlv
bigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRy
eS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENv
ZGUuaCIKICNpbmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgpAQCAtOTMsOCArOTQsMzEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAg
ICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4mIHJlc3VsdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBvbmx5IGFw
cGxpY2FibGUgaWYgd2UncmUgYXQgYSBwb2ludCB3aGVyZSBhbGwgdmFsdWVzIGFyZSBzcGlsbGVk
IHRvIHRoZQorICAgIC8vIHN0YWNrLiBDdXJyZW50bHksIGl0IGFsc28gaGFzIHRoZSByZXN0cmlj
dGlvbiB0aGF0IHRoZSB2YWx1ZXMgbXVzdCBiZSBpbiB0aGVpcgorICAgIC8vIGJ5dGVjb2RlLWRl
c2lnbmF0ZWQgc3RhY2sgc2xvdHMuCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRl
eCwKKyAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4mIHJlc3VsdCk7CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKyAgICAvLyBOQi4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJl
Y2F1c2UgdGhleSBtYXkgd2FudCB0byB1c2UKKyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91
dCBzY2FsaW5nIHRocmVzaG9sZHMuIEl0IHNob3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAg
CisgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXpl
QWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKyAgICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENv
bXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgogCkBAIC0xMDYsNiArMTMwLDEwIEBAIHB1Ymxp
YzoKICAgICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4g
d2F0Y2hwb2ludHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRT
dHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworI2lmIEVOQUJMRShG
VExfSklUKQorICAgIEV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBvc3JFbnRyeUJsb2NrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDIwIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0K
ICAgICAKKyAgICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2FzZSBF
eHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IAogICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChvcCgpID09IEdldExvY2FsVW5saW5rZWQpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5r
ZWRMb2NhbCgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bV9vcEluZm8pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAorICAgIC8qIFNwZWNpYWwgbm9k
ZSBmb3IgT1NSIGVudHJ5IGludG8gdGhlIEZUTC4gSW5kaWNhdGVzIHRoYXQgd2UncmUgbG9hZGlu
ZyBhIGxvY2FsICovXAorICAgIC8qIHZhcmlhYmxlIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyLiAq
L1wKKyAgICBtYWNybyhFeHRyYWN0T1NSRW50cnlMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCisgICAg
XAorICAgIC8qIFRpZXItdXAgY2hlY2tzIGZyb20gdGhlIERGRyB0byB0aGUgRlRMLiAqL1wKKyAg
ICBtYWNybyhDaGVja1RpZXJVcEluTG9vcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENoZWNrVGllclVwQW5kT1NSRW50ZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhD
aGVja1RpZXJVcEF0UmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAogICAgIC8qIEdl
dCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhl
IFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFs
aWQgZm9yIHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9c
CiAgICAgLyogYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBsb2NhbCBhY2Nlc3MsIGFuZCB0aHVz
IGhhZCB0aGVpciBvd24gcHJvZmlsaW5nLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3
LDM0IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKIAogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAg
ICJPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2Nr
LAorICAgICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
IiAtPiAiLCAqY29kZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5k
ZXgsICJcbiIpOwogICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgIC8v
IFdoZW4gd2lsbCB0aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gLSBBbiBleGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUgYmFzZWxpbmUgSklUIGZv
bGxvd2VkIGJ5IGFuIGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVudGVyLiBXZSdyZSBmaW5l
IHdpdGggYWxsb3dpbmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5zCisgICAgICAgIC8vICAg
ZW5vdWdoIHdlJ2xsIGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgdGhl
IE9TUiBleGl0IGNvc3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5kIHNvIHJlb3B0aW1pemlu
ZyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ug
aGF2ZSByZWN1cnNpdmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lkZXIgdGhhdCBmb28gaGFz
IGEgaG90IGxvb3AKKyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2VsZi4gV2UgaGF2ZSB0d28g
Zm9vJ3Mgb24gdGhlIHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisgICAgICAgIC8vICAgYW5k
IGZvbzIsIHdpdGggZm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBmb28ncyBob3QgbG9vcC4g
Zm9vMiBnZXRzCisgICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUgd2F5IGludG8gdGhlIEZU
TC4gVGhlbiBpdCByZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAgICAgICAgLy8gICBmb28x
IHdhbnRzIHRvIGdldCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRoaXMgY29uY2x1c2lvbiBm
cm9tIGl0cworICAgICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0IHRvIE9TUiBlbnRlci4g
QW5kIHdlJ2xsIHRlbGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAgICAgLy8gICBtaWdodCBi
ZSB3b3J0aCBhZGRyZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0aGluayB0aGlzIGNhc2Ug
d2lsbAorICAgICAgICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3csIGlmIGl0IGRvZXMgaGFw
cGVuLCBpdCdsbCBjYXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAgIC8vICAgdGhyYXNoaW5n
LgorICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIGJsb2Nr
IGlzIG5vdCBERkcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIE9T
UkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5
RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFlbnRy
eSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRM
Rm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0g
PT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2Rl
SW5kZXggIT0gVUlOVF9NQVgpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZSA9IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrOworICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNl
cnRpb25TZXQgaW5zZXJ0aW9uU2V0OworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogdGFy
Z2V0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPmNv
ZGVPcmlnaW4gPT0gQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSkgeworICAgICAgICAgICAgICAg
IHRhcmdldCA9IGJsb2NrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0YXJnZXQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSB0ZXJyaWJsZSBvdXRjb21lLiBJdCBzaG91bGRuJ3Qgb2Z0ZW4gaGFwcGVuIGJ1dCBpdCBt
aWdodAorICAgICAgICAgICAgLy8gaGFwcGVuIGFuZCBzbyB3ZSBzaG91bGQgZGVmZW5kIGFnYWlu
c3QgaXQuIElmIGl0IGhhcHBlbnMsIHRoZW4gdGhpcworICAgICAgICAgICAgLy8gY29tcGlsYXRp
b24gaXMgYSBmYWlsdXJlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0KDApOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5j
b2RlT3JpZ2luOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIFNwZWNOb25lLCBTZXRBcmd1bWVudCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAg
ICBPcEluZm8odGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpKTsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW29wZXJhbmRUb0FyZ3Vt
ZW50KG9wZXJhbmQpXSA9IG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgbG9jYWwg
PSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewor
ICAgICAgICAgICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwg
dmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9jYWwsIGNvZGVPcmlnaW4s
CisgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAg
ICBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25l
LCBTZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUobV9ncmFwaCwg
U3BlY05vbmUsIEp1bXAsIGNvZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXQpKTsKKyAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0eSgp
OworICAgICAgICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24o
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
T1NSIEVudHJ5cG9pbnQgQ3JlYXRpb24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOwor
CisvLyBUaGlzIHBoYXNlIGlzIG9ubHkgZm9yIGNvbXBpbGF0aW9uIHBpcGVsaW5lcyB0aGF0IGdv
IHRocm91Z2ggU1NBLCBhbmQgdGhhdAorLy8gZG8gYSBzcGVjaWFsaXplZCBPU1IgZW50cnkgY29t
cGlsZS4gQ3VycmVudGx5IHRoYXQgbWVhbnMgRlRMLgorLy8KKy8vIENyZWF0ZXMgYW4gT1NSIGVu
dHJ5cG9pbnQgdGhhdCBlc3RhYmxpc2hlcyBhbGwgYXJndW1lbnQgYW5kIGxvY2FsIHZhcmlhYmxl
CisvLyB2YWx1ZXMuIFRoaXMgZW50cnlwb2ludCBvbmx5IHdvcmtzIGZvciB0aGUgUGxhbjo6b3Ny
RW50cnlCeXRlY29kZUluZGV4LgorLy8gVW5saWtlIG9yZGluYXJ5IE9TUiBlbnRyeSBpbnRvIHRo
ZSBERkcsIHRoaXMgZm9yY2VzIGFsbCB2YXJpYWJsZXMgc2x1cnBlZAorLy8gaW4gdGhyb3VnaCBP
U1IgZW50cnkgdG8gYXBwZWFyIFRPUCB0byB0aGUgQ0ZBLiBIZW5jZSB0aGlzIHBoYXNlIG11c3Qg
YmUgcnVuCisvLyBlYXJseSAtIGJlZm9yZSBkb2luZyBhbnkgQ0ZBLiBCdXQgdGhpcyBhbHNvIGRv
ZXMgc29tZSBhZGRpdGlvbmFsIGhhY2tzIHRoYXQKKy8vIHJlcXVpcmUgdGhpcyB0byBydW4gYmVm
b3JlIHVuaWZpY2F0aW9uLgorCitib29sIHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAxNSw2ICsyMDE1LDE4NCBAQCBleHRlcm4gIkMiIHZvaWQg
REZHX09QRVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKCk7CiB9
CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVw
Tm93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVy
R0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBO
b3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBD
b3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGlt
aXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdh
cyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0
aW1lU29vbihjb2RlYmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
ICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoY29kZUJsb2Nr
KSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0
YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5c
biIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdvcmtsaXN0OjpTdGF0ZSB3
b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2bS53b3JrbGlzdC5n
ZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVh
ZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0
ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXph
dGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvbkRlZmVycmVk
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisgICAgICAgIC8vIFRoYXQncyBncmVhdCwgd2UndmUg
Y29tcGlsZWQgdGhlIGNvZGUgLSBuZXh0IHRpbWUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAg
ICAgICAvLyB3ZSdsbCBlbnRlciB0aGF0IHJlcGxhY2VtZW50LgorICAgICAgICBqaXRDb2RlLT5v
cHRpbWl6ZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAod29y
a2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGZpbmlzaGVkIGNvbXBpbGluZywgYnV0IGZhaWxlZCBzb21laG93OyBpbiB0aGF0
IGNhc2UgdGhlCisgICAgICAgIC8vIHRocmVzaG9sZHMgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVs
eS4KKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNu
J3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KKyAgICBjb21waWxl
KAorICAgICAgICBleGVjLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1v
ZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAorICAgICAgICBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworfQor
CitjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKKyAgICBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29k
ZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2Nr
LCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisg
ICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBk
YXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGlu
ZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAg
ICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlYmxvY2spOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlv
blRocmVzaG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRp
bWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlz
dCogd29ya2xpc3QgPSB2bS53b3JrbGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRl
ID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgdm0s
IENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZvck9TUkVu
dHJ5TW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6
Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21w
aWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKTsKKyAgICAg
ICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdl
dCgpKSB7CisgICAgICAgIGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnko
CisgICAgICAgICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRlY29kZUlu
ZGV4LCBzdHJlYW1JbmRleCkpIHsKKyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihj
b2RlQmxvY2spOworICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3M7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUJs
b2NrLT5mdGxGb3JPU1JFbnRyeSgpOworICAgICAgICBlbnRyeUNvZGUtPmNvdW50RW50cnlGYWls
dXJlKCk7CisgICAgICAgIGlmIChlbnRyeUNvZGUtPmVudHJ5RmFpbHVyZUNvdW50KCkgPAorICAg
ICAgICAgICAgT3B0aW9uczo6ZnRsT1NSRW50cnlGYWlsdXJlQ291bnRGb3JSZW9wdGltaXphdGlv
bigpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihj
b2RlQmxvY2spOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIE9TUiBlbnRyeSBmYWlsZWQuIE9oIG5vISBUaGlzIGltcGxpZXMgdGhhdCB3ZSBu
ZWVkIHRvIHJldHJ5LiBXZSByZXRyeQorICAgICAgICAvLyB3aXRob3V0IGV4cG9uZW50aWFsIGJh
Y2tvZmYgYW5kIHdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGVudHJ5IGNvZGUgYmxvY2suCisgICAg
ICAgIGppdENvZGUtPm9zckVudHJ5QmxvY2suY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGpp
dENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxl
ZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgY29tcGlsYXRpb24gZmFpbGVkIGFuZCB3
ZSBhbHJlYWR5IHNldCB0aGUgdGhyZXNob2xkcy4KKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywg
IiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1l
bnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoZSBmaXJzdCBvcmRl
ciBvZiBidXNpbmVzcyBpcyB0byB0cmlnZ2VyIGEgZm9yLWVudHJ5IGNvbXBpbGUuCisgICAgT3Bl
cmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKyAgICBqaXRDb2RlLT5yZWNvbnN0cnVj
dCgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBz
dHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9y
RW50cnlSZXN1bHQgPSBERkc6OmNvbXBpbGUoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAor
ICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjcmVhdGUoKSwKKyAgICAgICAgdm0uZW5zdXJlV29ya2xpc3QoKSk7Cisg
ICAgCisgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGEgcmVwbGFjZW1lbnQgY29t
cGlsZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8gdHJpZ2dlciBpdCBpZiB3
ZSBkb24ndCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhpcyBpcyBraW5kIG9mIHdlaXJkIGJlY2F1c2Ug
d2UgbWlnaHQKKyAgICAvLyBoYXZlIGp1c3QgZmluaXNoZWQgYW4gRlRMIGNvbXBpbGUgYW5kIHRo
YXQgY29tcGlsZSBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLgorICAgIC8vIEJ1dCB0aGlzIHNl
ZW1zIHVuY29tbW9uIGVub3VnaCB0aGF0IHdlIHNvcnQgb2YgZG9uJ3QgY2FyZS4gSXQncyBjZXJ0
YWlubHkgc291bmQKKyAgICAvLyB0byBmaXJlIG9mZiBhbm90aGVyIGNvbXBpbGUgcmlnaHQgbm93
IHNvIGxvbmcgYXMgd2UncmUgbm90IGFscmVhZHkgY29tcGlsaW5nIGFuZAorICAgIC8vIHdlIGRv
bid0IGFscmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuIE5vdGUsIHdlIGRvbid0
IGRvIHRoaXMgZm9yCisgICAgLy8gb2J2aW91c2x5IGJhZCBjYXNlcyBsaWtlIGdsb2JhbCBjb2Rl
LCB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgYSBzbGltIGNoYW5jZQorICAgIC8vIG9mIHRo
aXMgY29kZSBiZWluZyBpbnZva2VkIGV2ZXIgYWdhaW4uCisgICAgQ29tcGlsYXRpb25LZXkga2V5
Rm9yUmVwbGFjZW1lbnQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSk7Cisg
ICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBHbG9iYWxDb2RlCisgICAgICAgICYmICFj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKKyAgICAgICAgJiYgKCF2bS53b3Jr
bGlzdC5nZXQoKQorICAgICAgICAgICAgfHwgdm0ud29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUo
a2V5Rm9yUmVwbGFjZW1lbnQpICE9IFdvcmtsaXN0OjpOb3RLbm93bikpIHsKKyAgICAgICAgY29t
cGlsZSgKKyAgICAgICAgICAgIGV4ZWMsIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQo
KSwgRlRMTW9kZSwgVUlOVF9NQVgsCisgICAgICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y3JlYXRlKCksIHZtLmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0KKyAgICAK
KyAgICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRy
eSBjb21waWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAgLy8gZW50
cnkgd2lsbCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVh
ciB3aGF0IHdlIHNob3VsZCBkby4KKyAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVy
IGEgd2hpbGUgaWYgdGhhdCBoYXBwZW5zLgorICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBh
cmVPU1JFbnRyeSgKKyAgICAgICAgZXhlYywgaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSwg
Ynl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgIGlmIChhZGRyZXNzKQorICAgICAgICBq
aXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIGppdENv
ZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICByZXR1cm4gYWRkcmVzczsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiwxMSBAQCB2
b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAKIHZvaWQgREZHX09QRVJB
VElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKikgV1RGX0lOVEVSTkFMOwog
CisjaWYgRU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5v
dyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJP
U1JFbnRyeU5vdyhFeGVjU3RhdGUqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9
IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3
VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5
ICs0NiwxMSBAQAogI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdT
U0FDb252ZXJzaW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgpAQCAtNTcs
NyArNTksNiBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiAjaWYgRU5BQkxFKEZU
TF9KSVQpCi0jaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRlRMQ29tcGls
ZS5oIgogI2luY2x1ZGUgIkZUTEZhaWwuaCIKICNpbmNsdWRlICJGVExMaW5rLmgiCkBAIC04MSwx
MyArODIsMTIgQEAgc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncgogCiBQ
bGFuOjpQbGFuKAogICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIENv
bXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
dW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKICAgICA6
IHZtKCpwYXNzZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBjb2RlQmxvY2socGFzc2VkQ29kZUJs
b2NrKQogICAgICwgbW9kZShtb2RlKQogICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAsIG51bVZhcnNXaXRoVmFsdWVzKG51bVZhcnNXaXRoVmFs
dWVzKQotICAgICwgbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwg
bnVtVmFyc1dpdGhWYWx1ZXMpCisgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1
ZXMpCiAgICAgLCBjb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlciA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgp
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0
KCkpLCBQcm9maWxlcjo6REZHKSkgOiAwKQogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrLmdl
dCgpKQogICAgICwgd2Vha1JlZmVyZW5jZXMoY29kZUJsb2NrLmdldCgpKQpAQCAtMTY1LDYgKzE2
NSwxNiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgaWYg
KHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgCisgICAg
aWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
cGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihkZmcpOworICAgICAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgICAgICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigq
dGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICB2YWxpZGF0ZShkZmcpOworICAg
IH0KKyAgICAKICAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJm
b3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CkBA
IC0yMDYsMTAgKzIxNiwxOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyCiAgICAgICAgIGRmZy5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkoZGZnKTsK
ICAgICB9CiAKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIERGR01vZGU6IHsKKyAgICAg
ICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRmZyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAKKyAgICBjYXNlIEZUTE1vZGU6CisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6
IHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVudGFs
RlRMKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQot
ICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgeworICAgICAgICBpZiAoIUZUTDo6Y2Fu
Q29tcGlsZShkZmcpKSB7CisgICAgICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFp
bGVkRmluYWxpemVyKCp0aGlzKSk7CisgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1Mb29wUHJlSGVhZGVyQ3JlYXRpb24oZGZnKTsKQEAgLTI0NCwxMCAr
MjYzLDE2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAg
ICAgRlRMOjpjb21waWxlKHN0YXRlKTsKICAgICAgICAgRlRMOjpsaW5rKHN0YXRlKTsKICAgICAg
ICAgcmV0dXJuIEZUTFBhdGg7Ci0gICAgfQogI2Vsc2UKLSAgICBSRUxFQVNFX0FTU0VSVCghT3B0
aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAg
ICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBwZXJmb3JtQ1BTUmV0
aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtRENFKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3Mg
TG9uZ0xpdmVkU3RhdGU7CiBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxQbGFuPiB7CiAgICAgUGxhbigKICAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+LCBDb21w
aWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICAgICAgdW5z
aWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVl
PiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsKICAgICAKICAgICB2b2lkIGNvbXBp
bGVJblRocmVhZChMb25nTGl2ZWRTdGF0ZSYpOwpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3QgUGxh
biA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrOwogICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleDsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVl
czsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwogCiAgICAgUmVmUHRy
PFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3
ICs0ODQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgog
ICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgotICAg
ICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1
cm46CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjogewogICAgICAgICAgICAg
Ly8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29t
cGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGlj
aCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtNTUxLDYgKzU1NCwxMCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVucmVh
Y2hhYmxlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgLy8gVGhp
cyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24uCisgICAg
ICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAogICAgICAgICAvLyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0
IGRvIGFueXRoaW5nLgogICAgICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgICAgICBjYXNlIENv
dW50RXhlY3V0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDEwIEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFN0cmlu
Z0Zyb21DaGFyQ29kZToKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBVbnJlYWNo
YWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVy
VXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tU
aWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4MzUsNiArNDgzNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgR2V0
QXJndW1lbnQ6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIENoZWNr
VGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICBjYXNlIENo
ZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDY4MSwxMCArNDY4MSw2NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOiB7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRp
ZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2Vy
VGllclVwTm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjogeworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9w
dGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJV
cENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbih0cmlnZ2VyVGll
clVwTm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjogeworICAgICAg
ICBBU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgCisg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9
IHRlbXAuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVk
LAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wKCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRk
cmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVyVXBDb3VudGVyLm1fY291bnRlcikpOworICAgICAg
ICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24oCisgICAgICAgICAgICB0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIsIG5v
ZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbnRFbnRlciA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5qdW1wKHRlbXBHUFIp
OworICAgICAgICBkb250RW50ZXIubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHRlbXBHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja1RpZXJVcEFu
ZE9TUkVudGVyOgorICAgICAgICBGSVhNRTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAg
IGNhc2UgTGFzdE5vZGVUeXBlOgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAg
ICBjYXNlIEdldEFyZ3VtZW50OgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGll
cy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBUaWVyVXBDaGVja0luamVjdGlvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKK3B1YmxpYzoKKyAgICBUaWVyVXBDaGVja0luamVjdGlvblBoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgInRpZXItdXAgY2hlY2sgaW5qZWN0aW9uIikKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUg
PT0gREZHTW9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUV4cGVyaW1l
bnRhbEZUTCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisgICAgICAgIEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpjYW5Db21waWxl
KG1fZ3JhcGgpOworICAgICAgICBpZiAobGV2ZWwgPT0gQ2Fubm90Q29tcGlsZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9uYXR1cmFsTG9v
cHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworCisgICAgICAgIEluc2VydGlvblNldCBp
bnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaGVhZGVyT2YoYmxvY2spKSB7Cisg
ICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYmxvY2stPmF0KDApLT5jb2Rl
T3JpZ2luOworICAgICAgICAgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlOworICAgICAgICAgICAg
ICAgIGlmIChsZXZlbCA9PSBGVEw6OkNhbkNvbXBpbGVBbmRPU1JFbnRlciAmJiAhY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gQ2hlY2tU
aWVyVXBBbmRPU1JFbnRlcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG5vZGVUeXBlID0gQ2hlY2tUaWVyVXBJbkxvb3A7CisgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIG5vZGVUeXBlLCBjb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkt
Pm9wKCkgPT0gUmV0dXJuKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBTcGVjTm9uZSwgQ2hl
Y2tUaWVyVXBBdFJldHVybiwgbm9kZS0+bGFzdCgpLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVO
QUJMRShGVExfSklUKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorfTsK
KworYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgVGllci11cCBDaGVjayBJbmplY3Rp
b24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZT4oZ3Jh
cGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlX2gK
KyNkZWZpbmUgREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0
aGUgdGhpcyBjb2RlIGJsb2NrIGNvdWxkIGJlIHJlY29tcGlsZWQgd2l0aCB0aGUgRlRMLAorLy8g
YW5kIGlmIHNvLCBpdCBpbmplY3RzIHRpZXItdXAgY2hlY2tzLgorCitib29sIHBlcmZvcm1UaWVy
VXBDaGVja0luamVjdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2soCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKKyAg
ICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0NvZGVCbG9jaykKK3sKK30KKworVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6On5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsg
fQorCitQYXNzUmVmUHRyPFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJs
b2NrPiBkZmdDb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayhkZmdDb2RlQmxvY2spKTsKK30KKwordm9pZCBUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5j
aHJvbm91c2x5KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6
aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxv
Y2ssCisgICAgICAgICAgICAiKSBkaWQgYmVjb21lIHJlYWR5LlxuIik7CisgICAgfQorICAgIAor
ICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNs
b3dQYXRoQ29uY3VycmVudGx5KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7Cit9CisK
K3ZvaWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29t
cGxldGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
IChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1
bHQsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkKKyAgICAgICAgY29kZUJsb2NrLT5pbnN0YWxsKCk7CisgICAgCisgICAgbV9kZmdD
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2Vk
T25Db21waWxhdGlvblJlc3VsdCgKKyAgICAgICAgcmVzdWx0KTsKK30KKworfSB9IC8vIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUg
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKwor
cHVibGljOgorICAgIHZpcnR1YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gY3JlYXRlKAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJv
bm91c2x5KENvZGVCbG9jayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBs
ZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soCisgICAgUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGRmZ0NvZGVCbG9jaykKKyAgICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0NvZGVCbG9jaykK
K3sKK30KKworVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKQoreworfQorCitQYXNz
UmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+CitUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoCisgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJs
b2NrKSk7Cit9CisKK3ZvaWQgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjazo6Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KAorICAgIENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAiKSBk
aWQgYmVjb21lIHJlYWR5LlxuIik7CisgICAgfQorICAgIAorICAgIG1fZGZnQ29kZUJsb2NrLT5q
aXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KAor
ICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7Cit9CisKK3ZvaWQgVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAq
bV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAiKSByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7
CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQor
ICAgICAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRW50cnlCbG9jayA9
IGNvZGVCbG9jazsKKyAgICAKKyAgICAvLyBGSVhNRTogaWYgd2UgZmFpbGVkLCB3ZSBtaWdodCB3
YW50IHRvIGp1c3QgdHVybiBvZmYgT1NSIGVudHJ5IHJhdGhlciB0aGFuCisgICAgLy8gdG90YWxs
eSB0dXJuaW5nIG9mZiB0aWVyLXVwLgorICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
ZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisg
ICAgICAgIHJlc3VsdCk7Cit9CisKK30gfSAvLyBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrX2gKKyNkZWZpbmUgREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNjcmlw
dEV4ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVi
bGljOgorICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IGRmZ0NvZGVCbG9jayk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlk
QmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2RlQmxvY2s7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwor
I2VuZGlmIC8vIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2
aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFs
aXplR2xvYmFsV29ya2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7Ci0g
ICAgaWYgKCFlbmFibGVDb25jdXJyZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHB0
aHJlYWRfb25jZSgmaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUds
b2JhbFdvcmtsaXN0T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw5ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbmds
ZSBnbG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhlIHJp
Z2h0IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBmdW5j
dGlvbgogLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8KLS8v
IFRoaXMgcmV0dXJucyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBkb2lu
ZyBjb25jdXJyZW50Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgp
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNp
bmcgbmFtZXNwYWNlIERGRzsKIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQor
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiB7CisgICAgLy8g
Tk9URTogSWYgd2UgZXZlciBoYXZlIHBoYW50b20gYXJndW1lbnRzLCB3ZSBjYW4gY29tcGlsZSB0
aGVtIGJ1dCB3ZSBjYW5ub3QKKyAgICAvLyBPU1IgZW50ZXIuCisgICAgCiAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3Rh
bnQ6CkBAIC04MSw2ICs4NCw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246
CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9L
LgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtOTAsMzkgKzk0
LDM5IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBp
bGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAg
ICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1
cm4gQ2FuQ29tcGlsZUFuZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQog
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnNwZWN1bGF0aW9uKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6U2FuZUNoYWluOgogICAgICAgICBjYXNlIEFycmF5OjpJbkJvdW5kczoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wYXJlRXE6CkBAIC0xMzMsNyArMTM3
LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5u
b3RDb21waWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21wYXJlTGVzc0Vx
OgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CkBAIC0xNDIsNyArMTQ2LDcgQEAgaW5saW5lIGJv
b2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
IChub2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAg
IGNhc2UgQnJhbmNoOgogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKQEAgLTE1Miw3ICsxNTYsNyBAQCBpbmxpbmUgYm9vbCBj
YW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTd2l0Y2g6CkBAIC0xNjEsMTggKzE2NSwyMyBAQCBpbmxpbmUg
Ym9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFu
ZGxlIGFueXRoaW5nIGVsc2UuCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IENhbm5vdENvbXBpbGU7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDYW5D
b21waWxlQW5kT1NSRW50ZXI7CiB9CiAKLWJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCitD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiB7CisgICAgaWYgKGdyYXBo
Lm1fY29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgcmV0dXJu
IENhbm5vdENvbXBpbGU7CisgICAgCisgICAgQ2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IENhbkNv
bXBpbGVBbmRPU1JFbnRlcjsKKyAgICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkBA
IC0yMTAsMjUgKzIxOSwzMiBAQCBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRlRMIHJlamVjdGluZyBub2RlIGJlY2F1c2Ugb2Yg
YmFkIHVzZSBraW5kOiAiLCBlZGdlLnVzZUtpbmQoKSwgIiBpbiBub2RlOlxuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2Rl
KTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFj
YW5Db21waWxlKG5vZGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhbkNvbXBpbGUobm9kZSkp
IHsKKyAgICAgICAgICAgIGNhc2UgQ2Fubm90Q29tcGlsZTogCiAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJGVEwgcmVqZWN0aW5nIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAgICAgZ3JhcGgu
ZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2Fu
bm90Q29tcGlsZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQ2FuQ29tcGls
ZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDYW5Db21waWxlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlQW5k
T1NSRW50ZXI6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgaWYgd2UgY2FuIGNvbXBpbGUgYW55
dGhpbmcgYWZ0ZXIgYSBmb3JjZS1leGl0LgogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
Rm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1ib29sIGNhbkNvbXBpbGUoREZH
OjpHcmFwaCYpOworZW51bSBDYXBhYmlsaXR5TGV2ZWwgeworICAgIENhbm5vdENvbXBpbGUsCisg
ICAgQ2FuQ29tcGlsZSwKKyAgICBDYW5Db21waWxlQW5kT1NSRW50ZXIKK307CisKK0NhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKERGRzo6R3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Rm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JF
bnRyeUpJVENvZGU6On5Gb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JFbnRyeUpJ
VENvZGUqIEZvck9TUkVudHJ5SklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIHJldHVy
biB0aGlzOworfQorCit2b2lkIEZvck9TUkVudHJ5SklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5QnVm
ZmVyKFZNJiB2bSwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKQoreworICAgIG1fZW50cnlC
dWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1DYWxsZWVSZWdpc3RlcnMgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisjZGVmaW5lIEZUTEZv
ck9TUkVudHJ5SklUQ29kZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwgaGFzIGEgbnVt
YmVyIG9mIHF1aXJrczoKKy8vCisvLyAtIE9TUiBlbnRyeSBvbmx5IGhhcHBlbnMgdGhyb3VnaCBz
cGVjaWFsIE9TUiBlbnRyeSBjb21waWxhdGlvbnMuIFRoZXkgaGF2ZSB0aGVpcgorLy8gICBvd24g
Q29kZUJsb2NrIGFuZCB0aGVpciBvd24gSklUQ29kZS4KKy8vCisvLyAtIFdlIG9ubHkgT1NSIGVu
dGVyIGluIGxvb3AgaGVhZGVycyB0aGF0IGhhdmUgYSBudWxsIGlubGluZSBjYWxsIGZyYW1lLgor
Ly8KKy8vIC0gRWFjaCBPU1IgZW50cnkgY29tcGlsYXRpb24gYWxsb3dzIGVudHJ5IHRocm91Z2gg
b25seSBvbmUgYnl0ZWNvZGUgaW5kZXguCisKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZSA6IHB1
YmxpYyBGVEw6OkpJVENvZGUgeworcHVibGljOgorICAgIEZvck9TUkVudHJ5SklUQ29kZSgpOwor
ICAgIH5Gb3JPU1JFbnRyeUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFbnRy
eUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1
ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9CisgICAg
CisgICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJ
bmRleCA9IHZhbHVlOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIAorICAgIHZvaWQgY291bnRFbnRyeUZhaWx1cmUo
KTsKKyAgICB1bnNpZ25lZCBlbnRyeUZhaWx1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50
cnlGYWlsdXJlQ291bnQ7IH0KKyAgICAKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9T
UkVudHJ5KCk7CisgICAgCitwcml2YXRlOgorICAgIFNjcmF0Y2hCdWZmZXIqIG1fZW50cnlCdWZm
ZXI7IC8vIE9ubHkgZm9yIE9TUiBlbnRyeSBjb2RlIGJsb2Nrcy4KKyAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9lbnRyeUZhaWx1cmVDb3VudDsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGTFRfSklUKQorCisj
ZW5kaWYgLy8gRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBA
IHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCopOwog
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2Fs
bGVlUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsg
cmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1
bmtzKENvZGVSZWYpOwogICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4pOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoQ29kZVJlZiBlbnRyeXBvaW50
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOSBAQCBib29sIEpJVEZp
bmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0
aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2Rl
QmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVsc2Ug
dGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAgICAK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRM
aW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIGlmIChtX2FyaXR5Q2hlY2suaXNTZXQoKSkKKyAg
ICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9m
KG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKICAgICAgICAg
RklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqbV9lbnRyeXBvaW50TGlua0J1ZmZlciwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNzkgKzU1LDExNCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgIC8vIExM
Vk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBhcyBuZWVkZWQuCiAgICAgY29kZUJs
b2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKICAgICAKLSAgICAvLyBDcmVhdGUgdGhlIGVu
dHJ5cG9pbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0b3RhbCBrbHVkZ2UgLSBMTFZNIHNo
b3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9uLgorICAgIC8vIENyZWF0ZSB0aGUg
ZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZm
ZXJlbnRseQorICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRy
eSBvciBub3QuCisgICAgLy8gRklYTUU6IEV4Y2VwdCBmb3IgT1NSIGVudHJ5LCB0aGlzIGlzIGEg
dG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyCisgICAgLy8gY2FsbGluZyBj
b252ZW50aW9uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTM2MjEKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZzdGF0ZS5ncmFwaC5tX3ZtLCBjb2RlQmxv
Y2spOwogICAgIAotICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgIE93blB0cjxMaW5rQnVmZmVy
PiBsaW5rQnVmZmVyOworICAgIENDYWxsSGVscGVyczo6TGFiZWwgYXJpdHlDaGVjazsKKyAgICBz
d2l0Y2ggKHN0YXRlLmdyYXBoLm1fcGxhbi5tb2RlKSB7CisgICAgY2FzZSBGVExNb2RlOiB7Cisg
ICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOwogICAgIAotICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5
IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJyZW50bHkgb25seSBjb21waWxlIGZ1bmN0
aW9ucy4KKyAgICAgICAgLy8gVGhpcyBwYXJ0IGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBmdW5jdGlv
bnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUgZnVuY3Rpb25zLgogICAgICAgICAKLSAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAg
IENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKICAgICAg
ICAgCi0gICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxh
YmxlIGluIHRoZSBKU1N0YWNrLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKLSAgICBqaXQuYWRkUHRyKAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6
ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjpyZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN0YWNrQ2hlY2sgPSBqaXQuYnJh
bmNoUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LAotICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFic29sdXRlQWRkcmVzcyhzdGF0ZS5ncmFwaC5tX3ZtLmludGVycHJldGVyLT5zdGFjaygp
LmFkZHJlc3NPZkVuZCgpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgCi0gICAg
aml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1
bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNr
OjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgaml0LnJldCgpOwotICAgICAgICAKLSAgICBzdGFja0NoZWNrLmxpbmsoJmpp
dCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucG9rZSgKLSAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tG
cmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwotICAgICAgICAKLSAgICBqaXQuc3Rv
cmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCi0gICAgICAgIENDYWxsSGVscGVyczo6
dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbFN0YWNrQ2hlY2sgPSBqaXQuY2FsbCgp
OwotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhj
ZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKLSAgICAvLyBwYXJ0IG9mIGEgYmlnZ2Vy
IHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KLSAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCi0gICAgaml0
Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOwotICAgICAgICAKLSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVs
IGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICBjb21waWxlRW50cnkoaml0KTsKLSAgICBq
aXQubG9hZDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksCi0gICAgICAgIEdQUklu
Zm86OnJlZ1QxKTsKLSAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWJv
dmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAubGlua1RvKGZyb21B
cml0eUNoZWNrLCAmaml0KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wb2tlKAotICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgT0JKRUNUX09GRlNFVE9GKHN0
cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAgaml0
LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6
TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAotICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNh
bGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRo
IGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCi0gICAgLy8gcGFydCBvZiBhIGJp
Z2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgotICAg
IGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlu
a1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFy
aXR5Rml4dXAgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsKLSAg
ICAgICAgCi0gICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcg
TGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uTXVzdFN1Y2NlZWQpKTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxTdGFja0NoZWNrLCBj
dGlfc3RhY2tfY2hlY2spOwotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hlY2ssIGNv
ZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDog
Y3RpX29wX2NhbGxfYXJpdHlDaGVjayk7Ci0gICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlG
aXh1cCwgRnVuY3Rpb25QdHIoKHN0YXRlLmdyYXBoLm1fdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVw
KSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgLy8gUGxhbnQgYSBjaGVj
ayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgorICAg
ICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
MjkxCisgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVy
KSksCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVn
VDEpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3RhY2tDaGVjayA9IGppdC5icmFuY2hQ
dHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV92bS5pbnRlcnByZXRlci0+c3Rh
Y2soKS5hZGRyZXNzT2ZFbmQoKSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKKyAg
ICAgICAgCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICBq
aXQubW92ZSgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLAorICAgICAgICAgICAg
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJ
bmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgCisgICAgICAgIHN0YWNr
Q2hlY2subGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnBva2Uo
CisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIE9C
SkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2
b2lkKikpOworICAgICAgICAKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVj
b2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsKKyAgICAgICAg
Ly8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRpb24g
aGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgICAgICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHBy
b2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgorICAgICAg
ICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7CisgICAgICAgIAorICAgICAgICBhcml0eUNoZWNr
ID0gaml0LmxhYmVsKCk7CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgICAgICBqaXQu
bG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLAorICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAg
ICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Y2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVu
Y29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkp
OworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgp
OworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRo
IGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCisgICAgICAgIC8vIHBhcnQgb2Yg
YSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25z
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIyCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZv
OjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1bXAo
ZnJvbUFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRy
KG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxTdGFj
a0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3Rf
YXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOworICAgICAgICBsaW5rQnVmZmVy
LT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigoc3RhdGUuZ3JhcGgubV92bS5nZXRD
VElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7
CisgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJhaWdodCBmcm9tIERGRyBjb2RlLCBhZnRl
ciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQorICAgICAgICAvLyB2YWx1ZXMgaW50byB0aGUg
c2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGdvb2QgdG8gZ28gLSBhdCB0aGlz
CisgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9uZSB0aGUgc3RhY2sgY2hlY2suIEJhc2lj
YWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKKyAgICAgICAgLy8gY2FsbCB0byB0aGUgTExW
TS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgaml0LnNldHVwQVJndW1lbnRzRXhlY1N0YXRlKCk7
CisgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksCisg
ICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LnJldCgpOworICAgICAgICAKKyAg
ICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKAorICAgICAgICAgICAg
c3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNj
ZWVkKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogICAgIAogICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVm
ZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKICAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxp
emVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0Myw2ICsyNDMsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdl
dEFyZ3VtZW50OgogICAgICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50KCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAg
IGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICBjb21waWxlR2V0TG9jYWwoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTA2LDYgKzUwOSwxMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCkKKyAgICB7
CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHN0YXRpY19j
YXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0
bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCkpICsgb3BlcmFuZCkpKTsKKyAgICB9CisgICAg
CiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKICAgICAgICAgLy8gR2V0TG9jYWxz
IGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NSRW50cnkuaCIKKworI2luY2x1ZGUgIkNh
bGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUu
aCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKworI2lmIEVOQUJMRShGVExf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQqIHByZXBhcmVP
U1JFbnRyeSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBD
b2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVu
c2lnbmVkIHN0cmVhbUluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAg
REZHOjpKSVRDb2RlKiBkZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwor
ICAgIEZvck9TUkVudHJ5SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlDb2RlQmxvY2stPmppdENv
ZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAKKyAgICBkYXRhTG9nKAorICAgICAgICAiRlRM
IE9TUiBmcm9tICIsICpkZmdDb2RlQmxvY2ssICIgdG8gIiwgKmVudHJ5Q29kZUJsb2NrLCAiIGF0
IGJjIyIsCisgICAgICAgIGJ5dGVjb2RlSW5kZXgsICIuXG4iKTsKKyAgICAKKyAgICBpZiAoYnl0
ZWNvZGVJbmRleCAhPSBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWls
ZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2Rl
SW5kZXgsICI7IG91cnMgaXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpTVmFsdWU+IHZh
bHVlczsKKyAgICBkZmdDb2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgZGZnQ29kZUJs
b2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsKKyAg
ICAKKyAgICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBh
cmd1bWVudC0tOykgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAgICAgIGV4ZWNb
YXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpXS5qc1ZhbHVlKCkgPT0gdmFsdWVzLmFyZ3VtZW50
KGFyZ3VtZW50KSk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlcy5udW1i
ZXJPZkxvY2FscygpID09IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgCisg
ICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+
KAorICAgICAgICBlbnRyeUNvZGUtPmVudHJ5QnVmZmVyKCktPmRhdGEoKSk7CisgICAgCisgICAg
Zm9yIChpbnQgbG9jYWwgPSB2YWx1ZS5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykKKyAgICAg
ICAgc2NyYXRjaFtsb2NhbF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWVzLmxvY2FsKGxvY2FsKSk7
CisgICAgCisgICAgaWYgKCF2bS5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KAorICAgICAgICAg
ICAgJmV4ZWMtPnJlZ2lzdGVycygpW2VudHJ5QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkp
IHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICBPU1IgZmFpbGVkIGJjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBleGVjLT5zZXRDb2RlQmxvY2soZW50cnlD
b2RlQmxvY2spOworICAgIAorICAgIHZvaWQgKnJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0Zv
ckNhbGwoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgIGRhdGFMb2coIiAgICBFbnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5nIHRvIGFk
ZHJlc3MiLCBSYXdQb2ludGVyKHJlc3VsdCksICJcbiIpOworICAgIAorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkVudHJ5X2gKKyNkZWZpbmUgRlRM
T1NSRW50cnlfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWNT
dGF0ZTsKKworbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeSgKKyAgICBF
eGVjU3RhdGUqLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKKyAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisjZW5kaWYgLy8gRlRMT1NSRW50cnlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisj
aW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgorI2lu
Y2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKQEAgLTQwLDkgKzQyLDIzIEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgLCBjb250ZXh0KExMVk1Db250ZXh0Q3JlYXRlKCkpCiAgICAgLCBtb2R1bGUoMCkKICAg
ICAsIGZ1bmN0aW9uKDApCi0gICAgLCBqaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpKQog
ICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKIHsKKyAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5t
b2RlKSB7CisgICAgY2FzZSBGVExNb2RlOgorICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3
IEpJVENvZGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2Rl
OgorICAgICAgICBSZWZQdHI8Rm9yT1NSRW50cnlKSVRDb2RlPiBjb2RlID0gYWRvcHRSZWYobmV3
IEZvck9TUkVudHJ5SklUQ29kZSgpKTsKKyAgICAgICAgY29kZS0+aW5pdGlhbGl6ZUVudHJ5QnVm
ZmVyKGdyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZVJlZ2lzdGVycyk7CisgICAgICAg
IGNvZGUtPnNldEJ5dGVjb2RlSW5kZXgoZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIGppdENvZGUgPSBjb2RlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCiAgICAgZmluYWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3Bs
YW4pOwogICAgIGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrU2V0LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworCitDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCgpIHsgfQorCitDb2RlQmxv
Y2tTZXQ6On5Db2RlQmxvY2tTZXQoKQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgICAgICAoKml0ZXIpLT5kZXJlZigpOworfQorCit2b2lkIENvZGVCbG9ja1NldDo6YWRkKFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgYm9vbCBpc05ld0VudHJ5ID0g
bV9zZXQuYWRkKGNvZGVCbG9jay5sZWFrUmVmKCkpLmlzTmV3RW50cnk7CisgICAgQVNTRVJUX1VO
VVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmNs
ZWFyTWFya3MoKQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1f
c2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4
ZWN1dGluZyA9IGZhbHNlOworICAgICAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNC
ZWVuQ2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRl
VW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKQoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBm
aXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tzIHRoYXQgYXJlIHVubWFya2VkIG1heQorICAgIC8v
IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBleGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQg
aXMgb3duZWQgYnkKKyAgICAvLyB0aGUgR0MgbWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkg
Y29kZSBibG9jayB0aGF0IGlzIGFsc28gb3duZWQgYnkKKyAgICAvLyB0aGUgR0MuCisgICAgVmVj
dG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBtX3NldC5z
aXplKCksICIuLi5cbiIpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAq
aXRlcjsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVj
dXRpbmcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmRlcmVmKCk7CisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZW1v
dmluZyAiLCB0b1JlbW92ZS5zaXplKCksICIgYmxvY2tzLlxuIik7CisgICAgICAgIGlmICh0b1Jl
bW92ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gdG9SZW1vdmUuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV9zZXQucmVtb3ZlKHRv
UmVtb3ZlW2ldKTsKKyAgICAgICAgdG9SZW1vdmUucmVzaXplKDApOworICAgIH0KK30KKwordm9p
ZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fc2V0LnNpemUoKSwg
IiBjb2RlIGJsb2Nrcy5cbiIpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgIGlmICghY29kZUJsb2Nr
LT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvZGVC
bG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrU2V0X2gKKyNkZWZpbmUg
Q29kZUJsb2NrU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBTbG90VmlzaXRvcjsKKworLy8gQ29kZUJsb2NrU2V0IHRyYWNrcyBhbGwgQ29kZUJsb2Nrcy4g
RXZlcnkgQ29kZUJsb2NrIHN0YXJ0cyBvdXQgd2l0aCBvbmUKKy8vIHJlZmVyZW5jZSBjb21pbmcg
aW4gZnJvbSBHQy4gVGhlIEdDIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIENvZGVCbG9ja3MK
Ky8vIG9uY2UgdGhleSBoYXNPbmVSZWYoKSBhbmQgbm9ib2R5IGlzIHJ1bm5pbmcgY29kZSBmcm9t
IHRoYXQgQ29kZUJsb2NrLgorCitjbGFzcyBDb2RlQmxvY2tTZXQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENvZGVCbG9ja1NldCk7CisKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tTZXQoKTsK
KyAgICB+Q29kZUJsb2NrU2V0KCk7CisgICAgCisgICAgLy8gQWRkIGEgQ29kZUJsb2NrLiBUaGlz
IGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCisgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRz
IGFzc29jaWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7
CisgICAgCisgICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhh
dCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHCisgICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmlu
ZWQgaW4gQ29kZUJsb2NrLmguCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9j
ayk7CisgICAgCisgICAgLy8gRGVsZXRlIGFsbCBjb2RlIGJsb2NrcyB0aGF0IGFyZSBvbmx5IHJl
ZmVyZW5jZWQgYnkgdGhpcyBzZXQgKGkuZS4gb3duZWQKKyAgICAvLyBieSB0aGlzIHNldCksIGFu
ZCB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2VkLgorICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRV
bnJlZmVyZW5jZWQoKTsKKyAgICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tz
LiBUaGUgQ29kZUJsb2NrIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YKKyAgICAvLyBtYXlCZUV4ZWN1
dGluZy4KKyAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6Cisg
ICAgLy8gVGhpcyBpcyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3ZSBu
ZWVkIHRvIGJlIGFibGUgdG8gZmluZAorICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVycy4g
SSBjb3VsZCBoYXZlIHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcworICAgIC8v
IGFuZCBhbGwsIGJ1dCB0aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgorICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKiA+IG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
b2RlQmxvY2tTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDkgKzI3LDkgQEAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29waWVk
U3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdD
b2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTE0MCwxMCArMTQwLDkgQEAgcHJpdmF0ZToKIH07
CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKLSAgICB2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBk
ZmdDb2RlQmxvY2tzKQorICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5l
U2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKLSAgICBD
b21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hv
b2soCi0gICAgICAgIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgQ29tcG9z
aXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hvb2soaml0
U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKICAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5k
LCBtYXJrSG9vayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKK2NsYXNz
IENvZGVCbG9ja1NldDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNs
YXNzIEpTQ2VsbDsKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCk7CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVu
ZCwgSklUU3R1YlJvdXRpbmVTZXQmKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kLCBKSVRTdHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICB2b2lkIGFkZCh2
b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYp
OwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lv
biAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
REZHQ29kZUJsb2Nrcy5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0KLURGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MoKSB7
IH0KLQotREZHQ29kZUJsb2Nrczo6fkRGR0NvZGVCbG9ja3MoKQotewotICAgIFZlY3RvcjxSZWZQ
dHI8Q29kZUJsb2NrPiwgMTY+IHRvUmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNldDxDb2Rl
QmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aXNKZXR0aXNvbmVkKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCpp
dGVyKSk7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBjb2RlQmxvY2tQdHIpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBk
ZWxldGUgaXQgbm93OyB3ZSBqdXN0IHdhbnQgaXRzIHBvaW50ZXIuCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjb2RlQmxvY2tQdHIubGVha1JlZigpOwotICAgIAotICAgIEFTU0VSVChjb2Rl
QmxvY2spOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKLSAgICAKLSAgICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVu
IGpldHRpc29uZWQuCi0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmlzSmV0dGlzb25lZCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGlzIGJsb2NrIGFs
cmVhZHkuCi0gICAgQVNTRVJUKG1fc2V0LmZpbmQoY29kZUJsb2NrKSAhPSBtX3NldC5lbmQoKSk7
Ci0gICAgCi0gICAgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29u
ZWQgPSB0cnVlOwotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQotewotICAg
IGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7
IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICAoKml0ZXIpLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOwotICAgICAgICAoKml0ZXIp
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT52aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBm
YWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0
aXNvbmVkQ29kZUJsb2NrcygpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+LCAxNj4g
dG9SZW1vdmU7Ci0gICAgCi0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBp
dGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgJiYg
ISgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAg
ICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQotfQotCi12b2lk
IERGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgdmlzaXRv
cikKLXsKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nl
dC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgq
aXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAgICAg
ICAgKCppdGVyKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgfQotfQotCi0jZWxzZSAv
LyBFTkFCTEUoREZHX0pJVCkKLQotdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzUmVm
UHRyPENvZGVCbG9jaz4pCi17Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZH
Q29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RG
R0NvZGVCbG9ja3MuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvREZHQ29kZUJsb2Nrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdD
b2RlQmxvY2tzX2gKLSNkZWZpbmUgREZHQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFNsb3RWaXNpdG9yOwotCi0vLyBERkdDb2RlQmxvY2tzIG5vdGlmaWVzIHRoZSBnYXJiYWdlIGNv
bGxlY3RvciBhYm91dCBvcHRpbWl6ZWQgY29kZSBibG9ja3MgdGhhdAotLy8gaGF2ZSBkaWZmZXJl
bnQgbWFya2luZyBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhleSBhcmUg
b24gdGhlCi0vLyBzdGFjaywgYW5kIHRoYXQgbWF5IGJlIGpldHRpc29uZWQuIEpldHRpc29uaW5n
IGlzIHRoZSBwcm9jZXNzIG9mIGRpc2NhcmRpbmcKLS8vIGEgY29kZSBibG9jayBhZnRlciBhbGwg
Y2FsbHMgdG8gaXQgaGF2ZSBiZWVuIHVubGlua2VkLiBUaGlzIGNsYXNzIHRha2VzIHNwZWNpYWwK
LS8vIGNhcmUgdG8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgYXJlIHN0aWxsIGNhbGwgZnJhbWVzIHRo
YXQgYXJlIHVzaW5nIHRoZSBjb2RlCi0vLyBibG9jaywgdGhlbiBpdCBzaG91bGQgbm90IGJlIGlt
bWVkaWF0ZWx5IGRlbGV0ZWQsIGJ1dCByYXRoZXIsIGl0IHNob3VsZCBiZQotLy8gZGVsZXRlZCBv
bmNlIHdlIGtub3cgdGhhdCB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSByZWZlcmVuY2VzIHRvIGl0
IGZyb20gYW55Ci0vLyBjYWxsIGZyYW1lcy4gVGhpcyBjbGFzcyB0YWtlcyBpdHMgbmFtZSBmcm9t
IHRoZSBERkcgY29tcGlsZXI7IG9ubHkgY29kZSBibG9ja3MKLS8vIGNvbXBpbGVkIGJ5IHRoZSBE
RkcgbmVlZCBzcGVjaWFsIG1hcmtpbmcgYmVoYXZpb3IgaWYgdGhleSBhcmUgb24gdGhlIHN0YWNr
LCBhbmQKLS8vIG9ubHkgdGhvc2UgY29kZSBibG9ja3MgbWF5IGJlIGpldHRpc29uZWQuCi0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLWNsYXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgREZHQ29kZUJsb2NrcygpOwotICAgIH5ERkdD
b2RlQmxvY2tzKCk7Ci0gICAgCi0gICAgLy8gSW5mb3JtIHRoZSBjb2xsZWN0b3IgdGhhdCBhIGNv
ZGUgYmxvY2sgaGFzIGJlZW4gamV0dGlzb25lZCBmb3JtIGl0cwotICAgIC8vIGV4ZWN1dGFibGUg
YW5kIHNob3VsZCBvbmx5IGJlIGtlcHQgYWxpdmUgaWYgdGhlcmUgYXJlIGNhbGwgZnJhbWVzIHRo
YXQgdXNlCi0gICAgLy8gaXQuIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBlaXRoZXIgZnJvbSBh
IHJlY29tcGlsYXRpb24gdHJpZ2dlciwgb3IgZnJvbQotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwg
ZmluYWxpemVyIGFzc29jaWF0ZWQgd2l0aCBhIENvZGVCbG9jayB0aGF0IGhhZCB3ZWFrCi0gICAg
Ly8gcmVmZXJlbmNlcywgd2hlcmUgc29tZSBzdWJzZXQgb2YgdGhvc2UgcmVmZXJlbmNlcyB3ZXJl
IGRlYWQuCi0gICAgdm9pZCBqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwotICAgIAot
ICAgIC8vIENsZWFyIGFsbCBtYXJrIGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2RlIGJsb2Nr
cy4KLSAgICB2b2lkIGNsZWFyTWFya3MoKTsKLSAgICAKLSAgICAvLyBNYXJrIGEgcG9pbnRlciB0
aGF0IG1heSBiZSBhIENvZGVCbG9jayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcgY29k
ZQotICAgIC8vIGJsb2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGlubGluZSBpbiBDb2RlQmxvY2suaAot
ICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOwotICAgIAotICAgIC8vIERl
bGV0ZSBhbGwgamV0dGlzb25lZCBjb2RlIGJsb2NrcyB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2Vk
IChpLmUuIGFyZSBub3QgcmVmZXJlbmNlZAotICAgIC8vIGZyb20gY2FsbCBmcmFtZXMpLgotICAg
IHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAotICAgIC8v
IFRyYWNlIGFsbCBtYXJrZWQgY29kZSBibG9ja3MgKGkuZS4gYXJlIHJlZmVyZW5jZWQgZnJvbSBj
YWxsIGZyYW1lcykuIFRoZSBDb2RlQmxvY2sKLSAgICAvLyBpcyBmcmVlIHRvIG1ha2UgdXNlIG9m
IG1fZGZnRGF0YS0+aXNNYXJrZWQgYW5kIG1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkLgotICAgIHZv
aWQgdHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1f
c2V0OwotfTsKLSNlbHNlCi1jbGFzcyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIHZvaWQgamV0dGlzb24oUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+KTsKLSAgICB2b2lkIGNsZWFyTWFya3MoKSB7IH0KLSAgICB2b2lkIG1hcmsodm9pZCop
IHsgfQotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpIHsgfQot
ICAgIHZvaWQgdHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJikgeyB9Ci19OwotI2Vu
ZGlmCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDExICszNTQsNiBAQCBib29s
IEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiAgICAgcmV0dXJuIG1fcHJvdGVjdGVkVmFsdWVz
LnJlbW92ZShrLmFzQ2VsbCgpKTsKIH0KIAotdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9j
ayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQotewotICAgIG1fZGZnQ29kZUJsb2Nr
cy5qZXR0aXNvbihjb2RlQmxvY2spOwotfQotCiB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0Nl
bGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCiB7CiAgICAgaWYgKG1fYXJyYXlCdWZmZXJz
LmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CkBAIC00NTcsMTEgKzQ1MiwxMCBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cygpCiAgICAgfQogCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgc3RhY2tS
b290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKLSAgICBtX2Rm
Z0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7
CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlclN0YWNrUm9vdHMpOwotICAgICAgICBzdGFj
aygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAotICAgICAgICAgICAgc3RhY2tSb290cywgbV9q
aXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nrcyk7CisgICAgICAgIHN0YWNrKCkuZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoc3RhY2tSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1fY29kZUJs
b2Nrcyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC00ODUsMTIgKzQ3OSw2IEBA
IHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJs
ZXIgZW5hYmxlcih2aXNpdG9yKTsKIAotICAgICAgICBpZiAobV92bS0+Y29kZUJsb2Nrc0JlaW5n
Q29tcGlsZWQuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92bS0+Y29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgbV92bS0+Y29kZUJs
b2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgICAgICB9
Ci0KICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNp
dG9yKTsKIAogICAgICAgICB7CkBAIC01NTgsNyArNTQ2LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9v
dHMoKQogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcyk7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFj
ZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXMiKTsKLSAgICAgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBt
X2NvZGVCbG9ja3MudHJhY2VNYXJrZWQodmlzaXRvcik7CiAgICAgICAgICAgICBtX2ppdFN0dWJS
b3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQpAQCAtNjgzLDggKzY3MSw4IEBAIHZv
aWQgSGVhcDo6ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCkKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY3VycmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAg
ICAgfQogCi0gICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2RmZ0NvZGVC
bG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1fY29kZUJs
b2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5y
ZWZlcmVuY2VkKCk7CiB9CiAKIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KQpAQCAtNzAxLDcgKzY4OSw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENv
ZGUoKQogICAgICAgICBtX2NvbXBpbGVkQ29kZS5yZW1vdmUoY3VycmVudCk7CiAgICAgfQogCi0g
ICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsK
KyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsKICAgICBt
X2ppdFN0dWJSb3V0aW5lcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw4ICsyNCw4IEBACiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2Nr
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKLSNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNs
dWRlICJIYW5kbGVTZXQuaCIKQEAgLTE0NCw4ICsxNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRo
ZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lkIGpldHRp
c29uREZHQ29kZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0KICAgICAgICAgc2l6ZV90
IGV4dHJhU2l6ZSgpOyAvLyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdlcyBhbGxv
Y2F0ZWQgYnkgdGhlIGhlYXAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHNpemUo
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0yNzMs
NyArMjcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxl
U2V0OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBERkdDb2Rl
QmxvY2tzIG1fZGZnQ29kZUJsb2NrczsKKyAgICAgICAgQ29kZUJsb2NrU2V0IG1fY29kZUJsb2Nr
czsKICAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAg
IEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTU0
OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ28KICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9w
T2ZTdGFjaygpKTsKIH0KIAotdm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhD
b25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBq
aXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCit2b2lkIEpTU3Rh
Y2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRp
dmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0
JiBjb2RlQmxvY2tzKQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRU
b3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2Vy
dmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVz
LCBjb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHko
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNT
dGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisgICAgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3Rz
OwotICAgIGNsYXNzIERGR0NvZGVCbG9ja3M7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNs
YXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogICAgIGNsYXNzIFZNOwpAQCAtNzEsNyArNzEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfkpTU3RhY2soKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAg
dm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJS
b3V0aW5lU2V0JiwgREZHQ29kZUJsb2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxv
Y2tTZXQmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBSZWdp
c3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBhc0lubGluZUNhbGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJ
bnQzMigpIGNvbnN0OwogICAgICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAg
ICAgIGRvdWJsZSB1bmJveGVkRG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hl
ZENlbGwoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAg
IGludDMyX3QgdGFnKCkgY29uc3Q7CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBl
bmNvZGVkVmFsdWU7CisgICAgICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAg
ICAgfTsKIApAQCAtMTg4LDYgKzE5MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuICEhcGF5bG9hZCgpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lz
dGVyOjp1bmJveGVkRG91YmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJl
cjsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRD
ZWxsKCkgY29uc3QKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSklU
OjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMy
KFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JSZXR1cm4oKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpOworICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2ln
bmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVu
dHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVD
b3VudGVyKCkpKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3B0aW1pemUp
OwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0
KSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAg
RlRMOjpKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZv
ck9TUkVudHJ5SklUQ29kZSogSklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8
SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVu
aykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwogfQog
bmFtZXNwYWNlIEZUTCB7CitjbGFzcyBGb3JPU1JFbnRyeUpJVENvZGU7CiBjbGFzcyBKSVRDb2Rl
OwogfQogCkBAIC0xNzQsNiArMTc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21t
b25EYXRhKiBkZmdDb21tb24oKTsKICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAg
ICAgdmlydHVhbCBGVEw6OkpJVENvZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JF
bnRyeUpJVENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRl
KEpTU3RhY2sqLCBDYWxsRnJhbWUqLCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE2ICsxMDM2
LDMyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBv
cHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAot
ICAgICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9Ci0g
ICAgICAgICAgICBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7
Ci0gICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAg
ICAgICAgICB2bS53b3JrbGlzdCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgdW5z
aWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgpCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJz
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CisgICAg
ICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoCisgICAgICAgICAgICBjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7
CisgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAg
ICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiBj
b2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAgJiYg
Y29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7Cisg
ICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3Ro
aXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAgICAv
LyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8g
dGhlIHZhbHVlIGZvciB0aGlzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUg
YW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFz
c2VzLAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmlu
ZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ld
ID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG11
c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1
ZSgpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9jay5n
ZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAgICAg
IHZtLndvcmtsaXN0LmdldCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxh
Y2VtZW50KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIG11c3RI
YW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUo
KSwKKyAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xMDU0LDE1ICsxMDcwLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1p
emUpCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRD
b2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRMIEpJVCBkb2Vz
bid0IHN1cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAgLy8gRG9uJ3Qg
YXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXpl
QW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBpZiAodm9p
ZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29k
ZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MCwyMCArOTAsNiBAQCBJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmluc2ljKCkgCiB9
CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVQpCi0vLyBVdGlsaXR5IG1ldGhvZCB1c2VkIGZvciBq
ZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgdm9p
ZCBqZXR0aXNvbkNvZGVCbG9jayhWTSYgdm0sIFJlZlB0cjxUPiYgY29kZUJsb2NrKQotewotICAg
IEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
LSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBSZWZQdHI8VD4gY29k
ZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7Ci0gICAgY29kZUJsb2NrID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJu
YXRpdmUoKSk7Ci0gICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygp
OwotICAgIHZtLmhlYXAuamV0dGlzb25ERkdDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxD
b2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7Ci19Ci0jZW5kaWYKLQog
Y29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlNjcmlwdEV4ZWN1
dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShTY3JpcHRFeGVjdXRhYmxlKSB9OwogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTEyNSwxMiArMTEx
LDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgogICAgIAogICAg
IEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgCi0gICAgaWYgKEpJVENvZGU6Omlz
SklUKGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKLSAgICAgICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QoCi0gICAgICAgICAgICBzaXplb2YoQ29kZUJsb2NrKSArIGdlbmVy
aWNDb2RlQmxvY2stPmppdENvZGUoKS0+c2l6ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdm0u
aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykpOwotICAgIAogICAg
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGdlbmVyaWNDb2RlQmxvY2stPnNwZWNpYWxp
emF0aW9uS2luZCgpOwogICAgIAogICAgIFJlZlB0cjxDb2RlQmxvY2s+IG9sZENvZGVCbG9jazsK
QEAgLTM3NiwxNSArMzU2LDYgQEAgaW5saW5lIGNvbnN0IGNoYXIqIHNhbXBsaW5nRGVzY3JpcHRp
b24oSgogICAgIH0KIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIEV2YWxFeGVjdXRhYmxlOjpq
ZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZt
LCBtX2V2YWxDb2RlQmxvY2spOwotICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2V2YWxDb2RlQmxv
Y2stPmppdENvZGUoKTsKLSAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEV2
YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2VsbCk7
CkBAIC00MjYsMTUgKzM5Nyw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tT
eW50YXgKICAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBtX3NvdXJjZSk7CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotdm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNvZGVCbG9j
ayh2bSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9n
cmFtQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2spOwotfQotI2VuZGlmCi0KIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVubGlu
a0NhbGxzKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNTE4LDIyICs0ODAsNiBAQCBGdW5jdGlv
bkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotI2lmIEVOQUJMRShKSVQpCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRp
bWl6ZWRDb2RlRm9yQ2FsbChWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1f
Y29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJsb2NrRm9y
Q2FsbC0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IG1f
Y29kZUJsb2NrRm9yQ2FsbC0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7Ci19Ci0KLXZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoVk0mIHZt
KQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
Ci0gICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmpp
dENvZGUoKTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKLX0KLSNlbmRpZgot
CiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQ1LDEwICs0NDUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZShWTSYpOwotI2VuZGlmCi0KICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2soKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fZXZhbENvZGVCbG9jay5nZXQoKTsKQEAgLTUwNiwxMCArNTAyLDYg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotI2lmIEVO
QUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSNlbmRpZgot
CiAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCk7CkBAIC01ODEsMTAgKzU3Myw2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwogICAgIH0KICAg
ICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZv
ckNhbGwoVk0mKTsKLSNlbmRpZgotCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKQEAgLTU5NSwxMCAr
NTgzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgp
OwogICAgIH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENv
ZGVGb3JDb25zdHJ1Y3QoVk0mKTsKLSNlbmRpZgotCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNv
bnN0cnVjdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3Q7CkBAIC02MDksMTggKzU5Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwogICAgIH0KICAgICAgICAgCi0jaWYgRU5BQkxFKEpJ
VCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KSAKLSAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwodm0pOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwot
ICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KHZtKTsKLSAgICAg
ICAgfQotICAgIH0KLSNlbmRpZgotICAgICAgICAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAgICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2LDEzIEBAIHR5cGVkZWYgT3B0aW9uUmFu
Z2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldh
cm1VcCwgMTAwMCkgXAogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAx
MDAwKSBcCi0gICAgXAogICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JM
b29wLCAxKSBcCi0gICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVy
biwgMTUpIFwKKyAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50cnks
IDE1KSBcCisgICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJX
YXJtVXAsIDEwMDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29u
LCAxMDAwKSBcCisgICAgdihpbnQzMiwgZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3As
IDEpIFwKKyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAx
NSkgXAogICAgIFwKICAgICB2KGludDMyLCBldmFsVGhyZXNob2xkTXVsdGlwbGllciwgMTApIFwK
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAx
NTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcxMCw2ICs3MTAsMTUgQEAgdm9pZCBWTTo6Z2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydgogICAgICAgICB9CiAgICAgfQogfQorCitERkc6OldvcmtsaXN0KiBWTTo6ZW5z
dXJlV29ya2xpc3QoKQoreworICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERGRzo6
Z2xvYmFsV29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBtYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VV
c2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2NrPiBt
X2FwaUxvY2s7CkBAIC0yNzQsMTcgKzI3OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBO
dW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKICAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUg
ZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdURjo6U2ltcGxlU3RhdHMgbWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUOwotICAgICAgICBWZWN0b3I8Q29kZUJs
b2NrKj4gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQ7Ci0gICAgICAgIHZvaWQgc3RhcnRlZENvbXBp
bGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgewotICAgICAgICAgICAgY29kZUJs
b2Nrc0JlaW5nQ29tcGlsZWQuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGZpbmlzaGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrID09IGNvZGVC
bG9ja3NCZWluZ0NvbXBpbGVkLmxhc3QoKSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdD
b21waWxlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KIAogICAgICAgICB2b2lkIHNldEluRGVm
aW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3BlcnR5KQogICAgICAgICB7CkluZGV4
OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wOS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIENvZGVCbG9jazo6amV0dGlzb24oKSBzaG91bGQgYmUgaW1wbGlj
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDU2
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBnZXQgYSBSZWZDb3VudGVkQXJyYXkncyByZWZDb3VudCgp
IHNvIHRoYXQgYSBDb2RlQmxvY2sKKyAgICAgICAgY2FuIGNvbXB1dGUgaXRzIHBhcnQgb2YgdGhl
IGZvb3RwcmludCBvZiBhbiBJbnN0cnVjdGlvbiBhcnJheSBieSBkb2luZworICAgICAgICBzb21l
dGhpbmcgbGlrZSBzaXplKCkgLyByZWZDb3VudCgpLgorCisgICAgICAgICogd3RmL1JlZkNvdW50
ZWRBcnJheS5oOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OnJlZkNvdW50KToKKwog
MjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gTm8gbmVlZCBmb3IgSGFyZEF1dG9yZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdp
bmdSZWxlYXNlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMiw2ICsxMTIsMTMgQEAgcHVibGljOgogICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZyb21Q
YXlsb2FkKG1fZGF0YSkpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudDsKKyAg
ICB9CisgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFt
X2RhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210308</attachid>
            <date>2013-09-02 13:03:39 -0700</date>
            <delta_ts>2013-09-02 13:54:42 -0700</delta_ts>
            <desc>builds with !ENABLE(FTL_JIT)</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>184105</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGhhcyBzb21lIHNtYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9u
cy4gSlNCZW5jaC9nb29nbGUKKyAgICAgICAgc2hvd3MgYSB+OSUgcmVncmVzc2lvbiBiZWNhdXNl
IGl0IEdDJ3MgbW9yZSBmcmVxdWVudGx5LiBIb3dldmVyLCB0aGF0CisgICAgICAgIHJlZ3Jlc3Np
b24gaXMgbm90IGR1ZSB0byB0aGUgamV0dGlzb24gcmVmYWN0b3JpbmcgLSBpbnN0ZWFkIGl0J3Mg
ZHVlIHRvCisgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhpcyBjaGFuZ2UgYWxzbyBtYWtlcyB1cyBt
b3JlIHByZWNpc2VseSB0cmFjayBDb2RlQmxvY2sKKyAgICAgICAgbWVtb3J5IGZvb3RwcmludC4g
UHJldmlvdXNseSwgd2UgaWdub3JlZCB0aGUgc2l6ZSBvZiB0aGUgYnl0ZWNvZGUgc3RyZWFtLgor
ICAgICAgICBOb3cgd2UgZG9uJ3QgaWdub3JlIGl0IGFueXdheS4gVGhpcyBjYXVzZXMgc29tZSBi
ZW5jaG1hcmtzIHRvIEdDIG1vcmUKKyAgICAgICAgZnJlcXVlbnRseS4gSXQncyBhIGJ1ZyB0byBo
YXZlIHRoZSBHQyBpZ25vcmUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAgICAgQ29kZUJs
b2NrcywgYW5kIGlmIHRoYXQgYnVnIGNhdXNlcyBzb21lIGJlbmNobWFyayB0byBydW4gYSBiaXQg
ZmFzdGVyCisgICAgICAgIHdoaWxlIHVzaW5nIGEgYml0IG1vcmUgbWVtb3J5LCB0aGVuIGl0J3Mg
c3RpbGwgYSBidWcgYW5kIHdlIHNob3VsZCBzdGlsbAorICAgICAgICBmaXggaXQuIFRoZXJlIGFy
ZSBubyBvdGhlciBwZXJmb3JtYW5jZSBjaGFuZ2VzIGR1ZSB0byB0aGlzIGNoYW5nZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRk
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgor
ICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNr
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBmb3IgSGFyZEF1dG9y
ZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwzMCArMTY5
LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGlzYXNzZW1ibGVyL1g4NkRp
c2Fzc2VtYmxlci5jcHAKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3IuY3BwCi0gICAgaGVhcC9D
b3BpZWRTcGFjZS5jcHAKLSAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAotICAgIGhlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAot
ICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKLSAgICBoZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCi0gICAgaGVhcC9HQ1RocmVhZC5jcHAKLSAgICBoZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKLSAgICBoZWFwL0hhbmRsZVNldC5jcHAKLSAgICBoZWFw
L0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSGVhcC5jcHAKLSAgICBoZWFwL0hlYXBTdGF0aXN0
aWNzLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAotICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAotICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCi0gICAgaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCi0KLSAgICBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAorICAgIGhlYXAv
Q29kZUJsb2NrU2V0LmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVh
cC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvREZH
Q29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcApAQCAtMjAwLDYgKzE4MCw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAv
SGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCisgICAgaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBo
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAgICBoZWFwL01hcmtTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQyLDYgKzQ0Miw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaCBcCkBAIC00NTYsOCArNDU4
LDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDExICs4MiwxMSBAQCBTT1VSQ0VTICs9IFwK
ICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAorICAg
IGhlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAgICAgaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaCBc
CiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwIFwK
ICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tz
LmNwcCBcCiAgICAgaGVhcC9XZWFrLmNwcCBcCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwIFwKICAg
ICBoZWFwL1dlYWtIYW5kbGVPd25lci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RyaXZlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNz
ZW1ibGVyXERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxDb2RlQmxvY2tTZXQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29uc2VydmF0aXZlUm9vdHMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29waWVkU3BhY2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVZpc2l0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
REZHQ29kZUJsb2Nrcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxH
Q1RocmVhZC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGFu
ZGxlU2V0LmNwcCIgLz4NCkBAIC02NzksNiArNjc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3BpZWRBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcGllZEJsb2NrLmgiIC8+DQpAQCAtNjg5LDcgKzY5MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvcklubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXENvcHlXb3JrTGlzdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcREZHQ29kZUJsb2Nrcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1RocmVhZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWRTaGFyZWREYXRhLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4
LDYgQEAKIAkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0QzE1
MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLzsgfTsKIAkJMEYyQkRDNEYx
NTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBE
RkdWYWx1ZVNvdXJjZS5jcHAgKi87IH07CiAJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkxMCAvKiBE
RkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNw
cCAqLzsgfTsKLQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9
OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAw
M0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZp
ZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5
NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAq
LzsgfTsKQEAgLTM2OSw2ICszNjcsMjAgQEAKIAkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07
CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CisJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xMzU0LDgg
KzEzNjYsNiBAQAogCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkTm9k
ZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVlU291cmNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29kZUJs
b2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MDE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7
IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNl
S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU4LDYgKzE1NjgsMjAg
QEAKIAkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTUz
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVj
dWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzExMTdE
NDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMRm9yT1NSRW50cnlKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE3MTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPU1JFbnRyeS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRW50cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NS
RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRW50cnkuaDsg
cGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMUUxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIw
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHBhdGgg
PSBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgcGF0aCA9IGRmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRsL0ZU
TEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dv
cmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTM5LDYgKzI1NjMsOCBAQAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEw
NDE3QSAvKiBGVExGYWlsLmNwcCAqLywKIAkJCQlBN0YyOTk2QTE3QTBCQjY3MDAxMDQxN0EgLyog
RlRMRmFpbC5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0
ZWRWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwICovLAorCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyog
RlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBBMjIxNzA5NjA2OTAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTI1NTEsNiArMjU3Nyw4
IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNw
cCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
aCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1
ZS5oICovLAorCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAg
Ki8sCisJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggKi8sCiAJ
CQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICovLAogCQkJCTBG
MjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCiAJCQkJMEYyMzVCQzgx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLywKQEAgLTI3
MTUsNiArMjc0Myw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgxNkUxOTE1NENDNTZDMDBC
ODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuY3BwICovLAogCQkJCTE0ODE2RTFBMTU0Q0M1NkMwMEI4
MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovLAorCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0
MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAorCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAv
KiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCAqLywKQEAgLTI3MjksOCArMjc1OSw2IEBACiAJCQkJQzIyMzlEMTQx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMThEMTNG
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFE
NjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAotCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKLQkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBH
Q0Fzc2VydGlvbnMuaCAqLywKIAkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCAqLywKIAkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCkBAIC0zNTI0LDYgKzM1NTIsOCBAQAogCQkJ
CUE3RDg5Q0VGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLywK
KwkJCQkwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwICovLAorCQkJCTBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovLAogCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgKi8sCkBAIC0zNTY2LDYgKzM1OTYsMTIgQEAKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlG
MTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4
QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZEOEEzMjAx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLywKKwkJ
CQkwRkQ4QTMyMTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovLAorCQkJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCTBGRDhBMzIzMTdENTFGNTcw
MENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCAqLywKKwkJCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGNjM5NDNDMTVDNzVG
MTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjYz
OTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKQEAgLTM4OTEsNyArMzkyNyw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQw
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTk5LDcgQEAKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTc3LDYg
KzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2
RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBACiAJCQkJMTRCQTdBOTgxM0FBREZGODAw
NUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0Uw
MERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTIsNiArNDMzMCw3IEBACiAJ
CQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJB
MyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBC
MzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3
QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzFBMTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJl
Z0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1LDYgKzQzODUsNyBAQAogCQkJCTBGQjdG
MzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5
NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FC
NjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8q
IFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2
QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZE
RDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMy
QTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAv
KiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYg
KzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENv
bW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZl
cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDgyNSw3ICs0ODY5LDYgQEAKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdB
NDI0MTE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4ODYsNiArNDkyOSw3IEBA
CiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI5MTdENTFG
NTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0
QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5ODcsNiArNTAzMSw3IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pT
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8q
IEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzEzMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcgQEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JF
OEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkx
NkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTExLDYgKzUxNTcsNyBA
QAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxNDEsNiAr
NTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBT
dXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1f
aXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAg
ICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9vd25lckV4ZWN1dGFi
bGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293
bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92bSkKQEAgLTE1MDQsNiAr
MTUwNSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5k
aWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxOCw5IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVhcC0+
bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTUyNSw2ICsxNTMwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSkKICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQogICAgICwgbV9v
d25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQogICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE1
NDQsNyArMTU1MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8K
ICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQp
CiAjZW5kaWYKIHsKLSAgICBtX3ZtLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAKICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNl
dE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CkBAIC0x
ODQyLDcgKzE4NDgsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBk
dW1wQnl0ZWNvZGUoKTsKLSAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKyAgICBt
X2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4NTAs
MTIgKzE4NTcsNiBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGlmIChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CiAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
Ly8gUmVtb3ZlIG15c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBOb3RlIHRo
YXQgSSBtYXkgbm90IGJlIGluIHRoaXMgc2V0Ci0gICAgLy8gKGJlY2F1c2UgSSdtIG5vdCBhIERG
RyBjb2RlIGJsb2NrKSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5LgotICAg
IG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsKLSNlbmRpZgot
ICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKICNlbmRpZgpAQCAtMTkwNSwzMyArMTkwNiwzNSBAQCB2b2lkIEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgewotICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15
c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHku
Ci0gICAgICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3Zl
IGJlZW4gY2FsbGVkIGFscmVhZHkuIE9ubHkgb25lIHRocmVhZAotICAgICAgICAvLyBtYXkgcHJv
Y2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIENBUyByYWNlLgot
ICAgICAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb2xk
VmFsdWUgPSBkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKLSAgICAgICAg
ICAgIGlmIChvbGRWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Ci0g
ICAgICAgICAgICAgICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4g
RG9pbmcgc28gaXMgaGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBi
ZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBKU1Zh
bHVlcywgd2hpY2ggY2FuCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24g
MzItYml0LCBsZWFkaW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmVhcmx5IGltcG9zc2libGUgdG8gdHJhY2sgZG93bi4K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBt
dXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVhcmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQotICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIHRydWUgKHdlbGwsICh1bnNpZ25lZCkxKSwgc2luY2Ugb25jZSBh
IEdDIHRocmVhZCBpcyBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGFuZCBoYXMg
d29uIHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZh
bHVlIHRydWUpCi0gICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5IGNvbXBsZXRl
IHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKLSAgICAgICAgICAgICAg
ICAvLyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmZGZnQ29tbW9uLT52
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0dDKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2Us
IGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgIC8vIFRvIHRoaXMgZW5k
LCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuIE9u
bHkgb25lIHRocmVhZAorICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCisgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAg
ZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwor
ICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Cisg
ICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2lu
ZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgbXV0YXRp
bmcgdGhlIHN0YXRlIG9mIFZhbHVlUHJvZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdo
aWNoIGNhbgorICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFk
aW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCisgICAgICAgICAgICAvLyB0
aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVh
cmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
CisgICAgICAgICAgICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3Bv
bnNpYmxlIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgLy8gaXQgd2ls
bCBkZWZpbml0ZWx5IGNvbXBsZXRlIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNs
YXJpbmcKKyAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX3Zpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExF
TF9HQykKKyAgICAKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZW9mKENv
ZGVCbG9jaykpOworICAgIGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlVc2FnZShtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25z
LnNpemUoKSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZD
b3VudCgpKTsKICAgICAKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVy
bmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTIzNzksMTcgKzIzODIsMTQgQEAg
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUo
SklUKQorYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Cit9CisKIGJvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGJvb2wgcmVzdWx0ID0gSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxh
Y2VtZW50KCktPmppdFR5cGUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudCgpID09IHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOwogfQogI2VuZGlm
CiAKQEAgLTI3NDAsMjggKzI3NDAsMTQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25D
b2RlQmxvY2s6OgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQogeworICAgIERlZmVyR0Mg
ZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwogICAgIGFsdGVy
bmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRh
dGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzLCAiLlxuIik7Ci0gICAgamV0dGlzb25JbXBsKCk7
Ci19Ci0KLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKCp2bSgpKTsKLX0KLQotdm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbklt
cGwoKQotewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgp
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAg
IGFsdGVybmF0aXZlKCktPmluc3RhbGwoKTsKIH0KICNlbmRpZgogCkBAIC0zMDM4LDEwICszMDI0
LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0
aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0
aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApA
QCAtMzA0OSwxNiArMzAzNSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3Rp
bGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
b3B0aW1pemVkIGNvZGUgcmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAg
ICAgY291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0hhc2guaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlw
ZS5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJs
b2Nrcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtODMsNyArODMsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0yNzMs
MTQgKzI3MiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVj
aykKICAgICB7CisgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisgICAgICAg
IG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2Nr
IHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJh
bm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKICAgICAgICAgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvcihtX2pp
dENvZGUpKSkKLSAgICAgICAgICAgIG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFk
ZCh0aGlzKTsKLSNlbmRpZgogICAgIH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KQEAg
LTMxMSw3ICszMDgsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsg
fQogCi0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOworICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBi
b29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15
IEpJVFR5cGUKICNlbmRpZgogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTk2MCwxMCAr
OTU4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAg
Ym9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247
CisgICAgCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIApAQCAtOTc0LDcgKzk3MSw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2tTZXQ7CiAgICAgCiAgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSk7CiAgICAgCkBAIC0xMDE3LDE3ICsxMDE0LDE2IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpCiAgICAgewotICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFucyB0
aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKLSAgICAg
ICAgLy8gQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28KLSAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQg
Q29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0
IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCiAgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJs
b2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFk
IHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCiAgICAgICAgIC8vIGFs
bG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9q
aXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmIChtX21heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwNjcsNiArMTA2Myw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2
YXRpb247CisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAgIHVpbnQ4X3QgbV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291
cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTE4Niw3ICsxMTg0LDYgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjA5LDcgKzEyMDYsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjMyLDcg
KzEyMjgsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjkxLDggKzEyODYsNyBAQCBpbmxpbmUgSlNW
YWx1ZSBFeGVjU3RhdGU6OmFyZ3VtZW50QWZ0ZXJDCiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5qc1ZhbHVlKCk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLWlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAw
IGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMu
CiAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CkBAIC0xMzA3LDkgKzEzMDEsOCBAQCBpbmxpbmUgdm9pZCBERkdDb2Rl
QmxvY2tzOjptYXJrKHZvaWQqIGNhCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRy
dWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYgKzE1MjAsOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9t
OgogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBj
YXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAg
ICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1Myw2
ICszMTUzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzogewogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEpTQ29uc3RhbnRGb3JWYWx1
ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kID49IDApOworICAgICAgICAgICAgbV9ncmFwaC5tX2xhenlWYXJzLnNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2luaXRfbGF6eV9yZWcpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM2MzQsNyArMzYz
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBBU1NFUlQoYmxvY2sp
OwogICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkgewotICAgICAgICAgICAgbV9ncmFw
aC5raWxsQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJdHND
b250ZW50cyhibG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcwLDE2ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5yZXNldFJlYWNoYWJpbGl0eSgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBraWxsVW5yZWFjaGFibGUo
YmxvY2spOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLmtpbGxV
bnJlYWNoYWJsZUJsb2NrcygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCkBAIC0zMjAsMTkg
KzMxMSw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGtpbGxVbnJl
YWNoYWJsZShCYXNpY0Jsb2NrKiBibG9jaykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChibG9jayk7
Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07
KQotICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUlu
ZGV4XSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KQotICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5hdChub2RlSW5kZXgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgua2lsbEJsb2NrKGJs
b2NrKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlKiBsaXZlbmVzc05vZGUgPSBqZXR0
aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNiArMTExLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNh
c2UgSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludEFuZENoZWNrOgpAQCAtMTMzLDYg
KzEzNCw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxl
OgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAgd3JpdGUoU2lk
ZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2Niw3
IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7CiBjbGFzcyBDb21tb25EYXRhIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKLSAgICBDb21t
b25EYXRhKCkKLSAgICAgICAgOiBtYXlCZUV4ZWN1dGluZyhmYWxzZSkKLSAgICAgICAgLCBpc0pl
dHRpc29uZWQoZmFsc2UpCi0gICAgewotICAgIH0KKyAgICBDb21tb25EYXRhKCkgeyB9CiAgICAg
CiAgICAgdm9pZCBub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mLCBDb2Rl
QmxvY2sqLCBOb2RlKik7CiAgICAgCkBAIC04MSwxMSArNzcsOCBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7CiAgICAgCiAgICAgUmVm
UHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247Ci0gICAgYm9vbCBtYXlCZUV4
ZWN1dGluZzsKLSAgICBib29sIGlzSmV0dGlzb25lZDsKICAgICBib29sIGxpdmVuZXNzSGFzQmVl
blByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAgYm9vbCBh
bGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBl
dmVyeSBHQy4KLSAgICB1bnNpZ25lZCB2aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7IC8vIFVu
c2lnbmVkIHRvIG1ha2UgaXQgd29yayBzZWFtbGVzc2x5IHdpdGggdGhlIGJyb2FkZXN0IHNldCBv
ZiBDQVMgaW1wbGVtZW50YXRpb25zLgogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0
OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw5ICs1NSw5IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlv
bk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQ
dHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKLSAgICBXb3JrbGlzdCog
d29ya2xpc3QpCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVy
YW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIp
Iik7CiAgICAgCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlSW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9N
QVgpOwotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CiAKQEAgLTc4LDggKzc2LDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZygi
REZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCi0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkg
c3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdh
bnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMg
ZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwpAQCAtOTMsMjkgKzg5LDggQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8vIERlcml2
ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUg
YXQgbGVhc3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50
cnkgd2l0aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0g
ICAgaWYgKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMg
PSBjb2RlQmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNXaXRoVmFs
dWVzID0gMDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcg
UGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhW
YWx1ZXMpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAg
ICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAg
ICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0
cnVjdCkgewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0
aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAg
IC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50
byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFu
IGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3Nl
cywKLSAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBp
bnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5k
bGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB9
CisgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4
LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAgICAgICAg
IHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENvZGVCbG9j
ayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwK
ICAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0KikK
IHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywxMyBAQCBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+IHBhc3NlZENhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywg
Y29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlz
dCk7CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
bXVzdEhhbmRsZVZhbHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9
IENvbXBpbGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENv
bXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0NiwxMCBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhCiAKIC8v
IElmIHRoZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2UgZG8gYSBjb25jdXJyZW50IGNvbXBpbGUu
IE90aGVyd2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAvLyBjb21waWxlLiBFdmVuIGlmIHdlIGRv
IGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVz
dWx0LgotQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBD
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOworQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZSgKKyAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+
JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrPiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAg
ICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6
CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
Niw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwg
IigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAi
KSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7CisgICAgICAg
IGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmci
LCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9CiAgICAgaWYgKG5vZGUtPmhh
c0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAgICAg
b3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CkBAIC00ODcsNiArNDk0LDI5
IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFzaWNC
bG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBo
aXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9k
ZUluZGV4KSk7CisgICAgCisgICAga2lsbEJsb2NrKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6
a2lsbFVucmVhY2hhYmxlQmxvY2tzKCkKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBudW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc1Jl
YWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAga2lsbEJs
b2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwogdm9pZCBHcmFwaDo6cmVzZXRF
eGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4KTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Jsb2NrKik7Cisg
ICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAKICAgICBib29sIGlz
UHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gaXNO
dW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBAIHB1YmxpYzoKICAgICBib29s
IG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFi
bGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7
CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxW
YXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsNiArMTA3LDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgp
CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29u
c3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
U1NBKSB7CiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjksOCArMTMwLDYgQEAgdm9pZCBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQ2VsbCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7Ci0gICAgICAg
IAotICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5j
cHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogSklUQ29kZTo6SklUQ29kZSgpCkBAIC01OSw2ICs2MSwxNDUgQEAgdm9p
ZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJpbmtU
b0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAor
ICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7CisgICAgdmFyaWFibGVFdmVu
dFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBtaW5p
ZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6cmVjb25z
dHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxKU1Zh
bHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJpZXM7
CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVj
b3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFuZHNM
aWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0t
OykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAg
ICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAg
ICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQg
bWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1
c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhp
cywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQg
Y2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAgICAgICAgICAgLy8g
c28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgorICAg
ICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0g
cmVjb3Zlcmllc1tpXTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2s6Cisg
ICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZENlbGw6CisgICAgICAgIGNhc2Ug
QWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEJvb2xlYW46CisgICAgICAgICAgICB2YWx1ZSA9IGV4
ZWMtPnIoaSkuanNWYWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxy
ZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihleGVjLT5yKGkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1
ZSA9IGpzRG91YmxlTnVtYmVyKGV4ZWMtPnIoaSkudW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSBy
ZWNvdmVyeS5jb25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBD
b3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCkpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24u
XG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1l
U29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0
aW1lIHNvb24uXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9
CisKK3ZvaWQgSklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2Rl
QmxvY2ssICI6IEZUTC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBD
b3VudGVyLnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRl
clZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisg
ICAgICAgIGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGll
clVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENv
dW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAg
ICAgIGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQ
YXRoQ29uY3VycmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93
IHBhdGggY29uY3VycmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVy
LmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3Vs
dCkgeworICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5l
eHRJbnZvY2F0aW9uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBp
bGF0aW9uRmFpbGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2sp
OworICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21w
aWxhdGlvbiA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVm
ZXJyZWQ6CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhp
cyBpcyB3ZWlyZCAtIGl0IHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNv
ZGUgYmxvY2sgKGkuZS4KKyAgICAgICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENv
ZGUgYmVsb25ncyB0bykgaXMgYWxzbyBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9l
c24ndCByZWFsbHkgbWF0dGVyIHdoYXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5n
IGFueXdheS4gTm90ZQorICAgICAgICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXph
dGlvbiBhY3R1YWxseSBtZWFucyB0aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3
aWNlLiBCdXQgdGhhdCdzIGdlbmVyYWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJl
b3B0aW1pemF0aW9ucworICAgICAgICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4K
KyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlv
bigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRy
eS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENv
ZGUuaCIKICNpbmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgpAQCAtOTMsOCArOTQsMzEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAg
ICAgICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4mIHJlc3VsdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBvbmx5IGFw
cGxpY2FibGUgaWYgd2UncmUgYXQgYSBwb2ludCB3aGVyZSBhbGwgdmFsdWVzIGFyZSBzcGlsbGVk
IHRvIHRoZQorICAgIC8vIHN0YWNrLiBDdXJyZW50bHksIGl0IGFsc28gaGFzIHRoZSByZXN0cmlj
dGlvbiB0aGF0IHRoZSB2YWx1ZXMgbXVzdCBiZSBpbiB0aGVpcgorICAgIC8vIGJ5dGVjb2RlLWRl
c2lnbmF0ZWQgc3RhY2sgc2xvdHMuCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRl
eCwKKyAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4mIHJlc3VsdCk7CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKyAgICAvLyBOQi4gQWxsIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBDb2RlQmxvY2sqIGJl
Y2F1c2UgdGhleSBtYXkgd2FudCB0byB1c2UKKyAgICAvLyBDb2RlQmxvY2sncyBsb2dpYyBhYm91
dCBzY2FsaW5nIHRocmVzaG9sZHMuIEl0IHNob3VsZCBiZSBhIERGRyBDb2RlQmxvY2suCisgICAg
CisgICAgYm9vbCBjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKik7CisgICAgdm9p
ZCBkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXpl
QWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZVNvb24oQ29kZUJsb2Nr
Kik7CisgICAgdm9pZCBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayopOworICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKyAgICAKICAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0gICAgICAgIAorICAg
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8vIEFsbG93IEpJVENv
bXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgogCkBAIC0xMDYsNiArMTMwLDEwIEBAIHB1Ymxp
YzoKICAgICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4g
d2F0Y2hwb2ludHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRT
dHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworI2lmIEVOQUJMRShG
VExfSklUKQorICAgIEV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBvc3JFbnRyeUJsb2NrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDIwIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5sb2NhbCgpOwogICAgIH0K
ICAgICAKKyAgICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2FzZSBF
eHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IAogICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChvcCgpID09IEdldExvY2FsVW5saW5rZWQpOworICAgICAgICBBU1NFUlQoaGFzVW5saW5r
ZWRMb2NhbCgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bV9vcEluZm8pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTUgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRvbUxvY2FsLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAorICAgIC8qIFNwZWNpYWwgbm9k
ZSBmb3IgT1NSIGVudHJ5IGludG8gdGhlIEZUTC4gSW5kaWNhdGVzIHRoYXQgd2UncmUgbG9hZGlu
ZyBhIGxvY2FsICovXAorICAgIC8qIHZhcmlhYmxlIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyLiAq
L1wKKyAgICBtYWNybyhFeHRyYWN0T1NSRW50cnlMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCisgICAg
XAorICAgIC8qIFRpZXItdXAgY2hlY2tzIGZyb20gdGhlIERGRyB0byB0aGUgRlRMLiAqL1wKKyAg
ICBtYWNybyhDaGVja1RpZXJVcEluTG9vcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENoZWNrVGllclVwQW5kT1NSRW50ZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhD
aGVja1RpZXJVcEF0UmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAogICAgIC8qIEdl
dCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhl
IFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFs
aWQgZm9yIHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9c
CiAgICAgLyogYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBsb2NhbCBhY2Nlc3MsIGFuZCB0aHVz
IGhhZCB0aGVpciBvd24gcHJvZmlsaW5nLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3
LDM0IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKIAogICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAg
ICJPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2Nr
LAorICAgICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
IiAtPiAiLCAqY29kZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5k
ZXgsICJcbiIpOwogICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBp
ZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgIC8v
IFdoZW4gd2lsbCB0aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gLSBBbiBleGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUgYmFzZWxpbmUgSklUIGZv
bGxvd2VkIGJ5IGFuIGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVudGVyLiBXZSdyZSBmaW5l
IHdpdGggYWxsb3dpbmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5zCisgICAgICAgIC8vICAg
ZW5vdWdoIHdlJ2xsIGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgdGhl
IE9TUiBleGl0IGNvc3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5kIHNvIHJlb3B0aW1pemlu
ZyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ug
aGF2ZSByZWN1cnNpdmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lkZXIgdGhhdCBmb28gaGFz
IGEgaG90IGxvb3AKKyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2VsZi4gV2UgaGF2ZSB0d28g
Zm9vJ3Mgb24gdGhlIHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisgICAgICAgIC8vICAgYW5k
IGZvbzIsIHdpdGggZm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBmb28ncyBob3QgbG9vcC4g
Zm9vMiBnZXRzCisgICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUgd2F5IGludG8gdGhlIEZU
TC4gVGhlbiBpdCByZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAgICAgICAgLy8gICBmb28x
IHdhbnRzIHRvIGdldCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRoaXMgY29uY2x1c2lvbiBm
cm9tIGl0cworICAgICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0IHRvIE9TUiBlbnRlci4g
QW5kIHdlJ2xsIHRlbGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAgICAgLy8gICBtaWdodCBi
ZSB3b3J0aCBhZGRyZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0aGluayB0aGlzIGNhc2Ug
d2lsbAorICAgICAgICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3csIGlmIGl0IGRvZXMgaGFw
cGVuLCBpdCdsbCBjYXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAgIC8vICAgdGhyYXNoaW5n
LgorICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIGJsb2Nr
IGlzIG5vdCBERkcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIE9T
UkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5
RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFlbnRy
eSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlv
blNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgICAgICAKKyAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrOworICAg
ICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOwor
ICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gMDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPmNvZGVPcmlnaW4gPT0gQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSkgeworICAgICAgICAgICAgICAgIHRhcmdldCA9IGJsb2NrOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCF0YXJnZXQpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0ZXJyaWJsZSBvdXRjb21lLiBJ
dCBzaG91bGRuJ3Qgb2Z0ZW4gaGFwcGVuIGJ1dCBpdCBtaWdodAorICAgICAgICAgICAgLy8gaGFw
cGVuIGFuZCBzbyB3ZSBzaG91bGQgZGVmZW5kIGFnYWluc3QgaXQuIElmIGl0IGhhcHBlbnMsIHRo
ZW4gdGhpcworICAgICAgICAgICAgLy8gY29tcGlsYXRpb24gaXMgYSBmYWlsdXJlLgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBCYXNpY0Js
b2NrKiBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2VydCgwKTsKKyAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+Y29kZU9yaWdpbjsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoaW50IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNlbGluZS0+bnVtUGFyYW1l
dGVycygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+
YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0QXJndW1l
bnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldC0+dmFyaWFibGVz
QXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gbm9kZTsKKyAgICAgICAgfQor
ICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzOyArK2xvY2FsKSB7CisgICAgICAgICAgICBOb2RlKiBwcmV2aW91c0hlYWQgPSB0
YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRy
eUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9j
YWwoKSkpOworICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSksIEVkZ2Uobm9kZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXdSb290LT5h
cHBlbmROb2RlKG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBjb2RlT3JpZ2luLCBPcEluZm8odGFy
Z2V0KSk7CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIG1fZ3JhcGgu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9j
a3MoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtT1NS
RW50cnlwb2ludENyZWF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIE9TUiBFbnRyeXBvaW50IENyZWF0aW9uIik7CisgICAgcmV0dXJu
IHJ1blBoYXNlPE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBpcyBvbmx5IGZvciBjb21waWxhdGlv
biBwaXBlbGluZXMgdGhhdCBnbyB0aHJvdWdoIFNTQSwgYW5kIHRoYXQKKy8vIGRvIGEgc3BlY2lh
bGl6ZWQgT1NSIGVudHJ5IGNvbXBpbGUuIEN1cnJlbnRseSB0aGF0IG1lYW5zIEZUTC4KKy8vCisv
LyBDcmVhdGVzIGFuIE9TUiBlbnRyeXBvaW50IHRoYXQgZXN0YWJsaXNoZXMgYWxsIGFyZ3VtZW50
IGFuZCBsb2NhbCB2YXJpYWJsZQorLy8gdmFsdWVzLiBUaGlzIGVudHJ5cG9pbnQgb25seSB3b3Jr
cyBmb3IgdGhlIFBsYW46Om9zckVudHJ5Qnl0ZWNvZGVJbmRleC4KKy8vIFVubGlrZSBvcmRpbmFy
eSBPU1IgZW50cnkgaW50byB0aGUgREZHLCB0aGlzIGZvcmNlcyBhbGwgdmFyaWFibGVzIHNsdXJw
ZWQKKy8vIGluIHRocm91Z2ggT1NSIGVudHJ5IHRvIGFwcGVhciBUT1AgdG8gdGhlIENGQS4gSGVu
Y2UgdGhpcyBwaGFzZSBtdXN0IGJlIHJ1bgorLy8gZWFybHkgLSBiZWZvcmUgZG9pbmcgYW55IENG
QS4gQnV0IHRoaXMgYWxzbyBkb2VzIHNvbWUgYWRkaXRpb25hbCBoYWNrcyB0aGF0CisvLyByZXF1
aXJlIHRoaXMgdG8gcnVuIGJlZm9yZSB1bmlmaWNhdGlvbi4KKworYm9vbCBwZXJmb3JtT1NSRW50
cnlwb2ludENyZWF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTUsNiArMjAxNSwxODQg
QEAgZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlbwogICAgIGNvZGVCbG9j
ay0+cmVvcHRpbWl6ZSgpOwogfQogCisjaWYgRU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19PUEVS
QVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50
ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAg
ICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChj
b2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgewor
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygi
RGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBpbmRlZmluaXRl
bHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUuXG4iKTsKKyAgICAgICAgaml0Q29k
ZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZWJsb2NrKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwg
KmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBpZiAoV29ya2xpc3QqIHdvcmts
aXN0ID0gdm0ud29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmts
aXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgIHZtLCBDb21waWxh
dGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7CisgICAgfSBl
bHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgCisg
ICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICBq
aXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
Q29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAvLyBU
aGF0J3MgZ3JlYXQsIHdlJ3ZlIGNvbXBpbGVkIHRoZSBjb2RlIC0gbmV4dCB0aW1lIHdlIGNhbGwg
dGhpcyBmdW5jdGlvbiwKKyAgICAgICAgLy8gd2UnbGwgZW50ZXIgdGhhdCByZXBsYWNlbWVudC4K
KyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGVkKSB7Cisg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBmaW5pc2hlZCBjb21waWxpbmcsIGJ1dCBmYWls
ZWQgc29tZWhvdzsgaW4gdGhhdCBjYXNlIHRoZQorICAgICAgICAvLyB0aHJlc2hvbGRzIHdpbGwg
YmUgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNv
bXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LlxuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhl
IGNvZGUuCisgICAgY29tcGlsZSgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3BlcmFuZHM8SlNWYWx1ZT4oKSwKKyAg
ICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLCB2bS5lbnN1
cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlO
b3coCisgICAgRXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgc3Ry
ZWFtSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFw
KTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAor
ICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAg
CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAg
ICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhl
Y3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxu
Iik7CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5t
X2RpZEZhaWxGVExDb21waWxhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQorICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24gb2Yg
IiwgKmNvZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZh
aWx1cmUuXG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24oY29k
ZWJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUt
PmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29z
aW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0
ZTsKKyAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gdm0ud29ya2xpc3QuZ2V0KCkpIHsKKyAg
ICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JW
TSgKKyAgICAgICAgICAgIHZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVy
c2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0
ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIEFTU0VSVCghaml0Q29kZS0+b3Ny
RW50cnlCbG9jayk7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdChDb21waWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoQ29kZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0Q29k
ZS0+b3NyRW50cnlCbG9jay5nZXQoKSkgeworICAgICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZU
TDo6cHJlcGFyZU9TUkVudHJ5KAorICAgICAgICAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgZW50
cnlCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpKSB7CisgICAgICAgICAgICBqaXRD
b2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNz
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGVEw6OkZvck9TUkVudHJ5SklUQ29kZSog
ZW50cnlDb2RlID0gZW50cnlCbG9jay0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAgICAgZW50cnlD
b2RlLT5jb3VudEVudHJ5RmFpbHVyZSgpOworICAgICAgICBpZiAoZW50cnlDb2RlLT5lbnRyeUZh
aWx1cmVDb3VudCgpIDwKKyAgICAgICAgICAgIE9wdGlvbnM6OmZ0bE9TUkVudHJ5RmFpbHVyZUNv
dW50Rm9yUmVvcHRpbWl6YXRpb24oKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBqaXRD
b2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBPU1IgZW50cnkgZmFpbGVkLiBPaCBubyEgVGhp
cyBpbXBsaWVzIHRoYXQgd2UgbmVlZCB0byByZXRyeS4gV2UgcmV0cnkKKyAgICAgICAgLy8gd2l0
aG91dCBleHBvbmVudGlhbCBiYWNrb2ZmIGFuZCB3ZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSBlbnRy
eSBjb2RlIGJsb2NrLgorICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmNsZWFyKCk7Cisg
ICAgICAgIAorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9
PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBp
bGF0aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMuCisgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJs
b2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4g
b3B0aW1pemVkIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBUaGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdHJpZ2dlciBhIGZvci1lbnRy
eSBjb21waWxlLgorICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CisgICAg
aml0Q29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdp
bihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOworICAgIENv
bXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gREZHOjpjb21waWxlKAorICAgICAgICBl
eGVjLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTEZvck9TUkVudHJ5TW9k
ZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksCisgICAgICAgIHZtLmVu
c3VyZVdvcmtsaXN0KCkpOworICAgIAorICAgIC8vIEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dl
ciBhIHJlcGxhY2VtZW50IGNvbXBpbGUuIE9mIGNvdXJzZSwgd2UgZG9uJ3Qgd2FudCB0bworICAg
IC8vIHRyaWdnZXIgaXQgaWYgd2UgZG9uJ3QgbmVlZCB0by4gTm90ZSB0aGF0IHRoaXMgaXMga2lu
ZCBvZiB3ZWlyZCBiZWNhdXNlIHdlIG1pZ2h0CisgICAgLy8gaGF2ZSBqdXN0IGZpbmlzaGVkIGFu
IEZUTCBjb21waWxlIGFuZCB0aGF0IGNvbXBpbGUgZmFpbGVkIG9yIHdhcyBpbnZhbGlkYXRlZC4K
KyAgICAvLyBCdXQgdGhpcyBzZWVtcyB1bmNvbW1vbiBlbm91Z2ggdGhhdCB3ZSBzb3J0IG9mIGRv
bid0IGNhcmUuIEl0J3MgY2VydGFpbmx5IHNvdW5kCisgICAgLy8gdG8gZmlyZSBvZmYgYW5vdGhl
ciBjb21waWxlIHJpZ2h0IG5vdyBzbyBsb25nIGFzIHdlJ3JlIG5vdCBhbHJlYWR5IGNvbXBpbGlu
ZyBhbmQKKyAgICAvLyB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2Vt
ZW50LiBOb3RlLCB3ZSBkb24ndCBkbyB0aGlzIGZvcgorICAgIC8vIG9idmlvdXNseSBiYWQgY2Fz
ZXMgbGlrZSBnbG9iYWwgY29kZSwgd2hlcmUgd2Uga25vdyB0aGF0IHRoZXJlIGlzIGEgc2xpbSBj
aGFuY2UKKyAgICAvLyBvZiB0aGlzIGNvZGUgYmVpbmcgaW52b2tlZCBldmVyIGFnYWluLgorICAg
IENvbXBpbGF0aW9uS2V5IGtleUZvclJlcGxhY2VtZW50KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCksIEZUTE1vZGUpOworICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gR2xvYmFs
Q29kZQorICAgICAgICAmJiAhY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCisg
ICAgICAgICYmICghdm0ud29ya2xpc3QuZ2V0KCkKKyAgICAgICAgICAgIHx8IHZtLndvcmtsaXN0
LT5jb21waWxhdGlvblN0YXRlKGtleUZvclJlcGxhY2VtZW50KSAhPSBXb3JrbGlzdDo6Tm90S25v
d24pKSB7CisgICAgICAgIGNvbXBpbGUoCisgICAgICAgICAgICBleGVjLCBjb2RlQmxvY2stPm5l
d1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLAorICAgICAgICAgICAgVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLCB2bS5lbnN1cmVXb3JrbGlz
dCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8gSXQncyBwb3NzaWJs
ZSB0aGF0IHRoZSBmb3ItZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1Y2NlZWRlZC4gSW4gdGhhdCBj
YXNlIE9TUgorICAgIC8vIGVudHJ5IHdpbGwgc3VjY2VlZCB1bmxlc3Mgd2UgcmFuIG91dCBvZiBz
dGFjay4gSXQncyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8uCisgICAgLy8gV2Ugc2lnbmFs
IHRvIHRyeSBhZ2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KKyAgICB2b2lkKiBh
ZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCisgICAgICAgIGV4ZWMsIGppdENvZGUtPm9z
ckVudHJ5QmxvY2suZ2V0KCksIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAgICBpZiAo
YWRkcmVzcykKKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAg
ZWxzZQorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7Cisg
ICAgcmV0dXJuIGFkZHJlc3M7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gLy8g
ZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwMiw2ICszMDIsMTEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRT
cAogCiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9j
ayopIFdURl9JTlRFUk5BTDsKIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogREZH
X09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpIFdURl9JTlRFUk5BTDsKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwogfSAvLyBleHRlcm4gIkMiCiAKIGlubGluZSBQX0RGR09wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUoVHlwZWRBcnJheVR5
cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsOSArNDYsMTEgQEAKICNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgog
I2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuaCIKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
VmFsaWRhdGUuaCIKQEAgLTU3LDcgKzU5LDYgQEAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KIAogI2lmIEVOQUJMRShGVExfSklUKQotI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgog
I2luY2x1ZGUgIkZUTENvbXBpbGUuaCIKICNpbmNsdWRlICJGVExGYWlsLmgiCiAjaW5jbHVkZSAi
RlRMTGluay5oIgpAQCAtODEsMTMgKzgyLDEyIEBAIHN0YXRpYyB2b2lkIGR1bXBBbmRWZXJpZnlH
cmFwaChHcmFwaCYgZ3IKIAogUGxhbjo6UGxhbigKICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4g
cGFzc2VkQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKQorICAgIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RI
YW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgpKQogICAgICwgY29k
ZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG1vZGUobW9kZSkKICAgICAsIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgLCBudW1WYXJzV2l0aFZh
bHVlcyhudW1WYXJzV2l0aFZhbHVlcykKLSAgICAsIG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKQorICAgICwgbXVzdEhhbmRsZVZh
bHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgp
LT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBpbGF0
aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29k
ZXNGb3IoY29kZUJsb2NrLmdldCgpKSwgUHJvZmlsZXI6OkRGRykpIDogMCkKICAgICAsIGlkZW50
aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKICAgICAsIHdlYWtSZWZlcmVuY2VzKGNvZGVCbG9jay5n
ZXQoKSkKQEAgLTE2NSw2ICsxNjUsMTYgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNv
bXBpbGVJblRocgogICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICB2YWxpZGF0
ZShkZmcpOwogICAgIAorICAgIGlmIChtb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSkgeworICAg
ICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oZGZnKTsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UHRyKG5l
dyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKKyAgICAgICAgICAgIHJldHVybiBGVExQYXRoOwor
ICAgICAgICB9CisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAg
dmFsaWRhdGUoZGZnKTsKKyAgICB9CisgICAgCiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0
aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBl
cmZvcm1GaXh1cChkZmcpOwpAQCAtMjA2LDEwICsyMTYsMTkgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0
ZUlmTmVjZXNzYXJ5KGRmZyk7CiAgICAgfQogCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBERkdNb2RlOiB7CisgICAgICAgIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihkZmcpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgY2FzZSBGVExNb2RlOgorICAgIGNhc2Ug
RlRMRm9yT1NSRW50cnlNb2RlOiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKE9wdGlv
bnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCi0gICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAg
ICAgICAgaWYgKCFGVEw6OmNhbkNvbXBpbGUoZGZnKSkgeworICAgICAgICAgICAgZmluYWxpemVy
ID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOworICAgICAgICAgICAgcmV0
dXJuIEZUTFBhdGg7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhkZmcpOwogICAgICAgICBwZXJmb3JtTG9vcFByZUhlYWRlckNyZWF0aW9u
KGRmZyk7CkBAIC0yNDQsMTAgKzI2MywxNiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgICAgIEZUTDo6Y29tcGlsZShzdGF0ZSk7CiAgICAgICAgIEZUTDo6
bGluayhzdGF0ZSk7CiAgICAgICAgIHJldHVybiBGVExQYXRoOwotICAgIH0KICNlbHNlCi0gICAg
UkVMRUFTRV9BU1NFUlQoIU9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
CiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAgICAgcGVyZm9ybURDRShkZmcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDE1NDk2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIGNsYXNzIExvbmdMaXZlZFN0YXRlOwogc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAgIFBsYW4oCiAgICAgICAgIFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgY29u
c3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmKTsKQEAgLTcyLDcg
KzcyLDYgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIFJl
ZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKICAgICBDb21waWxhdGlvbk1vZGUgbW9kZTsKICAg
ICBjb25zdCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7Ci0gICAgY29uc3QgdW5zaWdu
ZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZh
bHVlczsKIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODQsNyArNDg0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIE1v
dkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICAgICAgY2Fz
ZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50
ZXI6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBh
dCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0
ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU1MSw2ICs1NTQsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMg
YSBwcmVkaWN0aW9uLgorICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZ2V0cyBpZ25vcmVk
IGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KICAgICAgICAgY2FzZSBJbmxpbmVTdGFy
dDoKICAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMzLDYgKzIzMywxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5
OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
KyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVy
bjoKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
NTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODM1LDYgKzQ4MzUsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBz
aWxvbjoKICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9j
YWw6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVwQXRS
ZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2ODAsMTEgKzQ2ODAsNzEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVW5yZWFjaGFibGU6
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwor
CisjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29w
OiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVz
dGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2Rl
KCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbih0
cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjogewor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCkt
PnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbih0cmln
Z2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjogewor
ICAgICAgICBBU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50
ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVyVXBDb3VudGVyLm1fY291bnRlcikpOwor
ICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICB0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBH
UFIsIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9zdHJlYW0tPnNpemUoKSk7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbnRFbnRlciA9IG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5qdW1wKHRl
bXBHUFIpOworICAgICAgICBkb250RW50ZXIubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQor
ICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJu
OgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgIGNhc2UgUGhpOgogICAg
IGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgIGNhc2UgRXh0cmFjdE9T
UkVudHJ5TG9jYWw6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1
ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgInRpZXItdXAgY2hlY2sg
aW5qZWN0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gREZHTW9kZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgICAgIEZU
TDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpjYW5Db21waWxlKG1fZ3JhcGgpOworICAg
ICAgICBpZiAobGV2ZWwgPT0gQ2Fubm90Q29tcGlsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVj
ZXNzYXJ5KG1fZ3JhcGgpOworCisgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9n
cmFwaCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9uYXR1cmFsTG9vcHMuaGVhZGVyT2YoYmxvY2spKSB7CisgICAgICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luOworICAgICAg
ICAgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlOworICAgICAgICAgICAgICAgIGlmIChsZXZlbCA9
PSBGVEw6OkNhbkNvbXBpbGVBbmRPU1JFbnRlciAmJiAhY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gQ2hlY2tUaWVyVXBBbmRPU1JFbnRl
cjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBlID0g
Q2hlY2tUaWVyVXBJbkxvb3A7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoMCwgU3BlY05vbmUsIG5vZGVUeXBlLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPm9wKCkgPT0gUmV0dXJu
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBTcGVjTm9uZSwgQ2hlY2tUaWVyVXBBdFJldHVy
biwgbm9kZS0+bGFzdCgpLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorfTsKKworYm9vbCBwZXJmb3Jt
VGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgVGllci11cCBDaGVjayBJbmplY3Rpb24iKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0aGUgdGhpcyBjb2RlIGJs
b2NrIGNvdWxkIGJlIHJlY29tcGlsZWQgd2l0aCB0aGUgRlRMLAorLy8gYW5kIGlmIHNvLCBpdCBp
bmplY3RzIHRpZXItdXAgY2hlY2tzLgorCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFi
bGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soCisg
ICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKKyAgICA6IG1fZGZnQ29kZUJs
b2NrKGRmZ0NvZGVCbG9jaykKK3sKK30KKworVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6On5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQorCitQYXNzUmVmUHRy
PFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxv
Y2spCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjayhkZmdDb2RlQmxvY2spKTsKK30KKwordm9pZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KAorICAg
IENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
IHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9u
IG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAg
ICAiKSBkaWQgYmVjb21lIHJlYWR5LlxuIik7CisgICAgfQorICAgIAorICAgIG1fZGZnQ29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVu
dGx5KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7Cit9CisKK3ZvaWQgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAi
T3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZn
Q29kZUJsb2NrLAorICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOworICAg
IH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAg
ICAgY29kZUJsb2NrLT5pbnN0YWxsKCk7CisgICAgCisgICAgbV9kZmdDb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCktPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJl
c3VsdCgKKyAgICAgICAgcmVzdWx0KTsKK30KKworfSB9IC8vIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGljOgorICAgIHZp
cnR1YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKAorICAg
ICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9j
ayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayos
IENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBt
X2RmZ0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRXhlY3V0
YWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1RvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2soCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVC
bG9jaykKKyAgICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0NvZGVCbG9jaykKK3sKK30KKworVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKQoreworfQorCitQYXNzUmVmUHRyPFRvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+CitUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IGRmZ0NvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7Cit9CisKK3Zv
aWQgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRp
b25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KAorICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIg
KGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAiKSBkaWQgYmVjb21lIHJlYWR5
LlxuIik7CisgICAgfQorICAgIAorICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygp
LT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KAorICAgICAgICBtX2RmZ0Nv
ZGVCbG9jay5nZXQoKSk7Cit9CisKK3ZvaWQgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5n
IGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ss
CisgICAgICAgICAgICAiKSByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CisgICAgfQorICAgIAor
ICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBtX2RmZ0Nv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRW50cnlCbG9jayA9IGNvZGVCbG9jazsKKyAg
ICAKKyAgICAvLyBGSVhNRTogaWYgd2UgZmFpbGVkLCB3ZSBtaWdodCB3YW50IHRvIGp1c3QgdHVy
biBvZmYgT1NSIGVudHJ5IHJhdGhlciB0aGFuCisgICAgLy8gdG90YWxseSB0dXJuaW5nIG9mZiB0
aWVyLXVwLgorICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6
YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgIHJlc3VsdCk7
Cit9CisKK30gfSAvLyBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNk
ZWZpbmUgREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisK
K25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayB7Citwcm90
ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGljOgorICAgIHZpcnR1
YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9j
ayk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3lu
Y2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRD
b21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29ya2xp
c3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7Ci0gICAgaWYgKCFlbmFibGVD
b25jdXJyZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHB0aHJlYWRfb25jZSgmaW5p
dGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25j
ZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5
OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgd29ya2xp
c3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRv
LCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBmdW5jdGlvbgogLy8gd2lsbCBs
YXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8KLS8vIFRoaXMgcmV0dXJucyBu
dWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBkb2luZyBjb25jdXJyZW50Ci0v
LyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDEx
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERG
RzsKIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQoraW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiB7CisgICAgLy8gTk9URTogSWYgd2UgZXZl
ciBoYXZlIHBoYW50b20gYXJndW1lbnRzLCB3ZSBjYW4gY29tcGlsZSB0aGVtIGJ1dCB3ZSBjYW5u
b3QKKyAgICAvLyBPU1IgZW50ZXIuCisgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkBAIC04MSw2ICs4
NCw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CisgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVh
azsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtOTAsMzkgKzk0LDM5IEBAIGlubGluZSBi
b29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFu
ZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2gg
KG5vZGUtPmFycmF5TW9kZSgpLnNwZWN1bGF0aW9uKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6
U2FuZUNoYWluOgogICAgICAgICBjYXNlIEFycmF5OjpJbkJvdW5kczoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIENhbkNv
bXBpbGVBbmRPU1JFbnRlcjsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNh
c2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb21wYXJlRXE6CkBAIC0xMzMsNyArMTM3LDcgQEAgaW5saW5lIGJv
b2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
IChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAg
IGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXI6CkBAIC0xNDIsNyArMTQ2LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFy
eVVzZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQnJhbmNoOgog
ICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKQEAgLTE1Miw3ICsxNTYsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTd2l0Y2g6CkBAIC0xNjEsMTggKzE2NSwyMyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5nIGVs
c2UuCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7
CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50
ZXI7CiB9CiAKLWJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCitDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiB7CisgICAgaWYgKGdyYXBoLm1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7
CisgICAgCisgICAgQ2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IENhbkNvbXBpbGVBbmRPU1JFbnRl
cjsKKyAgICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC0yMTAsMjUgKzIxOSwz
MiBAQCBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRlRMIHJlamVjdGluZyBub2RlIGJlY2F1c2Ugb2YgYmFkIHVzZSBraW5kOiAi
LCBlZGdlLnVzZUtpbmQoKSwgIiBpbiBub2RlOlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFjYW5Db21waWxlKG5vZGUp
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhbkNvbXBpbGUobm9kZSkpIHsKKyAgICAgICAgICAg
IGNhc2UgQ2Fubm90Q29tcGlsZTogCiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0
aW5nIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAgICAgZ3JhcGguZHVtcChXVEY6OmRhdGFG
aWxlKCksICIgICAgIiwgbm9kZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBDYW5Db21waWxlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlQW5kT1NSRW50ZXI6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGNhcmUgaWYgd2UgY2FuIGNvbXBpbGUgYW55dGhpbmcgYWZ0ZXIgYSBm
b3JjZS1leGl0LgogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRm9yY2VPU1JFeGl0KQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTMgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCi1ib29sIGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOworZW51
bSBDYXBhYmlsaXR5TGV2ZWwgeworICAgIENhbm5vdENvbXBpbGUsCisgICAgQ2FuQ29tcGlsZSwK
KyAgICBDYW5Db21waWxlQW5kT1NSRW50ZXIKK307CisKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKERGRzo6R3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworRm9yT1NSRW50cnlKSVRD
b2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JFbnRyeUpJVENvZGU6On5G
b3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JFbnRyeUpJVENvZGUqIEZvck9TUkVu
dHJ5SklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIHJldHVybiB0aGlzOworfQorCit2
b2lkIEZvck9TUkVudHJ5SklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiB2bSwgdW5z
aWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKQoreworICAgIG1fZW50cnlCdWZmZXIgPSB2bS5zY3Jh
dGNoQnVmZmVyRm9yU2l6ZShudW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExG
b3JPU1JFbnRyeUpJVENvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisjZGVmaW5lIEZUTEZvck9TUkVudHJ5SklUQ29k
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQor
CisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKKy8vIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwgaGFzIGEgbnVtYmVyIG9mIHF1aXJrczoK
Ky8vCisvLyAtIE9TUiBlbnRyeSBvbmx5IGhhcHBlbnMgdGhyb3VnaCBzcGVjaWFsIE9TUiBlbnRy
eSBjb21waWxhdGlvbnMuIFRoZXkgaGF2ZSB0aGVpcgorLy8gICBvd24gQ29kZUJsb2NrIGFuZCB0
aGVpciBvd24gSklUQ29kZS4KKy8vCisvLyAtIFdlIG9ubHkgT1NSIGVudGVyIGluIGxvb3AgaGVh
ZGVycyB0aGF0IGhhdmUgYSBudWxsIGlubGluZSBjYWxsIGZyYW1lLgorLy8KKy8vIC0gRWFjaCBP
U1IgZW50cnkgY29tcGlsYXRpb24gYWxsb3dzIGVudHJ5IHRocm91Z2ggb25seSBvbmUgYnl0ZWNv
ZGUgaW5kZXguCisKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZSA6IHB1YmxpYyBGVEw6OkpJVENv
ZGUgeworcHVibGljOgorICAgIEZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIH5Gb3JPU1JFbnRy
eUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFbnRyeUJ1ZmZlcihWTSYsIHVu
c2lnbmVkIG51bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZlciogZW50cnlCdWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9CisgICAgCisgICAgdm9pZCBzZXRC
eXRlY29kZUluZGV4KHVuc2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRleCA9IHZhbHVlOyB9
CisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJ
bmRleDsgfQorICAgIAorICAgIHZvaWQgY291bnRFbnRyeUZhaWx1cmUoKTsKKyAgICB1bnNpZ25l
ZCBlbnRyeUZhaWx1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlGYWlsdXJlQ291bnQ7
IH0KKyAgICAKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CisgICAg
Citwcml2YXRlOgorICAgIFNjcmF0Y2hCdWZmZXIqIG1fZW50cnlCdWZmZXI7IC8vIE9ubHkgZm9y
IE9TUiBlbnRyeSBjb2RlIGJsb2Nrcy4KKyAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgdW5zaWduZWQgbV9lbnRyeUZhaWx1cmVDb3VudDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGTFRfSklUKQorCisjZW5kaWYgLy8gRlRMRm9y
T1NSRW50cnlKSVRDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRD
b2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIHB1YmxpYzoKICAgICBz
aXplX3Qgc2l6ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCopOwogICAgIAorICAgIHZvaWQg
aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsK
KyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlC
dWZmZXI7IH0KKyAgICAKICAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwog
ICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4pOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoQ29kZVJlZiBlbnRyeXBvaW50KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1
NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOSBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxp
emVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJ
VENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBo
YWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAgICAKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2Nh
dGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0
eUNoZWNrOworICAgIGlmIChtX2FyaXR5Q2hlY2suaXNTZXQoKSkKKyAgICAgICAgd2l0aEFyaXR5
Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7
CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKICAgICAgICAgRklOQUxJWkVfREZHX0NP
REUoCiAgICAgICAgICAgICAqbV9lbnRyeXBvaW50TGlua0J1ZmZlciwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNzkgKzU1
LDExNCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgIC8vIExMVk0gd2lsbCBjcmVhdGUg
aXRzIG93biBqdW1wIHRhYmxlcyBhcyBuZWVkZWQuCiAgICAgY29kZUJsb2NrLT5jbGVhclN3aXRj
aEp1bXBUYWJsZXMoKTsKICAgICAKLSAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuCi0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSB0b3RhbCBrbHVkZ2UgLSBMTFZNIHNob3VsZCBqdXN0IHVzZSBv
dXIgY2FsbGluZyBjb252ZW50aW9uLgorICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90
ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQorICAgIC8v
IGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCisgICAg
Ly8gRklYTUU6IEV4Y2VwdCBmb3IgT1NSIGVudHJ5LCB0aGlzIGlzIGEgdG90YWwga2x1ZGdlIC0g
TExWTSBzaG91bGQganVzdCB1c2Ugb3VyCisgICAgLy8gY2FsbGluZyBjb252ZW50aW9uLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKICAgICBD
Q2FsbEhlbHBlcnMgaml0KCZzdGF0ZS5ncmFwaC5tX3ZtLCBjb2RlQmxvY2spOwogICAgIAotICAg
IGNvbXBpbGVFbnRyeShqaXQpOworICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyOwor
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgYXJpdHlDaGVjazsKKyAgICBzd2l0Y2ggKHN0YXRlLmdy
YXBoLm1fcGxhbi5tb2RlKSB7CisgICAgY2FzZSBGVExNb2RlOiB7CisgICAgICAgIGNvbXBpbGVF
bnRyeShqaXQpOwogICAgIAotICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3Ig
ZnVuY3Rpb25zLiBXZSBjdXJyZW50bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KKyAgICAgICAg
Ly8gVGhpcyBwYXJ0IGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBmdW5jdGlvbnMuIFdlIGN1cnJlbnRs
eSBvbmx5IGNvbXBpbGUgZnVuY3Rpb25zLgogICAgICAgICAKLSAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIGZyb21Bcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAgIENDYWxsSGVscGVyczo6
TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKICAgICAgICAgCi0gICAgLy8gUGxh
bnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0
YWNrLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTYyOTEKLSAgICBqaXQuYWRkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSks
Ci0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRyKAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkJlbG93LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRk
cmVzcyhzdGF0ZS5ncmFwaC5tX3ZtLmludGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgp
KSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJv
bVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgCi0gICAgaml0LnNldHVwQXJndW1l
bnRzRXhlY1N0YXRlKCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAg
IGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BS
SW5mbzo6cmVnVDEpOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGppdC5y
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0
LnJldCgpOwotICAgICAgICAKLSAgICBzdGFja0NoZWNrLmxpbmsoJmppdCk7Ci0gICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICBqaXQucG9rZSgKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
Ci0gICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1l
KSAvIHNpemVvZih2b2lkKikpOwotICAgICAgICAKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNC
eXRlY29kZU9mZnNldCgwKSksCi0gICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbFN0YWNrQ2hlY2sgPSBqaXQuY2FsbCgpOwotICAgIC8vIEZJWE1F
OiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5n
IHNvbWVob3cuIFRoaXMgaXMKLSAgICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBz
aG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KLSAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCi0gICAgaml0Lmp1bXAoZnJvbVN0YWNr
Q2hlY2spOwotICAgICAgICAKLSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGFyaXR5Q2hlY2sgPSBq
aXQubGFiZWwoKTsKLSAgICBjb21waWxlRW50cnkoaml0KTsKLSAgICBqaXQubG9hZDMyKAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICBqaXQuYnJhbmNoMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJ
bmZvOjpyZWdUMSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0
KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wb2tlKAotICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKLSAgICAgICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0Zy
YW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29k
ZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKLSAgICAvLyBG
SVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5k
bGluZyBzb21laG93LiBUaGlzIGlzCi0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBG
VEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5icmFuY2hUZXN0
MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNo
ZWNrLCAmaml0KTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Rml4dXAgPSBqaXQu
Y2FsbCgpOwotICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsKLSAgICAgICAgCi0gICAgT3du
UHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcihzdGF0
ZS5ncmFwaC5tX3ZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQp
KTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2sp
OwotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0Nv
bnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJp
dHlDaGVjayk7Ci0gICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25Q
dHIoKHN0YXRlLmdyYXBoLm1fdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2ll
bnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgorICAgICAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjkxCisgICAgICAgIGpp
dC5hZGRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgc3RhY2tDaGVjayA9IGppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkJlbG93LAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0
ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV92bS5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZF
bmQoKSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgCisgICAgICAg
IGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICBqaXQubW92ZSgKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLAorICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBq
aXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpT
U3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
IGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgCisgICAgICAgIHN0YWNrQ2hlY2subGluaygmaml0
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihz
dHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAg
ICAKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwK
KyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsKKyAgICAgICAgLy8gRklYTUU6IG5lZWQg
dG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhv
dy4gVGhpcyBpcworICAgICAgICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91
bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgorICAgICAgICBqaXQuanVtcChmcm9t
U3RhY2tDaGVjayk7CisgICAgICAgIAorICAgICAgICBhcml0eUNoZWNrID0gaml0LmxhYmVsKCk7
CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgICAgICBqaXQubG9hZDMyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3Zl
T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICAubGlua1Rv
KGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0
LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAg
ICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNp
emVvZih2b2lkKikpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVP
ZmZzZXQoMCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOworICAgICAgICAvLyBG
SVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5k
bGluZyBzb21laG93LiBUaGlzIGlzCisgICAgICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxl
bTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCisgICAgICAgIGpp
dC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlua1Rv
KGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxB
cml0eUZpeHVwID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2sp
OworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVy
KHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3Vj
Y2VlZCkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxTdGFja0NoZWNrLCBjdGlfc3Rh
Y2tfY2hlY2spOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2Rl
QmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0
aV9vcF9jYWxsX2FyaXR5Q2hlY2spOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0
eUZpeHVwLCBGdW5jdGlvblB0cigoc3RhdGUuZ3JhcGgubV92bS5nZXRDVElTdHViKGFyaXR5Rml4
dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CisgICAgICAgIC8vIFdl
IGp1bXAgdG8gaGVyZSBzdHJhaWdodCBmcm9tIERGRyBjb2RlLCBhZnRlciBoYXZpbmcgYm94ZWQg
dXAgYWxsIG9mIHRoZQorICAgICAgICAvLyB2YWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIu
IEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGdvb2QgdG8gZ28gLSBhdCB0aGlzCisgICAgICAgIC8vIHBv
aW50IHdlJ3ZlIGV2ZW4gZG9uZSB0aGUgc3RhY2sgY2hlY2suIEJhc2ljYWxseSB3ZSBqdXN0IGhh
dmUgdG8gbWFrZSB0aGUKKyAgICAgICAgLy8gY2FsbCB0byB0aGUgTExWTS1nZW5lcmF0ZWQgY29k
ZS4KKyAgICAgICAgaml0LnNldHVwQVJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgIGppdC5t
b3ZlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksCisgICAgICAgICAgICBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1
cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86
OnJlZ1QxKTsKKyAgICAgICAgaml0LnJldCgpOworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZl
ciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKAorICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92
bSwgJmppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIHN0
YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVyKGxpbmtCdWZmZXIu
cmVsZWFzZSgpKTsKICAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVGdW5jdGlvbihzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0Myw2ICsyNDMsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEFyZ3VtZW50OgogICAg
ICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0
T1NSRW50cnlMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CiAgICAgICAgICAgICBjb21waWxlR2V0TG9jYWwoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTA2LDYgKzUwOSwxMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAg
IHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCkKKyAgICB7CisgICAgICAgIHNldEpT
VmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oCisgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCkt
PmVudHJ5QnVmZmVyKCkpICsgb3BlcmFuZCkpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21w
aWxlR2V0TG9jYWwoKQogICAgIHsKICAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9y
IGNhcHR1cmVkIHZhcmlhYmxlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMT1NSRW50cnkuaCIKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJG
VExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeSgKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5
Q29kZUJsb2NrLAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIHN0cmVhbUlu
ZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgREZHOjpKSVRDb2RlKiBk
ZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIEZvck9TUkVudHJ5
SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlDb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NS
RW50cnkoKTsKKyAgICAKKyAgICBkYXRhTG9nKAorICAgICAgICAiRlRMIE9TUiBmcm9tICIsICpk
ZmdDb2RlQmxvY2ssICIgdG8gIiwgKmVudHJ5Q29kZUJsb2NrLCAiIGF0IGJjIyIsCisgICAgICAg
IGJ5dGVjb2RlSW5kZXgsICIuXG4iKTsKKyAgICAKKyAgICBpZiAoYnl0ZWNvZGVJbmRleCAhPSBl
bnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB3ZSBk
b24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI7IG91cnMg
aXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpTVmFsdWU+IHZhbHVlczsKKyAgICBkZmdD
b2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgZGZnQ29kZUJsb2NrLCBDb2RlT3JpZ2lu
KGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsKKyAgICAKKyAgICBmb3IgKGlu
dCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAgICAgIGV4ZWNbYXJndW1lbnRUb09wZXJh
bmQoYXJndW1lbnQpXS5qc1ZhbHVlKCkgPT0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KSk7Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlcy5udW1iZXJPZkxvY2FscygpID09
IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgCisgICAgRW5jb2RlZEpTVmFs
dWUqIHNjcmF0Y2ggPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICBlbnRy
eUNvZGUtPmVudHJ5QnVmZmVyKCktPmRhdGEoKSk7CisgICAgCisgICAgZm9yIChpbnQgbG9jYWwg
PSB2YWx1ZS5udW1iZXJPZkxvY2FscygpOyBsb2NhbC0tOykKKyAgICAgICAgc2NyYXRjaFtsb2Nh
bF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWVzLmxvY2FsKGxvY2FsKSk7CisgICAgCisgICAgaWYg
KCF2bS5pbnRlcnByZXRlci0+c3RhY2soKS5ncm93KAorICAgICAgICAgICAgJmV4ZWMtPnJlZ2lz
dGVycygpW2VudHJ5QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFp
bGVkIGJjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAKKyAgICBleGVjLT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxvY2spOworICAg
IAorICAgIHZvaWQgKnJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoKS5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRh
dGFMb2coIiAgICBFbnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3MiLCBSYXdQb2lu
dGVyKHJlc3VsdCksICJcbiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTE9TUkVudHJ5X2gKKyNkZWZpbmUgRlRMT1NSRW50cnlfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWNTdGF0ZTsKKworbmFtZXNw
YWNlIEZUTCB7CisKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeSgKKyAgICBFeGVjU3RhdGUqLCBDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwKKyAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMT1NSRW50cnlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNw
cAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoRlRMX0pJ
VCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVkZSAiRlRMSklU
Q29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTEZvck9T
UkVudHJ5SklUQ29kZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAg
LTQwLDkgKzQyLDIzIEBAIFN0YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgLCBjb250ZXh0
KExMVk1Db250ZXh0Q3JlYXRlKCkpCiAgICAgLCBtb2R1bGUoMCkKICAgICAsIGZ1bmN0aW9uKDAp
Ci0gICAgLCBqaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpKQogICAgICwgZ2VuZXJhdGVk
RnVuY3Rpb24oMCkKIHsKKyAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2RlKSB7CisgICAgY2Fz
ZSBGVExNb2RlOgorICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IEpJVENvZGUoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2RlOgorICAgICAgICBSZWZQ
dHI8Rm9yT1NSRW50cnlKSVRDb2RlPiBjb2RlID0gYWRvcHRSZWYobmV3IEZvck9TUkVudHJ5SklU
Q29kZSgpKTsKKyAgICAgICAgY29kZS0+aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKGdyYXBoLm1fcHJv
ZmlsZWRCbG9jay0+bV9udW1DYWxsZVJlZ2lzdGVycyk7CisgICAgICAgIGNvZGUtPnNldEJ5dGVj
b2RlSW5kZXgoZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGpp
dENvZGUgPSBjb2RlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCiAg
ICAgZmluYWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3BsYW4pOwogICAgIGdyYXBo
Lm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0Lmgi
CisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitD
b2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCgpIHsgfQorCitDb2RlQmxvY2tTZXQ6On5Db2RlQmxv
Y2tTZXQoKQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nl
dC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0
LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAoKml0ZXIp
LT5kZXJlZigpOworfQorCit2b2lkIENvZGVCbG9ja1NldDo6YWRkKFBhc3NSZWZQdHI8Q29kZUJs
b2NrPiBjb2RlQmxvY2spCit7CisgICAgYm9vbCBpc05ld0VudHJ5ID0gbV9zZXQuYWRkKGNvZGVC
bG9jay5sZWFrUmVmKCkpLmlzTmV3RW50cnk7CisgICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5
LCBpc05ld0VudHJ5KTsKK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3MoKQorewor
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOwor
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gKml0ZXI7CisgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNl
OworICAgICAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFs
c2U7CisgICAgfQorfQorCit2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJl
ZmVyZW5jZWQoKQoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBmaXhwb2ludCBiZWNhdXNl
IGNvZGUgYmxvY2tzIHRoYXQgYXJlIHVubWFya2VkIG1heQorICAgIC8vIHJlZmVyIHRvIGVhY2gg
b3RoZXIuIEZvciBleGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQgaXMgb3duZWQgYnkKKyAg
ICAvLyB0aGUgR0MgbWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkgY29kZSBibG9jayB0aGF0
IGlzIGFsc28gb3duZWQgYnkKKyAgICAvLyB0aGUgR0MuCisgICAgVmVjdG9yPENvZGVCbG9jayos
IDE2PiB0b1JlbW92ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiRml4cG9p
bnRpbmcgb3ZlciB1bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBtX3NldC5zaXplKCksICIuLi5cbiIp
OworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAg
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CisgICAg
ICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZW1vdmluZyAiLCB0b1JlbW92
ZS5zaXplKCksICIgYmxvY2tzLlxuIik7CisgICAgICAgIGlmICh0b1JlbW92ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG9SZW1vdmUu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV9zZXQucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAg
ICAgICAgdG9SZW1vdmUucmVzaXplKDApOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6
OnRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fc2V0LnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5c
biIpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdp
bigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgp
OworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgIGlmICghY29kZUJsb2NrLT5tX21heUJlRXhlY3V0
aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvZGVCbG9jay0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrU2V0X2gKKyNkZWZpbmUgQ29kZUJsb2NrU2V0X2gK
KworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsK
KworLy8gQ29kZUJsb2NrU2V0IHRyYWNrcyBhbGwgQ29kZUJsb2Nrcy4gRXZlcnkgQ29kZUJsb2Nr
IHN0YXJ0cyBvdXQgd2l0aCBvbmUKKy8vIHJlZmVyZW5jZSBjb21pbmcgaW4gZnJvbSBHQy4gVGhl
IEdDIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIENvZGVCbG9ja3MKKy8vIG9uY2UgdGhleSBo
YXNPbmVSZWYoKSBhbmQgbm9ib2R5IGlzIHJ1bm5pbmcgY29kZSBmcm9tIHRoYXQgQ29kZUJsb2Nr
LgorCitjbGFzcyBDb2RlQmxvY2tTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGVC
bG9ja1NldCk7CisKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tTZXQoKTsKKyAgICB+Q29kZUJsb2Nr
U2V0KCk7CisgICAgCisgICAgLy8gQWRkIGEgQ29kZUJsb2NrLiBUaGlzIGlzIG9ubHkgY2FsbGVk
IGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0
aCBERkcgY29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgLy8g
TWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRo
ZSBzZXQgb2YgREZHCisgICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQgaW4gQ29kZUJsb2Nr
LmguCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CisgICAgCisgICAg
Ly8gRGVsZXRlIGFsbCBjb2RlIGJsb2NrcyB0aGF0IGFyZSBvbmx5IHJlZmVyZW5jZWQgYnkgdGhp
cyBzZXQgKGkuZS4gb3duZWQKKyAgICAvLyBieSB0aGlzIHNldCksIGFuZCB0aGF0IGhhdmUgbm90
IGJlZW4gbWFya2VkLgorICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsK
KyAgICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzLiBUaGUgQ29kZUJsb2Nr
IGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YKKyAgICAvLyBtYXlCZUV4ZWN1dGluZy4KKyAgICB2b2lk
IHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBu
b3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUg
dG8gZmluZAorICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVycy4gSSBjb3VsZCBoYXZlIHdy
aXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcworICAgIC8vIGFuZCBhbGwsIGJ1dCB0
aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgorICAgIEhhc2hTZXQ8Q29kZUJsb2NrKiA+IG1fc2V0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb2RlQmxvY2tTZXRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKICNp
bmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNs
dWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKQEAgLTE0MCwxMCArMTQwLDkgQEAgcHJpdmF0ZToKIH07CiAKIHZvaWQgQ29uc2Vy
dmF0aXZlUm9vdHM6OmFkZCgKLSAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91
dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQor
ICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91
dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKLSAgICBDb21wb3NpdGVNYXJrSG9v
azxKSVRTdHViUm91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hvb2soCi0gICAgICAgIGpp
dFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgQ29tcG9zaXRlTWFya0hvb2s8SklU
U3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hvb2soaml0U3R1YlJvdXRpbmVzLCBj
b2RlQmxvY2tzKTsKICAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKK2NsYXNzIENvZGVCbG9ja1NldDsK
IGNsYXNzIEhlYXA7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQq
IGVuZCk7CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRp
bmVTZXQmKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91
dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOwogICAgIAogICAgIHNp
emVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5o
IgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLURGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MoKSB7IH0KLQotREZHQ29kZUJs
b2Nrczo6fkRGR0NvZGVCbG9ja3MoKQotewotICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiwg
MTY+IHRvUmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0
b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewot
ICAgICAgICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNKZXR0aXNvbmVk
KQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQot
fQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBj
b2RlQmxvY2tQdHIpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWxldGUgaXQgbm93OyB3
ZSBqdXN0IHdhbnQgaXRzIHBvaW50ZXIuCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2Rl
QmxvY2tQdHIubGVha1JlZigpOwotICAgIAotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFT
U0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAg
ICAKLSAgICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuCi0g
ICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlzb25l
ZCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGlzIGJsb2NrIGFscmVhZHkuCi0gICAgQVNT
RVJUKG1fc2V0LmZpbmQoY29kZUJsb2NrKSAhPSBtX3NldC5lbmQoKSk7Ci0gICAgCi0gICAgY29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgPSB0cnVlOwotfQot
Ci12b2lkIERGR0NvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQotewotICAgIGZvciAoSGFzaFNldDxD
b2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICAoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOwotICAgICAgICAoKml0ZXIpLT5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpLT52aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKLSAgICB9Ci19
Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2Nr
cygpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+LCAxNj4gdG9SZW1vdmU7Ci0gICAg
Ci0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVn
aW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIp
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgJiYgISgqaXRlciktPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgdG9SZW1vdmUu
YXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6
OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3Ig
KEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVy
ICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgKCppdGVyKS0+dmlz
aXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgfQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJ
VCkKLQotdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4p
Ci17Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJs
b2Nrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdDb2RlQmxvY2tzX2gKLSNk
ZWZpbmUgREZHQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwot
Ci0vLyBERkdDb2RlQmxvY2tzIG5vdGlmaWVzIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBhYm91dCBv
cHRpbWl6ZWQgY29kZSBibG9ja3MgdGhhdAotLy8gaGF2ZSBkaWZmZXJlbnQgbWFya2luZyBiZWhh
dmlvciBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhleSBhcmUgb24gdGhlCi0vLyBzdGFj
aywgYW5kIHRoYXQgbWF5IGJlIGpldHRpc29uZWQuIEpldHRpc29uaW5nIGlzIHRoZSBwcm9jZXNz
IG9mIGRpc2NhcmRpbmcKLS8vIGEgY29kZSBibG9jayBhZnRlciBhbGwgY2FsbHMgdG8gaXQgaGF2
ZSBiZWVuIHVubGlua2VkLiBUaGlzIGNsYXNzIHRha2VzIHNwZWNpYWwKLS8vIGNhcmUgdG8gZW5z
dXJlIHRoYXQgaWYgdGhlcmUgYXJlIHN0aWxsIGNhbGwgZnJhbWVzIHRoYXQgYXJlIHVzaW5nIHRo
ZSBjb2RlCi0vLyBibG9jaywgdGhlbiBpdCBzaG91bGQgbm90IGJlIGltbWVkaWF0ZWx5IGRlbGV0
ZWQsIGJ1dCByYXRoZXIsIGl0IHNob3VsZCBiZQotLy8gZGVsZXRlZCBvbmNlIHdlIGtub3cgdGhh
dCB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSByZWZlcmVuY2VzIHRvIGl0IGZyb20gYW55Ci0vLyBj
YWxsIGZyYW1lcy4gVGhpcyBjbGFzcyB0YWtlcyBpdHMgbmFtZSBmcm9tIHRoZSBERkcgY29tcGls
ZXI7IG9ubHkgY29kZSBibG9ja3MKLS8vIGNvbXBpbGVkIGJ5IHRoZSBERkcgbmVlZCBzcGVjaWFs
IG1hcmtpbmcgYmVoYXZpb3IgaWYgdGhleSBhcmUgb24gdGhlIHN0YWNrLCBhbmQKLS8vIG9ubHkg
dGhvc2UgY29kZSBibG9ja3MgbWF5IGJlIGpldHRpc29uZWQuCi0KLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLWNsYXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
Ci1wdWJsaWM6Ci0gICAgREZHQ29kZUJsb2NrcygpOwotICAgIH5ERkdDb2RlQmxvY2tzKCk7Ci0g
ICAgCi0gICAgLy8gSW5mb3JtIHRoZSBjb2xsZWN0b3IgdGhhdCBhIGNvZGUgYmxvY2sgaGFzIGJl
ZW4gamV0dGlzb25lZCBmb3JtIGl0cwotICAgIC8vIGV4ZWN1dGFibGUgYW5kIHNob3VsZCBvbmx5
IGJlIGtlcHQgYWxpdmUgaWYgdGhlcmUgYXJlIGNhbGwgZnJhbWVzIHRoYXQgdXNlCi0gICAgLy8g
aXQuIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBlaXRoZXIgZnJvbSBhIHJlY29tcGlsYXRpb24g
dHJpZ2dlciwgb3IgZnJvbQotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIGFzc29j
aWF0ZWQgd2l0aCBhIENvZGVCbG9jayB0aGF0IGhhZCB3ZWFrCi0gICAgLy8gcmVmZXJlbmNlcywg
d2hlcmUgc29tZSBzdWJzZXQgb2YgdGhvc2UgcmVmZXJlbmNlcyB3ZXJlIGRlYWQuCi0gICAgdm9p
ZCBqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwotICAgIAotICAgIC8vIENsZWFyIGFs
bCBtYXJrIGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2RlIGJsb2Nrcy4KLSAgICB2b2lkIGNs
ZWFyTWFya3MoKTsKLSAgICAKLSAgICAvLyBNYXJrIGEgcG9pbnRlciB0aGF0IG1heSBiZSBhIENv
ZGVCbG9jayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcgY29kZQotICAgIC8vIGJsb2Nr
cy4gVGhpcyBpcyBkZWZpbmVkIGlubGluZSBpbiBDb2RlQmxvY2suaAotICAgIHZvaWQgbWFyayh2
b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOwotICAgIAotICAgIC8vIERlbGV0ZSBhbGwgamV0dGlz
b25lZCBjb2RlIGJsb2NrcyB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2VkIChpLmUuIGFyZSBub3Qg
cmVmZXJlbmNlZAotICAgIC8vIGZyb20gY2FsbCBmcmFtZXMpLgotICAgIHZvaWQgZGVsZXRlVW5t
YXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAotICAgIC8vIFRyYWNlIGFsbCBtYXJr
ZWQgY29kZSBibG9ja3MgKGkuZS4gYXJlIHJlZmVyZW5jZWQgZnJvbSBjYWxsIGZyYW1lcykuIFRo
ZSBDb2RlQmxvY2sKLSAgICAvLyBpcyBmcmVlIHRvIG1ha2UgdXNlIG9mIG1fZGZnRGF0YS0+aXNN
YXJrZWQgYW5kIG1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkLgotICAgIHZvaWQgdHJhY2VNYXJrZWRD
b2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENv
ZGVCbG9jazsKLSAgICAKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fc2V0OwotfTsKLSNlbHNl
Ci1jbGFzcyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQot
cHVibGljOgotICAgIHZvaWQgamV0dGlzb24oUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKLSAgICB2
b2lkIGNsZWFyTWFya3MoKSB7IH0KLSAgICB2b2lkIG1hcmsodm9pZCopIHsgfQotICAgIHZvaWQg
ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpIHsgfQotICAgIHZvaWQgdHJhY2VN
YXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJikgeyB9Ci19OwotI2VuZGlmCi0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDExICszNTQsNiBAQCBib29sIEhlYXA6OnVucHJvdGVj
dChKU1ZhbHVlIGspCiAgICAgcmV0dXJuIG1fcHJvdGVjdGVkVmFsdWVzLnJlbW92ZShrLmFzQ2Vs
bCgpKTsKIH0KIAotdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENv
ZGVCbG9jaz4gY29kZUJsb2NrKQotewotICAgIG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2Rl
QmxvY2spOwotfQotCiB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5
QnVmZmVyKiBidWZmZXIpCiB7CiAgICAgaWYgKG1fYXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShj
ZWxsLCBidWZmZXIpKSB7CkBAIC00NTcsMTEgKzQ1MiwxMCBAQCB2b2lkIEhlYXA6Om1hcmtSb290
cygpCiAgICAgfQogCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgc3RhY2tSb290cygmbV9vYmplY3RT
cGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKLSAgICBtX2RmZ0NvZGVCbG9ja3MuY2xl
YXJNYXJrcygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAg
ICBHQ1BIQVNFKEdhdGhlclN0YWNrUm9vdHMpOwotICAgICAgICBzdGFjaygpLmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKAotICAgICAgICAgICAgc3RhY2tSb290cywgbV9qaXRTdHViUm91dGluZXMs
IG1fZGZnQ29kZUJsb2Nrcyk7CisgICAgICAgIHN0YWNrKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoc3RhY2tSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1fY29kZUJsb2Nrcyk7CiAgICAgfQog
CiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC00ODUsMTIgKzQ3OSw2IEBAIHZvaWQgSGVhcDo6bWFy
a1Jvb3RzKCkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcih2aXNp
dG9yKTsKIAotICAgICAgICBpZiAobV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQu
c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgbV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGls
ZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgICAgICB9Ci0KICAgICAgICAgbV92
bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKIAogICAgICAg
ICB7CkBAIC01NTgsNyArNTQ2LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICB7
CiAgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk7
CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyBh
bmQgSklUIFN0dWIgUm91dGluZXMiKTsKLSAgICAgICAgICAgIG1fZGZnQ29kZUJsb2Nrcy50cmFj
ZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBtX2NvZGVCbG9ja3MudHJh
Y2VNYXJrZWQodmlzaXRvcik7CiAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy50cmFjZU1h
cmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKICAgICAgICAgfQpAQCAtNjgzLDggKzY3MSw4IEBAIHZvaWQgSGVhcDo6ZGVsZXRl
QWxsQ29tcGlsZWRDb2RlKCkKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oY3VycmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgfQogCi0gICAgbV9k
ZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5t
YXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtz
KCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7CiB9
CiAKIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQpAQCAtNzAxLDcgKzY4
OSw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAgICAgICBt
X2NvbXBpbGVkQ29kZS5yZW1vdmUoY3VycmVudCk7CiAgICAgfQogCi0gICAgbV9kZmdDb2RlQmxv
Y2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICBtX2NvZGVCbG9j
a3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsKICAgICBtX2ppdFN0dWJSb3V0aW5l
cy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAK
ICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNs
dWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQu
aCIKQEAgLTE0NCw4ICsxNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50
IGRyb3BzIHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lkIGpldHRpc29uREZHQ29kZUJsb2Nr
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0KICAgICAgICAgc2l6ZV90IGV4dHJhU2l6ZSgpOyAv
LyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGhl
YXAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHNpemUoKTsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0yNzMsNyArMjcxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBI
YW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZnQ29k
ZUJsb2NrczsKKyAgICAgICAgQ29kZUJsb2NrU2V0IG1fY29kZUJsb2NrczsKICAgICAgICAgSklU
U3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAgIEZpbmFsaXplck93bmVy
IG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Niw5ICs5Niw5IEBAIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ28K
ICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFjaygpKTsKIH0K
IAotdm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290
cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMs
IERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCit2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1
YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQog
ewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGpp
dFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRk
KGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsK
IH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw4ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3Mg
Q29kZUJsb2NrU2V0OwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwotICAgIGNsYXNzIERG
R0NvZGVCbG9ja3M7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIEpJVFN0dWJSb3V0
aW5lU2V0OwogICAgIGNsYXNzIFZNOwpAQCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfkpTU3RhY2soKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAgdm9pZCBnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgREZH
Q29kZUJsb2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmKTsKIAogICAg
ICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZWdpc3Rl
cio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBSZWdpc3RlciogZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBhc0lubGluZUNh
bGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQzMigpIGNvbnN0Owog
ICAgICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSB1bmJv
eGVkRG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hlZENlbGwoKSBjb25zdDsK
ICAgICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgdGFnKCkg
Y29uc3Q7CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSW5z
dHJ1Y3Rpb24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lOwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBlbmNvZGVkVmFsdWU7Cisg
ICAgICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAgICAgfTsKIApAQCAtMTg4
LDYgKzE5MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuICEhcGF5bG9hZCgp
OwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lzdGVyOjp1bmJveGVkRG91
YmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJlcjsKKyAgICB9CisKICAg
ICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkgY29uc3QKICAg
ICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRp
bWl6YXRpb25DaGVjaygpCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3Rl
ZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksIEFi
c29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkp
OworICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0
ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKICAg
ICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3B0aW1pemUpOwogICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgQVNTRVJU
KCFtX2J5dGVjb2RlT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAgRlRMOjpKSVRDb2RlKiBK
SVRDb2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZvck9TUkVudHJ5SklUQ29k
ZSogSklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29k
ZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3
IEBAIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwogfQogbmFtZXNwYWNlIEZUTCB7
CitjbGFzcyBGb3JPU1JFbnRyeUpJVENvZGU7CiBjbGFzcyBKSVRDb2RlOwogfQogCkBAIC0xNzQs
NiArMTc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24oKTsKICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAgICAgdmlydHVhbCBGVEw6
OkpJVENvZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGZ0
bEZvck9TUkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqLCBDYWxs
RnJhbWUqLCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE2ICsxMDM2LDMyIEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGls
YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9Ci0gICAgICAgICAgICBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7Ci0gICAgICAgIFJlZlB0
cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsK
LSAgICAgICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2bS53b3Jr
bGlzdCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dp
dGhWYWx1ZXM7CisgICAgICAgIGlmIChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgbnVtVmFy
c1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOworICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPiBt
dXN0SGFuZGxlVmFsdWVzKAorICAgICAgICAgICAgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3Vt
ZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRp
b25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgICAgIC8vIFVnaC4g
SWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBn
YXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJ
dCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAg
ICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNh
biBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgICAgICAv
LyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCisg
ICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAotICAg
ICAgICAgICAgY2FsbEZyYW1lLCBuZXdDb2RlQmxvY2suZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0
ZWNvZGVJbmRleCwgY2FsbGJhY2ssCi0gICAgICAgICAgICB2bS53b3JrbGlzdC5nZXQoKSk7Cisg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBERkc6OkRG
R01vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksCisgICAgICAgICAgICB2
bS5lbnN1cmVXb3JrbGlzdCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29t
cGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NCwxNSArMTA3
MCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIENvZGVCbG9j
ayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwogICAgIEFT
U0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICAKLSAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6RlRMSklUKSB7Ci0gICAgICAgIC8vIEZUTCBKSVQgZG9lc24ndCBzdXBwb3J0IE9TUiBl
bnRyeSB5ZXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjUKLSAgICAgICAgCi0gICAgICAgIC8vIERvbid0IGF0dGVtcHQgT1NSIGVudHJ5
IGFnYWluLgotICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6
OnByZXBhcmVPU1JFbnRyeShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJ
bmRleCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAg
ICAgZGF0YUxvZygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMjAgKzkwLDYgQEAgSW50
cmluc2ljIE5hdGl2ZUV4ZWN1dGFibGU6OmludHJpbnNpYygpIAogfQogI2VuZGlmCiAKLSNpZiBF
TkFCTEUoSklUKQotLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBmb3IgamV0dGlzb25pbmcgY29kZSBi
bG9ja3MuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxv
Y2soVk0mIHZtLCBSZWZQdHI8VD4mIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgUmVmUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24g
PSBjb2RlQmxvY2sucmVsZWFzZSgpOwotICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgIGNv
ZGVCbG9ja1RvSmV0dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICB2bS5oZWFwLmpl
dHRpc29uREZHQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxv
Y2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOwotfQotI2VuZGlmCi0KIGNvbnN0IENsYXNzSW5mbyBT
Y3JpcHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFi
bGVCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJs
ZSkgfTsKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xMjUsMTIgKzExMSw2IEBAIHZvaWQgU2NyaXB0
RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICAKICAgICBBU1NFUlQodm0uaGVhcC5p
c0RlZmVycmVkKCkpOwogICAgIAotICAgIGlmIChKSVRDb2RlOjppc0pJVChnZW5lcmljQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0
KAotICAgICAgICAgICAgc2l6ZW9mKENvZGVCbG9jaykgKyBnZW5lcmljQ29kZUJsb2NrLT5qaXRD
b2RlKCktPnNpemUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KHNpemVvZihDb2RlQmxvY2spKTsKLSAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQgPSBnZW5lcmljQ29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAg
ICAKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBvbGRDb2RlQmxvY2s7CkBAIC0zNzYsMTUgKzM1Niw2
IEBAIGlubGluZSBjb25zdCBjaGFyKiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEoKICAgICB9CiB9CiAK
LSNpZiBFTkFCTEUoSklUKQotdm9pZCBFdmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRD
b2RlKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9ldmFsQ29kZUJsb2Nr
KTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9ldmFsQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0g
ICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotfQotI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0KIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KGNlbGwpOwpAQCAtNDI2LDE1ICszOTcs
NiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJu
IGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UpOwogfQog
Ci0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1p
emVkQ29kZShWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fcHJvZ3JhbUNv
ZGVCbG9jayk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0
Q29kZSgpOwotICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLX0K
LSNlbmRpZgotCiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYg
RU5BQkxFKEpJVCkKQEAgLTUxOCwyMiArNDgwLDYgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiBFTkFCTEUoSklU
KQotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwo
Vk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX2NvZGVCbG9ja0ZvckNhbGwp
OwotICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPmppdENvZGUoKTsK
LSAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwt
PmppdENvZGVXaXRoQXJpdHlDaGVjaygpOwotfQotCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZNJiB2bSkKLXsKLSAgICBqZXR0aXNv
bkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIG1faml0Q29kZUZv
ckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5qaXRDb2RlKCk7Ci0gICAgbV9q
aXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSwxMCArNDQ1LDYg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotI2lmIEVO
QUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSNlbmRpZgot
CiAgICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrKCkKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2V2YWxDb2RlQmxvY2suZ2V0KCk7CkBAIC01MDYsMTAgKzUwMiw2IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0jZW5kaWYKLQogICAgIFByb2dyYW1Db2Rl
QmxvY2sqIGNvZGVCbG9jaygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9wcm9ncmFtQ29kZUJs
b2NrLmdldCgpOwpAQCAtNTgxLDEwICs1NzMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKICAgICB9CiAgICAgICAgIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJik7Ci0jZW5k
aWYKLQogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CkBAIC01OTUsMTAgKzU4Myw2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKICAgICB9CiAKLSNpZiBF
TkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZN
Jik7Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAtNjA5LDE4
ICs1OTMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC5nZXQoKTsKICAgICB9CiAgICAgICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0
aXNvbk9wdGltaXplZENvZGVGb3IoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgCi0gICAgICAgICAgICBq
ZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKHZtKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgICAgIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCh2bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKLSAgICAgICAgCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU2LDkgKzE1NiwxMyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwog
ICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAsIDEwMDApIFwKICAg
ICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgMTAwMCkgXAog
ICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplU29vbiwgMTAwMCkgXAotICAgIFwKICAg
ICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCwgMSkgXAotICAgIHYo
aW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KSBcCisgICAgdihp
bnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5LCAxNSkgXAorICAgIFwKKyAg
ICB2KGludDMyLCB0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwLCAxMDAwMCkgXAor
ICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbiwgMTAwMCkgXAorICAgIHYo
aW50MzIsIGZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAxKSBcCisgICAgdihpbnQz
MiwgZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpIFwKICAgICBcCiAgICAg
dihpbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwKSBcCiAgICAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTAsNiAr
NzEwLDE1IEBAIHZvaWQgVk06OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnYKICAgICAg
ICAgfQogICAgIH0KIH0KKworREZHOjpXb3JrbGlzdCogVk06OmVuc3VyZVdvcmtsaXN0KCkKK3sK
KyAgICBpZiAoIURGRzo6ZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERGRzo6Z2xvYmFsV29ya2xp
c3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11
bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVs
dGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAg
IERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CkBA
IC0yNzQsMTcgKzI3OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBOdW1lcmljU3RyaW5n
cyBudW1lcmljU3RyaW5nczsKICAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNl
Q2FjaGU7CiAgICAgICAgIFdURjo6U2ltcGxlU3RhdHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVj
b2RlV29yZEZvckJhc2VsaW5lSklUOwotICAgICAgICBWZWN0b3I8Q29kZUJsb2NrKj4gY29kZUJs
b2Nrc0JlaW5nQ29tcGlsZWQ7Ci0gICAgICAgIHZvaWQgc3RhcnRlZENvbXBpbGluZyhDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKLSAgICAgICAgewotICAgICAgICAgICAgY29kZUJsb2Nrc0JlaW5nQ29t
cGlsZWQuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlz
aGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrID09IGNvZGVCbG9ja3NCZWluZ0Nv
bXBpbGVkLmxhc3QoKSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgIH0KIAogICAgICAgICB2b2lkIHNldEluRGVmaW5lT3duUHJvcGVy
dHkoYm9vbCBpbkRlZmluZU93blByb3BlcnR5KQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MTU0OTYzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMy0wOS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIENvZGVCbG9jazo6amV0dGlzb24oKSBzaG91bGQgYmUgaW1wbGljaXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDU2NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTWFrZSBpdCBw
b3NzaWJsZSB0byBnZXQgYSBSZWZDb3VudGVkQXJyYXkncyByZWZDb3VudCgpIHNvIHRoYXQgYSBD
b2RlQmxvY2sKKyAgICAgICAgY2FuIGNvbXB1dGUgaXRzIHBhcnQgb2YgdGhlIGZvb3RwcmludCBv
ZiBhbiBJbnN0cnVjdGlvbiBhcnJheSBieSBkb2luZworICAgICAgICBzb21ldGhpbmcgbGlrZSBz
aXplKCkgLyByZWZDb3VudCgpLgorCisgICAgICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5oOgor
ICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OnJlZkNvdW50KToKKwogMjAxMy0wOS0wMiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBm
b3IgSGFyZEF1dG9yZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIs
MTMgQEAgcHVibGljOgogICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0
YSkpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudDsKKyAgICB9CisgICAgCiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2RhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210309</attachid>
            <date>2013-09-02 13:54:42 -0700</date>
            <delta_ts>2013-09-02 15:17:22 -0700</delta_ts>
            <desc>it builds</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>186641</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGhhcyBzb21lIHNtYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9u
cy4gSlNCZW5jaC9nb29nbGUKKyAgICAgICAgc2hvd3MgYSB+OSUgcmVncmVzc2lvbiBiZWNhdXNl
IGl0IEdDJ3MgbW9yZSBmcmVxdWVudGx5LiBIb3dldmVyLCB0aGF0CisgICAgICAgIHJlZ3Jlc3Np
b24gaXMgbm90IGR1ZSB0byB0aGUgamV0dGlzb24gcmVmYWN0b3JpbmcgLSBpbnN0ZWFkIGl0J3Mg
ZHVlIHRvCisgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhpcyBjaGFuZ2UgYWxzbyBtYWtlcyB1cyBt
b3JlIHByZWNpc2VseSB0cmFjayBDb2RlQmxvY2sKKyAgICAgICAgbWVtb3J5IGZvb3RwcmludC4g
UHJldmlvdXNseSwgd2UgaWdub3JlZCB0aGUgc2l6ZSBvZiB0aGUgYnl0ZWNvZGUgc3RyZWFtLgor
ICAgICAgICBOb3cgd2UgZG9uJ3QgaWdub3JlIGl0IGFueXdheS4gVGhpcyBjYXVzZXMgc29tZSBi
ZW5jaG1hcmtzIHRvIEdDIG1vcmUKKyAgICAgICAgZnJlcXVlbnRseS4gSXQncyBhIGJ1ZyB0byBo
YXZlIHRoZSBHQyBpZ25vcmUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAgICAgQ29kZUJs
b2NrcywgYW5kIGlmIHRoYXQgYnVnIGNhdXNlcyBzb21lIGJlbmNobWFyayB0byBydW4gYSBiaXQg
ZmFzdGVyCisgICAgICAgIHdoaWxlIHVzaW5nIGEgYml0IG1vcmUgbWVtb3J5LCB0aGVuIGl0J3Mg
c3RpbGwgYSBidWcgYW5kIHdlIHNob3VsZCBzdGlsbAorICAgICAgICBmaXggaXQuIFRoZXJlIGFy
ZSBubyBvdGhlciBwZXJmb3JtYW5jZSBjaGFuZ2VzIGR1ZSB0byB0aGlzIGNoYW5nZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRk
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgor
ICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNr
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBmb3IgSGFyZEF1dG9y
ZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwzMCArMTY5
LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGlzYXNzZW1ibGVyL1g4NkRp
c2Fzc2VtYmxlci5jcHAKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3IuY3BwCi0gICAgaGVhcC9D
b3BpZWRTcGFjZS5jcHAKLSAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAotICAgIGhlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAot
ICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKLSAgICBoZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCi0gICAgaGVhcC9HQ1RocmVhZC5jcHAKLSAgICBoZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKLSAgICBoZWFwL0hhbmRsZVNldC5jcHAKLSAgICBoZWFw
L0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSGVhcC5jcHAKLSAgICBoZWFwL0hlYXBTdGF0aXN0
aWNzLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAotICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAotICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCi0gICAgaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCi0KLSAgICBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAorICAgIGhlYXAv
Q29kZUJsb2NrU2V0LmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVh
cC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvREZH
Q29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcApAQCAtMjAwLDYgKzE4MCw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAv
SGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCisgICAgaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBo
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAgICBoZWFwL01hcmtTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQyLDYgKzQ0Miw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaCBcCkBAIC00NTYsOCArNDU4
LDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDExICs4MiwxMSBAQCBTT1VSQ0VTICs9IFwK
ICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAorICAg
IGhlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAgICAgaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaCBc
CiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwIFwK
ICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tz
LmNwcCBcCiAgICAgaGVhcC9XZWFrLmNwcCBcCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwIFwKICAg
ICBoZWFwL1dlYWtIYW5kbGVPd25lci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RyaXZlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNz
ZW1ibGVyXERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxDb2RlQmxvY2tTZXQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29uc2VydmF0aXZlUm9vdHMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29waWVkU3BhY2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVZpc2l0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
REZHQ29kZUJsb2Nrcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxH
Q1RocmVhZC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGFu
ZGxlU2V0LmNwcCIgLz4NCkBAIC02NzksNiArNjc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3BpZWRBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcGllZEJsb2NrLmgiIC8+DQpAQCAtNjg5LDcgKzY5MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvcklubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXENvcHlXb3JrTGlzdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcREZHQ29kZUJsb2Nrcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1RocmVhZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWRTaGFyZWREYXRhLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4
LDYgQEAKIAkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0QzE1
MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLzsgfTsKIAkJMEYyQkRDNEYx
NTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBE
RkdWYWx1ZVNvdXJjZS5jcHAgKi87IH07CiAJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkxMCAvKiBE
RkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNw
cCAqLzsgfTsKLQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9
OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAw
M0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZp
ZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5
NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAq
LzsgfTsKQEAgLTM2OSw2ICszNjcsMjAgQEAKIAkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07
CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CisJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xMzU0LDgg
KzEzNjYsNiBAQAogCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkTm9k
ZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVlU291cmNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29kZUJs
b2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MDE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7
IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNl
S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU4LDYgKzE1NjgsMjAg
QEAKIAkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTUz
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVj
dWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzExMTdE
NDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMRm9yT1NSRW50cnlKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE3MTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPU1JFbnRyeS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRW50cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NS
RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRW50cnkuaDsg
cGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMUUxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIw
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHBhdGgg
PSBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgcGF0aCA9IGRmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRsL0ZU
TEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dv
cmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTM5LDYgKzI1NjMsOCBAQAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEw
NDE3QSAvKiBGVExGYWlsLmNwcCAqLywKIAkJCQlBN0YyOTk2QTE3QTBCQjY3MDAxMDQxN0EgLyog
RlRMRmFpbC5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0
ZWRWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwICovLAorCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyog
RlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBBMjIxNzA5NjA2OTAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTI1NTEsNiArMjU3Nyw4
IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNw
cCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
aCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1
ZS5oICovLAorCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAg
Ki8sCisJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggKi8sCiAJ
CQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICovLAogCQkJCTBG
MjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCiAJCQkJMEYyMzVCQzgx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLywKQEAgLTI3
MTUsNiArMjc0Myw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgxNkUxOTE1NENDNTZDMDBC
ODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuY3BwICovLAogCQkJCTE0ODE2RTFBMTU0Q0M1NkMwMEI4
MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovLAorCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0
MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAorCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAv
KiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCAqLywKQEAgLTI3MjksOCArMjc1OSw2IEBACiAJCQkJQzIyMzlEMTQx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMThEMTNG
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFE
NjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAotCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKLQkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBH
Q0Fzc2VydGlvbnMuaCAqLywKIAkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCAqLywKIAkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCkBAIC0zNTI0LDYgKzM1NTIsOCBAQAogCQkJ
CUE3RDg5Q0VGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLywK
KwkJCQkwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwICovLAorCQkJCTBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovLAogCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgKi8sCkBAIC0zNTY2LDYgKzM1OTYsMTIgQEAKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlG
MTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4
QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZEOEEzMjAx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLywKKwkJ
CQkwRkQ4QTMyMTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovLAorCQkJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCTBGRDhBMzIzMTdENTFGNTcw
MENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCAqLywKKwkJCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGNjM5NDNDMTVDNzVG
MTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjYz
OTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKQEAgLTM4OTEsNyArMzkyNyw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQw
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTk5LDcgQEAKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTc3LDYg
KzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2
RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBACiAJCQkJMTRCQTdBOTgxM0FBREZGODAw
NUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0Uw
MERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTIsNiArNDMzMCw3IEBACiAJ
CQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJB
MyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBC
MzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3
QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzFBMTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJl
Z0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1LDYgKzQzODUsNyBAQAogCQkJCTBGQjdG
MzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5
NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FC
NjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8q
IFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2
QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZE
RDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMy
QTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAv
KiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYg
KzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENv
bW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZl
cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDgyNSw3ICs0ODY5LDYgQEAKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdB
NDI0MTE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4ODYsNiArNDkyOSw3IEBA
CiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI5MTdENTFG
NTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0
QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5ODcsNiArNTAzMSw3IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pT
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8q
IEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzEzMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcgQEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JF
OEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkx
NkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTExLDYgKzUxNTcsNyBA
QAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxNDEsNiAr
NTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBT
dXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1f
aXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAg
ICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9vd25lckV4ZWN1dGFi
bGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293
bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92bSkKQEAgLTE1MDQsNiAr
MTUwNSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5k
aWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxOCw5IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVhcC0+
bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTUyNSw2ICsxNTMwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSkKICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQogICAgICwgbV9v
d25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQogICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE1
NDQsNyArMTU1MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8K
ICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQp
CiAjZW5kaWYKIHsKLSAgICBtX3ZtLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAKICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNl
dE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CkBAIC0x
ODQyLDcgKzE4NDgsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBk
dW1wQnl0ZWNvZGUoKTsKLSAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKyAgICBt
X2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4NTAs
MTIgKzE4NTcsNiBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGlmIChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CiAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
Ly8gUmVtb3ZlIG15c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBOb3RlIHRo
YXQgSSBtYXkgbm90IGJlIGluIHRoaXMgc2V0Ci0gICAgLy8gKGJlY2F1c2UgSSdtIG5vdCBhIERG
RyBjb2RlIGJsb2NrKSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5LgotICAg
IG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsKLSNlbmRpZgot
ICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKICNlbmRpZgpAQCAtMTkwNSwzMyArMTkwNiwzNSBAQCB2b2lkIEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgewotICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15
c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHku
Ci0gICAgICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3Zl
IGJlZW4gY2FsbGVkIGFscmVhZHkuIE9ubHkgb25lIHRocmVhZAotICAgICAgICAvLyBtYXkgcHJv
Y2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIENBUyByYWNlLgot
ICAgICAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb2xk
VmFsdWUgPSBkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKLSAgICAgICAg
ICAgIGlmIChvbGRWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Ci0g
ICAgICAgICAgICAgICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4g
RG9pbmcgc28gaXMgaGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBi
ZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBKU1Zh
bHVlcywgd2hpY2ggY2FuCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24g
MzItYml0LCBsZWFkaW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmVhcmx5IGltcG9zc2libGUgdG8gdHJhY2sgZG93bi4K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBt
dXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVhcmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQotICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIHRydWUgKHdlbGwsICh1bnNpZ25lZCkxKSwgc2luY2Ugb25jZSBh
IEdDIHRocmVhZCBpcyBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGFuZCBoYXMg
d29uIHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZh
bHVlIHRydWUpCi0gICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5IGNvbXBsZXRl
IHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKLSAgICAgICAgICAgICAg
ICAvLyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmZGZnQ29tbW9uLT52
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0dDKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2Us
IGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgIC8vIFRvIHRoaXMgZW5k
LCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuIE9u
bHkgb25lIHRocmVhZAorICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCisgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAg
ZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwor
ICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Cisg
ICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2lu
ZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgbXV0YXRp
bmcgdGhlIHN0YXRlIG9mIFZhbHVlUHJvZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdo
aWNoIGNhbgorICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFk
aW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCisgICAgICAgICAgICAvLyB0
aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVh
cmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
CisgICAgICAgICAgICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3Bv
bnNpYmxlIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgLy8gaXQgd2ls
bCBkZWZpbml0ZWx5IGNvbXBsZXRlIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNs
YXJpbmcKKyAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX3Zpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExF
TF9HQykKKyAgICAKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZW9mKENv
ZGVCbG9jaykpOworICAgIGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlVc2FnZShtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25z
LnNpemUoKSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZD
b3VudCgpKTsKICAgICAKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVy
bmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTIzNzksMTcgKzIzODIsMTQgQEAg
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUo
SklUKQorYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Cit9CisKIGJvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGJvb2wgcmVzdWx0ID0gSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxh
Y2VtZW50KCktPmppdFR5cGUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudCgpID09IHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOwogfQogI2VuZGlm
CiAKQEAgLTI3NDAsMjggKzI3NDAsMTQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25D
b2RlQmxvY2s6OgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQogeworICAgIERlZmVyR0Mg
ZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwogICAgIGFsdGVy
bmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRh
dGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzLCAiLlxuIik7Ci0gICAgamV0dGlzb25JbXBsKCk7
Ci19Ci0KLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKCp2bSgpKTsKLX0KLQotdm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbklt
cGwoKQotewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgp
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAg
IGFsdGVybmF0aXZlKCktPmluc3RhbGwoKTsKIH0KICNlbmRpZgogCkBAIC0zMDM4LDEwICszMDI0
LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0
aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0
aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApA
QCAtMzA0OSwxNiArMzAzNSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3Rp
bGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
b3B0aW1pemVkIGNvZGUgcmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAg
ICAgY291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0hhc2guaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlw
ZS5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJs
b2Nrcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtODMsNyArODMsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0yNzMs
MTQgKzI3MiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVj
aykKICAgICB7CisgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisgICAgICAg
IG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2Nr
IHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJh
bm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKICAgICAgICAgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvcihtX2pp
dENvZGUpKSkKLSAgICAgICAgICAgIG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFk
ZCh0aGlzKTsKLSNlbmRpZgogICAgIH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KQEAg
LTMxMSw3ICszMDgsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsg
fQogCi0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOworICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBi
b29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15
IEpJVFR5cGUKICNlbmRpZgogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTk2MCwxMCAr
OTU4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAg
Ym9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247
CisgICAgCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIApAQCAtOTc0LDcgKzk3MSw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2tTZXQ7CiAgICAgCiAgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSk7CiAgICAgCkBAIC0xMDE3LDE3ICsxMDE0LDE2IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpCiAgICAgewotICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFucyB0
aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKLSAgICAg
ICAgLy8gQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28KLSAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQg
Q29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0
IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCiAgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJs
b2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFk
IHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCiAgICAgICAgIC8vIGFs
bG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9q
aXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmIChtX21heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwNjcsNiArMTA2Myw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2
YXRpb247CisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAgIHVpbnQ4X3QgbV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291
cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTE4Niw3ICsxMTg0LDYgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjA5LDcgKzEyMDYsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjMyLDcg
KzEyMjgsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjkxLDggKzEyODYsNyBAQCBpbmxpbmUgSlNW
YWx1ZSBFeGVjU3RhdGU6OmFyZ3VtZW50QWZ0ZXJDCiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5qc1ZhbHVlKCk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLWlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAw
IGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMu
CiAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CkBAIC0xMzA3LDkgKzEzMDEsOCBAQCBpbmxpbmUgdm9pZCBERkdDb2Rl
QmxvY2tzOjptYXJrKHZvaWQqIGNhCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRy
dWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYgKzE1MjAsOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQaGFudG9t
OgogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBj
YXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAg
ICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1Myw2
ICszMTUzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzogewogICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEpTQ29uc3RhbnRGb3JWYWx1
ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kID49IDApOworICAgICAgICAgICAgbV9ncmFwaC5tX2xhenlWYXJzLnNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2luaXRfbGF6eV9yZWcpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM2MzQsNyArMzYz
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBBU1NFUlQoYmxvY2sp
OwogICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkgewotICAgICAgICAgICAgbV9ncmFw
aC5raWxsQmxvY2soYmxvY2spOworICAgICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2tBbmRJdHND
b250ZW50cyhibG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcwLDE2ICsyNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgICAgICAgICAgbV9ncmFw
aC5yZXNldFJlYWNoYWJpbGl0eSgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YmxvY2stPmlzUmVhY2hhYmxlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBraWxsVW5yZWFjaGFibGUo
YmxvY2spOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLmtpbGxV
bnJlYWNoYWJsZUJsb2NrcygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCkBAIC0zMjAsMTkg
KzMxMSw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGtpbGxVbnJl
YWNoYWJsZShCYXNpY0Jsb2NrKiBibG9jaykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChibG9jayk7
Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgCi0gICAgICAg
IGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07
KQotICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUlu
ZGV4XSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07KQotICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5hdChub2RlSW5kZXgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgua2lsbEJsb2NrKGJs
b2NrKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlKiBsaXZlbmVzc05vZGUgPSBqZXR0
aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNiArMTExLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAgIGNh
c2UgSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTW92SGludEFuZENoZWNrOgpAQCAtMTMzLDYg
KzEzNCw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxl
OgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAgd3JpdGUoU2lk
ZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2Niw3
IEBAIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7CiBjbGFzcyBDb21tb25EYXRhIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21tb25EYXRhKTsKIHB1YmxpYzoKLSAgICBDb21t
b25EYXRhKCkKLSAgICAgICAgOiBtYXlCZUV4ZWN1dGluZyhmYWxzZSkKLSAgICAgICAgLCBpc0pl
dHRpc29uZWQoZmFsc2UpCi0gICAgewotICAgIH0KKyAgICBDb21tb25EYXRhKCkgeyB9CiAgICAg
CiAgICAgdm9pZCBub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mLCBDb2Rl
QmxvY2sqLCBOb2RlKik7CiAgICAgCkBAIC04MSwxMSArNzcsOCBAQCBwdWJsaWM6CiAgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7CiAgICAgCiAgICAgUmVm
UHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247Ci0gICAgYm9vbCBtYXlCZUV4
ZWN1dGluZzsKLSAgICBib29sIGlzSmV0dGlzb25lZDsKICAgICBib29sIGxpdmVuZXNzSGFzQmVl
blByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAgICAgYm9vbCBh
bGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBl
dmVyeSBHQy4KLSAgICB1bnNpZ25lZCB2aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7IC8vIFVu
c2lnbmVkIHRvIG1ha2UgaXQgd29yayBzZWFtbGVzc2x5IHdpdGggdGhlIGJyb2FkZXN0IHNldCBv
ZiBDQVMgaW1wbGVtZW50YXRpb25zLgogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0
OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw5ICs1NSw5IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1w
bCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlv
bk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQ
dHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKLSAgICBXb3JrbGlzdCog
d29ya2xpc3QpCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVy
YW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIp
Iik7CiAgICAgCkBAIC02Nyw4ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlSW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOwogICAgIAotICAgIEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9N
QVgpOwotCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CiAKQEAgLTc4LDggKzc2LDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKICAgICAgICAgZGF0YUxvZygi
REZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVj
dGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCi0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkg
c3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQuIFdlIHdh
bnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9uIGRvZXMg
ZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICB2bS5nZXRDVElTdHViKG9zckV4
aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwpAQCAtOTMsMjkgKzg5LDggQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JF
eGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8vIERlcml2
ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUg
YXQgbGVhc3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50
cnkgd2l0aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0g
ICAgaWYgKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMg
PSBjb2RlQmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNXaXRoVmFs
dWVzID0gMDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcg
UGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhW
YWx1ZXMpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAg
ICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAg
ICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0
cnVjdCkgewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0
aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAg
IC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50
byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFu
IGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3Nl
cywKLSAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBp
bnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5k
bGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB9
CisgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4
LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAgICAgICAg
IHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENvZGVCbG9j
ayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwK
ICAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0KikK
IHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywxMyBAQCBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+IHBhc3NlZENhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywg
Y29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlz
dCk7CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
bXVzdEhhbmRsZVZhbHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9
IENvbXBpbGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENv
bXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0NiwxMCBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhCiAKIC8v
IElmIHRoZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2UgZG8gYSBjb25jdXJyZW50IGNvbXBpbGUu
IE90aGVyd2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAvLyBjb21waWxlLiBFdmVuIGlmIHdlIGRv
IGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVz
dWx0LgotQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBD
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOworQ29tcGlsYXRpb25S
ZXN1bHQgY29tcGlsZSgKKyAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+
JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrPiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVy
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAg
ICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6
CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
Niw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwg
IigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAi
KSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSB7CisgICAgICAg
IGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmci
LCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9CiAgICAgaWYgKG5vZGUtPmhh
c0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAgICAg
b3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CkBAIC00ODcsNiArNDk0LDI5
IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFzaWNC
bG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBo
aXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9k
ZUluZGV4KSk7CisgICAgCisgICAga2lsbEJsb2NrKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6
a2lsbFVucmVhY2hhYmxlQmxvY2tzKCkKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBudW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc1Jl
YWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAga2lsbEJs
b2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwogdm9pZCBHcmFwaDo6cmVzZXRF
eGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDEw
IEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4KTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhCYXNpY0Jsb2NrKik7Cisg
ICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAKICAgICBib29sIGlz
UHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gaXNO
dW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBpc051bWVyaWNhbChub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBAIHB1YmxpYzoKICAgICBib29s
IG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFi
bGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7
CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7
CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxW
YXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsNiArMTA3LDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgp
CiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29u
c3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0
VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
U1NBKSB7CiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRv
cCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjksOCArMTMwLDYgQEAgdm9pZCBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQ2VsbCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7Ci0gICAgICAg
IAotICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5j
cHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogSklUQ29kZTo6SklUQ29kZSgpCkBAIC01OSw2ICs2MSwxNDUgQEAgdm9p
ZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJpbmtU
b0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAor
ICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7CisgICAgdmFyaWFibGVFdmVu
dFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBtaW5p
ZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6cmVjb25z
dHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxKU1Zh
bHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJpZXM7
CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVj
b3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFuZHNM
aWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0t
OykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAg
ICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAg
ICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQg
bWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1
c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhp
cywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQg
Y2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAorICAgICAgICAgICAgLy8g
c28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgorICAg
ICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0g
cmVjb3Zlcmllc1tpXTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2s6Cisg
ICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZENlbGw6CisgICAgICAgIGNhc2Ug
QWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEJvb2xlYW46CisgICAgICAgICAgICB2YWx1ZSA9IGV4
ZWMtPnIoaSkuanNWYWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxy
ZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihleGVjLT5yKGkpLnVuYm94ZWRJbnQzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1
ZSA9IGpzRG91YmxlTnVtYmVyKGV4ZWMtPnIoaSkudW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSBy
ZWNvdmVyeS5jb25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25U
aHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBD
b3VudGVyLmNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCkpOworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24u
XG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1l
U29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0
aW1lIHNvb24uXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9
CisKK3ZvaWQgSklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2Rl
QmxvY2ssICI6IEZUTC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBD
b3VudGVyLnNldE5ld1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRl
clZhbHVlKE9wdGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisg
ICAgICAgIGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAg
ZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGll
clVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENv
dW50ZXJWYWx1ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAg
ICAgIGJhc2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQ
YXRoQ29uY3VycmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93
IHBhdGggY29uY3VycmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVy
LmZvcmNlU2xvd1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRp
bWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3Vs
dCkgeworICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5l
eHRJbnZvY2F0aW9uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBp
bGF0aW9uRmFpbGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2sp
OworICAgICAgICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21w
aWxhdGlvbiA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVm
ZXJyZWQ6CisgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhp
cyBpcyB3ZWlyZCAtIGl0IHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNv
ZGUgYmxvY2sgKGkuZS4KKyAgICAgICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENv
ZGUgYmVsb25ncyB0bykgaXMgYWxzbyBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9l
c24ndCByZWFsbHkgbWF0dGVyIHdoYXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5n
IGFueXdheS4gTm90ZQorICAgICAgICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXph
dGlvbiBhY3R1YWxseSBtZWFucyB0aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3
aWNlLiBCdXQgdGhhdCdzIGdlbmVyYWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJl
b3B0aW1pemF0aW9ucworICAgICAgICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4K
KyAgICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlv
bigpOworICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGUuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMyBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUg
IkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCiAjaW5jbHVk
ZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5o
IgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KQEAgLTkzLDggKzk1LDMxIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdm9pZCByZWNv
bnN0cnVjdCgKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFt
SW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpOworICAgIAorICAgIC8vIFRo
aXMgaXMgb25seSBhcHBsaWNhYmxlIGlmIHdlJ3JlIGF0IGEgcG9pbnQgd2hlcmUgYWxsIHZhbHVl
cyBhcmUgc3BpbGxlZCB0byB0aGUKKyAgICAvLyBzdGFjay4gQ3VycmVudGx5LCBpdCBhbHNvIGhh
cyB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGUgdmFsdWVzIG11c3QgYmUgaW4gdGhlaXIKKyAgICAv
LyBieXRlY29kZS1kZXNpZ25hdGVkIHN0YWNrIHNsb3RzLgorICAgIHZvaWQgcmVjb25zdHJ1Y3Qo
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsCisgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+JiByZXN1bHQpOworCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gTkIuIEFsbCBvZiB0aGVzZSBtZXRob2RzIHRha2Ug
Q29kZUJsb2NrKiBiZWNhdXNlIHRoZXkgbWF5IHdhbnQgdG8gdXNlCisgICAgLy8gQ29kZUJsb2Nr
J3MgbG9naWMgYWJvdXQgc2NhbGluZyB0aHJlc2hvbGRzLiBJdCBzaG91bGQgYmUgYSBERkcgQ29k
ZUJsb2NrLgorICAgIAorICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9j
ayopOworICAgIHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oQ29kZUJsb2NrKik7CisgICAg
dm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVT
b29uKENvZGVCbG9jayopOworICAgIHZvaWQgZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1
cnJlbnRseShDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdChDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwot
ICAgICAgICAKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAv
LyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KIApAQCAtMTA2LDYgKzEz
MSwxMCBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2
YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBFeGVjdXRpb25Db3VudGVyIHRpZXJVcENvdW50ZXI7
CisgICAgUmVmUHRyPENvZGVCbG9jaz4gb3NyRW50cnlCbG9jazsKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDkgKzUyNywyMCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9j
YWwoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNVbmxpbmtlZExvY2FsKCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6Cisg
ICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQob3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKTsKKyAgICAgICAgQVNT
RVJUKGhhc1VubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5
LDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGbHVzaCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21M
b2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIFwKKyAgICAv
KiBTcGVjaWFsIG5vZGUgZm9yIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwuIEluZGljYXRlcyB0aGF0
IHdlJ3JlIGxvYWRpbmcgYSBsb2NhbCAqL1wKKyAgICAvKiB2YXJpYWJsZSBmcm9tIHRoZSBzY3Jh
dGNoIGJ1ZmZlci4gKi9cCisgICAgbWFjcm8oRXh0cmFjdE9TUkVudHJ5TG9jYWwsIE5vZGVSZXN1
bHRKUykgXAorICAgIFwKKyAgICAvKiBUaWVyLXVwIGNoZWNrcyBmcm9tIHRoZSBERkcgdG8gdGhl
IEZUTC4gKi9cCisgICAgbWFjcm8oQ2hlY2tUaWVyVXBJbkxvb3AsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhDaGVja1RpZXJVcEFuZE9TUkVudGVyLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oQ2hlY2tUaWVyVXBBdFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IFwKICAgICAvKiBHZXQgdGhlIHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUsIHdpdGhvdXQgbGlu
a2luZyBpbnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgKi9cCiAgICAgLyogbmV0d29yay4gVGhp
cyBpcyBvbmx5IHZhbGlkIGZvciB2YXJpYWJsZSBhY2Nlc3NlcyB3aG9zZSBwcmVkaWN0aW9ucyBv
cmlnaW5hdGVkICovXAogICAgIC8qIGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbG9jYWwgYWNj
ZXNzLCBhbmQgdGh1cyBoYWQgdGhlaXIgb3duIHByb2ZpbGluZy4gKi9cCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDExICs0NywzNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2co
Ci0gICAgICAgICAgICAiT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4g
IiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICJERkcgT1NSIGluICIsICpjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKICAgICAgICAgICAgICIgZnJvbSBiYyMi
LCBieXRlY29kZUluZGV4LCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkg
eworICAgICAgICAvLyBXaGVuIHdpbGwgdGhpcyBoYXBwZW4/IFdlIGNvdWxkIGhhdmU6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIC0gQW4gZXhpdCBmcm9tIHRoZSBGVEwgSklUIGludG8gdGhlIGJh
c2VsaW5lIEpJVCBmb2xsb3dlZCBieSBhbiBhdHRlbXB0CisgICAgICAgIC8vICAgdG8gcmVlbnRl
ci4gV2UncmUgZmluZSB3aXRoIGFsbG93aW5nIHRoaXMgdG8gZmFpbC4gSWYgaXQgaGFwcGVucwor
ICAgICAgICAvLyAgIGVub3VnaCB3ZSdsbCBqdXN0IHJlb3B0aW1pemUuIEl0IGJhc2ljYWxseSBt
ZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBjb3N0CisgICAgICAgIC8vICAgdXMgZGVhcmx5IGFuZCBz
byByZW9wdGltaXppbmcgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgICAgICAvLworICAg
ICAgICAvLyAtIFdlIGhhdmUgcmVjdXJzaXZlIGNvZGUgd2l0aCBob3QgbG9vcHMuIENvbnNpZGVy
IHRoYXQgZm9vIGhhcyBhIGhvdCBsb29wCisgICAgICAgIC8vICAgdGhhdCBjYWxscyBpdHNlbGYu
IFdlIGhhdmUgdHdvIGZvbydzIG9uIHRoZSBzdGFjaywgbGV0cyBjYWxsIHRoZW0gZm9vMQorICAg
ICAgICAvLyAgIGFuZCBmb28yLCB3aXRoIGZvbzEgaGF2aW5nIGNhbGxlZCBmb28yIGZyb20gZm9v
J3MgaG90IGxvb3AuIGZvbzIgZ2V0cworICAgICAgICAvLyAgIG9wdGltaXplZCBhbGwgdGhlIHdh
eSBpbnRvIHRoZSBGVEwuIFRoZW4gaXQgcmV0dXJucyBpbnRvIGZvbzEsIGFuZCB0aGVuCisgICAg
ICAgIC8vICAgZm9vMSB3YW50cyB0byBnZXQgb3B0aW1pemVkLiBJdCBtaWdodCByZWFjaCB0aGlz
IGNvbmNsdXNpb24gZnJvbSBpdHMKKyAgICAgICAgLy8gICBob3QgbG9vcCBhbmQgYXR0ZW1wdCB0
byBPU1IgZW50ZXIuIEFuZCB3ZSdsbCB0ZWxsIGl0IHRoYXQgaXQgY2FuJ3QuIEl0CisgICAgICAg
IC8vICAgbWlnaHQgYmUgd29ydGggYWRkcmVzc2luZyB0aGlzIGNhc2UsIGJ1dCBJIGp1c3QgdGhp
bmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgLy8gICBiZSBzdXBlciByYXJlLiBGb3Igbm93LCBp
ZiBpdCBkb2VzIGhhcHBlbiwgaXQnbGwgY2F1c2Ugc29tZSBjb21waWxhdGlvbgorICAgICAgICAv
LyAgIHRocmFzaGluZy4KKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJn
ZXQgY29kZSBibG9jayBpcyBub3QgREZHLlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
ZygpLT5vc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAog
ICAgIGlmICghZW50cnkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlIDogcHVibGlj
IFBoYXNlIHsKK3B1YmxpYzoKKyAgICBPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJPU1IgZW50cnlwb2ludCBjcmVhdGlvbiIp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBtX2dyYXBoLm1fcGxhbi5v
c3JFbnRyeUJ5dGVjb2RlSW5kZXg7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsK
KyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBtX2dyYXBoLm1fcHJvZmls
ZWRCbG9jazsKKyAgICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IDA7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luID09
IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBi
bG9jazsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdGVycmli
bGUgb3V0Y29tZS4gSXQgc2hvdWxkbid0IG9mdGVuIGhhcHBlbiBidXQgaXQgbWlnaHQKKyAgICAg
ICAgICAgIC8vIGhhcHBlbiBhbmQgc28gd2Ugc2hvdWxkIGRlZmVuZCBhZ2FpbnN0IGl0LiBJZiBp
dCBoYXBwZW5zLCB0aGVuIHRoaXMKKyAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9uIGlzIGEgZmFp
bHVyZS4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCk7CisgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHRhcmdldC0+YXQoMCktPmNvZGVPcmlnaW47Cisg
ICAgICAgIAorICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzZWxp
bmUtPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIFNldEFyZ3VtZW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJn
ZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCktPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5l
LT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgeworICAgICAgICAgICAgTm9kZSogcHJl
dmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+YXBwZW5k
Tm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBF
eHRyYWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcEluZm8o
dmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBP
cEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgbmV3Um9vdC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgY29kZU9yaWdp
biwgT3BJbmZvKHRhcmdldCkpOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAg
ICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgIG1fZ3JhcGgua2lsbFVu
cmVhY2hhYmxlQmxvY2tzKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK2Jv
b2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRW50cnlwb2ludCBDcmVhdGlvbiIp
OworICAgIHJldHVybiBydW5QaGFzZTxPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZT4oZ3JhcGgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZV9o
CisjZGVmaW5lIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgcGhhc2UgaXMgb25seSBm
b3IgY29tcGlsYXRpb24gcGlwZWxpbmVzIHRoYXQgZ28gdGhyb3VnaCBTU0EsIGFuZCB0aGF0Cisv
LyBkbyBhIHNwZWNpYWxpemVkIE9TUiBlbnRyeSBjb21waWxlLiBDdXJyZW50bHkgdGhhdCBtZWFu
cyBGVEwuCisvLworLy8gQ3JlYXRlcyBhbiBPU1IgZW50cnlwb2ludCB0aGF0IGVzdGFibGlzaGVz
IGFsbCBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKy8vIHZhbHVlcy4gVGhpcyBlbnRyeXBv
aW50IG9ubHkgd29ya3MgZm9yIHRoZSBQbGFuOjpvc3JFbnRyeUJ5dGVjb2RlSW5kZXguCisvLyBV
bmxpa2Ugb3JkaW5hcnkgT1NSIGVudHJ5IGludG8gdGhlIERGRywgdGhpcyBmb3JjZXMgYWxsIHZh
cmlhYmxlcyBzbHVycGVkCisvLyBpbiB0aHJvdWdoIE9TUiBlbnRyeSB0byBhcHBlYXIgVE9QIHRv
IHRoZSBDRkEuIEhlbmNlIHRoaXMgcGhhc2UgbXVzdCBiZSBydW4KKy8vIGVhcmx5IC0gYmVmb3Jl
IGRvaW5nIGFueSBDRkEuIEJ1dCB0aGlzIGFsc28gZG9lcyBzb21lIGFkZGl0aW9uYWwgaGFja3Mg
dGhhdAorLy8gcmVxdWlyZSB0aGlzIHRvIHJ1biBiZWZvcmUgdW5pZmljYXRpb24uCisKK2Jvb2wg
cGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5
ICszMSwxNSBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbW1vblNsb3dQ
YXRocy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Ry
aXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgi
CiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCisjaW5jbHVkZSAiREZHVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKKyNpbmNsdWRl
ICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgogI2lu
Y2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMjAxNSw2ICsyMDIxLDE4NiBAQCBleHRlcm4g
IkMiIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgY29kZUJsb2NrLT5yZW9wdGlt
aXplKCk7CiB9CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBEZWZl
ckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0
Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRlcmVkIHRyaWdn
ZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAgICBqaXRDb2Rl
LT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7CisgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcg
RlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5pdGVseSBiZWNhdXNl
IHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRDb2RlLT5kb250T3B0
aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQo
Y29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAg
ICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJsb2Nr
LCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdvcmtsaXN0
OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2bS0+
d29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgICp2bSwgQ29tcGlsYXRpb25LZXko
Y29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSkpOworICAgIH0gZWxzZQorICAg
ICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3
b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAgaml0Q29kZS0+
c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAorICAgICAg
ICAgICAgY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KSB7CisgICAgICAgIC8vIFRoYXQncyBncmVhdCwgd2UndmUgY29tcGlsZWQgdGhlIGNvZGUgLSBu
ZXh0IHRpbWUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAvLyB3ZSdsbCBlbnRlciB0
aGF0IHJlcGxhY2VtZW50LgorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2Nr
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9
PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGZp
bmlzaGVkIGNvbXBpbGluZywgYnV0IGZhaWxlZCBzb21laG93OyBpbiB0aGF0IGNhc2UgdGhlCisg
ICAgICAgIC8vIHRocmVzaG9sZHMgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNvZGUgYmxv
Y2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2ZSBhbiBv
cHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KKyAgICBjb21waWxlKAorICAgICAgICAq
dm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMTW9kZSwgVUlOVF9NQVgs
IE9wZXJhbmRzPEpTVmFsdWU+KCksCisgICAgICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSwgdm0tPmVuc3VyZVdvcmtsaXN0KCkpOworfQorCitj
aGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkKK3sKKyAgICBW
TSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29k
ZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2Nr
LCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisg
ICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0
aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBk
YXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGlu
ZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAg
ICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5jaGVja0lmT3B0aW1pemF0
aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gRlRMLW9w
dGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBpZiAoV29y
a2xpc3QqIHdvcmtsaXN0ID0gdm0tPndvcmtsaXN0LmdldCgpKSB7CisgICAgICAgIHdvcmtsaXN0
U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCisgICAgICAgICAg
ICAqdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTEZv
ck9TUkVudHJ5TW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29y
a2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0
OjpDb21waWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKTsK
KyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KAorICAgICAgICAgICAgY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlmIChDb2RlQmxvY2sqIGVudHJ5
QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpKSB7CisgICAgICAgIGlmICh2b2lk
KiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCisgICAgICAgICAgICAgICAgZXhlYywg
Y29kZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCkpIHsKKyAg
ICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5QmxvY2st
PmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAgICAgZW50cnlDb2RlLT5jb3VudEVu
dHJ5RmFpbHVyZSgpOworICAgICAgICBpZiAoZW50cnlDb2RlLT5lbnRyeUZhaWx1cmVDb3VudCgp
IDwKKyAgICAgICAgICAgIE9wdGlvbnM6OmZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9yUmVvcHRp
bWl6YXRpb24oKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBqaXRDb2RlLT5vcHRpbWl6
ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBPU1IgZW50cnkgZmFpbGVkLiBPaCBubyEgVGhpcyBpbXBsaWVzIHRo
YXQgd2UgbmVlZCB0byByZXRyeS4gV2UgcmV0cnkKKyAgICAgICAgLy8gd2l0aG91dCBleHBvbmVu
dGlhbCBiYWNrb2ZmIGFuZCB3ZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSBlbnRyeSBjb2RlIGJsb2Nr
LgorICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmNsZWFyKCk7CisgICAgICAgIAorICAg
ICAgICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6
Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBpbGF0aW9uIGZhaWxl
ZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMuCisgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2Rl
QmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJl
cGxhY2VtZW50LlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFRoZSBm
aXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB0cmlnZ2VyIGEgZm9yLWVudHJ5IGNvbXBpbGUu
CisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKyAgICBqaXRDb2RlLT5y
ZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2Rl
SW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgQ29tcGlsYXRpb25S
ZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBERkc6OmNvbXBpbGUoCisgICAgICAgICp2bSwgY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2Rl
SW5kZXgsCisgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spLAorICAgICAgICB2bS0+ZW5z
dXJlV29ya2xpc3QoKSk7CisgICAgCisgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0byB0cmlnZ2Vy
IGEgcmVwbGFjZW1lbnQgY29tcGlsZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAg
Ly8gdHJpZ2dlciBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhpcyBpcyBraW5k
IG9mIHdlaXJkIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAvLyBoYXZlIGp1c3QgZmluaXNoZWQgYW4g
RlRMIGNvbXBpbGUgYW5kIHRoYXQgY29tcGlsZSBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLgor
ICAgIC8vIEJ1dCB0aGlzIHNlZW1zIHVuY29tbW9uIGVub3VnaCB0aGF0IHdlIHNvcnQgb2YgZG9u
J3QgY2FyZS4gSXQncyBjZXJ0YWlubHkgc291bmQKKyAgICAvLyB0byBmaXJlIG9mZiBhbm90aGVy
IGNvbXBpbGUgcmlnaHQgbm93IHNvIGxvbmcgYXMgd2UncmUgbm90IGFscmVhZHkgY29tcGlsaW5n
IGFuZAorICAgIC8vIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1l
bnQuIE5vdGUsIHdlIGRvbid0IGRvIHRoaXMgZm9yCisgICAgLy8gb2J2aW91c2x5IGJhZCBjYXNl
cyBsaWtlIGdsb2JhbCBjb2RlLCB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgYSBzbGltIGNo
YW5jZQorICAgIC8vIG9mIHRoaXMgY29kZSBiZWluZyBpbnZva2VkIGV2ZXIgYWdhaW4uCisgICAg
Q29tcGlsYXRpb25LZXkga2V5Rm9yUmVwbGFjZW1lbnQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKSwgRlRMTW9kZSk7CisgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBHbG9iYWxD
b2RlCisgICAgICAgICYmICFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKKyAg
ICAgICAgJiYgKCF2bS0+d29ya2xpc3QuZ2V0KCkKKyAgICAgICAgICAgIHx8IHZtLT53b3JrbGlz
dC0+Y29tcGlsYXRpb25TdGF0ZShrZXlGb3JSZXBsYWNlbWVudCkgIT0gV29ya2xpc3Q6Ok5vdEtu
b3duKSkgeworICAgICAgICBjb21waWxlKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5l
d1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVl
PigpLAorICAgICAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZShjb2RlQmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7CisgICAgfQorICAgIAorICAgIGlm
IChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVudHJ5IGNvbXBp
bGUgYWxyZWFkeSBzdWNjZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKKyAgICAvLyBlbnRyeSB3aWxs
IHN1Y2NlZWQgdW5sZXNzIHdlIHJhbiBvdXQgb2Ygc3RhY2suIEl0J3Mgbm90IGNsZWFyIHdoYXQg
d2Ugc2hvdWxkIGRvLgorICAgIC8vIFdlIHNpZ25hbCB0byB0cnkgYWdhaW4gYWZ0ZXIgYSB3aGls
ZSBpZiB0aGF0IGhhcHBlbnMuCisgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVu
dHJ5KAorICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0
KCksIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAgICBpZiAoYWRkcmVzcykKKyAgICAg
ICAgaml0Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAgZWxzZQorICAgICAgICBq
aXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNoYXIqPihhZGRyZXNzKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwog
fSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtOTksNiArOTksNyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdP
cGVyCiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04g
KCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25f
SikoRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09w
ZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9E
RkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUp
OwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVj
U3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9p
ZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwpAQCAtMTI2LDYgKzEyNyw3IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFBT
KShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciog
REZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFNTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKK3R5cGVk
ZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwg
aW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmluZ0ltcGwqIERGR19PUEVSQVRJT04gKCpJ
X0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU1N0
cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QpOwogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29k
ZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKQEAgLTMwMiw2ICszMDQsMTEg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogCiB2b2lkIERGR19P
UEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRFUk5B
TDsKIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVy
VXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiB0cmln
Z2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90
IHN0cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
IH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25O
ZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDkgKzQ2LDExIEBACiAjaW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1NTQUNvbnZlcnNpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCkBAIC04
MSwxMyArODMsMTIgQEAgc3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncgog
CiBQbGFuOjpQbGFuKAogICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ss
IENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCwgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKICAg
ICA6IHZtKCpwYXNzZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBjb2RlQmxvY2socGFzc2VkQ29k
ZUJsb2NrKQogICAgICwgbW9kZShtb2RlKQogICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAsIG51bVZhcnNXaXRoVmFsdWVzKG51bVZhcnNXaXRo
VmFsdWVzKQotICAgICwgbXVzdEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSwgbnVtVmFyc1dpdGhWYWx1ZXMpCisgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVW
YWx1ZXMpCiAgICAgLCBjb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlciA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52
bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2su
Z2V0KCkpLCBQcm9maWxlcjo6REZHKSkgOiAwKQogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2Nr
LmdldCgpKQogICAgICwgd2Vha1JlZmVyZW5jZXMoY29kZUJsb2NrLmdldCgpKQpAQCAtMTY1LDYg
KzE2NiwxNiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAg
aWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZhbGlkYXRlKGRmZyk7CiAgICAgCisg
ICAgaWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgIGJvb2wgcmVzdWx0
ID0gcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihkZmcpOworICAgICAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICAgICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXpl
cigqdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICB2YWxpZGF0ZShkZmcpOwor
ICAgIH0KKyAgICAKICAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBw
ZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7
CkBAIC0yMDYsMTAgKzIxNywxOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIGRmZy5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkoZGZn
KTsKICAgICB9CiAKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIERGR01vZGU6IHsKKyAg
ICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRmZyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBjYXNlIEZUTE1vZGU6CisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1v
ZGU6IHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVu
dGFsRlRMKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZQotICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgeworICAgICAgICBpZiAoRlRMOjpj
YW5Db21waWxlKGRmZykgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7CisgICAgICAgICAgICBmaW5h
bGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKCp0aGlzKSk7CisgICAgICAgICAg
ICByZXR1cm4gRlRMUGF0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcGVyZm9ybUNy
aXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1Mb29wUHJlSGVhZGVyQ3Jl
YXRpb24oZGZnKTsKQEAgLTI0NCwxMCArMjY0LDE2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgRlRMOjpjb21waWxlKHN0YXRlKTsKICAgICAgICAg
RlRMOjpsaW5rKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7Ci0gICAgfQogI2Vsc2UK
LSAgICBSRUxFQVNFX0FTU0VSVCghT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICAKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtRENFKGRm
Zyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiBzdHJ1Y3QgUGxhbiA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxhbigKICAgICAgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAg
ICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4o
KTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0ZSYpOwpAQCAt
NzIsNyArNzIsNiBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAg
ICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIENvbXBpbGF0aW9uTW9kZSBtb2Rl
OwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKLSAgICBjb25zdCB1
bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFu
ZGxlVmFsdWVzOwogCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRp
b247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3ICs0ODQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNh
c2UgTW92SGludEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAg
Y2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgICAg
ICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNp
YmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBp
bnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTUxLDYgKzU1NCwxMCBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5
IGhhcyBhIHByZWRpY3Rpb24uCisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBnZXRzIGln
bm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgogICAgICAgICBjYXNlIElubGlu
ZVN0YXJ0OgogICAgICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE1NDk2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzMsNiArMjMzLDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIE5ld1R5cGVk
QXJyYXk6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxv
Y2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0
UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MzUsNiArNDgzNSwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2Fz
ZSBVcHNpbG9uOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDoKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVy
VXBBdFJldHVybjoKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY4MCwxMSArNDY4MCw3NSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBVbnJlYWNo
YWJsZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJl
YWs7CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6IHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5j
aEFkZDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwKKyAgICAgICAgICAg
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yTG9vcCgp
KSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJm1faml0Lmpp
dENvZGUoKS0+dGllclVwQ291bnRlci5tX2NvdW50ZXIpKTsKKyAgICAgICAgCisgICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICBhcHBlbmRDYWxsKHRyaWdnZXJUaWVyVXBO
b3cpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAg
ICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgCisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOiB7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoT3B0aW9uczo6
ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvclJldHVybigpKSwKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291bnRl
ci5tX2NvdW50ZXIpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KEludmFsaWRHUFJSZWcpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgp
OworICAgICAgICBhcHBlbmRDYWxsKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBD
aGVja1RpZXJVcEFuZE9TUkVudGVyOiB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRp
ZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCksCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIobV9zdHJlYW0tPnNpemUoKSkpOwor
ICAgICAgICBhcHBlbmRDYWxsU2V0UmVzdWx0KHRyaWdnZXJPU1JFbnRyeU5vdywgdGVtcEdQUik7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbnRFbnRlciA9IG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5qdW1w
KHRlbXBHUFIpOworICAgICAgICBkb250RW50ZXIubGluaygmbV9qaXQpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShGVExfSklU
KQorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgIGNhc2UgUGhpOgog
ICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBUaWVyVXBDaGVja0luamVjdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1
YmxpYzoKKyAgICBUaWVyVXBDaGVja0luamVjdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgInRpZXItdXAgY2hlY2sgaW5qZWN0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9wbGFuLm1vZGUgPT0gREZHTW9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgICAgIEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVs
ID0gRlRMOjpjYW5Db21waWxlKG1fZ3JhcGgpOworICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpD
YW5ub3RDb21waWxlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisK
KyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX25hdHVyYWxMb29w
cy5oZWFkZXJPZihibG9jaykpIHsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBibG9jay0+YXQoMCktPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgTm9kZVR5cGUg
bm9kZVR5cGU7CisgICAgICAgICAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2FuQ29tcGlsZUFu
ZE9TUkVudGVyICYmICFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcEluTG9vcDsK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgwLCBTcGVjTm9uZSwgbm9k
ZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnNp
emUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLCBibG9jay0+bGFzdCgpLT5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rp
b24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgVGllci11cCBDaGVjayBJbmplY3Rpb24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0aGUgdGhpcyBjb2RlIGJsb2NrIGNvdWxkIGJlIHJlY29t
cGlsZWQgd2l0aCB0aGUgRlRMLAorLy8gYW5kIGlmIHNvLCBpdCBpbmplY3RzIHRpZXItdXAgY2hl
Y2tzLgorCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJF
eGVjdXRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBtX2Rm
Z0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KKworUGFz
c1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZn
Q29kZUJsb2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNs
eSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAg
ICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAgICAKKyAgICBtX2Rm
Z0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOworfQorCit2b2lkIFRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIs
ICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4i
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
CisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAgIAorICAgIG1fZGZnQ29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQoCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpLCByZXN1bHQpOworfQor
Cit9IH0gLy8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2tfaAorI2RlZmluZSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVk
ZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGljOgorICAgIHZpcnR1
YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKAorICAgICAg
ICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayop
OworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENv
bXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2Rm
Z0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKAorICAgIFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBtX2RmZ0NvZGVCbG9jayhkZmdDb2Rl
QmxvY2spCit7Cit9CisKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6On5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkKK3sKK30K
KworUGFzc1JlZlB0cjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PgorVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKAor
ICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKGRm
Z0NvZGVCbG9jaykpOworfQorCit2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseSgKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAg
ICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAgICAKKyAgICBtX2RmZ0NvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJl
bnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOworfQorCit2b2lkIFRvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
K3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChm
b3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQs
ICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bCkKKyAgICAgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgCisgICAgLy8gRklYTUU6IGlmIHdlIGZhaWxlZCwgd2Ug
bWlnaHQgd2FudCB0byBqdXN0IHR1cm4gb2ZmIE9TUiBlbnRyeSByYXRoZXIgdGhhbgorICAgIC8v
IHRvdGFsbHkgdHVybmluZyBvZmYgdGllci11cC4KKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSwgcmVzdWx0KTsKK30KKworfSB9IC8v
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1RvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBERkdUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGlj
OgorICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IGRmZ0NvZGVCbG9jayk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVj
b21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29t
cGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2RlQmxvY2s7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNp
b24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
R2xvYmFsV29ya2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7Ci0gICAg
aWYgKCFlbmFibGVDb25jdXJyZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHB0aHJl
YWRfb25jZSgmaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2Jh
bFdvcmtsaXN0T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw5ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbmdsZSBn
bG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhlIHJpZ2h0
IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBmdW5jdGlv
bgogLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8KLS8vIFRo
aXMgcmV0dXJucyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBkb2luZyBj
b25jdXJyZW50Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcg
bmFtZXNwYWNlIERGRzsKIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQoraW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiB7CisgICAgLy8gTk9U
RTogSWYgd2UgZXZlciBoYXZlIHBoYW50b20gYXJndW1lbnRzLCB3ZSBjYW4gY29tcGlsZSB0aGVt
IGJ1dCB3ZSBjYW5ub3QKKyAgICAvLyBPU1IgZW50ZXIuCisgICAgCiAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6
CkBAIC04MSw2ICs4NCw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246Cisg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtOTAsMzkgKzk0LDM5
IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAg
c3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4g
Q2FuQ29tcGlsZUFuZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnNwZWN1bGF0aW9uKCkpIHsKICAgICAgICAg
Y2FzZSBBcnJheTo6U2FuZUNoYWluOgogICAgICAgICBjYXNlIEFycmF5OjpJbkJvdW5kczoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAg
ICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21wYXJlRXE6CkBAIC0xMzMsNyArMTM3LDcg
QEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RD
b21waWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgog
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CkBAIC0xNDIsNyArMTQ2LDcgQEAgaW5saW5lIGJvb2wg
Y2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChu
b2RlLT5pc0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIGNh
c2UgQnJhbmNoOgogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKQEAgLTE1Miw3ICsxNTYsNyBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTd2l0Y2g6CkBAIC0xNjEsMTggKzE2NSwyMyBAQCBpbmxpbmUgYm9v
bCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxl
IGFueXRoaW5nIGVsc2UuCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENh
bm5vdENvbXBpbGU7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDYW5Db21w
aWxlQW5kT1NSRW50ZXI7CiB9CiAKLWJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCitDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiB7CisgICAgaWYgKGdyYXBoLm1f
Y29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgcmV0dXJuIENh
bm5vdENvbXBpbGU7CisgICAgCisgICAgQ2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IENhbkNvbXBp
bGVBbmRPU1JFbnRlcjsKKyAgICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC0y
MTAsMjUgKzIxOSwzMiBAQCBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRlRMIHJlamVjdGluZyBub2RlIGJlY2F1c2Ugb2YgYmFk
IHVzZSBraW5kOiAiLCBlZGdlLnVzZUtpbmQoKSwgIiBpbiBub2RlOlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsK
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFjYW5D
b21waWxlKG5vZGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhbkNvbXBpbGUobm9kZSkpIHsK
KyAgICAgICAgICAgIGNhc2UgQ2Fubm90Q29tcGlsZTogCiAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJGVEwgcmVqZWN0aW5nIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAgICAgZ3JhcGguZHVt
cChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQ2FuQ29tcGlsZToK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBDYW5Db21waWxlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlQW5kT1NS
RW50ZXI6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgaWYgd2UgY2FuIGNvbXBpbGUgYW55dGhp
bmcgYWZ0ZXIgYSBmb3JjZS1leGl0LgogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRm9y
Y2VPU1JFeGl0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsMTMgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1ib29sIGNhbkNvbXBpbGUoREZHOjpH
cmFwaCYpOworZW51bSBDYXBhYmlsaXR5TGV2ZWwgeworICAgIENhbm5vdENvbXBpbGUsCisgICAg
Q2FuQ29tcGlsZSwKKyAgICBDYW5Db21waWxlQW5kT1NSRW50ZXIKK307CisKK0NhcGFiaWxpdHlM
ZXZlbCBjYW5Db21waWxlKERGRzo6R3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworRm9y
T1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JFbnRy
eUpJVENvZGU6On5Gb3JPU1JFbnRyeUpJVENvZGUoKQoreworfQorCitGb3JPU1JFbnRyeUpJVENv
ZGUqIEZvck9TUkVudHJ5SklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIHJldHVybiB0
aGlzOworfQorCit2b2lkIEZvck9TUkVudHJ5SklUQ29kZTo6aW5pdGlhbGl6ZUVudHJ5QnVmZmVy
KFZNJiB2bSwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKQoreworICAgIG1fZW50cnlCdWZm
ZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisjZGVmaW5lIEZUTEZvck9T
UkVudHJ5SklUQ29kZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKKy8vIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwgaGFzIGEgbnVtYmVy
IG9mIHF1aXJrczoKKy8vCisvLyAtIE9TUiBlbnRyeSBvbmx5IGhhcHBlbnMgdGhyb3VnaCBzcGVj
aWFsIE9TUiBlbnRyeSBjb21waWxhdGlvbnMuIFRoZXkgaGF2ZSB0aGVpcgorLy8gICBvd24gQ29k
ZUJsb2NrIGFuZCB0aGVpciBvd24gSklUQ29kZS4KKy8vCisvLyAtIFdlIG9ubHkgT1NSIGVudGVy
IGluIGxvb3AgaGVhZGVycyB0aGF0IGhhdmUgYSBudWxsIGlubGluZSBjYWxsIGZyYW1lLgorLy8K
Ky8vIC0gRWFjaCBPU1IgZW50cnkgY29tcGlsYXRpb24gYWxsb3dzIGVudHJ5IHRocm91Z2ggb25s
eSBvbmUgYnl0ZWNvZGUgaW5kZXguCisKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZSA6IHB1Ymxp
YyBGVEw6OkpJVENvZGUgeworcHVibGljOgorICAgIEZvck9TUkVudHJ5SklUQ29kZSgpOworICAg
IH5Gb3JPU1JFbnRyeUpJVENvZGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFbnRyeUJ1
ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZl
ciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5QnVmZmVyOyB9CisgICAgCisg
ICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRl
eCA9IHZhbHVlOyB9CisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIAorICAgIHZvaWQgY291bnRFbnRyeUZhaWx1cmUoKSB7
IG1fZW50cnlGYWlsdXJlQ291bnQrKzsgfQorICAgIHVuc2lnbmVkIGVudHJ5RmFpbHVyZUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUZhaWx1cmVDb3VudDsgfQorICAgIAorICAgIEZvck9T
UkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2Ny
YXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsgLy8gT25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxv
Y2tzLgorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VudHJ5
RmFpbHVyZUNvdW50OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZMVF9KSVQpCisKKyNlbmRpZiAvLyBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3Bw
CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDkgQEAgYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1
bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CiAgICAgfSAvLyBlbHNlIHRo
aXMgZnVuY3Rpb24gaGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCiAgICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gbV9lbnRyeXBvaW50TGlu
a0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciB3aXRoQXJpdHlDaGVjazsKKyAgICBpZiAobV9hcml0eUNoZWNrLmlzU2V0KCkpCisgICAg
ICAgIHdpdGhBcml0eUNoZWNrID0gbV9lbnRyeXBvaW50TGlua0J1ZmZlci0+bG9jYXRpb25PZiht
X2FyaXR5Q2hlY2spOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGUoCiAgICAgICAgIEZJ
TkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKm1fZW50cnlwb2ludExpbmtCdWZmZXIsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDc5ICs1NSwxMTQgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAvLyBMTFZN
IHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgogICAgIGNvZGVCbG9j
ay0+Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAgICAgCi0gICAgLy8gQ3JlYXRlIHRoZSBlbnRy
eXBvaW50LgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91
bGQganVzdCB1c2Ugb3VyIGNhbGxpbmcgY29udmVudGlvbi4KKyAgICAvLyBDcmVhdGUgdGhlIGVu
dHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhpcyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVy
ZW50bHkKKyAgICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkg
b3Igbm90LgorICAgIC8vIEZJWE1FOiBFeGNlcHQgZm9yIE9TUiBlbnRyeSwgdGhpcyBpcyBhIHRv
dGFsIGtsdWRnZSAtIExMVk0gc2hvdWxkIGp1c3QgdXNlIG91cgorICAgIC8vIGNhbGxpbmcgY29u
dmVudGlvbi4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzNjIxCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmc3RhdGUuZ3JhcGgubV92bSwgY29kZUJsb2Nr
KTsKICAgICAKLSAgICBjb21waWxlRW50cnkoaml0KTsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4g
bGlua0J1ZmZlcjsKKyAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGFyaXR5Q2hlY2s7CisgICAgc3dp
dGNoIChzdGF0ZS5ncmFwaC5tX3BsYW4ubW9kZSkgeworICAgIGNhc2UgRlRMTW9kZTogeworICAg
ICAgICBjb21waWxlRW50cnkoaml0KTsKICAgICAKLSAgICAvLyBUaGlzIHBhcnQgaXMgb25seSBu
ZWNlc3NhcnkgZm9yIGZ1bmN0aW9ucy4gV2UgY3VycmVudGx5IG9ubHkgY29tcGlsZSBmdW5jdGlv
bnMuCisgICAgICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25z
LiBXZSBjdXJyZW50bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KICAgICAgICAgCi0gICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBmcm9tQXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOworICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CiAgICAgICAg
IAotICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJs
ZSBpbiB0aGUgSlNTdGFjay4KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU2MjkxCi0gICAgaml0LmFkZFB0cigKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVv
ZihSZWdpc3RlcikpLAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6cmVnVDEpOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBzdGFja0NoZWNrID0gaml0LmJyYW5j
aFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV92bS5pbnRlcnByZXRlci0+c3RhY2soKS5h
ZGRyZXNzT2ZFbmQoKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGZyb21TdGFja0NoZWNrID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIAotICAgIGpp
dC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5j
dGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25B
cmdHUFIwKTsKLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KTsKLSAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVn
VDEpOwotICAgIGppdC5yZXQoKTsKLSAgICAgICAgCi0gICAgc3RhY2tDaGVjay5saW5rKCZqaXQp
OwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnBva2UoCi0gICAgICAgIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLAotICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKLSAgICAgICAgCi0gICAgaml0LnN0b3Jl
MzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRp
b246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsK
LSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2Vw
dGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCi0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBw
cm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5q
dW1wKGZyb21TdGFja0NoZWNrKTsKLSAgICAgICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBh
cml0eUNoZWNrID0gaml0LmxhYmVsKCk7Ci0gICAgY29tcGlsZUVudHJ5KGppdCk7Ci0gICAgaml0
LmxvYWQzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLAotICAgICAgICBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgaml0LmJyYW5jaDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3Zl
T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgLmxpbmtUbyhmcm9tQXJp
dHlDaGVjaywgJmppdCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucG9rZSgKLSAgICAgICAg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1
Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwotICAgIGppdC5z
dG9yZTMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6Okxv
Y2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJz
Ojp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxs
KCk7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBl
eGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcwotICAgIC8vIHBhcnQgb2YgYSBiaWdn
ZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKLSAgICBq
aXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDApLmxpbmtU
byhmcm9tQXJpdHlDaGVjaywgJmppdCk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0
eUZpeHVwID0gaml0LmNhbGwoKTsKLSAgICBqaXQuanVtcChmcm9tQXJpdHlDaGVjayk7Ci0gICAg
ICAgIAotICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExp
bmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKSk7Ci0gICAgbGlua0J1ZmZlci0+bGluayhjYWxsU3RhY2tDaGVjaywgY3Rp
X3N0YWNrX2NoZWNrKTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2Rl
QmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0
aV9vcF9jYWxsX2FyaXR5Q2hlY2spOwotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4
dXAsIEZ1bmN0aW9uUHRyKChzdGF0ZS5ncmFwaC5tX3ZtLmdldENUSVN0dWIoYXJpdHlGaXh1cCkp
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgIC8vIFBsYW50IGEgY2hlY2sg
dGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgSlNTdGFjay4KKyAgICAg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5
MQorICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcikp
LAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWJzb2x1dGVBZGRyZXNzKHN0YXRlLmdyYXBoLm1fdm0uaW50ZXJwcmV0ZXItPnN0YWNr
KCkuYWRkcmVzc09mRW5kKCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21TdGFja0NoZWNrID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIAorICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgaml0
Lm1vdmUoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSwKKyAgICAgICAgICAgIEdQ
UkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJl
dHVyblBDLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5m
bzo6cmVnVDEpOworICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIAorICAgICAgICBzdGFja0No
ZWNrLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5wb2tlKAor
ICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBPQkpF
Q1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9p
ZCopKTsKKyAgICAgICAgCisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29k
ZU9mZnNldCgwKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsU3RhY2tDaGVjayA9IGppdC5jYWxsKCk7CisgICAgICAgIC8v
IEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhh
bmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKKyAgICAgICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9i
bGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKKyAgICAgICAg
aml0Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOworICAgICAgICAKKyAgICAgICAgYXJpdHlDaGVjayA9
IGppdC5sYWJlbCgpOworICAgICAgICBjb21waWxlRW50cnkoaml0KTsKKyAgICAgICAgaml0Lmxv
YWQzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwKKyAgICAgICAgICAgIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJlZ1QxLAorICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAg
ICAgICAgLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgJmppdCk7CisgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGppdC5wb2tlKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsCisgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNh
bGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNv
ZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsK
KyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBl
eGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgICAgICAvLyBwYXJ0IG9mIGEg
YmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYy
MgorICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6
cmVnVDApLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgJmppdCk7CisgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wKGZy
b21Bcml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtCdWZmZXIgPSBhZG9wdFB0cihu
ZXcgTGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsU3RhY2tD
aGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJp
dHlDaGVjaywgY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2Fy
aXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKKyAgICAgICAgbGlua0J1ZmZlci0+
bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHN0YXRlLmdyYXBoLm1fdm0uZ2V0Q1RJ
U3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogewor
ICAgICAgICAvLyBXZSBqdW1wIHRvIGhlcmUgc3RyYWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0ZXIg
aGF2aW5nIGJveGVkIHVwIGFsbCBvZiB0aGUKKyAgICAgICAgLy8gdmFsdWVzIGludG8gdGhlIHNj
cmF0Y2ggYnVmZmVyLiBFdmVyeXRoaW5nIHNob3VsZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhpcwor
ICAgICAgICAvLyBwb2ludCB3ZSd2ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNpY2Fs
bHkgd2UganVzdCBoYXZlIHRvIG1ha2UgdGhlCisgICAgICAgIC8vIGNhbGwgdG8gdGhlIExMVk0t
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwor
ICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLAorICAg
ICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
SlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgCisgICAg
ICAgIGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcigKKyAgICAgICAgICAgIHN0
YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2Vl
ZCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
ICAgICAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVFbnRyeXBvaW50TGlua0J1ZmZl
cihsaW5rQnVmZmVyLnJlbGVhc2UoKSk7CiAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXpl
RnVuY3Rpb24oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVk
ZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExMb3dl
cmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCkBAIC0yNDMsNiArMjQ0LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNvbXBp
bGVHZXRBcmd1bWVudCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CisgICAgICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwo
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAg
ICAgY29tcGlsZUdldExvY2FsKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUwNiw2ICs1MTAs
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0T1NSRW50cnlMb2NhbCgpCisgICAgeworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKKyAgICAgICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigp
KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVy
ICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkpKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29t
cGlsZUdldExvY2FsKCkKICAgICB7CiAgICAgICAgIC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGZv
ciBjYXB0dXJlZCB2YXJpYWJsZXMuCkBAIC01MTUsNyArNTI2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3ZhbHVlKSkKKyAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAg
c2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3NG
b3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVk
ZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBl
bnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJl
YW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVCbG9jayogYmFz
ZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIERGRzo6SklUQ29k
ZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBGb3JPU1JF
bnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5Q29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZv
ck9TUkVudHJ5KCk7CisgICAgCisgICAgZGF0YUxvZygKKyAgICAgICAgIkZUTCBPU1IgZnJvbSAi
LCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAg
ICAgICBieXRlY29kZUluZGV4LCAiLlxuIik7CisgICAgCisgICAgaWYgKGJ5dGVjb2RlSW5kZXgg
IT0gZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ug
d2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZvciBiYyMiLCBieXRlY29kZUluZGV4LCAiOyBv
dXJzIGlzIGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICBPcGVyYW5kczxKU1ZhbHVlPiB2YWx1ZXM7CisgICAg
ZGZnQ29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAgIGV4ZWMsIGRmZ0NvZGVCbG9jaywgQ29kZU9y
aWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIHZhbHVlcyk7CisgICAgCisgICAgZm9y
IChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTsp
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgICAgICBleGVjLT5yKGFyZ3VtZW50
VG9PcGVyYW5kKGFyZ3VtZW50KSkuanNWYWx1ZSgpID09IHZhbHVlcy5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50Pih2YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSkgPT0gYmFzZWxpbmUtPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzKTsKKyAgICAKKyAgICBFbmNvZGVkSlNWYWx1ZSogc2NyYXRjaCA9IHN0YXRpY19j
YXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgIGVudHJ5Q29kZS0+ZW50cnlCdWZmZXIoKS0+
ZGF0YUJ1ZmZlcigpKTsKKyAgICAKKyAgICBmb3IgKGludCBsb2NhbCA9IHZhbHVlcy5udW1iZXJP
ZkxvY2FscygpOyBsb2NhbC0tOykKKyAgICAgICAgc2NyYXRjaFtsb2NhbF0gPSBKU1ZhbHVlOjpl
bmNvZGUodmFsdWVzLmxvY2FsKGxvY2FsKSk7CisgICAgCisgICAgaWYgKCF2bS5pbnRlcnByZXRl
ci0+c3RhY2soKS5ncm93KAorICAgICAgICAgICAgJmV4ZWMtPnJlZ2lzdGVycygpW2VudHJ5Q29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyc10pKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiY2F1c2Ug
c3RhY2sgZ3Jvd3RoIGZhaWxlZC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
CisgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGVudHJ5Q29kZUJsb2NrKTsKKyAgICAKKyAgICB2b2lk
ICpyZXN1bHQgPSBlbnRyeUNvZGUtPmFkZHJlc3NGb3JDYWxsKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIgICAg
RW50cnkgd2lsbCBzdWNjZWVkLCBnb2luZyB0byBhZGRyZXNzIiwgUmF3UG9pbnRlcihyZXN1bHQp
LCAiXG4iKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGVExPU1JFbnRyeV9oCisjZGVmaW5lIEZUTE9TUkVudHJ5X2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBFeGVjU3RhdGU7CisKK25hbWVzcGFjZSBGVEwgewor
Cit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiBkZmdD
b2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsCisgICAgdW5zaWduZWQgc3RyZWFtSW5kZXgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkVudHJ5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9u
IDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNp
bmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MCw5ICs0Miwy
NSBAQCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgICwgY29udGV4dChMTFZNQ29udGV4
dENyZWF0ZSgpKQogICAgICwgbW9kdWxlKDApCiAgICAgLCBmdW5jdGlvbigwKQotICAgICwgaml0
Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDAp
CiB7CisgICAgc3dpdGNoIChncmFwaC5tX3BsYW4ubW9kZSkgeworICAgIGNhc2UgRlRMTW9kZTog
eworICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IEpJVENvZGUoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTogeworICAgICAgICBSZWZQ
dHI8Rm9yT1NSRW50cnlKSVRDb2RlPiBjb2RlID0gYWRvcHRSZWYobmV3IEZvck9TUkVudHJ5SklU
Q29kZSgpKTsKKyAgICAgICAgY29kZS0+aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKGdyYXBoLm1fdm0s
IGdyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpOworICAgICAgICBj
b2RlLT5zZXRCeXRlY29kZUluZGV4KGdyYXBoLm1fcGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
OworICAgICAgICBqaXRDb2RlID0gY29kZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKICAgICBmaW5hbGl6ZXIgPSBuZXcgSklURmluYWxpemVyKGdyYXBo
Lm1fcGxhbik7CiAgICAgZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IGFkb3B0UHRyKGZpbmFsaXpl
cik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2tTZXQuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CisKK0NvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkgeyB9CisKK0Nv
ZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6
aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6
aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCisgICAgICAgICgqaXRlciktPmRlcmVmKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0Ojph
ZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBib29sIGlzTmV3RW50
cnkgPSBtX3NldC5hZGQoY29kZUJsb2NrLmxlYWtSZWYoKSkuaXNOZXdFbnRyeTsKKyAgICBBU1NF
UlRfVU5VU0VEKGlzTmV3RW50cnksIGlzTmV3RW50cnkpOworfQorCit2b2lkIENvZGVCbG9ja1Nl
dDo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5k
ID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgY29kZUJsb2NrLT5tX21h
eUJlRXhlY3V0aW5nID0gZmFsc2U7CisgICAgICAgIGNvZGVCbG9jay0+bV92aXNpdEFnZ3JlZ2F0
ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0Ojpk
ZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpCit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBi
ZSBhIGZpeHBvaW50IGJlY2F1c2UgY29kZSBibG9ja3MgdGhhdCBhcmUgdW5tYXJrZWQgbWF5Cisg
ICAgLy8gcmVmZXIgdG8gZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGEgREZHIGNvZGUgYmxvY2sg
dGhhdCBpcyBvd25lZCBieQorICAgIC8vIHRoZSBHQyBtYXkgcmVmZXIgdG8gYW4gRlRMIGZvci1l
bnRyeSBjb2RlIGJsb2NrIHRoYXQgaXMgYWxzbyBvd25lZCBieQorICAgIC8vIHRoZSBHQy4KKyAg
ICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCJGaXhwb2ludGluZyBvdmVyIHVubWFya2VkLCBzZXQgc2l6ZSA9ICIsIG1f
c2V0LnNpemUoKSwgIi4uLlxuIik7CisgICAgZm9yICg7OykgeworICAgICAgICBIYXNoU2V0PENv
ZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNl
dDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9ICppdGVyOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09uZVJlZigpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+bV9tYXlC
ZUV4ZWN1dGluZykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvZGVC
bG9jay0+ZGVyZWYoKTsKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb2RlQmxvY2spOwor
ICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAg
IFJlbW92aW5nICIsIHRvUmVtb3ZlLnNpemUoKSwgIiBibG9ja3MuXG4iKTsKKyAgICAgICAgaWYg
KHRvUmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSB0b1JlbW92ZS5zaXplKCk7IGktLTspCisgICAgICAgICAgICBtX3NldC5yZW1v
dmUodG9SZW1vdmVbaV0pOworICAgICAgICB0b1JlbW92ZS5yZXNpemUoMCk7CisgICAgfQorfQor
Cit2b2lkIENvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9zZXQuc2l6
ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0
b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0
b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFjb2Rl
QmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
Y29kZUJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlQmxvY2tTZXRfaAorI2Rl
ZmluZSBDb2RlQmxvY2tTZXRfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsK
K2NsYXNzIFNsb3RWaXNpdG9yOworCisvLyBDb2RlQmxvY2tTZXQgdHJhY2tzIGFsbCBDb2RlQmxv
Y2tzLiBFdmVyeSBDb2RlQmxvY2sgc3RhcnRzIG91dCB3aXRoIG9uZQorLy8gcmVmZXJlbmNlIGNv
bWluZyBpbiBmcm9tIEdDLiBUaGUgR0MgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgQ29kZUJs
b2NrcworLy8gb25jZSB0aGV5IGhhc09uZVJlZigpIGFuZCBub2JvZHkgaXMgcnVubmluZyBjb2Rl
IGZyb20gdGhhdCBDb2RlQmxvY2suCisKK2NsYXNzIENvZGVCbG9ja1NldCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ29kZUJsb2NrU2V0KTsKKworcHVibGljOgorICAgIENvZGVCbG9ja1Nl
dCgpOworICAgIH5Db2RlQmxvY2tTZXQoKTsKKyAgICAKKyAgICAvLyBBZGQgYSBDb2RlQmxvY2su
IFRoaXMgaXMgb25seSBjYWxsZWQgYnkgQ29kZUJsb2NrIGNvbnN0cnVjdG9ycy4KKyAgICB2b2lk
IGFkZChQYXNzUmVmUHRyPENvZGVCbG9jaz4pOworICAgIAorICAgIC8vIENsZWFyIGFsbCBtYXJr
IGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2RlIGJsb2Nrcy4KKyAgICB2b2lkIGNsZWFyTWFy
a3MoKTsKKyAgICAKKyAgICAvLyBNYXJrIGEgcG9pbnRlciB0aGF0IG1heSBiZSBhIENvZGVCbG9j
ayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcKKyAgICAvLyBibG9ja3MuIFRoaXMgaXMg
ZGVmaW5lZCBpbiBDb2RlQmxvY2suaC4KKyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29k
ZUJsb2NrKTsKKyAgICAKKyAgICAvLyBEZWxldGUgYWxsIGNvZGUgYmxvY2tzIHRoYXQgYXJlIG9u
bHkgcmVmZXJlbmNlZCBieSB0aGlzIHNldCAoaS5lLiBvd25lZAorICAgIC8vIGJ5IHRoaXMgc2V0
KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCisgICAgdm9pZCBkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZCgpOworICAgIAorICAgIC8vIFRyYWNlIGFsbCBtYXJrZWQgY29kZSBi
bG9ja3MuIFRoZSBDb2RlQmxvY2sgaXMgZnJlZSB0byBtYWtlIHVzZSBvZgorICAgIC8vIG1heUJl
RXhlY3V0aW5nLgorICAgIHZvaWQgdHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0
ZToKKyAgICAvLyBUaGlzIGlzIG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNl
IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmaW5kCisgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50
ZXJzLiBJIGNvdWxkIGhhdmUgd3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCisg
ICAgLy8gYW5kIGFsbCwgYnV0IHRoYXQgc2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCisgICAgSGFzaFNl
dDxDb2RlQmxvY2sqID4gbV9zZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIENvZGVCbG9ja1NldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJD
b3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUg
IkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTQwLDEwICsxNDAsOSBAQCBwcml2YXRl
OgogfTsKIAogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKAotICAgIHZvaWQqIGJlZ2luLCB2
b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9j
a3MmIGRmZ0NvZGVCbG9ja3MpCisgICAgdm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJv
dXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogewot
ICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBERkdDb2RlQmxvY2tzPiBt
YXJrSG9vaygKLSAgICAgICAgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBD
b21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGluZVNldCwgQ29kZUJsb2NrU2V0PiBtYXJrSG9v
ayhqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2lu
LCBlbmQsIG1hcmtIb29rKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBERkdDb2RlQmxvY2tzOwor
Y2xhc3MgQ29kZUJsb2NrU2V0OwogY2xhc3MgSGVhcDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0
OwogY2xhc3MgSlNDZWxsOwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFk
ZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKTsKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYpOwotICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2
b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgREZHQ29kZUJsb2NrcyYpOworICAgIHZvaWQg
YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2Nr
U2V0Jik7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHJl
dmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9j
a3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJERkdDb2RlQmxvY2tzLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotREZHQ29kZUJsb2Nrczo6REZHQ29kZUJsb2Nr
cygpIHsgfQotCi1ERkdDb2RlQmxvY2tzOjp+REZHQ29kZUJsb2NrcygpCi17Ci0gICAgVmVjdG9y
PFJlZlB0cjxDb2RlQmxvY2s+LCAxNj4gdG9SZW1vdmU7Ci0gICAgCi0gICAgZm9yIChIYXNoU2V0
PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3Nl
dC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5pc0pldHRpc29uZWQpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoYWRvcHRS
ZWYoKml0ZXIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6amV0dGlzb24oUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1B0cikKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50
IHRvIGRlbGV0ZSBpdCBub3c7IHdlIGp1c3Qgd2FudCBpdHMgcG9pbnRlci4KLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja1B0ci5sZWFrUmVmKCk7Ci0gICAgCi0gICAgQVNTRVJU
KGNvZGVCbG9jayk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxv
Y2stPmppdFR5cGUoKSkpOwotICAgIAotICAgIC8vIEl0IHNob3VsZCBub3QgaGF2ZSBhbHJlYWR5
IGJlZW4gamV0dGlzb25lZC4KLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNKZXR0aXNvbmVkKTsKLQotICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoaXMgYmxv
Y2sgYWxyZWFkeS4KLSAgICBBU1NFUlQobV9zZXQuZmluZChjb2RlQmxvY2spICE9IG1fc2V0LmVu
ZCgpKTsKLSAgICAKLSAgICBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0
dGlzb25lZCA9IHRydWU7Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCi17
Ci0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVn
aW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICgqaXRlciktPmpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nID0gZmFsc2U7Ci0gICAgICAgICgq
aXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxl
ZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBERkdDb2RlQmxvY2tzOjpkZWxldGVVbm1hcmtl
ZEpldHRpc29uZWRDb2RlQmxvY2tzKCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4s
IDE2PiB0b1JlbW92ZTsKLSAgICAKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgaWYgKCgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlzb25l
ZCAmJiAhKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCi0g
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoYWRvcHRSZWYoKml0ZXIpKTsKLSAgICB9Ci19Ci0K
LXZvaWQgREZHQ29kZUJsb2Nrczo6dHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9
IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
ZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCi0gICAg
ICAgICAgICAoKml0ZXIpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICB9Ci19Ci0KLSNl
bHNlIC8vIEVOQUJMRShERkdfSklUKQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBh
c3NSZWZQdHI8Q29kZUJsb2NrPikKLXsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9ERkdDb2RlQmxvY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvREZHQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IERGR0NvZGVCbG9ja3NfaAotI2RlZmluZSBERkdDb2RlQmxvY2tzX2gKLQotI2luY2x1ZGUgPHd0
Zi9GYXN0QWxsb2NCYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2NrOwot
Y2xhc3MgU2xvdFZpc2l0b3I7Ci0KLS8vIERGR0NvZGVCbG9ja3Mgbm90aWZpZXMgdGhlIGdhcmJh
Z2UgY29sbGVjdG9yIGFib3V0IG9wdGltaXplZCBjb2RlIGJsb2NrcyB0aGF0Ci0vLyBoYXZlIGRp
ZmZlcmVudCBtYXJraW5nIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGV5
IGFyZSBvbiB0aGUKLS8vIHN0YWNrLCBhbmQgdGhhdCBtYXkgYmUgamV0dGlzb25lZC4gSmV0dGlz
b25pbmcgaXMgdGhlIHByb2Nlc3Mgb2YgZGlzY2FyZGluZwotLy8gYSBjb2RlIGJsb2NrIGFmdGVy
IGFsbCBjYWxscyB0byBpdCBoYXZlIGJlZW4gdW5saW5rZWQuIFRoaXMgY2xhc3MgdGFrZXMgc3Bl
Y2lhbAotLy8gY2FyZSB0byBlbnN1cmUgdGhhdCBpZiB0aGVyZSBhcmUgc3RpbGwgY2FsbCBmcmFt
ZXMgdGhhdCBhcmUgdXNpbmcgdGhlIGNvZGUKLS8vIGJsb2NrLCB0aGVuIGl0IHNob3VsZCBub3Qg
YmUgaW1tZWRpYXRlbHkgZGVsZXRlZCwgYnV0IHJhdGhlciwgaXQgc2hvdWxkIGJlCi0vLyBkZWxl
dGVkIG9uY2Ugd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBsb25nZXIgYW55IHJlZmVyZW5jZXMg
dG8gaXQgZnJvbSBhbnkKLS8vIGNhbGwgZnJhbWVzLiBUaGlzIGNsYXNzIHRha2VzIGl0cyBuYW1l
IGZyb20gdGhlIERGRyBjb21waWxlcjsgb25seSBjb2RlIGJsb2NrcwotLy8gY29tcGlsZWQgYnkg
dGhlIERGRyBuZWVkIHNwZWNpYWwgbWFya2luZyBiZWhhdmlvciBpZiB0aGV5IGFyZSBvbiB0aGUg
c3RhY2ssIGFuZAotLy8gb25seSB0aG9zZSBjb2RlIGJsb2NrcyBtYXkgYmUgamV0dGlzb25lZC4K
LQotI2lmIEVOQUJMRShERkdfSklUKQotY2xhc3MgREZHQ29kZUJsb2NrcyB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBERkdDb2RlQmxvY2tzKCk7Ci0gICAg
fkRGR0NvZGVCbG9ja3MoKTsKLSAgICAKLSAgICAvLyBJbmZvcm0gdGhlIGNvbGxlY3RvciB0aGF0
IGEgY29kZSBibG9jayBoYXMgYmVlbiBqZXR0aXNvbmVkIGZvcm0gaXRzCi0gICAgLy8gZXhlY3V0
YWJsZSBhbmQgc2hvdWxkIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB0aGVyZSBhcmUgY2FsbCBmcmFt
ZXMgdGhhdCB1c2UKLSAgICAvLyBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGVpdGhlciBm
cm9tIGEgcmVjb21waWxhdGlvbiB0cmlnZ2VyLCBvciBmcm9tCi0gICAgLy8gYW4gdW5jb25kaXRp
b25hbCBmaW5hbGl6ZXIgYXNzb2NpYXRlZCB3aXRoIGEgQ29kZUJsb2NrIHRoYXQgaGFkIHdlYWsK
LSAgICAvLyByZWZlcmVuY2VzLCB3aGVyZSBzb21lIHN1YnNldCBvZiB0aG9zZSByZWZlcmVuY2Vz
IHdlcmUgZGVhZC4KLSAgICB2b2lkIGpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0g
ICAgCi0gICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUg
YmxvY2tzLgotICAgIHZvaWQgY2xlYXJNYXJrcygpOwotICAgIAotICAgIC8vIE1hcmsgYSBwb2lu
dGVyIHRoYXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIERG
RyBjb2RlCi0gICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQgaW5saW5lIGluIENvZGVCbG9j
ay5oCi0gICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7Ci0gICAgCi0gICAg
Ly8gRGVsZXRlIGFsbCBqZXR0aXNvbmVkIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSBub3QgYmVlbiBt
YXJrZWQgKGkuZS4gYXJlIG5vdCByZWZlcmVuY2VkCi0gICAgLy8gZnJvbSBjYWxsIGZyYW1lcyku
Ci0gICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7Ci0gICAgCi0g
ICAgLy8gVHJhY2UgYWxsIG1hcmtlZCBjb2RlIGJsb2NrcyAoaS5lLiBhcmUgcmVmZXJlbmNlZCBm
cm9tIGNhbGwgZnJhbWVzKS4gVGhlIENvZGVCbG9jawotICAgIC8vIGlzIGZyZWUgdG8gbWFrZSB1
c2Ugb2YgbV9kZmdEYXRhLT5pc01hcmtlZCBhbmQgbV9kZmdEYXRhLT5pc0pldHRpc29uZWQuCi0g
ICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKLQotcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEhhc2hTZXQ8Q29kZUJsb2Nr
Kj4gbV9zZXQ7Ci19OwotI2Vsc2UKLWNsYXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgdm9pZCBqZXR0aXNvbihQYXNzUmVmUHRy
PENvZGVCbG9jaz4pOwotICAgIHZvaWQgY2xlYXJNYXJrcygpIHsgfQotICAgIHZvaWQgbWFyayh2
b2lkKikgeyB9Ci0gICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCkg
eyB9Ci0gICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKSB7IH0KLX07
Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsMTEgKzM1NCw2IEBA
IGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUgaykKICAgICByZXR1cm4gbV9wcm90ZWN0ZWRW
YWx1ZXMucmVtb3ZlKGsuYXNDZWxsKCkpOwogfQogCi12b2lkIEhlYXA6OmpldHRpc29uREZHQ29k
ZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCi17Ci0gICAgbV9kZmdDb2Rl
QmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7Ci19Ci0KIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNl
KEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBpZiAobV9hcnJheUJ1
ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKQEAgLTQ1NywxMSArNDUyLDEwIEBA
IHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB9CiAKICAgICBDb25zZXJ2YXRpdmVSb290cyBz
dGFja1Jvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9zdG9yYWdlU3BhY2UpOwotICAg
IG1fZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFy
a3MoKTsKICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyU3RhY2tSb290cyk7Ci0gICAgICAg
IHN0YWNrKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoCi0gICAgICAgICAgICBzdGFja1Jvb3Rz
LCBtX2ppdFN0dWJSb3V0aW5lcywgbV9kZmdDb2RlQmxvY2tzKTsKKyAgICAgICAgc3RhY2soKS5n
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhzdGFja1Jvb3RzLCBtX2ppdFN0dWJSb3V0aW5lcywgbV9j
b2RlQmxvY2tzKTsKICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTQ4NSwxMiArNDc5
LDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIHsKICAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKHZpc2l0b3IpOwogCi0gICAgICAgIGlmIChtX3ZtLT5jb2RlQmxvY2tz
QmVpbmdDb21waWxlZC5zaXplKCkpIHsKLSAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRBY3RpdmVD
b2RlQmxvY2spOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZtLT5jb2Rl
QmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkrKykKLSAgICAgICAgICAgICAgICBtX3ZtLT5j
b2RlQmxvY2tzQmVpbmdDb21waWxlZFtpXS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAg
ICAgIH0KLQogICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KHZpc2l0b3IpOwogCiAgICAgICAgIHsKQEAgLTU1OCw3ICs1NDYsNyBAQCB2b2lkIEhlYXA6Om1h
cmtSb290cygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdDUEhBU0UoVHJhY2VDb2RlQmxvY2tz
QW5kSklUU3R1YlJvdXRpbmVzKTsKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRvciwg
IlRyYWNlIENvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lcyIpOwotICAgICAgICAgICAg
bV9kZmdDb2RlQmxvY2tzLnRyYWNlTWFya2VkQ29kZUJsb2Nrcyh2aXNpdG9yKTsKKyAgICAgICAg
ICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZCh2aXNpdG9yKTsKICAgICAgICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHZpc2l0b3IpOwogICAgICAgICAg
ICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAgICAgICB9CkBAIC02ODMsOCArNjcxLDgg
QEAgdm9pZCBIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUoKQogICAgICAgICBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmco
KTsKICAgICB9CiAKLSAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwotICAgIG1fZGZn
Q29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgbV9j
b2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRB
bmRVbnJlZmVyZW5jZWQoKTsKIH0KIAogdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZSgpCkBAIC03MDEsNyArNjg5LDcgQEAgdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBp
bGVkQ29kZSgpCiAgICAgICAgIG1fY29tcGlsZWRDb2RlLnJlbW92ZShjdXJyZW50KTsKICAgICB9
CiAKLSAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2Nr
cygpOworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpOwog
ICAgIG1faml0U3R1YlJvdXRpbmVzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5l
cygpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDggKzI0LDggQEAKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAi
QmxvY2tBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJD
b3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJHQ0lu
Y29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgog
I2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMTQ0LDggKzE0NCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdo
ZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KICAgICAgICAgCi0gICAgICAgIHZvaWQg
amV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKLQogICAgICAgICBz
aXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2Vz
IGFsbG9jYXRlZCBieSB0aGUgaGVhcAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qg
c2l6ZSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKQEAg
LTI3Myw3ICsyNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7Ci0gICAgICAgIERG
R0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tzOworICAgICAgICBDb2RlQmxvY2tTZXQgbV9jb2Rl
QmxvY2tzOwogICAgICAgICBKSVRTdHViUm91dGluZVNldCBtX2ppdFN0dWJSb3V0aW5lczsKICAg
ICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCShyZXZpc2lv
biAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDkgKzk2LDkgQEAgdm9pZCBKU1N0YWNrOjpnYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhDbwogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBn
ZXRUb3BPZlN0YWNrKCkpOwogfQogCi12b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVT
ZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKK3ZvaWQg
SlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNl
cnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxv
Y2tTZXQmIGNvZGVCbG9ja3MpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCks
IGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFjaygpLCBqaXRTdHViUm91
dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCiB2b2lkIEpTU3RhY2s6OnJlbGVhc2VFeGNlc3NDYXBh
Y2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNr
LmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKKyAgICBjbGFzcyBDb2RlQmxvY2tTZXQ7CiAgICAgY2xhc3MgQ29uc2VydmF0aXZl
Um9vdHM7Ci0gICAgY2xhc3MgREZHQ29kZUJsb2NrczsKICAgICBjbGFzcyBFeGVjU3RhdGU7CiAg
ICAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiAgICAgY2xhc3MgVk07CkBAIC03MSw3ICs3MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+SlNTdGFjaygpOwogICAgICAgICAKICAgICAg
ICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwotICAg
ICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklU
U3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29u
c2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENv
ZGVCbG9ja1NldCYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAgICAgICAg
IFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDE1NDk2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJbmxpbmVD
YWxsRnJhbWUqIGFzSW5saW5lQ2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgdW5i
b3hlZEludDMyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgdW5ib3hlZEJvb2xlYW4oKSBjb25zdDsK
KyAgICAgICAgZG91YmxlIHVuYm94ZWREb3VibGUoKSBjb25zdDsKICAgICAgICAgSlNDZWxsKiB1
bmJveGVkQ2VsbCgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHBheWxvYWQoKSBjb25zdDsKICAg
ICAgICAgaW50MzJfdCB0YWcoKSBjb25zdDsKQEAgLTk2LDYgKzk3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBDOwogICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yIGVuY29kZWRWYWx1ZTsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXI7CiAgICAgICAgIH0g
dTsKICAgICB9OwogCkBAIC0xODgsNiArMTkwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gISFwYXlsb2FkKCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBkb3VibGUg
UmVnaXN0ZXI6OnVuYm94ZWREb3VibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHUu
bnVtYmVyOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBSZWdpc3Rlcjo6dW5i
b3hlZENlbGwoKSBjb25zdAogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBpZiAoIWNhbkJlT3B0aW1p
emVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvclJldHVybigpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZK
SVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcHRp
bWl6ZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVP
ZmZzZXQpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niwx
MiBAQCBGVEw6OkpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiAgICAgcmV0dXJuIDA7CiB9CiAKK0ZU
TDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBKSVRDb2RlOjpob3N0RnVuY3Rpb24oSklUQ29kZTo6Q29kZVJlZiBjb2Rl
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShjb2RlLCBIb3N0Q2Fs
bFRodW5rKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24g
MTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNzIEpJVENvZGU7
CiB9CiBuYW1lc3BhY2UgRlRMIHsKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZTsKIGNsYXNzIEpJ
VENvZGU7CiB9CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBERkc6
OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIHZpcnR1YWwgREZHOjpKSVRDb2RlKiBkZmco
KTsKICAgICB2aXJ0dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7CisgICAgdmlydHVhbCBGVEw6OkZv
ck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKICAgICAKICAgICBKU1ZhbHVlIGV4
ZWN1dGUoSlNTdGFjayosIENhbGxGcmFtZSosIFZNKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzYsMTYg
KzEwMzYsMzIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2Vy
aW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAgICAg
ICAgCi0gICAgICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNr
ID0KLSAgICAgICAgICAgIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUoKTsKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gY29kZUJsb2Nr
LT5uZXdSZXBsYWNlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCF2bS53b3JrbGlzdCkK
LSAgICAgICAgICAgIHZtLndvcmtsaXN0ID0gREZHOjpnbG9iYWxXb3JrbGlzdCgpOworICAgICAg
ICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgaWYgKGJ5dGVjb2RlSW5kZXgp
CisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CisgICAgICAg
IE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoCisgICAgICAgICAgICBjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Cisg
ICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAg
ICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAmJiBjb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAgJiYgY29k
ZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisgICAg
ICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMn
IGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAgICAvLyBh
bHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGludG8gdGhl
IHZhbHVlIGZvciB0aGlzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4g
YWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2Vz
LAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBp
dCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0g
anNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG11c3RI
YW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgp
OworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQg
PSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9jay5nZXQo
KSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAgICAgIHZt
LndvcmtsaXN0LmdldCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2Vt
ZW50KCkuZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIG11
c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUoKSwKKyAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0xMDU0LDE1ICsxMDcwLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0
aW1pemUpCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6
ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRMIEpJVCBk
b2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAgLy8gRG9u
J3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGlt
aXplQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAgICBpZiAo
dm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVk
Q29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwyMCArOTAsNiBAQCBJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmluc2ljKCkg
CiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVQpCi0vLyBVdGlsaXR5IG1ldGhvZCB1c2VkIGZv
ciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMg
dm9pZCBqZXR0aXNvbkNvZGVCbG9jayhWTSYgdm0sIFJlZlB0cjxUPiYgY29kZUJsb2NrKQotewot
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBSZWZQdHI8VD4g
Y29kZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7Ci0gICAgY29kZUJsb2Nr
ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0
ZXJuYXRpdmUoKSk7Ci0gICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxs
cygpOwotICAgIHZtLmhlYXAuamV0dGlzb25ERkdDb2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2Fz
dDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7Ci19Ci0jZW5kaWYK
LQogY29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlNjcmlwdEV4
ZWN1dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShTY3JpcHRFeGVjdXRhYmxlKSB9OwogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTEyNSwxMiAr
MTExLDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgogICAgIAog
ICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgCi0gICAgaWYgKEpJVENvZGU6
OmlzSklUKGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKLSAgICAgICAgdm0uaGVhcC5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3QoCi0gICAgICAgICAgICBzaXplb2YoQ29kZUJsb2NrKSArIGdl
bmVyaWNDb2RlQmxvY2stPmppdENvZGUoKS0+c2l6ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
dm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykpOwotICAgIAog
ICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGdlbmVyaWNDb2RlQmxvY2stPnNwZWNp
YWxpemF0aW9uS2luZCgpOwogICAgIAogICAgIFJlZlB0cjxDb2RlQmxvY2s+IG9sZENvZGVCbG9j
azsKQEAgLTM3NiwxNSArMzU2LDYgQEAgaW5saW5lIGNvbnN0IGNoYXIqIHNhbXBsaW5nRGVzY3Jp
cHRpb24oSgogICAgIH0KIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIEV2YWxFeGVjdXRhYmxl
OjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2Nr
KHZtLCBtX2V2YWxDb2RlQmxvY2spOwotICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2V2YWxDb2Rl
QmxvY2stPmppdENvZGUoKTsKLSAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjayk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAg
IEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4oY2Vs
bCk7CkBAIC00MjYsMTUgKzM5Nyw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hl
Y2tTeW50YXgKICAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBtX3NvdXJjZSk7CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotdm9pZCBQcm9ncmFtRXhlY3V0
YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNvZGVC
bG9jayh2bSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9w
cm9ncmFtQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2spOwotfQotI2VuZGlmCi0KIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVu
bGlua0NhbGxzKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNTE4LDIyICs0ODAsNiBAQCBGdW5j
dGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0s
IG1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9
IG1fY29kZUJsb2NrRm9yQ2FsbC0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7Ci19Ci0KLXZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoVk0m
IHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCk7Ci0gICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PmppdENvZGUoKTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKLX0KLSNlbmRp
ZgotCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE1NDk2MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDQ1LDEwICs0NDUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVk
Q29kZShWTSYpOwotI2VuZGlmCi0KICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2soKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZXZhbENvZGVCbG9jay5nZXQoKTsKQEAgLTUwNiwxMCArNTAy
LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSNlbmRp
ZgotCiAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCk7CkBAIC01ODEsMTAgKzU3Myw2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwogICAgIH0K
ICAgICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNhbGwoVk0mKTsKLSNlbmRpZgotCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKQEAgLTU5NSwx
MCArNTgzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdl
dCgpOwogICAgIH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXpl
ZENvZGVGb3JDb25zdHJ1Y3QoVk0mKTsKLSNlbmRpZgotCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZv
ckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3Q7CkBAIC02MDksMTggKzU5Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwogICAgIH0KICAgICAgICAgCi0jaWYgRU5BQkxF
KEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSAKLSAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwodm0pOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OwotICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KHZtKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgICAgICAKICAgICBib29sIGlzR2VuZXJhdGVkRm9y
KENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAgICAgIGlmIChraW5kID09
IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2LDE0IEBAIHR5cGVkZWYgT3B0aW9u
UmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcCwgMTAwMCkgXAogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29u
LCAxMDAwKSBcCi0gICAgXAogICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JMb29wLCAxKSBcCi0gICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJl
dHVybiwgMTUpIFwKKyAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50
cnksIDE1KSBcCisgICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0
ZXJXYXJtVXAsIDEwMDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1pemVT
b29uLCAxMDAwKSBcCisgICAgdihpbnQzMiwgZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxv
b3AsIDEpIFwKKyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJu
LCAxNSkgXAorICAgIHYodW5zaWduZWQsIGZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9yUmVvcHRp
bWl6YXRpb24sIDE1KSBcCiAgICAgXAogICAgIHYoaW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBs
aWVyLCAxMCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDYgKzcxMCwxNSBAQCB2b2lkIFZNOjpnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2CiAgICAgICAgIH0KICAgICB9CiB9CisKK0RGRzo6V29ya2xp
c3QqIFZNOjplbnN1cmVXb3JrbGlzdCgpCit7CisgICAgaWYgKCFERkc6OmVuYWJsZUNvbmN1cnJl
bnRKSVQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAgICAgICAg
d29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmtsaXN0Lmdl
dCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAg
ICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGlu
ZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAgICAgIAor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVXb3JrbGlz
dCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwpAQCAtMjc0LDE3ICsyNzgsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7CiAgICAgICAgIERh
dGVJbnN0YW5jZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOwogICAgICAgICBXVEY6OlNpbXBsZVN0
YXRzIG1hY2hpbmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKLSAgICAg
ICAgVmVjdG9yPENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOwotICAgICAgICB2
b2lkIHN0YXJ0ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmFwcGVuZChjb2RlQmxvY2spOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBmaW5pc2hlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVC
bG9jaykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNv
ZGVCbG9jayA9PSBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5sYXN0KCkpOwotICAgICAgICAgICAg
Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQucmVtb3ZlTGFzdCgpOwotICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBzZXRJbkRlZmluZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9wZXJ0eSkK
ICAgICAgICAgewpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDktMDIgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBDb2RlQmxvY2s6OmpldHRpc29uKCkg
c2hvdWxkIGJlIGltcGxpY2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjA1NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gZ2V0IGEgUmVmQ291bnRlZEFy
cmF5J3MgcmVmQ291bnQoKSBzbyB0aGF0IGEgQ29kZUJsb2NrCisgICAgICAgIGNhbiBjb21wdXRl
IGl0cyBwYXJ0IG9mIHRoZSBmb290cHJpbnQgb2YgYW4gSW5zdHJ1Y3Rpb24gYXJyYXkgYnkgZG9p
bmcKKyAgICAgICAgc29tZXRoaW5nIGxpa2Ugc2l6ZSgpIC8gcmVmQ291bnQoKS4KKworICAgICAg
ICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5
OjpyZWZDb3VudCk6CisKIDIwMTMtMDktMDIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtNYWNdIE5vIG5lZWQgZm9yIEhhcmRBdXRvcmVsZWFzZSwgd2hpY2ggaXMg
c2FtZSBhcyBDRkJyaWRnaW5nUmVsZWFzZQpJbmRleDogU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgZmFzdEZy
ZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpKTsKICAgICB9CiAgICAgCisgICAgdW5zaWdu
ZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRh
KS0+cmVmQ291bnQ7CisgICAgfQorICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7
CiAgICAgICAgIGlmICghbV9kYXRhKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210312</attachid>
            <date>2013-09-02 15:17:22 -0700</date>
            <delta_ts>2013-09-02 22:14:57 -0700</delta_ts>
            <desc>JSC just did an OSR-entry hot loop transfer from the DFG to the FTL.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>195538</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGhhcyBzb21lIHNtYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9u
cy4gSlNCZW5jaC9nb29nbGUKKyAgICAgICAgc2hvd3MgYSB+OSUgcmVncmVzc2lvbiBiZWNhdXNl
IGl0IEdDJ3MgbW9yZSBmcmVxdWVudGx5LiBIb3dldmVyLCB0aGF0CisgICAgICAgIHJlZ3Jlc3Np
b24gaXMgbm90IGR1ZSB0byB0aGUgamV0dGlzb24gcmVmYWN0b3JpbmcgLSBpbnN0ZWFkIGl0J3Mg
ZHVlIHRvCisgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhpcyBjaGFuZ2UgYWxzbyBtYWtlcyB1cyBt
b3JlIHByZWNpc2VseSB0cmFjayBDb2RlQmxvY2sKKyAgICAgICAgbWVtb3J5IGZvb3RwcmludC4g
UHJldmlvdXNseSwgd2UgaWdub3JlZCB0aGUgc2l6ZSBvZiB0aGUgYnl0ZWNvZGUgc3RyZWFtLgor
ICAgICAgICBOb3cgd2UgZG9uJ3QgaWdub3JlIGl0IGFueXdheS4gVGhpcyBjYXVzZXMgc29tZSBi
ZW5jaG1hcmtzIHRvIEdDIG1vcmUKKyAgICAgICAgZnJlcXVlbnRseS4gSXQncyBhIGJ1ZyB0byBo
YXZlIHRoZSBHQyBpZ25vcmUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAgICAgQ29kZUJs
b2NrcywgYW5kIGlmIHRoYXQgYnVnIGNhdXNlcyBzb21lIGJlbmNobWFyayB0byBydW4gYSBiaXQg
ZmFzdGVyCisgICAgICAgIHdoaWxlIHVzaW5nIGEgYml0IG1vcmUgbWVtb3J5LCB0aGVuIGl0J3Mg
c3RpbGwgYSBidWcgYW5kIHdlIHNob3VsZCBzdGlsbAorICAgICAgICBmaXggaXQuIFRoZXJlIGFy
ZSBubyBvdGhlciBwZXJmb3JtYW5jZSBjaGFuZ2VzIGR1ZSB0byB0aGlzIGNoYW5nZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRk
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgor
ICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNr
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBmb3IgSGFyZEF1dG9y
ZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwzMCArMTY5
LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGlzYXNzZW1ibGVyL1g4NkRp
c2Fzc2VtYmxlci5jcHAKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3IuY3BwCi0gICAgaGVhcC9D
b3BpZWRTcGFjZS5jcHAKLSAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAotICAgIGhlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAot
ICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKLSAgICBoZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCi0gICAgaGVhcC9HQ1RocmVhZC5jcHAKLSAgICBoZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKLSAgICBoZWFwL0hhbmRsZVNldC5jcHAKLSAgICBoZWFw
L0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSGVhcC5jcHAKLSAgICBoZWFwL0hlYXBTdGF0aXN0
aWNzLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAotICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAotICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCi0gICAgaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCi0KLSAgICBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAorICAgIGhlYXAv
Q29kZUJsb2NrU2V0LmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVh
cC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvREZH
Q29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcApAQCAtMjAwLDYgKzE4MCw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAv
SGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCisgICAgaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBo
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAgICBoZWFwL01hcmtTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQyLDYgKzQ0Miw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaCBcCkBAIC00NTYsOCArNDU4
LDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDExICs4MiwxMSBAQCBTT1VSQ0VTICs9IFwK
ICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAorICAg
IGhlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAgICAgaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaCBc
CiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwIFwK
ICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tz
LmNwcCBcCiAgICAgaGVhcC9XZWFrLmNwcCBcCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwIFwKICAg
ICBoZWFwL1dlYWtIYW5kbGVPd25lci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RyaXZlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNz
ZW1ibGVyXERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxDb2RlQmxvY2tTZXQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29uc2VydmF0aXZlUm9vdHMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29waWVkU3BhY2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVZpc2l0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
REZHQ29kZUJsb2Nrcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxH
Q1RocmVhZC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGFu
ZGxlU2V0LmNwcCIgLz4NCkBAIC02NzksNiArNjc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3BpZWRBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcGllZEJsb2NrLmgiIC8+DQpAQCAtNjg5LDcgKzY5MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvcklubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXENvcHlXb3JrTGlzdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcREZHQ29kZUJsb2Nrcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1RocmVhZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWRTaGFyZWREYXRhLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4
LDYgQEAKIAkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0QzE1
MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLzsgfTsKIAkJMEYyQkRDNEYx
NTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBE
RkdWYWx1ZVNvdXJjZS5jcHAgKi87IH07CiAJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkxMCAvKiBE
RkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNw
cCAqLzsgfTsKLQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9
OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAw
M0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZp
ZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5
NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAq
LzsgfTsKQEAgLTM2OSw2ICszNjcsMjAgQEAKIAkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07
CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CisJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xMzU0LDgg
KzEzNjYsNiBAQAogCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkTm9k
ZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVlU291cmNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29kZUJs
b2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MDE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7
IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNl
S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU4LDYgKzE1NjgsMjAg
QEAKIAkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTUz
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVj
dWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzExMTdE
NDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMRm9yT1NSRW50cnlKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE3MTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPU1JFbnRyeS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRW50cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NS
RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRW50cnkuaDsg
cGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMUUxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIw
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHBhdGgg
PSBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgcGF0aCA9IGRmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRsL0ZU
TEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dv
cmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTM5LDYgKzI1NjMsOCBAQAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEw
NDE3QSAvKiBGVExGYWlsLmNwcCAqLywKIAkJCQlBN0YyOTk2QTE3QTBCQjY3MDAxMDQxN0EgLyog
RlRMRmFpbC5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0
ZWRWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwICovLAorCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyog
RlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBBMjIxNzA5NjA2OTAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTI1NTEsNiArMjU3Nyw4
IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNw
cCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
aCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1
ZS5oICovLAorCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAg
Ki8sCisJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggKi8sCiAJ
CQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICovLAogCQkJCTBG
MjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCiAJCQkJMEYyMzVCQzgx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLywKQEAgLTI3
MTUsNiArMjc0Myw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgxNkUxOTE1NENDNTZDMDBC
ODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuY3BwICovLAogCQkJCTE0ODE2RTFBMTU0Q0M1NkMwMEI4
MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovLAorCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0
MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAorCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAv
KiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCAqLywKQEAgLTI3MjksOCArMjc1OSw2IEBACiAJCQkJQzIyMzlEMTQx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMThEMTNG
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFE
NjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAotCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKLQkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBH
Q0Fzc2VydGlvbnMuaCAqLywKIAkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCAqLywKIAkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCkBAIC0zNTI0LDYgKzM1NTIsOCBAQAogCQkJ
CUE3RDg5Q0VGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLywK
KwkJCQkwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwICovLAorCQkJCTBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovLAogCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgKi8sCkBAIC0zNTY2LDYgKzM1OTYsMTIgQEAKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlG
MTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4
QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZEOEEzMjAx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLywKKwkJ
CQkwRkQ4QTMyMTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovLAorCQkJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCTBGRDhBMzIzMTdENTFGNTcw
MENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCAqLywKKwkJCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGNjM5NDNDMTVDNzVG
MTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjYz
OTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKQEAgLTM4OTEsNyArMzkyNyw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQw
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTk5LDcgQEAKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTc3LDYg
KzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2
RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBACiAJCQkJMTRCQTdBOTgxM0FBREZGODAw
NUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0Uw
MERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTIsNiArNDMzMCw3IEBACiAJ
CQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJB
MyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBC
MzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3
QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzFBMTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJl
Z0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1LDYgKzQzODUsNyBAQAogCQkJCTBGQjdG
MzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5
NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FC
NjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8q
IFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2
QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZE
RDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMy
QTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAv
KiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYg
KzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENv
bW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZl
cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDgyNSw3ICs0ODY5LDYgQEAKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdB
NDI0MTE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4ODYsNiArNDkyOSw3IEBA
CiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI5MTdENTFG
NTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0
QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5ODcsNiArNTAzMSw3IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pT
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8q
IEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzEzMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcgQEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JF
OEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkx
NkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTExLDYgKzUxNTcsNyBA
QAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxNDEsNiAr
NTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBT
dXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1f
aXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAg
ICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9vd25lckV4ZWN1dGFi
bGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293
bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92bSkKQEAgLTE1MDQsNiAr
MTUwNSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5k
aWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxOCw5IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVhcC0+
bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTUyNSw2ICsxNTMwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSkKICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQogICAgICwgbV9v
d25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQogICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE1
NDQsNyArMTU1MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8K
ICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQp
CiAjZW5kaWYKIHsKLSAgICBtX3ZtLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAKICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNl
dE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CkBAIC0x
ODQyLDcgKzE4NDgsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBk
dW1wQnl0ZWNvZGUoKTsKLSAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKyAgICBt
X2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4NTAs
MTIgKzE4NTcsNiBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGlmIChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CiAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
Ly8gUmVtb3ZlIG15c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBOb3RlIHRo
YXQgSSBtYXkgbm90IGJlIGluIHRoaXMgc2V0Ci0gICAgLy8gKGJlY2F1c2UgSSdtIG5vdCBhIERG
RyBjb2RlIGJsb2NrKSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5LgotICAg
IG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsKLSNlbmRpZgot
ICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKICNlbmRpZgpAQCAtMTkwNSwzMyArMTkwNiwzNSBAQCB2b2lkIEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgewotICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15
c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHku
Ci0gICAgICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3Zl
IGJlZW4gY2FsbGVkIGFscmVhZHkuIE9ubHkgb25lIHRocmVhZAotICAgICAgICAvLyBtYXkgcHJv
Y2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIENBUyByYWNlLgot
ICAgICAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb2xk
VmFsdWUgPSBkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKLSAgICAgICAg
ICAgIGlmIChvbGRWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Ci0g
ICAgICAgICAgICAgICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4g
RG9pbmcgc28gaXMgaGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBi
ZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBKU1Zh
bHVlcywgd2hpY2ggY2FuCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24g
MzItYml0LCBsZWFkaW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmVhcmx5IGltcG9zc2libGUgdG8gdHJhY2sgZG93bi4K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBt
dXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVhcmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQotICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIHRydWUgKHdlbGwsICh1bnNpZ25lZCkxKSwgc2luY2Ugb25jZSBh
IEdDIHRocmVhZCBpcyBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGFuZCBoYXMg
d29uIHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZh
bHVlIHRydWUpCi0gICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5IGNvbXBsZXRl
IHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKLSAgICAgICAgICAgICAg
ICAvLyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmZGZnQ29tbW9uLT52
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0dDKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2Us
IGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgIC8vIFRvIHRoaXMgZW5k
LCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuIE9u
bHkgb25lIHRocmVhZAorICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCisgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAg
ZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwor
ICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Cisg
ICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2lu
ZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgbXV0YXRp
bmcgdGhlIHN0YXRlIG9mIFZhbHVlUHJvZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdo
aWNoIGNhbgorICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFk
aW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCisgICAgICAgICAgICAvLyB0
aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVh
cmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
CisgICAgICAgICAgICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3Bv
bnNpYmxlIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgLy8gaXQgd2ls
bCBkZWZpbml0ZWx5IGNvbXBsZXRlIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNs
YXJpbmcKKyAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX3Zpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExF
TF9HQykKKyAgICAKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZW9mKENv
ZGVCbG9jaykpOworICAgIGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlVc2FnZShtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25z
LnNpemUoKSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZD
b3VudCgpKTsKICAgICAKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVy
bmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTIzNzksMTcgKzIzODIsMTQgQEAg
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUo
SklUKQorYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Cit9CisKIGJvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGJvb2wgcmVzdWx0ID0gSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxh
Y2VtZW50KCktPmppdFR5cGUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudCgpID09IHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOwogfQogI2VuZGlm
CiAKQEAgLTI3NDAsMjggKzI3NDAsMTQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25D
b2RlQmxvY2s6OgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQogeworICAgIERlZmVyR0Mg
ZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwogICAgIGFsdGVy
bmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRh
dGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzLCAiLlxuIik7Ci0gICAgamV0dGlzb25JbXBsKCk7
Ci19Ci0KLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKCp2bSgpKTsKLX0KLQotdm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbklt
cGwoKQotewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgp
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAg
IGFsdGVybmF0aXZlKCktPmluc3RhbGwoKTsKIH0KICNlbmRpZgogCkBAIC0zMDM4LDEwICszMDI0
LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0
aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0
aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApA
QCAtMzA0OSwxNiArMzAzNSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3Rp
bGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
b3B0aW1pemVkIGNvZGUgcmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAg
ICAgY291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0hhc2guaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlw
ZS5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJs
b2Nrcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtODMsNyArODMsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0yNzMs
MTQgKzI3MiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVj
aykKICAgICB7CisgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisgICAgICAg
IG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2Nr
IHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJh
bm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKICAgICAgICAgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvcihtX2pp
dENvZGUpKSkKLSAgICAgICAgICAgIG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFk
ZCh0aGlzKTsKLSNlbmRpZgogICAgIH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KQEAg
LTMxMSw3ICszMDgsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsg
fQogCi0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOworICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBi
b29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15
IEpJVFR5cGUKICNlbmRpZgogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTk2MCwxMCAr
OTU4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAg
Ym9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247
CisgICAgCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIApAQCAtOTc0LDcgKzk3MSw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2tTZXQ7CiAgICAgCiAgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSk7CiAgICAgCkBAIC0xMDE3LDE3ICsxMDE0LDE2IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpCiAgICAgewotICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFucyB0
aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKLSAgICAg
ICAgLy8gQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28KLSAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQg
Q29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0
IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCiAgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJs
b2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFk
IHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCiAgICAgICAgIC8vIGFs
bG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9q
aXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmIChtX21heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwNjcsNiArMTA2Myw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2
YXRpb247CisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAgIHVpbnQ4X3QgbV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291
cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTE4Niw3ICsxMTg0LDYgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjA5LDcgKzEyMDYsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjMyLDcg
KzEyMjgsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjkxLDggKzEyODYsNyBAQCBpbmxpbmUgSlNW
YWx1ZSBFeGVjU3RhdGU6OmFyZ3VtZW50QWZ0ZXJDCiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5qc1ZhbHVlKCk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLWlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAw
IGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMu
CiAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CkBAIC0xMzA3LDkgKzEzMDEsOCBAQCBpbmxpbmUgdm9pZCBERkdDb2Rl
QmxvY2tzOjptYXJrKHZvaWQqIGNhCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRy
dWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYgKzE1MjAsMTQgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRv
bToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAg
Y2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgorICAgIGNh
c2UgTG9vcEhpbnQ6CisgICAgICAgIC8vIFdlIHByZXRlbmQgdGhhdCBpdCBjYW4gZXhpdCBiZWNh
dXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUuCisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVbnJlYWNoYWJsZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0MCwxOSArMzE0MCwxOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpZiAoIW1faW5s
aW5lU3RhY2tUb3AtPm1fY2FsbGVyKQogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5p
c09TUlRhcmdldCA9IHRydWU7CiAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9vcEhpbnQpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92bS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkp
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1dhdGNoZG9nVGltZXIpOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50b20gbm9kZSB0byBl
bnN1cmUgdGhhdCB0aGVyZSBpcyBhIHBsYWNlaG9sZGVyCi0gICAgICAgICAgICAgICAgLy8gbm9k
ZSBmb3IgdGhpcyBieXRlY29kZSBvcC4KLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20pOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOworICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7CisgICAgICAg
ICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlz
UmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CisgICAg
ICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRh
dGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxvY2sqIGJsb2Nr
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9
IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1f
YWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwotICAgICAg
ICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJc1N0cmlu
ZzoKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBNb3ZIaW50QW5kQ2hlY2s6CkBAIC0xMzMsNiArMTM0LDEwIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBj
YXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVy
VXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICB3cml0ZShTaWRlU3Rh
dGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDcgQEAg
c3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKIGNsYXNzIENvbW1vbkRhdGEgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgotICAgIENvbW1vbkRh
dGEoKQotICAgICAgICA6IG1heUJlRXhlY3V0aW5nKGZhbHNlKQotICAgICAgICAsIGlzSmV0dGlz
b25lZChmYWxzZSkKLSAgICB7Ci0gICAgfQorICAgIENvbW1vbkRhdGEoKSB7IH0KICAgICAKICAg
ICB2b2lkIG5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oUGxhbiYsIENvZGVCbG9j
ayosIE5vZGUqKTsKICAgICAKQEAgLTgxLDExICs3Nyw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAgICAKICAgICBSZWZQdHI8
UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKLSAgICBib29sIG1heUJlRXhlY3V0
aW5nOwotICAgIGJvb2wgaXNKZXR0aXNvbmVkOwogICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJv
dmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICBib29sIGFsbFRy
YW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5
IEdDLgotICAgIHVuc2lnbmVkIHZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsgLy8gVW5zaWdu
ZWQgdG8gbWFrZSBpdCB3b3JrIHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlc3Qgc2V0IG9mIENB
UyBpbXBsZW1lbnRhdGlvbnMuCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDkgKzU1LDkgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKIAogI2lm
IEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9k
ZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLAotICAgIFdvcmtsaXN0KiB3b3Jr
bGlzdCkKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUg
bW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgV29ya2xpc3QqIHdvcmtsaXN0KQogewogICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsK
ICAgICAKQEAgLTY3LDggKzY3LDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CiAgICAgCi0gICAgQVNTRVJUKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCk7
Ci0KICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpIHx8ICFNYWNyb0Fzc2VtYmxlcjo6c3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
IApAQCAtNzYsOSArNzQsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
CiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKICAgICAKICAgICBpZiAobG9nQ29t
cGlsYXRpb25DaGFuZ2VzKCkpCi0gICAgICAgIGRhdGFMb2coIkRGRyhEcml2ZXIpIGNvbXBpbGlu
ZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwotICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgICAgIGRhdGFMb2coIkRGRyhEcml2ZXIpIGNvbXBpbGluZyAiLCAqY29kZUJsb2Nr
LCAiIHdpdGggIiwgbW9kZSwgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQu
IFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9u
IGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KQEAgLTkzLDI5ICs4OSw4IEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICB2bS5nZXRDVElTdHVi
KEZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAjZW5kaWYKICAgICAKLSAg
ICAvLyBEZXJpdmUgb3VyIHNldCBvZiBtdXN0LWhhbmRsZSB2YWx1ZXMuIFRoZSBjb21waWxhdGlv
biBtdXN0IGJlIGF0IGxlYXN0IGNvbnNlcnZhdGl2ZQotICAgIC8vIGVub3VnaCB0byBhbGxvdyBm
b3IgT1NSIGVudHJ5IHdpdGggdGhlc2UgdmFsdWVzLgotICAgIHVuc2lnbmVkIG51bVZhcnNXaXRo
VmFsdWVzOwotICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIG51bVZhcnNX
aXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7Ci0gICAgZWxzZQotICAgICAgICBudW1W
YXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKLSAg
ICAgICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51
bVZhcnNXaXRoVmFsdWVzKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gcGxhbi0+
bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpCi0gICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlCi0gICAgICAgICAgICAmJiBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENv
ZGVGb3JDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25z
dHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCi0g
ICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQg
d2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAotICAgICAgICAgICAgLy8gYnV0IGl0IGhh
cyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50
IERGRyBwYXNzZXMsCi0gICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1
cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCi0gICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFs
dWVzW2ldID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGFu
LT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVl
KCk7Ci0gICAgfQorICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwogICAgIAogICAgIGlmICh3b3JrbGlzdCkg
ewogICAgICAgICBwbGFuLT5jYWxsYmFjayA9IGNhbGxiYWNrOwpAQCAtMTMwLDcgKzEwNSw3IEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKIH0KICNlbHNlIC8vIEVOQUJM
RShERkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIEV4
ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsCisgICAgVk0m
LCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxK
U1ZhbHVlPiYsCiAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBX
b3JrbGlzdCopCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTM4LDEzICsx
MTMsMTMgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAot
ICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3NlZENhbGxiYWNrLAotICAgIFdvcmtsaXN0KiB3b3JrbGlz
dCkKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9k
ZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpT
VmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiBwYXNzZWRDYWxsYmFjaywgV29ya2xpc3QqIHdvcmtsaXN0KQogewogICAg
IFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gcGFzc2VkQ2Fs
bGJhY2s7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29tcGlsZUltcGwoCi0gICAg
ICAgIGV4ZWMsIGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjYWxsYmFj
aywgd29ya2xpc3QpOworICAgICAgICB2bSwgY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMsIGNhbGxiYWNrLCB3b3JrbGlzdCk7CiAgICAgaWYg
KHJlc3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKQogICAgICAgICBjYWxsYmFjay0+Y29tcGls
YXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsMTAgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29t
cGlsYQogCiAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm9uLW51bGwsIHdlIGRvIGEgY29uY3VycmVu
dCBjb21waWxlLiBPdGhlcndpc2Ugd2UgZG8gYSBzeW5jaHJvbm91cwogLy8gY29tcGlsZS4gRXZl
biBpZiB3ZSBkbyBhIHN5bmNocm9ub3VzIGNvbXBpbGUsIHdlIGNhbGwgdGhlIGNhbGxiYWNrIHdp
dGggdGhlIHJlc3VsdC4KLUNvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoRXhlY1N0YXRlKiwgQ29k
ZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiwgV29ya2xpc3QqKTsKK0Nv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0Kik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAg
ICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBB
bmRPU1JFbnRlcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC04OTYsNiArODk5LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1Rp
bWVyOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgICAgICBjYXNlIEV4dHJhY3RPU1JF
bnRyeUxvY2FsOgorICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAj
ZWxzZQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDEzIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICB9CisgICAgaWYgKG5v
ZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgeworICAgICAgICBpbnQgb3BlcmFuZCA9IG5vZGUtPnVu
bGlua2VkTG9jYWwoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3Bl
cmFuZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwg
b3BlcmFuZCk7CisgICAgfQogICAgIGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSk7CiAgICAgICAgIG91dC5wcmludChub2RlLT5zdGFydENv
bnN0YW50KCksICI6WyIpOwpAQCAtNDg3LDYgKzQ5NCwyOSBAQCB2b2lkIEdyYXBoOjpyZXNldFJl
YWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3Jh
cGg6OmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGZv
ciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQor
ICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAg
ICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIAorICAgIGtp
bGxCbG9jayhibG9jayk7Cit9CisKK3ZvaWQgR3JhcGg6OmtpbGxVbnJlYWNoYWJsZUJsb2Nrcygp
Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRo
aXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2Nr
KTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7CiAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGtp
bGxCbG9jayhiYXNpY0Jsb2NrLT5pbmRleCk7CiAgICAgfQogICAgIAorICAgIHZvaWQga2lsbEJs
b2NrQW5kSXRzQ29udGVudHMoQmFzaWNCbG9jayopOworICAgIAorICAgIHZvaWQga2lsbFVucmVh
Y2hhYmxlQmxvY2tzKCk7CisgICAgCiAgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2Rl
KiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgJiYgaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpKTsKQEAg
LTY5OCw2ICs3MDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBI
YXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBl
ZDsKICAgICBCaXRWZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX2xhenlW
YXJzOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIE5hdHVyYWxMb29wcyBtX25h
dHVyYWxMb29wczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIHZvaWQg
SW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgIHJvb3QtPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKICAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIo
KTsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMTI5LDggKzEzMCw2IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRp
YWxpemUoKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5
cGUoU3BlY0NlbGwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOwotICAgICAgICAKLSAgICAgICAgcm9vdC0+dmFsdWVz
QXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIEpJVENvZGU6
OkpJVENvZGUoKQpAQCAtNTksNiArNjEsMTQ1IEBAIHZvaWQgSklUQ29kZTo6c2hyaW5rVG9GaXQo
KQogICAgIHZhcmlhYmxlRXZlbnRTdHJlYW0uc2hyaW5rVG9GaXQoKTsKIH0KIAordm9pZCBKSVRD
b2RlOjpyZWNvbnN0cnVjdCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiYgcmVzdWx0KQoreworICAgIHZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoCisg
ICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgbWluaWZpZWRERkcsIHN0cmVhbUluZGV4LCBy
ZXN1bHQpOworfQorCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsCisgICAgT3BlcmFuZHM8SlNWYWx1ZT4mIHJlc3VsdCkKK3sKKyAgICBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PiByZWNvdmVyaWVzOworICAgIHJlY29uc3RydWN0KGNvZGVC
bG9jaywgY29kZU9yaWdpbiwgc3RyZWFtSW5kZXgsIHJlY292ZXJpZXMpOworICAgIAorICAgIHJl
c3VsdCA9IE9wZXJhbmRzPEpTVmFsdWU+KE9wZXJhbmRzTGlrZSwgcmVjb3Zlcmllcyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJh
bmQgPSByZXN1bHQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1l
bnQob3BlcmFuZCkKKyAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUKKyAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkg
PT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBh
IGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdp
bGwKKyAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIg
d2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMsCisgICAgICAgICAgICAvLyBidXQg
aXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNl
cXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUg
YnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IGpz
VW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSA9IHJlY292ZXJpZXNbaV07CisgICAgICAg
IEpTVmFsdWUgdmFsdWU7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
KyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrOgorICAgICAgICBjYXNlIEFscmVhZHlJbkpT
U3RhY2tBc1VuYm94ZWRDZWxsOgorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94
ZWRCb29sZWFuOgorICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5yKG9wZXJhbmQpLmpzVmFsdWUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1Vu
Ym94ZWRJbnQzMjoKKyAgICAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoZXhlYy0+cihvcGVyYW5k
KS51bmJveGVkSW50MzIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbHJl
YWR5SW5KU1N0YWNrQXNVbmJveGVkRG91YmxlOgorICAgICAgICAgICAgdmFsdWUgPSBqc0RvdWJs
ZU51bWJlcihleGVjLT5yKG9wZXJhbmQpLnVuYm94ZWREb3VibGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIHZhbHVlID0gcmVjb3Zl
cnkuY29uc3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlOworICAgIH0KK30KKworI2lm
IEVOQUJMRShGVExfSklUKQorYm9vbCBKSVRDb2RlOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICByZXR1cm4gdGllclVwQ291bnRl
ci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRh
dGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7
CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoMCwgY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKSk7Cit9CisKK3ZvaWQgSklUQ29kZTo6ZG9udE9wdGltaXplQW55dGltZVNvb24o
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBOb3QgRlRMLW9wdGltaXppbmcgYW55dGltZSBz
b29uLlxuIik7CisgICAgdGllclVwQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworfQorCit2
b2lkIEpJVENvZGU6Om9wdGltaXplQWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2Nr
LCAiOiBGVEwtb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLlxuIik7CisgICAgQ29kZUJsb2NrKiBi
YXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1
ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLAorICAgICAg
ICBiYXNlbGluZSk7Cit9CisKK3ZvaWQgSklUQ29kZTo6b3B0aW1pemVTb29uKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFM
b2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcgc29vbi5cbiIpOworICAgIENvZGVCbG9j
ayogYmFzZWxpbmUgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENv
dW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVy
VmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uKCkpLAorICAgICAgICBi
YXNlbGluZSk7Cit9CisKK3ZvaWQgSklUQ29kZTo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZvcmNpbmcgc2xvdyBwYXRo
IGNvbmN1cnJlbnRseSBmb3IgRlRMIGVudHJ5LlxuIik7CisgICAgdGllclVwQ291bnRlci5mb3Jj
ZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6c2V0T3B0aW1pemF0
aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsK
KyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKKyAgICAgICAgb3B0aW1pemVOZXh0SW52
b2NhdGlvbihjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlv
bkZhaWxlZDoKKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZUJsb2NrKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24gPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVk
OgorICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CisgICAgICAgIC8vIFRoaXMgaXMg
d2VpcmQgLSBpdCB3aWxsIG9ubHkgaGFwcGVuIGluIGNhc2VzIHdoZW4gdGhlIERGRyBjb2RlIGJs
b2NrIChpLmUuCisgICAgICAgIC8vIHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBKSVRDb2RlIGJl
bG9uZ3MgdG8pIGlzIGFsc28gaW52YWxpZGF0ZWQuIFNvIGl0CisgICAgICAgIC8vIGRvZXNuJ3Qg
cmVhbGx5IG1hdHRlciB3aGF0IHdlIGRvLiBCdXQsIHdlIGRvIHRoZSByaWdodCB0aGluZyBhbnl3
YXkuIE5vdGUKKyAgICAgICAgLy8gdGhhdCB1cyBjb3VudGluZyB0aGUgcmVvcHRpbWl6YXRpb24g
YWN0dWFsbHkgbWVhbnMgdGhhdCB3ZSBtaWdodCBjb3VudCBpdAorICAgICAgICAvLyB0d2ljZS4g
QnV0IHRoYXQncyBnZW5lcmFsbHkgT0suIEl0J3MgYmV0dGVyIHRvIG92ZXJjb3VudCByZW9wdGlt
aXphdGlvbnMKKyAgICAgICAgLy8gdGhhbiBpdCBpcyB0byB1bmRlcmNvdW50IHRoZW0uCisgICAg
ICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsK
KyAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
LmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTMgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdD
b21tb25EYXRhLmgiCiAjaW5jbHVkZSAiREZHTWluaWZpZWRHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIKICNp
bmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CkBAIC05Myw4ICs5NSwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgcmVjb25zdHJ1
Y3QoCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4
LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgcmVzdWx0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlz
IG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdyZSBhdCBhIHBvaW50IHdoZXJlIGFsbCB2YWx1ZXMgYXJl
IHNwaWxsZWQgdG8gdGhlCisgICAgLy8gc3RhY2suIEN1cnJlbnRseSwgaXQgYWxzbyBoYXMgdGhl
IHJlc3RyaWN0aW9uIHRoYXQgdGhlIHZhbHVlcyBtdXN0IGJlIGluIHRoZWlyCisgICAgLy8gYnl0
ZWNvZGUtZGVzaWduYXRlZCBzdGFjayBzbG90cy4KKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0
cmVhbUluZGV4LAorICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPiYgcmVzdWx0KTsKKworI2lmIEVO
QUJMRShGVExfSklUKQorICAgIC8vIE5CLiBBbGwgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVC
bG9jayogYmVjYXVzZSB0aGV5IG1heSB3YW50IHRvIHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxv
Z2ljIGFib3V0IHNjYWxpbmcgdGhyZXNob2xkcy4gSXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9j
ay4KKyAgICAKKyAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENv
ZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsK
KyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayopOworICAgIHZvaWQg
b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplU29vbihD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50
bHkoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9u
Q29tcGlsYXRpb25SZXN1bHQoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorICAgIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgCisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxs
b3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCiAKQEAgLTEwNiw2ICsxMzEsMTAg
QEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LCAxLCAwPiB3YXRjaHBvaW50czsKICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFi
bGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRERkc7CisjaWYg
RU5BQkxFKEZUTF9KSVQpCisgICAgRXhlY3V0aW9uQ291bnRlciB0aWVyVXBDb3VudGVyOworICAg
IFJlZlB0cjxDb2RlQmxvY2s+IG9zckVudHJ5QmxvY2s7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDI3ICs0OCwzMSBAQCBKSVRGaW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQog
CiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIGZpbmFsaXplQ29tbW9uKCk7
Ci0gICAgCiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZp
bmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIAorICAg
IGZpbmFsaXplQ29tbW9uKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSklU
RmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKLSAgICBmaW5hbGl6ZUNvbW1vbigpOwot
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IG1fbGlua0J1
ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6
ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7
CiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUsIHdpdGhBcml0eUNo
ZWNrKTsKICAgICAKKyAgICBmaW5hbGl6ZUNvbW1vbigpOworICAgIAogICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogeworI2lmIEVOQUJM
RShGVExfSklUKQorICAgIG1faml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29k
ZUJsb2NrLmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAKICAgICBpZiAo
bV9wbGFuLmNvbXBpbGF0aW9uKQogICAgICAgICBtX3BsYW4udm0ubV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5hZGRDb21waWxhdGlvbihtX3BsYW4uY29tcGlsYXRpb24pOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjcsOSArNTI3LDIw
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQWNjZXNzRGF0YSgpLT5s
b2NhbCgpOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc1VubGlua2VkTG9jYWwoKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoK
KyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciB1bmxpbmtlZExvY2FsKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IEdldExvY2FsVW5saW5rZWQpOworICAgICAgICBB
U1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4obV9vcEluZm8pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiAr
NjksMjEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEZsdXNo
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRv
bUxvY2FsLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAorICAg
IC8qIEhpbnQgdGhhdCB0aGlzIGlzIHdoZXJlIGJ5dGVjb2RlIHRoaW5rcyBpcyBhIGdvb2QgcGxh
Y2UgdG8gT1NSLiBOb3RlIHRoYXQgdGhpcyAqL1wKKyAgICAvKiB3aWxsIGV4aXN0IGV2ZW4gaW4g
aW5saW5lZCBsb29wcy4gVGhpcyBoYXMgbm8gZXhlY3V0aW9uIHNlbWFudGljcyBidXQgaXQgbXVz
dCAqL1wKKyAgICAvKiBzdXJ2aXZlIGFsbCBEQ0UuIFdlIHRyZWF0IHRoaXMgYXMgYmVpbmcgYSBj
YW4tZXhpdCBiZWNhdXNlIHRpZXItdXAgdG8gRlRMIG1heSAqL1wKKyAgICAvKiB3YW50IGFsbCBz
dGF0ZS4gKi9cCisgICAgbWFjcm8oTG9vcEhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBc
CisgICAgLyogU3BlY2lhbCBub2RlIGZvciBPU1IgZW50cnkgaW50byB0aGUgRlRMLiBJbmRpY2F0
ZXMgdGhhdCB3ZSdyZSBsb2FkaW5nIGEgbG9jYWwgKi9cCisgICAgLyogdmFyaWFibGUgZnJvbSB0
aGUgc2NyYXRjaCBidWZmZXIuICovXAorICAgIG1hY3JvKEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBO
b2RlUmVzdWx0SlMpIFwKKyAgICBcCisgICAgLyogVGllci11cCBjaGVja3MgZnJvbSB0aGUgREZH
IHRvIHRoZSBGVEwuICovXAorICAgIG1hY3JvKENoZWNrVGllclVwSW5Mb29wLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oQ2hlY2tUaWVyVXBBbmRPU1JFbnRlciwgTm9kZU11c3RHZW5l
cmF0ZSkgXAorICAgIG1hY3JvKENoZWNrVGllclVwQXRSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBcCiAgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRo
b3V0IGxpbmtpbmcgaW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdv
cmsuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGlj
dGlvbnMgb3JpZ2luYXRlZCAqL1wKICAgICAvKiBhcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGxv
Y2FsIGFjY2VzcywgYW5kIHRodXMgaGFkIHRoZWlyIG93biBwcm9maWxpbmcuICovXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE1NDk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxMSArNDcsMzQgQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0
ZSogZXhlYywgQwogCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBk
YXRhTG9nKAotICAgICAgICAgICAgIk9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LCAiIC0+ICIsICpjb2RlQmxvY2ssCisgICAgICAgICAgICAiREZHIE9TUiBpbiAiLCAqY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLCAiIC0+ICIsICpjb2RlQmxvY2ssCiAgICAgICAgICAgICAiIGZy
b20gYmMjIiwgYnl0ZWNvZGVJbmRleCwgIlxuIik7CiAgICAgfQogICAgIAogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpE
RkdKSVQpIHsKKyAgICAgICAgLy8gV2hlbiB3aWxsIHRoaXMgaGFwcGVuPyBXZSBjb3VsZCBoYXZl
OgorICAgICAgICAvLworICAgICAgICAvLyAtIEFuIGV4aXQgZnJvbSB0aGUgRlRMIEpJVCBpbnRv
IHRoZSBiYXNlbGluZSBKSVQgZm9sbG93ZWQgYnkgYW4gYXR0ZW1wdAorICAgICAgICAvLyAgIHRv
IHJlZW50ZXIuIFdlJ3JlIGZpbmUgd2l0aCBhbGxvd2luZyB0aGlzIHRvIGZhaWwuIElmIGl0IGhh
cHBlbnMKKyAgICAgICAgLy8gICBlbm91Z2ggd2UnbGwganVzdCByZW9wdGltaXplLiBJdCBiYXNp
Y2FsbHkgbWVhbnMgdGhhdCB0aGUgT1NSIGV4aXQgY29zdAorICAgICAgICAvLyAgIHVzIGRlYXJs
eSBhbmQgc28gcmVvcHRpbWl6aW5nIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gLSBXZSBoYXZlIHJlY3Vyc2l2ZSBjb2RlIHdpdGggaG90IGxvb3BzLiBD
b25zaWRlciB0aGF0IGZvbyBoYXMgYSBob3QgbG9vcAorICAgICAgICAvLyAgIHRoYXQgY2FsbHMg
aXRzZWxmLiBXZSBoYXZlIHR3byBmb28ncyBvbiB0aGUgc3RhY2ssIGxldHMgY2FsbCB0aGVtIGZv
bzEKKyAgICAgICAgLy8gICBhbmQgZm9vMiwgd2l0aCBmb28xIGhhdmluZyBjYWxsZWQgZm9vMiBm
cm9tIGZvbydzIGhvdCBsb29wLiBmb28yIGdldHMKKyAgICAgICAgLy8gICBvcHRpbWl6ZWQgYWxs
IHRoZSB3YXkgaW50byB0aGUgRlRMLiBUaGVuIGl0IHJldHVybnMgaW50byBmb28xLCBhbmQgdGhl
bgorICAgICAgICAvLyAgIGZvbzEgd2FudHMgdG8gZ2V0IG9wdGltaXplZC4gSXQgbWlnaHQgcmVh
Y2ggdGhpcyBjb25jbHVzaW9uIGZyb20gaXRzCisgICAgICAgIC8vICAgaG90IGxvb3AgYW5kIGF0
dGVtcHQgdG8gT1NSIGVudGVyLiBBbmQgd2UnbGwgdGVsbCBpdCB0aGF0IGl0IGNhbid0LiBJdAor
ICAgICAgICAvLyAgIG1pZ2h0IGJlIHdvcnRoIGFkZHJlc3NpbmcgdGhpcyBjYXNlLCBidXQgSSBq
dXN0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCisgICAgICAgIC8vICAgYmUgc3VwZXIgcmFyZS4gRm9y
IG5vdywgaWYgaXQgZG9lcyBoYXBwZW4sIGl0J2xsIGNhdXNlIHNvbWUgY29tcGlsYXRpb24KKyAg
ICAgICAgLy8gICB0aHJhc2hpbmcuCisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB0
aGUgdGFyZ2V0IGNvZGUgYmxvY2sgaXMgbm90IERGRy5cbiIpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgCiAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmcoKS0+b3NyRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsK
ICAgICAKICAgICBpZiAoIWVudHJ5KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1
ZGUgIkRGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNs
dWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZSA6
IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uo
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGVudHJ5cG9pbnQgY3Jl
YXRpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1v
ZGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQ
Uyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ncmFwaC5t
X3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4OworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBVSU5U
X01BWCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gbV9ncmFwaC5t
X3Byb2ZpbGVkQmxvY2s7CisgICAgICAgIAorICAgICAgICBCbG9ja0luc2VydGlvblNldCBpbnNl
cnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+Y29kZU9y
aWdpbiA9PSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gYmxvY2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIXRhcmdldCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHRlcnJpYmxlIG91dGNvbWUuIEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4gYnV0IGl0IG1pZ2h0
CisgICAgICAgICAgICAvLyBoYXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZlbmQgYWdhaW5zdCBp
dC4gSWYgaXQgaGFwcGVucywgdGhlbiB0aGlzCisgICAgICAgICAgICAvLyBjb21waWxhdGlvbiBp
cyBhIGZhaWx1cmUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5zZXJ0KDAp
OworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5jb2RlT3Jp
Z2luOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIE5v
ZGUqIG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7
CisgICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGZv
ciBzYW5pdHksIGFsd2F5cyBoYXZlIGEgU2V0QXJndW1lbnQgZXZlbiBpZiBpdCdzIG5vdCBuZWVk
ZWQuCisgICAgICAgICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1l
bnRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5ld1Jvb3QtPmFw
cGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50
LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBub2RlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBi
YXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKKyAgICAgICAgICAgIE5v
ZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsK
KyAgICAgICAgICAgIGlmICghcHJldmlvdXNIZWFkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVh
ZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9v
dC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGlj
dGlvbigpLCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAg
ICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVu
ZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExvY2FsLCBjb2Rl
T3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZShtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwg
Y29kZU9yaWdpbiwgT3BJbmZvKHRhcmdldCkpOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZSgpOworICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgICAgIG1fZ3Jh
cGgua2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
K307CisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYgZ3JhcGgpCit7
CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRW50cnlwb2ludCBD
cmVhdGlvbiIpOworICAgIHJldHVybiBydW5QaGFzZTxPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZV9oCisjZGVmaW5lIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgcGhhc2Ug
aXMgb25seSBmb3IgY29tcGlsYXRpb24gcGlwZWxpbmVzIHRoYXQgZ28gdGhyb3VnaCBTU0EsIGFu
ZCB0aGF0CisvLyBkbyBhIHNwZWNpYWxpemVkIE9TUiBlbnRyeSBjb21waWxlLiBDdXJyZW50bHkg
dGhhdCBtZWFucyBGVEwuCisvLworLy8gQ3JlYXRlcyBhbiBPU1IgZW50cnlwb2ludCB0aGF0IGVz
dGFibGlzaGVzIGFsbCBhcmd1bWVudCBhbmQgbG9jYWwgdmFyaWFibGUKKy8vIHZhbHVlcy4gVGhp
cyBlbnRyeXBvaW50IG9ubHkgd29ya3MgZm9yIHRoZSBQbGFuOjpvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXguCisvLyBVbmxpa2Ugb3JkaW5hcnkgT1NSIGVudHJ5IGludG8gdGhlIERGRywgdGhpcyBmb3Jj
ZXMgYWxsIHZhcmlhYmxlcyBzbHVycGVkCisvLyBpbiB0aHJvdWdoIE9TUiBlbnRyeSB0byBhcHBl
YXIgVE9QIHRvIHRoZSBDRkEuIEhlbmNlIHRoaXMgcGhhc2UgbXVzdCBiZSBydW4KKy8vIGVhcmx5
IC0gYmVmb3JlIGRvaW5nIGFueSBDRkEuIEJ1dCB0aGlzIGFsc28gZG9lcyBzb21lIGFkZGl0aW9u
YWwgaGFja3MgdGhhdAorLy8gcmVxdWlyZSB0aGlzIHRvIHJ1biBiZWZvcmUgdW5pZmljYXRpb24u
CisKK2Jvb2wgcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw5ICszMSwxNSBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
bW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgorI2luY2x1
ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdS
ZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCisjaW5jbHVkZSAiREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJERkdUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
KyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExPU1JFbnRy
eS5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMjAxNSw2ICsyMDIxLDE4NiBA
QCBleHRlcm4gIkMiIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgY29kZUJsb2Nr
LT5yZW9wdGltaXplKCk7CiB9CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJB
VElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAqY29kZUJsb2NrLCAiOiBFbnRl
cmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCisgICAgICAgICAg
ICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7Cisg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJE
ZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIGluZGVmaW5pdGVs
eSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIpOworICAgICAgICBqaXRDb2Rl
LT5kb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9s
ZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAq
Y29kZUJsb2NrLCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xp
c3QgPSB2bS0+d29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmts
aXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgICp2bSwgQ29tcGls
YXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMTW9kZSkpOworICAgIH0g
ZWxzZQorICAgICAgICB3b3JrbGlzdFN0YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIAor
ICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAg
aml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KAorICAgICAgICAgICAgY29kZUJsb2NrLCBDb21waWxhdGlvbkRlZmVycmVkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudCgpKSB7CisgICAgICAgIC8vIFRoYXQncyBncmVhdCwgd2UndmUgY29tcGlsZWQgdGhl
IGNvZGUgLSBuZXh0IHRpbWUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLAorICAgICAgICAvLyB3ZSds
bCBlbnRlciB0aGF0IHJlcGxhY2VtZW50LgorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24o
Y29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xp
c3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IHdlIGZpbmlzaGVkIGNvbXBpbGluZywgYnV0IGZhaWxlZCBzb21laG93OyBpbiB0aGF0IGNh
c2UgdGhlCisgICAgICAgIC8vIHRocmVzaG9sZHMgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4K
KyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2co
IkNvZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3Qg
aGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KKyAgICBjb21waWxlKAor
ICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMTW9kZSwg
VUlOVF9NQVgsIE9wZXJhbmRzPEpTVmFsdWU+KCksCisgICAgICAgIFRvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSwgdm0tPmVuc3VyZVdvcmtsaXN0KCkp
OworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKKyAgICBFeGVj
U3RhdGUqIGV4ZWMsIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkK
K3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOworICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgSklUQ29k
ZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICAKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAq
Y29kZUJsb2NrLCAiOiBFbnRlcmVkIHRyaWdnZXJUaWVyVXBOb3cgd2l0aCBleGVjdXRlQ291bnRl
ciA9ICIsCisgICAgICAgICAgICBqaXRDb2RlLT50aWVyVXBDb3VudGVyLCAiXG4iKTsKKyAgICB9
CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAg
ICAgICAgICBkYXRhTG9nKCJEZWZlcnJpbmcgRlRMLW9wdGltaXphdGlvbiBvZiAiLCAqY29kZUJs
b2NrLCAiIGluZGVmaW5pdGVseSBiZWNhdXNlIHRoZXJlIHdhcyBhbiBGVEwgZmFpbHVyZS5cbiIp
OworICAgICAgICBqaXRDb2RlLT5kb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5jaGVja0lm
T3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3Qg
dG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAg
ICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gdm0tPndvcmtsaXN0LmdldCgpKSB7CisgICAgICAg
IHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCisg
ICAgICAgICAgICAqdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCksIEZUTEZvck9TUkVudHJ5TW9kZSkpOworICAgIH0gZWxzZQorICAgICAgICB3b3JrbGlzdFN0
YXRlID0gV29ya2xpc3Q6Ok5vdEtub3duOworICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09
IFdvcmtsaXN0OjpDb21waWxpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlLT5vc3JFbnRy
eUJsb2NrKTsKKyAgICAgICAgaml0Q29kZS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRP
bkNvbXBpbGF0aW9uUmVzdWx0KAorICAgICAgICAgICAgY29kZUJsb2NrLCBDb21waWxhdGlvbkRl
ZmVycmVkKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlmIChDb2RlQmxv
Y2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpKSB7CisgICAgICAg
IGlmICh2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCisgICAgICAgICAgICAg
ICAgZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRl
eCkpIHsKKyAgICAgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVu
dHJ5QmxvY2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAgICAgZW50cnlDb2Rl
LT5jb3VudEVudHJ5RmFpbHVyZSgpOworICAgICAgICBpZiAoZW50cnlDb2RlLT5lbnRyeUZhaWx1
cmVDb3VudCgpIDwKKyAgICAgICAgICAgIE9wdGlvbnM6OmZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50
Rm9yUmVvcHRpbWl6YXRpb24oKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBqaXRDb2Rl
LT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBPU1IgZW50cnkgZmFpbGVkLiBPaCBubyEgVGhpcyBp
bXBsaWVzIHRoYXQgd2UgbmVlZCB0byByZXRyeS4gV2UgcmV0cnkKKyAgICAgICAgLy8gd2l0aG91
dCBleHBvbmVudGlhbCBiYWNrb2ZmIGFuZCB3ZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSBlbnRyeSBj
b2RlIGJsb2NrLgorICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmNsZWFyKCk7CisgICAg
ICAgIAorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBX
b3JrbGlzdDo6Q29tcGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBpbGF0
aW9uIGZhaWxlZCBhbmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMuCisgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2Nr
ICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0
aW1pemVkIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IC8vIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB0cmlnZ2VyIGEgZm9yLWVudHJ5
IGNvbXBpbGUuCisgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKyAgICBq
aXRDb2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgQ29t
cGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBERkc6OmNvbXBpbGUoCisgICAgICAgICp2
bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExGb3JPU1JFbnRyeU1vZGUs
IGJ5dGVjb2RlSW5kZXgsCisgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spLAorICAgICAg
ICB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7CisgICAgCisgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0
byB0cmlnZ2VyIGEgcmVwbGFjZW1lbnQgY29tcGlsZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50
IHRvCisgICAgLy8gdHJpZ2dlciBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhp
cyBpcyBraW5kIG9mIHdlaXJkIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAvLyBoYXZlIGp1c3QgZmlu
aXNoZWQgYW4gRlRMIGNvbXBpbGUgYW5kIHRoYXQgY29tcGlsZSBmYWlsZWQgb3Igd2FzIGludmFs
aWRhdGVkLgorICAgIC8vIEJ1dCB0aGlzIHNlZW1zIHVuY29tbW9uIGVub3VnaCB0aGF0IHdlIHNv
cnQgb2YgZG9uJ3QgY2FyZS4gSXQncyBjZXJ0YWlubHkgc291bmQKKyAgICAvLyB0byBmaXJlIG9m
ZiBhbm90aGVyIGNvbXBpbGUgcmlnaHQgbm93IHNvIGxvbmcgYXMgd2UncmUgbm90IGFscmVhZHkg
Y29tcGlsaW5nIGFuZAorICAgIC8vIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQg
cmVwbGFjZW1lbnQuIE5vdGUsIHdlIGRvbid0IGRvIHRoaXMgZm9yCisgICAgLy8gb2J2aW91c2x5
IGJhZCBjYXNlcyBsaWtlIGdsb2JhbCBjb2RlLCB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlcmUgaXMg
YSBzbGltIGNoYW5jZQorICAgIC8vIG9mIHRoaXMgY29kZSBiZWluZyBpbnZva2VkIGV2ZXIgYWdh
aW4uCisgICAgQ29tcGlsYXRpb25LZXkga2V5Rm9yUmVwbGFjZW1lbnQoY29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKSwgRlRMTW9kZSk7CisgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSAh
PSBHbG9iYWxDb2RlCisgICAgICAgICYmICFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2Vt
ZW50KCkKKyAgICAgICAgJiYgKCF2bS0+d29ya2xpc3QuZ2V0KCkKKyAgICAgICAgICAgIHx8IHZt
LT53b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShrZXlGb3JSZXBsYWNlbWVudCkgIT0gV29ya2xp
c3Q6Ok5vdEtub3duKSkgeworICAgICAgICBjb21waWxlKAorICAgICAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5k
czxKU1ZhbHVlPigpLAorICAgICAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNyZWF0ZShjb2RlQmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7CisgICAgfQorICAg
IAorICAgIGlmIChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVu
dHJ5IGNvbXBpbGUgYWxyZWFkeSBzdWNjZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKKyAgICAvLyBl
bnRyeSB3aWxsIHN1Y2NlZWQgdW5sZXNzIHdlIHJhbiBvdXQgb2Ygc3RhY2suIEl0J3Mgbm90IGNs
ZWFyIHdoYXQgd2Ugc2hvdWxkIGRvLgorICAgIC8vIFdlIHNpZ25hbCB0byB0cnkgYWdhaW4gYWZ0
ZXIgYSB3aGlsZSBpZiB0aGF0IGhhcHBlbnMuCisgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJl
cGFyZU9TUkVudHJ5KAorICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5
QmxvY2suZ2V0KCksIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAgICBpZiAoYWRkcmVz
cykKKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAgZWxzZQor
ICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwogfSAvLyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAx
NTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9O
ICgqU19ERkdPcGVyCiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRp
b25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19P
UEVSQVRJT04gKCpTX0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdP
cGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04g
KCpWX0RGR09wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90
LCBkb3VibGUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9F
T1pKKShFeGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwpAQCAtMTI2LDYgKzEyNyw3IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElP
TiAoKlBfREZHT3BlcmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0
aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVk
ZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFNTKShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJ
T04gKCpQX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90
KTsKK3R5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VaWikoRXhl
Y1N0YXRlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmluZ0ltcGwqIERGR19PUEVS
QVRJT04gKCpJX0RGR09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlw
ZWRlZiBKU1N0cmluZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVyYXRpb25fRVopKEV4ZWNT
dGF0ZSosIGludDMyX3QpOwogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zy
b21DaGFyQ29kZShFeGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKQEAgLTMwMiw2
ICszMDQsMTEgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogCiB2
b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdU
Rl9JTlRFUk5BTDsKIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRy
aWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJB
VElPTiB0cmlnZ2VyT1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4
LCBpbnQzMl90IHN0cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKIH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBv
cGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1NDk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEzICs0NiwxNiBAQAogI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0
ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtODEsMTMgKzg0LDEyIEBAIHN0YXRpYyB2b2lk
IGR1bXBBbmRWZXJpZnlHcmFwaChHcmFwaCYgZ3IKIAogUGxhbjo6UGxhbigKICAgICBQYXNzUmVm
UHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAg
ICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFs
dWVzKQorICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8
SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52
bSgpKQogICAgICwgY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG1vZGUobW9kZSkK
ICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAg
LCBudW1WYXJzV2l0aFZhbHVlcyhudW1WYXJzV2l0aFZhbHVlcykKLSAgICAsIG11c3RIYW5kbGVW
YWx1ZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKQorICAg
ICwgbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgY29tcGlsYXRpb24o
Y29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJv
ZmlsZXI6OkNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrLmdldCgpKSwgUHJvZmlsZXI6OkRGRykpIDog
MCkKICAgICAsIGlkZW50aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKICAgICAsIHdlYWtSZWZlcmVu
Y2VzKGNvZGVCbG9jay5nZXQoKSkKQEAgLTEwOSw3ICsxMTEsNyBAQCB2b2lkIFBsYW46OmNvbXBp
bGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAgICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlv
blNjb3BlOwogCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQotICAgICAgICBkYXRh
TG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0
cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CisgICAg
ICAgIGRhdGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIs
IG1vZGUsICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSwgIlxuIik7CiAKICAgICBDb21waWxhdGlvblBhdGggcGF0aCA9IGNvbXBpbGVJ
blRocmVhZEltcGwobG9uZ0xpdmVkU3RhdGUpOwogCkBAIC0xNDIsNiArMTQ0LDEyIEBAIHZvaWQg
UGxhbjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXQKIAogUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0
YXRlKQogeworICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgJiYgb3NyRW50cnlC
eXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKSB7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAg
ICAgIGRhdGFMb2coIkNvbXBpbGVyIG11c3QgaGFuZGxlIE9TUiBlbnRyeSBmcm9tIGJjIyIsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwgbXVzdEhhbmRsZVZhbHVlcywg
IlxuIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQorICAgIAogICAgIEdyYXBoIGRm
Zyh2bSwgKnRoaXMsIGxvbmdMaXZlZFN0YXRlKTsKICAgICAKICAgICBpZiAoIXBhcnNlKGRmZykp
IHsKQEAgLTE2Miw2ICsxNzAsMTUgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogICAgIHBlcmZvcm1VbmlmaWNhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0
aW9uSW5qZWN0aW9uKGRmZyk7CiAgICAgCisgICAgaWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlN
b2RlKSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlv
bihkZmcpOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgZmluYWxpemVyID0g
YWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOworICAgICAgICAgICAgcmV0dXJu
IEZhaWxQYXRoOworICAgICAgICB9CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcp
OworICAgIH0KKyAgICAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFs
aWRhdGUoZGZnKTsKICAgICAKQEAgLTIwNiwxMCArMjIzLDE5IEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZGZnLm1fbmF0dXJhbExvb3BzLmNvbXB1
dGVJZk5lY2Vzc2FyeShkZmcpOwogICAgIH0KIAorICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgREZHTW9kZTogeworICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgRlRMTW9kZToKKyAgICBjYXNl
IEZUTEZvck9TUkVudHJ5TW9kZTogewogI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChPcHRp
b25zOjp1c2VFeHBlcmltZW50YWxGVEwoKQotICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBl
KCkgPT0gRnVuY3Rpb25Db2RlCi0gICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7Cisg
ICAgICAgIGlmIChGVEw6OmNhbkNvbXBpbGUoZGZnKSA9PSBGVEw6OkNhbm5vdENvbXBpbGUpIHsK
KyAgICAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRo
aXMpKTsKKyAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKKyAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CiAgICAgICAgIHBlcmZv
cm1Mb29wUHJlSGVhZGVyQ3JlYXRpb24oZGZnKTsKQEAgLTI0NCwxMCArMjcwLDE2IEBAIFBsYW46
OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgRlRMOjpjb21waWxl
KHN0YXRlKTsKICAgICAgICAgRlRMOjpsaW5rKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIEZUTFBh
dGg7Ci0gICAgfQogI2Vsc2UKLSAgICBSRUxFQVNFX0FTU0VSVCghT3B0aW9uczo6dXNlRXhwZXJp
bWVudGFsRlRMKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsK
ICAgICBwZXJmb3JtRENFKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7
CiBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAg
UGxhbigKICAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlvbk1vZGUsIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dp
dGhWYWx1ZXMpOworICAgICAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZh
bHVlcyk7CiAgICAgflBsYW4oKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZChMb25n
TGl2ZWRTdGF0ZSYpOwpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlCiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIENv
bXBpbGF0aW9uTW9kZSBtb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleDsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKICAgICBPcGVyYW5k
czxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwogCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21w
aWxhdGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLm11
c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBpbnQg
b3BlcmFuZCA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFk
Lm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9j
YWwobV9ncmFwaCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsNyArNDg0LDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBNb3ZIaW50Ogog
ICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OiB7
CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9v
cDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgICAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2
ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAg
ICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU0OSw2ICs1NTIs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
Q2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgICAgICBj
YXNlIExvb3BIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24u
CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBk
b2Vzbid0IGRvIGFueXRoaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMz
LDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IFN0cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBV
bnJlYWNoYWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hl
Y2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgyMyw2ICs0ODIzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8vIFRoaXMg
aXMgYSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAt
NDgzNSw2ICs0ODM2LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVu
dDoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVy
VXBBbmRPU1JFbnRlcjoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NjczLDYgKzQ2NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFBoYW50b21Mb2NhbDoK
KyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAg
IG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTQ2ODAsMTEgKzQ2ODEsNzUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVW5yZWFj
aGFibGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOworCisjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVw
SW5Mb29wOiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFu
Y2hBZGQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAg
ICBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5q
aXRDb2RlKCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgYXBwZW5kQ2FsbCh0cmlnZ2VyVGllclVw
Tm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjogeworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6
OmZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50
ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUo
KTsKKyAgICAgICAgYXBwZW5kQ2FsbCh0cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBbmRPU1JFbnRlcjogeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50
aWVyVXBDb3VudGVyLm1fY291bnRlcikpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZSgKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG1fc3RyZWFtLT5zaXplKCkpKTsK
KyAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdCh0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIp
OworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb250RW50ZXIgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuanVt
cCh0ZW1wR1BSKTsKKyAgICAgICAgZG9udEVudGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJ
VCkKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJl
dHVybjoKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIFBoaToK
ICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4dHJh
Y3RPU1JFbnRyeUxvY2FsOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7Citw
dWJsaWM6CisgICAgVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAg
ICAgIDogUGhhc2UoZ3JhcGgsICJ0aWVyLXVwIGNoZWNrIGluamVjdGlvbiIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X2dyYXBoLm1fcGxhbi5tb2RlID09IERGR01vZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFP
cHRpb25zOjp1c2VFeHBlcmltZW50YWxGVEwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworI2lmIEVOQUJMRShGVExfSklUKQorICAgICAgICBGVEw6OkNhcGFiaWxpdHlMZXZlbCBsZXZl
bCA9IEZUTDo6Y2FuQ29tcGlsZShtX2dyYXBoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZUTDo6
Q2Fubm90Q29tcGlsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3AoKSA9PSBMb29w
SGludCkgeworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGJsb2NrLT5h
dCgwKS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSBub2RlVHlwZTsKKyAg
ICAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5Db21waWxlQW5kT1NSRW50ZXIgJiYg
IWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVU
eXBlID0gQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYmxvY2stPmJ5dGVjb2RlQmVnaW4gPT0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUg
PSBDaGVja1RpZXJVcEluTG9vcDsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgxLCBTcGVjTm9uZSwgbm9kZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1
cm4pIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0
dXJuLCBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVOQUJMRShGVExfSklU
KQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorfTsKKworYm9vbCBwZXJm
b3JtVGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgVGllci11cCBDaGVjayBJbmplY3Rpb24iKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0aGUgdGhpcyBjb2Rl
IGJsb2NrIGNvdWxkIGJlIHJlY29tcGlsZWQgd2l0aCB0aGUgRlRMLAorLy8gYW5kIGlmIHNvLCBp
dCBpbmplY3RzIHRpZXItdXAgY2hlY2tzLgorCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVj
dGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJ
VENvZGUuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdD
b2RlQmxvY2spCisgICAgOiBtX2RmZ0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2soKSB7IH0KKworUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaz4gVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNz
UmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7Cit9CisK
K3ZvaWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVj
b21lUmVhZHlBc3luY2hyb25vdXNseSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwg
Km1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOwor
ICAgIH0KKyAgICAKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VP
cHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2su
Z2V0KCkpOworfQorCit2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21w
aWxhdGlvbkRpZENvbXBsZXRlKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlv
blJlc3VsdCByZXN1bHQpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIHJl
c3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBD
b21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAg
IAorICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgIG1fZGZnQ29kZUJsb2Nr
LmdldCgpLCByZXN1bHQpOworfQorCit9IH0gLy8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBERkdUb0ZUTERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsK
KworcHVibGljOgorICAgIHZpcnR1YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaz4gY3JlYXRlKAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2Nr
KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5j
aHJvbm91c2x5KENvZGVCbG9jayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENv
bXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHSklUQ29kZS5o
IgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBt
X2RmZ0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKCkKK3sKK30KKworUGFzc1JlZlB0cjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPgorVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxv
Y2spCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrKGRmZ0NvZGVCbG9jaykpOworfQorCit2b2lkIFRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVh
ZHlBc3luY2hyb25vdXNseSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAi
T3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZn
Q29kZUJsb2NrLAorICAgICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0K
KyAgICAKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6
YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkp
OworfQorCit2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6
OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBv
ZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAg
IikgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0
ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgbV9kZmdDb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnKCktPm9zckVudHJ5QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgCisgICAgLy8gRklY
TUU6IGlmIHdlIGZhaWxlZCwgd2UgbWlnaHQgd2FudCB0byBqdXN0IHR1cm4gb2ZmIE9TUiBlbnRy
eSByYXRoZXIgdGhhbgorICAgIC8vIHRvdGFsbHkgdHVybmluZyBvZmYgdGllci11cC4KKyAgICBt
X2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSwg
cmVzdWx0KTsKK30KKworfSB9IC8vIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2tfaAorI2RlZmluZSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFz
cyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZn
Q29kZUJsb2NrKTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgKKyAgICAgICAg
UGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jayk7CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21w
aWxhdGlvblJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9kZmdD
b2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9i
YWxXb3JrbGlzdCgpCiB7Ci0gICAgaWYgKCFlbmFibGVDb25jdXJyZW50SklUKCkpCi0gICAgICAg
IHJldHVybiAwOwogICAgIHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5
T25jZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2Jh
bFdvcmtsaXN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
aAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3Jr
bGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Ig
bm93IHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQg
dGhpcwogLy8gaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywg
Zm9yIG5vdy4gVGhpcyBmdW5jdGlvbgogLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0
J3MgbmVlZGVkLgotLy8KLS8vIFRoaXMgcmV0dXJucyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdl
IHNob3VsZG4ndCBiZSBkb2luZyBjb25jdXJyZW50Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0
KiBnbG9iYWxXb3JrbGlzdCgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAotaW5saW5lIGJvb2wgY2FuQ29t
cGlsZShOb2RlKiBub2RlKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IG5vZGUpCiB7CisgICAgLy8gTk9URTogSWYgd2UgZXZlciBoYXZlIHBoYW50b20gYXJndW1lbnRz
LCB3ZSBjYW4gY29tcGlsZSB0aGVtIGJ1dCB3ZSBjYW5ub3QKKyAgICAvLyBPU1IgZW50ZXIuCisg
ICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
IGNhc2UgV2Vha0pTQ29uc3RhbnQ6CkBAIC04MSw2ICs4NCw4IEBAIGlubGluZSBib29sIGNhbkNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFBoaToK
ICAgICBjYXNlIFVwc2lsb246CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBj
YXNlIExvb3BIaW50OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC05MCwzOSArOTUsMzkgQEAgaW5saW5lIGJvb2wg
Y2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NS
RW50ZXI7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkuc3BlY3VsYXRpb24oKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTYW5l
Q2hhaW46CiAgICAgICAgIGNhc2UgQXJyYXk6OkluQm91bmRzOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgc3dpdGNoIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGls
ZUFuZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTEzMyw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBj
YW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2Fz
ZSBDb21wYXJlTGVzczoKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKQEAgLTE0Miw3ICsxNDcsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNl
S2luZChOdW1iZXJVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBCcmFuY2g6CiAgICAg
Y2FzZSBMb2dpY2FsTm90OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgewpAQCAtMTUyLDcgKzE1Nyw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNl
IFN3aXRjaDoKQEAgLTE2MSwxOCArMTY2LDI2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4K
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsK
IH0KIAotYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKK0NhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKEdyYXBoJiBncmFwaCkKIHsKKyAgICBpZiAoZ3JhcGgubV9jb2RlQmxvY2stPmNvZGVU
eXBlKCkgIT0gRnVuY3Rpb25Db2RlKSB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIGNvZGUgYmxvY2sg
dGhhdCBkb2Vzbid0IGJlbG9uZyB0byBhIGZ1bmN0aW9uLlxuIik7CisgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOworICAgIH0KKyAgICAKKyAgICBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0g
Q2FuQ29tcGlsZUFuZE9TUkVudGVyOworICAgIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9j
aykKQEAgLTIxMCwyNSArMjIzLDM2IEBAIGJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIG5vZGUgYmVjYXVz
ZSBvZiBiYWQgdXNlIGtpbmQ6ICIsIGVkZ2UudXNlS2luZCgpLCAiIGluIG5vZGU6XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGdyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIs
IG5vZGUpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIWNhbkNvbXBpbGUobm9kZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FuQ29tcGlsZShu
b2RlKSkgeworICAgICAgICAgICAgY2FzZSBDYW5ub3RDb21waWxlOiAKICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkZUTCByZWplY3Rpbmcgbm9kZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICBn
cmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
biBDYW5ub3RDb21waWxlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5D
b21waWxlOgorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gQ2FuQ29tcGlsZUFuZE9TUkVu
dGVyICYmIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJGVEwgZGlzYWJsaW5nIE9TUiBlbnRyeSBiZWNhdXNlIG9mIG5vZGU6XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgZ3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwg
bm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IENhbkNv
bXBpbGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIENhbkNvbXBpbGVBbmRPU1JFbnRlcjoKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2Fy
ZSBpZiB3ZSBjYW4gY29tcGlsZSBhbnl0aGluZyBhZnRlciBhIGZvcmNlLWV4aXQuCiAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKLWJvb2wgY2FuQ29tcGlsZShERkc6OkdyYXBoJik7CitlbnVtIENhcGFiaWxpdHlMZXZlbCB7
CisgICAgQ2Fubm90Q29tcGlsZSwKKyAgICBDYW5Db21waWxlLAorICAgIENhbkNvbXBpbGVBbmRP
U1JFbnRlcgorfTsKKworQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCitGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklU
Q29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSgp
Cit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZSogRm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JP
U1JFbnRyeSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgRm9yT1NSRW50cnlKSVRD
b2RlOjppbml0aWFsaXplRW50cnlCdWZmZXIoVk0mIHZtLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdp
c3RlcnMpCit7CisgICAgbV9lbnRyeUJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKG51
bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRy
eUpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlK
SVRDb2RlX2gKKyNkZWZpbmUgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRD
b2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5
IGludG8gdGhlIEZUTCBoYXMgYSBudW1iZXIgb2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5
IG9ubHkgaGFwcGVucyB0aHJvdWdoIHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhl
eSBoYXZlIHRoZWlyCisvLyAgIG93biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgor
Ly8KKy8vIC0gV2Ugb25seSBPU1IgZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51
bGwgaW5saW5lIGNhbGwgZnJhbWUuCisvLworLy8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlv
biBhbGxvd3MgZW50cnkgdGhyb3VnaCBvbmx5IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3Mg
Rm9yT1NSRW50cnlKSVRDb2RlIDogcHVibGljIEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAg
Rm9yT1NSRW50cnlKSVRDb2RlKCk7CisgICAgfkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVn
aXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZW50cnlCdWZmZXI7IH0KKyAgICAKKyAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWdu
ZWQgdmFsdWUpIHsgbV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAg
dm9pZCBjb3VudEVudHJ5RmFpbHVyZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsrOyB9CisgICAg
dW5zaWduZWQgZW50cnlGYWlsdXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5RmFpbHVy
ZUNvdW50OyB9CisgICAgCisgICAgRm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgp
OworICAgIAorcHJpdmF0ZToKKyAgICBTY3JhdGNoQnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBP
bmx5IGZvciBPU1IgZW50cnkgY29kZSBibG9ja3MuCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUlu
ZGV4OworICAgIHVuc2lnbmVkIG1fZW50cnlGYWlsdXJlQ291bnQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRkxUX0pJVCkKKworI2VuZGlmIC8v
IEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsOSBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAg
ICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRh
dGEoKSkpKTsKICAgICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBz
byBubyBleGl0IHRodW5rcy4KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFy
aXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVj
ayk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIGlmICht
X2FyaXR5Q2hlY2suaXNTZXQoKSkKKyAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9p
bnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZSgKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAq
bV9lbnRyeXBvaW50TGlua0J1ZmZlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNzkgKzU1LDExNCBAQCB2b2lkIGxpbmso
U3RhdGUmIHN0YXRlKQogICAgIC8vIExMVk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxl
cyBhcyBuZWVkZWQuCiAgICAgY29kZUJsb2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKICAg
ICAKLSAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
YSB0b3RhbCBrbHVkZ2UgLSBMTFZNIHNob3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50
aW9uLgorICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlz
IGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQorICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0
aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCisgICAgLy8gRklYTUU6IEV4Y2VwdCBm
b3IgT1NSIGVudHJ5LCB0aGlzIGlzIGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1
c2Ugb3VyCisgICAgLy8gY2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZz
dGF0ZS5ncmFwaC5tX3ZtLCBjb2RlQmxvY2spOwogICAgIAotICAgIGNvbXBpbGVFbnRyeShqaXQp
OworICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyOworICAgIENDYWxsSGVscGVyczo6
TGFiZWwgYXJpdHlDaGVjazsKKyAgICBzd2l0Y2ggKHN0YXRlLmdyYXBoLm1fcGxhbi5tb2RlKSB7
CisgICAgY2FzZSBGVExNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOwogICAgIAot
ICAgIC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJy
ZW50bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8gVGhpcyBwYXJ0IGlzIG9u
bHkgbmVjZXNzYXJ5IGZvciBmdW5jdGlvbnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUgZnVu
Y3Rpb25zLgogICAgICAgICAKLSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNoZWNr
ID0gaml0LmxhYmVsKCk7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hl
Y2sgPSBqaXQubGFiZWwoKTsKICAgICAgICAgCi0gICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1
ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgotICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKLSAgICBqaXQu
YWRkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkJl
bG93LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhzdGF0ZS5ncmFwaC5t
X3ZtLmludGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwKLSAgICAgICAgR1BSSW5m
bzo6cmVnVDEpOwotICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQu
bGFiZWwoKTsKLSAgICAgICAgCi0gICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0g
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwot
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5lbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOwotICAg
IGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LnJldCgpOwotICAgICAgICAK
LSAgICBzdGFja0NoZWNrLmxpbmsoJmppdCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucG9r
ZSgKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIE9CSkVDVF9P
RkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikp
OwotICAgICAgICAKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSks
Ci0gICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bFN0YWNrQ2hlY2sgPSBqaXQuY2FsbCgpOwotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhp
cyBjYWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMK
LSAgICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBo
YW5kbGUgZXhjZXB0aW9ucy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEzNjIyCi0gICAgaml0Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOwotICAgICAgICAK
LSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICBj
b21waWxlRW50cnkoaml0KTsKLSAgICBqaXQubG9hZDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OnBheWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuYnJhbmNoMzIoCi0g
ICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
KQotICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwotICAgIGppdC5wb2tlKAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAg
ICAgICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8g
c2l6ZW9mKHZvaWQqKSk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQo
MCkpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IGNhbGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtl
IHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlz
IGlzCi0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUg
dG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpa
ZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Rml4dXAgPSBqaXQuY2FsbCgpOwotICAgIGppdC5q
dW1wKGZyb21Bcml0eUNoZWNrKTsKLSAgICAgICAgCi0gICAgT3duUHRyPExpbmtCdWZmZXI+IGxp
bmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKLSAgICBsaW5rQnVmZmVy
LT5saW5rKGNhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOwotICAgIGxpbmtCdWZmZXIt
PmxpbmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29w
X2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7Ci0gICAgbGlu
a0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHN0YXRlLmdyYXBoLm1f
dm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyAgICAgICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxh
YmxlIGluIHRoZSBKU1N0YWNrLgorICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjkxCisgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
c3RhY2tDaGVjayA9IGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJl
bG93LAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3Jh
cGgubV92bS5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksCisgICAgICAgICAg
ICBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNr
Q2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c0V4ZWNTdGF0ZSgpOworICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRG
dW5jdGlvbikpLAorICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAg
ICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1l
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5yZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgCisgICAgICAgIHN0YWNrQ2hlY2subGluaygmaml0KTsKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFt
ZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICAKKyAgICAgICAgaml0LnN0
b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6
OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNr
ID0gaml0LmNhbGwoKTsKKyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwg
cmVnaXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgICAg
ICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5k
bGUgZXhjZXB0aW9ucy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYyMgorICAgICAgICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7CisgICAg
ICAgIAorICAgICAgICBhcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAgIGNvbXBpbGVF
bnRyeShqaXQpOworICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYnJh
bmNoMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6
cmVnVDEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAm
aml0KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRP
RihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAg
ICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bEFyaXR5Q2hlY2sgPSBqaXQuY2FsbCgpOworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtl
IHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlz
IGlzCisgICAgICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBh
YmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAm
aml0KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNh
bGwoKTsKKyAgICAgICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAg
ICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0s
ICZqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICBs
aW5rQnVmZmVyLT5saW5rKGNhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOworICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1
Y3RvciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hl
Y2spOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0
cigoc3RhdGUuZ3JhcGgubV92bS5nZXRDVElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgRlRMRm9yT1NSRW50cnlNb2RlOiB7CisgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJh
aWdodCBmcm9tIERGRyBjb2RlLCBhZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQorICAg
ICAgICAvLyB2YWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxk
IGJlIGdvb2QgdG8gZ28gLSBhdCB0aGlzCisgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9u
ZSB0aGUgc3RhY2sgY2hlY2suIEJhc2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKKyAg
ICAgICAgLy8gY2FsbCB0byB0aGUgTExWTS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRl
LmdlbmVyYXRlZEZ1bmN0aW9uKSksCisgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVn
VDEpOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
aml0LnJldCgpOworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBM
aW5rQnVmZmVyKAorICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIHN0YXRlLmZpbmFsaXplci0+aW5p
dGlhbGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKICAgICBz
dGF0ZS5maW5hbGl6ZXItPmluaXRpYWxpemVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlv
bik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRW
YWx1ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExP
dXRwdXQuaCIKQEAgLTE5MSw2ICsxOTIsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElS
IGR1bXBzIGVhc2llciB0byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywg
bV9uZXh0TG93QmxvY2spOwogICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bENyYXNo
ZXMoKSkKKyAgICAgICAgICAgIG1fb3V0LmNyYXNoTm9uVGVybWluYWwoKTsKKyAgICAgICAgCiAg
ICAgICAgIGlmICghbV9oaWdoQmxvY2stPmNmYUhhc1Zpc2l0ZWQpIHsKICAgICAgICAgICAgIG1f
b3V0LmNyYXNoKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNDMsNiArMjQ3LDkgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRB
cmd1bWVudCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVu
dHJ5TG9jYWw6CisgICAgICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY29t
cGlsZUdldExvY2FsKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI2NCw2ICsyNzEsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoK
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIFZhbHVl
QWRkOgpAQCAtNTA2LDYgKzUxNCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAg
IAorICAgIHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCkKKyAgICB7CisgICAgICAg
IEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAor
ICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1
ZmZlcigpLT5kYXRhQnVmZmVyKCkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NCht
X291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKSkpKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKICAgICAgICAgLy8gR2V0
TG9jYWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcy4KQEAgLTUxNSw3ICs1MzAs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9u
KHZhbHVlLm1fdmFsdWUpKQorICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1f
dHlwZSkpCiAgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJp
YWJsZS0+bG9jYWwoKSkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NSRW50cnkuaCIKKworI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKworI2lmIEVO
QUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQq
IHByZXBhcmVPU1JFbnRyeSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogZGZnQ29k
ZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLAorICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIHVuc2lnbmVkIHN0cmVhbUluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGRmZ0NvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCk7CisgICAgREZHOjpKSVRDb2RlKiBkZmdDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCkt
PmRmZygpOworICAgIEZvck9TUkVudHJ5SklUQ29kZSogZW50cnlDb2RlID0gZW50cnlDb2RlQmxv
Y2stPmppdENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAKKyAgICBkYXRhTG9nKAorICAg
ICAgICAiRlRMIE9TUiBmcm9tICIsICpkZmdDb2RlQmxvY2ssICIgdG8gIiwgKmVudHJ5Q29kZUJs
b2NrLCAiIGF0IGJjIyIsCisgICAgICAgIGJ5dGVjb2RlSW5kZXgsICIuXG4iKTsKKyAgICAKKyAg
ICBpZiAoYnl0ZWNvZGVJbmRleCAhPSBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIs
IGJ5dGVjb2RlSW5kZXgsICI7IG91cnMgaXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJ
bmRleCgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpT
VmFsdWU+IHZhbHVlczsKKyAgICBkZmdDb2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywg
ZGZnQ29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFs
dWVzKTsKKyAgICAKKyAgICBmb3IgKGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyBhcmd1bWVudC0tOykgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAg
ICAgIGV4ZWMtPnIoYXJndW1lbnRUb09wZXJhbmQoYXJndW1lbnQpKS5qc1ZhbHVlKCkgPT0gdmFs
dWVzLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
KAorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlcy5udW1iZXJPZkxvY2FscygpKSA9PSBi
YXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpOworICAgIAorICAgIEVuY29kZWRKU1ZhbHVl
KiBzY3JhdGNoID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigKKyAgICAgICAgZW50cnlD
b2RlLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOworICAgIAorICAgIGZvciAoaW50IGxv
Y2FsID0gdmFsdWVzLm51bWJlck9mTG9jYWxzKCk7IGxvY2FsLS07KQorICAgICAgICBzY3JhdGNo
W2xvY2FsXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZXMubG9jYWwobG9jYWwpKTsKKyAgICAKKyAg
ICBpZiAoIXZtLmludGVycHJldGVyLT5zdGFjaygpLmdyb3coCisgICAgICAgICAgICAmZXhlYy0+
cmVnaXN0ZXJzKClbZW50cnlDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBPU1IgZmFpbGVkIGJjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLlxuIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICBleGVjLT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxv
Y2spOworICAgIAorICAgIHZvaWQgKnJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwo
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgIGRhdGFMb2coIiAgICBFbnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3Mi
LCBSYXdQb2ludGVyKHJlc3VsdCksICJcbiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkVudHJ5X2gKKyNkZWZpbmUgRlRMT1NSRW50
cnlfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWNTdGF0ZTsK
KworbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeSgKKyAgICBFeGVjU3Rh
dGUqLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKKyAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisj
ZW5kaWYgLy8gRlRMT1NSRW50cnlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw5ICszNTEsMTQgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgY2FsbCh0cmFwSW50cmluc2ljKCkpOwogICAgIH0KLSAgICB2b2lkIGNy
YXNoKCkKKyAgICAKKyAgICB2b2lkIGNyYXNoTm9uVGVybWluYWwoKQogICAgIHsKICAgICAgICAg
Y2FsbChpbnRUb1B0cihjb25zdEludFB0cihhYm9ydCksIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSkpKSk7CisgICAgfQorICAgIHZvaWQgY3Jhc2goKQorICAgIHsKKyAgICAgICAg
Y3Jhc2hOb25UZXJtaW5hbCgpOwogICAgICAgICB1bnJlYWNoYWJsZSgpOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksOSBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAi
Q29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVk
ZSAiRlRMSklURmluYWxpemVyLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDAsOSArNDIsMjUgQEAg
U3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIGNvbnRleHQoTExWTUNvbnRleHRDcmVh
dGUoKSkKICAgICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKLSAgICAsIGppdENvZGUo
YWRvcHRSZWYobmV3IEpJVENvZGUoKSkpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogewor
ICAgIHN3aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6IHsKKyAg
ICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICAgICAgUmVmUHRyPEZv
ck9TUkVudHJ5SklUQ29kZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUo
KSk7CisgICAgICAgIGNvZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFw
aC5tX3Byb2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICAgICAgY29kZS0+
c2V0Qnl0ZWNvZGVJbmRleChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAg
ICAgICAgaml0Q29kZSA9IGNvZGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgCiAgICAgZmluYWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3Bs
YW4pOwogICAgIGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrU2V0LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOworCitDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCgpIHsgfQorCitDb2RlQmxv
Y2tTZXQ6On5Db2RlQmxvY2tTZXQoKQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgICAgICAoKml0ZXIpLT5kZXJlZigpOworfQorCit2b2lkIENvZGVCbG9ja1NldDo6YWRkKFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgYm9vbCBpc05ld0VudHJ5ID0g
bV9zZXQuYWRkKGNvZGVCbG9jay5sZWFrUmVmKCkpLmlzTmV3RW50cnk7CisgICAgQVNTRVJUX1VO
VVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmNs
ZWFyTWFya3MoKQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBt
X3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1f
c2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4
ZWN1dGluZyA9IGZhbHNlOworICAgICAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNC
ZWVuQ2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRl
VW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKQoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBm
aXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tzIHRoYXQgYXJlIHVubWFya2VkIG1heQorICAgIC8v
IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBleGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQg
aXMgb3duZWQgYnkKKyAgICAvLyB0aGUgR0MgbWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkg
Y29kZSBibG9jayB0aGF0IGlzIGFsc28gb3duZWQgYnkKKyAgICAvLyB0aGUgR0MuCisgICAgVmVj
dG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBtX3NldC5z
aXplKCksICIuLi5cbiIpOworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAq
aXRlcjsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVj
dXRpbmcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb2RlQmxvY2st
PmRlcmVmKCk7CisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZW1v
dmluZyAiLCB0b1JlbW92ZS5zaXplKCksICIgYmxvY2tzLlxuIik7CisgICAgICAgIGlmICh0b1Jl
bW92ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gdG9SZW1vdmUuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV9zZXQucmVtb3ZlKHRv
UmVtb3ZlW2ldKTsKKyAgICAgICAgdG9SZW1vdmUucmVzaXplKDApOworICAgIH0KK30KKwordm9p
ZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fc2V0LnNpemUoKSwg
IiBjb2RlIGJsb2Nrcy5cbiIpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgIGlmICghY29kZUJsb2Nr
LT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvZGVC
bG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrU2V0X2gKKyNkZWZpbmUg
Q29kZUJsb2NrU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFz
cyBTbG90VmlzaXRvcjsKKworLy8gQ29kZUJsb2NrU2V0IHRyYWNrcyBhbGwgQ29kZUJsb2Nrcy4g
RXZlcnkgQ29kZUJsb2NrIHN0YXJ0cyBvdXQgd2l0aCBvbmUKKy8vIHJlZmVyZW5jZSBjb21pbmcg
aW4gZnJvbSBHQy4gVGhlIEdDIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIENvZGVCbG9ja3MK
Ky8vIG9uY2UgdGhleSBoYXNPbmVSZWYoKSBhbmQgbm9ib2R5IGlzIHJ1bm5pbmcgY29kZSBmcm9t
IHRoYXQgQ29kZUJsb2NrLgorCitjbGFzcyBDb2RlQmxvY2tTZXQgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENvZGVCbG9ja1NldCk7CisKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tTZXQoKTsK
KyAgICB+Q29kZUJsb2NrU2V0KCk7CisgICAgCisgICAgLy8gQWRkIGEgQ29kZUJsb2NrLiBUaGlz
IGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCisgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRz
IGFzc29jaWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7
CisgICAgCisgICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhh
dCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHCisgICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmlu
ZWQgaW4gQ29kZUJsb2NrLmguCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9j
ayk7CisgICAgCisgICAgLy8gRGVsZXRlIGFsbCBjb2RlIGJsb2NrcyB0aGF0IGFyZSBvbmx5IHJl
ZmVyZW5jZWQgYnkgdGhpcyBzZXQgKGkuZS4gb3duZWQKKyAgICAvLyBieSB0aGlzIHNldCksIGFu
ZCB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2VkLgorICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRV
bnJlZmVyZW5jZWQoKTsKKyAgICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tz
LiBUaGUgQ29kZUJsb2NrIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YKKyAgICAvLyBtYXlCZUV4ZWN1
dGluZy4KKyAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6Cisg
ICAgLy8gVGhpcyBpcyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3ZSBu
ZWVkIHRvIGJlIGFibGUgdG8gZmluZAorICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVycy4g
SSBjb3VsZCBoYXZlIHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcworICAgIC8v
IGFuZCBhbGwsIGJ1dCB0aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgorICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKiA+IG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
b2RlQmxvY2tTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDkgKzI3LDkgQEAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCiAjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29waWVk
U3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdD
b2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTE0MCwxMCArMTQwLDkgQEAgcHJpdmF0ZToKIH07
CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKLSAgICB2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBk
ZmdDb2RlQmxvY2tzKQorICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5l
U2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKLSAgICBD
b21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hv
b2soCi0gICAgICAgIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgQ29tcG9z
aXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hvb2soaml0
U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKICAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5k
LCBtYXJrSG9vayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKK2NsYXNz
IENvZGVCbG9ja1NldDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNs
YXNzIEpTQ2VsbDsKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCk7CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVu
ZCwgSklUU3R1YlJvdXRpbmVTZXQmKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kLCBKSVRTdHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICB2b2lkIGFkZCh2
b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYp
OwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lv
biAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
REZHQ29kZUJsb2Nrcy5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0KLURGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MoKSB7
IH0KLQotREZHQ29kZUJsb2Nrczo6fkRGR0NvZGVCbG9ja3MoKQotewotICAgIFZlY3RvcjxSZWZQ
dHI8Q29kZUJsb2NrPiwgMTY+IHRvUmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNldDxDb2Rl
QmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5k
KCk7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24o
KS0+aXNKZXR0aXNvbmVkKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCpp
dGVyKSk7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBjb2RlQmxvY2tQdHIpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBk
ZWxldGUgaXQgbm93OyB3ZSBqdXN0IHdhbnQgaXRzIHBvaW50ZXIuCi0gICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjb2RlQmxvY2tQdHIubGVha1JlZigpOwotICAgIAotICAgIEFTU0VSVChjb2Rl
QmxvY2spOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKLSAgICAKLSAgICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVu
IGpldHRpc29uZWQuCi0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9u
KCktPmlzSmV0dGlzb25lZCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGlzIGJsb2NrIGFs
cmVhZHkuCi0gICAgQVNTRVJUKG1fc2V0LmZpbmQoY29kZUJsb2NrKSAhPSBtX3NldC5lbmQoKSk7
Ci0gICAgCi0gICAgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29u
ZWQgPSB0cnVlOwotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQotewotICAg
IGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7
IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICAoKml0ZXIpLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOwotICAgICAgICAoKml0ZXIp
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT52aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBm
YWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0
aXNvbmVkQ29kZUJsb2NrcygpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+LCAxNj4g
dG9SZW1vdmU7Ci0gICAgCi0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBp
dGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgJiYg
ISgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAg
ICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQotfQotCi12b2lk
IERGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgdmlzaXRv
cikKLXsKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nl
dC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgq
aXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAgICAg
ICAgKCppdGVyKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgfQotfQotCi0jZWxzZSAv
LyBFTkFCTEUoREZHX0pJVCkKLQotdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzUmVm
UHRyPENvZGVCbG9jaz4pCi17Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZH
Q29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RG
R0NvZGVCbG9ja3MuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvREZHQ29kZUJsb2Nrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdD
b2RlQmxvY2tzX2gKLSNkZWZpbmUgREZHQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNz
IFNsb3RWaXNpdG9yOwotCi0vLyBERkdDb2RlQmxvY2tzIG5vdGlmaWVzIHRoZSBnYXJiYWdlIGNv
bGxlY3RvciBhYm91dCBvcHRpbWl6ZWQgY29kZSBibG9ja3MgdGhhdAotLy8gaGF2ZSBkaWZmZXJl
bnQgbWFya2luZyBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhleSBhcmUg
b24gdGhlCi0vLyBzdGFjaywgYW5kIHRoYXQgbWF5IGJlIGpldHRpc29uZWQuIEpldHRpc29uaW5n
IGlzIHRoZSBwcm9jZXNzIG9mIGRpc2NhcmRpbmcKLS8vIGEgY29kZSBibG9jayBhZnRlciBhbGwg
Y2FsbHMgdG8gaXQgaGF2ZSBiZWVuIHVubGlua2VkLiBUaGlzIGNsYXNzIHRha2VzIHNwZWNpYWwK
LS8vIGNhcmUgdG8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgYXJlIHN0aWxsIGNhbGwgZnJhbWVzIHRo
YXQgYXJlIHVzaW5nIHRoZSBjb2RlCi0vLyBibG9jaywgdGhlbiBpdCBzaG91bGQgbm90IGJlIGlt
bWVkaWF0ZWx5IGRlbGV0ZWQsIGJ1dCByYXRoZXIsIGl0IHNob3VsZCBiZQotLy8gZGVsZXRlZCBv
bmNlIHdlIGtub3cgdGhhdCB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSByZWZlcmVuY2VzIHRvIGl0
IGZyb20gYW55Ci0vLyBjYWxsIGZyYW1lcy4gVGhpcyBjbGFzcyB0YWtlcyBpdHMgbmFtZSBmcm9t
IHRoZSBERkcgY29tcGlsZXI7IG9ubHkgY29kZSBibG9ja3MKLS8vIGNvbXBpbGVkIGJ5IHRoZSBE
RkcgbmVlZCBzcGVjaWFsIG1hcmtpbmcgYmVoYXZpb3IgaWYgdGhleSBhcmUgb24gdGhlIHN0YWNr
LCBhbmQKLS8vIG9ubHkgdGhvc2UgY29kZSBibG9ja3MgbWF5IGJlIGpldHRpc29uZWQuCi0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLWNsYXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgREZHQ29kZUJsb2NrcygpOwotICAgIH5ERkdD
b2RlQmxvY2tzKCk7Ci0gICAgCi0gICAgLy8gSW5mb3JtIHRoZSBjb2xsZWN0b3IgdGhhdCBhIGNv
ZGUgYmxvY2sgaGFzIGJlZW4gamV0dGlzb25lZCBmb3JtIGl0cwotICAgIC8vIGV4ZWN1dGFibGUg
YW5kIHNob3VsZCBvbmx5IGJlIGtlcHQgYWxpdmUgaWYgdGhlcmUgYXJlIGNhbGwgZnJhbWVzIHRo
YXQgdXNlCi0gICAgLy8gaXQuIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBlaXRoZXIgZnJvbSBh
IHJlY29tcGlsYXRpb24gdHJpZ2dlciwgb3IgZnJvbQotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwg
ZmluYWxpemVyIGFzc29jaWF0ZWQgd2l0aCBhIENvZGVCbG9jayB0aGF0IGhhZCB3ZWFrCi0gICAg
Ly8gcmVmZXJlbmNlcywgd2hlcmUgc29tZSBzdWJzZXQgb2YgdGhvc2UgcmVmZXJlbmNlcyB3ZXJl
IGRlYWQuCi0gICAgdm9pZCBqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwotICAgIAot
ICAgIC8vIENsZWFyIGFsbCBtYXJrIGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2RlIGJsb2Nr
cy4KLSAgICB2b2lkIGNsZWFyTWFya3MoKTsKLSAgICAKLSAgICAvLyBNYXJrIGEgcG9pbnRlciB0
aGF0IG1heSBiZSBhIENvZGVCbG9jayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcgY29k
ZQotICAgIC8vIGJsb2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGlubGluZSBpbiBDb2RlQmxvY2suaAot
ICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOwotICAgIAotICAgIC8vIERl
bGV0ZSBhbGwgamV0dGlzb25lZCBjb2RlIGJsb2NrcyB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2Vk
IChpLmUuIGFyZSBub3QgcmVmZXJlbmNlZAotICAgIC8vIGZyb20gY2FsbCBmcmFtZXMpLgotICAg
IHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAotICAgIC8v
IFRyYWNlIGFsbCBtYXJrZWQgY29kZSBibG9ja3MgKGkuZS4gYXJlIHJlZmVyZW5jZWQgZnJvbSBj
YWxsIGZyYW1lcykuIFRoZSBDb2RlQmxvY2sKLSAgICAvLyBpcyBmcmVlIHRvIG1ha2UgdXNlIG9m
IG1fZGZnRGF0YS0+aXNNYXJrZWQgYW5kIG1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkLgotICAgIHZv
aWQgdHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1f
c2V0OwotfTsKLSNlbHNlCi1jbGFzcyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIHZvaWQgamV0dGlzb24oUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+KTsKLSAgICB2b2lkIGNsZWFyTWFya3MoKSB7IH0KLSAgICB2b2lkIG1hcmsodm9pZCop
IHsgfQotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpIHsgfQot
ICAgIHZvaWQgdHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJikgeyB9Ci19OwotI2Vu
ZGlmCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDExICszNTQsNiBAQCBib29s
IEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiAgICAgcmV0dXJuIG1fcHJvdGVjdGVkVmFsdWVz
LnJlbW92ZShrLmFzQ2VsbCgpKTsKIH0KIAotdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9j
ayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQotewotICAgIG1fZGZnQ29kZUJsb2Nr
cy5qZXR0aXNvbihjb2RlQmxvY2spOwotfQotCiB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0Nl
bGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCiB7CiAgICAgaWYgKG1fYXJyYXlCdWZmZXJz
LmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CkBAIC00NTcsMTEgKzQ1MiwxMCBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cygpCiAgICAgfQogCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgc3RhY2tS
b290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKLSAgICBtX2Rm
Z0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7
CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlclN0YWNrUm9vdHMpOwotICAgICAgICBzdGFj
aygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAotICAgICAgICAgICAgc3RhY2tSb290cywgbV9q
aXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nrcyk7CisgICAgICAgIHN0YWNrKCkuZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoc3RhY2tSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1fY29kZUJs
b2Nrcyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC00ODUsMTIgKzQ3OSw2IEBA
IHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJs
ZXIgZW5hYmxlcih2aXNpdG9yKTsKIAotICAgICAgICBpZiAobV92bS0+Y29kZUJsb2Nrc0JlaW5n
Q29tcGlsZWQuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJs
b2NrKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92bS0+Y29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgbV92bS0+Y29kZUJs
b2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgICAgICB9
Ci0KICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNp
dG9yKTsKIAogICAgICAgICB7CkBAIC01NTgsNyArNTQ2LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9v
dHMoKQogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcyk7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFj
ZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXMiKTsKLSAgICAgICAgICAgIG1fZGZn
Q29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBt
X2NvZGVCbG9ja3MudHJhY2VNYXJrZWQodmlzaXRvcik7CiAgICAgICAgICAgICBtX2ppdFN0dWJS
b3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQpAQCAtNjgzLDggKzY3MSw4IEBAIHZv
aWQgSGVhcDo6ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCkKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY3VycmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAg
ICAgfQogCi0gICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2RmZ0NvZGVC
bG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1fY29kZUJs
b2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5y
ZWZlcmVuY2VkKCk7CiB9CiAKIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KQpAQCAtNzAxLDcgKzY4OSw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENv
ZGUoKQogICAgICAgICBtX2NvbXBpbGVkQ29kZS5yZW1vdmUoY3VycmVudCk7CiAgICAgfQogCi0g
ICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsK
KyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsKICAgICBt
X2ppdFN0dWJSb3V0aW5lcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw4ICsyNCw4IEBACiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2Nr
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKLSNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNs
dWRlICJIYW5kbGVTZXQuaCIKQEAgLTE0NCw4ICsxNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRo
ZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lkIGpldHRp
c29uREZHQ29kZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0KICAgICAgICAgc2l6ZV90
IGV4dHJhU2l6ZSgpOyAvLyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdlcyBhbGxv
Y2F0ZWQgYnkgdGhlIGhlYXAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHNpemUo
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0yNzMs
NyArMjcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxl
U2V0OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBERkdDb2Rl
QmxvY2tzIG1fZGZnQ29kZUJsb2NrczsKKyAgICAgICAgQ29kZUJsb2NrU2V0IG1fY29kZUJsb2Nr
czsKICAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAg
IEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTU0
OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ28KICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9w
T2ZTdGFjaygpKTsKIH0KIAotdm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhD
b25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBq
aXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCit2b2lkIEpTU3Rh
Y2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRp
dmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0
JiBjb2RlQmxvY2tzKQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRU
b3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2Vy
dmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVz
LCBjb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHko
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNT
dGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisgICAgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3Rz
OwotICAgIGNsYXNzIERGR0NvZGVCbG9ja3M7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNs
YXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogICAgIGNsYXNzIFZNOwpAQCAtNzEsNyArNzEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfkpTU3RhY2soKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAg
dm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJS
b3V0aW5lU2V0JiwgREZHQ29kZUJsb2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxv
Y2tTZXQmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBSZWdp
c3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNiArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBhc0lubGluZUNhbGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJ
bnQzMigpIGNvbnN0OwogICAgICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAg
ICAgIGRvdWJsZSB1bmJveGVkRG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hl
ZENlbGwoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAg
IGludDMyX3QgdGFnKCkgY29uc3Q7CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBl
bmNvZGVkVmFsdWU7CisgICAgICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAg
ICAgfTsKIApAQCAtMTg4LDYgKzE5MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuICEhcGF5bG9hZCgpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lz
dGVyOjp1bmJveGVkRG91YmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJl
cjsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRD
ZWxsKCkgY29uc3QKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSklU
OjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMy
KFNpZ25lZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JSZXR1cm4oKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhl
Y3V0ZUNvdW50ZXIoKSkpOworICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2ln
bmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVu
dHJ5KCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVD
b3VudGVyKCkpKTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3B0aW1pemUp
OwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0
KSk7CiAgICAgQVNTRVJUKCFtX2J5dGVjb2RlT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAg
RlRMOjpKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZv
ck9TUkVudHJ5SklUQ29kZSogSklUQ29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8
SklUQ29kZT4gSklUQ29kZTo6aG9zdEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVu
aykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwogfQog
bmFtZXNwYWNlIEZUTCB7CitjbGFzcyBGb3JPU1JFbnRyeUpJVENvZGU7CiBjbGFzcyBKSVRDb2Rl
OwogfQogCkBAIC0xNzQsNiArMTc1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21t
b25EYXRhKiBkZmdDb21tb24oKTsKICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAg
ICAgdmlydHVhbCBGVEw6OkpJVENvZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JF
bnRyeUpJVENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRl
KEpTU3RhY2sqLCBDYWxsRnJhbWUqLCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE2ICsxMDM2
LDMyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBv
cHRpbWl6ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAot
ICAgICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9Ci0g
ICAgICAgICAgICBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7
Ci0gICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAg
ICAgICAgICB2bS53b3JrbGlzdCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgdW5z
aWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CisgICAgICAgIGlmIChieXRlY29kZUluZGV4KQorICAg
ICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSAwOworICAgICAgICBPcGVy
YW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzKAorICAgICAgICAgICAgY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
bnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYg
IW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9j
ay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAg
ICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1
bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBu
ZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1
ZSBmb3IgdGhpcywKKyAgICAgICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVh
bCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAg
ICAgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50
byBVbmRlZmluZWQuCisgICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxl
VmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZH
Ojpjb21waWxlKAotICAgICAgICAgICAgY2FsbEZyYW1lLCBuZXdDb2RlQmxvY2suZ2V0KCksIERG
Rzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwgY2FsbGJhY2ssCi0gICAgICAgICAgICB2bS53b3Jr
bGlzdC5nZXQoKSk7CisgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgp
LmdldCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBtdXN0SGFu
ZGxlVmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCks
CisgICAgICAgICAgICB2bS5lbnN1cmVXb3JrbGlzdCgpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTA1NCwxNSArMTA3MCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXpl
KQogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVkQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAKLSAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKSB7Ci0gICAgICAgIC8vIEZUTCBKSVQgZG9lc24n
dCBzdXBwb3J0IE9TUiBlbnRyeSB5ZXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjUKLSAgICAgICAgCi0gICAgICAgIC8vIERvbid0IGF0
dGVtcHQgT1NSIGVudHJ5IGFnYWluLgotICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgaWYgKHZvaWQq
IGFkZHJlc3MgPSBERkc6OnByZXBhcmVPU1JFbnRyeShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVC
bG9jaywgYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkgewogICAgICAgICAgICAgZGF0YUxvZygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
MjAgKzkwLDYgQEAgSW50cmluc2ljIE5hdGl2ZUV4ZWN1dGFibGU6OmludHJpbnNpYygpIAogfQog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUKQotLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBmb3IgamV0
dGlzb25pbmcgY29kZSBibG9ja3MuCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQg
amV0dGlzb25Db2RlQmxvY2soVk0mIHZtLCBSZWZQdHI8VD4mIGNvZGVCbG9jaykKLXsKLSAgICBB
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgUmVmUHRyPFQ+IGNvZGVC
bG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2sucmVsZWFzZSgpOwotICAgIGNvZGVCbG9jayA9IHN0
YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0
aXZlKCkpOwotICAgIGNvZGVCbG9ja1RvSmV0dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsK
LSAgICB2bS5oZWFwLmpldHRpc29uREZHQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29k
ZUJsb2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOwotfQotI2VuZGlmCi0KIGNv
bnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRh
YmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
U2NyaXB0RXhlY3V0YWJsZSkgfTsKIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xMjUsMTIgKzExMSw2
IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICAKICAgICBB
U1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwogICAgIAotICAgIGlmIChKSVRDb2RlOjppc0pJ
VChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAgIHZtLmhlYXAucmVwb3J0
RXh0cmFNZW1vcnlDb3N0KAotICAgICAgICAgICAgc2l6ZW9mKENvZGVCbG9jaykgKyBnZW5lcmlj
Q29kZUJsb2NrLT5qaXRDb2RlKCktPnNpemUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZtLmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZihDb2RlQmxvY2spKTsKLSAgICAKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBnZW5lcmljQ29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKTsKICAgICAKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBvbGRDb2RlQmxvY2s7CkBA
IC0yNTAsMjYgKzIzMCwzMiBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIEV2YWxF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7Cisg
ICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9j
ayo+KAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKSk7CiAgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJl
ZihuZXcgRXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJs
b2NrLCAqZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0
QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIENv
ZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
ICAgIAogICAgIGlmIChjbGFzc0luZm8oKSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBQ
cm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+
KHRoaXMpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0
PFByb2dyYW1Db2RlQmxvY2sqPigKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVC
bG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAg
ICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVC
bG9jaykpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGV4ZWN1dGFibGUtPm1fcHJv
Z3JhbUNvZGVCbG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywg
KmJhc2VsaW5lKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNz
SW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7Cisg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2Rl
QmxvY2sqPigKKyAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpLT5iYXNlbGlu
ZVZlcnNpb24oKSk7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9w
dFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCi0gICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNl
ZEJsb2NrLCAqZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKSk7Ci0gICAgcmVzdWx0LT5z
ZXRBbHRlcm5hdGl2ZShleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgICAgICBD
b2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAgcmVzdWx0LT5zZXRB
bHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzc2LDE1
ICszNjIsNiBAQCBpbmxpbmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKCiAgICAg
fQogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0
aW1pemVkQ29kZShWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fZXZhbENv
ZGVCbG9jayk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fZXZhbENvZGVCbG9jay0+aml0Q29k
ZSgpOwotICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLX0KLSNl
bmRpZiAvLyBFTkFCTEUoSklUKQotCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKQEAgLTQyNiwx
NSArNDAzLDYgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogICAg
IHJldHVybiBlcnJvci50b0Vycm9yT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNl
KTsKIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNv
bk9wdGltaXplZENvZGUoVk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX3By
b2dyYW1Db2RlQmxvY2spOwotICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxv
Y2stPmppdENvZGUoKTsKLSAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayk7Ci19Ci0jZW5kaWYKLQogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQog
ewogI2lmIEVOQUJMRShKSVQpCkBAIC01MTgsMjIgKzQ4Niw2IEBAIEZ1bmN0aW9uQ29kZUJsb2Nr
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgRU5B
QkxFKEpJVCkKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVG
b3JDYWxsKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tG
b3JDYWxsKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRD
b2RlKCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tG
b3JDYWxsLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKLX0KLQotdm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAg
amV0dGlzb25Db2RlQmxvY2sodm0sIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0Q29kZSgpOwot
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOwotfQotI2VuZGlmCi0KIHZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMTAg
KzQ0NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAK
LSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0j
ZW5kaWYKLQogICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9ldmFsQ29kZUJsb2NrLmdldCgpOwpAQCAtNTA2LDEwICs1MDIsNiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShWTSYpOwotI2VuZGlmCi0KICAgICBQcm9n
cmFtQ29kZUJsb2NrKiBjb2RlQmxvY2soKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJvZ3Jh
bUNvZGVCbG9jay5nZXQoKTsKQEAgLTU4MSwxMCArNTczLDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAKLSNp
ZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYp
OwotI2VuZGlmCi0KICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsOwpAQCAtNTk1LDEwICs1ODMsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CiAgICAgfQog
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0
cnVjdChWTSYpOwotI2VuZGlmCi0KICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAg
LTYwOSwxOCArNTkzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAotICAgICAg
ICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCh2bSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3Qodm0pOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmCi0gICAgICAgIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAx
NTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJh
bmdlOwogICAgIHYodW5zaWduZWQsIGxsdm1CYWNrZW5kT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwK
ICAgICB2KHVuc2lnbmVkLCBsbHZtT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICB2KHVuc2ln
bmVkLCBsbHZtU2l6ZUxldmVsLCAwKSBcCisgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSkg
LyogZm9vbC1wcm9vZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhlIEZU
TC4gOy0pICovXAogICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZUNvbmN1cnJlbnRKSVQsIHRydWUp
IFwKICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkNvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJl
ck9mV29ya2VyVGhyZWFkcygyKSAtIDEpIFwKQEAgLTE1Niw5ICsxNTcsMTQgQEAgdHlwZWRlZiBP
cHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVB
ZnRlckxvbmdXYXJtVXAsIDEwMDApIFwKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6
ZVNvb24sIDEwMDApIFwKLSAgICBcCiAgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3Jl
bWVudEZvckxvb3AsIDEpIFwKLSAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuLCAxNSkgXAorICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JFbnRyeSwgMTUpIFwKKyAgICBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1p
emVBZnRlcldhcm1VcCwgMTAwMDApIFwKKyAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JGVExPcHRp
bWl6ZVNvb24sIDEwMDApIFwKKyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50
Rm9yTG9vcCwgMSkgXAorICAgIHYoaW50MzIsIGZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JS
ZXR1cm4sIDE1KSBcCisgICAgdih1bnNpZ25lZCwgZnRsT1NSRW50cnlGYWlsdXJlQ291bnRGb3JS
ZW9wdGltaXphdGlvbiwgMTUpIFwKICAgICBcCiAgICAgdihpbnQzMiwgZXZhbFRocmVzaG9sZE11
bHRpcGxpZXIsIDEwKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTAsNiArNzEwLDE1IEBAIHZvaWQgVk06OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnYKICAgICAgICAgfQogICAgIH0KIH0KKworREZHOjpX
b3JrbGlzdCogVk06OmVuc3VyZVdvcmtsaXN0KCkKK3sKKyAgICBpZiAoIURGRzo6ZW5hYmxlQ29u
Y3VycmVudEpJVCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAg
ICAgICB3b3JrbGlzdCA9IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xp
c3QuZ2V0KCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5
MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7
CiAKICAgICAgICAgdm9pZCBtYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5t
YWNoaW5lVGhyZWFkcygpLm1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAg
ICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdv
cmtsaXN0KCk7CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8SlNMb2NrPiBtX2FwaUxvY2s7CkBAIC0yNzQsMTcgKzI3OCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKICAgICAg
ICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdURjo6U2lt
cGxlU3RhdHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUOwot
ICAgICAgICBWZWN0b3I8Q29kZUJsb2NrKj4gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQ7Ci0gICAg
ICAgIHZvaWQgc3RhcnRlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAg
ewotICAgICAgICAgICAgY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuYXBwZW5kKGNvZGVCbG9jayk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlzaGVkQ29tcGlsaW5nKENvZGVCbG9jayog
Y29kZUJsb2NrKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9j
aywgY29kZUJsb2NrID09IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmxhc3QoKSk7Ci0gICAgICAg
ICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KIAog
ICAgICAgICB2b2lkIHNldEluRGVmaW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3Bl
cnR5KQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL1dURi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wOS0wMiAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIENvZGVCbG9jazo6amV0dGlz
b24oKSBzaG91bGQgYmUgaW1wbGljaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMDU2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgTWFrZSBpdCBwb3NzaWJsZSB0byBnZXQgYSBSZWZDb3Vu
dGVkQXJyYXkncyByZWZDb3VudCgpIHNvIHRoYXQgYSBDb2RlQmxvY2sKKyAgICAgICAgY2FuIGNv
bXB1dGUgaXRzIHBhcnQgb2YgdGhlIGZvb3RwcmludCBvZiBhbiBJbnN0cnVjdGlvbiBhcnJheSBi
eSBkb2luZworICAgICAgICBzb21ldGhpbmcgbGlrZSBzaXplKCkgLyByZWZDb3VudCgpLgorCisg
ICAgICAgICogd3RmL1JlZkNvdW50ZWRBcnJheS5oOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVk
QXJyYXk6OnJlZkNvdW50KToKKwogMjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBmb3IgSGFyZEF1dG9yZWxlYXNlLCB3aGlj
aCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZD
b3VudGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJy
YXkuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsMTMgQEAgcHVibGljOgogICAgICAgICBm
YXN0RnJlZShIZWFkZXI6OmZyb21QYXlsb2FkKG1fZGF0YSkpOwogICAgIH0KICAgICAKKyAgICB1
bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZCht
X2RhdGEpLT5yZWZDb3VudDsKKyAgICB9CisgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgaWYgKCFtX2RhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210322</attachid>
            <date>2013-09-02 22:14:57 -0700</date>
            <delta_ts>2013-09-03 10:15:23 -0700</delta_ts>
            <desc>it makes imaging-gaussian-blur faster</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>200704</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGhhcyBzb21lIHNtYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9u
cy4gSlNCZW5jaC9nb29nbGUKKyAgICAgICAgc2hvd3MgYSB+OSUgcmVncmVzc2lvbiBiZWNhdXNl
IGl0IEdDJ3MgbW9yZSBmcmVxdWVudGx5LiBIb3dldmVyLCB0aGF0CisgICAgICAgIHJlZ3Jlc3Np
b24gaXMgbm90IGR1ZSB0byB0aGUgamV0dGlzb24gcmVmYWN0b3JpbmcgLSBpbnN0ZWFkIGl0J3Mg
ZHVlIHRvCisgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhpcyBjaGFuZ2UgYWxzbyBtYWtlcyB1cyBt
b3JlIHByZWNpc2VseSB0cmFjayBDb2RlQmxvY2sKKyAgICAgICAgbWVtb3J5IGZvb3RwcmludC4g
UHJldmlvdXNseSwgd2UgaWdub3JlZCB0aGUgc2l6ZSBvZiB0aGUgYnl0ZWNvZGUgc3RyZWFtLgor
ICAgICAgICBOb3cgd2UgZG9uJ3QgaWdub3JlIGl0IGFueXdheS4gVGhpcyBjYXVzZXMgc29tZSBi
ZW5jaG1hcmtzIHRvIEdDIG1vcmUKKyAgICAgICAgZnJlcXVlbnRseS4gSXQncyBhIGJ1ZyB0byBo
YXZlIHRoZSBHQyBpZ25vcmUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAgICAgQ29kZUJs
b2NrcywgYW5kIGlmIHRoYXQgYnVnIGNhdXNlcyBzb21lIGJlbmNobWFyayB0byBydW4gYSBiaXQg
ZmFzdGVyCisgICAgICAgIHdoaWxlIHVzaW5nIGEgYml0IG1vcmUgbWVtb3J5LCB0aGVuIGl0J3Mg
c3RpbGwgYSBidWcgYW5kIHdlIHNob3VsZCBzdGlsbAorICAgICAgICBmaXggaXQuIFRoZXJlIGFy
ZSBubyBvdGhlciBwZXJmb3JtYW5jZSBjaGFuZ2VzIGR1ZSB0byB0aGlzIGNoYW5nZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRk
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgor
ICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNr
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gTm8gbmVlZCBmb3IgSGFyZEF1dG9y
ZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdpbmdSZWxlYXNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwzMCArMTY5
LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGlzYXNzZW1ibGVyL1g4NkRp
c2Fzc2VtYmxlci5jcHAKIAogICAgIGhlYXAvQmxvY2tBbGxvY2F0b3IuY3BwCi0gICAgaGVhcC9D
b3BpZWRTcGFjZS5jcHAKLSAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAotICAgIGhlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAot
ICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKLSAgICBoZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCi0gICAgaGVhcC9HQ1RocmVhZC5jcHAKLSAgICBoZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKLSAgICBoZWFwL0hhbmRsZVNldC5jcHAKLSAgICBoZWFw
L0hhbmRsZVN0YWNrLmNwcAotICAgIGhlYXAvSGVhcC5jcHAKLSAgICBoZWFwL0hlYXBTdGF0aXN0
aWNzLmNwcAotICAgIGhlYXAvSGVhcFRpbWVyLmNwcAotICAgIGhlYXAvSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcAotICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCi0gICAgaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCi0KLSAgICBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAorICAgIGhlYXAv
Q29kZUJsb2NrU2V0LmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCiAgICAgaGVh
cC9Db3BpZWRTcGFjZS5jcHAKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAotICAgIGhlYXAvREZH
Q29kZUJsb2Nrcy5jcHAKICAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcApAQCAtMjAwLDYgKzE4MCw3IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9IZWFwLmNwcAogICAgIGhlYXAv
SGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCisgICAgaGVhcC9JbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwCiAgICAgaGVhcC9KSVRTdHViUm91dGluZVNldC5jcHAKICAgICBo
ZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKICAgICBoZWFwL01hcmtTdGFjay5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDQyLDYgKzQ0Miw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGcm9tQmxvY2suaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFsbG9jYXRvci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9jay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRCbG9ja0lubGluZXMuaCBcCkBAIC00NTYsOCArNDU4
LDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDExICs4MiwxMSBAQCBTT1VSQ0VTICs9IFwK
ICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBcCiAgICAgYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAorICAg
IGhlYXAvQ29kZUJsb2NrU2V0LmNwcCBcCiAgICAgaGVhcC9Db3BpZWRTcGFjZUlubGluZXMuaCBc
CiAgICAgaGVhcC9Db3BpZWRTcGFjZS5jcHAgXAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwIFwK
ICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tz
LmNwcCBcCiAgICAgaGVhcC9XZWFrLmNwcCBcCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwIFwKICAg
ICBoZWFwL1dlYWtIYW5kbGVPd25lci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RyaXZlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNz
ZW1ibGVyXERpc2Fzc2VtYmxlci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxDb2RlQmxvY2tTZXQuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29uc2VydmF0aXZlUm9vdHMuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29waWVkU3BhY2UuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVZpc2l0b3IuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
REZHQ29kZUJsb2Nrcy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxH
Q1RocmVhZC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVh
ZFNoYXJlZERhdGEuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGFu
ZGxlU2V0LmNwcCIgLz4NCkBAIC02NzksNiArNjc5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3BpZWRBbGxvY2F0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcGllZEJsb2NrLmgiIC8+DQpAQCAtNjg5LDcgKzY5MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvcklubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXENvcHlXb3JrTGlzdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcREZHQ29kZUJsb2Nrcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1RocmVhZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWRTaGFyZWREYXRhLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4
LDYgQEAKIAkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0QzE1
MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLzsgfTsKIAkJMEYyQkRDNEYx
NTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBE
RkdWYWx1ZVNvdXJjZS5jcHAgKi87IH07CiAJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkxMCAvKiBE
RkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNw
cCAqLzsgfTsKLQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3
MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9
OwogCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAw
M0MyRjhEIC8qIFVudXNlZFBvaW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZp
ZWRJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZC
NEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5
NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAq
LzsgfTsKQEAgLTM2OSw2ICszNjcsMjAgQEAKIAkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07
CiAJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CisJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xMzU0LDgg
KzEzNjYsNiBAQAogCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkTm9k
ZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVlU291cmNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29kZUJs
b2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MDE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7
IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNl
S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU4LDYgKzE1NjgsMjAg
QEAKIAkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0aCA9IGRm
Zy9ERkdPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTUz
MTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVj
dWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVj
dWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzExMTdE
NDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMRm9yT1NSRW50cnlKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE3MTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPU1JFbnRyeS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRW50cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NS
RW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRW50cnkuaDsg
cGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMUUxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIw
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHBhdGgg
PSBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgcGF0aCA9IGRmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjQxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRoID0gZnRsL0ZU
TEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJD
QzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERG
R1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dv
cmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTM5LDYgKzI1NjMsOCBAQAogCQkJCUE3RjI5OTY5MTdBMEJCNjcwMDEw
NDE3QSAvKiBGVExGYWlsLmNwcCAqLywKIAkJCQlBN0YyOTk2QTE3QTBCQjY3MDAxMDQxN0EgLyog
RlRMRmFpbC5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0
ZWRWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwICovLAorCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExG
b3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyog
RlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBBMjIxNzA5NjA2OTAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTI1NTEsNiArMjU3Nyw4
IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNw
cCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
aCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVWYWx1
ZS5oICovLAorCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAg
Ki8sCisJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggKi8sCiAJ
CQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICovLAogCQkJCTBG
MjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCiAJCQkJMEYyMzVCQzgx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLywKQEAgLTI3
MTUsNiArMjc0Myw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDgxNkUxOTE1NENDNTZDMDBC
ODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuY3BwICovLAogCQkJCTE0ODE2RTFBMTU0Q0M1NkMwMEI4
MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovLAorCQkJCTBGRDhBMzExMTdENDMyNkMwMENBMkM0
MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLAorCQkJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAv
KiBDb2RlQmxvY2tTZXQuaCAqLywKIAkJCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIgLyogQ29u
c2VydmF0aXZlUm9vdHMuY3BwICovLAogCQkJCTE0OURBQUYyMTJFQjU1OUQwMDgzQjEyQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5oICovLAogCQkJCUMyRUFEMkZCMTRGMDI0OTgwMEE0QjE1OSAvKiBD
b3BpZWRBbGxvY2F0b3IuaCAqLywKQEAgLTI3MjksOCArMjc1OSw2IEBACiAJCQkJQzIyMzlEMTQx
NjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovLAogCQkJCUMyMThEMTNG
MTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCAqLywKIAkJCQkwRjEzNkQ0QjE3NEFE
NjlCMDA3NUIzNTQgLyogRGVmZXJHQy5oICovLAotCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKLQkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBH
Q0Fzc2VydGlvbnMuaCAqLywKIAkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCAqLywKIAkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCkBAIC0zNTI0LDYgKzM1NTIsOCBAQAogCQkJ
CUE3RDg5Q0VGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmggKi8sCiAJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCAqLywKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLywK
KwkJCQkwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwICovLAorCQkJCTBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZH
T1NSRXhpdC5oICovLAogCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5jcHAgKi8sCkBAIC0zNTY2LDYgKzM1OTYsMTIgQEAKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGQzA5NzlG
MTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4
QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZEOEEzMjAx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLywKKwkJ
CQkwRkQ4QTMyMTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovLAorCQkJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCTBGRDhBMzIzMTdENTFGNTcw
MENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCAqLywKKwkJCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGNjM5NDNDMTVDNzVG
MTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKIAkJCQkwRjYz
OTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovLAog
CQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCAq
LywKQEAgLTM4OTEsNyArMzkyNyw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQw
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTk5LDcgQEAKIAkJCQlB
NzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1
QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTc3LDYg
KzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2
RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBACiAJCQkJMTRCQTdBOTgxM0FBREZGODAw
NUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3
OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0Uw
MERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI4
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGlt
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTIsNiArNDMzMCw3IEBACiAJ
CQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJB
MyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBC
MzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3
QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzFBMTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJl
Z0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1LDYgKzQzODUsNyBAQAogCQkJCTBGQjdG
MzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5
NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FC
NjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERB
MTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8q
IFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2
QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZE
RDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMy
QTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dl
bmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAv
KiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgw
MEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYg
KzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENv
bW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZl
cnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDgyNSw3ICs0ODY5LDYgQEAKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdB
NDI0MTE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4ODYsNiArNDkyOSw3IEBA
CiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI5MTdENTFG
NTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0
QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ5ODcsNiArNTAzMSw3IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pT
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8q
IEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzEzMTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAw
QTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBp
biBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcgQEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZE
MDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JF
OEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkx
NkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTExLDYgKzUxNTcsNyBA
QAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxNDEsNiAr
NTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBT
dXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1f
aXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5
c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAg
ICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUu
Z2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgpKQogICAgICwgbV9vd25lckV4ZWN1dGFi
bGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293
bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0ob3RoZXIubV92bSkKQEAgLTE1MDQsNiAr
MTUwNSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAs
IG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5k
aWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBhcmFt
ZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxOCw5IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVE
YXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVhcC0+
bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29k
ZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTUyNSw2ICsxNTMwLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICwgbV9udW1WYXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bVZh
cnMpCiAgICAgLCBtX2lzQ29uc3RydWN0b3IodW5saW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0
b3IoKSkKICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCisgICAgLCBtX2RpZEZh
aWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQogICAgICwgbV9v
d25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQogICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE1
NDQsNyArMTU1MCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8K
ICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQp
CiAjZW5kaWYKIHsKLSAgICBtX3ZtLT5zdGFydGVkQ29tcGlsaW5nKHRoaXMpOworICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAKICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNl
dE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CkBAIC0x
ODQyLDcgKzE4NDgsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAKICAgICBpZiAoT3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpKQogICAgICAgICBk
dW1wQnl0ZWNvZGUoKTsKLSAgICBtX3ZtLT5maW5pc2hlZENvbXBpbGluZyh0aGlzKTsKKyAgICBt
X2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXpl
b2YoSW5zdHJ1Y3Rpb24pKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4NTAs
MTIgKzE4NTcsNiBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGlmIChtX3ZtLT5tX3Bl
ckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
bm90aWZ5RGVzdHJ1Y3Rpb24odGhpcyk7CiAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
Ly8gUmVtb3ZlIG15c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBOb3RlIHRo
YXQgSSBtYXkgbm90IGJlIGluIHRoaXMgc2V0Ci0gICAgLy8gKGJlY2F1c2UgSSdtIG5vdCBhIERG
RyBjb2RlIGJsb2NrKSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5LgotICAg
IG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsKLSNlbmRpZgot
ICAgIAogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKICNlbmRpZgpAQCAtMTkwNSwzMyArMTkwNiwzNSBAQCB2b2lkIEV2YWxDb2RlQ2Fj
aGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVO
QUJMRShERkdfSklUKQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgp
KSkgewotICAgICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15
c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHku
Ci0gICAgICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3Zl
IGJlZW4gY2FsbGVkIGFscmVhZHkuIE9ubHkgb25lIHRocmVhZAotICAgICAgICAvLyBtYXkgcHJv
Y2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIENBUyByYWNlLgot
ICAgICAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb2xk
VmFsdWUgPSBkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKLSAgICAgICAg
ICAgIGlmIChvbGRWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Ci0g
ICAgICAgICAgICAgICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4g
RG9pbmcgc28gaXMgaGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBi
ZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBKU1Zh
bHVlcywgd2hpY2ggY2FuCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24g
MzItYml0LCBsZWFkaW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCi0gICAg
ICAgICAgICAgICAgLy8gdGhhdCBhcmUgbmVhcmx5IGltcG9zc2libGUgdG8gdHJhY2sgZG93bi4K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBt
dXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVhcmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQotICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIHRydWUgKHdlbGwsICh1bnNpZ25lZCkxKSwgc2luY2Ugb25jZSBh
IEdDIHRocmVhZCBpcyBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGFuZCBoYXMg
d29uIHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZh
bHVlIHRydWUpCi0gICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5IGNvbXBsZXRl
IHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKLSAgICAgICAgICAgICAg
ICAvLyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmZGZnQ29tbW9uLT52
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0dDKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2Us
IGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgIC8vIFRvIHRoaXMgZW5k
LCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuIE9u
bHkgb25lIHRocmVhZAorICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCisgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAg
ZG8geworICAgICAgICBvbGRWYWx1ZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwor
ICAgICAgICBpZiAob2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9u
ZSBlbHNlIHdvbiEgUmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Cisg
ICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2lu
ZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgbXV0YXRp
bmcgdGhlIHN0YXRlIG9mIFZhbHVlUHJvZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdo
aWNoIGNhbgorICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFk
aW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCisgICAgICAgICAgICAvLyB0
aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVh
cmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
CisgICAgICAgICAgICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3Bv
bnNpYmxlIGZvciBzZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgLy8gaXQgd2ls
bCBkZWZpbml0ZWx5IGNvbXBsZXRlIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNs
YXJpbmcKKyAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX3Zpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExF
TF9HQykKKyAgICAKKyAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2Uoc2l6ZW9mKENv
ZGVCbG9jaykpOworICAgIGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlVc2FnZShtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rpb25z
LnNpemUoKSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faW5zdHJ1
Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikgLyBtX2luc3RydWN0aW9ucy5yZWZD
b3VudCgpKTsKICAgICAKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVy
bmF0aXZlLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTIzNzksMTcgKzIzODIsMTQgQEAg
Q29kZUJsb2NrKiBDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUo
SklUKQorYm9vbCBDb2RlQmxvY2s6Omhhc09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJ
VFR5cGUgdHlwZVRvUmVwbGFjZSkKK3sKKyAgICByZXR1cm4gSklUQ29kZTo6aXNIaWdoZXJUaWVy
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgdHlwZVRvUmVwbGFjZSk7Cit9CisKIGJvb2wgQ29k
ZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCiB7Ci0gICAgQVNTRVJUKEpJVENvZGU6
OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUoKSkpOwotICAgIGJvb2wgcmVzdWx0ID0gSklUQ29kZTo6
aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKTsKLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxh
Y2VtZW50KCktPmppdFR5cGUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpKSk7Ci0gICAgICAgIEFT
U0VSVChyZXBsYWNlbWVudCgpID09IHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChqaXRUeXBlKCkpOwogfQogI2VuZGlm
CiAKQEAgLTI3NDAsMjggKzI3NDAsMTQgQEAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25D
b2RlQmxvY2s6OgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQogeworICAgIERlZmVyR0Mg
ZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwogICAgIGFsdGVy
bmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxseUZyZXF1ZW50RXhpdFNp
dGVzKCk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpCiAgICAgICAgIGRh
dGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzLCAiLlxuIik7Ci0gICAgamV0dGlzb25JbXBsKCk7
Ci19Ci0KLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKLXsKLSAgICBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25P
cHRpbWl6ZWRDb2RlKCp2bSgpKTsKLX0KLQotdm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbklt
cGwoKQotewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgp
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworICAg
IGFsdGVybmF0aXZlKCktPmluc3RhbGwoKTsKIH0KICNlbmRpZgogCkBAIC0zMDM4LDEwICszMDI0
LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNl
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNv
b24oKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0
aW9uRGVmZXJyZWQ6CiAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0
aW1lU29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXph
dGlvblNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApA
QCAtMzA0OSwxNiArMzAzNSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkCiAgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3Rp
bGwgZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
b3B0aW1pemVkIGNvZGUgcmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxp
ZGF0ZWQ6CiAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAg
ICAgY291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNs
dWRlICJDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVC
bG9ja0hhc2guaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJDb25jdXJy
ZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlw
ZS5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJs
b2Nrcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgpAQCAtODMsNyArODMsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CkBAIC0yNzMs
MTQgKzI3MiwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzZXRKSVRDb2RlKFBhc3NSZWZQ
dHI8SklUQ29kZT4gY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVj
aykKICAgICB7CisgICAgICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CisgICAgICAg
IG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNvZGUtPnNpemUoKSk7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgaXMgcHJvYmFibHkgbm90IG5lZWRlZCBiZWNhdXNlIHRoZSBsb2Nr
IHdpbGwgYWxzbyBkbyBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJh
bm9pZC4KICAgICAgICAgbV9qaXRDb2RlID0gY29kZTsKICAgICAgICAgbV9qaXRDb2RlV2l0aEFy
aXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvcihtX2pp
dENvZGUpKSkKLSAgICAgICAgICAgIG1fdm0tPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFk
ZCh0aGlzKTsKLSNlbmRpZgogICAgIH0KICAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29k
ZVdpdGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KQEAg
LTMxMSw3ICszMDgsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsg
fQogCi0gICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOworICAgIGJvb2wgaGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9SZXBsYWNlKTsKKyAgICBi
b29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7IC8vIHRoZSB0eXBlVG9SZXBsYWNlIGlzIG15
IEpJVFR5cGUKICNlbmRpZgogCiAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KQEAgLTk2MCwxMCAr
OTU4LDkgQEAgcHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAg
Ym9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1
c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247
CisgICAgCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIApAQCAtOTc0LDcgKzk3MSw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2tTZXQ7CiAgICAgCiAgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSk7CiAgICAgCkBAIC0xMDE3LDE3ICsxMDE0LDE2IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpCiAgICAgewotICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFucyB0
aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKLSAgICAg
ICAgLy8gQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28KLSAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQg
Q29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0
IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCiAgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJs
b2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFk
IHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCiAgICAgICAgIC8vIGFs
bG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9q
aXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmIChtX21heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwNjcsNiArMTA2Myw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2
YXRpb247CisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAgIHVpbnQ4X3QgbV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291
cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTE4Niw3ICsxMTg0LDYgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjA5LDcgKzEyMDYsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjMyLDcg
KzEyMjgsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjkxLDggKzEyODYsNyBAQCBpbmxpbmUgSlNW
YWx1ZSBFeGVjU3RhdGU6OmFyZ3VtZW50QWZ0ZXJDCiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5qc1ZhbHVlKCk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLWlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAw
IGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMu
CiAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CkBAIC0xMzA3LDkgKzEzMDEsOCBAQCBpbmxpbmUgdm9pZCBERkdDb2Rl
QmxvY2tzOjptYXJrKHZvaWQqIGNhCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRy
dWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1
MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYgKzE1MjAsMTQgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUGhhbnRv
bToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAg
Y2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgorICAgIGNh
c2UgTG9vcEhpbnQ6CisgICAgICAgIC8vIFdlIHByZXRlbmQgdGhhdCBpdCBjYW4gZXhpdCBiZWNh
dXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUuCisgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVbnJlYWNoYWJsZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0MCwxOSArMzE0MCwxOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpZiAoIW1faW5s
aW5lU3RhY2tUb3AtPm1fY2FsbGVyKQogICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5p
c09TUlRhcmdldCA9IHRydWU7CiAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9vcEhpbnQpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92bS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkp
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1dhdGNoZG9nVGltZXIpOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50b20gbm9kZSB0byBl
bnN1cmUgdGhhdCB0aGVyZSBpcyBhIHBsYWNlaG9sZGVyCi0gICAgICAgICAgICAgICAgLy8gbm9k
ZSBmb3IgdGhpcyBieXRlY29kZSBvcC4KLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20pOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOworICAgICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0gMCk7CisgICAgICAg
ICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlz
UmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CisgICAg
ICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2NrKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYgKzI3MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRh
dGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxvY2tzKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0
ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxvY2sqIGJsb2Nr
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9
IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1f
YWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwotICAgICAg
ICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0KLSAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJc1N0cmlu
ZzoKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBNb3ZIaW50QW5kQ2hlY2s6CkBAIC0xMzMsNiArMTM0LDEwIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBj
YXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVy
VXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICB3cml0ZShTaWRlU3Rh
dGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDcgQEAg
c3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKIGNsYXNzIENvbW1vbkRhdGEgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGljOgotICAgIENvbW1vbkRh
dGEoKQotICAgICAgICA6IG1heUJlRXhlY3V0aW5nKGZhbHNlKQotICAgICAgICAsIGlzSmV0dGlz
b25lZChmYWxzZSkKLSAgICB7Ci0gICAgfQorICAgIENvbW1vbkRhdGEoKSB7IH0KICAgICAKICAg
ICB2b2lkIG5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oUGxhbiYsIENvZGVCbG9j
ayosIE5vZGUqKTsKICAgICAKQEAgLTgxLDExICs3Nyw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAgICAKICAgICBSZWZQdHI8
UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKLSAgICBib29sIG1heUJlRXhlY3V0
aW5nOwotICAgIGJvb2wgaXNKZXR0aXNvbmVkOwogICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJv
dmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICBib29sIGFsbFRy
YW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5
IEdDLgotICAgIHVuc2lnbmVkIHZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsgLy8gVW5zaWdu
ZWQgdG8gbWFrZSBpdCB3b3JrIHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlc3Qgc2V0IG9mIENB
UyBpbXBsZW1lbnRhdGlvbnMuCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDkgKzU1LDkgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKIAogI2lm
IEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9k
ZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLAotICAgIFdvcmtsaXN0KiB3b3Jr
bGlzdCkKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUg
bW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgV29ya2xpc3QqIHdvcmtsaXN0KQogewogICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsK
ICAgICAKQEAgLTY3LDggKzY3LDYgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CiAgICAgCi0gICAgQVNTRVJUKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCk7
Ci0KICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpIHx8ICFNYWNyb0Fzc2VtYmxlcjo6c3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
IApAQCAtNzYsOSArNzQsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
CiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKICAgICAKICAgICBpZiAobG9nQ29t
cGlsYXRpb25DaGFuZ2VzKCkpCi0gICAgICAgIGRhdGFMb2coIkRGRyhEcml2ZXIpIGNvbXBpbGlu
ZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwotICAgIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgICAgIGRhdGFMb2coIkRGRyhEcml2ZXIpIGNvbXBpbGluZyAiLCAqY29kZUJsb2Nr
LCAiIHdpdGggIiwgbW9kZSwgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbnkgc3R1YnMgdGhhdCB0aGUgREZHIGlzIGdvaW5nIHRvIHVzZSBhcmUgaW5pdGlhbGl6ZWQu
IFdlIHdhbnQgdG8KICAgICAvLyBtYWtlIHN1cmUgdGhhdCBhbCBKSVQgY29kZSBnZW5lcmF0aW9u
IGRvZXMgZmluYWxpemF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KQEAgLTkzLDI5ICs4OSw4IEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICB2bS5nZXRDVElTdHVi
KEZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAjZW5kaWYKICAgICAKLSAg
ICAvLyBEZXJpdmUgb3VyIHNldCBvZiBtdXN0LWhhbmRsZSB2YWx1ZXMuIFRoZSBjb21waWxhdGlv
biBtdXN0IGJlIGF0IGxlYXN0IGNvbnNlcnZhdGl2ZQotICAgIC8vIGVub3VnaCB0byBhbGxvdyBm
b3IgT1NSIGVudHJ5IHdpdGggdGhlc2UgdmFsdWVzLgotICAgIHVuc2lnbmVkIG51bVZhcnNXaXRo
VmFsdWVzOwotICAgIGlmIChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIG51bVZhcnNX
aXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7Ci0gICAgZWxzZQotICAgICAgICBudW1W
YXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKLSAg
ICAgICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51
bVZhcnNXaXRoVmFsdWVzKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbGFuLT5tdXN0
SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGludCBvcGVyYW5kID0gcGxhbi0+
bXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgIGlmIChvcGVyYW5k
SXNBcmd1bWVudChvcGVyYW5kKQotICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpCi0gICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlCi0gICAgICAgICAgICAmJiBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENv
ZGVGb3JDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25z
dHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCi0g
ICAgICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQg
d2UgcHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAotICAgICAgICAgICAgLy8gYnV0IGl0IGhh
cyB0byBiZSBhbiBhY3R1YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50
IERGRyBwYXNzZXMsCi0gICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1
cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCi0gICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFs
dWVzW2ldID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGFu
LT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVl
KCk7Ci0gICAgfQorICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwogICAgIAogICAgIGlmICh3b3JrbGlzdCkg
ewogICAgICAgICBwbGFuLT5jYWxsYmFjayA9IGNhbGxiYWNrOwpAQCAtMTMwLDcgKzEwNSw3IEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKIH0KICNlbHNlIC8vIEVOQUJM
RShERkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIEV4
ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsCisgICAgVk0m
LCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxK
U1ZhbHVlPiYsCiAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBX
b3JrbGlzdCopCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtMTM4LDEzICsx
MTMsMTMgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIEV4ZWNT
dGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAot
ICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3NlZENhbGxiYWNrLAotICAgIFdvcmtsaXN0KiB3b3JrbGlz
dCkKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9k
ZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpT
VmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiBwYXNzZWRDYWxsYmFjaywgV29ya2xpc3QqIHdvcmtsaXN0KQogewogICAg
IFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gcGFzc2VkQ2Fs
bGJhY2s7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29tcGlsZUltcGwoCi0gICAg
ICAgIGV4ZWMsIGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjYWxsYmFj
aywgd29ya2xpc3QpOworICAgICAgICB2bSwgY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMsIGNhbGxiYWNrLCB3b3JrbGlzdCk7CiAgICAgaWYg
KHJlc3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKQogICAgICAgICBjYWxsYmFjay0+Y29tcGls
YXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsMTAgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29t
cGlsYQogCiAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm9uLW51bGwsIHdlIGRvIGEgY29uY3VycmVu
dCBjb21waWxlLiBPdGhlcndpc2Ugd2UgZG8gYSBzeW5jaHJvbm91cwogLy8gY29tcGlsZS4gRXZl
biBpZiB3ZSBkbyBhIHN5bmNocm9ub3VzIGNvbXBpbGUsIHdlIGNhbGwgdGhlIGNhbGxiYWNrIHdp
dGggdGhlIHJlc3VsdC4KLUNvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoRXhlY1N0YXRlKiwgQ29k
ZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiwgV29ya2xpc3QqKTsKK0Nv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0Kik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAg
ICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBB
bmRPU1JFbnRlcjoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC04OTYsNiArODk5LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1Rp
bWVyOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgICAgICBjYXNlIEV4dHJhY3RPU1JF
bnRyeUxvY2FsOgorICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAj
ZWxzZQogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDEzIEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiciIsIG9wZXJhbmQsICIoIiwgVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcCgqdGhpcywgdmFyaWFibGVBY2Nlc3NEYXRhKSwgIikiKTsKICAgICB9CisgICAgaWYgKG5v
ZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgeworICAgICAgICBpbnQgb3BlcmFuZCA9IG5vZGUtPnVu
bGlua2VkTG9jYWwoKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgb3BlcmFuZFRvQXJndW1lbnQob3Bl
cmFuZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJyIiwg
b3BlcmFuZCk7CisgICAgfQogICAgIGlmIChub2RlLT5oYXNDb25zdGFudEJ1ZmZlcigpKSB7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSk7CiAgICAgICAgIG91dC5wcmludChub2RlLT5zdGFydENv
bnN0YW50KCksICI6WyIpOwpAQCAtNDg3LDYgKzQ5NCwyOSBAQCB2b2lkIEdyYXBoOjpyZXNldFJl
YWNoYWJpbGl0eSgpCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiB9CiAKK3ZvaWQgR3Jh
cGg6OmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGZv
ciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQor
ICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAg
ICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIAorICAgIGtp
bGxCbG9jayhibG9jayk7Cit9CisKK3ZvaWQgR3JhcGg6OmtpbGxVbnJlYWNoYWJsZUJsb2Nrcygp
Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRo
aXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2Nr
KTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGg6OnJlc2V0RXhpdFN0YXRlcygpCiB7CiAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGtp
bGxCbG9jayhiYXNpY0Jsb2NrLT5pbmRleCk7CiAgICAgfQogICAgIAorICAgIHZvaWQga2lsbEJs
b2NrQW5kSXRzQ29udGVudHMoQmFzaWNCbG9jayopOworICAgIAorICAgIHZvaWQga2lsbFVucmVh
Y2hhYmxlQmxvY2tzKCk7CisgICAgCiAgICAgYm9vbCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2Rl
KiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgJiYgaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpKTsKQEAg
LTY5OCw2ICs3MDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBI
YXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBl
ZDsKICAgICBCaXRWZWN0b3IgbV9wcmVzZXJ2ZWRWYXJzOworICAgIEJpdFZlY3RvciBtX2xhenlW
YXJzOwogICAgIERvbWluYXRvcnMgbV9kb21pbmF0b3JzOwogICAgIE5hdHVyYWxMb29wcyBtX25h
dHVyYWxMb29wczsKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw3IEBAIHZvaWQg
SW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgIHJvb3QtPmNmYUhhc1Zpc2l0
ZWQgPSBmYWxzZTsKICAgICByb290LT5jZmFGb3VuZENvbnN0YW50cyA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoaSkuY2xlYXIo
KTsKICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICAgICAgcm9v
dC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMTI5LDggKzEzMCw2IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRp
YWxpemUoKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldFR5
cGUoU3BlY0NlbGwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOwotICAgICAgICAKLSAgICAgICAgcm9vdC0+dmFsdWVz
QXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAg
ICBOb2RlKiBub2RlID0gcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIEpJVENvZGU6
OkpJVENvZGUoKQpAQCAtNTksNiArNjEsMTQ1IEBAIHZvaWQgSklUQ29kZTo6c2hyaW5rVG9GaXQo
KQogICAgIHZhcmlhYmxlRXZlbnRTdHJlYW0uc2hyaW5rVG9GaXQoKTsKIH0KIAordm9pZCBKSVRD
b2RlOjpyZWNvbnN0cnVjdCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiYgcmVzdWx0KQoreworICAgIHZhcmlhYmxlRXZlbnRTdHJlYW0ucmVjb25zdHJ1Y3QoCisg
ICAgICAgIGNvZGVCbG9jaywgY29kZU9yaWdpbiwgbWluaWZpZWRERkcsIHN0cmVhbUluZGV4LCBy
ZXN1bHQpOworfQorCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0KAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsCisgICAgT3BlcmFuZHM8SlNWYWx1ZT4mIHJlc3VsdCkKK3sKKyAgICBP
cGVyYW5kczxWYWx1ZVJlY292ZXJ5PiByZWNvdmVyaWVzOworICAgIHJlY29uc3RydWN0KGNvZGVC
bG9jaywgY29kZU9yaWdpbiwgc3RyZWFtSW5kZXgsIHJlY292ZXJpZXMpOworICAgIAorICAgIHJl
c3VsdCA9IE9wZXJhbmRzPEpTVmFsdWU+KE9wZXJhbmRzTGlrZSwgcmVjb3Zlcmllcyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IHJlc3VsdC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaW50IG9wZXJh
bmQgPSByZXN1bHQub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYgKG9w
ZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1l
bnQob3BlcmFuZCkKKyAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUKKyAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkg
PT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBh
IGNvbnN0cnVjdG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdp
bGwKKyAgICAgICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIg
d2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMsCisgICAgICAgICAgICAvLyBidXQg
aXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNl
cXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUg
YnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgIHJlc3VsdFtpXSA9IGpz
VW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSA9IHJlY292ZXJpZXNbaV07CisgICAgICAg
IEpTVmFsdWUgdmFsdWU7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
KyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrOgorICAgICAgICBjYXNlIEFscmVhZHlJbkpT
U3RhY2tBc1VuYm94ZWRDZWxsOgorICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1VuYm94
ZWRCb29sZWFuOgorICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5yKG9wZXJhbmQpLmpzVmFsdWUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1Vu
Ym94ZWRJbnQzMjoKKyAgICAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoZXhlYy0+cihvcGVyYW5k
KS51bmJveGVkSW50MzIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbHJl
YWR5SW5KU1N0YWNrQXNVbmJveGVkRG91YmxlOgorICAgICAgICAgICAgdmFsdWUgPSBqc0RvdWJs
ZU51bWJlcihleGVjLT5yKG9wZXJhbmQpLnVuYm94ZWREb3VibGUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIHZhbHVlID0gcmVjb3Zl
cnkuY29uc3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJlc3VsdFtpXSA9IHZhbHVlOworICAgIH0KK30KKworI2lm
IEVOQUJMRShGVExfSklUKQorYm9vbCBKSVRDb2RlOjpjaGVja0lmT3B0aW1pemF0aW9uVGhyZXNo
b2xkUmVhY2hlZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICByZXR1cm4gdGllclVwQ291bnRl
ci5jaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lv
bigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRD
b2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRh
dGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcgbmV4dCBpbnZvY2F0aW9uLlxuIik7
CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJlc2hvbGQoMCwgY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKSk7Cit9CisKK3ZvaWQgSklUQ29kZTo6ZG9udE9wdGltaXplQW55dGltZVNvb24o
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAg
ICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBOb3QgRlRMLW9wdGltaXppbmcgYW55dGltZSBz
b29uLlxuIik7CisgICAgdGllclVwQ291bnRlci5kZWZlckluZGVmaW5pdGVseSgpOworfQorCit2
b2lkIEpJVENvZGU6Om9wdGltaXplQWZ0ZXJXYXJtVXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2Nr
LCAiOiBGVEwtb3B0aW1pemluZyBhZnRlciB3YXJtLXVwLlxuIik7CisgICAgQ29kZUJsb2NrKiBi
YXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1
ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLAorICAgICAg
ICBiYXNlbGluZSk7Cit9CisKK3ZvaWQgSklUQ29kZTo6b3B0aW1pemVTb29uKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFM
b2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGltaXppbmcgc29vbi5cbiIpOworICAgIENvZGVCbG9j
ayogYmFzZWxpbmUgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENv
dW50ZXIuc2V0TmV3VGhyZXNob2xkKAorICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVy
VmFsdWUoT3B0aW9uczo6dGhyZXNob2xkRm9yRlRMT3B0aW1pemVTb29uKCkpLAorICAgICAgICBi
YXNlbGluZSk7Cit9CisKK3ZvaWQgSklUQ29kZTo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZvcmNpbmcgc2xvdyBwYXRo
IGNvbmN1cnJlbnRseSBmb3IgRlRMIGVudHJ5LlxuIik7CisgICAgdGllclVwQ291bnRlci5mb3Jj
ZVNsb3dQYXRoQ29uY3VycmVudGx5KCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6c2V0T3B0aW1pemF0
aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsK
KyAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKKyAgICAgICAgb3B0aW1pemVOZXh0SW52
b2NhdGlvbihjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlv
bkZhaWxlZDoKKyAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZUJsb2NrKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24gPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVk
OgorICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CisgICAgICAgIC8vIFRoaXMgaXMg
d2VpcmQgLSBpdCB3aWxsIG9ubHkgaGFwcGVuIGluIGNhc2VzIHdoZW4gdGhlIERGRyBjb2RlIGJs
b2NrIChpLmUuCisgICAgICAgIC8vIHRoZSBjb2RlIGJsb2NrIHRoYXQgdGhpcyBKSVRDb2RlIGJl
bG9uZ3MgdG8pIGlzIGFsc28gaW52YWxpZGF0ZWQuIFNvIGl0CisgICAgICAgIC8vIGRvZXNuJ3Qg
cmVhbGx5IG1hdHRlciB3aGF0IHdlIGRvLiBCdXQsIHdlIGRvIHRoZSByaWdodCB0aGluZyBhbnl3
YXkuIE5vdGUKKyAgICAgICAgLy8gdGhhdCB1cyBjb3VudGluZyB0aGUgcmVvcHRpbWl6YXRpb24g
YWN0dWFsbHkgbWVhbnMgdGhhdCB3ZSBtaWdodCBjb3VudCBpdAorICAgICAgICAvLyB0d2ljZS4g
QnV0IHRoYXQncyBnZW5lcmFsbHkgT0suIEl0J3MgYmV0dGVyIHRvIG92ZXJjb3VudCByZW9wdGlt
aXphdGlvbnMKKyAgICAgICAgLy8gdGhhbiBpdCBpcyB0byB1bmRlcmNvdW50IHRoZW0uCisgICAg
ICAgIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCktPmNvdW50UmVvcHRpbWl6YXRpb24oKTsK
KyAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
LmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTMgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdD
b21tb25EYXRhLmgiCiAjaW5jbHVkZSAiREZHTWluaWZpZWRHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiSklUQ29kZS5oIgogI2luY2x1ZGUgIkp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCIKICNp
bmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CkBAIC05Myw4ICs5NSwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgcmVjb25zdHJ1
Y3QoCisgICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4
LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgcmVzdWx0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlz
IG9ubHkgYXBwbGljYWJsZSBpZiB3ZSdyZSBhdCBhIHBvaW50IHdoZXJlIGFsbCB2YWx1ZXMgYXJl
IHNwaWxsZWQgdG8gdGhlCisgICAgLy8gc3RhY2suIEN1cnJlbnRseSwgaXQgYWxzbyBoYXMgdGhl
IHJlc3RyaWN0aW9uIHRoYXQgdGhlIHZhbHVlcyBtdXN0IGJlIGluIHRoZWlyCisgICAgLy8gYnl0
ZWNvZGUtZGVzaWduYXRlZCBzdGFjayBzbG90cy4KKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0
cmVhbUluZGV4LAorICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPiYgcmVzdWx0KTsKKworI2lmIEVO
QUJMRShGVExfSklUKQorICAgIC8vIE5CLiBBbGwgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVC
bG9jayogYmVjYXVzZSB0aGV5IG1heSB3YW50IHRvIHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxv
Z2ljIGFib3V0IHNjYWxpbmcgdGhyZXNob2xkcy4gSXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9j
ay4KKyAgICAKKyAgICBib29sIGNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENv
ZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsK
KyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayopOworICAgIHZvaWQg
b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqKTsKKyAgICB2b2lkIG9wdGltaXplU29vbihD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIGZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50
bHkoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9u
Q29tcGlsYXRpb25SZXN1bHQoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorICAgIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAg
ICAgCisgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxs
b3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCiAKQEAgLTEwNiw2ICsxMzEsMTAg
QEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LCAxLCAwPiB3YXRjaHBvaW50czsKICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFi
bGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRERkc7CisjaWYg
RU5BQkxFKEZUTF9KSVQpCisgICAgRXhlY3V0aW9uQ291bnRlciB0aWVyVXBDb3VudGVyOworICAg
IFJlZlB0cjxDb2RlQmxvY2s+IG9zckVudHJ5QmxvY2s7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDI3ICs0OCwzMSBAQCBKSVRGaW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQog
CiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIGZpbmFsaXplQ29tbW9uKCk7
Ci0gICAgCiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZp
bmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5z
ZXRKSVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIAorICAg
IGZpbmFsaXplQ29tbW9uKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSklU
RmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKLSAgICBmaW5hbGl6ZUNvbW1vbigpOwot
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IG1fbGlua0J1
ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6
ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7
CiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUsIHdpdGhBcml0eUNo
ZWNrKTsKICAgICAKKyAgICBmaW5hbGl6ZUNvbW1vbigpOworICAgIAogICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24oKQogeworI2lmIEVOQUJM
RShGVExfSklUKQorICAgIG1faml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29k
ZUJsb2NrLmdldCgpKTsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICAKICAgICBpZiAo
bV9wbGFuLmNvbXBpbGF0aW9uKQogICAgICAgICBtX3BsYW4udm0ubV9wZXJCeXRlY29kZVByb2Zp
bGVyLT5hZGRDb21waWxhdGlvbihtX3BsYW4uY29tcGlsYXRpb24pOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNywzMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK0Jh
c2ljQmxvY2sqIGNyZWF0ZVByZUhlYWRlcihHcmFwaCYgZ3JhcGgsIEJsb2NrSW5zZXJ0aW9uU2V0
JiBpbnNlcnRpb25TZXQsIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEJhc2ljQmxvY2sqIHBy
ZUhlYWRlciA9IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUoYmxvY2spOworICAgIHByZUhlYWRl
ci0+YXBwZW5kTm9kZSgKKyAgICAgICAgZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBibG9jay0+YXQo
MCktPmNvZGVPcmlnaW4sIE9wSW5mbyhibG9jaykpOworICAgIAorICAgIGZvciAodW5zaWduZWQg
cHJlZGVjZXNzb3JJbmRleCA9IDA7IHByZWRlY2Vzc29ySW5kZXggPCBibG9jay0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsrKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1twcmVkZWNlc3NvckluZGV4XTsKKyAgICAg
ICAgaWYgKGdyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2ssIHByZWRlY2Vzc29yKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzW3ByZWRl
Y2Vzc29ySW5kZXgtLV0gPSBibG9jay0+cHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgYmxv
Y2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgc3Vj
Y2Vzc29ySW5kZXggPSBwcmVkZWNlc3Nvci0+bnVtU3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRl
eC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvciA9IHByZWRlY2Vzc29y
LT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvciAh
PSBibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN1Y2Nlc3Nv
ciA9IHByZUhlYWRlcjsKKyAgICAgICAgICAgIHByZUhlYWRlci0+cHJlZGVjZXNzb3JzLmFwcGVu
ZChwcmVkZWNlc3Nvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYmxvY2stPnByZWRl
Y2Vzc29ycy5hcHBlbmQocHJlSGVhZGVyKTsKKyAgICByZXR1cm4gcHJlSGVhZGVyOworfQorCiBj
bGFzcyBMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6
CiAgICAgTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQpAQCAtNzAsMjYg
Kzk1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFuZWVkc05ld1ByZUhlYWRlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNC
bG9jayogcHJlSGVhZGVyID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKGxvb3AuaGVhZGVy
KCkpOwotICAgICAgICAgICAgcHJlSGVhZGVyLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBsb29wLmhlYWRlcigpLT5hdCgwKS0+Y29kZU9yaWdp
biwgT3BJbmZvKGxvb3AuaGVhZGVyKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwcmVkZWNlc3NvckluZGV4ID0gMDsgcHJlZGVjZXNzb3JJbmRleCA8IGxvb3Au
aGVhZGVyKCktPnByZWRlY2Vzc29ycy5zaXplKCk7IHByZWRlY2Vzc29ySW5kZXgrKykgewotICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gbG9vcC5oZWFkZXIoKS0+cHJl
ZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZG9taW5hdG9ycy5kb21pbmF0ZXMobG9vcC5oZWFkZXIoKSwgcHJlZGVjZXNzb3IpKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBsb29wLmhlYWRlcigp
LT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRleC0tXSA9IGxvb3AuaGVhZGVyKCktPnByZWRl
Y2Vzc29ycy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNz
b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJ
bmRleCA9IHByZWRlY2Vzc29yLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgPSBwcmVkZWNlc3Nv
ci0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN1
Y2Nlc3NvciAhPSBsb29wLmhlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvciA9IHByZUhlYWRlcjsKLSAgICAgICAg
ICAgICAgICAgICAgcHJlSGVhZGVyLT5wcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycy5hcHBlbmQocHJlSGVhZGVyKTsKKyAgICAg
ICAgICAgIGNyZWF0ZVByZUhlYWRlcihtX2dyYXBoLCBtX2luc2VydGlvblNldCwgbG9vcC5oZWFk
ZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNl
dC5leGVjdXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVI
ZWFkZXJDcmVhdGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oCShyZXZpc2lvbiAxNTQ5NjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICszMiwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwogY2xhc3MgR3JhcGg7
CitzdHJ1Y3QgQmFzaWNCbG9jazsKIAogLy8gSW5zZXJ0cyBkdW1teSBiYXNpYyBibG9ja3MgYmVm
b3JlIGFueSBsb29wIGhlYWRlcnMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUKIC8vIGEgc2luZ2xl
IG5vbi1sb29wIHByZWRlY2Vzc29yLgogCiBib29sIHBlcmZvcm1Mb29wUHJlSGVhZGVyQ3JlYXRp
b24oR3JhcGgmKTsKIAorLy8gQ3JlYXRlcyBhIG5ldyBiYXNpYyBibG9jayAoYSBwcmUtaGVhZGVy
KSB0aGF0IGp1bXBzIHRvIHRoZSBnaXZlbiBibG9jay4gQWxsCisvLyBwcmVkZWNlc3NvcnMgb2Yg
dGhlIGdpdmVuIGJsb2NrIHRoYXQgYXJlbid0IGRvbWluYXRlZCBieSBpdCBhcmUgcmVyb3V0ZWQg
dG8KKy8vIHRoZSBwcmUtaGVhZGVyLgorLy8KKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRl
cm5hbGx5IGFuZCBpdCdzIHVzZWQgaW4gYSBzdXJnaWNhbCBmYXNoaW9uIGJ5CisvLyBPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS4KKy8vCisvLyBOb3RlIHRoYXQgZXhlY3V0aW5nIHRoaXMgZnVu
Y3Rpb24gcmVxdWlyZXMgaGF2aW5nIGFuIGludGFjdCBkb21pbmF0b3JzCisvLyBhbmFseXNpcy4g
WW91IHNob3VsZCBydW4gdGhhdCBhbmFseXNpcyBiZWZvcmUgZG9pbmcgZGFtYWdlIHRvIHRoZSBD
RkcsIGV2ZW4KKy8vIGlmIHNhaWQgZGFtYWdlIGlzIGRvbmUgYmVmb3JlIHlvdSBjYWxsIHRoaXMu
CitCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFkZXIoR3JhcGgmLCBCbG9ja0luc2VydGlvblNldCYs
IEJhc2ljQmxvY2sqKTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyNyw5ICs1MjcsMjAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxvY2FsKCk7CiAgICAgfQogICAgIAorICAgIGJv
b2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAg
ICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0g
R2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIEFTU0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihtX29wSW5mbyk7CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tTG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlRG9lc05vdEV4aXQpIFwKICAgICBcCisgICAgLyogSGludCB0aGF0IHRoaXMgaXMgd2hlcmUg
Ynl0ZWNvZGUgdGhpbmtzIGlzIGEgZ29vZCBwbGFjZSB0byBPU1IuIE5vdGUgdGhhdCB0aGlzICov
XAorICAgIC8qIHdpbGwgZXhpc3QgZXZlbiBpbiBpbmxpbmVkIGxvb3BzLiBUaGlzIGhhcyBubyBl
eGVjdXRpb24gc2VtYW50aWNzIGJ1dCBpdCBtdXN0ICovXAorICAgIC8qIHN1cnZpdmUgYWxsIERD
RS4gV2UgdHJlYXQgdGhpcyBhcyBiZWluZyBhIGNhbi1leGl0IGJlY2F1c2UgdGllci11cCB0byBG
VEwgbWF5ICovXAorICAgIC8qIHdhbnQgYWxsIHN0YXRlLiAqL1wKKyAgICBtYWNybyhMb29wSGlu
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIFwKKyAgICAvKiBTcGVjaWFsIG5vZGUgZm9yIE9T
UiBlbnRyeSBpbnRvIHRoZSBGVEwuIEluZGljYXRlcyB0aGF0IHdlJ3JlIGxvYWRpbmcgYSBsb2Nh
bCAqL1wKKyAgICAvKiB2YXJpYWJsZSBmcm9tIHRoZSBzY3JhdGNoIGJ1ZmZlci4gKi9cCisgICAg
bWFjcm8oRXh0cmFjdE9TUkVudHJ5TG9jYWwsIE5vZGVSZXN1bHRKUykgXAorICAgIFwKKyAgICAv
KiBUaWVyLXVwIGNoZWNrcyBmcm9tIHRoZSBERkcgdG8gdGhlIEZUTC4gKi9cCisgICAgbWFjcm8o
Q2hlY2tUaWVyVXBJbkxvb3AsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1Rp
ZXJVcEFuZE9TUkVudGVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ2hlY2tUaWVy
VXBBdFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIFwKICAgICAvKiBHZXQgdGhlIHZh
bHVlIG9mIGEgbG9jYWwgdmFyaWFibGUsIHdpdGhvdXQgbGlua2luZyBpbnRvIHRoZSBWYXJpYWJs
ZUFjY2Vzc0RhdGEgKi9cCiAgICAgLyogbmV0d29yay4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciB2
YXJpYWJsZSBhY2Nlc3NlcyB3aG9zZSBwcmVkaWN0aW9ucyBvcmlnaW5hdGVkICovXAogICAgIC8q
IGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbG9jYWwgYWNjZXNzLCBhbmQgdGh1cyBoYWQgdGhl
aXIgb3duIHByb2ZpbGluZy4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDExICs0NywzNCBAQCB2
b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT1NSIGlu
ICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKKyAgICAg
ICAgICAgICJERkcgT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwg
KmNvZGVCbG9jaywKICAgICAgICAgICAgICIgZnJvbSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4i
KTsKICAgICB9CiAgICAgCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgaWYgKGNvZGVC
bG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICAvLyBXaGVuIHdp
bGwgdGhpcyBoYXBwZW4/IFdlIGNvdWxkIGhhdmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIC0g
QW4gZXhpdCBmcm9tIHRoZSBGVEwgSklUIGludG8gdGhlIGJhc2VsaW5lIEpJVCBmb2xsb3dlZCBi
eSBhbiBhdHRlbXB0CisgICAgICAgIC8vICAgdG8gcmVlbnRlci4gV2UncmUgZmluZSB3aXRoIGFs
bG93aW5nIHRoaXMgdG8gZmFpbC4gSWYgaXQgaGFwcGVucworICAgICAgICAvLyAgIGVub3VnaCB3
ZSdsbCBqdXN0IHJlb3B0aW1pemUuIEl0IGJhc2ljYWxseSBtZWFucyB0aGF0IHRoZSBPU1IgZXhp
dCBjb3N0CisgICAgICAgIC8vICAgdXMgZGVhcmx5IGFuZCBzbyByZW9wdGltaXppbmcgaXMgdGhl
IHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgICAgICAvLworICAgICAgICAvLyAtIFdlIGhhdmUgcmVj
dXJzaXZlIGNvZGUgd2l0aCBob3QgbG9vcHMuIENvbnNpZGVyIHRoYXQgZm9vIGhhcyBhIGhvdCBs
b29wCisgICAgICAgIC8vICAgdGhhdCBjYWxscyBpdHNlbGYuIFdlIGhhdmUgdHdvIGZvbydzIG9u
IHRoZSBzdGFjaywgbGV0cyBjYWxsIHRoZW0gZm9vMQorICAgICAgICAvLyAgIGFuZCBmb28yLCB3
aXRoIGZvbzEgaGF2aW5nIGNhbGxlZCBmb28yIGZyb20gZm9vJ3MgaG90IGxvb3AuIGZvbzIgZ2V0
cworICAgICAgICAvLyAgIG9wdGltaXplZCBhbGwgdGhlIHdheSBpbnRvIHRoZSBGVEwuIFRoZW4g
aXQgcmV0dXJucyBpbnRvIGZvbzEsIGFuZCB0aGVuCisgICAgICAgIC8vICAgZm9vMSB3YW50cyB0
byBnZXQgb3B0aW1pemVkLiBJdCBtaWdodCByZWFjaCB0aGlzIGNvbmNsdXNpb24gZnJvbSBpdHMK
KyAgICAgICAgLy8gICBob3QgbG9vcCBhbmQgYXR0ZW1wdCB0byBPU1IgZW50ZXIuIEFuZCB3ZSds
bCB0ZWxsIGl0IHRoYXQgaXQgY2FuJ3QuIEl0CisgICAgICAgIC8vICAgbWlnaHQgYmUgd29ydGgg
YWRkcmVzc2luZyB0aGlzIGNhc2UsIGJ1dCBJIGp1c3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAg
ICAgICAgLy8gICBiZSBzdXBlciByYXJlLiBGb3Igbm93LCBpZiBpdCBkb2VzIGhhcHBlbiwgaXQn
bGwgY2F1c2Ugc29tZSBjb21waWxhdGlvbgorICAgICAgICAvLyAgIHRocmFzaGluZy4KKyAgICAg
ICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJnZXQgY29kZSBibG9jayBpcyBub3Qg
REZHLlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAgICBPU1JFbnRyeURh
dGEqIGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5vc3JFbnRyeURhdGFGb3JC
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIGlmICghZW50cnkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50
cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIE9TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIk9T
UiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0g
RlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVj
b2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgICAgICAKKyAgICAgICAgLy8gTmVlZGVkIGJ5IGNy
ZWF0ZVByZUhlYWRlcigpLgorICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZO
ZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
ID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2s7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgTm9kZSogZmlyc3ROb2Rl
ID0gYmxvY2stPmF0KDApOworICAgICAgICAgICAgaWYgKGZpcnN0Tm9kZS0+b3AoKSA9PSBMb29w
SGludAorICAgICAgICAgICAgICAgICYmIGZpcnN0Tm9kZS0+Y29kZU9yaWdpbiA9PSBDb2RlT3Jp
Z2luKGJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYmxvY2s7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIXRhcmdldCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHRlcnJpYmxlIG91dGNv
bWUuIEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4gYnV0IGl0IG1pZ2h0CisgICAgICAgICAgICAv
LyBoYXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZlbmQgYWdhaW5zdCBpdC4gSWYgaXQgaGFwcGVu
cywgdGhlbiB0aGlzCisgICAgICAgICAgICAvLyBjb21waWxhdGlvbiBpcyBhIGZhaWx1cmUuCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJs
b2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAg
IEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5zZXJ0KDApOworICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5jb2RlT3JpZ2luOworICAgICAg
ICAKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2VsaW5lLT5u
dW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIE5vZGUqIG9sZE5vZGUg
PSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAg
ICBpZiAoIW9sZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAvLyBKdXN0IGZvciBzYW5pdHksIGFs
d2F5cyBoYXZlIGEgU2V0QXJndW1lbnQgZXZlbiBpZiBpdCdzIG5vdCBuZWVkZWQuCisgICAgICAg
ICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldEFyZ3VtZW50LCBjb2RlT3JpZ2lu
LAorICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkp
OworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0gPSBub2RlOworICAg
ICAgICB9CisgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKKyAgICAgICAgICAgIE5vZGUqIHByZXZpb3Vz
SGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAg
IGlmICghcHJldmlvdXNIZWFkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+YXBwZW5kTm9k
ZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBFeHRy
YWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcEluZm8odmFy
aWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcElu
Zm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1w
LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGNyZWF0ZVByZUhlYWRlcihtX2dyYXBo
LCBpbnNlcnRpb25TZXQsIHRhcmdldCkpKTsKKyAgICAgICAgCisgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKCk7CisgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAg
ICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtT1NSRW50cnlwb2ludENyZWF0aW9uKEdyYXBoJiBn
cmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9TUiBFbnRy
eXBvaW50IENyZWF0aW9uIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPE9TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2Vf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVGhp
cyBwaGFzZSBpcyBvbmx5IGZvciBjb21waWxhdGlvbiBwaXBlbGluZXMgdGhhdCBnbyB0aHJvdWdo
IFNTQSwgYW5kIHRoYXQKKy8vIGRvIGEgc3BlY2lhbGl6ZWQgT1NSIGVudHJ5IGNvbXBpbGUuIEN1
cnJlbnRseSB0aGF0IG1lYW5zIEZUTC4KKy8vCisvLyBDcmVhdGVzIGFuIE9TUiBlbnRyeXBvaW50
IHRoYXQgZXN0YWJsaXNoZXMgYWxsIGFyZ3VtZW50IGFuZCBsb2NhbCB2YXJpYWJsZQorLy8gdmFs
dWVzLiBUaGlzIGVudHJ5cG9pbnQgb25seSB3b3JrcyBmb3IgdGhlIFBsYW46Om9zckVudHJ5Qnl0
ZWNvZGVJbmRleC4KKy8vIFVubGlrZSBvcmRpbmFyeSBPU1IgZW50cnkgaW50byB0aGUgREZHLCB0
aGlzIGZvcmNlcyBhbGwgdmFyaWFibGVzIHNsdXJwZWQKKy8vIGluIHRocm91Z2ggT1NSIGVudHJ5
IHRvIGFwcGVhciBUT1AgdG8gdGhlIENGQS4gSGVuY2UgdGhpcyBwaGFzZSBtdXN0IGJlIHJ1bgor
Ly8gZWFybHkgLSBiZWZvcmUgZG9pbmcgYW55IENGQS4gQnV0IHRoaXMgYWxzbyBkb2VzIHNvbWUg
YWRkaXRpb25hbCBoYWNrcyB0aGF0CisvLyByZXF1aXJlIHRoaXMgdG8gcnVuIGJlZm9yZSB1bmlm
aWNhdGlvbi4KKworYm9vbCBwZXJmb3JtT1NSRW50cnlwb2ludENyZWF0aW9uKEdyYXBoJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NDk2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDkgKzMxLDE1IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgi
CisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1
ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKKyNpbmNsdWRlICJERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJERkdXb3Jr
bGlzdC5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorI2luY2x1ZGUgIkZU
TE9TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUg
IkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC0yMDE1LDYgKzIw
MjEsMTg2IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW8KICAgICBj
b2RlQmxvY2stPnJlb3B0aW1pemUoKTsKIH0KIAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBE
RkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBKSVRDb2RlKiBqaXRDb2Rl
ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIAorICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ss
ICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAg
ICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRp
b24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgaW5k
ZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWlsdXJlLlxuIik7CisgICAgICAg
IGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2RlLT5jaGVja0lmT3B0aW1pemF0aW9u
VGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9vc2luZyBub3QgdG8gRlRMLW9wdGlt
aXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKFdvcmtsaXN0
KiB3b3JrbGlzdCA9IHZtLT53b3JrbGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRl
ID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgKnZt
LCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7
CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247
CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgewor
ICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRp
b25SZXN1bHQoCisgICAgICAgICAgICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGlt
aXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgLy8gVGhhdCdzIGdyZWF0LCB3ZSd2ZSBjb21w
aWxlZCB0aGUgY29kZSAtIG5leHQgdGltZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24sCisgICAgICAg
IC8vIHdlJ2xsIGVudGVyIHRoYXQgcmVwbGFjZW1lbnQuCisgICAgICAgIGppdENvZGUtPm9wdGlt
aXplU29vbihjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
ICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2UgZmluaXNoZWQgY29tcGlsaW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGlu
IHRoYXQgY2FzZSB0aGUKKyAgICAgICAgLy8gdGhyZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3By
aWF0ZWx5LgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAg
ZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQg
ZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgorICAgIGNv
bXBpbGUoCisgICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBG
VExNb2RlLCBVSU5UX01BWCwgT3BlcmFuZHM8SlNWYWx1ZT4oKSwKKyAgICAgICAgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spLCB2bS0+ZW5zdXJlV29y
a2xpc3QoKSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVh
bUluZGV4KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAg
ICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIAor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAg
ICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1
dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIp
OworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9k
aWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWls
dXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVC
bG9jayk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUt
PmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29z
aW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0
YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2bS0+d29ya2xpc3QuZ2V0KCkpIHsK
KyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNG
b3JWTSgKKyAgICAgICAgICAgICp2bSwgQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGlu
ZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdv
cmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgCisgICAgaWYgKHdvcmtsaXN0
U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICBBU1NFUlQoIWppdENvZGUt
Pm9zckVudHJ5QmxvY2spOworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hv
bGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgICAgICBjb2RlQmxvY2ssIENvbXBp
bGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYg
KENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0KCkpIHsK
KyAgICAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSgKKyAgICAg
ICAgICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGVudHJ5QmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHN0
cmVhbUluZGV4KSkgeworICAgICAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9j
ayk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJlc3MpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogZW50cnlD
b2RlID0gZW50cnlCbG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpOworICAgICAgICBl
bnRyeUNvZGUtPmNvdW50RW50cnlGYWlsdXJlKCk7CisgICAgICAgIGlmIChlbnRyeUNvZGUtPmVu
dHJ5RmFpbHVyZUNvdW50KCkgPAorICAgICAgICAgICAgT3B0aW9uczo6ZnRsT1NSRW50cnlGYWls
dXJlQ291bnRGb3JSZW9wdGltaXphdGlvbigpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE9TUiBlbnRyeSBmYWlsZWQuIE9oIG5v
ISBUaGlzIGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHJldHJ5LiBXZSByZXRyeQorICAgICAgICAv
LyB3aXRob3V0IGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIHdlIG9ubHkgZG8gdGhpcyBmb3IgdGhl
IGVudHJ5IGNvZGUgYmxvY2suCisgICAgICAgIGppdENvZGUtPm9zckVudHJ5QmxvY2suY2xlYXIo
KTsKKyAgICAgICAgCisgICAgICAgIGppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJs
b2NrKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0
YXRlID09IFdvcmtsaXN0OjpDb21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
Y29tcGlsYXRpb24gZmFpbGVkIGFuZCB3ZSBhbHJlYWR5IHNldCB0aGUgdGhyZXNob2xkcy4KKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNv
ZGUgYmxvY2sgIiwgKmNvZGVCbG9jaywgIiB3YXMgY29tcGlsZWQgYnV0IGl0IGRvZXNuJ3QgaGF2
ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgLy8gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIHRvIHRyaWdnZXIgYSBm
b3ItZW50cnkgY29tcGlsZS4KKyAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVz
OworICAgIGppdENvZGUtPnJlY29uc3RydWN0KAorICAgICAgICBleGVjLCBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKTsK
KyAgICBDb21waWxhdGlvblJlc3VsdCBmb3JFbnRyeVJlc3VsdCA9IERGRzo6Y29tcGlsZSgKKyAg
ICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTEZvck9TUkVu
dHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayks
CisgICAgICAgIHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKKyAgICAKKyAgICAvLyBCdXQgd2UgYWxz
byB3YW50IHRvIHRyaWdnZXIgYSByZXBsYWNlbWVudCBjb21waWxlLiBPZiBjb3Vyc2UsIHdlIGRv
bid0IHdhbnQgdG8KKyAgICAvLyB0cmlnZ2VyIGl0IGlmIHdlIGRvbid0IG5lZWQgdG8uIE5vdGUg
dGhhdCB0aGlzIGlzIGtpbmQgb2Ygd2VpcmQgYmVjYXVzZSB3ZSBtaWdodAorICAgIC8vIGhhdmUg
anVzdCBmaW5pc2hlZCBhbiBGVEwgY29tcGlsZSBhbmQgdGhhdCBjb21waWxlIGZhaWxlZCBvciB3
YXMgaW52YWxpZGF0ZWQuCisgICAgLy8gQnV0IHRoaXMgc2VlbXMgdW5jb21tb24gZW5vdWdoIHRo
YXQgd2Ugc29ydCBvZiBkb24ndCBjYXJlLiBJdCdzIGNlcnRhaW5seSBzb3VuZAorICAgIC8vIHRv
IGZpcmUgb2ZmIGFub3RoZXIgY29tcGlsZSByaWdodCBub3cgc28gbG9uZyBhcyB3ZSdyZSBub3Qg
YWxyZWFkeSBjb21waWxpbmcgYW5kCisgICAgLy8gd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIG9w
dGltaXplZCByZXBsYWNlbWVudC4gTm90ZSwgd2UgZG9uJ3QgZG8gdGhpcyBmb3IKKyAgICAvLyBv
YnZpb3VzbHkgYmFkIGNhc2VzIGxpa2UgZ2xvYmFsIGNvZGUsIHdoZXJlIHdlIGtub3cgdGhhdCB0
aGVyZSBpcyBhIHNsaW0gY2hhbmNlCisgICAgLy8gb2YgdGhpcyBjb2RlIGJlaW5nIGludm9rZWQg
ZXZlciBhZ2Fpbi4KKyAgICBDb21waWxhdGlvbktleSBrZXlGb3JSZXBsYWNlbWVudChjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKTsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2Rl
VHlwZSgpICE9IEdsb2JhbENvZGUKKyAgICAgICAgJiYgIWNvZGVCbG9jay0+aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoKQorICAgICAgICAmJiAoIXZtLT53b3JrbGlzdC5nZXQoKQorICAgICAgICAg
ICAgfHwgdm0tPndvcmtsaXN0LT5jb21waWxhdGlvblN0YXRlKGtleUZvclJlcGxhY2VtZW50KSA9
PSBXb3JrbGlzdDo6Tm90S25vd24pKSB7CisgICAgICAgIGNvbXBpbGUoCisgICAgICAgICAgICAq
dm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMTW9kZSwgVUlOVF9NQVgs
IE9wZXJhbmRzPEpTVmFsdWU+KCksCisgICAgICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRo
ZSBmb3ItZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1Y2NlZWRlZC4gSW4gdGhhdCBjYXNlIE9TUgor
ICAgIC8vIGVudHJ5IHdpbGwgc3VjY2VlZCB1bmxlc3Mgd2UgcmFuIG91dCBvZiBzdGFjay4gSXQn
cyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8uCisgICAgLy8gV2Ugc2lnbmFsIHRvIHRyeSBh
Z2FpbiBhZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KKyAgICB2b2lkKiBhZGRyZXNzID0g
RlRMOjpwcmVwYXJlT1NSRW50cnkoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZS0+
b3NyRW50cnlCbG9jay5nZXQoKSwgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgIGlm
IChhZGRyZXNzKQorICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAg
ICBlbHNlCisgICAgICAgIGppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJlc3MpOworfQorI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCiB9IC8vIGV4dGVybiAiQyIKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBAIHR5cGVkZWYgc2l6ZV90IERGR19P
UEVSQVRJT04gKCpTX0RGR09wZXIKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpTX0RG
R09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXpl
X3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04g
KCpTX0RGR09wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiB2b2lkIERG
R19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pEKShFeGVjU3RhdGUqLCBKU09iamVjdCos
IGludDMyX3QsIGRvdWJsZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VPWkopKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFs
dWUpOwogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7CkBAIC0xMjYsNiArMTI3LDcgQEAgdHlwZWRlZiBjaGFyKiBERkdf
T1BFUkFUSU9OICgqUF9ERkdPcGVyYQogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3Qp
OwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0U1MpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25f
RVpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgU3RyaW5nSW1wbCog
REZHX09QRVJBVElPTiAoKklfREZHT3BlcmF0aW9uX0VKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
Kik7CiB0eXBlZGVmIEpTU3RyaW5nKiBERkdfT1BFUkFUSU9OICgqSnNzX0RGR09wZXJhdGlvbl9F
WikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
U3RyaW5nRnJvbUNoYXJDb2RlKEV4ZWNTdGF0ZSosIGludDMyX3QpICBXVEZfSU5URVJOQUw7IApA
QCAtMzAyLDYgKzMwNCwxMSBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25Qcmlu
dFNwCiAKIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJs
b2NrKikgV1RGX0lOVEVSTkFMOwogCisjaWYgRU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19PUEVS
QVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CitjaGFyKiBE
RkdfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdyhFeGVjU3RhdGUqLCBpbnQzMl90IGJ5dGVj
b2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5kZXgpIFdURl9JTlRFUk5BTDsKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwogfSAvLyBleHRlcm4gIkMiCiAKIGlubGluZSBQX0RGR09wZXJhdGlv
bl9FU3RaIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUoVHlwZWRBcnJheVR5
cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsMTMgKzQ2LDE2IEBACiAjaW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5jbHVkZSAi
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmgiCisjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC04MSwxMyArODQsMTIgQEAgc3Rh
dGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncgogCiBQbGFuOjpQbGFuKAogICAg
IFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBt
b2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbnVtVmFy
c1dpdGhWYWx1ZXMpCisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBP
cGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcykKICAgICA6IHZtKCpwYXNzZWRDb2Rl
QmxvY2stPnZtKCkpCiAgICAgLCBjb2RlQmxvY2socGFzc2VkQ29kZUJsb2NrKQogICAgICwgbW9k
ZShtb2RlKQogICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKLSAgICAsIG51bVZhcnNXaXRoVmFsdWVzKG51bVZhcnNXaXRoVmFsdWVzKQotICAgICwgbXVz
dEhhbmRsZVZhbHVlcyhjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1
ZXMpCisgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgLCBjb21w
aWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0UmVm
KG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpLCBQcm9maWxlcjo6
REZHKSkgOiAwKQogICAgICwgaWRlbnRpZmllcnMoY29kZUJsb2NrLmdldCgpKQogICAgICwgd2Vh
a1JlZmVyZW5jZXMoY29kZUJsb2NrLmdldCgpKQpAQCAtMTA5LDcgKzExMSw3IEBAIHZvaWQgUGxh
bjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXQKICAgICBDb21waWxhdGlvblNjb3BlIGNv
bXBpbGF0aW9uU2NvcGU7CiAKICAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCi0gICAg
ICAgIGRhdGFMb2coIkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwgbnVtYmVy
IG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4i
KTsKKyAgICAgICAgZGF0YUxvZygiREZHKFBsYW4pIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAi
IHdpdGggIiwgbW9kZSwgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25Db3VudCgpLCAiXG4iKTsKIAogICAgIENvbXBpbGF0aW9uUGF0aCBwYXRoID0g
Y29tcGlsZUluVGhyZWFkSW1wbChsb25nTGl2ZWRTdGF0ZSk7CiAKQEAgLTEzMyw3ICsxMzUsNyBA
QCB2b2lkIFBsYW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWVNUygpOwot
ICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwg
IiB3aXRoICIsIHBhdGhOYW1lLCAiIGluICIsIG5vdyAtIGJlZm9yZSwgIiBtcyIpOworICAgICAg
ICBkYXRhTG9nKCJPcHRpbWl6ZWQgIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiB1c2lu
ZyAiLCBtb2RlLCAiIHdpdGggIiwgcGF0aE5hbWUsICIgaW4gIiwgbm93IC0gYmVmb3JlLCAiIG1z
Iik7CiAgICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
KERGRzogIiwgYmVmb3JlRlRMIC0gYmVmb3JlLCAiLCBMTFZNOiAiLCBub3cgLSBiZWZvcmVGVEws
ICIpIik7CiAgICAgICAgIGRhdGFMb2coIi5cbiIpOwpAQCAtMTQyLDYgKzE0NCwxMiBAQCB2b2lk
IFBsYW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAKIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKExvbmdMaXZlZFN0YXRlJiBsb25nTGl2ZWRT
dGF0ZSkKIHsKKyAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpICYmIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCkgeworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
ICAgICBkYXRhTG9nKCJDb21waWxlciBtdXN0IGhhbmRsZSBPU1IgZW50cnkgZnJvbSBiYyMiLCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsICIgd2l0aCB2YWx1ZXM6ICIsIG11c3RIYW5kbGVWYWx1ZXMs
ICJcbiIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KKyAgICAKICAgICBHcmFwaCBk
Zmcodm0sICp0aGlzLCBsb25nTGl2ZWRTdGF0ZSk7CiAgICAgCiAgICAgaWYgKCFwYXJzZShkZmcp
KSB7CkBAIC0xNjIsNiArMTcwLDE1IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21w
aWxlSW5UaHIKICAgICBwZXJmb3JtVW5pZmljYXRpb24oZGZnKTsKICAgICBwZXJmb3JtUHJlZGlj
dGlvbkluamVjdGlvbihkZmcpOwogICAgIAorICAgIGlmIChtb2RlID09IEZUTEZvck9TUkVudHJ5
TW9kZSkgeworICAgICAgICBib29sIHJlc3VsdCA9IHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRp
b24oZGZnKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGZpbmFsaXplciA9
IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKKyAgICAgICAgICAgIHJldHVy
biBGYWlsUGF0aDsKKyAgICAgICAgfQorICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZn
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCiAgICAgICAgIHZh
bGlkYXRlKGRmZyk7CiAgICAgCkBAIC0yMDYsMTAgKzIyMywxOSBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGRmZy5tX25hdHVyYWxMb29wcy5jb21w
dXRlSWZOZWNlc3NhcnkoZGZnKTsKICAgICB9CiAKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBj
YXNlIERGR01vZGU6IHsKKyAgICAgICAgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKGRmZyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBjYXNlIEZUTE1vZGU6CisgICAgY2Fz
ZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoT3B0
aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkKLSAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAmJiBGVEw6OmNhbkNvbXBpbGUoZGZnKSkgewor
ICAgICAgICBpZiAoRlRMOjpjYW5Db21waWxlKGRmZykgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7
CisgICAgICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVkRmluYWxpemVyKCp0
aGlzKSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbFBhdGg7CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwogICAgICAgICBwZXJm
b3JtTG9vcFByZUhlYWRlckNyZWF0aW9uKGRmZyk7CkBAIC0yNDQsMTAgKzI3MCwxNiBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIEZUTDo6Y29tcGls
ZShzdGF0ZSk7CiAgICAgICAgIEZUTDo6bGluayhzdGF0ZSk7CiAgICAgICAgIHJldHVybiBGVExQ
YXRoOwotICAgIH0KICNlbHNlCi0gICAgUkVMRUFTRV9BU1NFUlQoIU9wdGlvbnM6OnVzZUV4cGVy
aW1lbnRhbEZUTCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgCiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgcGVyZm9ybURDRShkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIExvbmdMaXZlZFN0YXRl
Owogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAg
IFBsYW4oCiAgICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiwgQ29tcGlsYXRpb25Nb2RlLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNX
aXRoVmFsdWVzKTsKKyAgICAgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVW
YWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9u
Z0xpdmVkU3RhdGUmKTsKQEAgLTcyLDcgKzcyLDYgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZQogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKICAgICBD
b21waWxhdGlvbk1vZGUgbW9kZTsKICAgICBjb25zdCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXg7Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CiAgICAgT3BlcmFu
ZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29t
cGlsYXRpb24+IGNvbXBpbGF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5vc3JF
bnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi5t
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xv
Y2FsKG1fZ3JhcGgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5
NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCwxMCBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Ci0gICAgICAgIGNhc2UgWm9tYmllSGludDog
eworICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxv
b3A6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVj
a1RpZXJVcEFuZE9TUkVudGVyOiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5l
dmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAg
ICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4K
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NDksNiArNTUy
LDExIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICBjYXNl
IENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKKyAgICAgICAg
Y2FzZSBMb29wSGludDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMgYSBwcmVkaWN0aW9u
LgorICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQg
ZG9lc24ndCBkbyBhbnl0aGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDYgKzIz
MywxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2Fz
ZSBTdHJpbmdGcm9tQ2hhckNvZGU6CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAgIGNhc2Ug
VW5yZWFjaGFibGU6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIENo
ZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CisgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MjMsNiArNDgyMyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICAvLyBUaGlz
IGlzIGEgbm8tb3AuCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKQEAg
LTQ4MzUsNiArNDgzNiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgR2V0QXJndW1l
bnQ6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIENoZWNrVGllclVw
SW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICBjYXNlIENoZWNrVGll
clVwQW5kT1NSRW50ZXI6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDY3Myw2ICs0NjczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00NjgwLDExICs0NjgxLDc1IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFVucmVh
Y2hhYmxlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBi
cmVhazsKKworI2lmIEVOQUJMRShGVExfSklUKSAgICAgICAgCisgICAgY2FzZSBDaGVja1RpZXJV
cEluTG9vcDogeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJh
bmNoQWRkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JMb29w
KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmbV9qaXQu
aml0Q29kZSgpLT50aWVyVXBDb3VudGVyLm1fY291bnRlcikpOworICAgICAgICAKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgIGFwcGVuZENhbGwodHJpZ2dlclRpZXJV
cE5vdyk7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Cisg
ICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46IHsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihPcHRpb25z
OjpmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKCkpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVyVXBDb3Vu
dGVyLm1fY291bnRlcikpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRl
KCk7CisgICAgICAgIGFwcGVuZENhbGwodHJpZ2dlclRpZXJVcE5vdyk7CisgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgICAgIAorICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6IHsKKyAgICAgICAgQVNTRVJUKCFub2RlLT5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIAorICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwKKyAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihPcHRpb25zOjpmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+
dGllclVwQ291bnRlci5tX2NvdW50ZXIpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHRlbXBHUFIpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIobm9kZS0+Y29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KSwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihtX3N0cmVhbS0+c2l6ZSgpKSk7
CisgICAgICAgIGFwcGVuZENhbGxTZXRSZXN1bHQodHJpZ2dlck9TUkVudHJ5Tm93LCB0ZW1wR1BS
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9udEVudGVyID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUik7CisgICAgICAgIG1faml0Lmp1
bXAodGVtcEdQUik7CisgICAgICAgIGRvbnRFbnRlci5saW5rKCZtX2ppdCk7CisgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vsc2UgLy8gRU5BQkxFKEZUTF9K
SVQpCisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVwQXRS
ZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgY2FzZSBQaGk6
CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgR2V0QXJndW1lbnQ6CisgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiRlRMQ2FwYWJpbGl0aWVzLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIFRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ugewor
cHVibGljOgorICAgIFRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAidGllci11cCBjaGVjayBpbmplY3Rpb24iKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBERkdNb2RlKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
T3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICAgICAgRlRMOjpDYXBhYmlsaXR5TGV2ZWwgbGV2
ZWwgPSBGVEw6OmNhbkNvbXBpbGUobV9ncmFwaCk7CisgICAgICAgIGlmIChsZXZlbCA9PSBGVEw6
OkNhbm5vdENvbXBpbGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPm9wKCkgPT0gTG9v
cEhpbnQpIHsKKyAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBibG9jay0+
YXQoMCktPmNvZGVPcmlnaW47CisgICAgICAgICAgICAgICAgTm9kZVR5cGUgbm9kZVR5cGU7Cisg
ICAgICAgICAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2FuQ29tcGlsZUFuZE9TUkVudGVyICYm
ICFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgICAgICBub2Rl
VHlwZSA9IENoZWNrVGllclVwQW5kT1NSRW50ZXI7CisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJsb2NrLT5ieXRlY29kZUJlZ2luID09IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBl
ID0gQ2hlY2tUaWVyVXBJbkxvb3A7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoMSwgU3BlY05vbmUsIG5vZGVUeXBlLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPm9wKCkgPT0gUmV0
dXJuKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBTcGVjTm9uZSwgQ2hlY2tUaWVyVXBBdFJl
dHVybiwgYmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJ
VCkKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIH0KK307CisKK2Jvb2wgcGVy
Zm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFRpZXItdXAgQ2hlY2sgSW5qZWN0aW9uIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPFRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisjZGVmaW5lIERG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBjaGVja3MgaWYgdGhlIHRoaXMgY29k
ZSBibG9jayBjb3VsZCBiZSByZWNvbXBpbGVkIHdpdGggdGhlIEZUTCwKKy8vIGFuZCBpZiBzbywg
aXQgaW5qZWN0cyB0aWVyLXVwIGNoZWNrcy4KKworYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmpl
Y3Rpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZn
Q29kZUJsb2NrKQorICAgIDogbV9kZmdDb2RlQmxvY2soZGZnQ29kZUJsb2NrKQoreworfQorCitU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrKCkgeyB9CisKK1Bhc3NSZWZQdHI8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoCisgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKGRmZ0NvZGVCbG9jaykpOworfQor
Cit2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJl
Y29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIs
ICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsK
KyAgICB9CisgICAgCisgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNl
T3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCisgICAgICAgIG1fZGZnQ29kZUJsb2Nr
LmdldCgpKTsKK30KKwordm9pZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29t
cGlsYXRpb25EaWRDb21wbGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAiKSBy
ZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgPT0g
Q29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwoKTsKKyAg
ICAKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9u
VGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9j
ay5nZXQoKSwgcmVzdWx0KTsKK30KKworfSB9IC8vIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgREZHVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKworbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jayk7
CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
aygpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9j
ayk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3lu
Y2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRD
b21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2RlQmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0pJVENvZGUu
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaygKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQorICAgIDog
bV9kZmdDb2RlQmxvY2soZGZnQ29kZUJsb2NrKQoreworfQorCitUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygpCit7Cit9CisKK1Bhc3NSZWZQdHI8VG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjaz4KK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJs
b2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjayhkZmdDb2RlQmxvY2spKTsKK30KKwordm9pZCBUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJl
YWR5QXN5bmNocm9ub3VzbHkoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
Ik9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2Rm
Z0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsKKyAgICB9
CisgICAgCisgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1p
emF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgp
KTsKK30KKwordm9pZCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
Ojpjb21waWxhdGlvbkRpZENvbXBsZXRlKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAg
ICIpIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3Vs
dCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpLT5vc3JFbnRyeUJsb2NrID0gY29kZUJsb2NrOworICAgIAorICAgIC8vIEZJ
WE1FOiBpZiB3ZSBmYWlsZWQsIHdlIG1pZ2h0IHdhbnQgdG8ganVzdCB0dXJuIG9mZiBPU1IgZW50
cnkgcmF0aGVyIHRoYW4KKyAgICAvLyB0b3RhbGx5IHR1cm5pbmcgb2ZmIHRpZXItdXAuCisgICAg
bV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPnNldE9wdGltaXphdGlvblRocmVzaG9s
ZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCks
IHJlc3VsdCk7Cit9CisKK30gfSAvLyBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrX2gKKyNkZWZpbmUgREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFja19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgeworcHJvdGVjdGVkOgorICAgIFRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRm
Z0NvZGVCbG9jayk7CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Ub0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoCisgICAgICAg
IFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworICAgIAorICAgIHZpcnR1YWwg
dm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKik7
CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29t
cGlsYXRpb25SZXN1bHQpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fZGZn
Q29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsOCArMjc3LDYgQEAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZQogCiBXb3JrbGlzdCogZ2xv
YmFsV29ya2xpc3QoKQogewotICAgIGlmICghZW5hYmxlQ29uY3VycmVudEpJVCgpKQotICAgICAg
ICByZXR1cm4gMDsKICAgICBwdGhyZWFkX29uY2UoJmluaXRpYWxpemVHbG9iYWxXb3JrbGlzdEtl
eU9uY2UsIGluaXRpYWxpemVHbG9iYWxXb3JrbGlzdE9uY2UpOwogICAgIHJldHVybiB0aGVHbG9i
YWxXb3JrbGlzdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSArOTgsNiBAQCBwcml2YXRlOgogLy8gRm9y
IG5vdyB3ZSB1c2UgYSBzaW5nbGUgZ2xvYmFsIHdvcmtsaXN0LiBJdCdzIG5vdCBjbGVhciB0aGF0
IHRoaXMKIC8vIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgYnV0IGl0IGlzIHdoYXQgd2UgZG8s
IGZvciBub3cuIFRoaXMgZnVuY3Rpb24KIC8vIHdpbGwgbGF6aWx5IGNyZWF0ZSBvbmUgd2hlbiBp
dCdzIG5lZWRlZC4KLS8vCi0vLyBUaGlzIHJldHVybnMgbnVsbCBpZiBmb3IgYW55IHJlYXNvbiB3
ZSBzaG91bGRuJ3QgYmUgZG9pbmcgY29uY3VycmVudAotLy8gY29tcGlsYXRpb24uCiBXb3JrbGlz
dCogZ2xvYmFsV29ya2xpc3QoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAKLWlubGluZSBib29sIGNhbkNv
bXBpbGUoTm9kZSogbm9kZSkKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2Rl
KiBub2RlKQogeworICAgIC8vIE5PVEU6IElmIHdlIGV2ZXIgaGF2ZSBwaGFudG9tIGFyZ3VtZW50
cywgd2UgY2FuIGNvbXBpbGUgdGhlbSBidXQgd2UgY2Fubm90CisgICAgLy8gT1NSIGVudGVyLgor
ICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlNDb25zdGFudDoKICAg
ICBjYXNlIFdlYWtKU0NvbnN0YW50OgpAQCAtODEsNiArODQsOCBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBQaGk6
CiAgICAgY2FzZSBVcHNpbG9uOgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAg
Y2FzZSBMb29wSGludDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtOTAsMzkgKzk1LDM5IEBAIGlubGluZSBib29s
IGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgc3dpdGNoIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZE9T
UkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnNwZWN1bGF0aW9uKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2Fu
ZUNoYWluOgogICAgICAgICBjYXNlIEFycmF5OjpJbkJvdW5kczoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIENhbkNvbXBp
bGVBbmRPU1JFbnRlcjsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDb21wYXJlRXE6CkBAIC0xMzMsNyArMTM4LDcgQEAgaW5saW5lIGJvb2wg
Y2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChu
b2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIGNh
c2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6CkBAIC0xNDIsNyArMTQ3LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQnJhbmNoOgogICAg
IGNhc2UgTG9naWNhbE5vdDoKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKQEAgLTE1Miw3ICsxNTcsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTd2l0Y2g6CkBAIC0xNjEsMTggKzE2NiwyNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5nIGVsc2Uu
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAg
ICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50ZXI7
CiB9CiAKLWJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCitDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShHcmFwaCYgZ3JhcGgpCiB7CisgICAgaWYgKGdyYXBoLm1fY29kZUJsb2NrLT5jb2Rl
VHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkgeworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiRlRMIHJlamVjdGluZyBjb2RlIGJsb2Nr
IHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gYSBmdW5jdGlvbi5cbiIpOworICAgICAgICByZXR1cm4g
Q2Fubm90Q29tcGlsZTsKKyAgICB9CisgICAgCisgICAgQ2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9
IENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKKyAgICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxv
Y2spCkBAIC0yMTAsMjUgKzIyMywzNiBAQCBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRlRMIHJlamVjdGluZyBub2RlIGJlY2F1
c2Ugb2YgYmFkIHVzZSBraW5kOiAiLCBlZGdlLnVzZUtpbmQoKSwgIiBpbiBub2RlOlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAi
LCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFjYW5Db21waWxlKG5vZGUpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNhbkNvbXBpbGUo
bm9kZSkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2Fubm90Q29tcGlsZTogCiAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
Z3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQ2Fu
Q29tcGlsZToKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IENhbkNvbXBpbGVBbmRPU1JF
bnRlciAmJiB2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRlRMIGRpc2FibGluZyBPU1IgZW50cnkgYmVjYXVzZSBvZiBub2RlOlxuIik7
CisgICAgICAgICAgICAgICAgICAgIGdyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIs
IG5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDYW5D
b21waWxlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBDYW5Db21waWxlQW5kT1NSRW50ZXI6CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGNh
cmUgaWYgd2UgY2FuIGNvbXBpbGUgYW55dGhpbmcgYWZ0ZXIgYSBmb3JjZS1leGl0LgogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRm9yY2VPU1JFeGl0KQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTU0OTYzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCi1ib29sIGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOworZW51bSBDYXBhYmlsaXR5TGV2ZWwg
eworICAgIENhbm5vdENvbXBpbGUsCisgICAgQ2FuQ29tcGlsZSwKKyAgICBDYW5Db21waWxlQW5k
T1NSRW50ZXIKK307CisKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKERGRzo6R3JhcGgmKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEZv
ck9TUkVudHJ5SklUQ29kZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKworRm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJ
VENvZGUoKQoreworfQorCitGb3JPU1JFbnRyeUpJVENvZGU6On5Gb3JPU1JFbnRyeUpJVENvZGUo
KQoreworfQorCitGb3JPU1JFbnRyeUpJVENvZGUqIEZvck9TUkVudHJ5SklUQ29kZTo6ZnRsRm9y
T1NSRW50cnkoKQoreworICAgIHJldHVybiB0aGlzOworfQorCit2b2lkIEZvck9TUkVudHJ5SklU
Q29kZTo6aW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiB2bSwgdW5zaWduZWQgbnVtQ2FsbGVlUmVn
aXN0ZXJzKQoreworICAgIG1fZW50cnlCdWZmZXIgPSB2bS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShu
dW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEZvck9TUkVudHJ5
SklUQ29kZV9oCisjZGVmaW5lIEZUTEZvck9TUkVudHJ5SklUQ29kZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMSklU
Q29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIE9TUiBlbnRy
eSBpbnRvIHRoZSBGVEwgaGFzIGEgbnVtYmVyIG9mIHF1aXJrczoKKy8vCisvLyAtIE9TUiBlbnRy
eSBvbmx5IGhhcHBlbnMgdGhyb3VnaCBzcGVjaWFsIE9TUiBlbnRyeSBjb21waWxhdGlvbnMuIFRo
ZXkgaGF2ZSB0aGVpcgorLy8gICBvd24gQ29kZUJsb2NrIGFuZCB0aGVpciBvd24gSklUQ29kZS4K
Ky8vCisvLyAtIFdlIG9ubHkgT1NSIGVudGVyIGluIGxvb3AgaGVhZGVycyB0aGF0IGhhdmUgYSBu
dWxsIGlubGluZSBjYWxsIGZyYW1lLgorLy8KKy8vIC0gRWFjaCBPU1IgZW50cnkgY29tcGlsYXRp
b24gYWxsb3dzIGVudHJ5IHRocm91Z2ggb25seSBvbmUgYnl0ZWNvZGUgaW5kZXguCisKK2NsYXNz
IEZvck9TUkVudHJ5SklUQ29kZSA6IHB1YmxpYyBGVEw6OkpJVENvZGUgeworcHVibGljOgorICAg
IEZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIH5Gb3JPU1JFbnRyeUpJVENvZGUoKTsKKyAgICAK
KyAgICB2b2lkIGluaXRpYWxpemVFbnRyeUJ1ZmZlcihWTSYsIHVuc2lnbmVkIG51bUNhbGxlZVJl
Z2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZlciogZW50cnlCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2VudHJ5QnVmZmVyOyB9CisgICAgCisgICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2ln
bmVkIHZhbHVlKSB7IG1fYnl0ZWNvZGVJbmRleCA9IHZhbHVlOyB9CisgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQorICAgIAorICAg
IHZvaWQgY291bnRFbnRyeUZhaWx1cmUoKSB7IG1fZW50cnlGYWlsdXJlQ291bnQrKzsgfQorICAg
IHVuc2lnbmVkIGVudHJ5RmFpbHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUZhaWx1
cmVDb3VudDsgfQorICAgIAorICAgIEZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnko
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2NyYXRjaEJ1ZmZlciogbV9lbnRyeUJ1ZmZlcjsgLy8g
T25seSBmb3IgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLgorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICB1bnNpZ25lZCBtX2VudHJ5RmFpbHVyZUNvdW50OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZMVF9KSVQpCisKKyNlbmRpZiAv
LyBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDkgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAg
ICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQpKS5k
YXRhKCkpKSk7CiAgICAgfSAvLyBlbHNlIHRoaXMgZnVuY3Rpb24gaGFkIG5vIE9TUiBleGl0cywg
c28gbm8gZXhpdCB0aHVua3MuCiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhB
cml0eUNoZWNrID0gbV9lbnRyeXBvaW50TGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hl
Y2spOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKKyAgICBpZiAo
bV9hcml0eUNoZWNrLmlzU2V0KCkpCisgICAgICAgIHdpdGhBcml0eUNoZWNrID0gbV9lbnRyeXBv
aW50TGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2spOwogICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGUoCiAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAg
Km1fZW50cnlwb2ludExpbmtCdWZmZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDc5ICs1NSwxMTQgQEAgdm9pZCBsaW5r
KFN0YXRlJiBzdGF0ZSkKICAgICAvLyBMTFZNIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJs
ZXMgYXMgbmVlZGVkLgogICAgIGNvZGVCbG9jay0+Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAg
ICAgCi0gICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LgotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyIGNhbGxpbmcgY29udmVu
dGlvbi4KKyAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhp
cyBlbnRyeXBvaW50IHRvdGFsbHkgZGlmZmVyZW50bHkKKyAgICAvLyBkZXBlbmRpbmcgb24gd2hl
dGhlciB3ZSdyZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgorICAgIC8vIEZJWE1FOiBFeGNlcHQg
Zm9yIE9TUiBlbnRyeSwgdGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExMVk0gc2hvdWxkIGp1c3Qg
dXNlIG91cgorICAgIC8vIGNhbGxpbmcgY29udmVudGlvbi4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgm
c3RhdGUuZ3JhcGgubV92bSwgY29kZUJsb2NrKTsKICAgICAKLSAgICBjb21waWxlRW50cnkoaml0
KTsKKyAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlcjsKKyAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGFyaXR5Q2hlY2s7CisgICAgc3dpdGNoIChzdGF0ZS5ncmFwaC5tX3BsYW4ubW9kZSkg
eworICAgIGNhc2UgRlRMTW9kZTogeworICAgICAgICBjb21waWxlRW50cnkoaml0KTsKICAgICAK
LSAgICAvLyBUaGlzIHBhcnQgaXMgb25seSBuZWNlc3NhcnkgZm9yIGZ1bmN0aW9ucy4gV2UgY3Vy
cmVudGx5IG9ubHkgY29tcGlsZSBmdW5jdGlvbnMuCisgICAgICAgIC8vIFRoaXMgcGFydCBpcyBv
bmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJyZW50bHkgb25seSBjb21waWxlIGZ1
bmN0aW9ucy4KICAgICAgICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBmcm9tQXJpdHlDaGVj
ayA9IGppdC5sYWJlbCgpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNo
ZWNrID0gaml0LmxhYmVsKCk7CiAgICAgICAgIAotICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBz
dWZmaWNpZW50IHNwYWNlIGlzIGF2YWlsYWJsZSBpbiB0aGUgSlNTdGFjay4KLSAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MjkxCi0gICAgaml0
LmFkZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5t
X251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOwotICAgIENDYWxsSGVscGVyczo6
SnVtcCBzdGFja0NoZWNrID0gaml0LmJyYW5jaFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpC
ZWxvdywKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgu
bV92bS5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksCi0gICAgICAgIEdQUklu
Zm86OnJlZ1QxKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21TdGFja0NoZWNrID0gaml0
LmxhYmVsKCk7Ci0gICAgICAgIAotICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwot
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUs
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQucmVzdG9yZVJldHVybkFkZHJl
c3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5yZXQoKTsKLSAgICAgICAg
Ci0gICAgc3RhY2tDaGVjay5saW5rKCZqaXQpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnBv
a2UoCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICBPQkpFQ1Rf
T0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCop
KTsKLSAgICAgICAgCi0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkp
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRo
aXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlz
Ci0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8g
aGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5qdW1wKGZyb21TdGFja0NoZWNrKTsKLSAgICAgICAg
Ci0gICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBhcml0eUNoZWNrID0gaml0LmxhYmVsKCk7Ci0gICAg
Y29tcGlsZUVudHJ5KGppdCk7Ci0gICAgaml0LmxvYWQzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpwYXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LmJyYW5jaDMyKAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCi0gICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KSkKLSAgICAgICAgLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgJmppdCk7Ci0gICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKLSAgICBqaXQucG9rZSgKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0g
ICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAv
IHNpemVvZih2b2lkKikpOwotICAgIGppdC5zdG9yZTMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0
KDApKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBjYWxsQXJpdHlDaGVjayA9IGppdC5jYWxsKCk7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gbWFr
ZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhp
cyBpcwotICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxl
IHRvIGhhbmRsZSBleGNlcHRpb25zLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTM2MjIKLSAgICBqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6
WmVybywgR1BSSW5mbzo6cmVnVDApLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywgJmppdCk7Ci0gICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNhbGwoKTsKLSAgICBqaXQu
anVtcChmcm9tQXJpdHlDaGVjayk7Ci0gICAgICAgIAotICAgIE93blB0cjxMaW5rQnVmZmVyPiBs
aW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmpp
dCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7Ci0gICAgbGlua0J1ZmZl
ci0+bGluayhjYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKLSAgICBsaW5rQnVmZmVy
LT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9v
cF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOwotICAgIGxp
bmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKChzdGF0ZS5ncmFwaC5t
X3ZtLmdldENUSVN0dWIoYXJpdHlGaXh1cCkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgICAgIC8vIFBsYW50IGEgY2hlY2sgdGhhdCBzdWZmaWNpZW50IHNwYWNlIGlzIGF2YWls
YWJsZSBpbiB0aGUgSlNTdGFjay4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5MQorICAgICAgICBqaXQuYWRkUHRyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5tX251bUNhbGxlZVJl
Z2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpC
ZWxvdywKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHN0YXRlLmdy
YXBoLm1fdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCkuYWRkcmVzc09mRW5kKCkpLAorICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21TdGFj
a0NoZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAgIAorICAgICAgICBqaXQuc2V0dXBBcmd1bWVu
dHNFeGVjU3RhdGUoKTsKKyAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVk
RnVuY3Rpb24pKSwKKyAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFt
ZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBqaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgIAorICAgICAgICBzdGFja0NoZWNrLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGppdC5wb2tlKAorICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsCisgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJh
bWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgCisgICAgICAgIGppdC5z
dG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1l
OjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsU3RhY2tDaGVj
ayA9IGppdC5jYWxsKCk7CisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxs
IHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKKyAgICAg
ICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFu
ZGxlIGV4Y2VwdGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTM2MjIKKyAgICAgICAgaml0Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOworICAg
ICAgICAKKyAgICAgICAgYXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOworICAgICAgICBjb21waWxl
RW50cnkoaml0KTsKKyAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6cGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86
OnJlZ1QxLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpKQorICAgICAgICAgICAgLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywg
JmppdCk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5wb2tlKAorICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICBPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKKyAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKKyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFr
ZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhp
cyBpcworICAgICAgICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUg
YWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgorICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKEND
YWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDApLmxpbmtUbyhmcm9tQXJpdHlDaGVjaywg
JmppdCk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5j
YWxsKCk7CisgICAgICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsKKyAgICAgICAgCisgICAg
ICAgIGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3Zt
LCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKKyAgICAgICAg
bGlua0J1ZmZlci0+bGluayhjYWxsU3RhY2tDaGVjaywgY3RpX3N0YWNrX2NoZWNrKTsKKyAgICAg
ICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5tX2lzQ29uc3Ry
dWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hlY2sgOiBjdGlfb3BfY2FsbF9hcml0eUNo
ZWNrKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25Q
dHIoKHN0YXRlLmdyYXBoLm1fdm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEZUTEZvck9TUkVudHJ5TW9kZTogeworICAgICAgICAvLyBXZSBqdW1wIHRvIGhlcmUgc3Ry
YWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0ZXIgaGF2aW5nIGJveGVkIHVwIGFsbCBvZiB0aGUKKyAg
ICAgICAgLy8gdmFsdWVzIGludG8gdGhlIHNjcmF0Y2ggYnVmZmVyLiBFdmVyeXRoaW5nIHNob3Vs
ZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhpcworICAgICAgICAvLyBwb2ludCB3ZSd2ZSBldmVuIGRv
bmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNpY2FsbHkgd2UganVzdCBoYXZlIHRvIG1ha2UgdGhlCisg
ICAgICAgIC8vIGNhbGwgdG8gdGhlIExMVk0tZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0
ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLAorICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJl
Z1QxKTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6
OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5y
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CisgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgCisgICAgICAgIGxpbmtCdWZmZXIgPSBhZG9wdFB0cihuZXcg
TGlua0J1ZmZlcigKKyAgICAgICAgICAgIHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAKICAgICBzdGF0ZS5maW5hbGl6ZXItPmlu
aXRpYWxpemVFbnRyeXBvaW50TGlua0J1ZmZlcihsaW5rQnVmZmVyLnJlbGVhc2UoKSk7CiAgICAg
c3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRnVuY3Rpb24oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rp
b24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisj
aW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVk
VmFsdWUuaCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRM
T3V0cHV0LmgiCkBAIC0xOTEsNiArMTkyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gbWFrZSBJ
UiBkdW1wcyBlYXNpZXIgdG8gcmVhZC4KICAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ss
IG1fbmV4dExvd0Jsb2NrKTsKICAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpmdGxDcmFz
aGVzKCkpCisgICAgICAgICAgICBtX291dC5jcmFzaE5vblRlcm1pbmFsKCk7CisgICAgICAgIAog
ICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5jZmFIYXNWaXNpdGVkKSB7CiAgICAgICAgICAgICBt
X291dC5jcmFzaCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQzLDYgKzI0Nyw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6CiAgICAgICAgICAgICBjb21waWxlR2V0
QXJndW1lbnQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dHJhY3RPU1JF
bnRyeUxvY2FsOgorICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNv
bXBpbGVHZXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjQsNiArMjcxLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY2FzZSBWYWx1
ZUFkZDoKQEAgLTUwNiw2ICs1MTQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAg
ICAKKyAgICB2b2lkIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgpCisgICAgeworICAgICAg
ICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPigK
KyAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NSRW50cnkoKS0+ZW50cnlC
dWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExvY2FsKCkpKSk7CisgICAg
fQorICAgIAogICAgIHZvaWQgY29tcGlsZUdldExvY2FsKCkKICAgICB7CiAgICAgICAgIC8vIEdl
dExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMuCkBAIC01MTUsNyArNTMw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhYmxl
LT5pc0NhcHR1cmVkKCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bih2YWx1ZS5tX3ZhbHVlKSkKKyAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpKQogICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFy
aWFibGUtPmxvY2FsKCkpKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQubG9hZDY0KGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFbnRyeS5oIgorCisj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
REZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9p
ZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBkZmdD
b2RlQmxvY2ssIENvZGVCbG9jayogZW50cnlDb2RlQmxvY2ssCisgICAgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQgc3RyZWFtSW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gZGZnQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKTsKKyAgICBERkc6OkpJVENvZGUqIGRmZ0NvZGUgPSBkZmdDb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnKCk7CisgICAgRm9yT1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUNvZGVC
bG9jay0+aml0Q29kZSgpLT5mdGxGb3JPU1JFbnRyeSgpOworICAgIAorICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGVEwgT1NS
IGZyb20gIiwgKmRmZ0NvZGVCbG9jaywgIiB0byAiLCAqZW50cnlDb2RlQmxvY2ssICIgYXQgYmMj
IiwKKyAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXgsICIuXG4iKTsKKyAgICB9CisgICAgCisgICAg
aWYgKGJ5dGVjb2RlSW5kZXggIT0gZW50cnlDb2RlLT5ieXRlY29kZUluZGV4KCkpIHsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBP
U1IgZmFpbGVkIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbiBlbnRyeXBvaW50IGZvciBiYyMiLCBi
eXRlY29kZUluZGV4LCAiOyBvdXJzIGlzIGZvciBiYyMiLCBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBPcGVyYW5kczxKU1Zh
bHVlPiB2YWx1ZXM7CisgICAgZGZnQ29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAgIGV4ZWMsIGRm
Z0NvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIHZhbHVl
cyk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxv
ZygiICAgIFZhbHVlcyBhdCBlbnRyeTogIiwgdmFsdWVzLCAiXG4iKTsKKyAgICAKKyAgICBmb3Ig
KGludCBhcmd1bWVudCA9IHZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1bWVudC0tOykg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAgICAgIGV4ZWMtPnIoYXJndW1lbnRU
b09wZXJhbmQoYXJndW1lbnQpKS5qc1ZhbHVlKCkgPT0gdmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50
KSk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKAorICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHZhbHVlcy5udW1iZXJPZkxvY2FscygpKSA9PSBiYXNlbGluZS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMpOworICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBzY3JhdGNoID0gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPigKKyAgICAgICAgZW50cnlDb2RlLT5lbnRyeUJ1ZmZlcigpLT5k
YXRhQnVmZmVyKCkpOworICAgIAorICAgIGZvciAoaW50IGxvY2FsID0gdmFsdWVzLm51bWJlck9m
TG9jYWxzKCk7IGxvY2FsLS07KQorICAgICAgICBzY3JhdGNoW2xvY2FsXSA9IEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZXMubG9jYWwobG9jYWwpKTsKKyAgICAKKyAgICBpZiAoIXZtLmludGVycHJldGVy
LT5zdGFjaygpLmdyb3coCisgICAgICAgICAgICAmZXhlYy0+cmVnaXN0ZXJzKClbZW50cnlDb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJjYXVzZSBz
dGFjayBncm93dGggZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAK
KyAgICBleGVjLT5zZXRDb2RlQmxvY2soZW50cnlDb2RlQmxvY2spOworICAgIAorICAgIHZvaWQg
KnJlc3VsdCA9IGVudHJ5Q29kZS0+YWRkcmVzc0ZvckNhbGwoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coIiAgICBF
bnRyeSB3aWxsIHN1Y2NlZWQsIGdvaW5nIHRvIGFkZHJlc3MiLCBSYXdQb2ludGVyKHJlc3VsdCks
ICJcbiIpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTE9TUkVudHJ5X2gKKyNkZWZpbmUgRlRMT1NSRW50cnlfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEV4ZWNTdGF0ZTsKKworbmFtZXNwYWNlIEZUTCB7CisK
K3ZvaWQqIHByZXBhcmVPU1JFbnRyeSgKKyAgICBFeGVjU3RhdGUqLCBDb2RlQmxvY2sqIGRmZ0Nv
ZGVCbG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwKKyAgICB1bnNpZ25lZCBzdHJlYW1JbmRleCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRW50cnlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE1
NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1MSw5ICszNTEsMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgY2FsbCh0
cmFwSW50cmluc2ljKCkpOwogICAgIH0KLSAgICB2b2lkIGNyYXNoKCkKKyAgICAKKyAgICB2b2lk
IGNyYXNoTm9uVGVybWluYWwoKQogICAgIHsKICAgICAgICAgY2FsbChpbnRUb1B0cihjb25zdElu
dFB0cihhYm9ydCksIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpKSk7CisgICAg
fQorICAgIHZvaWQgY3Jhc2goKQorICAgIHsKKyAgICAgICAgY3Jhc2hOb25UZXJtaW5hbCgpOwog
ICAgICAgICB1bnJlYWNoYWJsZSgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBA
QAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUu
aCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgi
CisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKIApAQCAtNDAsOSArNDIsMjUgQEAgU3RhdGU6OlN0YXRlKEdyYXBoJiBn
cmFwaCkKICAgICAsIGNvbnRleHQoTExWTUNvbnRleHRDcmVhdGUoKSkKICAgICAsIG1vZHVsZSgw
KQogICAgICwgZnVuY3Rpb24oMCkKLSAgICAsIGppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUo
KSkpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogeworICAgIHN3aXRjaCAoZ3JhcGgubV9w
bGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICAgICAgaml0Q29kZSA9IGFkb3B0
UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGVExG
b3JPU1JFbnRyeU1vZGU6IHsKKyAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklUQ29kZT4gY29k
ZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CisgICAgICAgIGNvZGUtPmlu
aXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJbmRleChncmFw
aC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgaml0Q29kZSA9IGNvZGU7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCiAgICAgZmlu
YWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3BsYW4pOwogICAgIGdyYXBoLm1fcGxh
bi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitDb2RlQmxv
Y2tTZXQ6OkNvZGVCbG9ja1NldCgpIHsgfQorCitDb2RlQmxvY2tTZXQ6On5Db2RlQmxvY2tTZXQo
KQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdp
bigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgp
OworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAoKml0ZXIpLT5kZXJl
ZigpOworfQorCit2b2lkIENvZGVCbG9ja1NldDo6YWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBj
b2RlQmxvY2spCit7CisgICAgYm9vbCBpc05ld0VudHJ5ID0gbV9zZXQuYWRkKGNvZGVCbG9jay5s
ZWFrUmVmKCkpLmlzTmV3RW50cnk7CisgICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05l
d0VudHJ5KTsKK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3MoKQoreworICAgIEhh
c2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOworICAgIEhh
c2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Kml0ZXI7CisgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOworICAg
ICAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5j
ZWQoKQoreworICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBmaXhwb2ludCBiZWNhdXNlIGNvZGUg
YmxvY2tzIHRoYXQgYXJlIHVubWFya2VkIG1heQorICAgIC8vIHJlZmVyIHRvIGVhY2ggb3RoZXIu
IEZvciBleGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQgaXMgb3duZWQgYnkKKyAgICAvLyB0
aGUgR0MgbWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkgY29kZSBibG9jayB0aGF0IGlzIGFs
c28gb3duZWQgYnkKKyAgICAvLyB0aGUgR0MuCisgICAgVmVjdG9yPENvZGVCbG9jayosIDE2PiB0
b1JlbW92ZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiRml4cG9pbnRpbmcg
b3ZlciB1bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBtX3NldC5zaXplKCksICIuLi5cbiIpOworICAg
IGZvciAoOzspIHsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9
IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVu
ZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewor
ICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgICAgIGlm
ICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CisgICAgICAgICAg
ICB0b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBSZW1vdmluZyAiLCB0b1JlbW92ZS5zaXpl
KCksICIgYmxvY2tzLlxuIik7CisgICAgICAgIGlmICh0b1JlbW92ZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdG9SZW1vdmUuc2l6ZSgp
OyBpLS07KQorICAgICAgICAgICAgbV9zZXQucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICAgICAg
dG9SZW1vdmUucmVzaXplKDApOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNl
TWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fc2V0LnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwor
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOwor
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gKml0ZXI7CisgICAgICAgIGlmICghY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQ29kZUJsb2NrU2V0X2gKKyNkZWZpbmUgQ29kZUJsb2NrU2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworLy8g
Q29kZUJsb2NrU2V0IHRyYWNrcyBhbGwgQ29kZUJsb2Nrcy4gRXZlcnkgQ29kZUJsb2NrIHN0YXJ0
cyBvdXQgd2l0aCBvbmUKKy8vIHJlZmVyZW5jZSBjb21pbmcgaW4gZnJvbSBHQy4gVGhlIEdDIGlz
IHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIENvZGVCbG9ja3MKKy8vIG9uY2UgdGhleSBoYXNPbmVS
ZWYoKSBhbmQgbm9ib2R5IGlzIHJ1bm5pbmcgY29kZSBmcm9tIHRoYXQgQ29kZUJsb2NrLgorCitj
bGFzcyBDb2RlQmxvY2tTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGVCbG9ja1Nl
dCk7CisKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tTZXQoKTsKKyAgICB+Q29kZUJsb2NrU2V0KCk7
CisgICAgCisgICAgLy8gQWRkIGEgQ29kZUJsb2NrLiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IENv
ZGVCbG9jayBjb25zdHJ1Y3RvcnMuCisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+
KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcg
Y29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgLy8gTWFyayBh
IHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQg
b2YgREZHCisgICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQgaW4gQ29kZUJsb2NrLmguCisg
ICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CisgICAgCisgICAgLy8gRGVs
ZXRlIGFsbCBjb2RlIGJsb2NrcyB0aGF0IGFyZSBvbmx5IHJlZmVyZW5jZWQgYnkgdGhpcyBzZXQg
KGkuZS4gb3duZWQKKyAgICAvLyBieSB0aGlzIHNldCksIGFuZCB0aGF0IGhhdmUgbm90IGJlZW4g
bWFya2VkLgorICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsKKyAgICAK
KyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzLiBUaGUgQ29kZUJsb2NrIGlzIGZy
ZWUgdG8gbWFrZSB1c2Ugb2YKKyAgICAvLyBtYXlCZUV4ZWN1dGluZy4KKyAgICB2b2lkIHRyYWNl
TWFya2VkKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBub3QgYSBz
ZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZmlu
ZAorICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVycy4gSSBjb3VsZCBoYXZlIHdyaXR0ZW4g
YSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcworICAgIC8vIGFuZCBhbGwsIGJ1dCB0aGF0IHNl
ZW1lZCBsaWtlIG92ZXJraWxsLgorICAgIEhhc2hTZXQ8Q29kZUJsb2NrKiA+IG1fc2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb2RlQmxvY2tTZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
CShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRl
ICJDb25zZXJ2YXRpdmVSb290cy5oIgogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJD
b3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKQEAgLTE0MCwxMCArMTQwLDkgQEAgcHJpdmF0ZToKIH07CiAKIHZvaWQgQ29uc2VydmF0aXZl
Um9vdHM6OmFkZCgKLSAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNl
dCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQorICAgIHZv
aWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMs
IENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKLSAgICBDb21wb3NpdGVNYXJrSG9vazxKSVRT
dHViUm91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4gbWFya0hvb2soCi0gICAgICAgIGppdFN0dWJS
b3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgQ29tcG9zaXRlTWFya0hvb2s8SklUU3R1YlJv
dXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hvb2soaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxv
Y2tzKTsKICAgICBnZW5lcmljQWRkU3BhbihiZWdpbiwgZW5kLCBtYXJrSG9vayk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsKK2NsYXNzIENvZGVCbG9ja1NldDsKIGNsYXNz
IEhlYXA7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7
CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQm
KTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNl
dCYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5k
LCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOwogICAgIAogICAgIHNpemVfdCBz
aXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgotCi0j
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0KLURGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9ja3MoKSB7IH0KLQotREZHQ29kZUJsb2Nrczo6
fkRGR0NvZGVCbG9ja3MoKQotewotICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiwgMTY+IHRv
UmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNKZXR0aXNvbmVkKQotICAg
ICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQotfQotCi12
b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxv
Y2tQdHIpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWxldGUgaXQgbm93OyB3ZSBqdXN0
IHdhbnQgaXRzIHBvaW50ZXIuCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tQ
dHIubGVha1JlZigpOwotICAgIAotICAgIEFTU0VSVChjb2RlQmxvY2spOwotICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKLSAgICAKLSAg
ICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFkeSBiZWVuIGpldHRpc29uZWQuCi0gICAgQVNT
RVJUKCFjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlzb25lZCk7Ci0K
LSAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGlzIGJsb2NrIGFscmVhZHkuCi0gICAgQVNTRVJUKG1f
c2V0LmZpbmQoY29kZUJsb2NrKSAhPSBtX3NldC5lbmQoKSk7Ci0gICAgCi0gICAgY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgPSB0cnVlOwotfQotCi12b2lk
IERGR0NvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQotewotICAgIGZvciAoSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7
ICsraXRlcikgewotICAgICAgICAoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYXlC
ZUV4ZWN1dGluZyA9IGZhbHNlOwotICAgICAgICAoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1v
bigpLT52aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZv
aWQgREZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpCi17
Ci0gICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+LCAxNj4gdG9SZW1vdmU7Ci0gICAgCi0gICAg
Zm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsg
aXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5qaXRD
b2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgJiYgISgqaXRlciktPmppdENvZGUoKS0+
ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OnRyYWNl
TWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBmb3IgKEhhc2hT
ZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1f
c2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgKCppdGVyKS0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7Ci0gICAgfQotfQotCi0jZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLQot
dm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4pCi17Ci19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAkocmV2aXNp
b24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdDb2RlQmxvY2tzX2gKLSNkZWZpbmUg
REZHQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsKLWNsYXNzIFNsb3RWaXNpdG9yOwotCi0vLyBE
RkdDb2RlQmxvY2tzIG5vdGlmaWVzIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBhYm91dCBvcHRpbWl6
ZWQgY29kZSBibG9ja3MgdGhhdAotLy8gaGF2ZSBkaWZmZXJlbnQgbWFya2luZyBiZWhhdmlvciBk
ZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhleSBhcmUgb24gdGhlCi0vLyBzdGFjaywgYW5k
IHRoYXQgbWF5IGJlIGpldHRpc29uZWQuIEpldHRpc29uaW5nIGlzIHRoZSBwcm9jZXNzIG9mIGRp
c2NhcmRpbmcKLS8vIGEgY29kZSBibG9jayBhZnRlciBhbGwgY2FsbHMgdG8gaXQgaGF2ZSBiZWVu
IHVubGlua2VkLiBUaGlzIGNsYXNzIHRha2VzIHNwZWNpYWwKLS8vIGNhcmUgdG8gZW5zdXJlIHRo
YXQgaWYgdGhlcmUgYXJlIHN0aWxsIGNhbGwgZnJhbWVzIHRoYXQgYXJlIHVzaW5nIHRoZSBjb2Rl
Ci0vLyBibG9jaywgdGhlbiBpdCBzaG91bGQgbm90IGJlIGltbWVkaWF0ZWx5IGRlbGV0ZWQsIGJ1
dCByYXRoZXIsIGl0IHNob3VsZCBiZQotLy8gZGVsZXRlZCBvbmNlIHdlIGtub3cgdGhhdCB0aGVy
ZSBhcmUgbm8gbG9uZ2VyIGFueSByZWZlcmVuY2VzIHRvIGl0IGZyb20gYW55Ci0vLyBjYWxsIGZy
YW1lcy4gVGhpcyBjbGFzcyB0YWtlcyBpdHMgbmFtZSBmcm9tIHRoZSBERkcgY29tcGlsZXI7IG9u
bHkgY29kZSBibG9ja3MKLS8vIGNvbXBpbGVkIGJ5IHRoZSBERkcgbmVlZCBzcGVjaWFsIG1hcmtp
bmcgYmVoYXZpb3IgaWYgdGhleSBhcmUgb24gdGhlIHN0YWNrLCBhbmQKLS8vIG9ubHkgdGhvc2Ug
Y29kZSBibG9ja3MgbWF5IGJlIGpldHRpc29uZWQuCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLWNs
YXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJs
aWM6Ci0gICAgREZHQ29kZUJsb2NrcygpOwotICAgIH5ERkdDb2RlQmxvY2tzKCk7Ci0gICAgCi0g
ICAgLy8gSW5mb3JtIHRoZSBjb2xsZWN0b3IgdGhhdCBhIGNvZGUgYmxvY2sgaGFzIGJlZW4gamV0
dGlzb25lZCBmb3JtIGl0cwotICAgIC8vIGV4ZWN1dGFibGUgYW5kIHNob3VsZCBvbmx5IGJlIGtl
cHQgYWxpdmUgaWYgdGhlcmUgYXJlIGNhbGwgZnJhbWVzIHRoYXQgdXNlCi0gICAgLy8gaXQuIFRo
aXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBlaXRoZXIgZnJvbSBhIHJlY29tcGlsYXRpb24gdHJpZ2dl
ciwgb3IgZnJvbQotICAgIC8vIGFuIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIGFzc29jaWF0ZWQg
d2l0aCBhIENvZGVCbG9jayB0aGF0IGhhZCB3ZWFrCi0gICAgLy8gcmVmZXJlbmNlcywgd2hlcmUg
c29tZSBzdWJzZXQgb2YgdGhvc2UgcmVmZXJlbmNlcyB3ZXJlIGRlYWQuCi0gICAgdm9pZCBqZXR0
aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwotICAgIAotICAgIC8vIENsZWFyIGFsbCBtYXJr
IGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2RlIGJsb2Nrcy4KLSAgICB2b2lkIGNsZWFyTWFy
a3MoKTsKLSAgICAKLSAgICAvLyBNYXJrIGEgcG9pbnRlciB0aGF0IG1heSBiZSBhIENvZGVCbG9j
ayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcgY29kZQotICAgIC8vIGJsb2Nrcy4gVGhp
cyBpcyBkZWZpbmVkIGlubGluZSBpbiBDb2RlQmxvY2suaAotICAgIHZvaWQgbWFyayh2b2lkKiBj
YW5kaWRhdGVDb2RlQmxvY2spOwotICAgIAotICAgIC8vIERlbGV0ZSBhbGwgamV0dGlzb25lZCBj
b2RlIGJsb2NrcyB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2VkIChpLmUuIGFyZSBub3QgcmVmZXJl
bmNlZAotICAgIC8vIGZyb20gY2FsbCBmcmFtZXMpLgotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRK
ZXR0aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAotICAgIC8vIFRyYWNlIGFsbCBtYXJrZWQgY29k
ZSBibG9ja3MgKGkuZS4gYXJlIHJlZmVyZW5jZWQgZnJvbSBjYWxsIGZyYW1lcykuIFRoZSBDb2Rl
QmxvY2sKLSAgICAvLyBpcyBmcmVlIHRvIG1ha2UgdXNlIG9mIG1fZGZnRGF0YS0+aXNNYXJrZWQg
YW5kIG1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkLgotICAgIHZvaWQgdHJhY2VNYXJrZWRDb2RlQmxv
Y2tzKFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9j
azsKLSAgICAKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fc2V0OwotfTsKLSNlbHNlCi1jbGFz
cyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQotcHVibGlj
OgotICAgIHZvaWQgamV0dGlzb24oUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKLSAgICB2b2lkIGNs
ZWFyTWFya3MoKSB7IH0KLSAgICB2b2lkIG1hcmsodm9pZCopIHsgfQotICAgIHZvaWQgZGVsZXRl
VW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpIHsgfQotICAgIHZvaWQgdHJhY2VNYXJrZWRD
b2RlQmxvY2tzKFNsb3RWaXNpdG9yJikgeyB9Ci19OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzU0LDExICszNTQsNiBAQCBib29sIEhlYXA6OnVucHJvdGVjdChKU1Zh
bHVlIGspCiAgICAgcmV0dXJuIG1fcHJvdGVjdGVkVmFsdWVzLnJlbW92ZShrLmFzQ2VsbCgpKTsK
IH0KIAotdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrKQotewotICAgIG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2sp
OwotfQotCiB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVy
KiBidWZmZXIpCiB7CiAgICAgaWYgKG1fYXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBi
dWZmZXIpKSB7CkBAIC00NTcsMTEgKzQ1MiwxMCBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAg
ICAgfQogCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgc3RhY2tSb290cygmbV9vYmplY3RTcGFjZS5i
bG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKLSAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJr
cygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CiAgICAgewogICAgICAgICBHQ1BI
QVNFKEdhdGhlclN0YWNrUm9vdHMpOwotICAgICAgICBzdGFjaygpLmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKAotICAgICAgICAgICAgc3RhY2tSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1fZGZn
Q29kZUJsb2Nrcyk7CisgICAgICAgIHN0YWNrKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoc3Rh
Y2tSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1fY29kZUJsb2Nrcyk7CiAgICAgfQogCiAjaWYg
RU5BQkxFKERGR19KSVQpCkBAIC00ODUsMTIgKzQ3OSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3Rz
KCkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcih2aXNpdG9yKTsK
IAotICAgICAgICBpZiAobV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7Ci0g
ICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZlQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgp
OyBpKyspCi0gICAgICAgICAgICAgICAgbV92bS0+Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRbaV0t
PnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgICAgICB9Ci0KICAgICAgICAgbV92bS0+c21h
bGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKIAogICAgICAgICB7CkBA
IC01NTgsNyArNTQ2LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk7CiAgICAg
ICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3IsICJUcmFjZSBDb2RlIEJsb2NrcyBhbmQgSklU
IFN0dWIgUm91dGluZXMiKTsKLSAgICAgICAgICAgIG1fZGZnQ29kZUJsb2Nrcy50cmFjZU1hcmtl
ZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAgICAgICBtX2NvZGVCbG9ja3MudHJhY2VNYXJr
ZWQodmlzaXRvcik7CiAgICAgICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0
dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAgICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKICAgICAgICAgfQpAQCAtNjgzLDggKzY3MSw4IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29t
cGlsZWRDb2RlKCkKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY3Vy
cmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgfQogCi0gICAgbV9kZmdDb2Rl
QmxvY2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRK
ZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7Cisg
ICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7CiB9CiAKIHZv
aWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQpAQCAtNzAxLDcgKzY4OSw3IEBA
IHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAgICAgICBtX2NvbXBp
bGVkQ29kZS5yZW1vdmUoY3VycmVudCk7CiAgICAgfQogCi0gICAgbV9kZmdDb2RlQmxvY2tzLmRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVs
ZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsKICAgICBtX2ppdFN0dWJSb3V0aW5lcy5kZWxl
dGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAKICNpbmNs
dWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJE
RkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNp
bmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKQEAg
LTE0NCw4ICsxNDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3Bz
IHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lkIGpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPik7Ci0KICAgICAgICAgc2l6ZV90IGV4dHJhU2l6ZSgpOyAvLyBleHRy
YSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGhlYXAKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHNpemUoKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0yNzMsNyArMjcxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVT
dGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBERkdDb2RlQmxvY2tzIG1fZGZnQ29kZUJsb2Nr
czsKKyAgICAgICAgQ29kZUJsb2NrU2V0IG1fY29kZUJsb2NrczsKICAgICAgICAgSklUU3R1YlJv
dXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAgICAgICAgIEZpbmFsaXplck93bmVyIG1fZmlu
YWxpemVyT3duZXI7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5
ICs5Niw5IEBAIHZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ28KICAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFjaygpKTsKIH0KIAotdm9p
ZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29u
c2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0Nv
ZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCit2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRp
bmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQogewotICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJS
b3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2lu
KCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKIH0KIAog
dm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgQ29kZUJs
b2NrU2V0OwogICAgIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwotICAgIGNsYXNzIERGR0NvZGVC
bG9ja3M7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0
OwogICAgIGNsYXNzIFZNOwpAQCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfkpTU3RhY2soKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRp
dmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgREZHQ29kZUJs
b2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmKTsKIAogICAgICAgICBS
ZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1f
cmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAgICBSZWdpc3RlciogZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9S
ZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBhc0lubGluZUNhbGxGcmFt
ZSgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQzMigpIGNvbnN0OwogICAgICAg
ICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSB1bmJveGVkRG91
YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCogdW5ib3hlZENlbGwoKSBjb25zdDsKICAgICAg
ICAgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgdGFnKCkgY29uc3Q7
CkBAIC05Niw2ICs5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSW5zdHJ1Y3Rp
b24qIHZQQzsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwog
ICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBlbmNvZGVkVmFsdWU7CisgICAgICAg
ICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICB9IHU7CiAgICAgfTsKIApAQCAtMTg4LDYgKzE5
MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuICEhcGF5bG9hZCgpOwogICAg
IH0KIAorICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIFJlZ2lzdGVyOjp1bmJveGVkRG91YmxlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1Lm51bWJlcjsKKyAgICB9CisKICAgICBBTFdB
WVNfSU5MSU5FIEpTQ2VsbCogUmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkgY29uc3QKICAgICB7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRp
b25DaGVjaygpCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMy
KE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksIEFic29sdXRl
QWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAg
IEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0
aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckVudHJ5KCkpLCBBYnNvbHV0ZUFkZHJl
c3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKICAgICBKSVRT
dHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3B0aW1pemUpOwogICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgQVNTRVJUKCFtX2J5
dGVjb2RlT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAko
cmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTIgQEAgRlRMOjpKSVRDb2RlKiBKSVRDb2Rl
OjpmdGwoKQogICAgIHJldHVybiAwOwogfQogCitGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogSklU
Q29kZTo6ZnRsRm9yT1NSRW50cnkoKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NSZWZQdHI8SklUQ29kZT4gSklUQ29kZTo6aG9z
dEZ1bmN0aW9uKEpJVENvZGU6OkNvZGVSZWYgY29kZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuaykpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIGNs
YXNzIENvbW1vbkRhdGE7CiBjbGFzcyBKSVRDb2RlOwogfQogbmFtZXNwYWNlIEZUTCB7CitjbGFz
cyBGb3JPU1JFbnRyeUpJVENvZGU7CiBjbGFzcyBKSVRDb2RlOwogfQogCkBAIC0xNzQsNiArMTc1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKTsK
ICAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CiAgICAgdmlydHVhbCBGVEw6OkpJVENv
ZGUqIGZ0bCgpOworICAgIHZpcnR1YWwgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9T
UkVudHJ5KCk7CiAgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3RhY2sqLCBDYWxsRnJhbWUq
LCBWTSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDE1NDk2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM2LDE2ICsxMDM2LDMyIEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6ZWQgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9Ci0gICAgICAgICAgICBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCk7Ci0gICAgICAgIFJlZlB0cjxDb2Rl
QmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmICghdm0ud29ya2xpc3QpCi0gICAgICAgICAgICB2bS53b3JrbGlzdCA9
IERGRzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1
ZXM7CisgICAgICAgIGlmIChieXRlY29kZUluZGV4KQorICAgICAgICAgICAgbnVtVmFyc1dpdGhW
YWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bnVtVmFyc1dpdGhWYWx1ZXMgPSAwOworICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFu
ZGxlVmFsdWVzKAorICAgICAgICAgICAgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZh
cnNXaXRoVmFsdWVzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtdXN0SGFuZGxl
VmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5k
bGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9w
ZXJhbmQpCisgICAgICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5k
KCkgPT0gQ29kZUZvckNvbnN0cnVjdCkgeworICAgICAgICAgICAgICAgIC8vIFVnaC4gSWYgd2Un
cmUgaW4gYSBjb25zdHJ1Y3RvciwgdGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdl
LiBJdCB3aWxsCisgICAgICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vz
bid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAgICAgICAg
ICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBn
cm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKKyAgICAgICAgICAgICAgICAvLyBzbyB3
ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQgaW50byBVbmRlZmluZWQuCisgICAgICAg
ICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAotICAgICAgICAg
ICAgY2FsbEZyYW1lLCBuZXdDb2RlQmxvY2suZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJ
bmRleCwgY2FsbGJhY2ssCi0gICAgICAgICAgICB2bS53b3JrbGlzdC5nZXQoKSk7CisgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBERkc6OkRGR01vZGUs
IGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCksCisgICAgICAgICAgICB2bS5lbnN1
cmVXb3JrbGlzdCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRp
b25TdWNjZXNzZnVsKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA1NCwxNSArMTA3MCw2IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIENvZGVCbG9jayogb3B0
aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwogICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
ICAgICAKLSAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
RlRMSklUKSB7Ci0gICAgICAgIC8vIEZUTCBKSVQgZG9lc24ndCBzdXBwb3J0IE9TUiBlbnRyeSB5
ZXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjUKLSAgICAgICAgCi0gICAgICAgIC8vIERvbid0IGF0dGVtcHQgT1NSIGVudHJ5IGFnYWlu
LgotICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCiAgICAgaWYgKHZvaWQqIGFkZHJlc3MgPSBERkc6OnByZXBh
cmVPU1JFbnRyeShjYWxsRnJhbWUsIG9wdGltaXplZENvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCkp
IHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgZGF0
YUxvZygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMjAgKzkwLDYgQEAgSW50cmluc2lj
IE5hdGl2ZUV4ZWN1dGFibGU6OmludHJpbnNpYygpIAogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
SklUKQotLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBmb3IgamV0dGlzb25pbmcgY29kZSBibG9ja3Mu
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxvY2soVk0m
IHZtLCBSZWZQdHI8VD4mIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7Ci0gICAgUmVmUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2Rl
QmxvY2sucmVsZWFzZSgpOwotICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4o
Y29kZUJsb2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgIGNvZGVCbG9j
a1RvSmV0dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICB2bS5oZWFwLmpldHRpc29u
REZHQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pl
dHRpc29uLnJlbGVhc2UoKSkpOwotfQotI2VuZGlmCi0KIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRF
eGVjdXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJsZSkgfTsK
IAogI2lmIEVOQUJMRShKSVQpCkBAIC0xMjUsMTIgKzExMSw2IEBAIHZvaWQgU2NyaXB0RXhlY3V0
YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICAKICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVy
cmVkKCkpOwogICAgIAotICAgIGlmIChKSVRDb2RlOjppc0pJVChnZW5lcmljQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKSB7Ci0gICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KAotICAg
ICAgICAgICAgc2l6ZW9mKENvZGVCbG9jaykgKyBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCkt
PnNpemUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHNpemVvZihDb2RlQmxvY2spKTsKLSAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQgPSBnZW5lcmljQ29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICAKICAg
ICBSZWZQdHI8Q29kZUJsb2NrPiBvbGRDb2RlQmxvY2s7CkBAIC0yNTAsMjYgKzIzMCwzMiBAQCBQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgaWYgKGNsYXNzSW5m
bygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
a2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sq
IGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KAorICAgICAgICAgICAgZXhl
Y3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgICAgIFJl
ZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygK
LSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9l
dmFsQ29kZUJsb2NrKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJs
ZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJs
b2NrLCAqYmFzZWxpbmUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGlu
ZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGlmIChjbGFzc0lu
Zm8oKSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBQcm9n
cmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPigK
KyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCkpOwogICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRS
ZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJz
ZWRCbG9jaywgKmV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jaykpOwotICAgICAgICByZXN1
bHQtPnNldEFsdGVybmF0aXZlKGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAg
ICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAgICAg
IHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6aW5mbygpKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgRnVuY3Rpb25Db2RlQmxvY2sq
IGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPigKKyAgICAgICAgZXhl
Y3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpLT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgUmVm
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2Rl
QmxvY2soCi0gICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+
Y29kZUJsb2NrRm9yKGtpbmQpKSk7Ci0gICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShleGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRC
bG9jaywgKmJhc2VsaW5lKSk7CisgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzc2LDE1ICszNjIsNiBAQCBpbmxpbmUgY29u
c3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKCiAgICAgfQogfQogCi0jaWYgRU5BQkxFKEpJ
VCkKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCi17
Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fZXZhbENvZGVCbG9jayk7Ci0gICAgbV9qaXRD
b2RlRm9yQ2FsbCA9IG1fZXZhbENvZGVCbG9jay0+aml0Q29kZSgpOwotICAgIEFTU0VSVCghbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
CiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKQEAgLTQyNiwxNSArNDAzLDYgQEAgSlNPYmplY3Qq
IFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogICAgIHJldHVybiBlcnJvci50b0Vycm9y
T2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlKTsKIH0KIAotI2lmIEVOQUJMRShK
SVQpCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZt
KQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX3Byb2dyYW1Db2RlQmxvY2spOwotICAg
IG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxvY2stPmppdENvZGUoKTsKLSAgICBB
U1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci19Ci0jZW5kaWYKLQogdm9p
ZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShKSVQpCkBA
IC01MTgsMjIgKzQ4Niw2IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6
OmIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgRnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJiB2bSkKLXsKLSAg
ICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2ppdENv
ZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRDb2RlKCk7Ci0gICAgbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRDb2RlV2l0aEFy
aXR5Q2hlY2soKTsKLX0KLQotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1p
emVkQ29kZUZvckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0s
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNvbnN0
cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmppdENvZGVXaXRo
QXJpdHlDaGVjaygpOwotfQotI2VuZGlmCi0KIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMTAgKzQ0NSw2IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSNpZiBFTkFCTEUoSklUKQotICAg
IHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0jZW5kaWYKLQogICAgIEV2YWxDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ldmFsQ29kZUJsb2Nr
LmdldCgpOwpAQCAtNTA2LDEwICs1MDIsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0
aW1pemVkQ29kZShWTSYpOwotI2VuZGlmCi0KICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxv
Y2soKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKTsKQEAg
LTU4MSwxMCArNTczLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwotI2VuZGlmCi0KICAgICBib29s
IGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2tGb3JDYWxsOwpAQCAtNTk1LDEwICs1ODMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAg
ICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYpOwotI2VuZGlmCi0K
ICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAgLTYwOSwxOCArNTkzLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CiAgICAg
fQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAotICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yQ2FsbCh2bSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENv
ZGVGb3JDb25zdHJ1Y3Qodm0pOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgICAgIAog
ICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAg
IHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTQ5NjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsx
MjksNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYodW5zaWduZWQs
IGxsdm1CYWNrZW5kT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZt
T3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtU2l6ZUxldmVsLCAw
KSBcCisgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSkgLyogZm9vbC1wcm9vZiB3YXkgb2Yg
Y2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhlIEZUTC4gOy0pICovXAogICAgIFwKICAg
ICB2KGJvb2wsIGVuYWJsZUNvbmN1cnJlbnRKSVQsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBu
dW1iZXJPZkNvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcygyKSAt
IDEpIFwKQEAgLTE1Niw5ICsxNTcsMTQgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5n
ZTsKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAxMDAwKSBc
CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIDEwMDAp
IFwKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24sIDEwMDApIFwKLSAgICBc
CiAgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsIDEpIFwKLSAg
ICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSkgXAorICAg
IHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSwgMTUpIFwKKyAgICBc
CisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcCwgMjUwMDAp
IFwKKyAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24sIDEwMDApIFwKKyAg
ICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yTG9vcCwgMSkgXAorICAgIHYo
aW50MzIsIGZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KSBcCisgICAgdih1
bnNpZ25lZCwgZnRsT1NSRW50cnlGYWlsdXJlQ291bnRGb3JSZW9wdGltaXphdGlvbiwgMTUpIFwK
ICAgICBcCiAgICAgdihpbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwKSBcCiAgICAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MTAsNiArNzEwLDE1IEBAIHZvaWQgVk06OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENv
bnNlcnYKICAgICAgICAgfQogICAgIH0KIH0KKworREZHOjpXb3JrbGlzdCogVk06OmVuc3VyZVdv
cmtsaXN0KCkKK3sKKyAgICBpZiAoIURGRzo6ZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERGRzo6
Z2xvYmFsV29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBtYWtl
VXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1ha2VV
c2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2NrPiBt
X2FwaUxvY2s7CkBAIC0yNzQsMTcgKzI3OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBO
dW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKICAgICAgICAgRGF0ZUluc3RhbmNlQ2FjaGUg
ZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdURjo6U2ltcGxlU3RhdHMgbWFjaGluZUNvZGVC
eXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUOwotICAgICAgICBWZWN0b3I8Q29kZUJs
b2NrKj4gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQ7Ci0gICAgICAgIHZvaWQgc3RhcnRlZENvbXBp
bGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgewotICAgICAgICAgICAgY29kZUJs
b2Nrc0JlaW5nQ29tcGlsZWQuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGZpbmlzaGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2NrID09IGNvZGVC
bG9ja3NCZWluZ0NvbXBpbGVkLmxhc3QoKSk7Ci0gICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdD
b21waWxlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KIAogICAgICAgICB2b2lkIHNldEluRGVm
aW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3BlcnR5KQogICAgICAgICB7CkluZGV4
OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTU0OTYzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wOS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIENvZGVCbG9jazo6amV0dGlzb24oKSBzaG91bGQgYmUgaW1wbGlj
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDU2
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgTWFrZSBpdCBwb3NzaWJsZSB0byBnZXQgYSBSZWZDb3VudGVkQXJyYXkncyByZWZDb3VudCgp
IHNvIHRoYXQgYSBDb2RlQmxvY2sKKyAgICAgICAgY2FuIGNvbXB1dGUgaXRzIHBhcnQgb2YgdGhl
IGZvb3RwcmludCBvZiBhbiBJbnN0cnVjdGlvbiBhcnJheSBieSBkb2luZworICAgICAgICBzb21l
dGhpbmcgbGlrZSBzaXplKCkgLyByZWZDb3VudCgpLgorCisgICAgICAgICogd3RmL1JlZkNvdW50
ZWRBcnJheS5oOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6OnJlZkNvdW50KToKKwog
MjAxMy0wOS0wMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gTm8gbmVlZCBmb3IgSGFyZEF1dG9yZWxlYXNlLCB3aGljaCBpcyBzYW1lIGFzIENGQnJpZGdp
bmdSZWxlYXNlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAkocmV2aXNpb24gMTU0OTYz
KQorKysgU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMiw2ICsxMTIsMTMgQEAgcHVibGljOgogICAgICAgICBmYXN0RnJlZShIZWFkZXI6OmZyb21Q
YXlsb2FkKG1fZGF0YSkpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpLT5yZWZDb3VudDsKKyAg
ICB9CisgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFt
X2RhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210381</attachid>
            <date>2013-09-03 10:15:23 -0700</date>
            <delta_ts>2013-09-03 10:38:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>154428</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MiBA
QAorMjAxMy0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBERkcgc2hvdWxkIGJlIGFibGUgdG8gdGllci11cCBhbmQgT1NSIGVudGVyIGludG8gdGhl
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEy
ODM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBERkcgdG8gdGllci11cCBpbnRvIHRo
ZSBGVEwuIFRoaXMgd29ya3MgaW4gYm90aAorICAgICAgICBvZiB0aGUgZXhwZWN0ZWQgdGllci11
cCBtb2RlczoKKyAgICAgICAgCisgICAgICAgIFJlcGxhY2VtZW50OiBmcmVxdWVudGx5IGNhbGxl
ZCBmdW5jdGlvbnMgZXZlbnR1YWxseSBoYXZlIHRoZWlyIGVudHJ5cG9pbnQKKyAgICAgICAgcmVw
bGFjZWQgd2l0aCBvbmUgdGhhdCBnb2VzIGludG8gRlRMLWNvbXBpbGVkIGNvZGUuIE5vdGUsIHRo
aXMgd2lsbCBiZSBhCisgICAgICAgIHNsb3ctZG93biBmb3Igbm93IHNpbmNlIHdlIGRvbid0IHll
dCBoYXZlIExMVk0gY2FsbGluZyBjb252ZW50aW9uIGludGVncmF0aW9uLgorICAgICAgICAKKyAg
ICAgICAgT1NSIGVudHJ5OiBjb2RlIHN0dWNrIGluIGhvdCBsb29wcyBnZXRzIE9TUidkIGludG8g
dGhlIEZUTCBmcm9tIHRoZSBERkcuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQg
aWYgdGhlIERGRyBkZXRlY3RzIHRoYXQgYSBmdW5jdGlvbiBpcyBhbiBGVEwgY2FuZGlkYXRlLCBp
dAorICAgICAgICBpbnNlcnRzIGV4ZWN1dGlvbiBjb3VudGluZyBjb2RlIHNpbWlsYXIgdG8gdGhl
IGtpbmQgdGhhdCB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgIHdvdWxkIHVzZS4gSWYgeW91IHRy
aXAgb24gYSBsb29wIGNvdW50IGluIGEgbG9vcCBoZWFkZXIgdGhhdCBpcyBhbiBPU1IKKyAgICAg
ICAgY2FuZGlkYXRlIChpdCdzIG5vdCBhbiBpbmxpbmVkIGxvb3ApLCB3ZSBkbyBPU1I7IG90aGVy
d2lzZSB3ZSBkbyByZXBsYWNlbWVudC4KKyAgICAgICAgT1NSIGFsbW9zdCBhbHdheXMgYWxzbyBp
bXBsaWVzIGZ1dHVyZSByZXBsYWNlbWVudC4KKyAgICAgICAgCisgICAgICAgIE9TUiBlbnRyeSBp
bnRvIHRoZSBGVEwgaXMgcmVhbGx5IGNvb2wuIEl0IHVzZXMgYSBzcGVjaWFsaXplZCBGVEwgY29t
cGlsZSBvZgorICAgICAgICB0aGUgY29kZSwgd2hlcmUgZWFybHkgaW4gdGhlIERGRyBwaXBlbGlu
ZSB3ZSByZXBsYWNlIHRoZSBvcmlnaW5hbCByb290IGJsb2NrCisgICAgICAgIHdpdGggYW4gT1NS
IGVudHJ5cG9pbnQgYmxvY2sgdGhhdCBqdW1wcyB0byB0aGUgcHJlLWhlYWRlciBvZiB0aGUgaG90
IGxvb3AuCisgICAgICAgIFRoZSBPU1IgZW50cnlwb2ludCBsb2FkcyBhbGwgbGl2ZSBzdGF0ZSBh
dCB0aGUgbG9vcCBwcmUtaGVhZGVyIHVzaW5nIGxvYWRzCisgICAgICAgIGZyb20gYSBzY3JhdGNo
IGJ1ZmZlciwgd2hpY2ggZ2V0cyBwb3B1bGF0ZWQgYnkgdGhlIHJ1bnRpbWUncyBPU1IgZW50cnkK
KyAgICAgICAgcHJlcGFyYXRpb24gY29kZSAoRlRMOjpwcmVwYXJlT1NSRW50cnkoKSkuIFRoaXMg
YXBwcm9hY2ggYXBwZWFycyB0byB3b3JrIHdlbGwKKyAgICAgICAgd2l0aCBhbGwgb2Ygb3VyIHN1
YnNlcXVlbnQgb3B0aW1pemF0aW9ucywgaW5jbHVkaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24s
CisgICAgICAgIENGQSwgYW5kIExJQ00uIExMVk0gc2VlbXMgaGFwcHkgd2l0aCBpdCwgdG9vLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpbW1lZGlhdGVseSBnaXZlcyB1cyBhIDcwJSBzcGVlZC11
cCBvbiBpbWFnaW5nLWdhdXNzaWFuLWJsdXIuIFdlIGNvdWxkCisgICAgICAgIGdldCBhIGJpZ2dl
ciBzcGVlZC11cCBieSBhZGRpbmcgc29tZSBtb3JlIGludGVsbGlnZW5jZSBhbmQgdHdlYWtpbmcg
TExWTSB0bworICAgICAgICBjb21waWxlIGNvZGUgZmFzdGVyLiBUaG9zZSB0aGluZ3Mgd2lsbCBo
YXBwZW4gZXZlbnR1YWxseSBidXQgdGhpcyBpcyBhIGdvb2QKKyAgICAgICAgc3RhcnQuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFz
ZWRPbkNvbXBpbGF0aW9uUmVzdWx0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAq
IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
RkdTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Ry
aXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAoSlND
OjpERkc6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKiBk
ZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4
dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6a2lsbEJsb2NrQW5kSXRz
Q29udGVudHMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpraWxsVW5yZWFjaGFibGVCbG9j
a3MpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3Rh
dGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlOjpyZWNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZTo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGU6OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlOjpvcHRpbWl6ZUFmdGVyV2FybVVwKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b2RlOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmZvcmNlT3B0
aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
ZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVDb21tb24pOgorICAgICAgICAqIGRmZy9E
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y3Jl
YXRlUHJlSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c1VubGlua2VkTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnVubGlua2VkTG9jYWwp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRy
eS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6T1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlOjpy
dW4pOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24pOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBk
ZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRv
RXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZTo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtVGll
clVwQ2hlY2tJbmplY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5Ub0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVh
ZHlBc3luY2hyb25vdXNseSk6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAgICAqIGRmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKiBk
ZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sp
OgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s6On5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hy
b25vdXNseSk6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSk6CisgICAgICAgICogZGZn
L0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDogQWRkZWQu
CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnbG9i
YWxXb3JrbGlzdCk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5oOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JF
bnRyeUpJVENvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJ
VENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSk6CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50
cnlKSVRDb2RlOjp+Rm9yT1NSRW50cnlKSVRDb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JP
U1JFbnRyeUpJVENvZGU6OmZ0bEZvck9TUkVudHJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JP
U1JFbnRyeUpJVENvZGU6OmluaXRpYWxpemVFbnRyeUJ1ZmZlcik6CisgICAgICAgICogZnRsL0ZU
TEZvck9TUkVudHJ5SklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JF
bnRyeUpJVENvZGU6OmVudHJ5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRy
eUpJVENvZGU6OnNldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVu
dHJ5SklUQ29kZTo6Ynl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50
cnlKSVRDb2RlOjpjb3VudEVudHJ5RmFpbHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NS
RW50cnlKSVRDb2RlOjplbnRyeUZhaWx1cmVDb3VudCk6CisgICAgICAgICogZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOgorICAgICAgICAqIGZ0bC9GVExP
U1JFbnRyeS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OnByZXBhcmVPU1JFbnRyeSk6
CisgICAgICAgICogZnRsL0ZUTE9TUkVudHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIGZ0bC9GVExP
dXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNyYXNoTm9uVGVybWluYWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y3Jhc2gpOgorICAgICAgICAqIGZ0bC9GVExTdGF0
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6dW5ib3hlZERvdWJs
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIGppdC9KSVRDb2RlLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6ZnRsRm9yT1NSRW50cnkpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChK
U0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk06OmVuc3VyZVdvcmtsaXN0KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisK
IDIwMTMtMDktMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBD
b2RlQmxvY2s6OmpldHRpc29uKCkgc2hvdWxkIGJlIGltcGxpY2l0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM2OSw2ICszNjksMTggQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNw
ZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87
IH07CiAJCTBGRDhBMzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2
QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi87IH07CiAJCTBGRDhBMzE0MTdENDMyNkMw
MENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4
QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIw
MENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3
RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAg
LyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVu
dHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhB
MzFDMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TE9TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDhBMzFEMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5jcHAgKi87IH07CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEOEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwICovOyB9OworCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZEOEEzMjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgKi87IH07CisJCTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdC
M0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2
aWF0ZWRUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNE
QTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8q
IERGR1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07
CkBAIC0xNTU4LDYgKzE1NzAsMTggQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNw
ZWN1bGF0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNw
ZWN1bGF0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEOEEzMTEx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2RlQmxvY2tTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQ4QTMxNTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50
cnlKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHA7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQw
IC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExGb3JPU1JFbnRyeUpJVENvZGUuaDsgcGF0aCA9IGZ0bC9GVExGb3JPU1JFbnRyeUpJ
VENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTcxN0Q1MUYyMjAw
Q0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTE9TUkVudHJ5LmNwcDsgcGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExP
U1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFbnRyeS5o
OyBwYXRoID0gZnRsL0ZUTE9TUkVudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDhBMzFEMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxRTE3RDUxRjU3
MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgcGF0
aCA9IGRmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZn
L0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDhBMzIzMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwOyBwYXRoID0gZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyNDE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHBhdGggPSBkZmcvREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRU
eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExBYmJyZXZpYXRlZFR5cGVzLmg7IHBhdGggPSBmdGwv
RlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRC
MkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMVmFsdWVGcm9tQmxvY2suaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZyb21CbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyog
REZHV29ya2xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
V29ya2xpc3QuY3BwOyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI1MzksNiArMjU2Myw4IEBACiAJCQkJQTdGMjk5NjkxN0EwQkI2NzAw
MTA0MTdBIC8qIEZUTEZhaWwuY3BwICovLAogCQkJCUE3RjI5OTZBMTdBMEJCNjcwMDEwNDE3QSAv
KiBGVExGYWlsLmggKi8sCiAJCQkJMEZFQTBBMkIxNzBCNjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1h
dHRlZFZhbHVlLmggKi8sCisJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAgKi8sCisJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TEZvck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0IwMEJCNzIy
QyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3MDk2MDY5
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLApAQCAtMjU1MSw2ICsyNTc3
LDggQEAKIAkJCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0u
Y3BwICovLAogCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5oICovLAogCQkJCUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZh
bHVlLmggKi8sCisJCQkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNw
cCAqLywKKwkJCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCAqLywK
IAkJCQkwRjIzNUJDNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8sCiAJCQkJ
MEYyMzVCQzcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCAqLywKIAkJCQkwRjIzNUJD
ODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovLApAQCAt
MzUyNCw2ICszNTUyLDggQEAKIAkJCQlBN0Q4OUNFRjE3QTBCOENDMDA3NzNBRDggLyogREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGRDgyRTUyMTQxREFFREUwMDE3
OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0
IC8qIERGR09TUkVudHJ5LmggKi8sCisJCQkJMEZEOEEzMUQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkQ4QTMxRTE3RDUxRjU3
MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMw
OTc4RTE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEZDMDk3Njgx
NDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLywKIAkJCQkwRjIzNUJFNzE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovLApAQCAtMzU2Niw2ICszNTk2LDEyIEBA
CiAJCQkJMEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAq
LywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJ
MEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwICovLAorCQkJCTBGRDhBMzIwMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0lu
amVjdGlvblBoYXNlLmggKi8sCisJCQkJMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLywKKwkJCQkwRkQ4QTMyMjE3RDUx
RjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywK
KwkJCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZEOEEzMjQxN0Q1MUY1NzAwQ0Ey
QzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAq
LywKIAkJCQkwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAgKi8sCiAJCQkJMEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4MkM1RTggLyogREZH
VW5pZmljYXRpb25QaGFzZS5jcHAgKi8sCkBAIC0zOTc3LDYgKzQwMTMsNyBAQAogCQkJCTBGM0Iz
QTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291
cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgw
OTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNTcs
NiArNDA5NCw3IEBACiAJCQkJMTRCQTdBOTgxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZp
c2l0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBE
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFF
MzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4g
SGVhZGVycyAqLywKQEAgLTQyOTIsNiArNDMzMCw3IEBACiAJCQkJMEYxMzkxMkExNjc3MUMzNjAw
OUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0
aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzE2LDYgKzQzNTUsNyBA
QAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzFBMTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JP
U1JFbnRyeUpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJD
N0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYw
RTE3MDcwODAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE3MTJCNDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC00MzQ1LDYgKzQzODUsNyBAQAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5
N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjIxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBT
dGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKQEAgLTQzNjgsNiArNDQwOSw3
IEBACiAJCQkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyog
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZy
b21WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYgKzQ4MzEsNyBAQAogCQkJCTBGOEY5
NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEz
MDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENvbW1vbklkZW50aWZpZXJzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAKIAkJCQkwRjJCNjZERTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0Iy
IC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDg4NSw2ICs0OTI5LDcgQEAKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0
MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjkxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVF
OCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzRCMTQ5
MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTA1
OSw2ICs1MTA0LDcgQEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJv
dG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAv
KiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMTkxN0Q1MUYy
MjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC01MTExLDYgKzUxNTcsNyBAQAogCQkJCTE0MjgwODQxMTA3RUMw
OTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3
QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJD
NTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTUxNDEsNiArNTE4OCw3IEBACiAJCQkJQkNDRjBE
MEMwRUYwQjhBNTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUMyREY0NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzg2NTU1MTE4
Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsx
NDc5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwg
bV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5t
X2lzQ29uc3RydWN0b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAg
ICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgq
b3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5r
ZWRDb2RlLmdldCgpKQogICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVy
Lm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkK
ICAgICAsIG1fdm0ob3RoZXIubV92bSkKQEAgLTE1MjksNiArMTUzMCw3IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENv
ZGVCbG9jay0+bV9udW1WYXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJs
b2NrLT5pc0NvbnN0cnVjdG9yKCkpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVl
KQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2Vk
Q29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVC
bG9jaykKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25l
ckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxv
Y2stPnZtKCkpCkBAIC0yMzc0LDE3ICsyMzc2LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpi
YXNlbGluZVZlcnNpb24oKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpo
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7
CisgICAgcmV0dXJuIEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBl
KCksIHR5cGVUb1JlcGxhY2UpOworfQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoKQogewotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBl
KCkpKTsKLSAgICBib29sIHJlc3VsdCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVu
dCgpLT5qaXRUeXBlKCksIGppdFR5cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxh
Y2VtZW50KCktPmppdFR5cGUoKSkpOwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0
aGlzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoaml0VHlwZSgpKTsKIH0KICNlbmRpZgogCkBAIC0zMDE5LDEwICszMDE4LDEw
IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9u
RGVmZXJyZWQ6CiAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1l
U29vbigpIGJ1dCB3ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlv
blNsb3dQYXRoQ29uY3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAt
MzAzMCwxNiArMzAyOSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNo
b2xkCiAgICAgICAgIC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwg
ZXZlbnR1YWxseSByZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0
aW1pemVkIGNvZGUgcmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0
ZWQ6CiAgICAgICAgIC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAg
Y291bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDgsNyArMzA4LDggQEAgcHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3Rh
dGU7IH0KIAotICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7Cisg
ICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBp
cyBteSBKSVRUeXBlCiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NTcs
NiArOTU4LDggQEAgcHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAg
ICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFu
ZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRp
b247CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5j
ZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7
CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CkBAIC0xNTE1LDYgKzE1MjAsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNh
c2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGVja1Rp
ZXJVcEFuZE9TUkVudGVyOgorICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgIC8vIFdlIHByZXRl
bmQgdGhhdCBpdCBjYW4gZXhpdCBiZWNhdXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUu
CisgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBVbnJlYWNoYWJsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0
MCwxOSArMzE0MCwxOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyKQogICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7CiAKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoTG9vcEhpbnQpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92
bS0+d2F0Y2hkb2cuaXNFbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a1dhdGNoZG9nVGltZXIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
RW1pdCBhIHBoYW50b20gbm9kZSB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBhIHBsYWNlaG9sZGVy
Ci0gICAgICAgICAgICAgICAgLy8gbm9kZSBmb3IgdGhpcyBieXRlY29kZSBvcC4KLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwotICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVl
KEpTVmFsdWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQgPj0gMCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aW5pdF9sYXp5X3JlZyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjMz
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7
CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBo
LmtpbGxCbG9jayhibG9jayk7CisgICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0Nv
bnRlbnRzKGJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzAsMTYgKzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBo
LnJlc2V0UmVhY2hhYmlsaXR5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChi
bG9jay0+aXNSZWFjaGFibGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShi
bG9jayk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVu
cmVhY2hhYmxlQmxvY2tzKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSAr
MzExLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVh
Y2hhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsK
LSAgICAgICAgQVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTsp
Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5k
ZXhdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspCi0gICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2st
PmF0KG5vZGVJbmRleCkpOwotICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxv
Y2spOwotICAgIH0KLSAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayog
YmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRp
c29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSw2ICsxMTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgY2Fz
ZSBJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CkBAIC0xMzMsNiAr
MTM0LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxl
OgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50
OgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsOSArNTUsOSBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1v
ZGUsCi0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0
KQorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2Rl
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNW
YWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwogICAg
IApAQCAtNjcsOCArNjcsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
ICAgICAKLSAgICBBU1NFUlQob3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKLQog
ICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCkBA
IC03Niw5ICs3NCw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAg
ICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAogICAgIGlmIChsb2dDb21waWxh
dGlvbkNoYW5nZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIs
ICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmlu
c3RydWN0aW9uQ291bnQoKSwgIlxuIik7Ci0gICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICAgICAgZGF0YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIg
d2l0aCAiLCBtb2RlLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFu
eSBzdHVicyB0aGF0IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ug
d2FudCB0bwogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9l
cyBmaW5hbGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtOTMsMjkgKzg5LDggQEAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRM
Ojpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8v
IERlcml2ZSBvdXIgc2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11
c3QgYmUgYXQgbGVhc3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBP
U1IgZW50cnkgd2l0aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1
ZXM7Ci0gICAgaWYgKG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhW
YWx1ZXMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNX
aXRoVmFsdWVzID0gMDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAg
ICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFy
c1dpdGhWYWx1ZXMpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5k
bGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0
SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0Fy
Z3VtZW50KG9wZXJhbmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFu
ZCkKLSAgICAgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUK
LSAgICAgICAgICAgICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZv
ckNvbnN0cnVjdCkgewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVj
dG9yLCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAg
ICAgICAgIC8vIGFsc28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBw
dXQgaW50byB0aGUgdmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRv
IGJlIGFuIGFjdHVhbCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZH
IHBhc3NlcywKLSAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmlu
ZyBpdCBpbnRvIFVuZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNb
aV0gPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11
c3RIYW5kbGVWYWx1ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsK
LSAgICB9CisgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29k
ZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAg
ICAgICAgIHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERG
R19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENv
ZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFs
dWU+JiwKICAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmts
aXN0KikKIHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywx
MyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRl
KiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAg
dW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQor
ICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s+IHBhc3NlZENhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVm
UHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFj
azsKICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAg
ZXhlYywgY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3
b3JrbGlzdCk7CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgbXVzdEhhbmRsZVZhbHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVz
dWx0ICE9IENvbXBpbGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlv
bkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ5ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0NiwxMCBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxh
CiAKIC8vIElmIHRoZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2UgZG8gYSBjb25jdXJyZW50IGNv
bXBpbGUuIE90aGVyd2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAvLyBjb21waWxlLiBFdmVuIGlm
IHdlIGRvIGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0
aGUgcmVzdWx0LgotQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxv
Y2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFz
c1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOworQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZSgKKyAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9k
ZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpT
VmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBj
YXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAg
IGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9T
UkVudGVyOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksOCBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6
CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5
TG9jYWw6CisgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgICAgICBicmVhazsKICNlbHNl
CiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
KCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+
aGFzVW5saW5rZWRMb2NhbCgpKSB7CisgICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5r
ZWRMb2NhbCgpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5k
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVy
YW5kKTsKKyAgICB9CiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hKTsKICAgICAgICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3Rh
bnQoKSwgIjpbIik7CkBAIC00ODcsNiArNDk0LDI5IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hh
YmlsaXR5KCkKICAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6
a2lsbEJsb2NrQW5kSXRzQ29udGVudHMoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAg
ICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAg
bV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgCisgICAga2lsbEJs
b2NrKGJsb2NrKTsKK30KKwordm9pZCBHcmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tzKCkKK3sK
KyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBudW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAga2lsbEJsb2NrQW5kSXRzQ29udGVudHMoYmxvY2spOwor
ICAgIH0KK30KKwogdm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJs
b2NrKGJhc2ljQmxvY2stPmluZGV4KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tB
bmRJdHNDb250ZW50cyhCYXNpY0Jsb2NrKik7CisgICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFi
bGVCbG9ja3MoKTsKKyAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5v
ZGUpCiAgICAgewogICAgICAgICByZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSAmJiBpc051bWVyaWNhbChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4
LDYgKzcwMiw3IEBAIHB1YmxpYzoKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hT
ZXQ8RXhlY3V0YWJsZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwog
ICAgIEJpdFZlY3RvciBtX3ByZXNlcnZlZFZhcnM7CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7
CiAgICAgRG9taW5hdG9ycyBtX2RvbWluYXRvcnM7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJh
bExvb3BzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgdm9pZCBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9
IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsg
KytpKSB7CisgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwog
ICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgICAgICByb290LT52
YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOwogICAgICAgICAgICAgY29udGludWU7
CkBAIC0xMjksOCArMTMwLDYgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6
ZSgpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShT
cGVjQ2VsbCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5h
cmd1bWVudChpKS5tYWtlVG9wKCk7Ci0gICAgICAgIAotICAgICAgICByb290LT52YWx1ZXNBdFRh
aWwuYXJndW1lbnQoaSkuY2xlYXIoKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgIE5v
ZGUqIG5vZGUgPSByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogSklUQ29kZTo6SklU
Q29kZSgpCkBAIC01OSw2ICs2MSwxNDUgQEAgdm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAg
ICAgdmFyaWFibGVFdmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6
OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LAorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+
JiByZXN1bHQpCit7CisgICAgdmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAg
ICAgY29kZUJsb2NrLCBjb2RlT3JpZ2luLCBtaW5pZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3Vs
dCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBz
dHJlYW1JbmRleCwKKyAgICBPcGVyYW5kczxKU1ZhbHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJh
bmRzPFZhbHVlUmVjb3Zlcnk+IHJlY292ZXJpZXM7CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2Nr
LCBjb2RlT3JpZ2luLCBzdHJlYW1JbmRleCwgcmVjb3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0
ID0gT3BlcmFuZHM8SlNWYWx1ZT4oT3BlcmFuZHNMaWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gcmVzdWx0LnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9
IHJlc3VsdC5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChv
cGVyYW5kKQorICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9u
Q29kZQorICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ29uc3RydWN0KSB7CisgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29u
c3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAor
ICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0
IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBo
YXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVu
dCBERkcgcGFzc2VzLAorICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0
dXJuaW5nIGl0IGludG8gVW5kZWZpbmVkLgorICAgICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5ID0gcmVjb3Zlcmllc1tpXTsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAg
ICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFj
a0FzVW5ib3hlZENlbGw6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEJv
b2xlYW46CisgICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPnIob3BlcmFuZCkuanNWYWx1ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hl
ZEludDMyOgorICAgICAgICAgICAgdmFsdWUgPSBqc051bWJlcihleGVjLT5yKG9wZXJhbmQpLnVu
Ym94ZWRJbnQzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJ
bkpTU3RhY2tBc1VuYm94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9IGpzRG91YmxlTnVt
YmVyKGV4ZWMtPnIob3BlcmFuZCkudW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSByZWNvdmVyeS5j
b25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCitib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVyLmNo
ZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkp
OworfQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxv
ZygqY29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAg
ICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5lVmVy
c2lvbigpKTsKK30KKwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAg
ICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNvb24u
XG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQg
SklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6
IEZUTC1vcHRpbWl6aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNl
dE5ld1RocmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9w
dGlvbnM6OnRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAgIGJh
c2VsaW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygq
Y29kZUJsb2NrLCAiOiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2NrKiBi
YXNlbGluZSA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1
ZShPcHRpb25zOjp0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJhc2Vs
aW5lKTsKK30KKwordm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3Vy
cmVudGx5KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGggY29u
Y3VycmVudGx5IGZvciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNlU2xv
d1BhdGhDb25jdXJyZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAg
IGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFp
bGVkOgorICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAg
ICBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9
IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6Cisg
ICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29tcGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhpcyBpcyB3ZWly
ZCAtIGl0IHdpbGwgb25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNvZGUgYmxvY2sg
KGkuZS4KKyAgICAgICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENvZGUgYmVsb25n
cyB0bykgaXMgYWxzbyBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9lc24ndCByZWFs
bHkgbWF0dGVyIHdoYXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5nIGFueXdheS4g
Tm90ZQorICAgICAgICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXphdGlvbiBhY3R1
YWxseSBtZWFucyB0aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3aWNlLiBCdXQg
dGhhdCdzIGdlbmVyYWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJlb3B0aW1pemF0
aW9ucworICAgICAgICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4KKyAgICAgICAg
Y29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAg
ICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMyBAQAogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKKyNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR0NvbW1v
bkRhdGEuaCIKICNpbmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCiAjaW5jbHVkZSAiREZHT1NS
RW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KQEAgLTkzLDggKzk1LDMxIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdm9pZCByZWNvbnN0cnVjdCgK
KyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpOworICAgIAorICAgIC8vIFRoaXMgaXMgb25s
eSBhcHBsaWNhYmxlIGlmIHdlJ3JlIGF0IGEgcG9pbnQgd2hlcmUgYWxsIHZhbHVlcyBhcmUgc3Bp
bGxlZCB0byB0aGUKKyAgICAvLyBzdGFjay4gQ3VycmVudGx5LCBpdCBhbHNvIGhhcyB0aGUgcmVz
dHJpY3Rpb24gdGhhdCB0aGUgdmFsdWVzIG11c3QgYmUgaW4gdGhlaXIKKyAgICAvLyBieXRlY29k
ZS1kZXNpZ25hdGVkIHN0YWNrIHNsb3RzLgorICAgIHZvaWQgcmVjb25zdHJ1Y3QoCisgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFt
SW5kZXgsCisgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+JiByZXN1bHQpOworCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisgICAgLy8gTkIuIEFsbCBvZiB0aGVzZSBtZXRob2RzIHRha2UgQ29kZUJsb2Nr
KiBiZWNhdXNlIHRoZXkgbWF5IHdhbnQgdG8gdXNlCisgICAgLy8gQ29kZUJsb2NrJ3MgbG9naWMg
YWJvdXQgc2NhbGluZyB0aHJlc2hvbGRzLiBJdCBzaG91bGQgYmUgYSBERkcgQ29kZUJsb2NrLgor
ICAgIAorICAgIGJvb2wgY2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoQ29kZUJs
b2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9jayopOworICAg
IHZvaWQgZG9udE9wdGltaXplQW55dGltZVNvb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVTb29uKENvZGVC
bG9jayopOworICAgIHZvaWQgZm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseShD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21w
aWxhdGlvblJlc3VsdChDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgICAgICAK
KyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBK
SVRDb21waWxlciB0byBjYWxsIHNldENvZGVSZWYoKS4KIApAQCAtMTA2LDYgKzEzMSwxMCBAQCBw
dWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQsIDEs
IDA+IHdhdGNocG9pbnRzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2
ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKyAgICBFeGVjdXRpb25Db3VudGVyIHRpZXJVcENvdW50ZXI7CisgICAgUmVm
UHRyPENvZGVCbG9jaz4gb3NyRW50cnlCbG9jazsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMjcgKzQ4LDMxIEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiAKIGJv
b2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7Ci0gICAgZmluYWxpemVDb21tb24oKTsKLSAg
ICAKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxp
emVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJ
VENvZGUobV9qaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgCisgICAgZmlu
YWxpemVDb21tb24oKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewotICAgIGZpbmFsaXplQ29tbW9uKCk7Ci0gICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gbV9saW5rQnVmZmVy
LT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29k
ZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKICAg
ICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgd2l0aEFyaXR5Q2hlY2sp
OwogICAgIAorICAgIGZpbmFsaXplQ29tbW9uKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIHZvaWQgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCiB7CisjaWYgRU5BQkxFKEZU
TF9KSVQpCisgICAgbV9qaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKG1fcGxhbi5jb2RlQmxv
Y2suZ2V0KCkpOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIAogICAgIGlmIChtX3Bs
YW4uY29tcGlsYXRpb24pCiAgICAgICAgIG1fcGxhbi52bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmFkZENvbXBpbGF0aW9uKG1fcGxhbi5jb21waWxhdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDMxIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorQmFzaWNC
bG9jayogY3JlYXRlUHJlSGVhZGVyKEdyYXBoJiBncmFwaCwgQmxvY2tJbnNlcnRpb25TZXQmIGlu
c2VydGlvblNldCwgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQmFzaWNCbG9jayogcHJlSGVh
ZGVyID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShibG9jayk7CisgICAgcHJlSGVhZGVyLT5h
cHBlbmROb2RlKAorICAgICAgICBncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJsb2NrLT5hdCgwKS0+
Y29kZU9yaWdpbiwgT3BJbmZvKGJsb2NrKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBwcmVk
ZWNlc3NvckluZGV4ID0gMDsgcHJlZGVjZXNzb3JJbmRleCA8IGJsb2NrLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpOyBwcmVkZWNlc3NvckluZGV4KyspIHsKKyAgICAgICAgQmFzaWNCbG9jayogcHJlZGVj
ZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXhdOworICAgICAgICBp
ZiAoZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgcHJlZGVjZXNzb3IpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNz
b3JJbmRleC0tXSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMubGFzdCgpOworICAgICAgICBibG9jay0+
cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNz
b3JJbmRleCA9IHByZWRlY2Vzc29yLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yID0gcHJlZGVjZXNzb3ItPnN1
Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yICE9IGJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3VjY2Vzc29yID0g
cHJlSGVhZGVyOworICAgICAgICAgICAgcHJlSGVhZGVyLT5wcmVkZWNlc3NvcnMuYXBwZW5kKHBy
ZWRlY2Vzc29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBibG9jay0+cHJlZGVjZXNz
b3JzLmFwcGVuZChwcmVIZWFkZXIpOworICAgIHJldHVybiBwcmVIZWFkZXI7Cit9CisKIGNsYXNz
IExvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAg
ICBMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCkBAIC03MCwyNiArOTUs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIW5lZWRzTmV3UHJlSGVhZGVyKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBwcmVIZWFkZXIgPSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobG9vcC5oZWFkZXIoKSk7
Ci0gICAgICAgICAgICBwcmVIZWFkZXItPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9n
cmFwaCwgU3BlY05vbmUsIEp1bXAsIGxvb3AuaGVhZGVyKCktPmF0KDApLT5jb2RlT3JpZ2luLCBP
cEluZm8obG9vcC5oZWFkZXIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHByZWRlY2Vzc29ySW5kZXggPSAwOyBwcmVkZWNlc3NvckluZGV4IDwgbG9vcC5oZWFk
ZXIoKS0+cHJlZGVjZXNzb3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsrKSB7Ci0gICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBsb29wLmhlYWRlcigpLT5wcmVkZWNl
c3NvcnNbcHJlZGVjZXNzb3JJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9k
b21pbmF0b3JzLmRvbWluYXRlcyhsb29wLmhlYWRlcigpLCBwcmVkZWNlc3NvcikpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGxvb3AuaGVhZGVyKCktPnBy
ZWRlY2Vzc29yc1twcmVkZWNlc3NvckluZGV4LS1dID0gbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNz
b3JzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnMu
dGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4
ID0gcHJlZGVjZXNzb3ItPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKLSAg
ICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvciA9IHByZWRlY2Vzc29yLT5z
dWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vz
c29yICE9IGxvb3AuaGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yID0gcHJlSGVhZGVyOwotICAgICAgICAgICAg
ICAgICAgICBwcmVIZWFkZXItPnByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzLmFwcGVuZChwcmVIZWFkZXIpOworICAgICAgICAg
ICAgY3JlYXRlUHJlSGVhZGVyKG1fZ3JhcGgsIG1faW5zZXJ0aW9uU2V0LCBsb29wLmhlYWRlcigp
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAorY2xhc3MgQmxvY2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBHcmFwaDsKK3N0
cnVjdCBCYXNpY0Jsb2NrOwogCiAvLyBJbnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyBiZWZvcmUg
YW55IGxvb3AgaGVhZGVycyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZQogLy8gYSBzaW5nbGUgbm9u
LWxvb3AgcHJlZGVjZXNzb3IuCiAKIGJvb2wgcGVyZm9ybUxvb3BQcmVIZWFkZXJDcmVhdGlvbihH
cmFwaCYpOwogCisvLyBDcmVhdGVzIGEgbmV3IGJhc2ljIGJsb2NrIChhIHByZS1oZWFkZXIpIHRo
YXQganVtcHMgdG8gdGhlIGdpdmVuIGJsb2NrLiBBbGwKKy8vIHByZWRlY2Vzc29ycyBvZiB0aGUg
Z2l2ZW4gYmxvY2sgdGhhdCBhcmVuJ3QgZG9taW5hdGVkIGJ5IGl0IGFyZSByZXJvdXRlZCB0bwor
Ly8gdGhlIHByZS1oZWFkZXIuCisvLworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFs
bHkgYW5kIGl0J3MgdXNlZCBpbiBhIHN1cmdpY2FsIGZhc2hpb24gYnkKKy8vIE9TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLgorLy8KKy8vIE5vdGUgdGhhdCBleGVjdXRpbmcgdGhpcyBmdW5jdGlv
biByZXF1aXJlcyBoYXZpbmcgYW4gaW50YWN0IGRvbWluYXRvcnMKKy8vIGFuYWx5c2lzLiBZb3Ug
c2hvdWxkIHJ1biB0aGF0IGFuYWx5c2lzIGJlZm9yZSBkb2luZyBkYW1hZ2UgdG8gdGhlIENGRywg
ZXZlbgorLy8gaWYgc2FpZCBkYW1hZ2UgaXMgZG9uZSBiZWZvcmUgeW91IGNhbGwgdGhpcy4KK0Jh
c2ljQmxvY2sqIGNyZWF0ZVByZUhlYWRlcihHcmFwaCYsIEJsb2NrSW5zZXJ0aW9uU2V0JiwgQmFz
aWNCbG9jayopOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTI3LDkgKzUyNywyMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVy
biB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBo
YXNVbmxpbmtlZExvY2FsKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAg
ICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9j
YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdW5saW5rZWRMb2NhbCgpCiAgICAgewotICAgICAgICBBU1NFUlQob3AoKSA9PSBHZXRM
b2NhbFVubGlua2VkKTsKKyAgICAgICAgQVNTRVJUKGhhc1VubGlua2VkTG9jYWwoKSk7CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDIxIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90
RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVE
b2VzTm90RXhpdCkgXAogICAgIFwKKyAgICAvKiBIaW50IHRoYXQgdGhpcyBpcyB3aGVyZSBieXRl
Y29kZSB0aGlua3MgaXMgYSBnb29kIHBsYWNlIHRvIE9TUi4gTm90ZSB0aGF0IHRoaXMgKi9cCisg
ICAgLyogd2lsbCBleGlzdCBldmVuIGluIGlubGluZWQgbG9vcHMuIFRoaXMgaGFzIG5vIGV4ZWN1
dGlvbiBzZW1hbnRpY3MgYnV0IGl0IG11c3QgKi9cCisgICAgLyogc3Vydml2ZSBhbGwgRENFLiBX
ZSB0cmVhdCB0aGlzIGFzIGJlaW5nIGEgY2FuLWV4aXQgYmVjYXVzZSB0aWVyLXVwIHRvIEZUTCBt
YXkgKi9cCisgICAgLyogd2FudCBhbGwgc3RhdGUuICovXAorICAgIG1hY3JvKExvb3BIaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAorICAgIC8qIFNwZWNpYWwgbm9kZSBmb3IgT1NSIGVu
dHJ5IGludG8gdGhlIEZUTC4gSW5kaWNhdGVzIHRoYXQgd2UncmUgbG9hZGluZyBhIGxvY2FsICov
XAorICAgIC8qIHZhcmlhYmxlIGZyb20gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1wKKyAgICBtYWNy
byhFeHRyYWN0T1NSRW50cnlMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCisgICAgXAorICAgIC8qIFRp
ZXItdXAgY2hlY2tzIGZyb20gdGhlIERGRyB0byB0aGUgRlRMLiAqL1wKKyAgICBtYWNybyhDaGVj
a1RpZXJVcEluTG9vcCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrVGllclVw
QW5kT1NSRW50ZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1RpZXJVcEF0
UmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAogICAgIC8qIEdldCB0aGUgdmFsdWUg
b2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGludG8gdGhlIFZhcmlhYmxlQWNj
ZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIHZhcmlh
YmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0ZWQgKi9cCiAgICAgLyogYXMg
c29tZXRoaW5nIG90aGVyIHRoYW4gYSBsb2NhbCBhY2Nlc3MsIGFuZCB0aHVzIGhhZCB0aGVpciBv
d24gcHJvZmlsaW5nLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTEgKzQ3LDM0IEBAIHZvaWQq
IHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKIAogICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJPU1IgaW4gIiwg
KmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAorICAgICAgICAg
ICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29k
ZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJcbiIpOwog
ICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBpZiAoY29kZUJsb2Nr
LT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgIC8vIFdoZW4gd2lsbCB0
aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBBbiBl
eGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUgYmFzZWxpbmUgSklUIGZvbGxvd2VkIGJ5IGFu
IGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVudGVyLiBXZSdyZSBmaW5lIHdpdGggYWxsb3dp
bmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5zCisgICAgICAgIC8vICAgZW5vdWdoIHdlJ2xs
IGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgdGhlIE9TUiBleGl0IGNv
c3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5kIHNvIHJlb3B0aW1pemluZyBpcyB0aGUgcmln
aHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2UgaGF2ZSByZWN1cnNp
dmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lkZXIgdGhhdCBmb28gaGFzIGEgaG90IGxvb3AK
KyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2VsZi4gV2UgaGF2ZSB0d28gZm9vJ3Mgb24gdGhl
IHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisgICAgICAgIC8vICAgYW5kIGZvbzIsIHdpdGgg
Zm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBmb28ncyBob3QgbG9vcC4gZm9vMiBnZXRzCisg
ICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUgd2F5IGludG8gdGhlIEZUTC4gVGhlbiBpdCBy
ZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAgICAgICAgLy8gICBmb28xIHdhbnRzIHRvIGdl
dCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRoaXMgY29uY2x1c2lvbiBmcm9tIGl0cworICAg
ICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0IHRvIE9TUiBlbnRlci4gQW5kIHdlJ2xsIHRl
bGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAgICAgLy8gICBtaWdodCBiZSB3b3J0aCBhZGRy
ZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0aGluayB0aGlzIGNhc2Ugd2lsbAorICAgICAg
ICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3csIGlmIGl0IGRvZXMgaGFwcGVuLCBpdCdsbCBj
YXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAgIC8vICAgdGhyYXNoaW5nLgorICAgICAgICAK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRhcmdldCBjb2RlIGJsb2NrIGlzIG5vdCBERkcu
XG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIE9TUkVudHJ5RGF0YSog
ZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5RGF0YUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgaWYgKCFlbnRyeSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFz
aWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja0luc2VydGlvblNldC5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGVu
dHJ5cG9pbnQgY3JlYXRpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExG
b3JPU1JFbnRyeU1vZGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9
PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4OworICAgICAgICBSRUxFQVNF
X0FTU0VSVChieXRlY29kZUluZGV4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJ
bmRleCAhPSBVSU5UX01BWCk7CisgICAgICAgIAorICAgICAgICAvLyBOZWVkZWQgYnkgY3JlYXRl
UHJlSGVhZGVyKCkuCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vz
c2FyeShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBt
X2dyYXBoLm1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHRh
cmdldCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBOb2RlKiBmaXJzdE5vZGUgPSBi
bG9jay0+YXQoMCk7CisgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLT5vcCgpID09IExvb3BIaW50
CisgICAgICAgICAgICAgICAgJiYgZmlyc3ROb2RlLT5jb2RlT3JpZ2luID09IENvZGVPcmlnaW4o
Ynl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQgPSBibG9jazsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghdGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdGVycmlibGUgb3V0Y29tZS4g
SXQgc2hvdWxkbid0IG9mdGVuIGhhcHBlbiBidXQgaXQgbWlnaHQKKyAgICAgICAgICAgIC8vIGhh
cHBlbiBhbmQgc28gd2Ugc2hvdWxkIGRlZmVuZCBhZ2FpbnN0IGl0LiBJZiBpdCBoYXBwZW5zLCB0
aGVuIHRoaXMKKyAgICAgICAgICAgIC8vIGNvbXBpbGF0aW9uIGlzIGEgZmFpbHVyZS4KKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmxvY2tJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgQmFz
aWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCk7CisgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IHRhcmdldC0+YXQoMCktPmNvZGVPcmlnaW47CisgICAgICAgIAor
ICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzZWxpbmUtPm51bVBh
cmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IHRh
cmdldC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGlm
ICghb2xkTm9kZSkgeworICAgICAgICAgICAgICAgIC8vIEp1c3QgZm9yIHNhbml0eSwgYWx3YXlz
IGhhdmUgYSBTZXRBcmd1bWVudCBldmVuIGlmIGl0J3Mgbm90IG5lZWRlZC4KKyAgICAgICAgICAg
ICAgICBvbGROb2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0QXJndW1lbnQsIGNvZGVPcmlnaW4sCisg
ICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7Cisg
ICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7CisgICAgICAg
IH0KKyAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNh
bGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgeworICAgICAgICAgICAgTm9kZSogcHJldmlvdXNIZWFk
ID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICAgICAgaWYg
KCFwcmV2aW91c0hlYWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gcHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RP
U1JFbnRyeUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2
YXJpYWJsZSksIEVkZ2Uobm9kZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXdS
b290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGNv
ZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oY3JlYXRlUHJlSGVhZGVyKG1fZ3JhcGgsIGlu
c2VydGlvblNldCwgdGFyZ2V0KSkpOworICAgICAgICAKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoKTsKKyAgICAgICAgbV9ncmFwaC5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICBt
X2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9Cit9OworCitib29sIHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgT1NSIEVudHJ5cG9p
bnQgQ3JlYXRpb24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8T1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBo
YXNlIGlzIG9ubHkgZm9yIGNvbXBpbGF0aW9uIHBpcGVsaW5lcyB0aGF0IGdvIHRocm91Z2ggU1NB
LCBhbmQgdGhhdAorLy8gZG8gYSBzcGVjaWFsaXplZCBPU1IgZW50cnkgY29tcGlsZS4gQ3VycmVu
dGx5IHRoYXQgbWVhbnMgRlRMLgorLy8KKy8vIENyZWF0ZXMgYW4gT1NSIGVudHJ5cG9pbnQgdGhh
dCBlc3RhYmxpc2hlcyBhbGwgYXJndW1lbnQgYW5kIGxvY2FsIHZhcmlhYmxlCisvLyB2YWx1ZXMu
IFRoaXMgZW50cnlwb2ludCBvbmx5IHdvcmtzIGZvciB0aGUgUGxhbjo6b3NyRW50cnlCeXRlY29k
ZUluZGV4LgorLy8gVW5saWtlIG9yZGluYXJ5IE9TUiBlbnRyeSBpbnRvIHRoZSBERkcsIHRoaXMg
Zm9yY2VzIGFsbCB2YXJpYWJsZXMgc2x1cnBlZAorLy8gaW4gdGhyb3VnaCBPU1IgZW50cnkgdG8g
YXBwZWFyIFRPUCB0byB0aGUgQ0ZBLiBIZW5jZSB0aGlzIHBoYXNlIG11c3QgYmUgcnVuCisvLyBl
YXJseSAtIGJlZm9yZSBkb2luZyBhbnkgQ0ZBLiBCdXQgdGhpcyBhbHNvIGRvZXMgc29tZSBhZGRp
dGlvbmFsIGhhY2tzIHRoYXQKKy8vIHJlcXVpcmUgdGhpcyB0byBydW4gYmVmb3JlIHVuaWZpY2F0
aW9uLgorCitib29sIHBlcmZvcm1PU1JFbnRyeXBvaW50Q3JlYXRpb24oR3JhcGgmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsOSArMzEsMTUgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKKyNp
bmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAi
REZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgorI2luY2x1ZGUgIkRGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSAiREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0
LmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NS
RW50cnkuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiR2V0
dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTIwMTUsNiArMjAyMSwx
ODYgQEAgZXh0ZXJuICJDIiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlbwogICAgIGNvZGVC
bG9jay0+cmVvcHRpbWl6ZSgpOwogfQogCisjaWYgRU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19P
UEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEpJVENvZGUqIGppdENvZGUgPSBj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjog
RW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAg
ICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlm
IChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikg
eworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxv
ZygiRGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBpbmRlZmlu
aXRlbHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUuXG4iKTsKKyAgICAgICAgaml0
Q29kZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJl
c2hvbGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUg
IiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RTdGF0ZTsKKyAgICBpZiAoV29ya2xpc3QqIHdv
cmtsaXN0ID0gdm0tPndvcmtsaXN0LmdldCgpKSB7CisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3
b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oCisgICAgICAgICAgICAqdm0sIENv
bXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAg
ICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAg
ICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJl
c3VsdCgKKyAgICAgICAgICAgIGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVk
UmVwbGFjZW1lbnQoKSkgeworICAgICAgICAvLyBUaGF0J3MgZ3JlYXQsIHdlJ3ZlIGNvbXBpbGVk
IHRoZSBjb2RlIC0gbmV4dCB0aW1lIHdlIGNhbGwgdGhpcyBmdW5jdGlvbiwKKyAgICAgICAgLy8g
d2UnbGwgZW50ZXIgdGhhdCByZXBsYWNlbWVudC4KKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVT
b29uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHdv
cmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCB3ZSBmaW5pc2hlZCBjb21waWxpbmcsIGJ1dCBmYWlsZWQgc29tZWhvdzsgaW4gdGhh
dCBjYXNlIHRoZQorICAgICAgICAvLyB0aHJlc2hvbGRzIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRl
bHkuCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRh
TG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vz
bid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LlxuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCisgICAgY29tcGls
ZSgKKyAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1v
ZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAorICAgICAgICBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlz
dCgpKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCisgICAg
RXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5k
ZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEpJ
VENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNv
dW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwgIlxuIik7Cisg
ICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZh
aWxGVExDb21waWxhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQor
ICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUu
XG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24oY29kZUJsb2Nr
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hl
Y2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoY29kZUJsb2NrKSkgeworICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcg
bm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJsb2NrLCAiIHlldC5cbiIpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7
CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLT53b3JrbGlzdC5nZXQoKSkgeworICAg
ICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZN
KAorICAgICAgICAgICAgKnZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVy
c2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xp
c3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0
ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIEFTU0VSVCghaml0Q29kZS0+b3Ny
RW50cnlCbG9jayk7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICAgICAgICAgIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAoQ29k
ZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSkgeworICAg
ICAgICBpZiAodm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KAorICAgICAgICAg
ICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RyZWFt
SW5kZXgpKSB7CisgICAgICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUg
PSBlbnRyeUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgICAgIGVudHJ5
Q29kZS0+Y291bnRFbnRyeUZhaWx1cmUoKTsKKyAgICAgICAgaWYgKGVudHJ5Q29kZS0+ZW50cnlG
YWlsdXJlQ291bnQoKSA8CisgICAgICAgICAgICBPcHRpb25zOjpmdGxPU1JFbnRyeUZhaWx1cmVD
b3VudEZvclJlb3B0aW1pemF0aW9uKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaml0
Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gT1NSIGVudHJ5IGZhaWxlZC4gT2ggbm8hIFRo
aXMgaW1wbGllcyB0aGF0IHdlIG5lZWQgdG8gcmV0cnkuIFdlIHJldHJ5CisgICAgICAgIC8vIHdp
dGhvdXQgZXhwb25lbnRpYWwgYmFja29mZiBhbmQgd2Ugb25seSBkbyB0aGlzIGZvciB0aGUgZW50
cnkgY29kZSBibG9jay4KKyAgICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jay5jbGVhcigpOwor
ICAgICAgICAKKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2sp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUg
PT0gV29ya2xpc3Q6OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBjb21w
aWxhdGlvbiBmYWlsZWQgYW5kIHdlIGFscmVhZHkgc2V0IHRoZSB0aHJlc2hvbGRzLgorICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBi
bG9jayAiLCAqY29kZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFu
IG9wdGltaXplZCByZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICAvLyBUaGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdHJpZ2dlciBhIGZvci1l
bnRyeSBjb21waWxlLgorICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7Cisg
ICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9y
aWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOworICAg
IENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gREZHOjpjb21waWxlKAorICAgICAg
ICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlN
b2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSwKKyAg
ICAgICAgdm0tPmVuc3VyZVdvcmtsaXN0KCkpOworICAgIAorICAgIC8vIEJ1dCB3ZSBhbHNvIHdh
bnQgdG8gdHJpZ2dlciBhIHJlcGxhY2VtZW50IGNvbXBpbGUuIE9mIGNvdXJzZSwgd2UgZG9uJ3Qg
d2FudCB0bworICAgIC8vIHRyaWdnZXIgaXQgaWYgd2UgZG9uJ3QgbmVlZCB0by4gTm90ZSB0aGF0
IHRoaXMgaXMga2luZCBvZiB3ZWlyZCBiZWNhdXNlIHdlIG1pZ2h0CisgICAgLy8gaGF2ZSBqdXN0
IGZpbmlzaGVkIGFuIEZUTCBjb21waWxlIGFuZCB0aGF0IGNvbXBpbGUgZmFpbGVkIG9yIHdhcyBp
bnZhbGlkYXRlZC4KKyAgICAvLyBCdXQgdGhpcyBzZWVtcyB1bmNvbW1vbiBlbm91Z2ggdGhhdCB3
ZSBzb3J0IG9mIGRvbid0IGNhcmUuIEl0J3MgY2VydGFpbmx5IHNvdW5kCisgICAgLy8gdG8gZmly
ZSBvZmYgYW5vdGhlciBjb21waWxlIHJpZ2h0IG5vdyBzbyBsb25nIGFzIHdlJ3JlIG5vdCBhbHJl
YWR5IGNvbXBpbGluZyBhbmQKKyAgICAvLyB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gb3B0aW1p
emVkIHJlcGxhY2VtZW50LiBOb3RlLCB3ZSBkb24ndCBkbyB0aGlzIGZvcgorICAgIC8vIG9idmlv
dXNseSBiYWQgY2FzZXMgbGlrZSBnbG9iYWwgY29kZSwgd2hlcmUgd2Uga25vdyB0aGF0IHRoZXJl
IGlzIGEgc2xpbSBjaGFuY2UKKyAgICAvLyBvZiB0aGlzIGNvZGUgYmVpbmcgaW52b2tlZCBldmVy
IGFnYWluLgorICAgIENvbXBpbGF0aW9uS2V5IGtleUZvclJlcGxhY2VtZW50KGNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCksIEZUTE1vZGUpOworICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBl
KCkgIT0gR2xvYmFsQ29kZQorICAgICAgICAmJiAhY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudCgpCisgICAgICAgICYmICghdm0tPndvcmtsaXN0LmdldCgpCisgICAgICAgICAgICB8
fCB2bS0+d29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFjZW1lbnQpID09IFdv
cmtsaXN0OjpOb3RLbm93bikpIHsKKyAgICAgICAgY29tcGlsZSgKKyAgICAgICAgICAgICp2bSwg
Y29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3Bl
cmFuZHM8SlNWYWx1ZT4oKSwKKyAgICAgICAgICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSwgdm0tPmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0K
KyAgICAKKyAgICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZv
ci1lbnRyeSBjb21waWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAg
Ly8gZW50cnkgd2lsbCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5v
dCBjbGVhciB3aGF0IHdlIHNob3VsZCBkby4KKyAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWlu
IGFmdGVyIGEgd2hpbGUgaWYgdGhhdCBoYXBwZW5zLgorICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6
OnByZXBhcmVPU1JFbnRyeSgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLT5vc3JF
bnRyeUJsb2NrLmdldCgpLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CisgICAgaWYgKGFk
ZHJlc3MpCisgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgIGVs
c2UKKyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKIH0gLy8gZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDcgQEAgdHlwZWRlZiBzaXplX3QgREZHX09QRVJB
VElPTiAoKlNfREZHT3BlcgogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBE
RkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNf
REZHT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFU
SU9OICgqVl9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50
MzJfdCwgZG91YmxlKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRU9aSikoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqKTsKQEAgLTEyNiw2ICsxMjcsNyBAQCB0eXBlZGVmIGNoYXIqIERGR19PUEVS
QVRJT04gKCpQX0RGR09wZXJhCiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09w
ZXJhdGlvbl9FU3RQUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0
eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RTUykoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BF
UkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50
MzJfdCk7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FWlop
KEV4ZWNTdGF0ZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBTdHJpbmdJbXBsKiBERkdf
T1BFUkFUSU9OICgqSV9ERkdPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsK
IHR5cGVkZWYgSlNTdHJpbmcqIERGR19PUEVSQVRJT04gKCpKc3NfREZHT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJp
bmdGcm9tQ2hhckNvZGUoRXhlY1N0YXRlKiwgaW50MzJfdCkgIFdURl9JTlRFUk5BTDsgCkBAIC0z
MDIsNiArMzA0LDExIEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AK
IAogdm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sq
KSBXVEZfSU5URVJOQUw7CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElP
TiB0cmlnZ2VyVGllclVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19P
UEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJ
bmRleCwgaW50MzJfdCBzdHJlYW1JbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VT
dFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0
eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAx
NTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NiwxMyArNDYsMTYgQEAKICNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuaCIKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuaCIKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFs
aWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIK
KyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTgxLDEzICs4NCwxMiBAQCBzdGF0aWMg
dm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiAKIFBsYW46OlBsYW4oCiAgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUs
Ci0gICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25lZCBudW1WYXJzV2l0
aFZhbHVlcykKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJh
bmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogdm0oKnBhc3NlZENvZGVCbG9j
ay0+dm0oKSkKICAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAgICAgLCBtb2RlKG1v
ZGUpCiAgICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQot
ICAgICwgbnVtVmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAgLCBtdXN0SGFu
ZGxlVmFsdWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcykK
KyAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIGNvbXBpbGF0
aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3
IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9m
aWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSksIFByb2ZpbGVyOjpERkcp
KSA6IDApCiAgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3ZWFrUmVm
ZXJlbmNlcyhjb2RlQmxvY2suZ2V0KCkpCkBAIC0xMDksNyArMTExLDcgQEAgdm9pZCBQbGFuOjpj
b21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdAogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGls
YXRpb25TY29wZTsKIAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAgICAg
ZGF0YUxvZygiREZHKFBsYW4pIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2Yg
aW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwor
ICAgICAgICBkYXRhTG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0
aCAiLCBtb2RlLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCksICJcbiIpOwogCiAgICAgQ29tcGlsYXRpb25QYXRoIHBhdGggPSBjb21w
aWxlSW5UaHJlYWRJbXBsKGxvbmdMaXZlZFN0YXRlKTsKIApAQCAtMTMzLDcgKzEzNSw3IEBAIHZv
aWQgUGxhbjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXQKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZU1TKCk7Ci0gICAg
ICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIHdp
dGggIiwgcGF0aE5hbWUsICIgaW4gIiwgbm93IC0gYmVmb3JlLCAiIG1zIik7CisgICAgICAgIGRh
dGFMb2coIk9wdGltaXplZCAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIHVzaW5nICIs
IG1vZGUsICIgd2l0aCAiLCBwYXRoTmFtZSwgIiBpbiAiLCBub3cgLSBiZWZvcmUsICIgbXMiKTsK
ICAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKICAgICAgICAgICAgIGRhdGFMb2coIiAoREZH
OiAiLCBiZWZvcmVGVEwgLSBiZWZvcmUsICIsIExMVk06ICIsIG5vdyAtIGJlZm9yZUZUTCwgIiki
KTsKICAgICAgICAgZGF0YUxvZygiLlxuIik7CkBAIC0xNDIsNiArMTQ0LDEyIEBAIHZvaWQgUGxh
bjo6Y29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXQKIAogUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocmVhZEltcGwoTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0YXRl
KQogeworICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgJiYgb3NyRW50cnlCeXRl
Y29kZUluZGV4ICE9IFVJTlRfTUFYKSB7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAg
IGRhdGFMb2coIkNvbXBpbGVyIG11c3QgaGFuZGxlIE9TUiBlbnRyeSBmcm9tIGJjIyIsIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCwgIiB3aXRoIHZhbHVlczogIiwgbXVzdEhhbmRsZVZhbHVlcywgIlxu
Iik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQorICAgIAogICAgIEdyYXBoIGRmZyh2
bSwgKnRoaXMsIGxvbmdMaXZlZFN0YXRlKTsKICAgICAKICAgICBpZiAoIXBhcnNlKGRmZykpIHsK
QEAgLTE2Miw2ICsxNzAsMTUgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJ
blRocgogICAgIHBlcmZvcm1VbmlmaWNhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9u
SW5qZWN0aW9uKGRmZyk7CiAgICAgCisgICAgaWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2Rl
KSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihk
ZmcpOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgZmluYWxpemVyID0gYWRv
cHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZh
aWxQYXRoOworICAgICAgICB9CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwor
ICAgIH0KKyAgICAKICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRh
dGUoZGZnKTsKICAgICAKQEAgLTIwNiwxMCArMjIzLDE5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0
aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZGZnLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJ
Zk5lY2Vzc2FyeShkZmcpOwogICAgIH0KIAorICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
REZHTW9kZTogeworICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgRlRMTW9kZToKKyAgICBjYXNlIEZU
TEZvck9TUkVudHJ5TW9kZTogewogI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChPcHRpb25z
Ojp1c2VFeHBlcmltZW50YWxGVEwoKQotICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlCi0gICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CisgICAg
ICAgIGlmIChGVEw6OmNhbkNvbXBpbGUoZGZnKSA9PSBGVEw6OkNhbm5vdENvbXBpbGUpIHsKKyAg
ICAgICAgICAgIGZpbmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMp
KTsKKyAgICAgICAgICAgIHJldHVybiBGYWlsUGF0aDsKKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1M
b29wUHJlSGVhZGVyQ3JlYXRpb24oZGZnKTsKQEAgLTI0NCwxMCArMjcwLDE2IEBAIFBsYW46OkNv
bXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgRlRMOjpjb21waWxlKHN0
YXRlKTsKICAgICAgICAgRlRMOjpsaW5rKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7
Ci0gICAgfQogI2Vsc2UKLSAgICBSRUxFQVNFX0FTU0VSVCghT3B0aW9uczo6dXNlRXhwZXJpbWVu
dGFsRlRMKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICAKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAg
ICBwZXJmb3JtRENFKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiBz
dHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxh
bigKICAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhW
YWx1ZXMpOworICAgICAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVl
cyk7CiAgICAgflBsYW4oKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZChMb25nTGl2
ZWRTdGF0ZSYpOwpAQCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlCiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIENvbXBp
bGF0aW9uTW9kZSBtb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eDsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKICAgICBPcGVyYW5kczxK
U1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwogCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxh
dGlvbj4gY29tcGlsYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAgICAg
ICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5
Qnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLm11c3RI
YW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkp
OworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwo
bV9ncmFwaCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsNyArNDg0LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAg
ICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OiB7Cisg
ICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoK
KyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgICAgICBjYXNlIENoZWNrVGll
clVwQW5kT1NSRW50ZXI6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIg
YmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAg
ICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU0OSw2ICs1NTIsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgQ2hl
Y2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgICAgICBjYXNl
IExvb3BIaW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24uCisg
ICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vz
bid0IGRvIGFueXRoaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDEx
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFN0
cmluZ0Zyb21DaGFyQ29kZToKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBVbnJl
YWNoYWJsZToKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tU
aWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgyMyw2ICs0ODIzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8vIFRoaXMgaXMg
YSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDgz
NSw2ICs0ODM2LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxv
b3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBB
bmRPU1JFbnRlcjoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NjczLDYgKzQ2NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAg
ICBjYXNlIExvb3BIaW50OgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAgIG5v
UmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKQEAgLTQ2ODAsMTEgKzQ2ODEsNzUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVW5yZWFjaGFi
bGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OworCisjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwSW5M
b29wOiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hB
ZGQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBU
cnVzdGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSks
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRD
b2RlKCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgYXBwZW5kQ2FsbCh0cmlnZ2VyVGllclVwTm93
KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjogeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0
bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50ZXIu
bV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJ
bnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsK
KyAgICAgICAgYXBwZW5kQ2FsbCh0cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBbmRPU1JFbnRlcjogeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOworICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMy
KE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVy
VXBDb3VudGVyLm1fY291bnRlcikpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnModGVtcEdQUik7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZSgKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKG1fc3RyZWFtLT5zaXplKCkpKTsKKyAg
ICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdCh0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb250RW50ZXIgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCh0
ZW1wR1BSKTsKKyAgICAgICAgZG9udEVudGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkK
KyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVy
bjoKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIFBoaToKICAg
ICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4dHJhY3RP
U1JFbnRyeUxvY2FsOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJs
aWM6CisgICAgVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJ0aWVyLXVwIGNoZWNrIGluamVjdGlvbiIpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dy
YXBoLm1fcGxhbi5tb2RlID09IERGR01vZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFPcHRp
b25zOjp1c2VFeHBlcmltZW50YWxGVEwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
I2lmIEVOQUJMRShGVExfSklUKQorICAgICAgICBGVEw6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9
IEZUTDo6Y2FuQ29tcGlsZShtX2dyYXBoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2Fu
bm90Q29tcGlsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3AoKSA9PSBMb29wSGlu
dCkgeworICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGJsb2NrLT5hdCgw
KS0+Y29kZU9yaWdpbjsKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSBub2RlVHlwZTsKKyAgICAg
ICAgICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5Db21waWxlQW5kT1NSRW50ZXIgJiYgIWNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBl
ID0gQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoYmxvY2stPmJ5dGVjb2RlQmVnaW4gPT0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBD
aGVja1RpZXJVcEluTG9vcDsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgxLCBTcGVjTm9uZSwgbm9kZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4p
IHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJu
LCBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorfTsKKworYm9vbCBwZXJmb3Jt
VGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgVGllci11cCBDaGVjayBJbmplY3Rpb24iKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0aGUgdGhpcyBjb2RlIGJs
b2NrIGNvdWxkIGJlIHJlY29tcGlsZWQgd2l0aCB0aGUgRlRMLAorLy8gYW5kIGlmIHNvLCBpdCBp
bmplY3RzIHRpZXItdXAgY2hlY2tzLgorCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2Rl
QmxvY2spCisgICAgOiBtX2RmZ0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKSB7IH0KKworUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVm
UHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7Cit9CisKK3Zv
aWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21l
UmVhZHlBc3luY2hyb25vdXNseSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1f
ZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAg
IH0KKyAgICAKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRp
bWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0
KCkpOworfQorCit2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZENvbXBsZXRlKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQpCit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIHJlc3Vs
dDogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAgIAor
ICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLmdl
dCgpLCByZXN1bHQpOworfQorCit9IH0gLy8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKwor
cHVibGljOgorICAgIHZpcnR1YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7
CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gY3JlYXRlKAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJv
bm91c2x5KENvZGVCbG9jayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBs
ZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBtX2Rm
Z0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrKCkKK3sKK30KKworUGFzc1JlZlB0cjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPgorVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjazo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2sp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrKGRmZ0NvZGVCbG9jaykpOworfQorCit2b2lkIFRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlB
c3luY2hyb25vdXNseSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0
aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29k
ZUJsb2NrLAorICAgICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAg
ICAKKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRp
b25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOwor
fQorCit2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNv
bXBpbGF0aW9uRGlkQ29tcGxldGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7Cisg
ICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAi
LCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikg
cmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnKCktPm9zckVudHJ5QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgCisgICAgLy8gRklYTUU6
IGlmIHdlIGZhaWxlZCwgd2UgbWlnaHQgd2FudCB0byBqdXN0IHR1cm4gb2ZmIE9TUiBlbnRyeSBy
YXRoZXIgdGhhbgorICAgIC8vIHRvdGFsbHkgdHVybmluZyBvZmYgdGllci11cC4KKyAgICBtX2Rm
Z0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFz
ZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSwgcmVz
dWx0KTsKK30KKworfSB9IC8vIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tf
aAorI2RlZmluZSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29k
ZUJsb2NrKTsKKworcHVibGljOgorICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jayk7CisgICAgCisgICAgdmlydHVhbCB2b2lk
IGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxh
dGlvblJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2Rl
QmxvY2s7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0
aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxX
b3JrbGlzdCgpCiB7Ci0gICAgaWYgKCFlbmFibGVDb25jdXJyZW50SklUKCkpCi0gICAgICAgIHJl
dHVybiAwOwogICAgIHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25j
ZSwgaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdv
cmtsaXN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw5ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93
IHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhp
cwogLy8gaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9y
IG5vdy4gVGhpcyBmdW5jdGlvbgogLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3Mg
bmVlZGVkLgotLy8KLS8vIFRoaXMgcmV0dXJucyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNo
b3VsZG4ndCBiZSBkb2luZyBjb25jdXJyZW50Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBn
bG9iYWxXb3JrbGlzdCgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
NTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAotaW5saW5lIGJvb2wgY2FuQ29tcGls
ZShOb2RlKiBub2RlKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiB7CisgICAgLy8gTk9URTogSWYgd2UgZXZlciBoYXZlIHBoYW50b20gYXJndW1lbnRzLCB3
ZSBjYW4gY29tcGlsZSB0aGVtIGJ1dCB3ZSBjYW5ub3QKKyAgICAvLyBPU1IgZW50ZXIuCisgICAg
CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CkBAIC04MSw2ICs4NCw4IEBAIGlubGluZSBib29sIGNhbkNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFBoaToKICAg
ICBjYXNlIFVwc2lsb246CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNl
IExvb3BIaW50OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC05MCwzOSArOTUsMzkgQEAgaW5saW5lIGJvb2wgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50
ZXI7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS0+
YXJyYXlNb2RlKCkuc3BlY3VsYXRpb24oKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTYW5lQ2hh
aW46CiAgICAgICAgIGNhc2UgQXJyYXk6OkluQm91bmRzOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNl
IFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFu
ZE9TUkVudGVyOwogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbXBhcmVFcToKQEAgLTEzMyw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUt
PmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3Jl
YXRlcjoKQEAgLTE0Miw3ICsxNDcsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2lu
ZChOdW1iZXJVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2Fz
ZSBMb2dpY2FsTm90OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
ewpAQCAtMTUyLDcgKzE1Nyw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN3
aXRjaDoKQEAgLTE2MSwxOCArMTY2LDI2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICB9
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKIH0K
IAotYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKEdyYXBoJiBncmFwaCkKIHsKKyAgICBpZiAoZ3JhcGgubV9jb2RlQmxvY2stPmNvZGVUeXBl
KCkgIT0gRnVuY3Rpb25Db2RlKSB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIGNvZGUgYmxvY2sgdGhh
dCBkb2Vzbid0IGJlbG9uZyB0byBhIGZ1bmN0aW9uLlxuIik7CisgICAgICAgIHJldHVybiBDYW5u
b3RDb21waWxlOworICAgIH0KKyAgICAKKyAgICBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gQ2Fu
Q29tcGlsZUFuZE9TUkVudGVyOworICAgIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykK
QEAgLTIxMCwyNSArMjIzLDM2IEBAIGJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIG5vZGUgYmVjYXVzZSBv
ZiBiYWQgdXNlIGtpbmQ6ICIsIGVkZ2UudXNlS2luZCgpLCAiIGluIG5vZGU6XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGdyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IWNhbkNvbXBpbGUobm9kZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FuQ29tcGlsZShub2Rl
KSkgeworICAgICAgICAgICAgY2FzZSBDYW5ub3RDb21waWxlOiAKICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIkZUTCByZWplY3Rpbmcgbm9kZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICBncmFw
aC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21w
aWxlOgorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gQ2FuQ29tcGlsZUFuZE9TUkVudGVy
ICYmIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJGVEwgZGlzYWJsaW5nIE9TUiBlbnRyeSBiZWNhdXNlIG9mIG5vZGU6XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9k
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IENhbkNvbXBp
bGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIENhbkNvbXBpbGVBbmRPU1JFbnRlcjoKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBp
ZiB3ZSBjYW4gY29tcGlsZSBhbnl0aGluZyBhZnRlciBhIGZvcmNlLWV4aXQuCiAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
LWJvb2wgY2FuQ29tcGlsZShERkc6OkdyYXBoJik7CitlbnVtIENhcGFiaWxpdHlMZXZlbCB7Cisg
ICAgQ2Fubm90Q29tcGlsZSwKKyAgICBDYW5Db21waWxlLAorICAgIENhbkNvbXBpbGVBbmRPU1JF
bnRlcgorfTsKKworQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCitGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29k
ZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSgpCit7
Cit9CisKK0Zvck9TUkVudHJ5SklUQ29kZSogRm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JF
bnRyeSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgRm9yT1NSRW50cnlKSVRDb2Rl
Ojppbml0aWFsaXplRW50cnlCdWZmZXIoVk0mIHZtLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3Rl
cnMpCit7CisgICAgbV9lbnRyeUJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bUNh
bGxlZVJlZ2lzdGVycyAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJ
VENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRD
b2RlX2gKKyNkZWZpbmUgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGlu
dG8gdGhlIEZUTCBoYXMgYSBudW1iZXIgb2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9u
bHkgaGFwcGVucyB0aHJvdWdoIHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBo
YXZlIHRoZWlyCisvLyAgIG93biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8K
Ky8vIC0gV2Ugb25seSBPU1IgZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwg
aW5saW5lIGNhbGwgZnJhbWUuCisvLworLy8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBh
bGxvd3MgZW50cnkgdGhyb3VnaCBvbmx5IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9y
T1NSRW50cnlKSVRDb2RlIDogcHVibGljIEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9y
T1NSRW50cnlKSVRDb2RlKCk7CisgICAgfkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAg
IHZvaWQgaW5pdGlhbGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0
ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZW50cnlCdWZmZXI7IH0KKyAgICAKKyAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQg
dmFsdWUpIHsgbV9ieXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9p
ZCBjb3VudEVudHJ5RmFpbHVyZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsrOyB9CisgICAgdW5z
aWduZWQgZW50cnlGYWlsdXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5RmFpbHVyZUNv
dW50OyB9CisgICAgCisgICAgRm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBTY3JhdGNoQnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBPbmx5
IGZvciBPU1IgZW50cnkgY29kZSBibG9ja3MuCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4
OworICAgIHVuc2lnbmVkIG1fZW50cnlGYWlsdXJlQ291bnQ7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRkxUX0pJVCkKKworI2VuZGlmIC8vIEZU
TEZvck9TUkVudHJ5SklUQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NyArNjQsOSBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAg
ICAgICAgICAgKCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSkpKTsKICAgICB9IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBu
byBleGl0IHRodW5rcy4KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5
Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIGlmIChtX2Fy
aXR5Q2hlY2suaXNTZXQoKSkKKyAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRM
aW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0
aWFsaXplQ29kZSgKICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqbV9l
bnRyeXBvaW50TGlua0J1ZmZlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
aW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNzkgKzU1LDExNCBAQCB2b2lkIGxpbmsoU3Rh
dGUmIHN0YXRlKQogICAgIC8vIExMVk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBh
cyBuZWVkZWQuCiAgICAgY29kZUJsb2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKICAgICAK
LSAgICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
b3RhbCBrbHVkZ2UgLSBMTFZNIHNob3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9u
LgorICAgIC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVu
dHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRseQorICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVy
IHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCisgICAgLy8gRklYTUU6IEV4Y2VwdCBmb3Ig
T1NSIGVudHJ5LCB0aGlzIGlzIGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ug
b3VyCisgICAgLy8gY2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjEKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZzdGF0
ZS5ncmFwaC5tX3ZtLCBjb2RlQmxvY2spOwogICAgIAotICAgIGNvbXBpbGVFbnRyeShqaXQpOwor
ICAgIE93blB0cjxMaW5rQnVmZmVyPiBsaW5rQnVmZmVyOworICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgYXJpdHlDaGVjazsKKyAgICBzd2l0Y2ggKHN0YXRlLmdyYXBoLm1fcGxhbi5tb2RlKSB7Cisg
ICAgY2FzZSBGVExNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOwogICAgIAotICAg
IC8vIFRoaXMgcGFydCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJyZW50
bHkgb25seSBjb21waWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8gVGhpcyBwYXJ0IGlzIG9ubHkg
bmVjZXNzYXJ5IGZvciBmdW5jdGlvbnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUgZnVuY3Rp
b25zLgogICAgICAgICAKLSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNoZWNrID0g
aml0LmxhYmVsKCk7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgCi0gICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZp
Y2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgotICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKLSAgICBqaXQuYWRk
UHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IHN0YWNrQ2hlY2sgPSBqaXQuYnJhbmNoUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhzdGF0ZS5ncmFwaC5tX3Zt
LmludGVycHJldGVyLT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwKLSAgICAgICAgR1BSSW5mbzo6
cmVnVDEpOwotICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFi
ZWwoKTsKLSAgICAgICAgCi0gICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAg
IGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOwotICAgIGpp
dC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0Jl
Zm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LnJldCgpOwotICAgICAgICAKLSAg
ICBzdGFja0NoZWNrLmxpbmsoJmppdCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucG9rZSgK
LSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIE9CSkVDVF9PRkZT
RVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwot
ICAgICAgICAKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCi0g
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbFN0
YWNrQ2hlY2sgPSBqaXQuY2FsbCgpOwotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBj
YWxsIHJlZ2lzdGVyIHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKLSAg
ICAvLyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5k
bGUgZXhjZXB0aW9ucy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEzNjIyCi0gICAgaml0Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOwotICAgICAgICAKLSAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICBjb21w
aWxlRW50cnkoaml0KTsKLSAgICBqaXQubG9hZDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnBh
eWxvYWRGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuYnJhbmNoMzIoCi0gICAg
ICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQot
ICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIGppdC5wb2tlKAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAg
ICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6
ZW9mKHZvaWQqKSk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkp
LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNh
bGxBcml0eUNoZWNrID0gaml0LmNhbGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRo
aXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlz
Ci0gICAgLy8gcGFydCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8g
aGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYyMgotICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Rml4dXAgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1w
KGZyb21Bcml0eUNoZWNrKTsKLSAgICAgICAgCi0gICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtC
dWZmZXIgPSBhZG9wdFB0cihuZXcgTGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBj
b2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKLSAgICBsaW5rQnVmZmVyLT5s
aW5rKGNhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOwotICAgIGxpbmtCdWZmZXItPmxp
bmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2Nv
bnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7Ci0gICAgbGlua0J1
ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHN0YXRlLmdyYXBoLm1fdm0u
Z2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAg
ICAgICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxl
IGluIHRoZSBKU1N0YWNrLgorICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU2MjkxCisgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3Rh
Y2tDaGVjayA9IGppdC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93
LAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgu
bV92bS5pbnRlcnByZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksCisgICAgICAgICAgICBH
UFJJbmZvOjpyZWdUMSk7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hl
Y2sgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4
ZWNTdGF0ZSgpOworICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5j
dGlvbikpLAorICAgICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5j
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAg
aml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIHN0YWNrQ2hlY2subGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwg
Y2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICAKKyAgICAgICAgaml0LnN0b3Jl
MzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6Okxv
Y2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0g
aml0LmNhbGwoKTsKKyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVn
aXN0ZXIgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgICAgICAv
LyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUg
ZXhjZXB0aW9ucy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzYyMgorICAgICAgICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7CisgICAgICAg
IAorICAgICAgICBhcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAgIGNvbXBpbGVFbnRy
eShqaXQpOworICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpw
YXlsb2FkRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYnJhbmNo
MzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVn
VDEsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSkpCisgICAgICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihz
dHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAg
ICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENh
bGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFy
aXR5Q2hlY2sgPSBqaXQuY2FsbCgpOworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRo
aXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlz
CisgICAgICAgIC8vIHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxl
IHRvIGhhbmRsZSBleGNlcHRpb25zLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxI
ZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0
KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNhbGwo
KTsKKyAgICAgICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAg
bGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZq
aXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICBsaW5r
QnVmZmVyLT5saW5rKGNhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOworICAgICAgICBs
aW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3Rv
ciA/IGN0aV9vcF9jb25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2sp
OworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigo
c3RhdGUuZ3JhcGgubV92bS5nZXRDVElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
RlRMRm9yT1NSRW50cnlNb2RlOiB7CisgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJhaWdo
dCBmcm9tIERGRyBjb2RlLCBhZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQorICAgICAg
ICAvLyB2YWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxkIGJl
IGdvb2QgdG8gZ28gLSBhdCB0aGlzCisgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9uZSB0
aGUgc3RhY2sgY2hlY2suIEJhc2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKKyAgICAg
ICAgLy8gY2FsbCB0byB0aGUgTExWTS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgaml0LnNldHVw
QXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uKSksCisgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2Fs
bGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0
LnJldCgpOworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5r
QnVmZmVyKAorICAgICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIAogICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlh
bGl6ZUVudHJ5cG9pbnRMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKICAgICBzdGF0
ZS5maW5hbGl6ZXItPmluaXRpYWxpemVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKKyNpbmNs
dWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1
ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRw
dXQuaCIKQEAgLTE5MSw2ICsxOTIsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1
bXBzIGVhc2llciB0byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9u
ZXh0TG93QmxvY2spOwogICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bENyYXNoZXMo
KSkKKyAgICAgICAgICAgIG1fb3V0LmNyYXNoTm9uVGVybWluYWwoKTsKKyAgICAgICAgCiAgICAg
ICAgIGlmICghbV9oaWdoQmxvY2stPmNmYUhhc1Zpc2l0ZWQpIHsKICAgICAgICAgICAgIG1fb3V0
LmNyYXNoKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNDMsNiArMjQ3LDkgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1
bWVudCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5
TG9jYWw6CisgICAgICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY29tcGls
ZUdldExvY2FsKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI2NCw2ICsyNzEsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIFZhbHVlQWRk
OgpAQCAtNTA2LDYgKzUxNCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCkKKyAgICB7CisgICAgICAgIEVu
Y29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAorICAg
ICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZl
cigpLT5kYXRhQnVmZmVyKCkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291
dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKSkpKTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKICAgICAgICAgLy8gR2V0TG9j
YWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcy4KQEAgLTUxNSw3ICs1MzAsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZh
bHVlLm1fdmFsdWUpKQorICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlw
ZSkpCiAgICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJs
ZS0+bG9jYWwoKSkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5sb2FkNjQoYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCisKKyNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkKiBw
cmVwYXJlT1NSRW50cnkoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGRmZ0NvZGVC
bG9jaywgQ29kZUJsb2NrKiBlbnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCB1bnNpZ25lZCBzdHJlYW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
OworICAgIERGRzo6SklUQ29kZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmcoKTsKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5Q29kZUJsb2Nr
LT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZUTCBPU1IgZnJv
bSAiLCAqZGZnQ29kZUJsb2NrLCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAor
ICAgICAgICAgICAgYnl0ZWNvZGVJbmRleCwgIi5cbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAo
Ynl0ZWNvZGVJbmRleCAhPSBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVj
b2RlSW5kZXgsICI7IG91cnMgaXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpTVmFsdWU+
IHZhbHVlczsKKyAgICBkZmdDb2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgZGZnQ29k
ZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsK
KyAgICAKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIg
ICAgVmFsdWVzIGF0IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOworICAgIAorICAgIGZvciAoaW50
IGFyZ3VtZW50ID0gdmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKAorICAgICAgICAgICAgZXhlYy0+cihhcmd1bWVudFRvT3Bl
cmFuZChhcmd1bWVudCkpLmpzVmFsdWUoKSA9PSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpKTsK
KyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4odmFsdWVzLm51bWJlck9mTG9jYWxzKCkpID09IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lz
dGVycyk7CisgICAgCisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICBlbnRyeUNvZGUtPmVudHJ5QnVmZmVyKCktPmRhdGFC
dWZmZXIoKSk7CisgICAgCisgICAgZm9yIChpbnQgbG9jYWwgPSB2YWx1ZXMubnVtYmVyT2ZMb2Nh
bHMoKTsgbG9jYWwtLTspCisgICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlcy5sb2NhbChsb2NhbCkpOworICAgIAorICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0
YWNrKCkuZ3JvdygKKyAgICAgICAgICAgICZleGVjLT5yZWdpc3RlcnMoKVtlbnRyeUNvZGVCbG9j
ay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmNhdXNlIHN0YWNr
IGdyb3d0aCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAg
IGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CisgICAgCisgICAgdm9pZCAqcmVz
dWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygiICAgIEVudHJ5
IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1BvaW50ZXIocmVzdWx0KSwgIlxu
Iik7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMT1NSRW50cnlfaAorI2RlZmluZSBGVExPU1JFbnRyeV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ29kZUJsb2NrOworY2xhc3MgRXhlY1N0YXRlOworCituYW1lc3BhY2UgRlRMIHsKKwordm9p
ZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSosIENvZGVCbG9jayogZGZnQ29kZUJs
b2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAor
ICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFbnRyeV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUxLDkgKzM1MSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBjYWxsKHRyYXBJ
bnRyaW5zaWMoKSk7CiAgICAgfQotICAgIHZvaWQgY3Jhc2goKQorICAgIAorICAgIHZvaWQgY3Jh
c2hOb25UZXJtaW5hbCgpCiAgICAgewogICAgICAgICBjYWxsKGludFRvUHRyKGNvbnN0SW50UHRy
KGFib3J0KSwgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKHZvaWRUeXBlKSkpKTsKKyAgICB9Cisg
ICAgdm9pZCBjcmFzaCgpCisgICAgeworICAgICAgICBjcmFzaE5vblRlcm1pbmFsKCk7CiAgICAg
ICAgIHVucmVhY2hhYmxlKCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw5IEBACiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgor
I2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKKyNp
bmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCkBAIC00MCw5ICs0MiwyNSBAQCBTdGF0ZTo6U3RhdGUoR3JhcGgmIGdyYXBo
KQogICAgICwgY29udGV4dChMTFZNQ29udGV4dENyZWF0ZSgpKQogICAgICwgbW9kdWxlKDApCiAg
ICAgLCBmdW5jdGlvbigwKQotICAgICwgaml0Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkK
ICAgICAsIGdlbmVyYXRlZEZ1bmN0aW9uKDApCiB7CisgICAgc3dpdGNoIChncmFwaC5tX3BsYW4u
bW9kZSkgeworICAgIGNhc2UgRlRMTW9kZTogeworICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYo
bmV3IEpJVENvZGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZUTEZvck9T
UkVudHJ5TW9kZTogeworICAgICAgICBSZWZQdHI8Rm9yT1NSRW50cnlKSVRDb2RlPiBjb2RlID0g
YWRvcHRSZWYobmV3IEZvck9TUkVudHJ5SklUQ29kZSgpKTsKKyAgICAgICAgY29kZS0+aW5pdGlh
bGl6ZUVudHJ5QnVmZmVyKGdyYXBoLm1fdm0sIGdyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9udW1D
YWxsZWVSZWdpc3RlcnMpOworICAgICAgICBjb2RlLT5zZXRCeXRlY29kZUluZGV4KGdyYXBoLm1f
cGxhbi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgICAgICBqaXRDb2RlID0gY29kZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKICAgICBmaW5hbGl6
ZXIgPSBuZXcgSklURmluYWxpemVyKGdyYXBoLm1fcGxhbik7CiAgICAgZ3JhcGgubV9wbGFuLmZp
bmFsaXplciA9IGFkb3B0UHRyKGZpbmFsaXplcik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDYgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogYXNJbmxpbmVDYWxsRnJhbWUoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCB1bmJveGVkSW50
MzIoKSBjb25zdDsKICAgICAgICAgYm9vbCB1bmJveGVkQm9vbGVhbigpIGNvbnN0OworICAgICAg
ICBkb3VibGUgdW5ib3hlZERvdWJsZSgpIGNvbnN0OwogICAgICAgICBKU0NlbGwqIHVuYm94ZWRD
ZWxsKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgcGF5bG9hZCgpIGNvbnN0OwogICAgICAgICBp
bnQzMl90IHRhZygpIGNvbnN0OwpAQCAtOTYsNiArOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIEluc3RydWN0aW9uKiB2UEM7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIEVuY29kZWRWYWx1ZURlc2NyaXB0b3IgZW5j
b2RlZFZhbHVlOworICAgICAgICAgICAgZG91YmxlIG51bWJlcjsKICAgICAgICAgfSB1OwogICAg
IH07CiAKQEAgLTE4OCw2ICsxOTAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVy
biAhIXBheWxvYWQoKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGRvdWJsZSBSZWdpc3Rl
cjo6dW5ib3hlZERvdWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdS5udW1iZXI7
CisgICAgfQorCiAgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIFJlZ2lzdGVyOjp1bmJveGVkQ2Vs
bCgpIGNvbnN0CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEpJVDo6
ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
UmV0dXJuKCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1
dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25l
ZCwgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRy
eSgpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291
bnRlcigpKSk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wdGltaXplKTsK
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCkp
OwogICAgIEFTU0VSVCghbV9ieXRlY29kZU9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEyIEBAIEZU
TDo6SklUQ29kZSogSklUQ29kZTo6ZnRsKCkKICAgICByZXR1cm4gMDsKIH0KIAorRlRMOjpGb3JP
U1JFbnRyeUpJVENvZGUqIEpJVENvZGU6OmZ0bEZvck9TUkVudHJ5KCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiBQYXNzUmVmUHRyPEpJ
VENvZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmsp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNTQ5ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQCBjbGFzcyBDb21tb25EYXRhOwogY2xhc3MgSklUQ29kZTsKIH0KIG5h
bWVzcGFjZSBGVEwgeworY2xhc3MgRm9yT1NSRW50cnlKSVRDb2RlOwogY2xhc3MgSklUQ29kZTsK
IH0KIApAQCAtMTc0LDYgKzE3NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uKCk7CiAgICAgdmlydHVhbCBERkc6OkpJVENvZGUqIGRmZygpOwogICAg
IHZpcnR1YWwgRlRMOjpKSVRDb2RlKiBmdGwoKTsKKyAgICB2aXJ0dWFsIEZUTDo6Rm9yT1NSRW50
cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOwogICAgIAogICAgIEpTVmFsdWUgZXhlY3V0ZShK
U1N0YWNrKiwgQ2FsbEZyYW1lKiwgVk0qKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNiwxNiArMTAzNiwz
MiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0
aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICAKLSAg
ICAgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPQotICAg
ICAgICAgICAgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpOwot
ICAgICAgICBSZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZtLndvcmtsaXN0KQotICAgICAg
ICAgICAgdm0ud29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgICAgIHVuc2ln
bmVkIG51bVZhcnNXaXRoVmFsdWVzOworICAgICAgICBpZiAoYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKKyAgICAgICAgT3BlcmFu
ZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlcygKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgICAgICYmICFv
cGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAgICAgICAgICAgICAgICYmIGNvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKKyAgICAgICAgICAgICAgICAmJiBjb2RlQmxvY2st
PnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpIHsKKyAgICAgICAgICAg
ICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1l
bnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAgICAgIC8vIGFsc28gbmV2
ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUgdmFsdWUg
Zm9yIHRoaXMsCisgICAgICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBhbiBhY3R1YWwg
dmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNzZXMsCisgICAg
ICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8g
VW5kZWZpbmVkLgorICAgICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1VuZGVm
aW5lZCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbXVzdEhhbmRsZVZh
bHVlc1tpXSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6
Y29tcGlsZSgKLSAgICAgICAgICAgIGNhbGxGcmFtZSwgbmV3Q29kZUJsb2NrLmdldCgpLCBERkc6
OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLAotICAgICAgICAgICAgdm0ud29ya2xp
c3QuZ2V0KCkpOworICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5n
ZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgbXVzdEhhbmRs
ZVZhbHVlcywgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpLAor
ICAgICAgICAgICAgdm0uZW5zdXJlV29ya2xpc3QoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
cmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTEwNTQsMTUgKzEwNzAsNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkK
ICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG9wdGltaXplZENvZGVC
bG9jay0+aml0VHlwZSgpKSk7CiAgICAgCi0gICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCkgewotICAgICAgICAvLyBGVEwgSklUIGRvZXNuJ3Qg
c3VwcG9ydCBPU1IgZW50cnkgeWV0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjI1Ci0gICAgICAgIAotICAgICAgICAvLyBEb24ndCBhdHRl
bXB0IE9TUiBlbnRyeSBhZ2Fpbi4KLSAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0
aW1lU29vbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGlmICh2b2lkKiBh
ZGRyZXNzID0gREZHOjpwcmVwYXJlT1NSRW50cnkoY2FsbEZyYW1lLCBvcHRpbWl6ZWRDb2RlQmxv
Y2ssIGJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
IHsKICAgICAgICAgICAgIGRhdGFMb2coCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwy
NiArMjMwLDMyIEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAg
ICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKICAgICAgICAgRXZhbEV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAg
RXZhbENvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oCisg
ICAgICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
KTsKICAgICAgICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBF
dmFsQ29kZUJsb2NrKAotICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpl
eGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5h
dGl2ZShleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOworICAgICAgICAgICAgQ29kZUJsb2Nr
OjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSkpOworICAgICAgICByZXN1bHQtPnNldEFsdGVy
bmF0aXZlKGJhc2VsaW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAg
ICAgaWYgKGNsYXNzSW5mbygpID09IFByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIFByb2dyYW1F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7
CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8UHJvZ3Jh
bUNvZGVCbG9jayo+KAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2Nr
LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBy
ZXN1bHQgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVC
bG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKSk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29k
ZUJsb2NrKTsKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxp
bmUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCkg
PT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICBGdW5j
dGlvbkNvZGVCbG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+
KAorICAgICAgICBleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lv
bigpKTsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5l
dyBGdW5jdGlvbkNvZGVCbG9jaygKLSAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
ICpleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpKTsKLSAgICByZXN1bHQtPnNldEFsdGVy
bmF0aXZlKGV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSk7CisgICAgICAgIENvZGVCbG9j
azo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICByZXN1bHQtPnNldEFsdGVybmF0
aXZlKGJhc2VsaW5lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2
ICsxMjksNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAgIHYodW5zaWdu
ZWQsIGxsdm1CYWNrZW5kT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICB2KHVuc2lnbmVkLCBs
bHZtT3B0aW1pemF0aW9uTGV2ZWwsIDIpIFwKICAgICB2KHVuc2lnbmVkLCBsbHZtU2l6ZUxldmVs
LCAwKSBcCisgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSkgLyogZm9vbC1wcm9vZiB3YXkg
b2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhlIEZUTC4gOy0pICovXAogICAgIFwK
ICAgICB2KGJvb2wsIGVuYWJsZUNvbmN1cnJlbnRKSVQsIHRydWUpIFwKICAgICB2KHVuc2lnbmVk
LCBudW1iZXJPZkNvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcygy
KSAtIDEpIFwKQEAgLTE1Niw5ICsxNTcsMTQgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25S
YW5nZTsKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAxMDAw
KSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIDEw
MDApIFwKICAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24sIDEwMDApIFwKLSAg
ICBcCiAgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsIDEpIFwK
LSAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSkgXAor
ICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JFbnRyeSwgMTUpIFwKKyAg
ICBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcCwgMjUw
MDApIFwKKyAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24sIDEwMDApIFwK
KyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yTG9vcCwgMSkgXAorICAg
IHYoaW50MzIsIGZ0bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KSBcCisgICAg
dih1bnNpZ25lZCwgZnRsT1NSRW50cnlGYWlsdXJlQ291bnRGb3JSZW9wdGltaXphdGlvbiwgMTUp
IFwKICAgICBcCiAgICAgdihpbnQzMiwgZXZhbFRocmVzaG9sZE11bHRpcGxpZXIsIDEwKSBcCiAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MTAsNiArNzEwLDE1IEBAIHZvaWQgVk06OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnYKICAgICAgICAgfQogICAgIH0KIH0KKworREZHOjpXb3JrbGlzdCogVk06OmVuc3Vy
ZVdvcmtsaXN0KCkKK3sKKyAgICBpZiAoIURGRzo6ZW5hYmxlQ29uY3VycmVudEpJVCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXdvcmtsaXN0KQorICAgICAgICB3b3JrbGlzdCA9IERG
Rzo6Z2xvYmFsV29ya2xpc3QoKTsKKyAgICByZXR1cm4gd29ya2xpc3QuZ2V0KCk7Cit9CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflZNKCk7CiAKICAgICAgICAgdm9pZCBt
YWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpIHsgaGVhcC5tYWNoaW5lVGhyZWFkcygpLm1h
a2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCk7IH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERG
R19KSVQpCisgICAgICAgIERGRzo6V29ya2xpc3QqIGVuc3VyZVdvcmtsaXN0KCk7CisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8SlNMb2Nr
PiBtX2FwaUxvY2s7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ5ODkpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wOS0wMyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBERkcgc2hvdWxkIGJl
IGFibGUgdG8gdGllci11cCBhbmQgT1NSIGVudGVyIGludG8gdGhlIEZUTAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyODM4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaXggaXQgdG8gY2hl
Y2sgdGhlIHJlc3VsdCBpbnN0ZWFkIG9mIHByaW50aW5nLgorCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXJzYWdsaWEuanM6CisKIDIwMTMtMDktMDMgIE1paG5lYSBP
dmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lvbnNdIFBzZXVk
by1lbGVtZW50cyBhcyByZWdpb25zIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byBKUwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXJzYWdsaWEuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXJz
YWdsaWEuanMJKHJldmlzaW9uIDE1NDk4NikKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw0ICsxMiw2
IEBAIHZhciByZXN1bHQgPSAwOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKICAgICBy
ZXN1bHQgKz0gbWFyc2FnbGlhKGksIGkgKyAxLCAxMDAwMDAwKTsKIAotcHJpbnQocmVzdWx0KTsK
K2lmIChyZXN1bHQgIT0gODIxNjM4NjI0MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7CisK
</data>
<flag name="commit-queue"
          id="232486"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210384</attachid>
            <date>2013-09-03 10:38:19 -0700</date>
            <delta_ts>2013-09-03 13:54:59 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>157297</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NSBA
QAorMjAxMy0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBERkcgc2hvdWxkIGJlIGFibGUgdG8gdGllci11cCBhbmQgT1NSIGVudGVyIGludG8gdGhl
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEy
ODM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBERkcgdG8gdGllci11cCBpbnRvIHRo
ZSBGVEwuIFRoaXMgd29ya3MgaW4gYm90aAorICAgICAgICBvZiB0aGUgZXhwZWN0ZWQgdGllci11
cCBtb2RlczoKKyAgICAgICAgCisgICAgICAgIFJlcGxhY2VtZW50OiBmcmVxdWVudGx5IGNhbGxl
ZCBmdW5jdGlvbnMgZXZlbnR1YWxseSBoYXZlIHRoZWlyIGVudHJ5cG9pbnQKKyAgICAgICAgcmVw
bGFjZWQgd2l0aCBvbmUgdGhhdCBnb2VzIGludG8gRlRMLWNvbXBpbGVkIGNvZGUuIE5vdGUsIHRo
aXMgd2lsbCBiZSBhCisgICAgICAgIHNsb3ctZG93biBmb3Igbm93IHNpbmNlIHdlIGRvbid0IHll
dCBoYXZlIExMVk0gY2FsbGluZyBjb252ZW50aW9uIGludGVncmF0aW9uLgorICAgICAgICAKKyAg
ICAgICAgT1NSIGVudHJ5OiBjb2RlIHN0dWNrIGluIGhvdCBsb29wcyBnZXRzIE9TUidkIGludG8g
dGhlIEZUTCBmcm9tIHRoZSBERkcuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQg
aWYgdGhlIERGRyBkZXRlY3RzIHRoYXQgYSBmdW5jdGlvbiBpcyBhbiBGVEwgY2FuZGlkYXRlLCBp
dAorICAgICAgICBpbnNlcnRzIGV4ZWN1dGlvbiBjb3VudGluZyBjb2RlIHNpbWlsYXIgdG8gdGhl
IGtpbmQgdGhhdCB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgIHdvdWxkIHVzZS4gSWYgeW91IHRy
aXAgb24gYSBsb29wIGNvdW50IGluIGEgbG9vcCBoZWFkZXIgdGhhdCBpcyBhbiBPU1IKKyAgICAg
ICAgY2FuZGlkYXRlIChpdCdzIG5vdCBhbiBpbmxpbmVkIGxvb3ApLCB3ZSBkbyBPU1I7IG90aGVy
d2lzZSB3ZSBkbyByZXBsYWNlbWVudC4KKyAgICAgICAgT1NSIGFsbW9zdCBhbHdheXMgYWxzbyBp
bXBsaWVzIGZ1dHVyZSByZXBsYWNlbWVudC4KKyAgICAgICAgCisgICAgICAgIE9TUiBlbnRyeSBp
bnRvIHRoZSBGVEwgaXMgcmVhbGx5IGNvb2wuIEl0IHVzZXMgYSBzcGVjaWFsaXplZCBGVEwgY29t
cGlsZSBvZgorICAgICAgICB0aGUgY29kZSwgd2hlcmUgZWFybHkgaW4gdGhlIERGRyBwaXBlbGlu
ZSB3ZSByZXBsYWNlIHRoZSBvcmlnaW5hbCByb290IGJsb2NrCisgICAgICAgIHdpdGggYW4gT1NS
IGVudHJ5cG9pbnQgYmxvY2sgdGhhdCBqdW1wcyB0byB0aGUgcHJlLWhlYWRlciBvZiB0aGUgaG90
IGxvb3AuCisgICAgICAgIFRoZSBPU1IgZW50cnlwb2ludCBsb2FkcyBhbGwgbGl2ZSBzdGF0ZSBh
dCB0aGUgbG9vcCBwcmUtaGVhZGVyIHVzaW5nIGxvYWRzCisgICAgICAgIGZyb20gYSBzY3JhdGNo
IGJ1ZmZlciwgd2hpY2ggZ2V0cyBwb3B1bGF0ZWQgYnkgdGhlIHJ1bnRpbWUncyBPU1IgZW50cnkK
KyAgICAgICAgcHJlcGFyYXRpb24gY29kZSAoRlRMOjpwcmVwYXJlT1NSRW50cnkoKSkuIFRoaXMg
YXBwcm9hY2ggYXBwZWFycyB0byB3b3JrIHdlbGwKKyAgICAgICAgd2l0aCBhbGwgb2Ygb3VyIHN1
YnNlcXVlbnQgb3B0aW1pemF0aW9ucywgaW5jbHVkaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24s
CisgICAgICAgIENGQSwgYW5kIExJQ00uIExMVk0gc2VlbXMgaGFwcHkgd2l0aCBpdCwgdG9vLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpbW1lZGlhdGVseSBnaXZlcyB1cyBhIDcwJSBzcGVlZC11
cCBvbiBpbWFnaW5nLWdhdXNzaWFuLWJsdXIuIFdlIGNvdWxkCisgICAgICAgIGdldCBhIGJpZ2dl
ciBzcGVlZC11cCBieSBhZGRpbmcgc29tZSBtb3JlIGludGVsbGlnZW5jZSBhbmQgdHdlYWtpbmcg
TExWTSB0bworICAgICAgICBjb21waWxlIGNvZGUgZmFzdGVyLiBUaG9zZSB0aGluZ3Mgd2lsbCBo
YXBwZW4gZXZlbnR1YWxseSBidXQgdGhpcyBpcyBhIGdvb2QKKyAgICAgICAgc3RhcnQuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJp
emUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHRHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6cmVjb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1l
U29vbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3B0aW1pemVTb29uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAg
ICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmlu
YWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
Q29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVByZUhlYWRlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjp1bmxpbmtlZExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2U6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
T1NSRW50cnlwb2ludENyZWF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNvbXBpbGVJblRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUlu
VGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
Ojpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlND
OjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENv
bXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpERkc6OlRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUpOgorICAgICAgICAqIGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Z2xvYmFsV29ya2xpc3QpOgorICAgICAgICAqIGRmZy9ERkdX
b3JrbGlzdC5oOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuaDoK
KyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSk6
CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSk6
CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlC
dWZmZXIpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjplbnRyeUJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpzZXRCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OmJ5dGVjb2RlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Y291bnRFbnRyeUZhaWx1cmUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6ZW50cnlGYWlsdXJlQ291bnQp
OgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUV4dHJhY3RPU1JFbnRy
eUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldExv
Y2FsKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6RlRMOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjpjcmFzaE5vblRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNyYXNo
KToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRl
OjpTdGF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXI6OnVuYm94ZWREb3VibGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBq
aXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmZ0bEZvck9TUkVudHJ5KToK
KyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6Cisg
ICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNl
bWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAg
ICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVXb3JrbGlzdCk6Cisg
ICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBp
bXBsaWNpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBkZmcvREZHTm9kZUZsYWdzLmNwcAogICAgIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAKKyAgICBkZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR09TUkV4aXQuY3BwCiAgICAgZGZnL0RG
R09TUkV4aXRCYXNlLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xNTEs
NiArMTUyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHVGh1bmtzLmNwcAorICAgIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdVbmlm
aWNhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdVc2VLaW5kLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTYsNiArMzE2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgXApAQCAtMzU2LDYgKzM1OCw4
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE1
NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsNiArMTcwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR09wZXJhdGlvbnMu
Y3BwIFwKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgXAogICAg
IGRmZy9ERkdPU1JFbnRyeS5jcHAgXAorICAgIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAgXAogICAgIGRmZy9ERkdPU1JFeGl0LmNwcCBcCiAgICAgZGZnL0RGR09TUkV4aXRC
YXNlLmNwcCBcCiAgICAgZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAgXApAQCAtMTg5LDYgKzE5
MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBcCiAg
ICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIFwKICAgICBkZmcvREZHVGh1bmtz
LmNwcCBcCisgICAgZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIFwKICAgICBk
ZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdVc2VLaW5kLmNwcCBcCiAg
ICAgZGZnL0RGR1ZhbHVlU291cmNlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2
ICszNjksMTggQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CiAJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xNTU4LDYg
KzE1NzAsMTggQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWN1bGF0ZWRUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEOEEzMTExN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlQmxvY2tTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4
QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkQ4QTMxNTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHA7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuaDsgcGF0aCA9IGZ0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TE9TUkVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9T
UkVudHJ5LmNwcDsgcGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFbnRyeS5oOyBwYXRoID0gZnRs
L0ZUTE9TUkVudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxRTE3RDUxRjU3MDBDQTJDNDAgLyog
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjAxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDhBMzIzMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBw
YXRoID0gZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHBhdGggPSBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExBYmJyZXZpYXRlZFR5cGVzLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0
ZWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNDODE3M0RBNTFF
MDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVG
cm9tQmxvY2suaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZyb21CbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV29ya2xpc3QuY3Bw
OyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI1MzksNiArMjU2Myw4IEBACiAJCQkJQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZU
TEZhaWwuY3BwICovLAogCQkJCUE3RjI5OTZBMTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmgg
Ki8sCiAJCQkJMEZFQTBBMkIxNzBCNjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZhbHVlLmgg
Ki8sCisJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAgKi8sCisJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0
ZWRGdW5jdGlvbi5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3MDk2MDY5MDBCQjcyMkMgLyog
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLApAQCAtMjU1MSw2ICsyNTc3LDggQEAKIAkJCQkw
RkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovLAogCQkJ
CTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovLAogCQkJ
CUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZhbHVlLmggKi8sCisJ
CQkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCAqLywKKwkJCQkw
RkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCAqLywKIAkJCQkwRjIzNUJD
NjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEYyMzVCQzcxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCAqLywKIAkJCQkwRjIzNUJDODE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovLApAQCAtMzUyNCw2ICszNTUy
LDggQEAKIAkJCQlBN0Q4OUNFRjE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdP
U1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmggKi8sCisJCQkJMEZEOEEzMUQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkQ4QTMxRTE3RDUxRjU3MDBDQTJDNDAgLyog
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMwOTc4RTE0NkE2RjYz
MDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEZDMDk3NjgxNDY4QTZFRjAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCAqLywKIAkJCQkwRjIzNUJFNzE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdEJhc2UuY3BwICovLApAQCAtMzU2Niw2ICszNTk2LDEyIEBACiAJCQkJMEY2Mzk0
NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJ
CQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMw
OTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovLAorCQkJ
CTBGRDhBMzIwMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNl
LmggKi8sCisJCQkJMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLywKKwkJCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAg
LyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKKwkJCQkwRkQ4QTMy
MzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZEOEEzMjQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQkwRjYz
OTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8s
CiAJCQkJMEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5jcHAgKi8sCkBAIC0zOTc3LDYgKzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBA
CiAJCQkJMTRCQTdBOTgxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAy
QUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5
MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1
MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywK
QEAgLTQyOTIsNiArNDMzMCw3IEBACiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYw
MDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9u
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYw
QUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRDhBMzFBMTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3
RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJC
NDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1
LDYgKzQzODUsNyBAQAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkg
LyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEz
QzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4
QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdDMUVBRjIxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMx
OEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4
Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYgKzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEw
MEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTRE
Mjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1
ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2
Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENvbW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyog
RGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4
IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VD
Mzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZE
OEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDg4NSw2ICs0OTI5LDcgQEAKIAkJCQk4Njg4MEY0RDE0
MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVu
a3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBERkdVbmlm
aWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzRCMTQ5MTZENDIwMTAwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcg
QEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxv
Y2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEz
NTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRE
MkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC01MTExLDYgKzUxNTcsNyBAQAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1
IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkw
MDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZE
OEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAw
MTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJD
NTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTUxNDEsNiArNTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAw
NDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0
NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3
OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90
aGVyLm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0
b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWls
RlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgp
KQogICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVj
dXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0o
b3RoZXIubV92bSkKQEAgLTE1MjksNiArMTUzMCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9u
dW1WYXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9k
aWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAs
IG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUs
IG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBA
IC0yMzc0LDE3ICsyMzc2LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNp
b24oKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJu
IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1Jl
cGxhY2UpOworfQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQog
ewotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBi
b29sIHJlc3VsdCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBl
KCksIGppdFR5cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmpp
dFR5cGUoKSkpOwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
aml0VHlwZSgpKTsKIH0KICNlbmRpZgogCkBAIC0zMDE5LDEwICszMDE4LDEwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxh
dGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAg
ICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3
ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29u
Y3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzAzMCwxNiArMzAy
OSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAg
IC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSBy
ZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUg
cmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAg
IC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGlt
aXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyAr
MzA4LDggQEAgcHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAg
IGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJl
cGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBl
CiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NTcsNiArOTU4LDggQEAg
cHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2Fs
bFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2
ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUwLDYgKzE1MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYg
KzE1MjAsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
IGNhc2UgUGhhbnRvbToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgQ291bnRFeGVj
dXRpb246CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVw
QXRSZXR1cm46CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyOgorICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgIC8vIFdlIHByZXRlbmQgdGhhdCBpdCBj
YW4gZXhpdCBiZWNhdXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUuCisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVbnJlYWNo
YWJsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0MCwxOSArMzE0MCwx
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyKQogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7CiAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
TG9vcEhpbnQpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92bS0+d2F0Y2hkb2cu
aXNFbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1dhdGNoZG9nVGlt
ZXIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50
b20gbm9kZSB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBhIHBsYWNlaG9sZGVyCi0gICAgICAgICAg
ICAgICAgLy8gbm9kZSBmb3IgdGhpcyBieXRlY29kZSBvcC4KLSAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20pOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkp
OworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0g
MCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3Jl
Zyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjMzLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhi
bG9jayk7CisgICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2Nr
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYg
KzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dy
YXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hh
YmlsaXR5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFj
aGFibGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxv
Y2tzKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2lj
QmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNT
RVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRl
eCkpOwotICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0K
LSAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2lj
QmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2
ICsxMTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBJc1N0cmluZzoKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgY2FzZSBJbnQzMlRvRG91
YmxlOgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CkBAIC0xMzMsNiArMTM0LDEwIEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNhc2Ug
Q2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNh
c2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUs
OSBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjaz4gY2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RI
YW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
IGNhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwogICAgIApAQCAtNjcsOCAr
NjcsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAKLSAgICBB
U1NFUlQob3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKLQogICAgIGlmICghT3B0
aW9uczo6dXNlREZHSklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCkBAIC03Niw5ICs3NCw3
IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAgICAgcmV0dXJu
IENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMo
KSkKLSAgICAgICAgZGF0YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ss
ICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSwgIlxuIik7Ci0gICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgZGF0
YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2Rl
LCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNv
dW50KCksICJcbiIpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0
IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IGFsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRp
b24gb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtOTMsMjkgKzg5LDggQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8vIERlcml2ZSBvdXIg
c2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUgYXQgbGVh
c3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50cnkgd2l0
aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0gICAgaWYg
KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2Rl
QmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0g
MDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcgUGxhbihj
b2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMp
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxlVmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAg
ICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgICAg
ICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkg
ewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3Ro
aXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAgIC8vIGFs
c28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUg
dmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVh
bCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKLSAg
ICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVu
ZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1VuZGVm
aW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB9CisgICAg
ICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0
SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAgICAgICAgIHBsYW4t
PmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENvZGVCbG9jayosIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwKICAgICBQ
YXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0KikKIHsKICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywxMyBAQCBzdGF0aWMg
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5k
bGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBh
c3NlZENhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywgY29kZUJs
b2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlzdCk7Cisg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhh
bmRsZVZhbHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9IENvbXBp
bGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRl
KGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niwx
MCBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhCiAKIC8vIElmIHRo
ZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2UgZG8gYSBjb25jdXJyZW50IGNvbXBpbGUuIE90aGVy
d2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAvLyBjb21waWxlLiBFdmVuIGlmIHdlIGRvIGEgc3lu
Y2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVzdWx0Lgot
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBDb21waWxh
dGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOworQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZSgKKyAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0
SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNhc2UgQ2hlY2tU
aWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZv
cmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgICAgIGNh
c2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAg
ICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRl
ZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJp
YWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRM
b2NhbCgpKSB7CisgICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOwor
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9
CiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKICAgICAgICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7
CkBAIC00ODcsNiArNDk0LDI5IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAg
ICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5k
SXRzQ29udGVudHMoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2Nh
dG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3Iu
ZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgCisgICAga2lsbEJsb2NrKGJsb2NrKTsK
K30KKwordm9pZCBHcmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tzKCkKK3sKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBudW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAga2lsbEJsb2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwog
dm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00ODksNiArNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxv
Y2stPmluZGV4KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50
cyhCYXNpY0Jsb2NrKik7CisgICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsK
KyAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBp
c051bWVyaWNhbChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBA
IHB1YmxpYzoKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJs
ZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3Rv
ciBtX3ByZXNlcnZlZFZhcnM7CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5h
dG9ycyBtX2RvbWluYXRvcnM7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAg
IHVuc2lnbmVkIG1fbG9jYWxWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAg
IHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAg
ICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgICAgICBpZiAo
bV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQu
YXJndW1lbnQoaSkubWFrZVRvcCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjksOCAr
MTMwLDYgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAg
ICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQ2VsbCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5t
YWtlVG9wKCk7Ci0gICAgICAgIAotICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQo
aSkuY2xlYXIoKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBy
b290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDgg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogSklUQ29kZTo6SklUQ29kZSgpCkBAIC01
OSw2ICs2MSwxNDUgQEAgdm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVF
dmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0
KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2ln
bmVkIHN0cmVhbUluZGV4LAorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7
CisgICAgdmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2Nr
LCBjb2RlT3JpZ2luLCBtaW5pZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3Zv
aWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwK
KyAgICBPcGVyYW5kczxKU1ZhbHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+IHJlY292ZXJpZXM7CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2lu
LCBzdHJlYW1JbmRleCwgcmVjb3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8
SlNWYWx1ZT4oT3BlcmFuZHNMaWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
cmVzdWx0LnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkKKyAgICAgICAgICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAg
ICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAg
ICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7CisgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRo
ZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAg
Ly8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRv
IHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4g
YWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2Vz
LAorICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGlu
dG8gVW5kZWZpbmVkLgorICAgICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZVJl
Y292ZXJ5IHJlY292ZXJ5ID0gcmVjb3Zlcmllc1tpXTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsK
KyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFs
cmVhZHlJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZENl
bGw6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEJvb2xlYW46CisgICAg
ICAgICAgICB2YWx1ZSA9IGV4ZWMtPnIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAg
ICAgICAgICAgdmFsdWUgPSBqc051bWJlcihleGVjLT5yKG9wZXJhbmQpLnVuYm94ZWRJbnQzMigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1Vu
Ym94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9IGpzRG91YmxlTnVtYmVyKGV4ZWMtPnIo
b3BlcmFuZCkudW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSByZWNvdmVyeS5jb25zdGFudCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQorCisjaWYgRU5BQkxFKEZUTF9KSVQp
Citib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVyLmNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworfQorCit2b2lk
IEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2Nr
LCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAgICB0aWVyVXBDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKK30K
Kwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpj
b2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNvb24uXG4iKTsKKyAgICB0
aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6b3B0
aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZUTC1vcHRpbWl6
aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9s
ZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVz
aG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAgIGJhc2VsaW5lKTsKK30K
Kwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJl
c2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJhc2VsaW5lKTsKK30KKwor
dm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
IGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGggY29uY3VycmVudGx5IGZv
ciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJy
ZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGls
YXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKGNvZGVCbG9j
ayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAg
ICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9IHRydWU7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29t
cGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCAtIGl0IHdpbGwg
b25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNvZGUgYmxvY2sgKGkuZS4KKyAgICAg
ICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENvZGUgYmVsb25ncyB0bykgaXMgYWxz
byBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9lc24ndCByZWFsbHkgbWF0dGVyIHdo
YXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5nIGFueXdheS4gTm90ZQorICAgICAg
ICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXphdGlvbiBhY3R1YWxseSBtZWFucyB0
aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3aWNlLiBCdXQgdGhhdCdzIGdlbmVy
YWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJlb3B0aW1pemF0aW9ucworICAgICAg
ICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4KKyAgICAgICAgY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDExICszMCwxMyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNs
dWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNp
bmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNp
bmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5o
IgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9TZWdt
ZW50ZWRWZWN0b3IuaD4KQEAgLTkzLDggKzk1LDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiByZXN1bHQpOworICAgIAorICAgIC8vIFRoaXMgaXMgb25seSBhcHBsaWNhYmxl
IGlmIHdlJ3JlIGF0IGEgcG9pbnQgd2hlcmUgYWxsIHZhbHVlcyBhcmUgc3BpbGxlZCB0byB0aGUK
KyAgICAvLyBzdGFjay4gQ3VycmVudGx5LCBpdCBhbHNvIGhhcyB0aGUgcmVzdHJpY3Rpb24gdGhh
dCB0aGUgdmFsdWVzIG11c3QgYmUgaW4gdGhlaXIKKyAgICAvLyBieXRlY29kZS1kZXNpZ25hdGVk
IHN0YWNrIHNsb3RzLgorICAgIHZvaWQgcmVjb25zdHJ1Y3QoCisgICAgICAgIEV4ZWNTdGF0ZSos
IENvZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LCBPcGVyYW5kczxK
U1ZhbHVlPiYgcmVzdWx0KTsKKworI2lmIEVOQUJMRShGVExfSklUKQorICAgIC8vIE5CLiBBbGwg
b2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVCbG9jayogYmVjYXVzZSB0aGV5IG1heSB3YW50IHRv
IHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxvZ2ljIGFib3V0IHNjYWxpbmcgdGhyZXNob2xkcy4g
SXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9jay4KKyAgICAKKyAgICBib29sIGNoZWNrSWZPcHRp
bWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVO
ZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIG9wdGltaXplU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGZvcmNlT3B0
aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29kZUJsb2NrKiwg
Q29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIAogICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgCisgICAgCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2Rl
UmVmKCkuCiAKQEAgLTEwNiw2ICsxMzAsMTAgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3Rv
cjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKICAgICBERkc6
OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlm
aWVkR3JhcGggbWluaWZpZWRERkc7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgRXhlY3V0aW9u
Q291bnRlciB0aWVyVXBDb3VudGVyOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG9zckVudHJ5Qmxv
Y2s7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDI3ICs0OCwzMSBAQCBKSVRG
aW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUo
KQogewotICAgIGZpbmFsaXplQ29tbW9uKCk7Ci0gICAgCiAgICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgp
KTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCkpOwogICAgIAorICAgIGZpbmFsaXplQ29tbW9uKCk7CisgICAgCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkK
IHsKLSAgICBmaW5hbGl6ZUNvbW1vbigpOwotICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjayA9IG1fbGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2sp
OwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6
ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7CiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklU
Q29kZShtX2ppdENvZGUsIHdpdGhBcml0eUNoZWNrKTsKICAgICAKKyAgICBmaW5hbGl6ZUNvbW1v
bigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEpJVEZpbmFsaXplcjo6Zmlu
YWxpemVDb21tb24oKQogeworI2lmIEVOQUJMRShGVExfSklUKQorICAgIG1faml0Q29kZS0+b3B0
aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrLmdldCgpKTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKyAgICAKICAgICBpZiAobV9wbGFuLmNvbXBpbGF0aW9uKQogICAgICAgICBt
X3BsYW4udm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3BsYW4uY29t
cGlsYXRpb24pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJl
SGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywzMSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK0Jhc2ljQmxvY2sqIGNyZWF0ZVByZUhlYWRlcihHcmFw
aCYgZ3JhcGgsIEJsb2NrSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciA9IGluc2VydGlvblNldC5pbnNlcnRC
ZWZvcmUoYmxvY2spOworICAgIHByZUhlYWRlci0+YXBwZW5kTm9kZSgKKyAgICAgICAgZ3JhcGgs
IFNwZWNOb25lLCBKdW1wLCBibG9jay0+YXQoMCktPmNvZGVPcmlnaW4sIE9wSW5mbyhibG9jaykp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3JJbmRleCA9IDA7IHByZWRlY2Vz
c29ySW5kZXggPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsr
KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29y
c1twcmVkZWNlc3NvckluZGV4XTsKKyAgICAgICAgaWYgKGdyYXBoLm1fZG9taW5hdG9ycy5kb21p
bmF0ZXMoYmxvY2ssIHByZWRlY2Vzc29yKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBibG9jay0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXgtLV0gPSBibG9jay0+cHJlZGVj
ZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBwcmVkZWNlc3Nvci0+bnVt
U3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayomIHN1Y2Nlc3NvciA9IHByZWRlY2Vzc29yLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwor
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIHN1Y2Nlc3NvciA9IHByZUhlYWRlcjsKKyAgICAgICAgICAgIHBy
ZUhlYWRlci0+cHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYmxvY2stPnByZWRlY2Vzc29ycy5hcHBlbmQocHJlSGVhZGVyKTsKKyAg
ICByZXR1cm4gcHJlSGVhZGVyOworfQorCiBjbGFzcyBMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UoR3JhcGgmIGdyYXBoKQpAQCAtNzAsMjYgKzk1LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKCFuZWVkc05ld1ByZUhlYWRlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlSGVhZGVyID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0QmVmb3JlKGxvb3AuaGVhZGVyKCkpOwotICAgICAgICAgICAgcHJlSGVhZGVyLT5h
cHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBsb29w
LmhlYWRlcigpLT5hdCgwKS0+Y29kZU9yaWdpbiwgT3BJbmZvKGxvb3AuaGVhZGVyKCkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvckluZGV4ID0g
MDsgcHJlZGVjZXNzb3JJbmRleCA8IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycy5zaXplKCk7
IHByZWRlY2Vzc29ySW5kZXgrKykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yID0gbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXhdOwot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMobG9vcC5o
ZWFkZXIoKSwgcHJlZGVjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRl
eC0tXSA9IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycy5sYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IHByZWRlY2Vzc29yLT5udW1TdWNjZXNz
b3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3IgPSBwcmVkZWNlc3Nvci0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBsb29wLmhlYWRlcigpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3NvciA9IHByZUhlYWRlcjsKLSAgICAgICAgICAgICAgICAgICAgcHJlSGVhZGVyLT5wcmVkZWNl
c3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29y
cy5hcHBlbmQocHJlSGVhZGVyKTsKKyAgICAgICAgICAgIGNyZWF0ZVByZUhlYWRlcihtX2dyYXBo
LCBtX2luc2VydGlvblNldCwgbG9vcC5oZWFkZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICsz
MiwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEJsb2Nr
SW5zZXJ0aW9uU2V0OwogY2xhc3MgR3JhcGg7CitzdHJ1Y3QgQmFzaWNCbG9jazsKIAogLy8gSW5z
ZXJ0cyBkdW1teSBiYXNpYyBibG9ja3MgYmVmb3JlIGFueSBsb29wIGhlYWRlcnMgdGhhdCBkb24n
dCBhbHJlYWR5IGhhdmUKIC8vIGEgc2luZ2xlIG5vbi1sb29wIHByZWRlY2Vzc29yLgogCiBib29s
IHBlcmZvcm1Mb29wUHJlSGVhZGVyQ3JlYXRpb24oR3JhcGgmKTsKIAorLy8gQ3JlYXRlcyBhIG5l
dyBiYXNpYyBibG9jayAoYSBwcmUtaGVhZGVyKSB0aGF0IGp1bXBzIHRvIHRoZSBnaXZlbiBibG9j
ay4gQWxsCisvLyBwcmVkZWNlc3NvcnMgb2YgdGhlIGdpdmVuIGJsb2NrIHRoYXQgYXJlbid0IGRv
bWluYXRlZCBieSBpdCBhcmUgcmVyb3V0ZWQgdG8KKy8vIHRoZSBwcmUtaGVhZGVyLgorLy8KKy8v
IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBpdCdzIHVzZWQgaW4gYSBzdXJn
aWNhbCBmYXNoaW9uIGJ5CisvLyBPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS4KKy8vCisvLyBO
b3RlIHRoYXQgZXhlY3V0aW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgaGF2aW5nIGFuIGludGFj
dCBkb21pbmF0b3JzCisvLyBhbmFseXNpcy4gWW91IHNob3VsZCBydW4gdGhhdCBhbmFseXNpcyBi
ZWZvcmUgZG9pbmcgZGFtYWdlIHRvIHRoZSBDRkcsIGV2ZW4KKy8vIGlmIHNhaWQgZGFtYWdlIGlz
IGRvbmUgYmVmb3JlIHlvdSBjYWxsIHRoaXMuCitCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFkZXIo
R3JhcGgmLCBCbG9ja0luc2VydGlvblNldCYsIEJhc2ljQmxvY2sqKTsKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw5ICs1MjcsMjAg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxv
Y2FsKCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgor
ICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIEFT
U0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihtX29wSW5mbyk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2
OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRmx1c2gs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9t
TG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCisgICAg
LyogSGludCB0aGF0IHRoaXMgaXMgd2hlcmUgYnl0ZWNvZGUgdGhpbmtzIGlzIGEgZ29vZCBwbGFj
ZSB0byBPU1IuIE5vdGUgdGhhdCB0aGlzICovXAorICAgIC8qIHdpbGwgZXhpc3QgZXZlbiBpbiBp
bmxpbmVkIGxvb3BzLiBUaGlzIGhhcyBubyBleGVjdXRpb24gc2VtYW50aWNzIGJ1dCBpdCBtdXN0
ICovXAorICAgIC8qIHN1cnZpdmUgYWxsIERDRS4gV2UgdHJlYXQgdGhpcyBhcyBiZWluZyBhIGNh
bi1leGl0IGJlY2F1c2UgdGllci11cCB0byBGVEwgbWF5ICovXAorICAgIC8qIHdhbnQgYWxsIHN0
YXRlLiAqL1wKKyAgICBtYWNybyhMb29wSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIFwK
KyAgICAvKiBTcGVjaWFsIG5vZGUgZm9yIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwuIEluZGljYXRl
cyB0aGF0IHdlJ3JlIGxvYWRpbmcgYSBsb2NhbCAqL1wKKyAgICAvKiB2YXJpYWJsZSBmcm9tIHRo
ZSBzY3JhdGNoIGJ1ZmZlci4gKi9cCisgICAgbWFjcm8oRXh0cmFjdE9TUkVudHJ5TG9jYWwsIE5v
ZGVSZXN1bHRKUykgXAorICAgIFwKKyAgICAvKiBUaWVyLXVwIGNoZWNrcyBmcm9tIHRoZSBERkcg
dG8gdGhlIEZUTC4gKi9cCisgICAgbWFjcm8oQ2hlY2tUaWVyVXBJbkxvb3AsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1RpZXJVcEFuZE9TUkVudGVyLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oQ2hlY2tUaWVyVXBBdFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIFwKICAgICAvKiBHZXQgdGhlIHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUsIHdpdGhv
dXQgbGlua2luZyBpbnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgKi9cCiAgICAgLyogbmV0d29y
ay4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciB2YXJpYWJsZSBhY2Nlc3NlcyB3aG9zZSBwcmVkaWN0
aW9ucyBvcmlnaW5hdGVkICovXAogICAgIC8qIGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbG9j
YWwgYWNjZXNzLCBhbmQgdGh1cyBoYWQgdGhlaXIgb3duIHByb2ZpbGluZy4gKi9cCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDExICs0NywzNCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRh
dGFMb2coCi0gICAgICAgICAgICAiT1NSIGluICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCks
ICIgLT4gIiwgKmNvZGVCbG9jaywKKyAgICAgICAgICAgICJERkcgT1NSIGluICIsICpjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCksICIgLT4gIiwgKmNvZGVCbG9jaywKICAgICAgICAgICAgICIgZnJv
bSBiYyMiLCBieXRlY29kZUluZGV4LCAiXG4iKTsKICAgICB9CiAgICAgCiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRG
R0pJVCkgeworICAgICAgICAvLyBXaGVuIHdpbGwgdGhpcyBoYXBwZW4/IFdlIGNvdWxkIGhhdmU6
CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gQW4gZXhpdCBmcm9tIHRoZSBGVEwgSklUIGludG8g
dGhlIGJhc2VsaW5lIEpJVCBmb2xsb3dlZCBieSBhbiBhdHRlbXB0CisgICAgICAgIC8vICAgdG8g
cmVlbnRlci4gV2UncmUgZmluZSB3aXRoIGFsbG93aW5nIHRoaXMgdG8gZmFpbC4gSWYgaXQgaGFw
cGVucworICAgICAgICAvLyAgIGVub3VnaCB3ZSdsbCBqdXN0IHJlb3B0aW1pemUuIEl0IGJhc2lj
YWxseSBtZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBjb3N0CisgICAgICAgIC8vICAgdXMgZGVhcmx5
IGFuZCBzbyByZW9wdGltaXppbmcgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgICAgICAv
LworICAgICAgICAvLyAtIFdlIGhhdmUgcmVjdXJzaXZlIGNvZGUgd2l0aCBob3QgbG9vcHMuIENv
bnNpZGVyIHRoYXQgZm9vIGhhcyBhIGhvdCBsb29wCisgICAgICAgIC8vICAgdGhhdCBjYWxscyBp
dHNlbGYuIFdlIGhhdmUgdHdvIGZvbydzIG9uIHRoZSBzdGFjaywgbGV0cyBjYWxsIHRoZW0gZm9v
MQorICAgICAgICAvLyAgIGFuZCBmb28yLCB3aXRoIGZvbzEgaGF2aW5nIGNhbGxlZCBmb28yIGZy
b20gZm9vJ3MgaG90IGxvb3AuIGZvbzIgZ2V0cworICAgICAgICAvLyAgIG9wdGltaXplZCBhbGwg
dGhlIHdheSBpbnRvIHRoZSBGVEwuIFRoZW4gaXQgcmV0dXJucyBpbnRvIGZvbzEsIGFuZCB0aGVu
CisgICAgICAgIC8vICAgZm9vMSB3YW50cyB0byBnZXQgb3B0aW1pemVkLiBJdCBtaWdodCByZWFj
aCB0aGlzIGNvbmNsdXNpb24gZnJvbSBpdHMKKyAgICAgICAgLy8gICBob3QgbG9vcCBhbmQgYXR0
ZW1wdCB0byBPU1IgZW50ZXIuIEFuZCB3ZSdsbCB0ZWxsIGl0IHRoYXQgaXQgY2FuJ3QuIEl0Cisg
ICAgICAgIC8vICAgbWlnaHQgYmUgd29ydGggYWRkcmVzc2luZyB0aGlzIGNhc2UsIGJ1dCBJIGp1
c3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgLy8gICBiZSBzdXBlciByYXJlLiBGb3Ig
bm93LCBpZiBpdCBkb2VzIGhhcHBlbiwgaXQnbGwgY2F1c2Ugc29tZSBjb21waWxhdGlvbgorICAg
ICAgICAvLyAgIHRocmFzaGluZy4KKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRo
ZSB0YXJnZXQgY29kZSBibG9jayBpcyBub3QgREZHLlxuIik7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCktPmRmZygpLT5vc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwog
ICAgIAogICAgIGlmICghZW50cnkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiREZHQmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2Uu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworcHVibGljOgorICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5
Qnl0ZWNvZGVJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgICAg
ICAKKyAgICAgICAgLy8gTmVlZGVkIGJ5IGNyZWF0ZVByZUhlYWRlcigpLgorICAgICAgICBtX2dy
YXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIAor
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2s7Cisg
ICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSAwOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgTm9kZSogZmlyc3ROb2RlID0gYmxvY2stPmF0KDApOworICAgICAgICAgICAg
aWYgKGZpcnN0Tm9kZS0+b3AoKSA9PSBMb29wSGludAorICAgICAgICAgICAgICAgICYmIGZpcnN0
Tm9kZS0+Y29kZU9yaWdpbiA9PSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAg
ICAgICAgICAgdGFyZ2V0ID0gYmxvY2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRhcmdldCkgeworICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHRlcnJpYmxlIG91dGNvbWUuIEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4g
YnV0IGl0IG1pZ2h0CisgICAgICAgICAgICAvLyBoYXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZl
bmQgYWdhaW5zdCBpdC4gSWYgaXQgaGFwcGVucywgdGhlbiB0aGlzCisgICAgICAgICAgICAvLyBj
b21waWxhdGlvbiBpcyBhIGZhaWx1cmUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCht
X2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0KDApOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0YXJnZXQt
PmF0KDApLT5jb2RlT3JpZ2luOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsK
KyAgICAgICAgICAgIE5vZGUqIG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKKyAgICAgICAgICAg
ICAgICAvLyBKdXN0IGZvciBzYW5pdHksIGFsd2F5cyBoYXZlIGEgU2V0QXJndW1lbnQgZXZlbiBp
ZiBpdCdzIG5vdCBuZWVkZWQuCisgICAgICAgICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgubV9h
cmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05v
bmUsIFNldEFyZ3VtZW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyhvbGRO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50c1thcmd1bWVudF0gPSBub2RlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGxvY2Fs
ID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsK
KyAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFk
LmxvY2FsKGxvY2FsKTsKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNIZWFkKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IHByZXZpb3VzSGVhZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCB2
YXJpYWJsZS0+cHJlZGljdGlvbigpLCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAg
ICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJ
bmZvKGNyZWF0ZVByZUhlYWRlcihtX2dyYXBoLCBpbnNlcnRpb25TZXQsIHRhcmdldCkpKTsKKyAg
ICAgICAgCisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIG1fZ3JhcGgu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9j
a3MoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtT1NS
RW50cnlwb2ludENyZWF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIE9TUiBFbnRyeXBvaW50IENyZWF0aW9uIik7CisgICAgcmV0dXJu
IHJ1blBoYXNlPE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBpcyBvbmx5IGZvciBjb21waWxhdGlv
biBwaXBlbGluZXMgdGhhdCBnbyB0aHJvdWdoIFNTQSwgYW5kIHRoYXQKKy8vIGRvIGEgc3BlY2lh
bGl6ZWQgT1NSIGVudHJ5IGNvbXBpbGUuIEN1cnJlbnRseSB0aGF0IG1lYW5zIEZUTC4KKy8vCisv
LyBDcmVhdGVzIGFuIE9TUiBlbnRyeXBvaW50IHRoYXQgZXN0YWJsaXNoZXMgYWxsIGFyZ3VtZW50
IGFuZCBsb2NhbCB2YXJpYWJsZQorLy8gdmFsdWVzLiBUaGlzIGVudHJ5cG9pbnQgb25seSB3b3Jr
cyBmb3IgdGhlIFBsYW46Om9zckVudHJ5Qnl0ZWNvZGVJbmRleC4KKy8vIFVubGlrZSBvcmRpbmFy
eSBPU1IgZW50cnkgaW50byB0aGUgREZHLCB0aGlzIGZvcmNlcyBhbGwgdmFyaWFibGVzIHNsdXJw
ZWQKKy8vIGluIHRocm91Z2ggT1NSIGVudHJ5IHRvIGFwcGVhciBUT1AgdG8gdGhlIENGQS4gSGVu
Y2UgdGhpcyBwaGFzZSBtdXN0IGJlIHJ1bgorLy8gZWFybHkgLSBiZWZvcmUgZG9pbmcgYW55IENG
QS4gQnV0IHRoaXMgYWxzbyBkb2VzIHNvbWUgYWRkaXRpb25hbCBoYWNrcyB0aGF0CisvLyByZXF1
aXJlIHRoaXMgdG8gcnVuIGJlZm9yZSB1bmlmaWNhdGlvbi4KKworYm9vbCBwZXJmb3JtT1NSRW50
cnlwb2ludENyZWF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDE1IEBACiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5j
bHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5j
bHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJE
RkdUaHVua3MuaCIKKyNpbmNsdWRlICJERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVu
dHJ5SklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCkBAIC0yMDE1LDYgKzIwMjEsMTg3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdf
T1BFUkFUSU9OIHRyaWdnZXJSZW8KICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKIH0KIAor
I2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3co
RXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2
bS0+aGVhcCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICAKKyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygp
OworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3
aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50
ZXIsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNp
b24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0
aW9uIG9mICIsICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFu
IEZUTCBmYWlsdXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFq
aXRDb2RlLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCJDaG9vc2luZyBub3QgdG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmts
aXN0U3RhdGU7CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLT53b3JrbGlzdC5nZXQo
KSkgeworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQ
bGFuc0ZvclZNKAorICAgICAgICAgICAgKnZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpLCBGVExNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0
U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUg
PT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgICAgICBjb2RlQmxv
Y2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAg
Ly8gVGhhdCdzIGdyZWF0LCB3ZSd2ZSBjb21waWxlZCB0aGUgY29kZSAtIG5leHQgdGltZSB3ZSBj
YWxsIHRoaXMgZnVuY3Rpb24sCisgICAgICAgIC8vIHdlJ2xsIGVudGVyIHRoYXQgcmVwbGFjZW1l
bnQuCisgICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpD
b21waWxlZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgZmluaXNoZWQgY29tcGls
aW5nLCBidXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUKKyAgICAgICAgLy8gdGhy
ZXNob2xkcyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29kZUJs
b2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBs
YWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0
byBjb21waWxlIHRoZSBjb2RlLgorICAgIGNvbXBpbGUoCisgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3BlcmFuZHM8SlNW
YWx1ZT4oKSwKKyAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZShjb2RlQmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7Cit9CisKK2NoYXIqIERGR19PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBi
eXRlY29kZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KQoreworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZygpOworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
IHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQg
dHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGpp
dENvZGUtPnRpZXJVcENvdW50ZXIsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVy
cmluZyBGVEwtb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJl
Y2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBmYWlsdXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRS
ZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
KyAgICAgICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNv
ZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAg
IFdvcmtsaXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xp
c3QgPSB2bS0+d29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmts
aXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgICp2bSwgQ29tcGls
YXRpb25LZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2Rl
KSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25v
d247CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykg
eworICAgICAgICBBU1NFUlQoIWppdENvZGUtPm9zckVudHJ5QmxvY2spOworICAgICAgICBqaXRD
b2RlLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisg
ICAgICAgICAgICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENv
ZGUtPm9zckVudHJ5QmxvY2suZ2V0KCkpIHsKKyAgICAgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6
cHJlcGFyZU9TUkVudHJ5KAorICAgICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2Nr
LCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CisgICAgICAgIGlmIChhZGRyZXNzKSB7Cisg
ICAgICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUJsb2Nr
LT5qaXRDb2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgICAgIGVudHJ5Q29kZS0+Y291bnRF
bnRyeUZhaWx1cmUoKTsKKyAgICAgICAgaWYgKGVudHJ5Q29kZS0+ZW50cnlGYWlsdXJlQ291bnQo
KSA8CisgICAgICAgICAgICBPcHRpb25zOjpmdGxPU1JFbnRyeUZhaWx1cmVDb3VudEZvclJlb3B0
aW1pemF0aW9uKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaml0Q29kZS0+b3B0aW1p
emVTb29uKGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gT1NSIGVudHJ5IGZhaWxlZC4gT2ggbm8hIFRoaXMgaW1wbGllcyB0
aGF0IHdlIG5lZWQgdG8gcmV0cnkuIFdlIHJldHJ5CisgICAgICAgIC8vIHdpdGhvdXQgZXhwb25l
bnRpYWwgYmFja29mZiBhbmQgd2Ugb25seSBkbyB0aGlzIGZvciB0aGUgZW50cnkgY29kZSBibG9j
ay4KKyAgICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jay5jbGVhcigpOworICAgICAgICAKKyAg
ICAgICAgaml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6
OkNvbXBpbGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBjb21waWxhdGlvbiBmYWls
ZWQgYW5kIHdlIGFscmVhZHkgc2V0IHRoZSB0aHJlc2hvbGRzLgorICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29k
ZUJsb2NrLCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCBy
ZXBsYWNlbWVudC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBUaGUg
Zmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdHJpZ2dlciBhIGZvci1lbnRyeSBjb21waWxl
LgorICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CisgICAgaml0Q29kZS0+
cmVjb25zdHJ1Y3QoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29k
ZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOworICAgIENvbXBpbGF0aW9u
UmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gREZHOjpjb21waWxlKAorICAgICAgICAqdm0sIGNvZGVC
bG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29k
ZUluZGV4LAorICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSwKKyAgICAgICAgdm0tPmVu
c3VyZVdvcmtsaXN0KCkpOworICAgIAorICAgIC8vIEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dl
ciBhIHJlcGxhY2VtZW50IGNvbXBpbGUuIE9mIGNvdXJzZSwgd2UgZG9uJ3Qgd2FudCB0bworICAg
IC8vIHRyaWdnZXIgaXQgaWYgd2UgZG9uJ3QgbmVlZCB0by4gTm90ZSB0aGF0IHRoaXMgaXMga2lu
ZCBvZiB3ZWlyZCBiZWNhdXNlIHdlIG1pZ2h0CisgICAgLy8gaGF2ZSBqdXN0IGZpbmlzaGVkIGFu
IEZUTCBjb21waWxlIGFuZCB0aGF0IGNvbXBpbGUgZmFpbGVkIG9yIHdhcyBpbnZhbGlkYXRlZC4K
KyAgICAvLyBCdXQgdGhpcyBzZWVtcyB1bmNvbW1vbiBlbm91Z2ggdGhhdCB3ZSBzb3J0IG9mIGRv
bid0IGNhcmUuIEl0J3MgY2VydGFpbmx5IHNvdW5kCisgICAgLy8gdG8gZmlyZSBvZmYgYW5vdGhl
ciBjb21waWxlIHJpZ2h0IG5vdyBzbyBsb25nIGFzIHdlJ3JlIG5vdCBhbHJlYWR5IGNvbXBpbGlu
ZyBhbmQKKyAgICAvLyB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2Vt
ZW50LiBOb3RlLCB3ZSBkb24ndCBkbyB0aGlzIGZvcgorICAgIC8vIG9idmlvdXNseSBiYWQgY2Fz
ZXMgbGlrZSBnbG9iYWwgY29kZSwgd2hlcmUgd2Uga25vdyB0aGF0IHRoZXJlIGlzIGEgc2xpbSBj
aGFuY2UKKyAgICAvLyBvZiB0aGlzIGNvZGUgYmVpbmcgaW52b2tlZCBldmVyIGFnYWluLgorICAg
IENvbXBpbGF0aW9uS2V5IGtleUZvclJlcGxhY2VtZW50KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJz
aW9uKCksIEZUTE1vZGUpOworICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gR2xvYmFs
Q29kZQorICAgICAgICAmJiAhY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCisg
ICAgICAgICYmICghdm0tPndvcmtsaXN0LmdldCgpCisgICAgICAgICAgICB8fCB2bS0+d29ya2xp
c3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFjZW1lbnQpID09IFdvcmtsaXN0OjpOb3RL
bm93bikpIHsKKyAgICAgICAgY29tcGlsZSgKKyAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5u
ZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3BlcmFuZHM8SlNWYWx1
ZT4oKSwKKyAgICAgICAgICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUoY29kZUJsb2NrKSwgdm0tPmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0KKyAgICAKKyAgICBp
ZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBjb21w
aWxlIGFscmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAgLy8gZW50cnkgd2ls
bCBzdWNjZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3aGF0
IHdlIHNob3VsZCBkby4KKyAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEgd2hp
bGUgaWYgdGhhdCBoYXBwZW5zLgorICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JF
bnRyeSgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdl
dCgpLCBieXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CisgICAgaWYgKGFkZHJlc3MpCisgICAg
ICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgIGVsc2UKKyAgICAgICAg
aml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
IH0gLy8gZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk5LDYgKzk5LDcgQEAgdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZH
T3BlcgogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9O
ICgqU19ERkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9u
X0opKEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZf
REZHT3BlcmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91Ymxl
KTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZv
aWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwq
KTsKQEAgLTEyNiw2ICsxMjcsNyBAQCB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhCiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RQ
UykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIq
IERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RTUykoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgc2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSos
IGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBTdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OICgq
SV9ERkdPcGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNT
dHJpbmcqIERGR19PUEVSQVRJT04gKCpKc3NfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBp
bnQzMl90KTsKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNv
ZGUoRXhlY1N0YXRlKiwgaW50MzJfdCkgIFdURl9JTlRFUk5BTDsgCkBAIC0zMDIsNiArMzA0LDEx
IEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKIAogdm9pZCBERkdf
T1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJO
QUw7CiAKKyNpZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGll
clVwTm93KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gdHJp
Z2dlck9TUkVudHJ5Tm93KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJf
dCBzdHJlYW1JbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9u
TmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwxMyArNDYsMTYgQEAKICNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKICNp
bmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5o
IgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHU1NBQ29udmVyc2lvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNp
bmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAKQEAgLTgxLDEzICs4NCwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wQW5k
VmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiAKIFBsYW46OlBsYW4oCiAgICAgUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcykKKyAg
ICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+
JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogdm0oKnBhc3NlZENvZGVCbG9jay0+dm0oKSkKICAg
ICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAgICAgLCBtb2RlKG1vZGUpCiAgICAgLCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICwgbnVtVmFy
c1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAgLCBtdXN0SGFuZGxlVmFsdWVzKGNv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcykKKyAgICAsIG11c3RI
YW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9j
ay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpD
b21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJl
Qnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5nZXQoKSksIFByb2ZpbGVyOjpERkcpKSA6IDApCiAgICAg
LCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2Rl
QmxvY2suZ2V0KCkpCkBAIC0xMDksNyArMTExLDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdAogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsK
IAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZH
KFBsYW4pIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25z
ID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworICAgICAgICBkYXRh
TG9nKCJERkcoUGxhbikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2RlLCAi
LCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCksICJcbiIpOwogCiAgICAgQ29tcGlsYXRpb25QYXRoIHBhdGggPSBjb21waWxlSW5UaHJlYWRJ
bXBsKGxvbmdMaXZlZFN0YXRlKTsKIApAQCAtMTMzLDcgKzEzNSw3IEBAIHZvaWQgUGxhbjo6Y29t
cGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2co
Ik9wdGltaXplZCAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIHdpdGggIiwgcGF0aE5h
bWUsICIgaW4gIiwgbm93IC0gYmVmb3JlLCAiIG1zIik7CisgICAgICAgIGRhdGFMb2coIk9wdGlt
aXplZCAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIHVzaW5nICIsIG1vZGUsICIgd2l0
aCAiLCBwYXRoTmFtZSwgIiBpbiAiLCBub3cgLSBiZWZvcmUsICIgbXMiKTsKICAgICAgICAgaWYg
KHBhdGggPT0gRlRMUGF0aCkKICAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCBiZWZvcmVG
VEwgLSBiZWZvcmUsICIsIExMVk06ICIsIG5vdyAtIGJlZm9yZUZUTCwgIikiKTsKICAgICAgICAg
ZGF0YUxvZygiLlxuIik7CkBAIC0xNDIsNiArMTQ0LDEyIEBAIHZvaWQgUGxhbjo6Y29tcGlsZUlu
VGhyZWFkKExvbmdMaXZlZFN0YXQKIAogUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocmVhZEltcGwoTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0YXRlKQogeworICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgJiYgb3NyRW50cnlCeXRlY29kZUluZGV4ICE9
IFVJTlRfTUFYKSB7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNv
bXBpbGVyIG11c3QgaGFuZGxlIE9TUiBlbnRyeSBmcm9tIGJjIyIsIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleCwgIiB3aXRoIHZhbHVlczogIiwgbXVzdEhhbmRsZVZhbHVlcywgIlxuIik7CisgICAgICAg
IGRhdGFMb2coIlxuIik7CisgICAgfQorICAgIAogICAgIEdyYXBoIGRmZyh2bSwgKnRoaXMsIGxv
bmdMaXZlZFN0YXRlKTsKICAgICAKICAgICBpZiAoIXBhcnNlKGRmZykpIHsKQEAgLTE2Miw2ICsx
NzAsMTUgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBl
cmZvcm1VbmlmaWNhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKGRm
Zyk7CiAgICAgCisgICAgaWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAg
IGJvb2wgcmVzdWx0ID0gcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihkZmcpOworICAgICAg
ICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZh
aWxlZEZpbmFsaXplcigqdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZhaWxQYXRoOworICAg
ICAgICB9CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOworICAgIH0KKyAgICAK
ICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAg
ICAKQEAgLTIwNiwxMCArMjIzLDE5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21w
aWxlSW5UaHIKICAgICAgICAgZGZnLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeShk
ZmcpOwogICAgIH0KIAorICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgREZHTW9kZTogewor
ICAgICAgICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIAorICAgIGNhc2UgRlRMTW9kZToKKyAgICBjYXNlIEZUTEZvck9TUkVudHJ5
TW9kZTogewogI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeHBlcmlt
ZW50YWxGVEwoKQotICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25D
b2RlCi0gICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CisgICAgICAgIGlmIChGVEw6
OmNhbkNvbXBpbGUoZGZnKSA9PSBGVEw6OkNhbm5vdENvbXBpbGUpIHsKKyAgICAgICAgICAgIGZp
bmFsaXplciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKKyAgICAgICAg
ICAgIHJldHVybiBGYWlsUGF0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcGVyZm9y
bUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1Mb29wUHJlSGVhZGVy
Q3JlYXRpb24oZGZnKTsKQEAgLTI0NCwxMCArMjcwLDE2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0
aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgRlRMOjpjb21waWxlKHN0YXRlKTsKICAgICAg
ICAgRlRMOjpsaW5rKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7Ci0gICAgfQogI2Vs
c2UKLSAgICBSRUxFQVNFX0FTU0VSVCghT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICAKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtRENF
KGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiBzdHJ1Y3QgUGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxhbigKICAgICAgICAg
UGFzc1JlZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAg
ICAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBs
YW4oKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0ZSYpOwpA
QCAtNzIsNyArNzIsNiBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIENvbXBpbGF0aW9uTW9kZSBt
b2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKLSAgICBjb25z
dCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0
SGFuZGxlVmFsdWVzOwogCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGls
YXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Jbmpl
Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKGJs
b2NrLT5ieXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3Jh
cGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwobV9ncmFwaCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODQsNyArNDg0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIE1v
dkhpbnRBbmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICAgICAgY2Fz
ZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50
ZXI6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBh
dCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0
ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU0OSw2ICs1NTIsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1Rp
bWVyOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgICAgICBjYXNlIExvb3BIaW50Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBnZXRzIGln
bm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24uCisgICAgICAgIGNhc2Ug
RXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICAvLyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRo
aW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDExIEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFy
Q29kZToKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKKyAg
ICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6
CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgyMyw2ICs0ODIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgorICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcC4KICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDgzNSw2ICs0ODM2LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFBo
aToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4
dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2Fz
ZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjczLDYgKzQ2
NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNlIExvb3BI
aW50OgogICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAgIG5vUmVzdWx0KG5vZGUp
OwogICAgICAgICBicmVhazsKQEAgLTQ2ODAsMTEgKzQ2ODEsNzUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOworCisjaWYgRU5B
QkxFKEZUTF9KSVQpICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOiB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
T3B0aW9uczo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJV
cENvdW50ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKKyAgICAgICAgYXBwZW5kQ2FsbCh0cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjogeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50
ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJz
b2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7
CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVn
KTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgYXBw
ZW5kQ2FsbCh0cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjogeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0
bFRpZXJVcENvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFic29sdXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVyVXBDb3VudGVyLm1f
Y291bnRlcikpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVt
cEdQUik7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAg
ICAgICAgIFRydXN0ZWRJbW0zMihub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpLAorICAg
ICAgICAgICAgVHJ1c3RlZEltbTMyKG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICAgICAgYXBwZW5k
Q2FsbFNldFJlc3VsdCh0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb250RW50ZXIgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCh0ZW1wR1BSKTsKKyAg
ICAgICAgZG9udEVudGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyh0ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICBicmVhazsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICBjYXNlIENo
ZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICBjYXNl
IENoZWNrVGllclVwQW5kT1NSRW50ZXI6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgICAg
ICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2ls
b246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
REZHUGhhc2UuaCIKKyNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3Jh
cGgsICJ0aWVyLXVwIGNoZWNrIGluamVjdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIHJ1bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5t
b2RlID09IERGR01vZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VFeHBl
cmltZW50YWxGVEwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShG
VExfSklUKQorICAgICAgICBGVEw6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IEZUTDo6Y2FuQ29t
cGlsZShtX2dyYXBoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2Fubm90Q29tcGlsZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3AoKSA9PSBMb29wSGludCkgeworICAgICAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdp
bjsKKyAgICAgICAgICAgICAgICBOb2RlVHlwZSBub2RlVHlwZTsKKyAgICAgICAgICAgICAgICBp
ZiAobGV2ZWwgPT0gRlRMOjpDYW5Db21waWxlQW5kT1NSRW50ZXIgJiYgIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gQ2hlY2tUaWVy
VXBBbmRPU1JFbnRlcjsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2st
PmJ5dGVjb2RlQmVnaW4gPT0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcElu
TG9vcDsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgxLCBTcGVjTm9u
ZSwgbm9kZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnNpemUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLCBibG9jay0+bGFz
dCgpLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJ
bmplY3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgVGllci11cCBDaGVjayBJbmplY3Rpb24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0aGUgdGhpcyBjb2RlIGJsb2NrIGNvdWxkIGJl
IHJlY29tcGlsZWQgd2l0aCB0aGUgRlRMLAorLy8gYW5kIGlmIHNvLCBpdCBpbmplY3RzIHRpZXIt
dXAgY2hlY2tzLgorCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihHcmFwaCYpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAg
OiBtX2RmZ0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0K
KworUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9j
az4gZGZnQ29kZUJsb2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hy
b25vdXNseSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemlu
ZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2Nr
LAorICAgICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAgICAKKyAg
ICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93
UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOworfQorCit2
b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBs
ZXRlKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQp
Cit7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAo
Zm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIHJlc3VsdDogIiwgcmVzdWx0
LCAiXG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nl
c3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAgIAorICAgIG1fZGZnQ29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9u
Q29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpLCByZXN1bHQp
OworfQorCit9IH0gLy8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2tfaAorI2RlZmluZSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGljOgorICAg
IHZpcnR1YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKAor
ICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVC
bG9jayopOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9j
ayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q29kZUJsb2Nr
PiBtX2RmZ0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKAorICAgIFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBtX2RmZ0NvZGVCbG9jayhk
ZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s6On5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkK
K3sKK30KKworUGFzc1JlZlB0cjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrPgorVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3Jl
YXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrKGRmZ0NvZGVCbG9jaykpOworfQorCit2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNs
eSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAg
ICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAgICAKKyAgICBtX2Rm
Z0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOworfQorCit2b2lkIFRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCkKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFM
b2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2Nr
LCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgcmVzdWx0OiAiLCBy
ZXN1bHQsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9u
U3VjY2Vzc2Z1bCkKKyAgICAgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9z
ckVudHJ5QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgCisgICAgLy8gRklYTUU6IGlmIHdlIGZhaWxl
ZCwgd2UgbWlnaHQgd2FudCB0byBqdXN0IHR1cm4gb2ZmIE9TUiBlbnRyeSByYXRoZXIgdGhhbgor
ICAgIC8vIHRvdGFsbHkgdHVybmluZyBvZmYgdGllci11cC4KKyAgICBtX2RmZ0NvZGVCbG9jay0+
aml0Q29kZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSwgcmVzdWx0KTsKK30KKwor
fSB9IC8vIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBE
RkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNj
cmlwdEV4ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKwor
cHVibGljOgorICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGRmZ0NvZGVCbG9jayk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9u
RGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2RlQmxvY2s7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KworI2VuZGlmIC8vIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0
aWFsaXplR2xvYmFsV29ya2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7
Ci0gICAgaWYgKCFlbmFibGVDb25jdXJyZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAg
IHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6
ZUdsb2JhbFdvcmtsaXN0T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OCw5ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNp
bmdsZSBnbG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhl
IHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBm
dW5jdGlvbgogLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8K
LS8vIFRoaXMgcmV0dXJucyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBk
b2luZyBjb25jdXJyZW50Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlz
dCgpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDggKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAog
dXNpbmcgbmFtZXNwYWNlIERGRzsKIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiB7CisgICAg
Ly8gTk9URTogSWYgd2UgZXZlciBoYXZlIHBoYW50b20gYXJndW1lbnRzLCB3ZSBjYW4gY29tcGls
ZSB0aGVtIGJ1dCB3ZSBjYW5ub3QKKyAgICAvLyBPU1IgZW50ZXIuCisgICAgCiAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29u
c3RhbnQ6CkBAIC04MSw2ICs4NCw4IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2ls
b246CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIExvb3BIaW50Ogog
ICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QXJy
YXlMZW5ndGg6CkBAIC05MCwzOSArOTUsMzkgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50ZXI7CiAgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5u
b3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
c3BlY3VsYXRpb24oKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTYW5lQ2hhaW46CiAgICAgICAg
IGNhc2UgQXJyYXk6OkluQm91bmRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90
Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFB1dEJ5VmFsOgog
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZE9TUkVudGVyOwog
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgog
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIENv
bXBhcmVFcToKQEAgLTEzMyw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNl
S2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBDb21wYXJlTGVzczoK
ICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKQEAgLTE0
Miw3ICsxNDcsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2Up
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBMb2dpY2FsTm90
OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtMTUyLDcg
KzE1Nyw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2Fz
ZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29t
cGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN3aXRjaDoKQEAgLTE2
MSwxOCArMTY2LDI2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgY2FzZSBTd2l0Y2hDaGFyOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29t
cGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICAv
LyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICB9Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKIH0KIAotYm9vbCBjYW5D
b21waWxlKEdyYXBoJiBncmFwaCkKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBn
cmFwaCkKIHsKKyAgICBpZiAoZ3JhcGgubV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gRnVuY3Rp
b25Db2RlKSB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAg
ICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIGNvZGUgYmxvY2sgdGhhdCBkb2Vzbid0IGJl
bG9uZyB0byBhIGZ1bmN0aW9uLlxuIik7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwor
ICAgIH0KKyAgICAKKyAgICBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gQ2FuQ29tcGlsZUFuZE9T
UkVudGVyOworICAgIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTIxMCwyNSAr
MjIzLDM2IEBAIGJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIG5vZGUgYmVjYXVzZSBvZiBiYWQgdXNlIGtp
bmQ6ICIsIGVkZ2UudXNlS2luZCgpLCAiIGluIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGdyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWNhbkNvbXBpbGUo
bm9kZSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FuQ29tcGlsZShub2RlKSkgeworICAgICAg
ICAgICAgY2FzZSBDYW5ub3RDb21waWxlOiAKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZUTCBy
ZWplY3Rpbmcgbm9kZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICBncmFwaC5kdW1wKFdURjo6
ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlOgorICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gQ2FuQ29tcGlsZUFuZE9TUkVudGVyICYmIHZlcmJvc2VD
b21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGVEwg
ZGlzYWJsaW5nIE9TUiBlbnRyeSBiZWNhdXNlIG9mIG5vZGU6XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IENhbkNvbXBpbGU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENhbkNv
bXBpbGVBbmRPU1JFbnRlcjoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBpZiB3ZSBjYW4gY29t
cGlsZSBhbnl0aGluZyBhZnRlciBhIGZvcmNlLWV4aXQuCiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLWJvb2wgY2FuQ29t
cGlsZShERkc6OkdyYXBoJik7CitlbnVtIENhcGFiaWxpdHlMZXZlbCB7CisgICAgQ2Fubm90Q29t
cGlsZSwKKyAgICBDYW5Db21waWxlLAorICAgIENhbkNvbXBpbGVBbmRPU1JFbnRlcgorfTsKKwor
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2Rl
LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisK
K0Zvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9T
UkVudHJ5SklUQ29kZSogRm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7Cisg
ICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgRm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXpl
RW50cnlCdWZmZXIoVk0mIHZtLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpCit7CisgICAg
bV9lbnRyeUJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKyNkZWZp
bmUgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGludG8gdGhlIEZUTCBo
YXMgYSBudW1iZXIgb2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9ubHkgaGFwcGVucyB0
aHJvdWdoIHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBoYXZlIHRoZWlyCisv
LyAgIG93biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8KKy8vIC0gV2Ugb25s
eSBPU1IgZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwgaW5saW5lIGNhbGwg
ZnJhbWUuCisvLworLy8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBhbGxvd3MgZW50cnkg
dGhyb3VnaCBvbmx5IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9yT1NSRW50cnlKSVRD
b2RlIDogcHVibGljIEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9yT1NSRW50cnlKSVRD
b2RlKCk7CisgICAgfkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlh
bGl6ZUVudHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBT
Y3JhdGNoQnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7
IH0KKyAgICAKKyAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9i
eXRlY29kZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBjb3VudEVudHJ5
RmFpbHVyZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgZW50cnlG
YWlsdXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5RmFpbHVyZUNvdW50OyB9CisgICAg
CisgICAgRm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOworICAgIAorcHJpdmF0
ZToKKyAgICBTY3JhdGNoQnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBPbmx5IGZvciBPU1IgZW50
cnkgY29kZSBibG9ja3MuCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVuc2ln
bmVkIG1fZW50cnlGYWlsdXJlQ291bnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRkxUX0pJVCkKKworI2VuZGlmIC8vIEZUTEZvck9TUkVudHJ5
SklUQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxp
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOSBAQCBi
b29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJG
VEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1f
cGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9
IC8vIGVsc2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5r
cy4KICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBtX2Vu
dHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIGlmIChtX2FyaXR5Q2hlY2suaXNT
ZXQoKSkKKyAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5s
b2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgK
ICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqbV9lbnRyeXBvaW50TGlu
a0J1ZmZlciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsNzkgKzU1LDExNCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQog
ICAgIC8vIExMVk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBhcyBuZWVkZWQuCiAg
ICAgY29kZUJsb2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKICAgICAKLSAgICAvLyBDcmVh
dGUgdGhlIGVudHJ5cG9pbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0b3RhbCBrbHVkZ2Ug
LSBMTFZNIHNob3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9uLgorICAgIC8vIENy
ZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90
YWxseSBkaWZmZXJlbnRseQorICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5n
IE9TUiBlbnRyeSBvciBub3QuCisgICAgLy8gRklYTUU6IEV4Y2VwdCBmb3IgT1NSIGVudHJ5LCB0
aGlzIGlzIGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyCisgICAgLy8g
Y2FsbGluZyBjb252ZW50aW9uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTM2MjEKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZzdGF0ZS5ncmFwaC5tX3Zt
LCBjb2RlQmxvY2spOwogICAgIAotICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgIE93blB0cjxM
aW5rQnVmZmVyPiBsaW5rQnVmZmVyOworICAgIENDYWxsSGVscGVyczo6TGFiZWwgYXJpdHlDaGVj
azsKKyAgICBzd2l0Y2ggKHN0YXRlLmdyYXBoLm1fcGxhbi5tb2RlKSB7CisgICAgY2FzZSBGVExN
b2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOwogICAgIAotICAgIC8vIFRoaXMgcGFy
dCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJyZW50bHkgb25seSBjb21w
aWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8gVGhpcyBwYXJ0IGlzIG9ubHkgbmVjZXNzYXJ5IGZv
ciBmdW5jdGlvbnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUgZnVuY3Rpb25zLgogICAgICAg
ICAKLSAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNoZWNrID0gaml0LmxhYmVsKCk7
CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwo
KTsKICAgICAgICAgCi0gICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2Ug
aXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKLSAgICBqaXQuYWRkUHRyKAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN0YWNrQ2hlY2sg
PSBqaXQuYnJhbmNoUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhzdGF0ZS5ncmFwaC5tX3ZtLmludGVycHJldGVy
LT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotICAg
IENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICAg
ICAgCi0gICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdl
bmVyYXRlZEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5lbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LnJldCgpOwotICAgICAgICAKLSAgICBzdGFja0NoZWNr
LmxpbmsoJmppdCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucG9rZSgKLSAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3Qg
SklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwotICAgICAgICAKLSAg
ICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZy
YW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCi0gICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbFN0YWNrQ2hlY2sgPSBq
aXQuY2FsbCgpOwotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVy
IHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKLSAgICAvLyBwYXJ0IG9m
IGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9u
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIy
Ci0gICAgaml0Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOwotICAgICAgICAKLSAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICBjb21waWxlRW50cnkoaml0
KTsKLSAgICBqaXQubG9hZDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksCi0gICAg
ICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgIENDYWxsSGVs
cGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAubGlu
a1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wb2tl
KAotICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgT0JKRUNUX09G
RlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7
Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENh
bGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNr
ID0gaml0LmNhbGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdp
c3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCi0gICAgLy8gcGFy
dCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2Vw
dGlvbnMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzYyMgotICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpy
ZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgY2FsbEFyaXR5Rml4dXAgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wKGZyb21Bcml0eUNo
ZWNrKTsKLSAgICAgICAgCi0gICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9w
dFB0cihuZXcgTGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBjb2RlQmxvY2ssIEpJ
VENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxTdGFj
a0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOwotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5
Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0
eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7Ci0gICAgbGlua0J1ZmZlci0+bGluayhj
YWxsQXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKHN0YXRlLmdyYXBoLm1fdm0uZ2V0Q1RJU3R1Yihh
cml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgLy8gUGxh
bnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0
YWNrLgorICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU2MjkxCisgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9m
KFJlZ2lzdGVyKSksCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDEpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3RhY2tDaGVjayA9IGpp
dC5icmFuY2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV92bS5pbnRlcnBy
ZXRlci0+c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MSk7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFi
ZWwoKTsKKyAgICAgICAgCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwor
ICAgICAgICBqaXQubW92ZSgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLAorICAg
ICAgICAgICAgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
SlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgCisgICAg
ICAgIHN0YWNrQ2hlY2subGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
aml0LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAg
ICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAv
IHNpemVvZih2b2lkKikpOworICAgICAgICAKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNv
ZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsK
KyAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBl
eGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgICAgICAvLyBwYXJ0IG9mIGEg
YmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYy
MgorICAgICAgICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7CisgICAgICAgIAorICAgICAgICBh
cml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAg
ICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLAorICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSkpCisgICAgICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3Rh
Y2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICBqaXQuc3RvcmUz
MigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9j
YXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBq
aXQuY2FsbCgpOworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdp
c3RlciB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCisgICAgICAgIC8v
IHBhcnQgb2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBl
eGNlcHRpb25zLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEzNjIyCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNhbGwoKTsKKyAgICAgICAg
aml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9
IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5r
KGNhbGxTdGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOworICAgICAgICBsaW5rQnVmZmVyLT5s
aW5rKGNhbGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9j
b25zdHJ1Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOworICAgICAgICBs
aW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigoc3RhdGUuZ3JhcGgu
bV92bS5nZXRDVElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRlRMRm9yT1NSRW50
cnlNb2RlOiB7CisgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJhaWdodCBmcm9tIERGRyBj
b2RlLCBhZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQorICAgICAgICAvLyB2YWx1ZXMg
aW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGdvb2QgdG8gZ28g
LSBhdCB0aGlzCisgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9uZSB0aGUgc3RhY2sgY2hl
Y2suIEJhc2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKKyAgICAgICAgLy8gY2FsbCB0
byB0aGUgTExWTS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CisgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0
aW9uKSksCisgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBq
aXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LnJldCgpOworICAg
ICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKAorICAg
ICAgICAgICAgc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgIAogICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9p
bnRMaW5rQnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKICAgICBzdGF0ZS5maW5hbGl6ZXIt
PmluaXRpYWxpemVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aCIKICNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJGVExGb3JP
U1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKQEAgLTE5
MSw2ICsxOTIsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2llciB0
byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93QmxvY2sp
OwogICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bENyYXNoZXMoKSkKKyAgICAgICAg
ICAgIG1fb3V0LmNyYXNoTm9uVGVybWluYWwoKTsKKyAgICAgICAgCiAgICAgICAgIGlmICghbV9o
aWdoQmxvY2stPmNmYUhhc1Zpc2l0ZWQpIHsKICAgICAgICAgICAgIG1fb3V0LmNyYXNoKCk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNDMsNiArMjQ3LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBHZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudCgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAg
ICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY29tcGlsZUdldExvY2FsKCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTI2NCw2ICsyNzEsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEZsdXNoOgogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgpAQCAtNTA2LDYg
KzUxNCwxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHZvaWQgY29t
cGlsZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCkKKyAgICB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVl
KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICAgICAgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVm
ZmVyKCkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShi
dWZmZXIgKyBtX25vZGUtPnVubGlua2VkTG9jYWwoKSkpKTsKKyAgICB9CisgICAgCiAgICAgdm9p
ZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKICAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9u
bHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcy4KQEAgLTUxNSw3ICs1MzAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSk7
CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUp
KQorICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAg
ICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkp
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRk
cmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCisKKyNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisj
aW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkKiBwcmVwYXJlT1NSRW50
cnkoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJs
b2NrKiBlbnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBzdHJlYW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVCbG9j
ayogYmFzZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIERGRzo6
SklUQ29kZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBG
b3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5Q29kZUJsb2NrLT5qaXRDb2RlKCkt
PmZ0bEZvck9TUkVudHJ5KCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
eworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29k
ZUJsb2NrLCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICAgICAg
Ynl0ZWNvZGVJbmRleCwgIi5cbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZWNvZGVJbmRl
eCAhPSBlbnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSB3ZSBkb24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI7
IG91cnMgaXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpTVmFsdWU+IHZhbHVlczsKKyAg
ICBkZmdDb2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgZGZnQ29kZUJsb2NrLCBDb2Rl
T3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsKKyAgICAKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0
IGVudHJ5OiAiLCB2YWx1ZXMsICJcbiIpOworICAgIAorICAgIGZvciAoaW50IGFyZ3VtZW50ID0g
dmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKAorICAgICAgICAgICAgZXhlYy0+cihhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVu
dCkpLmpzVmFsdWUoKSA9PSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICB9CisgICAg
CisgICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgIHN0YXRpY19jYXN0PGludD4odmFsdWVzLm51
bWJlck9mTG9jYWxzKCkpID09IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CisgICAg
CisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1
ZSo+KAorICAgICAgICBlbnRyeUNvZGUtPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7Cisg
ICAgCisgICAgZm9yIChpbnQgbG9jYWwgPSB2YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwt
LTspCisgICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlcy5sb2Nh
bChsb2NhbCkpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNrRnJhbWVTaXplID0gZW50cnlDb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0
YWNrKCkuZ3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZVNpemVdKSkgeworICAgICAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9T
UiBmYWlsZWQgYmNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7
CisgICAgCisgICAgdm9pZCAqcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgZGF0YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJh
d1BvaW50ZXIocmVzdWx0KSwgIlxuIik7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRW50cnlfaAorI2RlZmluZSBGVExPU1JFbnRyeV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgRXhlY1N0YXRlOworCitu
YW1lc3BhY2UgRlRMIHsKKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSos
IENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4LAorICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRp
ZiAvLyBGVExPU1JFbnRyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
dXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDkgKzM1MSwxNCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBjYWxsKHRyYXBJbnRyaW5zaWMoKSk7CiAgICAgfQotICAgIHZvaWQgY3Jhc2go
KQorICAgIAorICAgIHZvaWQgY3Jhc2hOb25UZXJtaW5hbCgpCiAgICAgewogICAgICAgICBjYWxs
KGludFRvUHRyKGNvbnN0SW50UHRyKGFib3J0KSwgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKHZv
aWRUeXBlKSkpKTsKKyAgICB9CisgICAgdm9pZCBjcmFzaCgpCisgICAgeworICAgICAgICBjcmFz
aE5vblRlcm1pbmFsKCk7CiAgICAgICAgIHVucmVhY2hhYmxlKCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2Rl
QmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgor
I2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDAsOSArNDIsMjUgQEAgU3RhdGU6
OlN0YXRlKEdyYXBoJiBncmFwaCkKICAgICAsIGNvbnRleHQoTExWTUNvbnRleHRDcmVhdGUoKSkK
ICAgICAsIG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKLSAgICAsIGppdENvZGUoYWRvcHRS
ZWYobmV3IEpJVENvZGUoKSkpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogeworICAgIHN3
aXRjaCAoZ3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICAgICAg
aml0Q29kZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICAgICAgUmVmUHRyPEZvck9TUkVu
dHJ5SklUQ29kZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7Cisg
ICAgICAgIGNvZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3By
b2ZpbGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICAgICAgY29kZS0+c2V0Qnl0
ZWNvZGVJbmRleChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAg
aml0Q29kZSA9IGNvZGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCiAgICAgZmluYWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3BsYW4pOwog
ICAgIGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlz
aW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGFzSW5saW5lQ2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgICAg
IGludDMyX3QgdW5ib3hlZEludDMyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgdW5ib3hlZEJvb2xl
YW4oKSBjb25zdDsKKyAgICAgICAgZG91YmxlIHVuYm94ZWREb3VibGUoKSBjb25zdDsKICAgICAg
ICAgSlNDZWxsKiB1bmJveGVkQ2VsbCgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHBheWxvYWQo
KSBjb25zdDsKICAgICAgICAgaW50MzJfdCB0YWcoKSBjb25zdDsKQEAgLTk2LDYgKzk3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBDOwogICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICBFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yIGVuY29kZWRWYWx1ZTsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXI7
CiAgICAgICAgIH0gdTsKICAgICB9OwogCkBAIC0xODgsNiArMTkwLDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZXR1cm4gISFwYXlsb2FkKCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lO
TElORSBkb3VibGUgUmVnaXN0ZXI6OnVuYm94ZWREb3VibGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHUubnVtYmVyOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBS
ZWdpc3Rlcjo6dW5ib3hlZENlbGwoKSBjb25zdAogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyAr
MTA0LDcgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBpZiAo
IWNhbkJlT3B0aW1pemVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEp1bXAgc2tpcE9wdGlt
aXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvclJldHVybigpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2Nr
LT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgSnVtcCBza2lwT3B0aW1pemUg
PSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3Vu
dGVySW5jcmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRk
cmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRo
aXMsIGN0aV9vcHRpbWl6ZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMy
KG1fYnl0ZWNvZGVPZmZzZXQpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw2ICs2NiwxMiBAQCBGVEw6OkpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiAgICAgcmV0dXJu
IDA7CiB9CiAKK0ZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBKSVRDb2RlOjpmdGxGb3JPU1JFbnRy
eSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwogUGFzc1JlZlB0cjxKSVRDb2RlPiBKSVRDb2RlOjpob3N0RnVuY3Rpb24oSklUQ29kZTo6
Q29kZVJlZiBjb2RlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShj
b2RlLCBIb3N0Q2FsbFRodW5rKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgQ29tbW9uRGF0YTsKIGNs
YXNzIEpJVENvZGU7CiB9CiBuYW1lc3BhY2UgRlRMIHsKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29k
ZTsKIGNsYXNzIEpJVENvZGU7CiB9CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIHZpcnR1YWwgREZHOjpK
SVRDb2RlKiBkZmcoKTsKICAgICB2aXJ0dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7CisgICAgdmly
dHVhbCBGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKICAgICAKICAg
ICBKU1ZhbHVlIGV4ZWN1dGUoSlNTdGFjayosIENhbGxGcmFtZSosIFZNKik7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMzYsMTYgKzEwMzYsMzIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1p
emUpCiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRh
TG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
XG4iKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrID0KLSAgICAgICAgICAgIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoKTsKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCF2
bS53b3JrbGlzdCkKLSAgICAgICAgICAgIHZtLndvcmtsaXN0ID0gREZHOjpnbG9iYWxXb3JrbGlz
dCgpOworICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgaWYgKGJ5
dGVjb2RlSW5kZXgpCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+
bV9udW1WYXJzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9
IDA7CisgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoCisgICAgICAg
ICAgICBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAg
ICAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAg
ICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAg
ICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7CisgICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9y
LCB0aGUgJ3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAg
ICAgICAgICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2Ug
cHV0IGludG8gdGhlIHZhbHVlIGZvciB0aGlzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBo
YXMgdG8gYmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVu
dCBERkcgcGFzc2VzLAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUg
YnkgdHVybmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxl
VmFsdWVzW2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFu
ZCkuanNWYWx1ZSgpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0Nv
ZGVCbG9jay5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAg
ICAgICAgICAgIHZtLndvcmtsaXN0LmdldCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2st
Pm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAg
ICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjcmVhdGUoKSwKKyAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMDU0LDE1ICsxMDcwLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3B0aW1pemUpCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRp
bWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAg
Ly8gRlRMIEpJVCBkb2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAg
ICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9j
ay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKICAgICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFt
ZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1NDk4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzAsMjYgKzIzMCwzMiBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2Ny
aXB0RXhlY3V0YWJsZTo6CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjpp
bmZvKCkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAg
ICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxl
Kj4odGhpcyk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8
RXZhbENvZGVCbG9jayo+KAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2Nr
LT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1
bHQgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6
Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIAogICAgIGlmIChjbGFzc0luZm8oKSA9PSBQcm9ncmFtRXhlY3V0YWJs
ZTo6aW5mbygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwp
OwogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFt
RXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9
IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPigKKyAgICAgICAgICAgIGV4ZWN1dGFibGUt
Pm1fcHJvZ3JhbUNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgICAgICBSZWZQdHI8
UHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2so
Ci0gICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmV4ZWN1dGFibGUtPm1f
cHJvZ3JhbUNvZGVCbG9jaykpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGV4ZWN1
dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQ
YXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
YmFzZWxpbmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFJFTEVBU0Vf
QVNTRVJUKGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4odGhpcyk7CisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25Db2RlQmxvY2sqPigKKyAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtp
bmQpLT5iYXNlbGluZVZlcnNpb24oKSk7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBy
ZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCi0gICAgICAgIENvZGVCbG9j
azo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKSk7Ci0g
ICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkp
OworICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAg
cmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjksNiArMTI5LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25S
YW5nZTsKICAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlvbkxldmVsLCAyKSBc
CiAgICAgdih1bnNpZ25lZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAgdih1bnNp
Z25lZCwgbGx2bVNpemVMZXZlbCwgMCkgXAorICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2Up
IC8qIGZvb2wtcHJvb2Ygd2F5IG9mIGNoZWNraW5nIHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBG
VEwuIDstKSAqL1wKICAgICBcCiAgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVl
KSBcCiAgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1i
ZXJPZldvcmtlclRocmVhZHMoMikgLSAxKSBcCkBAIC0xNTYsOSArMTU3LDE0IEBAIHR5cGVkZWYg
T3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcCwgMTAwMCkgXAogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1p
emVTb29uLCAxMDAwKSBcCi0gICAgXAogICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wLCAxKSBcCi0gICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVu
dEZvclJldHVybiwgMTUpIFwKKyAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yRW50cnksIDE1KSBcCisgICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckZUTE9wdGlt
aXplQWZ0ZXJXYXJtVXAsIDI1MDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0
aW1pemVTb29uLCAxMDAwKSBcCisgICAgdihpbnQzMiwgZnRsVGllclVwQ291bnRlckluY3JlbWVu
dEZvckxvb3AsIDEpIFwKKyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9y
UmV0dXJuLCAxNSkgXAorICAgIHYodW5zaWduZWQsIGZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9y
UmVvcHRpbWl6YXRpb24sIDE1KSBcCiAgICAgXAogICAgIHYoaW50MzIsIGV2YWxUaHJlc2hvbGRN
dWx0aXBsaWVyLCAxMCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDYgKzcxMCwxNSBAQCB2b2lkIFZNOjpnYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2CiAgICAgICAgIH0KICAgICB9CiB9CisKK0RGRzo6
V29ya2xpc3QqIFZNOjplbnN1cmVXb3JrbGlzdCgpCit7CisgICAgaWYgKCFERkc6OmVuYWJsZUNv
bmN1cnJlbnRKSVQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAg
ICAgICAgd29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmts
aXN0LmdldCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsx
OTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgp
OwogCiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAu
bWFjaGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAg
ICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVX
b3JrbGlzdCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTg5
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTMtMDktMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBUaGUgREZHIHNob3VsZCBiZSBhYmxlIHRvIHRpZXItdXAgYW5kIE9TUiBlbnRlciBpbnRvIHRo
ZSBGVEwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MjgzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgRml4IGl0IHRvIGNoZWNrIHRoZSByZXN1bHQgaW5zdGVhZCBvZiBwcmludGluZy4KKwor
ICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzOgorCiAy
MDEzLTA5LTAzICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAg
IFtDU1NSZWdpb25zXSBQc2V1ZG8tZWxlbWVudHMgYXMgcmVnaW9ucyBzaG91bGQgbm90IGJlIGV4
cG9zZWQgdG8gSlMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvbWFyc2FnbGlhLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcnNhZ2xpYS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTIsNCArMTIsNiBAQCB2YXIgcmVzdWx0ID0gMDsKIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwOyArK2kpCiAgICAgcmVzdWx0ICs9IG1hcnNhZ2xpYShpLCBpICsgMSwgMTAwMDAwMCk7
CiAKLXByaW50KHJlc3VsdCk7CitpZiAocmVzdWx0ICE9IDgyMTYzODYyNDMpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210408</attachid>
            <date>2013-09-03 13:54:59 -0700</date>
            <delta_ts>2013-09-03 15:20:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>159931</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NSBA
QAorMjAxMy0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBERkcgc2hvdWxkIGJlIGFibGUgdG8gdGllci11cCBhbmQgT1NSIGVudGVyIGludG8gdGhl
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEy
ODM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBERkcgdG8gdGllci11cCBpbnRvIHRo
ZSBGVEwuIFRoaXMgd29ya3MgaW4gYm90aAorICAgICAgICBvZiB0aGUgZXhwZWN0ZWQgdGllci11
cCBtb2RlczoKKyAgICAgICAgCisgICAgICAgIFJlcGxhY2VtZW50OiBmcmVxdWVudGx5IGNhbGxl
ZCBmdW5jdGlvbnMgZXZlbnR1YWxseSBoYXZlIHRoZWlyIGVudHJ5cG9pbnQKKyAgICAgICAgcmVw
bGFjZWQgd2l0aCBvbmUgdGhhdCBnb2VzIGludG8gRlRMLWNvbXBpbGVkIGNvZGUuIE5vdGUsIHRo
aXMgd2lsbCBiZSBhCisgICAgICAgIHNsb3ctZG93biBmb3Igbm93IHNpbmNlIHdlIGRvbid0IHll
dCBoYXZlIExMVk0gY2FsbGluZyBjb252ZW50aW9uIGludGVncmF0aW9uLgorICAgICAgICAKKyAg
ICAgICAgT1NSIGVudHJ5OiBjb2RlIHN0dWNrIGluIGhvdCBsb29wcyBnZXRzIE9TUidkIGludG8g
dGhlIEZUTCBmcm9tIHRoZSBERkcuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQg
aWYgdGhlIERGRyBkZXRlY3RzIHRoYXQgYSBmdW5jdGlvbiBpcyBhbiBGVEwgY2FuZGlkYXRlLCBp
dAorICAgICAgICBpbnNlcnRzIGV4ZWN1dGlvbiBjb3VudGluZyBjb2RlIHNpbWlsYXIgdG8gdGhl
IGtpbmQgdGhhdCB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgIHdvdWxkIHVzZS4gSWYgeW91IHRy
aXAgb24gYSBsb29wIGNvdW50IGluIGEgbG9vcCBoZWFkZXIgdGhhdCBpcyBhbiBPU1IKKyAgICAg
ICAgY2FuZGlkYXRlIChpdCdzIG5vdCBhbiBpbmxpbmVkIGxvb3ApLCB3ZSBkbyBPU1I7IG90aGVy
d2lzZSB3ZSBkbyByZXBsYWNlbWVudC4KKyAgICAgICAgT1NSIGFsbW9zdCBhbHdheXMgYWxzbyBp
bXBsaWVzIGZ1dHVyZSByZXBsYWNlbWVudC4KKyAgICAgICAgCisgICAgICAgIE9TUiBlbnRyeSBp
bnRvIHRoZSBGVEwgaXMgcmVhbGx5IGNvb2wuIEl0IHVzZXMgYSBzcGVjaWFsaXplZCBGVEwgY29t
cGlsZSBvZgorICAgICAgICB0aGUgY29kZSwgd2hlcmUgZWFybHkgaW4gdGhlIERGRyBwaXBlbGlu
ZSB3ZSByZXBsYWNlIHRoZSBvcmlnaW5hbCByb290IGJsb2NrCisgICAgICAgIHdpdGggYW4gT1NS
IGVudHJ5cG9pbnQgYmxvY2sgdGhhdCBqdW1wcyB0byB0aGUgcHJlLWhlYWRlciBvZiB0aGUgaG90
IGxvb3AuCisgICAgICAgIFRoZSBPU1IgZW50cnlwb2ludCBsb2FkcyBhbGwgbGl2ZSBzdGF0ZSBh
dCB0aGUgbG9vcCBwcmUtaGVhZGVyIHVzaW5nIGxvYWRzCisgICAgICAgIGZyb20gYSBzY3JhdGNo
IGJ1ZmZlciwgd2hpY2ggZ2V0cyBwb3B1bGF0ZWQgYnkgdGhlIHJ1bnRpbWUncyBPU1IgZW50cnkK
KyAgICAgICAgcHJlcGFyYXRpb24gY29kZSAoRlRMOjpwcmVwYXJlT1NSRW50cnkoKSkuIFRoaXMg
YXBwcm9hY2ggYXBwZWFycyB0byB3b3JrIHdlbGwKKyAgICAgICAgd2l0aCBhbGwgb2Ygb3VyIHN1
YnNlcXVlbnQgb3B0aW1pemF0aW9ucywgaW5jbHVkaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24s
CisgICAgICAgIENGQSwgYW5kIExJQ00uIExMVk0gc2VlbXMgaGFwcHkgd2l0aCBpdCwgdG9vLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpbW1lZGlhdGVseSBnaXZlcyB1cyBhIDcwJSBzcGVlZC11
cCBvbiBpbWFnaW5nLWdhdXNzaWFuLWJsdXIuIFdlIGNvdWxkCisgICAgICAgIGdldCBhIGJpZ2dl
ciBzcGVlZC11cCBieSBhZGRpbmcgc29tZSBtb3JlIGludGVsbGlnZW5jZSBhbmQgdHdlYWtpbmcg
TExWTSB0bworICAgICAgICBjb21waWxlIGNvZGUgZmFzdGVyLiBUaG9zZSB0aGluZ3Mgd2lsbCBo
YXBwZW4gZXZlbnR1YWxseSBidXQgdGhpcyBpcyBhIGdvb2QKKyAgICAgICAgc3RhcnQuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJp
emUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHRHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6cmVjb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1l
U29vbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3B0aW1pemVTb29uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAg
ICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmlu
YWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
Q29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVByZUhlYWRlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjp1bmxpbmtlZExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2U6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
T1NSRW50cnlwb2ludENyZWF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNvbXBpbGVJblRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUlu
VGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
Ojpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlND
OjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENv
bXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpERkc6OlRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUpOgorICAgICAgICAqIGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Z2xvYmFsV29ya2xpc3QpOgorICAgICAgICAqIGRmZy9ERkdX
b3JrbGlzdC5oOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuaDoK
KyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSk6
CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSk6
CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlC
dWZmZXIpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjplbnRyeUJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpzZXRCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OmJ5dGVjb2RlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Y291bnRFbnRyeUZhaWx1cmUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6ZW50cnlGYWlsdXJlQ291bnQp
OgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUV4dHJhY3RPU1JFbnRy
eUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldExv
Y2FsKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6RlRMOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGZ0bC9GVExPU1JFbnRyeS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjpjcmFzaE5vblRlcm1pbmFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNyYXNo
KToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRl
OjpTdGF0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKEpT
Qzo6UmVnaXN0ZXI6OnVuYm94ZWREb3VibGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBq
aXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmZ0bEZvck9TUkVudHJ5KToK
KyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6Cisg
ICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNl
bWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAg
ICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVXb3JrbGlzdCk6Cisg
ICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBp
bXBsaWNpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBkZmcvREZHTm9kZUZsYWdzLmNwcAogICAgIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNp
c1BoYXNlLmNwcAogICAgIGRmZy9ERkdPU1JFbnRyeS5jcHAKKyAgICBkZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR09TUkV4aXQuY3BwCiAgICAgZGZnL0RG
R09TUkV4aXRCYXNlLmNwcAogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCkBAIC0xNTEs
NiArMTUyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBk
ZmcvREZHVGh1bmtzLmNwcAorICAgIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdVbmlm
aWNhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdVc2VLaW5kLmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTYsNiArMzE2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgXApAQCAtMzU2LDYgKzM1OCw4
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RodW5rcy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGh1bmtzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE1
NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsNiArMTcwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR09wZXJhdGlvbnMu
Y3BwIFwKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgXAogICAg
IGRmZy9ERkdPU1JFbnRyeS5jcHAgXAorICAgIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAgXAogICAgIGRmZy9ERkdPU1JFeGl0LmNwcCBcCiAgICAgZGZnL0RGR09TUkV4aXRC
YXNlLmNwcCBcCiAgICAgZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAgXApAQCAtMTg5LDYgKzE5
MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBcCiAg
ICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIFwKICAgICBkZmcvREZHVGh1bmtz
LmNwcCBcCisgICAgZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIFwKICAgICBk
ZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAgXAogICAgIGRmZy9ERkdVc2VLaW5kLmNwcCBcCiAg
ICAgZGZnL0RGR1ZhbHVlU291cmNlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2
ICszNjksMTggQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDhB
MzEzMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi87IH07CiAJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBD
b2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMxOTE3RDUxRjIy
MDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBG
VExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovOyB9OworCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxNjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE3MTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi87IH07CisJCTBGRDhBMzFDMTdENTFGMjIw
MENBMkM0MCAvKiBGVExPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi87IH07
CisJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
OEEzMUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovOyB9Owor
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEz
MjAxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLzsgfTsKKwkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRkQ4QTMyQjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJ
CTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExB
YmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIy
Q0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFC
IC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDRTcxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIy
Q0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi87IH07CkBAIC0xNTU4LDYg
KzE1NzAsMTggQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwZWN1bGF0ZWRUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEOEEzMTExN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RlQmxvY2tTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4
QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkQ4QTMxNTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHA7IHBhdGggPSBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9T
UkVudHJ5SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExGb3JP
U1JFbnRyeUpJVENvZGUuaDsgcGF0aCA9IGZ0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TE9TUkVudHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9T
UkVudHJ5LmNwcDsgcGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDhBMzE4MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFbnRyeS5oOyBwYXRoID0gZnRs
L0ZUTE9TUkVudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzFEMTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxRTE3RDUxRjU3MDBDQTJDNDAgLyog
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkQ4QTMxRjE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMjAxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdU
b0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZnL0RGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDhBMzIzMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOyBw
YXRoID0gZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHBhdGggPSBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExBYmJyZXZpYXRlZFR5cGVzLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0
ZWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkRCMkNDODE3M0RBNTFF
MDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVG
cm9tQmxvY2suaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZyb21CbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV29ya2xpc3QuY3Bw
OyBwYXRoID0gZGZnL0RGR1dvcmtsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI1MzksNiArMjU2Myw4IEBACiAJCQkJQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZU
TEZhaWwuY3BwICovLAogCQkJCUE3RjI5OTZBMTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmgg
Ki8sCiAJCQkJMEZFQTBBMkIxNzBCNjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZhbHVlLmgg
Ki8sCisJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29k
ZS5jcHAgKi8sCisJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5
SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0
ZWRGdW5jdGlvbi5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3MDk2MDY5MDBCQjcyMkMgLyog
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLApAQCAtMjU1MSw2ICsyNTc3LDggQEAKIAkJCQkw
RkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovLAogCQkJ
CTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovLAogCQkJ
CUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZhbHVlLmggKi8sCisJ
CQkJMEZEOEEzMTcxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCAqLywKKwkJCQkw
RkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCAqLywKIAkJCQkwRjIzNUJD
NjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEYyMzVCQzcxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCAqLywKIAkJCQkwRjIzNUJDODE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovLApAQCAtMzUyNCw2ICszNTUy
LDggQEAKIAkJCQlBN0Q4OUNFRjE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oICovLAogCQkJCTBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdP
U1JFbnRyeS5jcHAgKi8sCiAJCQkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmggKi8sCisJCQkJMEZEOEEzMUQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkQ4QTMxRTE3RDUxRjU3MDBDQTJDNDAgLyog
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkMwOTc4RTE0NkE2RjYz
MDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEZDMDk3NjgxNDY4QTZFRjAwQ0Yy
NDQyIC8qIERGR09TUkV4aXQuaCAqLywKIAkJCQkwRjIzNUJFNzE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdEJhc2UuY3BwICovLApAQCAtMzU2Niw2ICszNTk2LDEyIEBACiAJCQkJMEY2Mzk0
NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAqLywKIAkJ
CQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMw
OTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEZEOEEzMUYxN0Q1
MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovLAorCQkJ
CTBGRDhBMzIwMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNl
LmggKi8sCisJCQkJMEZEOEEzMjExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLywKKwkJCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAg
LyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKKwkJCQkwRkQ4QTMy
MzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZEOEEzMjQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQkwRjYz
OTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8s
CiAJCQkJMEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuaCAqLywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5jcHAgKi8sCkBAIC0zOTc3LDYgKzQwMTMsNyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIw
MDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNTcsNiArNDA5NCw3IEBA
CiAJCQkJMTRCQTdBOTgxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyQzhEMDMxMTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAy
QUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRTUyNkJFMTU5
MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1
MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywK
QEAgLTQyOTIsNiArNDMzMCw3IEBACiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYw
MDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNzI5QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9u
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzE2LDYgKzQzNTUsNyBAQAogCQkJCTBGRjYw
QUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRDhBMzFBMTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdF
eHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyRDYwRTE3MDcwODAwMkM3
RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJC
NDExMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzQ1
LDYgKzQzODUsNyBAQAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkg
LyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEz
QzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4
QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdDMUVBRjIxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrSXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKQEAgLTQzNjgsNiArNDQwOSw3IEBACiAJCQkJQkMx
OEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4
Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00Nzg5LDYgKzQ4MzEsNyBAQAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEw
MEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTRE
Mjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1
ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2
Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
QzExMDdFQzM3NjAwNDI3QTQ4IC8qIENvbW1vbklkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDgwMyw2ICs0ODQ2LDcgQEAKIAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyog
RGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4
IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VD
Mzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZE
OEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUM1MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDg4NSw2ICs0OTI5LDcgQEAKIAkJCQk4Njg4MEY0RDE0
MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVu
a3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBERkdVbmlm
aWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzRCMTQ5MTZENDIwMTAwMDFD
REE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTA1OSw2ICs1MTA0LDcg
QEAKIAkJCQlBNzg1MDdENjE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxv
Y2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8q
IEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEz
NTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRE
MkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC01MTExLDYgKzUxNTcsNyBAQAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1
IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkw
MDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZE
OEEzMkIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAw
MTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJD
NTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTUxNDEsNiArNTE4OCw3IEBACiAJCQkJQkNDRjBEMEMwRUYwQjhBNTAw
NDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyREY0
NDJGMTcwN0FDMDEwMEE1Q0E5NiAvKiBTdXBlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzg2NTU1MTE4Njk3QjQwMDU0MDI3
OSAvKiBUaHVua0dlbmVyYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDcxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3OSw2ICsxNDc5LDcgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9udW1WYXJzKG90
aGVyLm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0
b3IpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWls
RlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIubV92bSwg
b3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fdW5saW5rZWRDb2RlLmdldCgp
KQogICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVj
dXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKICAgICAsIG1fdm0o
b3RoZXIubV92bSkKQEAgLTE1MjksNiArMTUzMCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9u
dW1WYXJzKQogICAgICwgbV9pc0NvbnN0cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0
cnVjdG9yKCkpCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9k
aWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKICAgICAs
IG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUs
IG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5saW5rZWRDb2RlQmxvY2stPnZtKCkpCkBA
IC0yMzc0LDE3ICsyMzc2LDE0IEBAIENvZGVCbG9jayogQ29kZUJsb2NrOjpiYXNlbGluZVZlcnNp
b24oKQogfQogCiAjaWYgRU5BQkxFKEpJVCkKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1JlcGxhY2UpCit7CisgICAgcmV0dXJu
IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIHR5cGVUb1Jl
cGxhY2UpOworfQorCiBib29sIENvZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQog
ewotICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKCkpKTsKLSAgICBi
b29sIHJlc3VsdCA9IEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBl
KCksIGppdFR5cGUoKSk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgQVNTRVJUKEpJVENvZGU6
OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKHJlcGxhY2VtZW50KCktPmpp
dFR5cGUoKSkpOwotICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSA9PSB0aGlzKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
aml0VHlwZSgpKTsKIH0KICNlbmRpZgogCkBAIC0zMDE5LDEwICszMDE4LDEwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGQKICAgICBjYXNlIENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxh
dGlvbkZhaWxlZDoKICAgICAgICAgZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAg
ICAgICAgIC8vIFdlJ2QgbGlrZSB0byBkbyBkb250T3B0aW1pemVBbnl0aW1lU29vbigpIGJ1dCB3
ZSBjYW5ub3QgYmVjYXVzZQogICAgICAgICAvLyBmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29u
Y3VycmVudGx5KCkgaXMgaW5oZXJlbnRseSByYWN5LiBJdCB3b24ndApAQCAtMzAzMCwxNiArMzAy
OSwxNCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgICAg
IC8vIGZ1bmN0aW9uIGVuZHMgdXAgYmVpbmcgYSBuby1vcCwgd2Ugc3RpbGwgZXZlbnR1YWxseSBy
ZXRyeSBhbmQgcmVhbGl6ZQogICAgICAgICAvLyB0aGF0IHdlIGhhdmUgb3B0aW1pemVkIGNvZGUg
cmVhZHkuCiAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ6CiAgICAgICAg
IC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4KICAgICAgICAgY291bnRSZW9wdGlt
aXphdGlvbigpOwogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDgsNyAr
MzA4LDggQEAgcHVibGljOgogICAgIH0KICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJpbGl0eUxldmVsU3RhdGU7IH0KIAotICAg
IGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKTsKKyAgICBib29sIGhhc09wdGltaXplZFJl
cGxhY2VtZW50KEpJVENvZGU6OkpJVFR5cGUgdHlwZVRvUmVwbGFjZSk7CisgICAgYm9vbCBoYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpOyAvLyB0aGUgdHlwZVRvUmVwbGFjZSBpcyBteSBKSVRUeXBl
CiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkBAIC05NTcsNiArOTU4LDggQEAg
cHVibGljOgogICAgIGJvb2wgbV9zaG91bGRBbHdheXNCZUlubGluZWQ7CiAgICAgYm9vbCBtX2Fs
bFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2
ZXJ5IEdDLgogICAgIAorICAgIGJvb2wgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb247CisgICAgCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUwLDYgKzE1MCwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOiB7CisgICAgICAgIGZv
ck5vZGUobm9kZSkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CkBAIC0xNTE1LDYg
KzE1MjAsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
IGNhc2UgUGhhbnRvbToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgQ291bnRFeGVj
dXRpb246CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVw
QXRSZXR1cm46CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyOgorICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgIC8vIFdlIHByZXRlbmQgdGhhdCBpdCBj
YW4gZXhpdCBiZWNhdXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUuCisgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVbnJlYWNo
YWJsZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0MCwxOSArMzE0MCwx
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyKQogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7CiAKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
TG9vcEhpbnQpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV92bS0+d2F0Y2hkb2cu
aXNFbmFibGVkKCkpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1dhdGNoZG9nVGlt
ZXIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50
b20gbm9kZSB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBhIHBsYWNlaG9sZGVyCi0gICAgICAgICAg
ICAgICAgLy8gbm9kZSBmb3IgdGhpcyBieXRlY29kZSBvcC4KLSAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20pOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7CiAgICAgICAgICAgICBzZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkp
OworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQgPj0g
MCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fbGF6eVZhcnMuc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3Jl
Zyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzYzNCw3ICszNjMzLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhi
bG9jayk7CisgICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKGJsb2Nr
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTYg
KzI3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dy
YXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hh
YmlsaXR5KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFj
aGFibGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9jayk7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZ3JhcGgua2lsbFVucmVhY2hhYmxlQmxv
Y2tzKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKQEAgLTMyMCwxOSArMzExLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2lj
QmxvY2sqIGJsb2NrKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgQVNT
RVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsp
Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRl
eCkpOwotICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwotICAgIH0K
LSAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2lj
QmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIE5vZGUqIGxpdmVuZXNzTm9kZSA9IGpldHRpc29uZWRCbG9jay0+
dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2
ICsxMTEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBJc1N0cmluZzoKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgY2FzZSBJbnQzMlRvRG91
YmxlOgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CkBAIC0xMzMsNiArMTM0LDEwIEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKICAgICBjYXNlIFJldHVybjoKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNhc2Ug
Q2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNh
c2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUs
OSBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiBl
eGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjaz4gY2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RI
YW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
IGNhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwogICAgIApAQCAtNjcsOCAr
NjcsNiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAKLSAgICBB
U1NFUlQob3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRfTUFYKTsKLQogICAgIGlmICghT3B0
aW9uczo6dXNlREZHSklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogCkBAIC03Niw5ICs3NCw3
IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICAgICAgcmV0dXJu
IENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAogICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMo
KSkKLSAgICAgICAgZGF0YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ss
ICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSwgIlxuIik7Ci0gICAgCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgZGF0
YUxvZygiREZHKERyaXZlcikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2Rl
LCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNv
dW50KCksICJcbiIpOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBzdHVicyB0aGF0
IHRoZSBERkcgaXMgZ29pbmcgdG8gdXNlIGFyZSBpbml0aWFsaXplZC4gV2Ugd2FudCB0bwogICAg
IC8vIG1ha2Ugc3VyZSB0aGF0IGFsIEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRp
b24gb24gdGhlIG1haW4gdGhyZWFkLgpAQCAtOTMsMjkgKzg5LDggQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIHZtLmdldENUSVN0dWIoRlRMOjpvc3JFeGl0R2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICNlbmRpZgogICAgIAotICAgIC8vIERlcml2ZSBvdXIg
c2V0IG9mIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIGNvbXBpbGF0aW9uIG11c3QgYmUgYXQgbGVh
c3QgY29uc2VydmF0aXZlCi0gICAgLy8gZW5vdWdoIHRvIGFsbG93IGZvciBPU1IgZW50cnkgd2l0
aCB0aGVzZSB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7Ci0gICAgaWYg
KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2Rl
QmxvY2stPm1fbnVtVmFyczsKLSAgICBlbHNlCi0gICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0g
MDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcgUGxhbihj
b2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMp
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxlVmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpCi0gICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAg
ICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKLSAgICAgICAgICAg
ICYmIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkg
ewotICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUgJ3Ro
aXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKLSAgICAgICAgICAgIC8vIGFs
c28gbmV2ZXIgYmUgdXNlZC4gSXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSBwdXQgaW50byB0aGUg
dmFsdWUgZm9yIHRoaXMsCi0gICAgICAgICAgICAvLyBidXQgaXQgaGFzIHRvIGJlIGFuIGFjdHVh
bCB2YWx1ZSB0aGF0IGNhbiBiZSBncm9ra2VkIGJ5IHN1YnNlcXVlbnQgREZHIHBhc3NlcywKLSAg
ICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVybmluZyBpdCBpbnRvIFVu
ZGVmaW5lZC4KLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1ZXNbaV0gPSBqc1VuZGVm
aW5lZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXNbaV0gPSBleGVjLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICB9CisgICAg
ICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0
SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgaWYgKHdvcmtsaXN0KSB7CiAgICAgICAgIHBsYW4t
PmNhbGxiYWNrID0gY2FsbGJhY2s7CkBAIC0xMzAsNyArMTA1LDcgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwKKyAgICBWTSYsIENvZGVCbG9jayosIENv
bXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwKICAgICBQ
YXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0KikKIHsKICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMzgsMTMgKzExMywxMyBAQCBzdGF0aWMg
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gcGFzc2VkQ2FsbGJhY2ssCi0gICAgV29ya2xpc3QqIHdvcmtsaXN0KQorICAgIFZNJiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5k
bGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBh
c3NlZENhbGxiYWNrLCBXb3JrbGlzdCogd29ya2xpc3QpCiB7CiAgICAgUmVmUHRyPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgZXhlYywgY29kZUJs
b2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrLCB3b3JrbGlzdCk7Cisg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhh
bmRsZVZhbHVlcywgY2FsbGJhY2ssIHdvcmtsaXN0KTsKICAgICBpZiAocmVzdWx0ICE9IENvbXBp
bGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRl
KGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niwx
MCBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhCiAKIC8vIElmIHRo
ZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2UgZG8gYSBjb25jdXJyZW50IGNvbXBpbGUuIE90aGVy
d2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAvLyBjb21waWxlLiBFdmVuIGlmIHdlIGRvIGEgc3lu
Y2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVzdWx0Lgot
Q29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBDb21waWxh
dGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+LCBXb3JrbGlzdCopOworQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZSgKKyAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0
SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiwgV29ya2xpc3QqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE1vdkhp
bnQ6CiAgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgICAgIGNhc2UgQ2hlY2tU
aWVyVXBBdFJldHVybjoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAKQEAgLTg5Niw2ICs4OTksOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEZv
cmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgICAgIGNh
c2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAg
ICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRl
ZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJyIiwgb3BlcmFuZCwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJp
YWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRM
b2NhbCgpKSB7CisgICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+dW5saW5rZWRMb2NhbCgpOwor
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJhcmciLCBvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInIiLCBvcGVyYW5kKTsKKyAgICB9
CiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50QnVmZmVyKCkpIHsKICAgICAgICAgb3V0LnByaW50
KGNvbW1hKTsKICAgICAgICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7
CkBAIC00ODcsNiArNDk0LDI5IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAg
ICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKIH0KIAordm9pZCBHcmFwaDo6a2lsbEJsb2NrQW5k
SXRzQ29udGVudHMoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgIG1fYWxsb2Nh
dG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIG5vZGVJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgbV9hbGxvY2F0b3Iu
ZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgCisgICAga2lsbEJsb2NrKGJsb2NrKTsK
K30KKwordm9pZCBHcmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tzKCkKK3sKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBudW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGJsb2NrLT5pc1JlYWNoYWJsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAga2lsbEJsb2NrQW5kSXRzQ29udGVudHMoYmxvY2spOworICAgIH0KK30KKwog
dm9pZCBHcmFwaDo6cmVzZXRFeGl0U3RhdGVzKCkKIHsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00ODksNiArNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAga2lsbEJsb2NrKGJhc2ljQmxv
Y2stPmluZGV4KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBraWxsQmxvY2tBbmRJdHNDb250ZW50
cyhCYXNpY0Jsb2NrKik7CisgICAgCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGVCbG9ja3MoKTsK
KyAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gaXNOdW1lcmljYWwobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSAmJiBp
c051bWVyaWNhbChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkpOwpAQCAtNjk4LDYgKzcwMiw3IEBA
IHB1YmxpYzoKICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJs
ZUJhc2UqPiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3Rv
ciBtX3ByZXNlcnZlZFZhcnM7CisgICAgQml0VmVjdG9yIG1fbGF6eVZhcnM7CiAgICAgRG9taW5h
dG9ycyBtX2RvbWluYXRvcnM7CiAgICAgTmF0dXJhbExvb3BzIG1fbmF0dXJhbExvb3BzOwogICAg
IHVuc2lnbmVkIG1fbG9jYWxWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgcm9vdC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNlOwogICAg
IHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAg
ICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgICAgICBpZiAo
bV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQu
YXJndW1lbnQoaSkubWFrZVRvcCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjksOCAr
MTMwLDYgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAg
ICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0VHlwZShTcGVjQ2VsbCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5t
YWtlVG9wKCk7Ci0gICAgICAgIAotICAgICAgICByb290LT52YWx1ZXNBdFRhaWwuYXJndW1lbnQo
aSkuY2xlYXIoKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBy
b290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDgg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogSklUQ29kZTo6SklUQ29kZSgpCkBAIC01
OSw2ICs2MSwxNDUgQEAgdm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCiAgICAgdmFyaWFibGVF
dmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwogfQogCit2b2lkIEpJVENvZGU6OnJlY29uc3RydWN0
KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2ln
bmVkIHN0cmVhbUluZGV4LAorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiByZXN1bHQpCit7
CisgICAgdmFyaWFibGVFdmVudFN0cmVhbS5yZWNvbnN0cnVjdCgKKyAgICAgICAgY29kZUJsb2Nr
LCBjb2RlT3JpZ2luLCBtaW5pZmllZERGRywgc3RyZWFtSW5kZXgsIHJlc3VsdCk7Cit9CisKK3Zv
aWQgSklUQ29kZTo6cmVjb25zdHJ1Y3QoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwK
KyAgICBPcGVyYW5kczxKU1ZhbHVlPiYgcmVzdWx0KQoreworICAgIE9wZXJhbmRzPFZhbHVlUmVj
b3Zlcnk+IHJlY292ZXJpZXM7CisgICAgcmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBjb2RlT3JpZ2lu
LCBzdHJlYW1JbmRleCwgcmVjb3Zlcmllcyk7CisgICAgCisgICAgcmVzdWx0ID0gT3BlcmFuZHM8
SlNWYWx1ZT4oT3BlcmFuZHNMaWtlLCByZWNvdmVyaWVzKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
cmVzdWx0LnNpemUoKTsgaS0tOykgeworICAgICAgICBpbnQgb3BlcmFuZCA9IHJlc3VsdC5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAorICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQo
b3BlcmFuZCkKKyAgICAgICAgICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQorICAg
ICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQorICAgICAg
ICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7CisgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRo
ZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAorICAgICAgICAgICAg
Ly8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRv
IHRoZSB2YWx1ZSBmb3IgdGhpcywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4g
YWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2Vz
LAorICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGlu
dG8gVW5kZWZpbmVkLgorICAgICAgICAgICAgcmVzdWx0W2ldID0ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZVJl
Y292ZXJ5IHJlY292ZXJ5ID0gcmVjb3Zlcmllc1tpXTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsK
KyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEFs
cmVhZHlJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZENl
bGw6CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEJvb2xlYW46CisgICAg
ICAgICAgICB2YWx1ZSA9IGV4ZWMtPnIob3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0FzVW5ib3hlZEludDMyOgorICAg
ICAgICAgICAgdmFsdWUgPSBqc051bWJlcihleGVjLT5yKG9wZXJhbmQpLnVuYm94ZWRJbnQzMigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFscmVhZHlJbkpTU3RhY2tBc1Vu
Ym94ZWREb3VibGU6CisgICAgICAgICAgICB2YWx1ZSA9IGpzRG91YmxlTnVtYmVyKGV4ZWMtPnIo
b3BlcmFuZCkudW5ib3hlZERvdWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENvbnN0YW50OgorICAgICAgICAgICAgdmFsdWUgPSByZWNvdmVyeS5jb25zdGFudCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorfQorCisjaWYgRU5BQkxFKEZUTF9KSVQp
Citib29sIEpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIHJldHVybiB0aWVyVXBDb3VudGVyLmNoZWNrSWZUaHJlc2hv
bGRDcm9zc2VkQW5kU2V0KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworfQorCit2b2lk
IEpJVENvZGU6Om9wdGltaXplTmV4dEludm9jYXRpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2Nr
LCAiOiBGVEwtb3B0aW1pemluZyBuZXh0IGludm9jYXRpb24uXG4iKTsKKyAgICB0aWVyVXBDb3Vu
dGVyLnNldE5ld1RocmVzaG9sZCgwLCBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKK30K
Kwordm9pZCBKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1lU29vbihDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZH
SklUKTsKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpj
b2RlQmxvY2ssICI6IE5vdCBGVEwtb3B0aW1pemluZyBhbnl0aW1lIHNvb24uXG4iKTsKKyAgICB0
aWVyVXBDb3VudGVyLmRlZmVySW5kZWZpbml0ZWx5KCk7Cit9CisKK3ZvaWQgSklUQ29kZTo6b3B0
aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ssICI6IEZUTC1vcHRpbWl6
aW5nIGFmdGVyIHdhcm0tdXAuXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gY29kZUJs
b2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1RocmVzaG9s
ZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6OnRocmVz
aG9sZEZvckZUTE9wdGltaXplQWZ0ZXJXYXJtVXAoKSksCisgICAgICAgIGJhc2VsaW5lKTsKK30K
Kwordm9pZCBKSVRDb2RlOjpvcHRpbWl6ZVNvb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0YUxvZygqY29kZUJsb2NrLCAi
OiBGVEwtb3B0aW1pemluZyBzb29uLlxuIik7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZSA9IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgdGllclVwQ291bnRlci5zZXROZXdUaHJl
c2hvbGQoCisgICAgICAgIGJhc2VsaW5lLT5hZGp1c3RlZENvdW50ZXJWYWx1ZShPcHRpb25zOjp0
aHJlc2hvbGRGb3JGVExPcHRpbWl6ZVNvb24oKSksCisgICAgICAgIGJhc2VsaW5lKTsKK30KKwor
dm9pZCBKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAg
IGRhdGFMb2coKmNvZGVCbG9jaywgIjogRm9yY2luZyBzbG93IHBhdGggY29uY3VycmVudGx5IGZv
ciBGVEwgZW50cnkuXG4iKTsKKyAgICB0aWVyVXBDb3VudGVyLmZvcmNlU2xvd1BhdGhDb25jdXJy
ZW50bHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKTsKKyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQ29tcGls
YXRpb25TdWNjZXNzZnVsOgorICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKGNvZGVCbG9j
ayk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAg
ICBkb250T3B0aW1pemVBbnl0aW1lU29vbihjb2RlQmxvY2spOworICAgICAgICBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbiA9IHRydWU7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CisgICAgICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29t
cGlsYXRpb25JbnZhbGlkYXRlZDoKKyAgICAgICAgLy8gVGhpcyBpcyB3ZWlyZCAtIGl0IHdpbGwg
b25seSBoYXBwZW4gaW4gY2FzZXMgd2hlbiB0aGUgREZHIGNvZGUgYmxvY2sgKGkuZS4KKyAgICAg
ICAgLy8gdGhlIGNvZGUgYmxvY2sgdGhhdCB0aGlzIEpJVENvZGUgYmVsb25ncyB0bykgaXMgYWxz
byBpbnZhbGlkYXRlZC4gU28gaXQKKyAgICAgICAgLy8gZG9lc24ndCByZWFsbHkgbWF0dGVyIHdo
YXQgd2UgZG8uIEJ1dCwgd2UgZG8gdGhlIHJpZ2h0IHRoaW5nIGFueXdheS4gTm90ZQorICAgICAg
ICAvLyB0aGF0IHVzIGNvdW50aW5nIHRoZSByZW9wdGltaXphdGlvbiBhY3R1YWxseSBtZWFucyB0
aGF0IHdlIG1pZ2h0IGNvdW50IGl0CisgICAgICAgIC8vIHR3aWNlLiBCdXQgdGhhdCdzIGdlbmVy
YWxseSBPSy4gSXQncyBiZXR0ZXIgdG8gb3ZlcmNvdW50IHJlb3B0aW1pemF0aW9ucworICAgICAg
ICAvLyB0aGFuIGl0IGlzIHRvIHVuZGVyY291bnQgdGhlbS4KKyAgICAgICAgY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKS0+Y291bnRSZW9wdGltaXphdGlvbigpOworICAgICAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDExICszMCwxMyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNs
dWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNp
bmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNp
bmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5o
IgorI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9TZWdt
ZW50ZWRWZWN0b3IuaD4KQEAgLTkzLDggKzk1LDMwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIE9wZXJhbmRzPFZhbHVl
UmVjb3Zlcnk+JiByZXN1bHQpOworICAgIAorICAgIC8vIFRoaXMgaXMgb25seSBhcHBsaWNhYmxl
IGlmIHdlJ3JlIGF0IGEgcG9pbnQgd2hlcmUgYWxsIHZhbHVlcyBhcmUgc3BpbGxlZCB0byB0aGUK
KyAgICAvLyBzdGFjay4gQ3VycmVudGx5LCBpdCBhbHNvIGhhcyB0aGUgcmVzdHJpY3Rpb24gdGhh
dCB0aGUgdmFsdWVzIG11c3QgYmUgaW4gdGhlaXIKKyAgICAvLyBieXRlY29kZS1kZXNpZ25hdGVk
IHN0YWNrIHNsb3RzLgorICAgIHZvaWQgcmVjb25zdHJ1Y3QoCisgICAgICAgIEV4ZWNTdGF0ZSos
IENvZGVCbG9jayosIENvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4LCBPcGVyYW5kczxK
U1ZhbHVlPiYgcmVzdWx0KTsKKworI2lmIEVOQUJMRShGVExfSklUKQorICAgIC8vIE5CLiBBbGwg
b2YgdGhlc2UgbWV0aG9kcyB0YWtlIENvZGVCbG9jayogYmVjYXVzZSB0aGV5IG1heSB3YW50IHRv
IHVzZQorICAgIC8vIENvZGVCbG9jaydzIGxvZ2ljIGFib3V0IHNjYWxpbmcgdGhyZXNob2xkcy4g
SXQgc2hvdWxkIGJlIGEgREZHIENvZGVCbG9jay4KKyAgICAKKyAgICBib29sIGNoZWNrSWZPcHRp
bWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVO
ZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uKENvZGVCbG9jayopOworICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcChDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIG9wdGltaXplU29vbihDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGZvcmNlT3B0
aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29kZUJsb2NrKik7CisgICAgdm9pZCBzZXRP
cHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29kZUJsb2NrKiwg
Q29tcGlsYXRpb25SZXN1bHQpOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAgIAogICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgCisgICAgCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2Rl
UmVmKCkuCiAKQEAgLTEwNiw2ICsxMzAsMTAgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3Rv
cjxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKICAgICBERkc6
OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlm
aWVkR3JhcGggbWluaWZpZWRERkc7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgRXhlY3V0aW9u
Q291bnRlciB0aWVyVXBDb3VudGVyOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IG9zckVudHJ5Qmxv
Y2s7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6
ZXIuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDI3ICs0OCwzMSBAQCBKSVRG
aW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUo
KQogewotICAgIGZpbmFsaXplQ29tbW9uKCk7Ci0gICAgCiAgICAgbV9qaXRDb2RlLT5pbml0aWFs
aXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgp
KTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCkpOwogICAgIAorICAgIGZpbmFsaXplQ29tbW9uKCk7CisgICAgCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkK
IHsKLSAgICBmaW5hbGl6ZUNvbW1vbigpOwotICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjayA9IG1fbGlua0J1ZmZlci0+bG9jYXRpb25PZihtX2FyaXR5Q2hlY2sp
OwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6
ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7CiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklU
Q29kZShtX2ppdENvZGUsIHdpdGhBcml0eUNoZWNrKTsKICAgICAKKyAgICBmaW5hbGl6ZUNvbW1v
bigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEpJVEZpbmFsaXplcjo6Zmlu
YWxpemVDb21tb24oKQogeworI2lmIEVOQUJMRShGVExfSklUKQorICAgIG1faml0Q29kZS0+b3B0
aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrLmdldCgpKTsKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKyAgICAKICAgICBpZiAobV9wbGFuLmNvbXBpbGF0aW9uKQogICAgICAgICBt
X3BsYW4udm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5hZGRDb21waWxhdGlvbihtX3BsYW4uY29t
cGlsYXRpb24pOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJl
SGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywzMSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK0Jhc2ljQmxvY2sqIGNyZWF0ZVByZUhlYWRlcihHcmFw
aCYgZ3JhcGgsIEJsb2NrSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciA9IGluc2VydGlvblNldC5pbnNlcnRC
ZWZvcmUoYmxvY2spOworICAgIHByZUhlYWRlci0+YXBwZW5kTm9kZSgKKyAgICAgICAgZ3JhcGgs
IFNwZWNOb25lLCBKdW1wLCBibG9jay0+YXQoMCktPmNvZGVPcmlnaW4sIE9wSW5mbyhibG9jaykp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3JJbmRleCA9IDA7IHByZWRlY2Vz
c29ySW5kZXggPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsr
KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29y
c1twcmVkZWNlc3NvckluZGV4XTsKKyAgICAgICAgaWYgKGdyYXBoLm1fZG9taW5hdG9ycy5kb21p
bmF0ZXMoYmxvY2ssIHByZWRlY2Vzc29yKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBibG9jay0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXgtLV0gPSBibG9jay0+cHJlZGVj
ZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBwcmVkZWNlc3Nvci0+bnVt
U3VjY2Vzc29ycygpOyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayomIHN1Y2Nlc3NvciA9IHByZWRlY2Vzc29yLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOwor
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIHN1Y2Nlc3NvciA9IHByZUhlYWRlcjsKKyAgICAgICAgICAgIHBy
ZUhlYWRlci0+cHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYmxvY2stPnByZWRlY2Vzc29ycy5hcHBlbmQocHJlSGVhZGVyKTsKKyAg
ICByZXR1cm4gcHJlSGVhZGVyOworfQorCiBjbGFzcyBMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UoR3JhcGgmIGdyYXBoKQpAQCAtNzAsMjYgKzk1LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKCFuZWVkc05ld1ByZUhlYWRlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlSGVhZGVyID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0QmVmb3JlKGxvb3AuaGVhZGVyKCkpOwotICAgICAgICAgICAgcHJlSGVhZGVyLT5h
cHBlbmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBsb29w
LmhlYWRlcigpLT5hdCgwKS0+Y29kZU9yaWdpbiwgT3BJbmZvKGxvb3AuaGVhZGVyKCkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvckluZGV4ID0g
MDsgcHJlZGVjZXNzb3JJbmRleCA8IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycy5zaXplKCk7
IHByZWRlY2Vzc29ySW5kZXgrKykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yID0gbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzW3ByZWRlY2Vzc29ySW5kZXhdOwot
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMobG9vcC5o
ZWFkZXIoKSwgcHJlZGVjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRl
eC0tXSA9IGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29ycy5sYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IHByZWRlY2Vzc29yLT5udW1TdWNjZXNz
b3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3IgPSBwcmVkZWNlc3Nvci0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBsb29wLmhlYWRlcigpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3NvciA9IHByZUhlYWRlcjsKLSAgICAgICAgICAgICAgICAgICAgcHJlSGVhZGVyLT5wcmVkZWNl
c3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29y
cy5hcHBlbmQocHJlSGVhZGVyKTsKKyAgICAgICAgICAgIGNyZWF0ZVByZUhlYWRlcihtX2dyYXBo
LCBtX2luc2VydGlvblNldCwgbG9vcC5oZWFkZXIoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5leGVjdXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICsz
MiwyNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEJsb2Nr
SW5zZXJ0aW9uU2V0OwogY2xhc3MgR3JhcGg7CitzdHJ1Y3QgQmFzaWNCbG9jazsKIAogLy8gSW5z
ZXJ0cyBkdW1teSBiYXNpYyBibG9ja3MgYmVmb3JlIGFueSBsb29wIGhlYWRlcnMgdGhhdCBkb24n
dCBhbHJlYWR5IGhhdmUKIC8vIGEgc2luZ2xlIG5vbi1sb29wIHByZWRlY2Vzc29yLgogCiBib29s
IHBlcmZvcm1Mb29wUHJlSGVhZGVyQ3JlYXRpb24oR3JhcGgmKTsKIAorLy8gQ3JlYXRlcyBhIG5l
dyBiYXNpYyBibG9jayAoYSBwcmUtaGVhZGVyKSB0aGF0IGp1bXBzIHRvIHRoZSBnaXZlbiBibG9j
ay4gQWxsCisvLyBwcmVkZWNlc3NvcnMgb2YgdGhlIGdpdmVuIGJsb2NrIHRoYXQgYXJlbid0IGRv
bWluYXRlZCBieSBpdCBhcmUgcmVyb3V0ZWQgdG8KKy8vIHRoZSBwcmUtaGVhZGVyLgorLy8KKy8v
IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGFuZCBpdCdzIHVzZWQgaW4gYSBzdXJn
aWNhbCBmYXNoaW9uIGJ5CisvLyBPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS4KKy8vCisvLyBO
b3RlIHRoYXQgZXhlY3V0aW5nIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgaGF2aW5nIGFuIGludGFj
dCBkb21pbmF0b3JzCisvLyBhbmFseXNpcy4gWW91IHNob3VsZCBydW4gdGhhdCBhbmFseXNpcyBi
ZWZvcmUgZG9pbmcgZGFtYWdlIHRvIHRoZSBDRkcsIGV2ZW4KKy8vIGlmIHNhaWQgZGFtYWdlIGlz
IGRvbmUgYmVmb3JlIHlvdSBjYWxsIHRoaXMuCitCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFkZXIo
R3JhcGgmLCBCbG9ja0luc2VydGlvblNldCYsIEJhc2ljQmxvY2sqKTsKKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNyw5ICs1MjcsMjAg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRhKCktPmxv
Y2FsKCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgor
ICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHVubGlua2VkTG9jYWwoKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCk7CisgICAgICAgIEFT
U0VSVChoYXNVbmxpbmtlZExvY2FsKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihtX29wSW5mbyk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2
OSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRmx1c2gs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9t
TG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCisgICAg
LyogSGludCB0aGF0IHRoaXMgaXMgd2hlcmUgYnl0ZWNvZGUgdGhpbmtzIGlzIGEgZ29vZCBwbGFj
ZSB0byBPU1IuIE5vdGUgdGhhdCB0aGlzICovXAorICAgIC8qIHdpbGwgZXhpc3QgZXZlbiBpbiBp
bmxpbmVkIGxvb3BzLiBUaGlzIGhhcyBubyBleGVjdXRpb24gc2VtYW50aWNzIGJ1dCBpdCBtdXN0
ICovXAorICAgIC8qIHN1cnZpdmUgYWxsIERDRS4gV2UgdHJlYXQgdGhpcyBhcyBiZWluZyBhIGNh
bi1leGl0IGJlY2F1c2UgdGllci11cCB0byBGVEwgbWF5ICovXAorICAgIC8qIHdhbnQgYWxsIHN0
YXRlLiAqL1wKKyAgICBtYWNybyhMb29wSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIFwK
KyAgICAvKiBTcGVjaWFsIG5vZGUgZm9yIE9TUiBlbnRyeSBpbnRvIHRoZSBGVEwuIEluZGljYXRl
cyB0aGF0IHdlJ3JlIGxvYWRpbmcgYSBsb2NhbCAqL1wKKyAgICAvKiB2YXJpYWJsZSBmcm9tIHRo
ZSBzY3JhdGNoIGJ1ZmZlci4gKi9cCisgICAgbWFjcm8oRXh0cmFjdE9TUkVudHJ5TG9jYWwsIE5v
ZGVSZXN1bHRKUykgXAorICAgIFwKKyAgICAvKiBUaWVyLXVwIGNoZWNrcyBmcm9tIHRoZSBERkcg
dG8gdGhlIEZUTC4gKi9cCisgICAgbWFjcm8oQ2hlY2tUaWVyVXBJbkxvb3AsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1RpZXJVcEFuZE9TUkVudGVyLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCisgICAgbWFjcm8oQ2hlY2tUaWVyVXBBdFJldHVybiwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIFwKICAgICAvKiBHZXQgdGhlIHZhbHVlIG9mIGEgbG9jYWwgdmFyaWFibGUsIHdpdGhv
dXQgbGlua2luZyBpbnRvIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgKi9cCiAgICAgLyogbmV0d29y
ay4gVGhpcyBpcyBvbmx5IHZhbGlkIGZvciB2YXJpYWJsZSBhY2Nlc3NlcyB3aG9zZSBwcmVkaWN0
aW9ucyBvcmlnaW5hdGVkICovXAogICAgIC8qIGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbG9j
YWwgYWNjZXNzLCBhbmQgdGh1cyBoYWQgdGhlaXIgb3duIHByb2ZpbGluZy4gKi9cCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDE4ICs0MCw0MyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICNpZiBERkdfRU5BQkxFKE9TUl9FTlRS
WSkKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsK
KyAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgp
KSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKIAogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJPU1Ig
aW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAiLCAqY29kZUJsb2NrLAorICAg
ICAgICAgICAgIkRGRyBPU1IgaW4gIiwgKmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgIiAtPiAi
LCAqY29kZUJsb2NrLAogICAgICAgICAgICAgIiBmcm9tIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICJc
biIpOwogICAgIH0KICAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CisgICAgICAg
IAorICAgICAgICAvLyBXaGVuIHdpbGwgdGhpcyBoYXBwZW4/IFdlIGNvdWxkIGhhdmU6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIC0gQW4gZXhpdCBmcm9tIHRoZSBGVEwgSklUIGludG8gdGhlIGJh
c2VsaW5lIEpJVCBmb2xsb3dlZCBieSBhbiBhdHRlbXB0CisgICAgICAgIC8vICAgdG8gcmVlbnRl
ci4gV2UncmUgZmluZSB3aXRoIGFsbG93aW5nIHRoaXMgdG8gZmFpbC4gSWYgaXQgaGFwcGVucwor
ICAgICAgICAvLyAgIGVub3VnaCB3ZSdsbCBqdXN0IHJlb3B0aW1pemUuIEl0IGJhc2ljYWxseSBt
ZWFucyB0aGF0IHRoZSBPU1IgZXhpdCBjb3N0CisgICAgICAgIC8vICAgdXMgZGVhcmx5IGFuZCBz
byByZW9wdGltaXppbmcgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAgICAgICAvLworICAg
ICAgICAvLyAtIFdlIGhhdmUgcmVjdXJzaXZlIGNvZGUgd2l0aCBob3QgbG9vcHMuIENvbnNpZGVy
IHRoYXQgZm9vIGhhcyBhIGhvdCBsb29wCisgICAgICAgIC8vICAgdGhhdCBjYWxscyBpdHNlbGYu
IFdlIGhhdmUgdHdvIGZvbydzIG9uIHRoZSBzdGFjaywgbGV0cyBjYWxsIHRoZW0gZm9vMQorICAg
ICAgICAvLyAgIGFuZCBmb28yLCB3aXRoIGZvbzEgaGF2aW5nIGNhbGxlZCBmb28yIGZyb20gZm9v
J3MgaG90IGxvb3AuIGZvbzIgZ2V0cworICAgICAgICAvLyAgIG9wdGltaXplZCBhbGwgdGhlIHdh
eSBpbnRvIHRoZSBGVEwuIFRoZW4gaXQgcmV0dXJucyBpbnRvIGZvbzEsIGFuZCB0aGVuCisgICAg
ICAgIC8vICAgZm9vMSB3YW50cyB0byBnZXQgb3B0aW1pemVkLiBJdCBtaWdodCByZWFjaCB0aGlz
IGNvbmNsdXNpb24gZnJvbSBpdHMKKyAgICAgICAgLy8gICBob3QgbG9vcCBhbmQgYXR0ZW1wdCB0
byBPU1IgZW50ZXIuIEFuZCB3ZSdsbCB0ZWxsIGl0IHRoYXQgaXQgY2FuJ3QuIEl0CisgICAgICAg
IC8vICAgbWlnaHQgYmUgd29ydGggYWRkcmVzc2luZyB0aGlzIGNhc2UsIGJ1dCBJIGp1c3QgdGhp
bmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgLy8gICBiZSBzdXBlciByYXJlLiBGb3Igbm93LCBp
ZiBpdCBkb2VzIGhhcHBlbiwgaXQnbGwgY2F1c2Ugc29tZSBjb21waWxhdGlvbgorICAgICAgICAv
LyAgIHRocmFzaGluZy4KKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHRoZSB0YXJn
ZXQgY29kZSBibG9jayBpcyBub3QgREZHLlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
ZygpLT5vc3JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgIAog
ICAgIGlmICghZW50cnkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVi
bGljOgorICAgIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIk9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIikKKyAgICB7CisgICAg
fQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
Z3JhcGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNv
ZGVJbmRleDsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOworICAgICAgICAKKyAg
ICAgICAgLy8gTmVlZGVkIGJ5IGNyZWF0ZVByZUhlYWRlcigpLgorICAgICAgICBtX2dyYXBoLm1f
ZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIAorICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lID0gbV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2s7CisgICAgICAg
IAorICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgTm9kZSogZmlyc3ROb2RlID0gYmxvY2stPmF0KDApOworICAgICAgICAgICAgaWYgKGZp
cnN0Tm9kZS0+b3AoKSA9PSBMb29wSGludAorICAgICAgICAgICAgICAgICYmIGZpcnN0Tm9kZS0+
Y29kZU9yaWdpbiA9PSBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAg
ICAgdGFyZ2V0ID0gYmxvY2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRhcmdldCkgeworICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHRlcnJpYmxlIG91dGNvbWUuIEl0IHNob3VsZG4ndCBvZnRlbiBoYXBwZW4gYnV0IGl0
IG1pZ2h0CisgICAgICAgICAgICAvLyBoYXBwZW4gYW5kIHNvIHdlIHNob3VsZCBkZWZlbmQgYWdh
aW5zdCBpdC4gSWYgaXQgaGFwcGVucywgdGhlbiB0aGlzCisgICAgICAgICAgICAvLyBjb21waWxh
dGlvbiBpcyBhIGZhaWx1cmUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBo
KTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0KDApOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0YXJnZXQtPmF0KDAp
LT5jb2RlT3JpZ2luOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAg
ICAgICAgIE5vZGUqIG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChh
cmd1bWVudCk7CisgICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKKyAgICAgICAgICAgICAgICAv
LyBKdXN0IGZvciBzYW5pdHksIGFsd2F5cyBoYXZlIGEgU2V0QXJndW1lbnQgZXZlbiBpZiBpdCdz
IG5vdCBuZWVkZWQuCisgICAgICAgICAgICAgICAgb2xkTm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVu
dHNbYXJndW1lbnRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5l
d1Jvb3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNl
dEFyZ3VtZW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1th
cmd1bWVudF0gPSBub2RlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsg
bG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKKyAgICAg
ICAgICAgIE5vZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGxvY2FsKTsKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNIZWFkKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IHBy
ZXZpb3VzSGVhZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCB2YXJpYWJs
ZS0+cHJlZGljdGlvbigpLCBFeHRyYWN0T1NSRW50cnlMb2NhbCwgY29kZU9yaWdpbiwKKyAgICAg
ICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG5ld1Jv
b3QtPmFwcGVuZE5vZGUoCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIFNldExv
Y2FsLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgIG1f
Z3JhcGgsIFNwZWNOb25lLCBKdW1wLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGNy
ZWF0ZVByZUhlYWRlcihtX2dyYXBoLCBpbnNlcnRpb25TZXQsIHRhcmdldCkpKTsKKyAgICAgICAg
CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CisgICAgICAgIG1fZ3JhcGgucmVzZXRS
ZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtT1NSRW50cnlw
b2ludENyZWF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIE9TUiBFbnRyeXBvaW50IENyZWF0aW9uIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHT1NSRW50
cnlwb2ludENyZWF0aW9uUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBHcmFwaDsKKworLy8gVGhpcyBwaGFzZSBpcyBvbmx5IGZvciBjb21waWxhdGlvbiBwaXBl
bGluZXMgdGhhdCBnbyB0aHJvdWdoIFNTQSwgYW5kIHRoYXQKKy8vIGRvIGEgc3BlY2lhbGl6ZWQg
T1NSIGVudHJ5IGNvbXBpbGUuIEN1cnJlbnRseSB0aGF0IG1lYW5zIEZUTC4KKy8vCisvLyBDcmVh
dGVzIGFuIE9TUiBlbnRyeXBvaW50IHRoYXQgZXN0YWJsaXNoZXMgYWxsIGFyZ3VtZW50IGFuZCBs
b2NhbCB2YXJpYWJsZQorLy8gdmFsdWVzLiBUaGlzIGVudHJ5cG9pbnQgb25seSB3b3JrcyBmb3Ig
dGhlIFBsYW46Om9zckVudHJ5Qnl0ZWNvZGVJbmRleC4KKy8vIFVubGlrZSBvcmRpbmFyeSBPU1Ig
ZW50cnkgaW50byB0aGUgREZHLCB0aGlzIGZvcmNlcyBhbGwgdmFyaWFibGVzIHNsdXJwZWQKKy8v
IGluIHRocm91Z2ggT1NSIGVudHJ5IHRvIGFwcGVhciBUT1AgdG8gdGhlIENGQS4gSGVuY2UgdGhp
cyBwaGFzZSBtdXN0IGJlIHJ1bgorLy8gZWFybHkgLSBiZWZvcmUgZG9pbmcgYW55IENGQS4gQnV0
IHRoaXMgYWxzbyBkb2VzIHNvbWUgYWRkaXRpb25hbCBoYWNrcyB0aGF0CisvLyByZXF1aXJlIHRo
aXMgdG8gcnVuIGJlZm9yZSB1bmlmaWNhdGlvbi4KKworYm9vbCBwZXJmb3JtT1NSRW50cnlwb2lu
dENyZWF0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDE1IEBACiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAjaW5jbHVkZSAi
Q29waWVkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdUaHVu
a3MuaCIKKyNpbmNsdWRlICJERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgor
I2luY2x1ZGUgIkRGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCIKKyNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklU
Q29kZS5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1
cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCkBAIC0yMDE1LDYgKzIwMjEsMTg3IEBAIGV4dGVybiAiQyIgdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJSZW8KICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoKTsKIH0KIAorI2lmIEVO
QUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVh
cCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAK
KyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAg
IAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dlclRpZXJVcE5vdyB3aXRoIGV4
ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUtPnRpZXJVcENvdW50ZXIsICJc
biIpOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKS0+
bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBGVEwtb3B0aW1pemF0aW9uIG9m
ICIsICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2UgdGhlcmUgd2FzIGFuIEZUTCBm
YWlsdXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNv
ZGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFqaXRDb2Rl
LT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZChjb2RlQmxvY2spKSB7CisgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDaG9v
c2luZyBub3QgdG8gRlRMLW9wdGltaXplICIsICpjb2RlQmxvY2ssICIgeWV0LlxuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV29ya2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3Rh
dGU7CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9IHZtLT53b3JrbGlzdC5nZXQoKSkgewor
ICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKAorICAgICAgICAgICAgKnZtLCBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmJhc2VsaW5l
VmVyc2lvbigpLCBGVExNb2RlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUg
PSBXb3JrbGlzdDo6Tm90S25vd247CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29y
a2xpc3Q6OkNvbXBpbGluZykgeworICAgICAgICBqaXRDb2RlLT5zZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgICAgICBjb2RlQmxvY2ssIENv
bXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
IChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyAgICAgICAgLy8gVGhh
dCdzIGdyZWF0LCB3ZSd2ZSBjb21waWxlZCB0aGUgY29kZSAtIG5leHQgdGltZSB3ZSBjYWxsIHRo
aXMgZnVuY3Rpb24sCisgICAgICAgIC8vIHdlJ2xsIGVudGVyIHRoYXQgcmVwbGFjZW1lbnQuCisg
ICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICh3b3JrbGlzdFN0YXRlID09IFdvcmtsaXN0OjpDb21waWxl
ZCkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgZmluaXNoZWQgY29tcGlsaW5nLCBi
dXQgZmFpbGVkIHNvbWVob3c7IGluIHRoYXQgY2FzZSB0aGUKKyAgICAgICAgLy8gdGhyZXNob2xk
cyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgorICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29kZUJsb2NrLCAi
IHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNlbWVu
dC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBjb21w
aWxlIHRoZSBjb2RlLgorICAgIGNvbXBpbGUoCisgICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdS
ZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3BlcmFuZHM8SlNWYWx1ZT4o
KSwKKyAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2Rl
QmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04g
dHJpZ2dlck9TUkVudHJ5Tm93KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlY29k
ZUluZGV4LCBpbnQzMl90IHN0cmVhbUluZGV4KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIERlZmVy
R0MgZGVmZXJHQyh2bS0+aGVhcCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKKyAgICAKKyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpOworICAgIAorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgdHJpZ2dl
clRpZXJVcE5vdyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKKyAgICAgICAgICAgIGppdENvZGUt
PnRpZXJVcENvdW50ZXIsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKS0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pIHsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmluZyBG
VEwtb3B0aW1pemF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgaW5kZWZpbml0ZWx5IGJlY2F1c2Ug
dGhlcmUgd2FzIGFuIEZUTCBmYWlsdXJlLlxuIik7CisgICAgICAgIGppdENvZGUtPmRvbnRPcHRp
bWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWppdENvZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVk
KGNvZGVCbG9jaykpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkNob29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVCbG9j
aywgIiB5ZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIFdvcmts
aXN0OjpTdGF0ZSB3b3JrbGlzdFN0YXRlOworICAgIGlmIChXb3JrbGlzdCogd29ya2xpc3QgPSB2
bS0+d29ya2xpc3QuZ2V0KCkpIHsKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IHdvcmtsaXN0LT5j
b21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSgKKyAgICAgICAgICAgICp2bSwgQ29tcGlsYXRpb25L
ZXkoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgRlRMRm9yT1NSRW50cnlNb2RlKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSBXb3JrbGlzdDo6Tm90S25vd247Cisg
ICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykgeworICAg
ICAgICBBU1NFUlQoIWppdENvZGUtPm9zckVudHJ5QmxvY2spOworICAgICAgICBqaXRDb2RlLT5z
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAg
ICAgICBjb2RlQmxvY2ssIENvbXBpbGF0aW9uRGVmZXJyZWQpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgCisgICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9z
ckVudHJ5QmxvY2suZ2V0KCkpIHsKKyAgICAgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFy
ZU9TUkVudHJ5KAorICAgICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBlbnRyeUJsb2NrLCBieXRl
Y29kZUluZGV4LCBzdHJlYW1JbmRleCk7CisgICAgICAgIGlmIChhZGRyZXNzKSB7CisgICAgICAg
ICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBlbnRyeUNvZGUgPSBlbnRyeUJsb2NrLT5qaXRD
b2RlKCktPmZ0bEZvck9TUkVudHJ5KCk7CisgICAgICAgIGVudHJ5Q29kZS0+Y291bnRFbnRyeUZh
aWx1cmUoKTsKKyAgICAgICAgaWYgKGVudHJ5Q29kZS0+ZW50cnlGYWlsdXJlQ291bnQoKSA8Cisg
ICAgICAgICAgICBPcHRpb25zOjpmdGxPU1JFbnRyeUZhaWx1cmVDb3VudEZvclJlb3B0aW1pemF0
aW9uKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29u
KGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gT1NSIGVudHJ5IGZhaWxlZC4gT2ggbm8hIFRoaXMgaW1wbGllcyB0aGF0IHdl
IG5lZWQgdG8gcmV0cnkuIFdlIHJldHJ5CisgICAgICAgIC8vIHdpdGhvdXQgZXhwb25lbnRpYWwg
YmFja29mZiBhbmQgd2Ugb25seSBkbyB0aGlzIGZvciB0aGUgZW50cnkgY29kZSBibG9jay4KKyAg
ICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jay5jbGVhcigpOworICAgICAgICAKKyAgICAgICAg
aml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBp
bGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBjb21waWxhdGlvbiBmYWlsZWQgYW5k
IHdlIGFscmVhZHkgc2V0IHRoZSB0aHJlc2hvbGRzLgorICAgICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29kZSBibG9jayAiLCAqY29kZUJsb2Nr
LCAiIHdhcyBjb21waWxlZCBidXQgaXQgZG9lc24ndCBoYXZlIGFuIG9wdGltaXplZCByZXBsYWNl
bWVudC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBUaGUgZmlyc3Qg
b3JkZXIgb2YgYnVzaW5lc3MgaXMgdG8gdHJpZ2dlciBhIGZvci1lbnRyeSBjb21waWxlLgorICAg
IE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CisgICAgaml0Q29kZS0+cmVjb25z
dHJ1Y3QoCisgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4
KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOworICAgIENvbXBpbGF0aW9uUmVzdWx0
IGZvckVudHJ5UmVzdWx0ID0gREZHOjpjb21waWxlKAorICAgICAgICAqdm0sIGNvZGVCbG9jay0+
bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4
LAorICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSwKKyAgICAgICAgdm0tPmVuc3VyZVdv
cmtsaXN0KCkpOworICAgIAorICAgIC8vIEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBhIHJl
cGxhY2VtZW50IGNvbXBpbGUuIE9mIGNvdXJzZSwgd2UgZG9uJ3Qgd2FudCB0bworICAgIC8vIHRy
aWdnZXIgaXQgaWYgd2UgZG9uJ3QgbmVlZCB0by4gTm90ZSB0aGF0IHRoaXMgaXMga2luZCBvZiB3
ZWlyZCBiZWNhdXNlIHdlIG1pZ2h0CisgICAgLy8gaGF2ZSBqdXN0IGZpbmlzaGVkIGFuIEZUTCBj
b21waWxlIGFuZCB0aGF0IGNvbXBpbGUgZmFpbGVkIG9yIHdhcyBpbnZhbGlkYXRlZC4KKyAgICAv
LyBCdXQgdGhpcyBzZWVtcyB1bmNvbW1vbiBlbm91Z2ggdGhhdCB3ZSBzb3J0IG9mIGRvbid0IGNh
cmUuIEl0J3MgY2VydGFpbmx5IHNvdW5kCisgICAgLy8gdG8gZmlyZSBvZmYgYW5vdGhlciBjb21w
aWxlIHJpZ2h0IG5vdyBzbyBsb25nIGFzIHdlJ3JlIG5vdCBhbHJlYWR5IGNvbXBpbGluZyBhbmQK
KyAgICAvLyB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LiBO
b3RlLCB3ZSBkb24ndCBkbyB0aGlzIGZvcgorICAgIC8vIG9idmlvdXNseSBiYWQgY2FzZXMgbGlr
ZSBnbG9iYWwgY29kZSwgd2hlcmUgd2Uga25vdyB0aGF0IHRoZXJlIGlzIGEgc2xpbSBjaGFuY2UK
KyAgICAvLyBvZiB0aGlzIGNvZGUgYmVpbmcgaW52b2tlZCBldmVyIGFnYWluLgorICAgIENvbXBp
bGF0aW9uS2V5IGtleUZvclJlcGxhY2VtZW50KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCks
IEZUTE1vZGUpOworICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gR2xvYmFsQ29kZQor
ICAgICAgICAmJiAhY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCisgICAgICAg
ICYmICghdm0tPndvcmtsaXN0LmdldCgpCisgICAgICAgICAgICB8fCB2bS0+d29ya2xpc3QtPmNv
bXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFjZW1lbnQpID09IFdvcmtsaXN0OjpOb3RLbm93bikp
IHsKKyAgICAgICAgY29tcGlsZSgKKyAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBs
YWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5UX01BWCwgT3BlcmFuZHM8SlNWYWx1ZT4oKSwK
KyAgICAgICAgICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29k
ZUJsb2NrKSwgdm0tPmVuc3VyZVdvcmtsaXN0KCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoZm9y
RW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBjb21waWxlIGFs
cmVhZHkgc3VjY2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCisgICAgLy8gZW50cnkgd2lsbCBzdWNj
ZWVkIHVubGVzcyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3aGF0IHdlIHNo
b3VsZCBkby4KKyAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEgd2hpbGUgaWYg
dGhhdCBoYXBwZW5zLgorICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSgK
KyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpLCBi
eXRlY29kZUluZGV4LCBzdHJlYW1JbmRleCk7CisgICAgaWYgKGFkZHJlc3MpCisgICAgICAgIGpp
dENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgIGVsc2UKKyAgICAgICAgaml0Q29k
ZS0+b3B0aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyKj4oYWRkcmVzcyk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0gLy8g
ZXh0ZXJuICJDIgogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0OTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDYgKzk5LDcgQEAgdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3Blcgog
dHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19E
RkdPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpOwogdHlwZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0opKEVu
Y29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRp
b25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VPWkQpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCwgZG91YmxlKTsKIHR5
cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRU9aSikoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZH
X09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKQEAg
LTEyNiw2ICsxMjcsNyBAQCB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJh
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RQUykoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19P
UEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RTUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
c2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7Cit0eXBlZGVmIGNo
YXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FWlopKEV4ZWNTdGF0ZSosIGludDMy
X3QsIGludDMyX3QpOwogdHlwZWRlZiBTdHJpbmdJbXBsKiBERkdfT1BFUkFUSU9OICgqSV9ERkdP
cGVyYXRpb25fRUpzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNTdHJpbmcq
IERGR19PUEVSQVRJT04gKCpKc3NfREZHT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90
KTsKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUoRXhl
Y1N0YXRlKiwgaW50MzJfdCkgIFdURl9JTlRFUk5BTDsgCkBAIC0zMDIsNiArMzA0LDExIEBAIHZv
aWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKIAogdm9pZCBERkdfT1BFUkFU
SU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7CiAK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKK3ZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93
KEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gdHJpZ2dlck9T
UkVudHJ5Tm93KEV4ZWNTdGF0ZSosIGludDMyX3QgYnl0ZWNvZGVJbmRleCwgaW50MzJfdCBzdHJl
YW1JbmRleCkgV1RGX0lOVEVSTkFMOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCiB9IC8v
IGV4dGVybiAiQyIKIAogaW5saW5lIFBfREZHT3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlw
ZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMyAr
NDYsMTYgQEAKICNpbmNsdWRlICJERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU1NB
Q29udmVyc2lvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRl
ICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJPcGVyYW5k
c0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAKQEAgLTgxLDEzICs4NCwxMiBAQCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5
R3JhcGgoR3JhcGgmIGdyCiAKIFBsYW46OlBsYW4oCiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IHBhc3NlZENvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcykKKyAgICB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0
SGFuZGxlVmFsdWVzKQogICAgIDogdm0oKnBhc3NlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNv
ZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAgICAgLCBtb2RlKG1vZGUpCiAgICAgLCBvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICwgbnVtVmFyc1dpdGhW
YWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAgLCBtdXN0SGFuZGxlVmFsdWVzKGNvZGVCbG9j
ay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcykKKyAgICAsIG11c3RIYW5kbGVW
YWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKICAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0o
KS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxh
dGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNv
ZGVzRm9yKGNvZGVCbG9jay5nZXQoKSksIFByb2ZpbGVyOjpERkcpKSA6IDApCiAgICAgLCBpZGVu
dGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCiAgICAgLCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2su
Z2V0KCkpCkBAIC0xMDksNyArMTExLDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9u
Z0xpdmVkU3RhdAogICAgIENvbXBpbGF0aW9uU2NvcGUgY29tcGlsYXRpb25TY29wZTsKIAogICAg
IGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAgICAgZGF0YUxvZygiREZHKFBsYW4p
IGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwg
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJE
RkcoUGxhbikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIgd2l0aCAiLCBtb2RlLCAiLCBudW1i
ZXIgb2YgaW5zdHJ1Y3Rpb25zID0gIiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJc
biIpOwogCiAgICAgQ29tcGlsYXRpb25QYXRoIHBhdGggPSBjb21waWxlSW5UaHJlYWRJbXBsKGxv
bmdMaXZlZFN0YXRlKTsKIApAQCAtMTMzLDcgKzEzNSw3IEBAIHZvaWQgUGxhbjo6Y29tcGlsZUlu
VGhyZWFkKExvbmdMaXZlZFN0YXQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2coIk9wdGlt
aXplZCAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIHdpdGggIiwgcGF0aE5hbWUsICIg
aW4gIiwgbm93IC0gYmVmb3JlLCAiIG1zIik7CisgICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAi
LCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIHVzaW5nICIsIG1vZGUsICIgd2l0aCAiLCBw
YXRoTmFtZSwgIiBpbiAiLCBub3cgLSBiZWZvcmUsICIgbXMiKTsKICAgICAgICAgaWYgKHBhdGgg
PT0gRlRMUGF0aCkKICAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCBiZWZvcmVGVEwgLSBi
ZWZvcmUsICIsIExMVk06ICIsIG5vdyAtIGJlZm9yZUZUTCwgIikiKTsKICAgICAgICAgZGF0YUxv
ZygiLlxuIik7CkBAIC0xNDIsNiArMTQ0LDEyIEBAIHZvaWQgUGxhbjo6Y29tcGlsZUluVGhyZWFk
KExvbmdMaXZlZFN0YXQKIAogUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRo
cmVhZEltcGwoTG9uZ0xpdmVkU3RhdGUmIGxvbmdMaXZlZFN0YXRlKQogeworICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkgJiYgb3NyRW50cnlCeXRlY29kZUluZGV4ICE9IFVJTlRf
TUFYKSB7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2coIkNvbXBpbGVy
IG11c3QgaGFuZGxlIE9TUiBlbnRyeSBmcm9tIGJjIyIsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
IiB3aXRoIHZhbHVlczogIiwgbXVzdEhhbmRsZVZhbHVlcywgIlxuIik7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgfQorICAgIAogICAgIEdyYXBoIGRmZyh2bSwgKnRoaXMsIGxvbmdMaXZl
ZFN0YXRlKTsKICAgICAKICAgICBpZiAoIXBhcnNlKGRmZykpIHsKQEAgLTE2Miw2ICsxNzAsMTUg
QEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1V
bmlmaWNhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uSW5qZWN0aW9uKGRmZyk7CiAg
ICAgCisgICAgaWYgKG1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKSB7CisgICAgICAgIGJvb2wg
cmVzdWx0ID0gcGVyZm9ybU9TUkVudHJ5cG9pbnRDcmVhdGlvbihkZmcpOworICAgICAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICAgICAgZmluYWxpemVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZp
bmFsaXplcigqdGhpcykpOworICAgICAgICAgICAgcmV0dXJuIEZhaWxQYXRoOworICAgICAgICB9
CisgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOworICAgIH0KKyAgICAKICAgICBp
ZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgdmFsaWRhdGUoZGZnKTsKICAgICAKQEAg
LTIwNiwxMCArMjIzLDE5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICAgICAgZGZnLm1fbmF0dXJhbExvb3BzLmNvbXB1dGVJZk5lY2Vzc2FyeShkZmcpOwog
ICAgIH0KIAorICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgREZHTW9kZTogeworICAgICAg
ICBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oZGZnKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIGNhc2UgRlRMTW9kZToKKyAgICBjYXNlIEZUTEZvck9TUkVudHJ5TW9kZTog
ewogI2lmIEVOQUJMRShGVExfSklUKQotICAgIGlmIChPcHRpb25zOjp1c2VFeHBlcmltZW50YWxG
VEwoKQotICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCi0g
ICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7CisgICAgICAgIGlmIChGVEw6OmNhbkNv
bXBpbGUoZGZnKSA9PSBGVEw6OkNhbm5vdENvbXBpbGUpIHsKKyAgICAgICAgICAgIGZpbmFsaXpl
ciA9IGFkb3B0UHRyKG5ldyBGYWlsZWRGaW5hbGl6ZXIoKnRoaXMpKTsKKyAgICAgICAgICAgIHJl
dHVybiBGYWlsUGF0aDsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcGVyZm9ybUNyaXRp
Y2FsRWRnZUJyZWFraW5nKGRmZyk7CiAgICAgICAgIHBlcmZvcm1Mb29wUHJlSGVhZGVyQ3JlYXRp
b24oZGZnKTsKQEAgLTI0NCwxMCArMjcwLDE2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICAgICAgRlRMOjpjb21waWxlKHN0YXRlKTsKICAgICAgICAgRlRM
OjpsaW5rKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIEZUTFBhdGg7Ci0gICAgfQogI2Vsc2UKLSAg
ICBSRUxFQVNFX0FTU0VSVCghT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAg
ICAKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICBwZXJmb3JtRENFKGRmZyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiBzdHJ1Y3QgUGxhbiA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxhbigKICAgICAgICAgUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCwKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBj
b25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0ZSYpOwpAQCAtNzIs
NyArNzIsNiBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAg
UmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlOwog
ICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKLSAgICBjb25zdCB1bnNp
Z25lZCBudW1WYXJzV2l0aFZhbHVlczsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxl
VmFsdWVzOwogCiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKGJsb2NrLT5i
eXRlY29kZUJlZ2luICE9IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+aGFzTG9jYWwobV9ncmFwaCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00ODQsNyArNDg0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIE1vdkhpbnRB
bmRDaGVjazoKLSAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CisgICAgICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICAgICAgY2FzZSBDaGVj
a1RpZXJVcEF0UmV0dXJuOgorICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6IHsK
ICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlz
IHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkg
Zml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTU0OSw2ICs1NTIsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgog
ICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgICAgICBjYXNlIExvb3BIaW50OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQg
YmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24uCisgICAgICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICAvLyBUaGVzZSBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueXRoaW5nLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDExIEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToK
ICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKKyAgICBjYXNl
IEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAg
Y2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRl
cjoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAg
ICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgyMyw2ICs0ODIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgor
ICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcC4KICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDgzNSw2ICs0ODM2LDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIFBoaToKICAg
ICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4dHJhY3RP
U1JFbnRyeUxvY2FsOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVj
a1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjczLDYgKzQ2NzMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNlIExvb3BIaW50Ogog
ICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAg
ICAgICBicmVhazsKQEAgLTQ2ODAsMTEgKzQ2ODEsNzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOworCisjaWYgRU5BQkxFKEZU
TF9KSVQpICAgICAgICAKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOiB7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoT3B0aW9u
czo6ZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50
ZXIubV9jb3VudGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUo
KTsKKyAgICAgICAgYXBwZW5kQ2FsbCh0cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
Q2hlY2tUaWVyVXBBdFJldHVybjogeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVk
LAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0bFRpZXJVcENvdW50ZXJJbmNy
ZW1lbnRGb3JSZXR1cm4oKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVB
ZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50ZXIubV9jb3VudGVyKSk7CisgICAg
ICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgYXBwZW5kQ2Fs
bCh0cmlnZ2VyVGllclVwTm93KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRl
cjogeworICAgICAgICBBU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgCisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJS
ZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6U2lnbmVkLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmZ0bFRpZXJV
cENvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFic29sdXRlQWRkcmVzcygmbV9qaXQuaml0Q29kZSgpLT50aWVyVXBDb3VudGVyLm1fY291bnRl
cikpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnModGVtcEdQUik7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAg
IFRydXN0ZWRJbW0zMihub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpLAorICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICAgICAgYXBwZW5kQ2FsbFNl
dFJlc3VsdCh0cmlnZ2VyT1NSRW50cnlOb3csIHRlbXBHUFIpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb250RW50ZXIgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCh0ZW1wR1BSKTsKKyAgICAgICAg
ZG9udEVudGVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh0
ZW1wR1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBi
cmVhazsKKyAgICB9CisjZWxzZSAvLyBFTkFCTEUoRlRMX0pJVCkKKyAgICBjYXNlIENoZWNrVGll
clVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKKyAgICBjYXNlIENoZWNr
VGllclVwQW5kT1NSRW50ZXI6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgICAgICAKICAg
ICBjYXNlIExhc3ROb2RlVHlwZToKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAg
ICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJGVExDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ0
aWVyLXVwIGNoZWNrIGluamVjdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1
bigpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fcGxhbi5tb2RlID09
IERGR01vZGUpOworICAgICAgICAKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VFeHBlcmltZW50
YWxGVEwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShGVExfSklU
KQorICAgICAgICBGVEw6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IEZUTDo6Y2FuQ29tcGlsZSht
X2dyYXBoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2Fubm90Q29tcGlsZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGJsb2NrLT5hdCgwKS0+b3AoKSA9PSBMb29wSGludCkgeworICAgICAgICAgICAg
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdpbjsKKyAg
ICAgICAgICAgICAgICBOb2RlVHlwZSBub2RlVHlwZTsKKyAgICAgICAgICAgICAgICBpZiAobGV2
ZWwgPT0gRlRMOjpDYW5Db21waWxlQW5kT1NSRW50ZXIgJiYgIWNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gQ2hlY2tUaWVyVXBBbmRP
U1JFbnRlcjsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmJ5dGVj
b2RlQmVnaW4gPT0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcEluTG9vcDsK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgxLCBTcGVjTm9uZSwgbm9k
ZVR5cGUsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnNp
emUoKSAtIDEsIFNwZWNOb25lLCBDaGVja1RpZXJVcEF0UmV0dXJuLCBibG9jay0+bGFzdCgpLT5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rp
b24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgVGllci11cCBDaGVjayBJbmplY3Rpb24iKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlX2gKKyNkZWZpbmUgREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisv
LyBUaGlzIHBoYXNlIGNoZWNrcyBpZiB0aGUgdGhpcyBjb2RlIGJsb2NrIGNvdWxkIGJlIHJlY29t
cGlsZWQgd2l0aCB0aGUgRlRMLAorLy8gYW5kIGlmIHNvLCBpdCBpbmplY3RzIHRpZXItdXAgY2hl
Y2tzLgorCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJF
eGVjdXRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBtX2Rm
Z0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCit7Cit9CisKK1RvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KKworUGFz
c1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZn
Q29kZUJsb2NrKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNs
eSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAg
ICAgICAgICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAgICAKKyAgICBtX2Rm
Z0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOworfQorCit2b2lkIFRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7Cisg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAg
ICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIs
ICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICIpIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4i
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
CisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAgIAorICAgIG1fZGZnQ29kZUJsb2Nr
LT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQoCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpLCByZXN1bHQpOworfQor
Cit9IH0gLy8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2tfaAorI2RlZmluZSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVk
ZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBTY3JpcHRFeGVjdXRhYmxlOworCituYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGljOgorICAgIHZpcnR1
YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKAorICAgICAg
ICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayop
OworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENv
bXBpbGF0aW9uUmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2Rm
Z0NvZGVCbG9jazsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKAorICAgIFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCisgICAgOiBtX2RmZ0NvZGVCbG9jayhkZmdDb2Rl
QmxvY2spCit7Cit9CisKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6On5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkKK3sKK30K
KworUGFzc1JlZlB0cjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PgorVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKAor
ICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKGRm
Z0NvZGVCbG9jaykpOworfQorCit2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseSgKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAg
ICAgIikgZGlkIGJlY29tZSByZWFkeS5cbiIpOworICAgIH0KKyAgICAKKyAgICBtX2RmZ0NvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJl
bnRseSgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCkpOworfQorCit2b2lkIFRvRlRMRm9y
T1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
K3sKKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChm
b3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQs
ICJcbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bCkKKyAgICAgICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPm9zckVudHJ5
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgCisgICAgLy8gRklYTUU6IGlmIHdlIGZhaWxlZCwgd2Ug
bWlnaHQgd2FudCB0byBqdXN0IHR1cm4gb2ZmIE9TUiBlbnRyeSByYXRoZXIgdGhhbgorICAgIC8v
IHRvdGFsbHkgdHVybmluZyBvZmYgdGllci11cC4KKyAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSwgcmVzdWx0KTsKK30KKworfSB9IC8v
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1RvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBERkdUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjayB7Citwcm90ZWN0ZWQ6CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKworcHVibGlj
OgorICAgIHZpcnR1YWwgflRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2soKTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IGRmZ0NvZGVCbG9jayk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVj
b21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29t
cGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisKK3By
aXZhdGU6CisgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9kZmdDb2RlQmxvY2s7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNp
b24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3Nyw4ICsyNzcsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
R2xvYmFsV29ya2xpc3RPbmNlCiAKIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpCiB7Ci0gICAg
aWYgKCFlbmFibGVDb25jdXJyZW50SklUKCkpCi0gICAgICAgIHJldHVybiAwOwogICAgIHB0aHJl
YWRfb25jZSgmaW5pdGlhbGl6ZUdsb2JhbFdvcmtsaXN0S2V5T25jZSwgaW5pdGlhbGl6ZUdsb2Jh
bFdvcmtsaXN0T25jZSk7CiAgICAgcmV0dXJuIHRoZUdsb2JhbFdvcmtsaXN0OwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMTU0OTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw5ICs5OCw2IEBAIHByaXZhdGU6CiAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbmdsZSBn
bG9iYWwgd29ya2xpc3QuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhpcwogLy8gaXMgdGhlIHJpZ2h0
IHRoaW5nIHRvIGRvLCBidXQgaXQgaXMgd2hhdCB3ZSBkbywgZm9yIG5vdy4gVGhpcyBmdW5jdGlv
bgogLy8gd2lsbCBsYXppbHkgY3JlYXRlIG9uZSB3aGVuIGl0J3MgbmVlZGVkLgotLy8KLS8vIFRo
aXMgcmV0dXJucyBudWxsIGlmIGZvciBhbnkgcmVhc29uIHdlIHNob3VsZG4ndCBiZSBkb2luZyBj
b25jdXJyZW50Ci0vLyBjb21waWxhdGlvbi4KIFdvcmtsaXN0KiBnbG9iYWxXb3JrbGlzdCgpOwog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDggKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcg
bmFtZXNwYWNlIERGRzsKIAotaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQoraW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiB7CisgICAgLy8gTk9U
RTogSWYgd2UgZXZlciBoYXZlIHBoYW50b20gYXJndW1lbnRzLCB3ZSBjYW4gY29tcGlsZSB0aGVt
IGJ1dCB3ZSBjYW5ub3QKKyAgICAvLyBPU1IgZW50ZXIuCisgICAgCiAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6
CkBAIC04MSw2ICs4NCw4IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246Cisg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIExvb3BIaW50OgogICAgICAg
ICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QXJyYXlMZW5n
dGg6CkBAIC05MCwzOSArOTUsMzkgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEdldEJ5VmFsOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50ZXI7CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21w
aWxlOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkuc3BlY3Vs
YXRpb24oKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTYW5lQ2hhaW46CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkluQm91bmRzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGls
ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZE9TUkVudGVyOwogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fu
bm90Q29tcGlsZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBhcmVF
cToKQEAgLTEzMyw3ICsxMzgsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RVc2UpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgY2FzZSBDb21wYXJlTGVzczoKICAgICBj
YXNlIENvbXBhcmVMZXNzRXE6CiAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKQEAgLTE0Miw3ICsx
NDcsNyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChOdW1iZXJVc2UpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIENh
bm5vdENvbXBpbGU7CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBMb2dpY2FsTm90OgogICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtMTUyLDcgKzE1Nyw3
IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN3aXRjaDoKQEAgLTE2MSwxOCAr
MTY2LDI2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2Fz
ZSBTd2l0Y2hDaGFyOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBEb24n
dCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKIH0KIAotYm9vbCBjYW5Db21waWxl
KEdyYXBoJiBncmFwaCkKK0NhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkK
IHsKKyAgICBpZiAoZ3JhcGgubV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2Rl
KSB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAg
ICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIGNvZGUgYmxvY2sgdGhhdCBkb2Vzbid0IGJlbG9uZyB0
byBhIGZ1bmN0aW9uLlxuIik7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIH0K
KyAgICAKKyAgICBDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gQ2FuQ29tcGlsZUFuZE9TUkVudGVy
OworICAgIAogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTIxMCwyNSArMjIzLDM2
IEBAIGJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJGVEwgcmVqZWN0aW5nIG5vZGUgYmVjYXVzZSBvZiBiYWQgdXNlIGtpbmQ6ICIs
IGVkZ2UudXNlS2luZCgpLCAiIGluIG5vZGU6XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGdyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWNhbkNvbXBpbGUobm9kZSkp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoY2FuQ29tcGlsZShub2RlKSkgeworICAgICAgICAgICAg
Y2FzZSBDYW5ub3RDb21waWxlOiAKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZUTCByZWplY3Rp
bmcgbm9kZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICBncmFwaC5kdW1wKFdURjo6ZGF0YUZp
bGUoKSwgIiAgICAiLCBub2RlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBDYW5Db21waWxlOgorICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gQ2FuQ29tcGlsZUFuZE9TUkVudGVyICYmIHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGVEwgZGlzYWJs
aW5nIE9TUiBlbnRyeSBiZWNhdXNlIG9mIG5vZGU6XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
Z3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IENhbkNvbXBpbGU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENhbkNvbXBpbGVB
bmRPU1JFbnRlcjoKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBpZiB3ZSBjYW4gY29tcGlsZSBh
bnl0aGluZyBhZnRlciBhIGZvcmNlLWV4aXQuCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBGb3JjZU9TUkV4aXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLWJvb2wgY2FuQ29tcGlsZShE
Rkc6OkdyYXBoJik7CitlbnVtIENhcGFiaWxpdHlMZXZlbCB7CisgICAgQ2Fubm90Q29tcGlsZSwK
KyAgICBDYW5Db21waWxlLAorICAgIENhbkNvbXBpbGVBbmRPU1JFbnRlcgorfTsKKworQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoREZHOjpHcmFwaCYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
CitGb3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9T
UkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSgpCit7Cit9CisKK0Zvck9TUkVudHJ5
SklUQ29kZSogRm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7CisgICAgcmV0
dXJuIHRoaXM7Cit9CisKK3ZvaWQgRm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlC
dWZmZXIoVk0mIHZtLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpCit7CisgICAgbV9lbnRy
eUJ1ZmZlciA9IHZtLnNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMRm9yT1NSRW50cnlKSVRDb2RlX2gKKyNkZWZpbmUgRlRM
Rm9yT1NSRW50cnlKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gT1NSIGVudHJ5IGludG8gdGhlIEZUTCBoYXMgYSBu
dW1iZXIgb2YgcXVpcmtzOgorLy8KKy8vIC0gT1NSIGVudHJ5IG9ubHkgaGFwcGVucyB0aHJvdWdo
IHNwZWNpYWwgT1NSIGVudHJ5IGNvbXBpbGF0aW9ucy4gVGhleSBoYXZlIHRoZWlyCisvLyAgIG93
biBDb2RlQmxvY2sgYW5kIHRoZWlyIG93biBKSVRDb2RlLgorLy8KKy8vIC0gV2Ugb25seSBPU1Ig
ZW50ZXIgaW4gbG9vcCBoZWFkZXJzIHRoYXQgaGF2ZSBhIG51bGwgaW5saW5lIGNhbGwgZnJhbWUu
CisvLworLy8gLSBFYWNoIE9TUiBlbnRyeSBjb21waWxhdGlvbiBhbGxvd3MgZW50cnkgdGhyb3Vn
aCBvbmx5IG9uZSBieXRlY29kZSBpbmRleC4KKworY2xhc3MgRm9yT1NSRW50cnlKSVRDb2RlIDog
cHVibGljIEZUTDo6SklUQ29kZSB7CitwdWJsaWM6CisgICAgRm9yT1NSRW50cnlKSVRDb2RlKCk7
CisgICAgfkZvck9TUkVudHJ5SklUQ29kZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUVu
dHJ5QnVmZmVyKFZNJiwgdW5zaWduZWQgbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNo
QnVmZmVyKiBlbnRyeUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlCdWZmZXI7IH0KKyAg
ICAKKyAgICB2b2lkIHNldEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgdmFsdWUpIHsgbV9ieXRlY29k
ZUluZGV4ID0gdmFsdWU7IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBjb3VudEVudHJ5RmFpbHVy
ZSgpIHsgbV9lbnRyeUZhaWx1cmVDb3VudCsrOyB9CisgICAgdW5zaWduZWQgZW50cnlGYWlsdXJl
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5RmFpbHVyZUNvdW50OyB9CisgICAgCisgICAg
Rm9yT1NSRW50cnlKSVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOworICAgIAorcHJpdmF0ZToKKyAg
ICBTY3JhdGNoQnVmZmVyKiBtX2VudHJ5QnVmZmVyOyAvLyBPbmx5IGZvciBPU1IgZW50cnkgY29k
ZSBibG9ja3MuCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVuc2lnbmVkIG1f
ZW50cnlGYWlsdXJlQ291bnQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRkxUX0pJVCkKKworI2VuZGlmIC8vIEZUTEZvck9TUkVudHJ5SklUQ29k
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsOSBAQCBib29sIEpJ
VEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgKCJGVEwgZXhp
dCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5j
b2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKICAgICB9IC8vIGVs
c2UgdGhpcyBmdW5jdGlvbiBoYWQgbm8gT1NSIGV4aXRzLCBzbyBubyBleGl0IHRodW5rcy4KICAg
ICAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9p
bnRMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIGlmIChtX2FyaXR5Q2hlY2suaXNTZXQoKSkK
KyAgICAgICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2VudHJ5cG9pbnRMaW5rQnVmZmVyLT5sb2NhdGlv
bk9mKG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKICAgICAg
ICAgRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqbV9lbnRyeXBvaW50TGlua0J1ZmZl
ciwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsNzkgKzU1LDExNCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgIC8v
IExMVk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBhcyBuZWVkZWQuCiAgICAgY29k
ZUJsb2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKICAgICAKLSAgICAvLyBDcmVhdGUgdGhl
IGVudHJ5cG9pbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0b3RhbCBrbHVkZ2UgLSBMTFZN
IHNob3VsZCBqdXN0IHVzZSBvdXIgY2FsbGluZyBjb252ZW50aW9uLgorICAgIC8vIENyZWF0ZSB0
aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBk
aWZmZXJlbnRseQorICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBl
bnRyeSBvciBub3QuCisgICAgLy8gRklYTUU6IEV4Y2VwdCBmb3IgT1NSIGVudHJ5LCB0aGlzIGlz
IGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyCisgICAgLy8gY2FsbGlu
ZyBjb252ZW50aW9uLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjEKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZzdGF0ZS5ncmFwaC5tX3ZtLCBjb2Rl
QmxvY2spOwogICAgIAotICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgIE93blB0cjxMaW5rQnVm
ZmVyPiBsaW5rQnVmZmVyOworICAgIENDYWxsSGVscGVyczo6TGFiZWwgYXJpdHlDaGVjazsKKyAg
ICBzd2l0Y2ggKHN0YXRlLmdyYXBoLm1fcGxhbi5tb2RlKSB7CisgICAgY2FzZSBGVExNb2RlOiB7
CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOwogICAgIAotICAgIC8vIFRoaXMgcGFydCBpcyBv
bmx5IG5lY2Vzc2FyeSBmb3IgZnVuY3Rpb25zLiBXZSBjdXJyZW50bHkgb25seSBjb21waWxlIGZ1
bmN0aW9ucy4KKyAgICAgICAgLy8gVGhpcyBwYXJ0IGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBmdW5j
dGlvbnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUgZnVuY3Rpb25zLgogICAgICAgICAKLSAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGZyb21Bcml0eUNoZWNrID0gaml0LmxhYmVsKCk7CisgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKICAg
ICAgICAgCi0gICAgLy8gUGxhbnQgYSBjaGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZh
aWxhYmxlIGluIHRoZSBKU1N0YWNrLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyOTEKLSAgICBqaXQuYWRkUHRyKAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICog
c2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjpyZWdUMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHN0YWNrQ2hlY2sgPSBqaXQu
YnJhbmNoUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcyhzdGF0ZS5ncmFwaC5tX3ZtLmludGVycHJldGVyLT5zdGFj
aygpLmFkZHJlc3NPZkVuZCgpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotICAgIENDYWxs
SGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgCi0g
ICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRl
ZEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwotICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgaml0LnJldCgpOwotICAgICAgICAKLSAgICBzdGFja0NoZWNrLmxpbmso
JmppdCk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQucG9rZSgKLSAgICAgICAgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3Rh
Y2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOwotICAgICAgICAKLSAgICBqaXQu
c3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpM
b2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCi0gICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbFN0YWNrQ2hlY2sgPSBqaXQuY2Fs
bCgpOwotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVyIHdpdGgg
ZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKLSAgICAvLyBwYXJ0IG9mIGEgYmln
Z2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KLSAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCi0gICAg
aml0Lmp1bXAoZnJvbVN0YWNrQ2hlY2spOwotICAgICAgICAKLSAgICBDQ2FsbEhlbHBlcnM6Okxh
YmVsIGFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKLSAgICBjb21waWxlRW50cnkoaml0KTsKLSAg
ICBqaXQubG9hZDMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksCi0gICAgICAgIEdQ
UkluZm86OnJlZ1QxKTsKLSAgICBqaXQuYnJhbmNoMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpKQotICAgICAgICAubGlua1RvKGZy
b21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wb2tlKAotICAg
ICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgT0JKRUNUX09GRlNFVE9G
KHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAg
aml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFt
ZTo6TG9jYXRpb246OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUNoZWNrID0gaml0
LmNhbGwoKTsKLSAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3
aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCi0gICAgLy8gcGFydCBvZiBh
IGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2VwdGlvbnMu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgot
ICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCku
bGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bEFyaXR5Rml4dXAgPSBqaXQuY2FsbCgpOwotICAgIGppdC5qdW1wKGZyb21Bcml0eUNoZWNrKTsK
LSAgICAgICAgCi0gICAgT3duUHRyPExpbmtCdWZmZXI+IGxpbmtCdWZmZXIgPSBhZG9wdFB0cihu
ZXcgTGlua0J1ZmZlcihzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBp
bGF0aW9uTXVzdFN1Y2NlZWQpKTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxTdGFja0NoZWNr
LCBjdGlfc3RhY2tfY2hlY2spOwotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hlY2ss
IGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNr
IDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7Ci0gICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJp
dHlGaXh1cCwgRnVuY3Rpb25QdHIoKHN0YXRlLmdyYXBoLm1fdm0uZ2V0Q1RJU3R1Yihhcml0eUZp
eHVwKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgLy8gUGxhbnQgYSBj
aGVjayB0aGF0IHN1ZmZpY2llbnQgc3BhY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBKU1N0YWNrLgor
ICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU2MjkxCisgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lz
dGVyKSksCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
cmVnVDEpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3RhY2tDaGVjayA9IGppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Moc3RhdGUuZ3JhcGgubV92bS5pbnRlcnByZXRlci0+
c3RhY2soKS5hZGRyZXNzT2ZFbmQoKSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbVN0YWNrQ2hlY2sgPSBqaXQubGFiZWwoKTsK
KyAgICAgICAgCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAg
ICBqaXQubW92ZSgKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbikpLAorICAgICAgICAg
ICAgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFy
Z0dQUjApOworICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFj
azo6UmV0dXJuUEMsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihH
UFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgCisgICAgICAgIHN0
YWNrQ2hlY2subGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0LnBv
a2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAg
IE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVv
Zih2b2lkKikpOworICAgICAgICAKKyAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5
dGVjb2RlT2Zmc2V0KDApKSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxTdGFja0NoZWNrID0gaml0LmNhbGwoKTsKKyAgICAg
ICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0aCBleGNlcHRp
b24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcworICAgICAgICAvLyBwYXJ0IG9mIGEgYmlnZ2Vy
IHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9ucy4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMgorICAg
ICAgICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7CisgICAgICAgIAorICAgICAgICBhcml0eUNo
ZWNrID0gaml0LmxhYmVsKCk7CisgICAgICAgIGNvbXBpbGVFbnRyeShqaXQpOworICAgICAgICBq
aXQubG9hZDMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpLAorICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCisg
ICAgICAgICAgICAubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgaml0LnBva2UoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKKyAgICAgICAgICAgIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFt
ZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikpOworICAgICAgICBqaXQuc3RvcmUzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246
OmVuY29kZUFzQnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBqaXQuY2Fs
bCgpOworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3
aXRoIGV4Y2VwdGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCisgICAgICAgIC8vIHBhcnQg
b2YgYSBiaWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRp
b25zLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzNjIyCisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJ
bmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCAmaml0KTsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1
bXAoZnJvbUFyaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0
UHRyKG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25NdXN0U3VjY2VlZCkpOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxT
dGFja0NoZWNrLCBjdGlfc3RhY2tfY2hlY2spOworICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNh
bGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IGN0aV9vcF9jb25zdHJ1
Y3RfYXJpdHlDaGVjayA6IGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spOworICAgICAgICBsaW5rQnVm
ZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBGdW5jdGlvblB0cigoc3RhdGUuZ3JhcGgubV92bS5n
ZXRDVElTdHViKGFyaXR5Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2Rl
OiB7CisgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJhaWdodCBmcm9tIERGRyBjb2RlLCBh
ZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQorICAgICAgICAvLyB2YWx1ZXMgaW50byB0
aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGdvb2QgdG8gZ28gLSBhdCB0
aGlzCisgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9uZSB0aGUgc3RhY2sgY2hlY2suIEJh
c2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKKyAgICAgICAgLy8gY2FsbCB0byB0aGUg
TExWTS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRl
KCk7CisgICAgICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSks
CisgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVm
b3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LnJldCgpOworICAgICAgICAK
KyAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5rQnVmZmVyKAorICAgICAgICAg
ICAgc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQogICAgIAogICAgIHN0YXRlLmZpbmFsaXplci0+aW5pdGlhbGl6ZUVudHJ5cG9pbnRMaW5r
QnVmZmVyKGxpbmtCdWZmZXIucmVsZWFzZSgpKTsKICAgICBzdGF0ZS5maW5hbGl6ZXItPmluaXRp
YWxpemVGdW5jdGlvbihzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdJblBsYWNlQWJz
dHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKICNp
bmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZU
TExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKQEAgLTE5MSw2ICsx
OTIsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2llciB0byByZWFk
LgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93QmxvY2spOwogICAg
ICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bENyYXNoZXMoKSkKKyAgICAgICAgICAgIG1f
b3V0LmNyYXNoTm9uVGVybWluYWwoKTsKKyAgICAgICAgCiAgICAgICAgIGlmICghbV9oaWdoQmxv
Y2stPmNmYUhhc1Zpc2l0ZWQpIHsKICAgICAgICAgICAgIG1fb3V0LmNyYXNoKCk7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNDMsNiArMjQ3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBH
ZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudCgpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgICAg
ICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY29tcGlsZUdldExvY2FsKCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTI2NCw2ICsyNzEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEZsdXNoOgogICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDoKKyAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIFZhbHVlQWRkOgpAQCAtNTA2LDYgKzUxNCwx
MyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZUV4
dHJhY3RPU1JFbnRyeUxvY2FsKCkKKyAgICB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZm
ZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICAgICAgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5mdGxGb3JPU1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkp
OworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIg
KyBtX25vZGUtPnVubGlua2VkTG9jYWwoKSkpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21w
aWxlR2V0TG9jYWwoKQogICAgIHsKICAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9y
IGNhcHR1cmVkIHZhcmlhYmxlcy4KQEAgLTUxNSw3ICs1MzAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSk7CiAgICAg
ICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdmFsdWUpKQorICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVk
ZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBl
bnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJl
YW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVCbG9jayogYmFz
ZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIERGRzo6SklUQ29k
ZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBGb3JPU1JF
bnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5Q29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZv
ck9TUkVudHJ5KCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2Nr
LCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICAgICAgYnl0ZWNv
ZGVJbmRleCwgIi5cbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZWNvZGVJbmRleCAhPSBl
bnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB3ZSBk
b24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI7IG91cnMg
aXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpTVmFsdWU+IHZhbHVlczsKKyAgICBkZmdD
b2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgZGZnQ29kZUJsb2NrLCBDb2RlT3JpZ2lu
KGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsKKyAgICAKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5
OiAiLCB2YWx1ZXMsICJcbiIpOworICAgIAorICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVz
Lm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKAorICAgICAgICAgICAgZXhlYy0+cihhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpLmpz
VmFsdWUoKSA9PSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQoCisgICAgICAgIHN0YXRpY19jYXN0PGludD4odmFsdWVzLm51bWJlck9m
TG9jYWxzKCkpID09IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgCisgICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAor
ICAgICAgICBlbnRyeUNvZGUtPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7CisgICAgCisg
ICAgZm9yIChpbnQgbG9jYWwgPSB2YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisg
ICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlcy5sb2NhbChsb2Nh
bCkpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNrRnJhbWVTaXplID0gZW50cnlDb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCku
Z3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZVNpemVdKSkgeworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWls
ZWQgYmNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAorICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CisgICAg
CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1BvaW50
ZXIocmVzdWx0KSwgIlxuIik7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMT1NSRW50cnlfaAorI2RlZmluZSBGVExPU1JFbnRyeV9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgRXhlY1N0YXRlOworCituYW1lc3Bh
Y2UgRlRMIHsKKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSosIENvZGVC
bG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LAorICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExPU1JFbnRyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDkgKzM1MSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBjYWxsKHRyYXBJbnRyaW5zaWMoKSk7CiAgICAgfQotICAgIHZvaWQgY3Jhc2goKQorICAg
IAorICAgIHZvaWQgY3Jhc2hOb25UZXJtaW5hbCgpCiAgICAgewogICAgICAgICBjYWxsKGludFRv
UHRyKGNvbnN0SW50UHRyKGFib3J0KSwgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKHZvaWRUeXBl
KSkpKTsKKyAgICB9CisgICAgdm9pZCBjcmFzaCgpCisgICAgeworICAgICAgICBjcmFzaE5vblRl
cm1pbmFsKCk7CiAgICAgICAgIHVucmVhY2hhYmxlKCk7CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorI2luY2x1
ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDAsOSArNDIsMjUgQEAgU3RhdGU6OlN0YXRl
KEdyYXBoJiBncmFwaCkKICAgICAsIGNvbnRleHQoTExWTUNvbnRleHRDcmVhdGUoKSkKICAgICAs
IG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKLSAgICAsIGppdENvZGUoYWRvcHRSZWYobmV3
IEpJVENvZGUoKSkpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogeworICAgIHN3aXRjaCAo
Z3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICAgICAgaml0Q29k
ZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklU
Q29kZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CisgICAgICAg
IGNvZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3Byb2ZpbGVk
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJ
bmRleChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgaml0Q29k
ZSA9IGNvZGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CiAgICAgZmluYWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3BsYW4pOwogICAgIGdy
YXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDE1
NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGFzSW5saW5lQ2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgICAgIGludDMy
X3QgdW5ib3hlZEludDMyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgdW5ib3hlZEJvb2xlYW4oKSBj
b25zdDsKKyAgICAgICAgZG91YmxlIHVuYm94ZWREb3VibGUoKSBjb25zdDsKICAgICAgICAgSlND
ZWxsKiB1bmJveGVkQ2VsbCgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHBheWxvYWQoKSBjb25z
dDsKICAgICAgICAgaW50MzJfdCB0YWcoKSBjb25zdDsKQEAgLTk2LDYgKzk3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBDOwogICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICBFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yIGVuY29kZWRWYWx1ZTsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXI7CiAgICAg
ICAgIH0gdTsKICAgICB9OwogCkBAIC0xODgsNiArMTkwLDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gISFwYXlsb2FkKCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBk
b3VibGUgUmVnaXN0ZXI6OnVuYm94ZWREb3VibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHUubnVtYmVyOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBSZWdpc3Rl
cjo6dW5ib3hlZENlbGwoKSBjb25zdAogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBpZiAoIWNhbkJl
T3B0aW1pemVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0g
YnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvclJldHVybigpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRy
ZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFu
Y2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09m
SklURXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcHRpbWl6ZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0
ZWNvZGVPZmZzZXQpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2NiwxMiBAQCBGVEw6OkpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiAgICAgcmV0dXJuIDA7CiB9
CiAKK0ZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwog
UGFzc1JlZlB0cjxKSVRDb2RlPiBKSVRDb2RlOjpob3N0RnVuY3Rpb24oSklUQ29kZTo6Q29kZVJl
ZiBjb2RlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShjb2RlLCBI
b3N0Q2FsbFRodW5rKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNzIEpJ
VENvZGU7CiB9CiBuYW1lc3BhY2UgRlRMIHsKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZTsKIGNs
YXNzIEpJVENvZGU7CiB9CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIHZpcnR1YWwgREZHOjpKSVRDb2Rl
KiBkZmcoKTsKICAgICB2aXJ0dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7CisgICAgdmlydHVhbCBG
VEw6OkZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKICAgICAKICAgICBKU1Zh
bHVlIGV4ZWN1dGUoSlNTdGFjayosIENhbGxGcmFtZSosIFZNKik7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MzYsMTYgKzEwMzYsMzIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJU
cmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsK
ICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNh
bGxiYWNrID0KLSAgICAgICAgICAgIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoKTsKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gY29k
ZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCF2bS53b3Jr
bGlzdCkKLSAgICAgICAgICAgIHZtLndvcmtsaXN0ID0gREZHOjpnbG9iYWxXb3JrbGlzdCgpOwor
ICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgaWYgKGJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1W
YXJzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Cisg
ICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoCisgICAgICAgICAgICBj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAg
ICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAm
JiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAg
JiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7
CisgICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUg
J3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAg
ICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGlu
dG8gdGhlIHZhbHVlIGZvciB0aGlzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8g
YmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcg
cGFzc2VzLAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVy
bmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVz
W2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNW
YWx1ZSgpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9j
ay5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAg
ICAgIHZtLndvcmtsaXN0LmdldCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCkuZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAg
ICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoKSwKKyAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMDU0LDE1ICsxMDcwLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChv
cHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRM
IEpJVCBkb2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAg
Ly8gRG9uJ3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9u
dE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAg
ICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0
aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzAsMjYgKzIzMCwzMiBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhl
Y3V0YWJsZTo6CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkp
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAg
IEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhp
cyk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENv
ZGVCbG9jayo+KAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKSk7CiAgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBh
ZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBh
cnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICAgICAgcmVz
dWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAogICAgIGlmIChjbGFzc0luZm8oKSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5m
bygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAg
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KHRoaXMpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRp
Y19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPigKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJv
Z3JhbUNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgICAgICBSZWZQdHI8UHJvZ3Jh
bUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAg
ICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmV4ZWN1dGFibGUtPm1fcHJvZ3Jh
bUNvZGVCbG9jaykpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGV4ZWN1dGFibGUt
Pm1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRC
bG9jaywgKmJhc2VsaW5lKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxp
bmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJU
KGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhp
cyk7CisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2sqPigKKyAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpLT5i
YXNlbGluZVZlcnNpb24oKSk7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQg
PSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCi0gICAgICAgIENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKSk7Ci0gICAgcmVz
dWx0LT5zZXRBbHRlcm5hdGl2ZShleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAg
ICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAgcmVzdWx0
LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksNiArMTI5LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsK
ICAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAg
dih1bnNpZ25lZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwg
bGx2bVNpemVMZXZlbCwgMCkgXAorICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2UpIC8qIGZv
b2wtcHJvb2Ygd2F5IG9mIGNoZWNraW5nIHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBGVEwuIDst
KSAqL1wKICAgICBcCiAgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVlKSBcCiAg
ICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldv
cmtlclRocmVhZHMoMikgLSAxKSBcCkBAIC0xNTYsOSArMTU3LDE0IEBAIHR5cGVkZWYgT3B0aW9u
UmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcCwgMTAwMCkgXAogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29u
LCAxMDAwKSBcCi0gICAgXAogICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JMb29wLCAxKSBcCi0gICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJl
dHVybiwgMTUpIFwKKyAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50
cnksIDE1KSBcCisgICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0
ZXJXYXJtVXAsIDI1MDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1pemVT
b29uLCAxMDAwKSBcCisgICAgdihpbnQzMiwgZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxv
b3AsIDEpIFwKKyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJu
LCAxNSkgXAorICAgIHYodW5zaWduZWQsIGZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9yUmVvcHRp
bWl6YXRpb24sIDE1KSBcCiAgICAgXAogICAgIHYoaW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBs
aWVyLCAxMCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDYgKzcxMCwxNSBAQCB2b2lkIFZNOjpnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2CiAgICAgICAgIH0KICAgICB9CiB9CisKK0RGRzo6V29ya2xp
c3QqIFZNOjplbnN1cmVXb3JrbGlzdCgpCit7CisgICAgaWYgKCFERkc6OmVuYWJsZUNvbmN1cnJl
bnRKSVQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAgICAgICAg
d29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmtsaXN0Lmdl
dCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAg
ICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGlu
ZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAgICAgIAor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVXb3JrbGlz
dCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTk4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTMtMDktMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUg
REZHIHNob3VsZCBiZSBhYmxlIHRvIHRpZXItdXAgYW5kIE9TUiBlbnRlciBpbnRvIHRoZSBGVEwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
Rml4IG1hcnNhZ2xpYSB0byBjaGVjayB0aGUgcmVzdWx0IGluc3RlYWQgb2YgcHJpbnRpbmcsIGFu
ZCBhZGQgYSBzZWNvbmQKKyAgICAgICAgdmVyc2lvbiB0aGF0IHJlbGllcyBvbiBPU1IgZW50cnku
CisKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvbWFyc2FnbGlhLW9zci1lbnRyeS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtb3NyLWVu
dHJ5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
bWFyc2FnbGlhLW9zci1lbnRyeS5qczogQWRkZWQuCisgICAgICAgIChtYXJzYWdsaWEpOgorICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzOgorCiAyMDEz
LTA5LTAzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogZXhjZXB0aW9ucyB0cmlnZ2VyZWQgZnJvbSBjb25zb2xlIGV2YWx1YXRpb24g
ZG8gbm90IHBhdXNlIHRoZSBkZWJ1Z2dlcgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdy
ZXNzL21hcnNhZ2xpYS1vc3ItZW50cnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtb3NyLWVudHJ5LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtb3Ny
LWVudHJ5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvbWFyc2FnbGlhLW9zci1lbnRyeQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L21hcnNhZ2xpYS1vc3ItZW50cnkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3MvbWFyc2FnbGlhLW9zci1lbnRyeS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL21hcnNhZ2xpYS1vc3ItZW50cnkuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9tYXJzYWdsaWEtb3NyLWVudHJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLW9zci1l
bnRyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL21hcnNhZ2xpYS1vc3ItZW50cnkuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcnNhZ2xpYS1vc3ItZW50cnkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorZnVuY3Rpb24gbWFyc2FnbGlhKG1feiwgbV93
LCBuKSB7CisgICAgdmFyIHJlc3VsdDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICBtX3ogPSAoMzY5NjkgKiAobV96ICYgNjU1MzUpICsgKG1feiA+PiAxNikpIHwg
MDsKKyAgICAgICAgbV93ID0gKDE4MDAwICogKG1fdyAmIDY1NTM1KSArIChtX3cgPj4gMTYpKSB8
IDA7CisgICAgICAgIHJlc3VsdCA9ICgobV96IDw8IDE2KSArIG1fdykgfCAwOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gbWFyc2FnbGlhKDUsIDcsIDEwMDAw
MDAwKTsKKworaWYgKHJlc3VsdCAhPSAtMTA0NzM2NDA1NikKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzCShyZXZpc2lvbiAxNTQ5ODYp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcnNhZ2xpYS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTIsNCArMTIsNiBAQCB2YXIgcmVzdWx0ID0gMDsKIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAgcmVzdWx0ICs9IG1hcnNhZ2xpYShpLCBpICsg
MSwgMTAwMDAwMCk7CiAKLXByaW50KHJlc3VsdCk7CitpZiAocmVzdWx0ICE9IDgyMTYzODYyNDMp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210414</attachid>
            <date>2013-09-03 15:20:39 -0700</date>
            <delta_ts>2013-09-03 16:30:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>160900</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1MDAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NiBA
QAorMjAxMy0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBERkcgc2hvdWxkIGJlIGFibGUgdG8gdGllci11cCBhbmQgT1NSIGVudGVyIGludG8gdGhl
IEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEy
ODM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGFkZHMgdGhlIGFiaWxpdHkgZm9yIHRoZSBERkcgdG8gdGllci11cCBpbnRvIHRo
ZSBGVEwuIFRoaXMgd29ya3MgaW4gYm90aAorICAgICAgICBvZiB0aGUgZXhwZWN0ZWQgdGllci11
cCBtb2RlczoKKyAgICAgICAgCisgICAgICAgIFJlcGxhY2VtZW50OiBmcmVxdWVudGx5IGNhbGxl
ZCBmdW5jdGlvbnMgZXZlbnR1YWxseSBoYXZlIHRoZWlyIGVudHJ5cG9pbnQKKyAgICAgICAgcmVw
bGFjZWQgd2l0aCBvbmUgdGhhdCBnb2VzIGludG8gRlRMLWNvbXBpbGVkIGNvZGUuIE5vdGUsIHRo
aXMgd2lsbCBiZSBhCisgICAgICAgIHNsb3ctZG93biBmb3Igbm93IHNpbmNlIHdlIGRvbid0IHll
dCBoYXZlIExMVk0gY2FsbGluZyBjb252ZW50aW9uIGludGVncmF0aW9uLgorICAgICAgICAKKyAg
ICAgICAgT1NSIGVudHJ5OiBjb2RlIHN0dWNrIGluIGhvdCBsb29wcyBnZXRzIE9TUidkIGludG8g
dGhlIEZUTCBmcm9tIHRoZSBERkcuCisgICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQg
aWYgdGhlIERGRyBkZXRlY3RzIHRoYXQgYSBmdW5jdGlvbiBpcyBhbiBGVEwgY2FuZGlkYXRlLCBp
dAorICAgICAgICBpbnNlcnRzIGV4ZWN1dGlvbiBjb3VudGluZyBjb2RlIHNpbWlsYXIgdG8gdGhl
IGtpbmQgdGhhdCB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgIHdvdWxkIHVzZS4gSWYgeW91IHRy
aXAgb24gYSBsb29wIGNvdW50IGluIGEgbG9vcCBoZWFkZXIgdGhhdCBpcyBhbiBPU1IKKyAgICAg
ICAgY2FuZGlkYXRlIChpdCdzIG5vdCBhbiBpbmxpbmVkIGxvb3ApLCB3ZSBkbyBPU1I7IG90aGVy
d2lzZSB3ZSBkbyByZXBsYWNlbWVudC4KKyAgICAgICAgT1NSIGFsbW9zdCBhbHdheXMgYWxzbyBp
bXBsaWVzIGZ1dHVyZSByZXBsYWNlbWVudC4KKyAgICAgICAgCisgICAgICAgIE9TUiBlbnRyeSBp
bnRvIHRoZSBGVEwgaXMgcmVhbGx5IGNvb2wuIEl0IHVzZXMgYSBzcGVjaWFsaXplZCBGVEwgY29t
cGlsZSBvZgorICAgICAgICB0aGUgY29kZSwgd2hlcmUgZWFybHkgaW4gdGhlIERGRyBwaXBlbGlu
ZSB3ZSByZXBsYWNlIHRoZSBvcmlnaW5hbCByb290IGJsb2NrCisgICAgICAgIHdpdGggYW4gT1NS
IGVudHJ5cG9pbnQgYmxvY2sgdGhhdCBqdW1wcyB0byB0aGUgcHJlLWhlYWRlciBvZiB0aGUgaG90
IGxvb3AuCisgICAgICAgIFRoZSBPU1IgZW50cnlwb2ludCBsb2FkcyBhbGwgbGl2ZSBzdGF0ZSBh
dCB0aGUgbG9vcCBwcmUtaGVhZGVyIHVzaW5nIGxvYWRzCisgICAgICAgIGZyb20gYSBzY3JhdGNo
IGJ1ZmZlciwgd2hpY2ggZ2V0cyBwb3B1bGF0ZWQgYnkgdGhlIHJ1bnRpbWUncyBPU1IgZW50cnkK
KyAgICAgICAgcHJlcGFyYXRpb24gY29kZSAoRlRMOjpwcmVwYXJlT1NSRW50cnkoKSkuIFRoaXMg
YXBwcm9hY2ggYXBwZWFycyB0byB3b3JrIHdlbGwKKyAgICAgICAgd2l0aCBhbGwgb2Ygb3VyIHN1
YnNlcXVlbnQgb3B0aW1pemF0aW9ucywgaW5jbHVkaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24s
CisgICAgICAgIENGQSwgYW5kIExJQ00uIExMVk0gc2VlbXMgaGFwcHkgd2l0aCBpdCwgdG9vLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpbW1lZGlhdGVseSBnaXZlcyB1cyBhIDcwJSBzcGVlZC11
cCBvbiBpbWFnaW5nLWdhdXNzaWFuLWJsdXIuIFdlIGNvdWxkCisgICAgICAgIGdldCBhIGJpZ2dl
ciBzcGVlZC11cCBieSBhZGRpbmcgc29tZSBtb3JlIGludGVsbGlnZW5jZSBhbmQgdHdlYWtpbmcg
TExWTSB0bworICAgICAgICBjb21waWxlIGNvZGUgZmFzdGVyLiBUaG9zZSB0aGluZ3Mgd2lsbCBo
YXBwZW4gZXZlbnR1YWxseSBidXQgdGhpcyBpcyBhIGdvb2QKKyAgICAgICAgc3RhcnQuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJp
emUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGVJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHRHJpdmVyLmg6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmtpbGxCbG9ja0FuZEl0c0NvbnRlbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6a2lsbFVucmVhY2hhYmxlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6cmVjb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hv
bGRSZWFjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpkb250T3B0aW1pemVBbnl0aW1l
U29vbik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3B0aW1pemVBZnRlcldhcm1VcCk6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZTo6b3B0aW1pemVTb29uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlOjpmb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNl
ZE9uQ29tcGlsYXRpb25SZXN1bHQpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlLmg6CisgICAg
ICAgICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmlu
YWxpemVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
Q29tbW9uKToKKyAgICAgICAgKiBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVByZUhlYWRlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjp1bmxpbmtlZExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBh
cmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2U6Ok9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
T1NSRW50cnlwb2ludENyZWF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNvbXBpbGVJblRocmVhZCk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUlu
VGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAgICAgICAgKiBkZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcv
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
Ojpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlND
OjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENv
bXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpERkc6OlRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlk
Q29tcGxldGUpOgorICAgICAgICAqIGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Z2xvYmFsV29ya2xpc3QpOgorICAgICAgICAqIGRmZy9ERkdX
b3JrbGlzdC5oOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuaDoK
KyAgICAgICAgKiBmdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpGb3JPU1JFbnRyeUpJVENvZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6fkZvck9TUkVudHJ5SklUQ29kZSk6
CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSk6
CisgICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjppbml0aWFsaXplRW50cnlC
dWZmZXIpOgorICAgICAgICAqIGZ0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjplbnRyeUJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OkZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlOjpzZXRCeXRlY29kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpGb3JPU1JFbnRyeUpJVENvZGU6OmJ5dGVjb2RlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6Y291bnRFbnRyeUZhaWx1cmUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkZvck9TUkVudHJ5SklUQ29kZTo6ZW50cnlGYWlsdXJlQ291bnQp
OgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUV4dHJhY3RPU1JFbnRy
eUxvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldExv
Y2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkV2Vha1JlZmVyZW5j
ZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkVudHJ5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkZUTDo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRW50cnkuaDogQWRk
ZWQuCisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6Y3Jhc2hOb25UZXJtaW5hbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjcmFzaCk6
CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6
U3RhdGUpOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6
OlJlZ2lzdGVyOjp1bmJveGVkRG91YmxlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjayk6CisgICAgICAgICogaml0
L0pJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSk6Cisg
ICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAg
ICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVj
dXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1l
bnRDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6ZW5zdXJlV29ya2xpc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOS0wMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBTdXBwb3J0IHRoZSAianNvbiIgcmVzcG9uc2VUeXBlIGFu
ZCBKU09OIHJlc3BvbnNlIGVudGl0eSBpbiBYSFIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw3IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKICAgICBkZmcvREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHT1NSRW50cnkuY3Bw
CisgICAgZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdP
U1JFeGl0LmNwcAogICAgIGRmZy9ERkdPU1JFeGl0QmFzZS5jcHAKICAgICBkZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcApAQCAtMTUxLDYgKzE1Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCiAgICAgZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKKyAgICBkZmcvREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKICAgICBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHVXNlS2lu
ZC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw4IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxhdGlvbklu
Zm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82
NC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwIFwKQEAgLTM1Niw2ICszNTgsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9U
YXJnZXQucHJpCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFy
Z2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAgICAgZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwIFwKICAgICBkZmcvREZHT1NSRW50cnkuY3BwIFwKKyAgICBkZmcvREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIFwKICAgICBkZmcvREZHT1NSRXhpdC5jcHAg
XAogICAgIGRmZy9ERkdPU1JFeGl0QmFzZS5jcHAgXAogICAgIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIuY3BwIFwKQEAgLTE4OSw2ICsxOTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgXAogICAgIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cCBcCiAgICAgZGZnL0RGR1RodW5rcy5jcHAgXAorICAgIGRmZy9ERkdUaWVyVXBDaGVja0luamVj
dGlvblBoYXNlLmNwcCBcCiAgICAgZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIFwKICAgICBk
ZmcvREZHVXNlS2luZC5jcHAgXAogICAgIGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDE4IEBACiAJCTBGRDgyRTg2MTQxRjNGRjEwMDE3
OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5
cGUuY3BwICovOyB9OwogCQkwRkQ4QTMxMzE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhB
MzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovOyB9OwogCQkwRkQ4QTMx
NDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyogQ29k
ZUJsb2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMx
NTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCAqLzsgfTsKKwkJ
MEZEOEEzMUExN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTYxN0Q1MUYy
MjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAv
KiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQ4QTMxNzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwICovOyB9
OworCQkwRkQ4QTMxQzE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzE4MTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRDhBMzI1MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhBMzFFMTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDhBMzFGMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVj
dGlvblBoYXNlLmNwcCAqLzsgfTsKKwkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDhBMzIwMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0
MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjIxN0Q1MUY1NzAwQ0EyQzQw
IC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEOEEzMkIxN0Q1MUY1NzAwQ0Ey
QzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjMx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovOyB9OworCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMjQxN0Q1MUY1NzAwQ0EyQzQw
IC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNDOTE3
M0RBNTIwMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8q
IEZUTEFiYnJldmlhdGVkVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9t
QmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0U3MTc0ODMwQTIw
MDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
Y3BwICovOyB9OwpAQCAtMTU1OCw2ICsxNTcwLDE4IEBACiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3
OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTcGVjdWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1Nl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE2MTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMRm9yT1NSRW50cnlKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMRm9y
T1NSRW50cnlKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzE3
MTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGVExPU1JFbnRyeS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRW50cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJD
NDAgLyogRlRMT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
T1NSRW50cnkuaDsgcGF0aCA9IGZ0bC9GVExPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4QTMxRDE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5cG9p
bnRDcmVhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEz
MUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmg7IHBhdGggPSBkZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEOEEzMUYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRDhBMzIwMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0MCAv
KiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHA7IHBhdGggPSBkZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAg
LyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsg
cGF0aCA9IGRmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMyMzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcDsgcGF0aCA9IGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEOEEzMjQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBwYXRoID0gZGZn
L0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFi
YnJldmlhdGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBw
YXRoID0gZnRsL0ZUTEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9t
QmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAw
N0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTM5LDYgKzI1NjMsOCBAQAogCQkJCUE3RjI5OTY5
MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCAqLywKIAkJCQlBN0YyOTk2QTE3QTBCQjY3
MDAxMDQxN0EgLyogRlRMRmFpbC5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAv
KiBGVExGb3JtYXR0ZWRWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAv
KiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwICovLAorCQkJCTBGRDhBMzE2MTdENTFGMjIwMENB
MkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1
MDA5REY3NDQgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2
MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBB
MjIxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTI1
NTEsNiArMjU3Nyw4IEBACiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2Vy
REZHVG9MTFZNLmNwcCAqLywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93
ZXJERkdUb0xMVk0uaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93
ZXJlZE5vZGVWYWx1ZS5oICovLAorCQkJCTBGRDhBMzE3MTdENTFGMjIwMENBMkM0MCAvKiBGVExP
U1JFbnRyeS5jcHAgKi8sCisJCQkJMEZEOEEzMTgxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVu
dHJ5LmggKi8sCiAJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3Bw
ICovLAogCQkJCTBGMjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCiAJ
CQkJMEYyMzVCQzgxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8u
aCAqLywKQEAgLTM1MjQsNiArMzU1Miw4IEBACiAJCQkJQTdEODlDRUYxN0EwQjhDQzAwNzczQUQ4
IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCAqLywKIAkJCQkwRkQ4MkU1MjE0
MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICovLAogCQkJCTBGRDgyRTUzMTQxREFF
REUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAorCQkJCTBGRDhBMzFEMTdENTFGNTcwMENB
MkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgKi8sCisJCQkJMEZEOEEz
MUUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggKi8s
CiAJCQkJMEZDMDk3OEUxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuY3BwICovLAogCQkJ
CTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8sCiAJCQkJMEYyMzVC
RTcxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCAqLywKQEAgLTM1NjYsNiAr
MzU5NiwxMiBAQAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmggKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1Ro
dW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5o
ICovLAorCQkJCTBGRDhBMzFGMTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVj
dGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRkQ4QTMyMDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oICovLAorCQkJCTBGRDhBMzIxMTdENTFGNTcwMENBMkM0
MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZE
OEEzMjIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmggKi8sCisJCQkJMEZEOEEzMjMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAorCQkJCTBGRDhBMzI0MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggKi8sCiAJCQkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBE
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkYxNkMxREIwMTAwODJD
NUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLApAQCAtMzk3Nyw2ICs0MDEzLDcgQEAK
IAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkJEQzQ3MTUyMjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBE
RkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0Ey
QzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZF
RiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
REM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MDU3LDYgKzQwOTQsNyBAQAogCQkJCTE0QkE3QTk4MTNBQURGRjgwMDVCN0MyQyAvKiBI
ZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAzMTE0QTNDRUZDMDA1NzhFNjUgLyogSGVh
cEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY5NzQ0NzEzOEM4NTNFMDBEQTFDNjcgLyog
SGVhcFJvb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMyODE3RDUxRjU3MDBD
QTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI0RDMxRTMxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5W
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MjkyLDYgKzQzMzAsNyBAQAogCQkJCTBGMTM5MTJB
MTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDhBMzI2MTdENTFGNTcw
MENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJFMTY2QUQzNjAwMDBGNUJB
MyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNDMxNiw2
ICs0MzU1LDcgQEAKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJl
Z0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJl
Z0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxQTE3RDUxRjIyMDBDQTJDNDAg
LyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBF
MTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMkQ2MEUxNzA3MDgwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBLZXkuaCBp
biBIZWFkZXJzICovLApAQCAtNDM0NSw2ICs0Mzg1LDcgQEAKIAkJCQkwRkI3RjM5RTE1RUQ4RTQ2
MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcz
ODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogU3BlY3Vs
YXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzFFQUYyMTc5ODdBQjYwMDI5OURCMiAv
KiBTdGFja0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAx
NkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzY4
LDYgKzQ0MDksNyBAQAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NEEyNjQxMUQxNjYyMjAwNTc3NkFDIC8qIFN5bnRh
eENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAv
KiBUaHVua0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMkExN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29t
RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1OTg5ODE3Qzg2QzU4MDBBMUU1NDMgLyog
VG9OYXRpdmVGcm9tVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtNDc4OSw2ICs0ODMxLDcgQEAK
IAkJCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlm
aWVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4MDMsNiArNDg0Niw3IEBACiAJCQkJMEYyQjY2
REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUMzMTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb252ZXJzaW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRy
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0
ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0
OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMw
MkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4ODUsNiArNDky
OSw3IEBACiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIy
OENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI5
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFE
QjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTUwNTksNiArNTEwNCw3IEBACiAJCQkJQTc4NTA3RDYxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThEMzAwQzNFNjQz
IC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0REEwNDBD
MDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhB
MzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFy
a1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTExMSw2ICs1MTU3LDcgQEAKIAkJCQkxNDI4
MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEx
NzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRDhBMzJCMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hl
c0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQzMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTQxLDYgKzUxODgsNyBAQAog
CQkJCUJDQ0YwRDBDMEVGMEI4QTUwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMkRGNDQyRjE3MDdBQzAxMDBBNUNBOTYgLyogU3VwZXJSZWdpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJv
bFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDhBMzI1MTdENTFGNTcwMENBMkM0MCAv
KiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NzksNiArMTQ3OSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1Rh
ZywKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCiAgICAgLCBtX2lzQ29uc3RydWN0
b3Iob3RoZXIubV9pc0NvbnN0cnVjdG9yKQogICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQo
dHJ1ZSkKKyAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwgbV91bmxp
bmtlZENvZGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhl
ci5tX3VubGlua2VkQ29kZS5nZXQoKSkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5t
X3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCkBAIC0xNTI5LDYgKzE1MzAsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX251bVZhcnMo
dW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycykKICAgICAsIG1faXNDb25zdHJ1Y3Rvcih1bmxp
bmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpKQogICAgICwgbV9zaG91bGRBbHdheXNCZUlu
bGluZWQodHJ1ZSkKKyAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQogICAgICwg
bV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgdW5s
aW5rZWRDb2RlQmxvY2spCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+
dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX3ZtKHVubGlu
a2VkQ29kZUJsb2NrLT52bSgpKQpAQCAtMjM3NCwxNyArMjM3NiwxNCBAQCBDb2RlQmxvY2sqIENv
ZGVCbG9jazo6YmFzZWxpbmVWZXJzaW9uKCkKIH0KIAogI2lmIEVOQUJMRShKSVQpCitib29sIENv
ZGVCbG9jazo6aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoSklUQ29kZTo6SklUVHlwZSB0eXBlVG9S
ZXBsYWNlKQoreworICAgIHJldHVybiBKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQo
KS0+aml0VHlwZSgpLCB0eXBlVG9SZXBsYWNlKTsKK30KKwogYm9vbCBDb2RlQmxvY2s6Omhhc09w
dGltaXplZFJlcGxhY2VtZW50KCkKIHsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoaml0VHlwZSgpKSk7Ci0gICAgYm9vbCByZXN1bHQgPSBKSVRDb2RlOjppc0hpZ2hlclRpZXIo
cmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpOwotICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQocmVwbGFjZW1lbnQoKS0+aml0
VHlwZSgpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChKSVRDb2RlOjppc0Jhc2VsaW5l
Q29kZShyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKLSAgICAgICAgQVNTRVJUKHJlcGxhY2Vt
ZW50KCkgPT0gdGhpcyk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KGppdFR5cGUoKSk7CiB9CiAjZW5kaWYKIApAQCAtMzAxOSwx
MCArMzAxOCwxMCBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAg
ICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCkpKTsKICAgICAg
ICAgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CiAgICAgICAgIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBD
b21waWxhdGlvbkRlZmVycmVkOgogICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZG8gZG9udE9wdGlt
aXplQW55dGltZVNvb24oKSBidXQgd2UgY2Fubm90IGJlY2F1c2UKICAgICAgICAgLy8gZm9yY2VP
cHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgpIGlzIGluaGVyZW50bHkgcmFjeS4gSXQg
d29uJ3QKQEAgLTMwMzAsMTYgKzMwMjksMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXph
dGlvblRocmVzaG9sZAogICAgICAgICAvLyBmdW5jdGlvbiBlbmRzIHVwIGJlaW5nIGEgbm8tb3As
IHdlIHN0aWxsIGV2ZW50dWFsbHkgcmV0cnkgYW5kIHJlYWxpemUKICAgICAgICAgLy8gdGhhdCB3
ZSBoYXZlIG9wdGltaXplZCBjb2RlIHJlYWR5LgogICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlv
bkludmFsaWRhdGVkOgogICAgICAgICAvLyBSZXRyeSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYu
CiAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKICAgICAgICAgb3B0aW1pemVBZnRlcldh
cm1VcCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1
NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDcgKzMwOCw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsU3RhdGUoKSB7IHJldHVybiBtX2NhcGFiaWxp
dHlMZXZlbFN0YXRlOyB9CiAKLSAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCk7Cisg
ICAgYm9vbCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudChKSVRDb2RlOjpKSVRUeXBlIHR5cGVUb1Jl
cGxhY2UpOworICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKTsgLy8gdGhlIHR5cGVU
b1JlcGxhY2UgaXMgbXkgSklUVHlwZQogI2VuZGlmCiAKICAgICBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsg
fQpAQCAtOTU3LDYgKzk1OCw4IEBAIHB1YmxpYzoKICAgICBib29sIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkOwogICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0
aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICAKKyAgICBib29sIG1fZGlkRmFpbEZU
TENvbXBpbGF0aW9uOworICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTQ5ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsMjAgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3JOb2RlKG5vZGUpID0gdmFsdWU7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDogeworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKKyAgICAgICAgaWYg
KCFvcGVyYW5kSXNBcmd1bWVudChub2RlLT51bmxpbmtlZExvY2FsKCkpCisgICAgICAgICAgICAm
JiBtX2dyYXBoLm1fbGF6eVZhcnMuZ2V0KG5vZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMga2luZCBvZiBwZXNzaW1pc3RpYyAtIHdlIGNvdWxkIGtub3cgaW4g
c29tZSBjYXNlcyB0aGF0IHRoZQorICAgICAgICAgICAgLy8gREZHIGNvZGUgYXQgdGhlIHBvaW50
IG9mIHRoZSBPU1IgaGFkIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhlIGxhenkKKyAgICAgICAgICAg
IC8vIHZhcmlhYmxlLiBCdXQgbWF5YmUgdGhpcyBpcyBmaW5lLCBzaW5jZSB3ZSdyZSBpbnNlcnRp
bmcgT1NSCisgICAgICAgICAgICAvLyBlbnRyeXBvaW50cyB2ZXJ5IGVhcmx5IGluIHRoZSBwaXBl
bGluZSAtIHNvIGFueSBsYXp5IGluaXRpYWxpemF0aW9ucworICAgICAgICAgICAgLy8gb3VnaHQg
dG8gYmUgaG9pc3RlZCBvdXQgYW55d2F5LgorICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tZXJn
ZShTcGVjRW1wdHkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAg
ICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKQEAgLTE1MTUs
NiArMTUyOSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBDb3VudEV4
ZWN1dGlvbjoKKyAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgIGNhc2UgQ2hlY2tUaWVy
VXBBdFJldHVybjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENoZWNrVGllclVwQW5kT1NS
RW50ZXI6CisgICAgY2FzZSBMb29wSGludDoKKyAgICAgICAgLy8gV2UgcHJldGVuZCB0aGF0IGl0
IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdhbnQgdG8gZ2V0IGFsbCBzdGF0ZS4KKyAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFVucmVh
Y2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQwLDE5ICszMTQw
LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIpCiAgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKIAorICAgICAgICAgICAgYWRkVG9HcmFw
aChMb29wSGludCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX3ZtLT53YXRjaGRv
Zy5pc0VuYWJsZWQoKSkKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrV2F0Y2hkb2dU
aW1lcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGhh
bnRvbSBub2RlIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgcGxhY2Vob2xkZXIKLSAgICAgICAg
ICAgICAgICAvLyBub2RlIGZvciB0aGlzIGJ5dGVjb2RlIG9wLgotICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2xvb3BfaGludCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6IHsKICAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSgp
KSk7CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCA+
PSAwKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2xhenlf
cmVnKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zNjM0LDcgKzM2MzMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKICAgICAgICAg
aWYgKCFibG9jay0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgua2lsbEJsb2Nr
KGJsb2NrKTsKKyAgICAgICAgICAgIG1fZ3JhcGgua2lsbEJsb2NrQW5kSXRzQ29udGVudHMoYmxv
Y2spOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCwx
NiArMjcwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1f
Z3JhcGguaW52YWxpZGF0ZUNGRygpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFj
aGFiaWxpdHkoKTsKLQotICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1Jl
YWNoYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAga2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVC
bG9ja3MoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQpAQCAtMzIwLDE5ICszMTEsNiBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBraWxsVW5yZWFjaGFibGUoQmFz
aWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2spOwotICAgICAgICBB
U1NFUlQoIWJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKLSAgICAgICAg
ICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0t
OykKLSAgICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9kZUlu
ZGV4KSk7Ci0gICAgICAgIAotICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7Ci0gICAg
fQotICAgIAogICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9jaywgQmFz
aWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGludCBvcGVy
YW5kKQogICAgIHsKICAgICAgICAgTm9kZSogbGl2ZW5lc3NOb2RlID0gamV0dGlzb25lZEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEx
LDYgKzExMSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICBjYXNlIElzU3RyaW5nOgogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICBjYXNlIEludDMyVG9E
b3VibGU6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKQEAgLTEzMyw2ICsxMzQsMTAgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgRm9yY2VP
U1JFeGl0OgogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgY2Fz
ZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CisgICAg
Y2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgorICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw5ICs1
NSw5IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAgICBFeGVjU3RhdGUq
IGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiBjYWxsYmFjaywKLSAgICBXb3JrbGlzdCogd29ya2xpc3QpCisgICAgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIHVuc2lnbmVk
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVz
dEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
az4gY2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CiAgICAgCkBAIC02Nyw4
ICs2Nyw2IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAotICAg
IEFTU0VSVChvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlOVF9NQVgpOwotCiAgICAgaWYgKCFP
cHRpb25zOjp1c2VERkdKSVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAKQEAgLTc2LDkgKzc0
LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgICAgICByZXR1
cm4gQ29tcGlsYXRpb25GYWlsZWQ7CiAgICAgCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cygpKQotICAgICAgICBkYXRhTG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9j
aywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25D
b3VudCgpLCAiXG4iKTsKLSAgICAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBk
YXRhTG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1v
ZGUsICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9u
Q291bnQoKSwgIlxuIik7CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRo
YXQgdGhlIERGRyBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAg
ICAgLy8gbWFrZSBzdXJlIHRoYXQgYWwgSklUIGNvZGUgZ2VuZXJhdGlvbiBkb2VzIGZpbmFsaXph
dGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCkBAIC05MywyOSArODksOCBAQCBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgdm0uZ2V0Q1RJU3R1YihGVEw6Om9zckV4aXRH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOwogI2VuZGlmCiAgICAgCi0gICAgLy8gRGVyaXZlIG91
ciBzZXQgb2YgbXVzdC1oYW5kbGUgdmFsdWVzLiBUaGUgY29tcGlsYXRpb24gbXVzdCBiZSBhdCBs
ZWFzdCBjb25zZXJ2YXRpdmUKLSAgICAvLyBlbm91Z2ggdG8gYWxsb3cgZm9yIE9TUiBlbnRyeSB3
aXRoIHRoZXNlIHZhbHVlcy4KLSAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKLSAgICBp
ZiAob3NyRW50cnlCeXRlY29kZUluZGV4KQotICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNv
ZGVCbG9jay0+bV9udW1WYXJzOwotICAgIGVsc2UKLSAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMg
PSAwOwogICAgIFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBQbGFu
KGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVl
cykpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOwotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3Bl
cmFuZCkKLSAgICAgICAgICAgICYmICFvcGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKQotICAgICAg
ICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQotICAgICAgICAg
ICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0
KSB7Ci0gICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAn
dGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAotICAgICAgICAgICAgLy8g
YWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRo
ZSB2YWx1ZSBmb3IgdGhpcywKLSAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8gYmUgYW4gYWN0
dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcgcGFzc2VzLAot
ICAgICAgICAgICAgLy8gc28gd2Ugc2FuaXRpemUgaXQgaGVyZSBieSB0dXJuaW5nIGl0IGludG8g
VW5kZWZpbmVkLgotICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZhbHVlc1tpXSA9IGpzVW5k
ZWZpbmVkKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcGxhbi0+bXVzdEhhbmRsZVZh
bHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwotICAgIH0KKyAg
ICAgICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11
c3RIYW5kbGVWYWx1ZXMpKTsKICAgICAKICAgICBpZiAod29ya2xpc3QpIHsKICAgICAgICAgcGxh
bi0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKQEAgLTEzMCw3ICsxMDUsNyBAQCBzdGF0aWMgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiB9CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAgICBFeGVjU3RhdGUqLCBDb2Rl
QmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkLAorICAgIFZNJiwgQ29kZUJsb2NrKiwg
Q29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mLAogICAg
IFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiwgV29ya2xpc3QqKQogewog
ICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKQEAgLTEzOCwxMyArMTEzLDEzIEBAIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKIAogQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrPiBwYXNzZWRDYWxsYmFjaywKLSAgICBXb3JrbGlzdCogd29ya2xpc3QpCisgICAgVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIHVuc2lnbmVkIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhh
bmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4g
cGFzc2VkQ2FsbGJhY2ssIFdvcmtsaXN0KiB3b3JrbGlzdCkKIHsKICAgICBSZWZQdHI8RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9IHBhc3NlZENhbGxiYWNrOwogICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvbXBpbGVJbXBsKAotICAgICAgICBleGVjLCBjb2Rl
QmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY2FsbGJhY2ssIHdvcmtsaXN0KTsK
KyAgICAgICAgdm0sIGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0
SGFuZGxlVmFsdWVzLCBjYWxsYmFjaywgd29ya2xpc3QpOwogICAgIGlmIChyZXN1bHQgIT0gQ29t
cGlsYXRpb25EZWZlcnJlZCkKICAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoY29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDEwIEBAIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGEKIAogLy8gSWYg
dGhlIHdvcmtsaXN0IGlzIG5vbi1udWxsLCB3ZSBkbyBhIGNvbmN1cnJlbnQgY29tcGlsZS4gT3Ro
ZXJ3aXNlIHdlIGRvIGEgc3luY2hyb25vdXMKIC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2UgZG8gYSBz
eW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXN1bHQu
Ci1Db21waWxhdGlvblJlc3VsdCBjb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIENvbXBp
bGF0aW9uTW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBQYXNzUmVmUHRyPERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4sIFdvcmtsaXN0Kik7CitDb21waWxhdGlvblJlc3Vs
dCBjb21waWxlKAorICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+LCBXb3JrbGlzdCopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQ0LDYgKzg0NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92
SGludDoKICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICAgICAgY2FzZSBDaGVj
a1RpZXJVcEF0UmV0dXJuOgorICAgICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIApAQCAtODk2LDYgKzg5OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
Rm9yY2VPU1JFeGl0OgogICAgICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICAgICAg
Y2FzZSBVbnJlYWNoYWJsZToKKyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAg
ICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAg
ZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiwxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgInIiLCBvcGVyYW5kLCAiKCIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAoKnRoaXMsIHZh
cmlhYmxlQWNjZXNzRGF0YSksICIpIik7CiAgICAgfQorICAgIGlmIChub2RlLT5oYXNVbmxpbmtl
ZExvY2FsKCkpIHsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBub2RlLT51bmxpbmtlZExvY2FsKCk7
CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgImFyZyIsIG9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiciIsIG9wZXJhbmQpOworICAg
IH0KICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnRCdWZmZXIoKSkgewogICAgICAgICBvdXQucHJp
bnQoY29tbWEpOwogICAgICAgICBvdXQucHJpbnQobm9kZS0+c3RhcnRDb25zdGFudCgpLCAiOlsi
KTsKQEAgLTQ4Nyw2ICs0OTQsMjkgQEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQog
ICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogfQogCit2b2lkIEdyYXBoOjpraWxsQmxvY2tB
bmRJdHNDb250ZW50cyhCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHBo
aUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgbV9hbGxv
Y2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICBtX2FsbG9jYXRv
ci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICAKKyAgICBraWxsQmxvY2soYmxvY2sp
OworfQorCit2b2lkIEdyYXBoOjpraWxsVW5yZWFjaGFibGVCbG9ja3MoKQoreworICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBpZiAoYmxvY2stPmlzUmVhY2hhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIAorICAgICAgICBraWxsQmxvY2tBbmRJdHNDb250ZW50cyhibG9jayk7CisgICAgfQorfQor
CiB2b2lkIEdyYXBoOjpyZXNldEV4aXRTdGF0ZXMoKQogewogICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTQ5
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4OSw2ICs0ODksMTAgQEAgcHVibGljOgogICAgICAgICBraWxsQmxvY2soYmFzaWNC
bG9jay0+aW5kZXgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGtpbGxCbG9ja0FuZEl0c0NvbnRl
bnRzKEJhc2ljQmxvY2sqKTsKKyAgICAKKyAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZUJsb2Nrcygp
OworICAgIAogICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSogbm9kZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBpc051bWVyaWNhbChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpICYm
IGlzTnVtZXJpY2FsKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSk7CkBAIC02OTgsNiArNzAyLDcg
QEAgcHVibGljOgogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CiAgICAgSGFzaFNldDxFeGVjdXRh
YmxlQmFzZSo+IG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQ7CiAgICAgQml0VmVj
dG9yIG1fcHJlc2VydmVkVmFyczsKKyAgICBCaXRWZWN0b3IgbV9sYXp5VmFyczsKICAgICBEb21p
bmF0b3JzIG1fZG9taW5hdG9yczsKICAgICBOYXR1cmFsTG9vcHMgbV9uYXR1cmFsTG9vcHM7CiAg
ICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQCB2b2lkIEluUGxhY2VBYnN0cmFj
dFN0YXRlOjppbml0aWFsaXplKCkKICAgICByb290LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CiAg
ICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAg
ICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVh
ZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOSw4
ICsxMzAsNiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAg
ICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXRUeXBlKFNwZWNDZWxsKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
Lm1ha2VUb3AoKTsKLSAgICAgICAgCi0gICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChpKS5jbGVhcigpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZh
bHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKICAgICAgICAgTm9kZSogbm9kZSA9
IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
OCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKwog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBKSVRDb2RlOjpKSVRDb2RlKCkKQEAg
LTU5LDYgKzYxLDE0NSBAQCB2b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKICAgICB2YXJpYWJs
ZUV2ZW50U3RyZWFtLnNocmlua1RvRml0KCk7CiB9CiAKK3ZvaWQgSklUQ29kZTo6cmVjb25zdHJ1
Y3QoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5z
aWduZWQgc3RyZWFtSW5kZXgsCisgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHJlc3VsdCkK
K3sKKyAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KAorICAgICAgICBjb2RlQmxv
Y2ssIGNvZGVPcmlnaW4sIG1pbmlmaWVkREZHLCBzdHJlYW1JbmRleCwgcmVzdWx0KTsKK30KKwor
dm9pZCBKSVRDb2RlOjpyZWNvbnN0cnVjdCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIHN0cmVhbUluZGV4
LAorICAgIE9wZXJhbmRzPEpTVmFsdWU+JiByZXN1bHQpCit7CisgICAgT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4gcmVjb3ZlcmllczsKKyAgICByZWNvbnN0cnVjdChjb2RlQmxvY2ssIGNvZGVPcmln
aW4sIHN0cmVhbUluZGV4LCByZWNvdmVyaWVzKTsKKyAgICAKKyAgICByZXN1bHQgPSBPcGVyYW5k
czxKU1ZhbHVlPihPcGVyYW5kc0xpa2UsIHJlY292ZXJpZXMpOworICAgIGZvciAoc2l6ZV90IGkg
PSByZXN1bHQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGludCBvcGVyYW5kID0gcmVzdWx0Lm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKQorICAgICAgICAgICAgJiYgIW9wZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpCisg
ICAgICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAg
ICAgICAgICAmJiBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25z
dHJ1Y3QpIHsKKyAgICAgICAgICAgIC8vIFVnaC4gSWYgd2UncmUgaW4gYSBjb25zdHJ1Y3Rvciwg
dGhlICd0aGlzJyBhcmd1bWVudCBtYXkgaG9sZCBnYXJiYWdlLiBJdCB3aWxsCisgICAgICAgICAg
ICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGlu
dG8gdGhlIHZhbHVlIGZvciB0aGlzLAorICAgICAgICAgICAgLy8gYnV0IGl0IGhhcyB0byBiZSBh
biBhY3R1YWwgdmFsdWUgdGhhdCBjYW4gYmUgZ3Jva2tlZCBieSBzdWJzZXF1ZW50IERGRyBwYXNz
ZXMsCisgICAgICAgICAgICAvLyBzbyB3ZSBzYW5pdGl6ZSBpdCBoZXJlIGJ5IHR1cm5pbmcgaXQg
aW50byBVbmRlZmluZWQuCisgICAgICAgICAgICByZXN1bHRbaV0gPSBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhbHVl
UmVjb3ZlcnkgcmVjb3ZlcnkgPSByZWNvdmVyaWVzW2ldOworICAgICAgICBKU1ZhbHVlIHZhbHVl
OworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2Ug
QWxyZWFkeUluSlNTdGFjazoKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVk
Q2VsbDoKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVkQm9vbGVhbjoKKyAg
ICAgICAgICAgIHZhbHVlID0gZXhlYy0+cihvcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBbHJlYWR5SW5KU1N0YWNrQXNVbmJveGVkSW50MzI6Cisg
ICAgICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGV4ZWMtPnIob3BlcmFuZCkudW5ib3hlZEludDMy
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxyZWFkeUluSlNTdGFja0Fz
VW5ib3hlZERvdWJsZToKKyAgICAgICAgICAgIHZhbHVlID0ganNEb3VibGVOdW1iZXIoZXhlYy0+
cihvcGVyYW5kKS51bmJveGVkRG91YmxlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICB2YWx1ZSA9IHJlY292ZXJ5LmNvbnN0YW50KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKK2Jvb2wgSklUQ29kZTo6Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCk7CisgICAgcmV0dXJuIHRpZXJVcENvdW50ZXIuY2hlY2tJZlRocmVz
aG9sZENyb3NzZWRBbmRTZXQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7Cit9CisKK3Zv
aWQgSklUQ29kZTo6b3B0aW1pemVOZXh0SW52b2NhdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsK
KyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxv
Y2ssICI6IEZUTC1vcHRpbWl6aW5nIG5leHQgaW52b2NhdGlvbi5cbiIpOworICAgIHRpZXJVcENv
dW50ZXIuc2V0TmV3VGhyZXNob2xkKDAsIGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwor
fQorCit2b2lkIEpJVENvZGU6OmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpE
RkdKSVQpOworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2co
KmNvZGVCbG9jaywgIjogTm90IEZUTC1vcHRpbWl6aW5nIGFueXRpbWUgc29vbi5cbiIpOworICAg
IHRpZXJVcENvdW50ZXIuZGVmZXJJbmRlZmluaXRlbHkoKTsKK30KKwordm9pZCBKSVRDb2RlOjpv
cHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCisgICAgICAgIGRhdGFMb2coKmNvZGVCbG9jaywgIjogRlRMLW9wdGlt
aXppbmcgYWZ0ZXIgd2FybS11cC5cbiIpOworICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIHRpZXJVcENvdW50ZXIuc2V0TmV3VGhyZXNo
b2xkKAorICAgICAgICBiYXNlbGluZS0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9uczo6dGhy
ZXNob2xkRm9yRlRMT3B0aW1pemVBZnRlcldhcm1VcCgpKSwKKyAgICAgICAgYmFzZWxpbmUpOwor
fQorCit2b2lkIEpJVENvZGU6Om9wdGltaXplU29vbihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCpjb2RlQmxvY2ss
ICI6IEZUTC1vcHRpbWl6aW5nIHNvb24uXG4iKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lID0g
Y29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICB0aWVyVXBDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZCgKKyAgICAgICAgYmFzZWxpbmUtPmFkanVzdGVkQ291bnRlclZhbHVlKE9wdGlvbnM6
OnRocmVzaG9sZEZvckZUTE9wdGltaXplU29vbigpKSwKKyAgICAgICAgYmFzZWxpbmUpOworfQor
Cit2b2lkIEpJVENvZGU6OmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OkRGR0pJVCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAg
ICAgZGF0YUxvZygqY29kZUJsb2NrLCAiOiBGb3JjaW5nIHNsb3cgcGF0aCBjb25jdXJyZW50bHkg
Zm9yIEZUTCBlbnRyeS5cbiIpOworICAgIHRpZXJVcENvdW50ZXIuZm9yY2VTbG93UGF0aENvbmN1
cnJlbnRseSgpOworfQorCit2b2lkIEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpERkdKSVQpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWw6CisgICAgICAgIG9wdGltaXplTmV4dEludm9jYXRpb24oY29kZUJs
b2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAg
ICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIGNvZGVCbG9j
ay0+YmFzZWxpbmVWZXJzaW9uKCktPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKKyAgICAgICAgb3B0
aW1pemVBZnRlcldhcm1VcChjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b21waWxhdGlvbkludmFsaWRhdGVkOgorICAgICAgICAvLyBUaGlzIGlzIHdlaXJkIC0gaXQgd2ls
bCBvbmx5IGhhcHBlbiBpbiBjYXNlcyB3aGVuIHRoZSBERkcgY29kZSBibG9jayAoaS5lLgorICAg
ICAgICAvLyB0aGUgY29kZSBibG9jayB0aGF0IHRoaXMgSklUQ29kZSBiZWxvbmdzIHRvKSBpcyBh
bHNvIGludmFsaWRhdGVkLiBTbyBpdAorICAgICAgICAvLyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIg
d2hhdCB3ZSBkby4gQnV0LCB3ZSBkbyB0aGUgcmlnaHQgdGhpbmcgYW55d2F5LiBOb3RlCisgICAg
ICAgIC8vIHRoYXQgdXMgY291bnRpbmcgdGhlIHJlb3B0aW1pemF0aW9uIGFjdHVhbGx5IG1lYW5z
IHRoYXQgd2UgbWlnaHQgY291bnQgaXQKKyAgICAgICAgLy8gdHdpY2UuIEJ1dCB0aGF0J3MgZ2Vu
ZXJhbGx5IE9LLiBJdCdzIGJldHRlciB0byBvdmVyY291bnQgcmVvcHRpbWl6YXRpb25zCisgICAg
ICAgIC8vIHRoYW4gaXQgaXMgdG8gdW5kZXJjb3VudCB0aGVtLgorICAgICAgICBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLT5jb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgIG9wdGlt
aXplQWZ0ZXJXYXJtVXAoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAx
NTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDEzIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2lu
Y2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgog
I2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgog
I2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIK
ICNpbmNsdWRlICJKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgpAQCAtOTMsOCArOTUsMzAgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAgICAgICBD
b2RlQmxvY2sqLCBDb2RlT3JpZ2luLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4mIHJlc3VsdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBvbmx5IGFwcGxpY2Fi
bGUgaWYgd2UncmUgYXQgYSBwb2ludCB3aGVyZSBhbGwgdmFsdWVzIGFyZSBzcGlsbGVkIHRvIHRo
ZQorICAgIC8vIHN0YWNrLiBDdXJyZW50bHksIGl0IGFsc28gaGFzIHRoZSByZXN0cmljdGlvbiB0
aGF0IHRoZSB2YWx1ZXMgbXVzdCBiZSBpbiB0aGVpcgorICAgIC8vIGJ5dGVjb2RlLWRlc2lnbmF0
ZWQgc3RhY2sgc2xvdHMuCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgRXhlY1N0YXRl
KiwgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIE9wZXJhbmRz
PEpTVmFsdWU+JiByZXN1bHQpOworCisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgLy8gTkIuIEFs
bCBvZiB0aGVzZSBtZXRob2RzIHRha2UgQ29kZUJsb2NrKiBiZWNhdXNlIHRoZXkgbWF5IHdhbnQg
dG8gdXNlCisgICAgLy8gQ29kZUJsb2NrJ3MgbG9naWMgYWJvdXQgc2NhbGluZyB0aHJlc2hvbGRz
LiBJdCBzaG91bGQgYmUgYSBERkcgQ29kZUJsb2NrLgorICAgIAorICAgIGJvb2wgY2hlY2tJZk9w
dGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6
ZU5leHRJbnZvY2F0aW9uKENvZGVCbG9jayopOworICAgIHZvaWQgZG9udE9wdGltaXplQW55dGlt
ZVNvb24oQ29kZUJsb2NrKik7CisgICAgdm9pZCBvcHRpbWl6ZUFmdGVyV2FybVVwKENvZGVCbG9j
ayopOworICAgIHZvaWQgb3B0aW1pemVTb29uKENvZGVCbG9jayopOworICAgIHZvaWQgZm9yY2VP
cHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseShDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHNl
dE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb2RlQmxvY2sq
LCBDb21waWxhdGlvblJlc3VsdCk7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgCiAg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwotICAgICAgICAKKyAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxsIHNldENv
ZGVSZWYoKS4KIApAQCAtMTA2LDYgKzEzMCwxMCBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVj
dG9yPEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQsIDEsIDA+IHdhdGNocG9pbnRzOwogICAgIERG
Rzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWlu
aWZpZWRHcmFwaCBtaW5pZmllZERGRzsKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBFeGVjdXRp
b25Db3VudGVyIHRpZXJVcENvdW50ZXI7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gb3NyRW50cnlC
bG9jazsKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFs
aXplci5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMjcgKzQ4LDMxIEBAIEpJ
VEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiAKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6
ZSgpCiB7Ci0gICAgZmluYWxpemVDb21tb24oKTsKLSAgICAKICAgICBtX2ppdENvZGUtPmluaXRp
YWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5
KCkpOwogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoKSk7CiAgICAgCisgICAgZmluYWxpemVDb21tb24oKTsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24o
KQogewotICAgIGZpbmFsaXplQ29tbW9uKCk7Ci0gICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIHdpdGhBcml0eUNoZWNrID0gbV9saW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVj
ayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFs
aXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRK
SVRDb2RlKG1faml0Q29kZSwgd2l0aEFyaXR5Q2hlY2spOwogICAgIAorICAgIGZpbmFsaXplQ29t
bW9uKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSklURmluYWxpemVyOjpm
aW5hbGl6ZUNvbW1vbigpCiB7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAgbV9qaXRDb2RlLT5v
cHRpbWl6ZUFmdGVyV2FybVVwKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCkpOworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorICAgIAogICAgIGlmIChtX3BsYW4uY29tcGlsYXRpb24pCiAgICAgICAg
IG1fcGxhbi52bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1fcGxhbi5j
b21waWxhdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQ
cmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0
OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDMxIEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorQmFzaWNCbG9jayogY3JlYXRlUHJlSGVhZGVyKEdy
YXBoJiBncmFwaCwgQmxvY2tJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgQmFzaWNCbG9jayogcHJlSGVhZGVyID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dEJlZm9yZShibG9jayk7CisgICAgcHJlSGVhZGVyLT5hcHBlbmROb2RlKAorICAgICAgICBncmFw
aCwgU3BlY05vbmUsIEp1bXAsIGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdpbiwgT3BJbmZvKGJsb2Nr
KSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBwcmVkZWNlc3NvckluZGV4ID0gMDsgcHJlZGVj
ZXNzb3JJbmRleCA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBwcmVkZWNlc3NvckluZGV4
KyspIHsKKyAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNz
b3JzW3ByZWRlY2Vzc29ySW5kZXhdOworICAgICAgICBpZiAoZ3JhcGgubV9kb21pbmF0b3JzLmRv
bWluYXRlcyhibG9jaywgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGJsb2NrLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRleC0tXSA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnMubGFzdCgpOworICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IHByZWRlY2Vzc29yLT5u
dW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yID0gcHJlZGVjZXNzb3ItPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7
CisgICAgICAgICAgICBpZiAoc3VjY2Vzc29yICE9IGJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgc3VjY2Vzc29yID0gcHJlSGVhZGVyOworICAgICAgICAgICAg
cHJlSGVhZGVyLT5wcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBibG9jay0+cHJlZGVjZXNzb3JzLmFwcGVuZChwcmVIZWFkZXIpOwor
ICAgIHJldHVybiBwcmVIZWFkZXI7Cit9CisKIGNsYXNzIExvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCkBAIC03MCwyNiArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAoIW5lZWRzTmV3UHJlSGVhZGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgPSBtX2luc2VydGlv
blNldC5pbnNlcnRCZWZvcmUobG9vcC5oZWFkZXIoKSk7Ci0gICAgICAgICAgICBwcmVIZWFkZXIt
PmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGxv
b3AuaGVhZGVyKCktPmF0KDApLT5jb2RlT3JpZ2luLCBPcEluZm8obG9vcC5oZWFkZXIoKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByZWRlY2Vzc29ySW5kZXgg
PSAwOyBwcmVkZWNlc3NvckluZGV4IDwgbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzLnNpemUo
KTsgcHJlZGVjZXNzb3JJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJl
ZGVjZXNzb3IgPSBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnNbcHJlZGVjZXNzb3JJbmRleF07
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhsb29w
LmhlYWRlcigpLCBwcmVkZWNlc3NvcikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGxvb3AuaGVhZGVyKCktPnByZWRlY2Vzc29yc1twcmVkZWNlc3Nvcklu
ZGV4LS1dID0gbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNzb3JzLmxhc3QoKTsKLSAgICAgICAgICAg
ICAgICBsb29wLmhlYWRlcigpLT5wcmVkZWNlc3NvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gcHJlZGVjZXNzb3ItPm51bVN1Y2Nl
c3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayomIHN1Y2Nlc3NvciA9IHByZWRlY2Vzc29yLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yICE9IGxvb3AuaGVhZGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yID0gcHJlSGVhZGVyOwotICAgICAgICAgICAgICAgICAgICBwcmVIZWFkZXItPnByZWRl
Y2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbG9vcC5oZWFkZXIoKS0+cHJlZGVjZXNz
b3JzLmFwcGVuZChwcmVIZWFkZXIpOworICAgICAgICAgICAgY3JlYXRlUHJlSGVhZGVyKG1fZ3Jh
cGgsIG1faW5zZXJ0aW9uU2V0LCBsb29wLmhlYWRlcigpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMg
KzMyLDI3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgQmxv
Y2tJbnNlcnRpb25TZXQ7CiBjbGFzcyBHcmFwaDsKK3N0cnVjdCBCYXNpY0Jsb2NrOwogCiAvLyBJ
bnNlcnRzIGR1bW15IGJhc2ljIGJsb2NrcyBiZWZvcmUgYW55IGxvb3AgaGVhZGVycyB0aGF0IGRv
bid0IGFscmVhZHkgaGF2ZQogLy8gYSBzaW5nbGUgbm9uLWxvb3AgcHJlZGVjZXNzb3IuCiAKIGJv
b2wgcGVyZm9ybUxvb3BQcmVIZWFkZXJDcmVhdGlvbihHcmFwaCYpOwogCisvLyBDcmVhdGVzIGEg
bmV3IGJhc2ljIGJsb2NrIChhIHByZS1oZWFkZXIpIHRoYXQganVtcHMgdG8gdGhlIGdpdmVuIGJs
b2NrLiBBbGwKKy8vIHByZWRlY2Vzc29ycyBvZiB0aGUgZ2l2ZW4gYmxvY2sgdGhhdCBhcmVuJ3Qg
ZG9taW5hdGVkIGJ5IGl0IGFyZSByZXJvdXRlZCB0bworLy8gdGhlIHByZS1oZWFkZXIuCisvLwor
Ly8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYW5kIGl0J3MgdXNlZCBpbiBhIHN1
cmdpY2FsIGZhc2hpb24gYnkKKy8vIE9TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLgorLy8KKy8v
IE5vdGUgdGhhdCBleGVjdXRpbmcgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBoYXZpbmcgYW4gaW50
YWN0IGRvbWluYXRvcnMKKy8vIGFuYWx5c2lzLiBZb3Ugc2hvdWxkIHJ1biB0aGF0IGFuYWx5c2lz
IGJlZm9yZSBkb2luZyBkYW1hZ2UgdG8gdGhlIENGRywgZXZlbgorLy8gaWYgc2FpZCBkYW1hZ2Ug
aXMgZG9uZSBiZWZvcmUgeW91IGNhbGwgdGhpcy4KK0Jhc2ljQmxvY2sqIGNyZWF0ZVByZUhlYWRl
cihHcmFwaCYsIEJsb2NrSW5zZXJ0aW9uU2V0JiwgQmFzaWNCbG9jayopOworCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDkgKzUyNywy
MCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
bG9jYWwoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNVbmxpbmtlZExvY2FsKCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6
CisgICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5rZWRMb2NhbCgpCiAg
ICAgewotICAgICAgICBBU1NFUlQob3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKTsKKyAgICAgICAg
QVNTRVJUKGhhc1VubGlua2VkTG9jYWwoKSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYg
KzY5LDIxIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhGbHVz
aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50
b21Mb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIFwKKyAg
ICAvKiBIaW50IHRoYXQgdGhpcyBpcyB3aGVyZSBieXRlY29kZSB0aGlua3MgaXMgYSBnb29kIHBs
YWNlIHRvIE9TUi4gTm90ZSB0aGF0IHRoaXMgKi9cCisgICAgLyogd2lsbCBleGlzdCBldmVuIGlu
IGlubGluZWQgbG9vcHMuIFRoaXMgaGFzIG5vIGV4ZWN1dGlvbiBzZW1hbnRpY3MgYnV0IGl0IG11
c3QgKi9cCisgICAgLyogc3Vydml2ZSBhbGwgRENFLiBXZSB0cmVhdCB0aGlzIGFzIGJlaW5nIGEg
Y2FuLWV4aXQgYmVjYXVzZSB0aWVyLXVwIHRvIEZUTCBtYXkgKi9cCisgICAgLyogd2FudCBhbGwg
c3RhdGUuICovXAorICAgIG1hY3JvKExvb3BIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
XAorICAgIC8qIFNwZWNpYWwgbm9kZSBmb3IgT1NSIGVudHJ5IGludG8gdGhlIEZUTC4gSW5kaWNh
dGVzIHRoYXQgd2UncmUgbG9hZGluZyBhIGxvY2FsICovXAorICAgIC8qIHZhcmlhYmxlIGZyb20g
dGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1wKKyAgICBtYWNybyhFeHRyYWN0T1NSRW50cnlMb2NhbCwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgXAorICAgIC8qIFRpZXItdXAgY2hlY2tzIGZyb20gdGhlIERG
RyB0byB0aGUgRlRMLiAqL1wKKyAgICBtYWNybyhDaGVja1RpZXJVcEluTG9vcCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrVGllclVwQW5kT1NSRW50ZXIsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1RpZXJVcEF0UmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgXAogICAgIC8qIEdldCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0
aG91dCBsaW5raW5nIGludG8gdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3
b3JrLiBUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRp
Y3Rpb25zIG9yaWdpbmF0ZWQgKi9cCiAgICAgLyogYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBs
b2NhbCBhY2Nlc3MsIGFuZCB0aHVzIGhhZCB0aGVpciBvd24gcHJvZmlsaW5nLiAqL1wKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxNTQ5
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsMTggKzQwLDQzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogI2lmIERGR19FTkFCTEUoT1NSX0VO
VFJZKQotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
OworICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOwogICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOwogCiAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIk9T
UiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIC0+ICIsICpjb2RlQmxvY2ssCisg
ICAgICAgICAgICAiREZHIE9TUiBpbiAiLCAqY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCAiIC0+
ICIsICpjb2RlQmxvY2ssCiAgICAgICAgICAgICAiIGZyb20gYmMjIiwgYnl0ZWNvZGVJbmRleCwg
IlxuIik7CiAgICAgfQogICAgIAogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIGlmIChj
b2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFdoZW4gd2lsbCB0aGlzIGhhcHBlbj8gV2UgY291bGQgaGF2ZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gLSBBbiBleGl0IGZyb20gdGhlIEZUTCBKSVQgaW50byB0aGUg
YmFzZWxpbmUgSklUIGZvbGxvd2VkIGJ5IGFuIGF0dGVtcHQKKyAgICAgICAgLy8gICB0byByZWVu
dGVyLiBXZSdyZSBmaW5lIHdpdGggYWxsb3dpbmcgdGhpcyB0byBmYWlsLiBJZiBpdCBoYXBwZW5z
CisgICAgICAgIC8vICAgZW5vdWdoIHdlJ2xsIGp1c3QgcmVvcHRpbWl6ZS4gSXQgYmFzaWNhbGx5
IG1lYW5zIHRoYXQgdGhlIE9TUiBleGl0IGNvc3QKKyAgICAgICAgLy8gICB1cyBkZWFybHkgYW5k
IHNvIHJlb3B0aW1pemluZyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisgICAgICAgIC8vCisg
ICAgICAgIC8vIC0gV2UgaGF2ZSByZWN1cnNpdmUgY29kZSB3aXRoIGhvdCBsb29wcy4gQ29uc2lk
ZXIgdGhhdCBmb28gaGFzIGEgaG90IGxvb3AKKyAgICAgICAgLy8gICB0aGF0IGNhbGxzIGl0c2Vs
Zi4gV2UgaGF2ZSB0d28gZm9vJ3Mgb24gdGhlIHN0YWNrLCBsZXRzIGNhbGwgdGhlbSBmb28xCisg
ICAgICAgIC8vICAgYW5kIGZvbzIsIHdpdGggZm9vMSBoYXZpbmcgY2FsbGVkIGZvbzIgZnJvbSBm
b28ncyBob3QgbG9vcC4gZm9vMiBnZXRzCisgICAgICAgIC8vICAgb3B0aW1pemVkIGFsbCB0aGUg
d2F5IGludG8gdGhlIEZUTC4gVGhlbiBpdCByZXR1cm5zIGludG8gZm9vMSwgYW5kIHRoZW4KKyAg
ICAgICAgLy8gICBmb28xIHdhbnRzIHRvIGdldCBvcHRpbWl6ZWQuIEl0IG1pZ2h0IHJlYWNoIHRo
aXMgY29uY2x1c2lvbiBmcm9tIGl0cworICAgICAgICAvLyAgIGhvdCBsb29wIGFuZCBhdHRlbXB0
IHRvIE9TUiBlbnRlci4gQW5kIHdlJ2xsIHRlbGwgaXQgdGhhdCBpdCBjYW4ndC4gSXQKKyAgICAg
ICAgLy8gICBtaWdodCBiZSB3b3J0aCBhZGRyZXNzaW5nIHRoaXMgY2FzZSwgYnV0IEkganVzdCB0
aGluayB0aGlzIGNhc2Ugd2lsbAorICAgICAgICAvLyAgIGJlIHN1cGVyIHJhcmUuIEZvciBub3cs
IGlmIGl0IGRvZXMgaGFwcGVuLCBpdCdsbCBjYXVzZSBzb21lIGNvbXBpbGF0aW9uCisgICAgICAg
IC8vICAgdGhyYXNoaW5nLgorICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdGhlIHRh
cmdldCBjb2RlIGJsb2NrIGlzIG5vdCBERkcuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIAogICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnKCktPm9zckVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAg
CiAgICAgaWYgKCFlbnRyeSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJE
RkdCbG9ja0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7Citw
dWJsaWM6CisgICAgT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAiT1NSIGVudHJ5cG9pbnQgY3JlYXRpb24iKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRl
Y29kZUluZGV4OworICAgICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGVJbmRleCAhPSBVSU5UX01BWCk7CisgICAgICAgIAor
ICAgICAgICAvLyBOZWVkZWQgYnkgY3JlYXRlUHJlSGVhZGVyKCkuCisgICAgICAgIG1fZ3JhcGgu
bV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCisgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmUgPSBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsKKyAgICAg
ICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IDA7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBOb2RlKiBmaXJzdE5vZGUgPSBibG9jay0+YXQoMCk7CisgICAgICAgICAgICBpZiAo
Zmlyc3ROb2RlLT5vcCgpID09IExvb3BIaW50CisgICAgICAgICAgICAgICAgJiYgZmlyc3ROb2Rl
LT5jb2RlT3JpZ2luID09IENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAg
ICAgICB0YXJnZXQgPSBibG9jazsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgdGVycmlibGUgb3V0Y29tZS4gSXQgc2hvdWxkbid0IG9mdGVuIGhhcHBlbiBidXQg
aXQgbWlnaHQKKyAgICAgICAgICAgIC8vIGhhcHBlbiBhbmQgc28gd2Ugc2hvdWxkIGRlZmVuZCBh
Z2FpbnN0IGl0LiBJZiBpdCBoYXBwZW5zLCB0aGVuIHRoaXMKKyAgICAgICAgICAgIC8vIGNvbXBp
bGF0aW9uIGlzIGEgZmFpbHVyZS4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3Jh
cGgpOworICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNl
dC5pbnNlcnQoMCk7CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHRhcmdldC0+YXQo
MCktPmNvZGVPcmlnaW47CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgYmFzZWxpbmUtPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgeworICAg
ICAgICAgICAgTm9kZSogb2xkTm9kZSA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50
KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGlmICghb2xkTm9kZSkgeworICAgICAgICAgICAgICAg
IC8vIEp1c3QgZm9yIHNhbml0eSwgYWx3YXlzIGhhdmUgYSBTZXRBcmd1bWVudCBldmVuIGlmIGl0
J3Mgbm90IG5lZWRlZC4KKyAgICAgICAgICAgICAgICBvbGROb2RlID0gbV9ncmFwaC5tX2FyZ3Vt
ZW50c1thcmd1bWVudF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bmV3Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwg
U2V0QXJndW1lbnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRz
W2FyZ3VtZW50XSA9IG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAw
OyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgeworICAg
ICAgICAgICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9j
YWwobG9jYWwpOworICAgICAgICAgICAgaWYgKCFwcmV2aW91c0hlYWQpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
cHJldmlvdXNIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHZhcmlh
YmxlLT5wcmVkaWN0aW9uKCksIEV4dHJhY3RPU1JFbnRyeUxvY2FsLCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbmV3
Um9vdC0+YXBwZW5kTm9kZSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgU2V0
TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBuZXdSb290LT5hcHBlbmROb2RlKAorICAgICAgICAgICAg
bV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8o
Y3JlYXRlUHJlSGVhZGVyKG1fZ3JhcGgsIGluc2VydGlvblNldCwgdGFyZ2V0KSkpOworICAgICAg
ICAKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgbV9ncmFwaC5yZXNl
dFJlYWNoYWJpbGl0eSgpOworICAgICAgICBtX2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2Nrcygp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1PU1JFbnRy
eXBvaW50Q3JlYXRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgT1NSIEVudHJ5cG9pbnQgQ3JlYXRpb24iKTsKKyAgICByZXR1cm4gcnVu
UGhhc2U8T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2VfaAorI2RlZmluZSBERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCisvLyBUaGlzIHBoYXNlIGlzIG9ubHkgZm9yIGNvbXBpbGF0aW9uIHBp
cGVsaW5lcyB0aGF0IGdvIHRocm91Z2ggU1NBLCBhbmQgdGhhdAorLy8gZG8gYSBzcGVjaWFsaXpl
ZCBPU1IgZW50cnkgY29tcGlsZS4gQ3VycmVudGx5IHRoYXQgbWVhbnMgRlRMLgorLy8KKy8vIENy
ZWF0ZXMgYW4gT1NSIGVudHJ5cG9pbnQgdGhhdCBlc3RhYmxpc2hlcyBhbGwgYXJndW1lbnQgYW5k
IGxvY2FsIHZhcmlhYmxlCisvLyB2YWx1ZXMuIFRoaXMgZW50cnlwb2ludCBvbmx5IHdvcmtzIGZv
ciB0aGUgUGxhbjo6b3NyRW50cnlCeXRlY29kZUluZGV4LgorLy8gVW5saWtlIG9yZGluYXJ5IE9T
UiBlbnRyeSBpbnRvIHRoZSBERkcsIHRoaXMgZm9yY2VzIGFsbCB2YXJpYWJsZXMgc2x1cnBlZAor
Ly8gaW4gdGhyb3VnaCBPU1IgZW50cnkgdG8gYXBwZWFyIFRPUCB0byB0aGUgQ0ZBLiBIZW5jZSB0
aGlzIHBoYXNlIG11c3QgYmUgcnVuCisvLyBlYXJseSAtIGJlZm9yZSBkb2luZyBhbnkgQ0ZBLiBC
dXQgdGhpcyBhbHNvIGRvZXMgc29tZSBhZGRpdGlvbmFsIGhhY2tzIHRoYXQKKy8vIHJlcXVpcmUg
dGhpcyB0byBydW4gYmVmb3JlIHVuaWZpY2F0aW9uLgorCitib29sIHBlcmZvcm1PU1JFbnRyeXBv
aW50Q3JlYXRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFbnRyeXBvaW50Q3JlYXRp
b25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTUgQEAKICNpbmNs
dWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRl
ICJDb3BpZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRl
ICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgogI2luY2x1ZGUgIkRGR1Ro
dW5rcy5oIgorI2luY2x1ZGUgIkRGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgi
CisjaW5jbHVkZSAiREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NSRW50cnkuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJl
dHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKQEAgLTIwMTUsNiArMjAyMSwxODcgQEAgZXh0ZXJuICJDIiB2b2lkIERGR19PUEVS
QVRJT04gdHJpZ2dlclJlbwogICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogfQogCisjaWYg
RU5BQkxFKEZUTF9KSVQpCit2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5o
ZWFwKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAg
IAorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7Cisg
ICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmlnZ2VyVGllclVwTm93IHdpdGgg
ZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29kZS0+dGllclVwQ291bnRlciwg
IlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigp
LT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5nIEZUTC1vcHRpbWl6YXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVjYXVzZSB0aGVyZSB3YXMgYW4gRlRM
IGZhaWx1cmUuXG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9udE9wdGltaXplQW55dGltZVNvb24o
Y29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWppdENv
ZGUtPmNoZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKGNvZGVCbG9jaykpIHsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkNo
b29zaW5nIG5vdCB0byBGVEwtb3B0aW1pemUgIiwgKmNvZGVCbG9jaywgIiB5ZXQuXG4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBXb3JrbGlzdDo6U3RhdGUgd29ya2xpc3RT
dGF0ZTsKKyAgICBpZiAoV29ya2xpc3QqIHdvcmtsaXN0ID0gdm0tPndvcmtsaXN0LmdldCgpKSB7
CisgICAgICAgIHdvcmtsaXN0U3RhdGUgPSB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0oCisgICAgICAgICAgICAqdm0sIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCksIEZUTE1vZGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0
ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsKKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBX
b3JrbGlzdDo6Q29tcGlsaW5nKSB7CisgICAgICAgIGppdENvZGUtPnNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICAgICAgICAgIGNvZGVCbG9jaywg
Q29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworICAgICAgICAvLyBU
aGF0J3MgZ3JlYXQsIHdlJ3ZlIGNvbXBpbGVkIHRoZSBjb2RlIC0gbmV4dCB0aW1lIHdlIGNhbGwg
dGhpcyBmdW5jdGlvbiwKKyAgICAgICAgLy8gd2UnbGwgZW50ZXIgdGhhdCByZXBsYWNlbWVudC4K
KyAgICAgICAgaml0Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBp
bGVkKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBmaW5pc2hlZCBjb21waWxpbmcs
IGJ1dCBmYWlsZWQgc29tZWhvdzsgaW4gdGhhdCBjYXNlIHRoZQorICAgICAgICAvLyB0aHJlc2hv
bGRzIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkuCisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxvY2ss
ICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2Vt
ZW50LlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIHRvIGNv
bXBpbGUgdGhlIGNvZGUuCisgICAgY29tcGlsZSgKKyAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5l
d1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVl
PigpLAorICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNv
ZGVCbG9jayksIHZtLT5lbnN1cmVXb3JrbGlzdCgpKTsKK30KKworY2hhciogREZHX09QRVJBVElP
TiB0cmlnZ2VyT1NSRW50cnlOb3coCisgICAgRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGVj
b2RlSW5kZXgsIGludDMyX3Qgc3RyZWFtSW5kZXgpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOworICAgIAorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGZnKCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewor
ICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgKmNvZGVCbG9jaywgIjogRW50ZXJlZCB0cmln
Z2VyVGllclVwTm93IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAiLAorICAgICAgICAgICAgaml0Q29k
ZS0+dGllclVwQ291bnRlciwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgeworICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyaW5n
IEZUTC1vcHRpbWl6YXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiBpbmRlZmluaXRlbHkgYmVjYXVz
ZSB0aGVyZSB3YXMgYW4gRlRMIGZhaWx1cmUuXG4iKTsKKyAgICAgICAgaml0Q29kZS0+ZG9udE9w
dGltaXplQW55dGltZVNvb24oY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIAorICAgIGlmICghaml0Q29kZS0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNo
ZWQoY29kZUJsb2NrKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAg
ICAgICAgICAgZGF0YUxvZygiQ2hvb3Npbmcgbm90IHRvIEZUTC1vcHRpbWl6ZSAiLCAqY29kZUJs
b2NrLCAiIHlldC5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgV29y
a2xpc3Q6OlN0YXRlIHdvcmtsaXN0U3RhdGU7CisgICAgaWYgKFdvcmtsaXN0KiB3b3JrbGlzdCA9
IHZtLT53b3JrbGlzdC5nZXQoKSkgeworICAgICAgICB3b3JrbGlzdFN0YXRlID0gd29ya2xpc3Qt
PmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKAorICAgICAgICAgICAgKnZtLCBDb21waWxhdGlv
bktleShjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBGVExGb3JPU1JFbnRyeU1vZGUpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgd29ya2xpc3RTdGF0ZSA9IFdvcmtsaXN0OjpOb3RLbm93bjsK
KyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29tcGlsaW5nKSB7Cisg
ICAgICAgIEFTU0VSVCghaml0Q29kZS0+b3NyRW50cnlCbG9jayk7CisgICAgICAgIGppdENvZGUt
PnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCgKKyAgICAg
ICAgICAgIGNvZGVCbG9jaywgQ29tcGlsYXRpb25EZWZlcnJlZCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICBpZiAoQ29kZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0Q29kZS0+
b3NyRW50cnlCbG9jay5nZXQoKSkgeworICAgICAgICB2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVw
YXJlT1NSRW50cnkoCisgICAgICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGVudHJ5QmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAgICAgICAgaWYgKGFkZHJlc3MpIHsKKyAgICAg
ICAgICAgIGppdENvZGUtPm9wdGltaXplU29vbihjb2RlQmxvY2spOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXIqPihhZGRyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgRlRMOjpGb3JPU1JFbnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5QmxvY2stPmpp
dENvZGUoKS0+ZnRsRm9yT1NSRW50cnkoKTsKKyAgICAgICAgZW50cnlDb2RlLT5jb3VudEVudHJ5
RmFpbHVyZSgpOworICAgICAgICBpZiAoZW50cnlDb2RlLT5lbnRyeUZhaWx1cmVDb3VudCgpIDwK
KyAgICAgICAgICAgIE9wdGlvbnM6OmZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9yUmVvcHRpbWl6
YXRpb24oKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBqaXRDb2RlLT5vcHRpbWl6ZVNv
b24oY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBPU1IgZW50cnkgZmFpbGVkLiBPaCBubyEgVGhpcyBpbXBsaWVzIHRoYXQg
d2UgbmVlZCB0byByZXRyeS4gV2UgcmV0cnkKKyAgICAgICAgLy8gd2l0aG91dCBleHBvbmVudGlh
bCBiYWNrb2ZmIGFuZCB3ZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSBlbnRyeSBjb2RlIGJsb2NrLgor
ICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmNsZWFyKCk7CisgICAgICAgIAorICAgICAg
ICBqaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICBpZiAod29ya2xpc3RTdGF0ZSA9PSBXb3JrbGlzdDo6Q29t
cGlsZWQpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGNvbXBpbGF0aW9uIGZhaWxlZCBh
bmQgd2UgYWxyZWFkeSBzZXQgdGhlIHRocmVzaG9sZHMuCisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb2RlIGJsb2NrICIsICpjb2RlQmxv
Y2ssICIgd2FzIGNvbXBpbGVkIGJ1dCBpdCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxh
Y2VtZW50LlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFRoZSBmaXJz
dCBvcmRlciBvZiBidXNpbmVzcyBpcyB0byB0cmlnZ2VyIGEgZm9yLWVudHJ5IGNvbXBpbGUuCisg
ICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKKyAgICBqaXRDb2RlLT5yZWNv
bnN0cnVjdCgKKyAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5k
ZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CisgICAgQ29tcGlsYXRpb25SZXN1
bHQgZm9yRW50cnlSZXN1bHQgPSBERkc6OmNvbXBpbGUoCisgICAgICAgICp2bSwgY29kZUJsb2Nr
LT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5k
ZXgsCisgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spLAorICAgICAgICB2bS0+ZW5zdXJl
V29ya2xpc3QoKSk7CisgICAgCisgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGEg
cmVwbGFjZW1lbnQgY29tcGlsZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8g
dHJpZ2dlciBpdCBpZiB3ZSBkb24ndCBuZWVkIHRvLiBOb3RlIHRoYXQgdGhpcyBpcyBraW5kIG9m
IHdlaXJkIGJlY2F1c2Ugd2UgbWlnaHQKKyAgICAvLyBoYXZlIGp1c3QgZmluaXNoZWQgYW4gRlRM
IGNvbXBpbGUgYW5kIHRoYXQgY29tcGlsZSBmYWlsZWQgb3Igd2FzIGludmFsaWRhdGVkLgorICAg
IC8vIEJ1dCB0aGlzIHNlZW1zIHVuY29tbW9uIGVub3VnaCB0aGF0IHdlIHNvcnQgb2YgZG9uJ3Qg
Y2FyZS4gSXQncyBjZXJ0YWlubHkgc291bmQKKyAgICAvLyB0byBmaXJlIG9mZiBhbm90aGVyIGNv
bXBpbGUgcmlnaHQgbm93IHNvIGxvbmcgYXMgd2UncmUgbm90IGFscmVhZHkgY29tcGlsaW5nIGFu
ZAorICAgIC8vIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQu
IE5vdGUsIHdlIGRvbid0IGRvIHRoaXMgZm9yCisgICAgLy8gb2J2aW91c2x5IGJhZCBjYXNlcyBs
aWtlIGdsb2JhbCBjb2RlLCB3aGVyZSB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgYSBzbGltIGNoYW5j
ZQorICAgIC8vIG9mIHRoaXMgY29kZSBiZWluZyBpbnZva2VkIGV2ZXIgYWdhaW4uCisgICAgQ29t
cGlsYXRpb25LZXkga2V5Rm9yUmVwbGFjZW1lbnQoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24o
KSwgRlRMTW9kZSk7CisgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBHbG9iYWxDb2Rl
CisgICAgICAgICYmICFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKKyAgICAg
ICAgJiYgKCF2bS0+d29ya2xpc3QuZ2V0KCkKKyAgICAgICAgICAgIHx8IHZtLT53b3JrbGlzdC0+
Y29tcGlsYXRpb25TdGF0ZShrZXlGb3JSZXBsYWNlbWVudCkgPT0gV29ya2xpc3Q6Ok5vdEtub3du
KSkgeworICAgICAgICBjb21waWxlKAorICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigp
LAorICAgICAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShj
b2RlQmxvY2spLCB2bS0+ZW5zdXJlV29ya2xpc3QoKSk7CisgICAgfQorICAgIAorICAgIGlmIChm
b3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZm9yLWVudHJ5IGNvbXBpbGUg
YWxyZWFkeSBzdWNjZWVkZWQuIEluIHRoYXQgY2FzZSBPU1IKKyAgICAvLyBlbnRyeSB3aWxsIHN1
Y2NlZWQgdW5sZXNzIHdlIHJhbiBvdXQgb2Ygc3RhY2suIEl0J3Mgbm90IGNsZWFyIHdoYXQgd2Ug
c2hvdWxkIGRvLgorICAgIC8vIFdlIHNpZ25hbCB0byB0cnkgYWdhaW4gYWZ0ZXIgYSB3aGlsZSBp
ZiB0aGF0IGhhcHBlbnMuCisgICAgdm9pZCogYWRkcmVzcyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5
KAorICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0KCks
IGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAgICBpZiAoYWRkcmVzcykKKyAgICAgICAg
aml0Q29kZS0+b3B0aW1pemVTb29uKGNvZGVCbG9jayk7CisgICAgZWxzZQorICAgICAgICBqaXRD
b2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKGNvZGVCbG9jayk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXIqPihhZGRyZXNzKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwogfSAv
LyBleHRlcm4gIkMiCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTksNiArOTksNyBAQCB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVy
CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJT04gKCpT
X0RGR09wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fSiko
RW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgdm9pZCBERkdfT1BFUkFUSU9OICgqVl9ERkdP
cGVyYXRpb25fRU9aRCkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90LCBkb3VibGUpOwog
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FT1pKKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwpA
QCAtMTI2LDYgKzEyNyw3IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFBTKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFNTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09w
ZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KTsKK3R5cGVkZWYg
Y2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VaWikoRXhlY1N0YXRlKiwgaW50
MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIFN0cmluZ0ltcGwqIERGR19PUEVSQVRJT04gKCpJX0RG
R09wZXJhdGlvbl9FSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogdHlwZWRlZiBKU1N0cmlu
ZyogREZHX09QRVJBVElPTiAoKkpzc19ERkdPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMy
X3QpOwogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZShF
eGVjU3RhdGUqLCBpbnQzMl90KSAgV1RGX0lOVEVSTkFMOyAKQEAgLTMwMiw2ICszMDQsMTEgQEAg
dm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogCiB2b2lkIERGR19PUEVS
QVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayopIFdURl9JTlRFUk5BTDsK
IAorI2lmIEVOQUJMRShGVExfSklUKQordm9pZCBERkdfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBO
b3coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiB0cmlnZ2Vy
T1NSRW50cnlOb3coRXhlY1N0YXRlKiwgaW50MzJfdCBieXRlY29kZUluZGV4LCBpbnQzMl90IHN0
cmVhbUluZGV4KSBXVEZfSU5URVJOQUw7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKIH0g
Ly8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRpb25OZXdU
eXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEz
ICs0NiwxNiBAQAogI2luY2x1ZGUgIkRGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdT
U0FDb252ZXJzaW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1
ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJh
bmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIApAQCAtODEsMTMgKzg0LDEyIEBAIHN0YXRpYyB2b2lkIGR1bXBBbmRWZXJp
ZnlHcmFwaChHcmFwaCYgZ3IKIAogUGxhbjo6UGxhbigKICAgICBQYXNzUmVmUHRyPENvZGVCbG9j
az4gcGFzc2VkQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKQorICAgIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11
c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgpKQogICAgICwg
Y29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG1vZGUobW9kZSkKICAgICAsIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgLCBudW1WYXJzV2l0
aFZhbHVlcyhudW1WYXJzV2l0aFZhbHVlcykKLSAgICAsIG11c3RIYW5kbGVWYWx1ZXMoY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKQorICAgICwgbXVzdEhhbmRs
ZVZhbHVlcyhtdXN0SGFuZGxlVmFsdWVzKQogICAgICwgY29tcGlsYXRpb24oY29kZUJsb2NrLT52
bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgPyBhZG9wdFJlZihuZXcgUHJvZmlsZXI6OkNvbXBp
bGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRl
Y29kZXNGb3IoY29kZUJsb2NrLmdldCgpKSwgUHJvZmlsZXI6OkRGRykpIDogMCkKICAgICAsIGlk
ZW50aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKICAgICAsIHdlYWtSZWZlcmVuY2VzKGNvZGVCbG9j
ay5nZXQoKSkKQEAgLTEwOSw3ICsxMTEsNyBAQCB2b2lkIFBsYW46OmNvbXBpbGVJblRocmVhZChM
b25nTGl2ZWRTdGF0CiAgICAgQ29tcGlsYXRpb25TY29wZSBjb21waWxhdGlvblNjb3BlOwogCiAg
ICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQotICAgICAgICBkYXRhTG9nKCJERkcoUGxh
bikgY29tcGlsaW5nICIsICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAi
LCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwgIlxuIik7CisgICAgICAgIGRhdGFMb2co
IkRGRyhQbGFuKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiB3aXRoICIsIG1vZGUsICIsIG51
bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSwg
IlxuIik7CiAKICAgICBDb21waWxhdGlvblBhdGggcGF0aCA9IGNvbXBpbGVJblRocmVhZEltcGwo
bG9uZ0xpdmVkU3RhdGUpOwogCkBAIC0xMzMsNyArMTM1LDcgQEAgdm9pZCBQbGFuOjpjb21waWxl
SW5UaHJlYWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxvZygiT3B0
aW1pemVkICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgd2l0aCAiLCBwYXRoTmFtZSwg
IiBpbiAiLCBub3cgLSBiZWZvcmUsICIgbXMiKTsKKyAgICAgICAgZGF0YUxvZygiT3B0aW1pemVk
ICIsICpjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksICIgdXNpbmcgIiwgbW9kZSwgIiB3aXRoICIs
IHBhdGhOYW1lLCAiIGluICIsIG5vdyAtIGJlZm9yZSwgIiBtcyIpOwogICAgICAgICBpZiAocGF0
aCA9PSBGVExQYXRoKQogICAgICAgICAgICAgZGF0YUxvZygiIChERkc6ICIsIGJlZm9yZUZUTCAt
IGJlZm9yZSwgIiwgTExWTTogIiwgbm93IC0gYmVmb3JlRlRMLCAiKSIpOwogICAgICAgICBkYXRh
TG9nKCIuXG4iKTsKQEAgLTE0Miw2ICsxNDQsMTIgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdAogCiBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyZWFkSW1wbChMb25nTGl2ZWRTdGF0ZSYgbG9uZ0xpdmVkU3RhdGUpCiB7CisgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSAmJiBvc3JFbnRyeUJ5dGVjb2RlSW5kZXggIT0gVUlO
VF9NQVgpIHsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29tcGls
ZXIgbXVzdCBoYW5kbGUgT1NSIGVudHJ5IGZyb20gYmMjIiwgb3NyRW50cnlCeXRlY29kZUluZGV4
LCAiIHdpdGggdmFsdWVzOiAiLCBtdXN0SGFuZGxlVmFsdWVzLCAiXG4iKTsKKyAgICAgICAgZGF0
YUxvZygiXG4iKTsKKyAgICB9CisgICAgCiAgICAgR3JhcGggZGZnKHZtLCAqdGhpcywgbG9uZ0xp
dmVkU3RhdGUpOwogICAgIAogICAgIGlmICghcGFyc2UoZGZnKSkgewpAQCAtMTYyLDYgKzE3MCwx
NSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgcGVyZm9y
bVVuaWZpY2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25JbmplY3Rpb24oZGZnKTsK
ICAgICAKKyAgICBpZiAobW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpIHsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSBwZXJmb3JtT1NSRW50cnlwb2ludENyZWF0aW9uKGRmZyk7CisgICAgICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgICAgICBmaW5hbGl6ZXIgPSBhZG9wdFB0cihuZXcgRmFpbGVk
RmluYWxpemVyKCp0aGlzKSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbFBhdGg7CisgICAgICAg
IH0KKyAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CisgICAgfQorICAgIAogICAg
IGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQogICAgICAgICB2YWxpZGF0ZShkZmcpOwogICAgIApA
QCAtMjA2LDEwICsyMjMsMTkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJ
blRocgogICAgICAgICBkZmcubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KGRmZyk7
CiAgICAgfQogCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBERkdNb2RlOiB7CisgICAg
ICAgIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihkZmcpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgY2FzZSBGVExNb2RlOgorICAgIGNhc2UgRlRMRm9yT1NSRW50cnlNb2Rl
OiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRh
bEZUTCgpCi0gICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUK
LSAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKKyAgICAgICAgaWYgKEZUTDo6Y2Fu
Q29tcGlsZShkZmcpID09IEZUTDo6Q2Fubm90Q29tcGlsZSkgeworICAgICAgICAgICAgZmluYWxp
emVyID0gYWRvcHRQdHIobmV3IEZhaWxlZEZpbmFsaXplcigqdGhpcykpOworICAgICAgICAgICAg
cmV0dXJuIEZhaWxQYXRoOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBwZXJmb3JtQ3Jp
dGljYWxFZGdlQnJlYWtpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybUxvb3BQcmVIZWFkZXJDcmVh
dGlvbihkZmcpOwpAQCAtMjQ0LDEwICsyNzAsMTYgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBs
YW46OmNvbXBpbGVJblRocgogICAgICAgICBGVEw6OmNvbXBpbGUoc3RhdGUpOwogICAgICAgICBG
VEw6Omxpbmsoc3RhdGUpOwogICAgICAgICByZXR1cm4gRlRMUGF0aDsKLSAgICB9CiAjZWxzZQot
ICAgIFJFTEVBU0VfQVNTRVJUKCFPcHRpb25zOjp1c2VFeHBlcmltZW50YWxGVEwoKSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgIAogICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIHBlcmZvcm1EQ0UoZGZn
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxNTQ5ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKIHN0cnVjdCBQbGFuIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBQbGFuKAogICAgICAgICBQYXNz
UmVmUHRyPENvZGVCbG9jaz4sIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LAotICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyk7CisgICAgICAg
IGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+UGxhbigp
OwogICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXRlJik7CkBAIC03
Miw3ICs3Miw2IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAg
ICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGU7
CiAgICAgY29uc3QgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4OwotICAgIGNvbnN0IHVu
c2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzOwogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5k
bGVWYWx1ZXM7CiAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlv
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoYmxvY2st
PmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCgK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbV9ncmFwaC5t
X3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5oYXNMb2NhbChtX2dyYXBoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4NCw3ICs0ODQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGlu
dEFuZENoZWNrOgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgY2FzZSBab21i
aWVIaW50OgorICAgICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgorICAgICAgICBjYXNlIENo
ZWNrVGllclVwQXRSZXR1cm46CisgICAgICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjog
ewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBi
eSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNTQ5LDYgKzU1MiwxMSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6
CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CisgICAgICAgIGNhc2UgTG9vcEhpbnQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdldHMgaWdub3Jl
ZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KKyAgICAgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
ICAgIC8vIFRoZXNlIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsMTEgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2Rl
OgogICAgIGNhc2UgTmV3VHlwZWRBcnJheToKICAgICBjYXNlIFVucmVhY2hhYmxlOgorICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAg
ICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyOgorICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAK
ICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODIzLDYgKzQ4MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC00ODM1LDYgKzQ4MzYsMTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgUGhpOgog
ICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgIGNhc2UgRXh0cmFj
dE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKKyAgICBjYXNlIENo
ZWNrVGllclVwQXRSZXR1cm46CisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NzMsNiArNDY3Myw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgTG9vcEhpbnQ6
CiAgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcC4KICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDY4MCwxMSArNDY4MSw3NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkgICAgICAgIAorICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZCwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihPcHRp
b25zOjpmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291
bnRlci5tX2NvdW50ZXIpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0
ZSgpOworICAgICAgICBhcHBlbmRDYWxsKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBDaGVja1RpZXJVcEF0UmV0dXJuOiB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpTaWdu
ZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZnRsVGllclVwQ291bnRlcklu
Y3JlbWVudEZvclJldHVybigpKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0
ZUFkZHJlc3MoJm1faml0LmppdENvZGUoKS0+dGllclVwQ291bnRlci5tX2NvdW50ZXIpKTsKKyAg
ICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICBhcHBlbmRD
YWxsKHRyaWdnZXJUaWVyVXBOb3cpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVu
dGVyOiB7CisgICAgICAgIEFTU0VSVCghbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpTaWduZWQsCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZnRsVGll
clVwQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKCZtX2ppdC5qaXRDb2RlKCktPnRpZXJVcENvdW50ZXIubV9jb3Vu
dGVyKSk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BS
KTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAorICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCksCisgICAgICAg
ICAgICBUcnVzdGVkSW1tMzIobV9zdHJlYW0tPnNpemUoKSkpOworICAgICAgICBhcHBlbmRDYWxs
U2V0UmVzdWx0KHRyaWdnZXJPU1JFbnRyeU5vdywgdGVtcEdQUik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbnRFbnRlciA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5qdW1wKHRlbXBHUFIpOworICAgICAg
ICBkb250RW50ZXIubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHRlbXBHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyNlbHNlIC8vIEVOQUJMRShGVExfSklUKQorICAgIGNhc2UgQ2hlY2tU
aWVyVXBJbkxvb3A6CisgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgorICAgIGNhc2UgQ2hl
Y2tUaWVyVXBBbmRPU1JFbnRlcjoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgICAgIAog
ICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoK
ICAgICBjYXNlIEdldEFyZ3VtZW50OgorICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
aWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQ
aGFzZS5oIgorI2luY2x1ZGUgIkZUTENhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
InRpZXItdXAgY2hlY2sgaW5qZWN0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9wbGFuLm1vZGUg
PT0gREZHTW9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUV4cGVyaW1l
bnRhbEZUTCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisgICAgICAgIEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpjYW5Db21waWxl
KG1fZ3JhcGgpOworICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChtX2dyYXBoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoYmxvY2stPmF0KDApLT5vcCgpID09IExvb3BIaW50KSB7CisgICAgICAgICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luOwor
ICAgICAgICAgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlOworICAgICAgICAgICAgICAgIGlmIChs
ZXZlbCA9PSBGVEw6OkNhbkNvbXBpbGVBbmRPU1JFbnRlciAmJiAhY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBDaGVja1RpZXJVcEFu
ZE9TUkVudGVyOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+Ynl0
ZWNvZGVCZWdpbiA9PSBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlVHlwZSA9IENoZWNrVGllclVwSW5Mb29w
OworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKDEsIFNwZWNOb25lLCBu
b2RlVHlwZSwgY29kZU9yaWdpbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5vcCgpID09IFJldHVybikgeworICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBibG9jay0+
c2l6ZSgpIC0gMSwgU3BlY05vbmUsIENoZWNrVGllclVwQXRSZXR1cm4sIGJsb2NrLT5sYXN0KCkt
PmNvZGVPcmlnaW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworI2Vsc2UgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVj
dGlvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBUaWVyLXVwIENoZWNrIEluamVjdGlvbiIpOworICAgIHJldHVybiBydW5QaGFzZTxUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2VfaAorI2RlZmluZSBERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIFRoaXMgcGhhc2UgY2hlY2tzIGlmIHRoZSB0aGlzIGNvZGUgYmxvY2sgY291bGQgYmUgcmVj
b21waWxlZCB3aXRoIHRoZSBGVEwsCisvLyBhbmQgaWYgc28sIGl0IGluamVjdHMgdGllci11cCBj
aGVja3MuCisKK2Jvb2wgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKEdyYXBoJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUg
IkV4ZWN1dGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKKyAgICA6IG1f
ZGZnQ29kZUJsb2NrKGRmZ0NvZGVCbG9jaykKK3sKK30KKworVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6On5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQorCitQ
YXNzUmVmUHRyPFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBk
ZmdDb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjayhkZmdDb2RlQmxvY2spKTsKK30KKwordm9pZCBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91
c2x5KAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNv
bXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisg
ICAgICAgICAgICAiKSBkaWQgYmVjb21lIHJlYWR5LlxuIik7CisgICAgfQorICAgIAorICAgIG1f
ZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRo
Q29uY3VycmVudGx5KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7Cit9CisKK3ZvaWQg
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUo
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3sK
KyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3Ig
IiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQsICJc
biIpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bCkKKyAgICAgICAgY29kZUJsb2NrLT5pbnN0YWxsKCk7CisgICAgCisgICAgbV9kZmdDb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnKCktPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21w
aWxhdGlvblJlc3VsdCgKKyAgICAgICAgbV9kZmdDb2RlQmxvY2suZ2V0KCksIHJlc3VsdCk7Cit9
CisKK30gfSAvLyBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFja19oCisjZGVmaW5lIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGFibGU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2sgeworcHJvdGVjdGVkOgorICAgIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworCitwdWJsaWM6CisgICAgdmly
dHVhbCB+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoCisgICAg
ICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2Nr
Kik7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwg
Q29tcGlsYXRpb25SZXN1bHQpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1f
ZGZnQ29kZUJsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRD
b2RlLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6
OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soCisgICAgUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKKyAgICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0Nv
ZGVCbG9jaykKK3sKK30KKworVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjazo6flRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKQorewor
fQorCitQYXNzUmVmUHRyPFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+CitUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUo
CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2so
ZGZnQ29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KAor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0
aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAg
ICAgICAiKSBkaWQgYmVjb21lIHJlYWR5LlxuIik7CisgICAgfQorICAgIAorICAgIG1fZGZnQ29k
ZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3Vy
cmVudGx5KAorICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7Cit9CisKK3ZvaWQgVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21w
bGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQoreworICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIg
KGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAiKSByZXN1bHQ6ICIsIHJlc3Vs
dCwgIlxuIik7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNj
ZXNzZnVsKQorICAgICAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+b3NyRW50
cnlCbG9jayA9IGNvZGVCbG9jazsKKyAgICAKKyAgICAvLyBGSVhNRTogaWYgd2UgZmFpbGVkLCB3
ZSBtaWdodCB3YW50IHRvIGp1c3QgdHVybiBvZmYgT1NSIGVudHJ5IHJhdGhlciB0aGFuCisgICAg
Ly8gdG90YWxseSB0dXJuaW5nIG9mZiB0aWVyLXVwLgorICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQoCisgICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpLCByZXN1bHQpOworfQorCit9IH0g
Ly8gSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisjZGVmaW5lIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU2NyaXB0
RXhlY3V0YWJsZTsKKworbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFRvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrIHsKK3Byb3RlY3RlZDoKKyAgICBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworCitwdWJs
aWM6CisgICAgdmlydHVhbCB+VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaygpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9j
az4gZGZnQ29kZUJsb2NrKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRC
ZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayopOworICAgIHZpcnR1YWwgdm9pZCBj
b21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisj
ZW5kaWYgLy8gREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZp
c2lvbiAxNTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDggKzI3Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVHbG9iYWxXb3JrbGlzdE9uY2UKIAogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCkKIHsKLSAg
ICBpZiAoIWVuYWJsZUNvbmN1cnJlbnRKSVQoKSkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgcHRo
cmVhZF9vbmNlKCZpbml0aWFsaXplR2xvYmFsV29ya2xpc3RLZXlPbmNlLCBpbml0aWFsaXplR2xv
YmFsV29ya2xpc3RPbmNlKTsKICAgICByZXR1cm4gdGhlR2xvYmFsV29ya2xpc3Q7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAxNTQ5ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDkgKzk4LDYgQEAgcHJpdmF0ZToKIC8vIEZvciBub3cgd2UgdXNlIGEgc2luZ2xl
IGdsb2JhbCB3b3JrbGlzdC4gSXQncyBub3QgY2xlYXIgdGhhdCB0aGlzCiAvLyBpcyB0aGUgcmln
aHQgdGhpbmcgdG8gZG8sIGJ1dCBpdCBpcyB3aGF0IHdlIGRvLCBmb3Igbm93LiBUaGlzIGZ1bmN0
aW9uCiAvLyB3aWxsIGxhemlseSBjcmVhdGUgb25lIHdoZW4gaXQncyBuZWVkZWQuCi0vLwotLy8g
VGhpcyByZXR1cm5zIG51bGwgaWYgZm9yIGFueSByZWFzb24gd2Ugc2hvdWxkbid0IGJlIGRvaW5n
IGNvbmN1cnJlbnQKLS8vIGNvbXBpbGF0aW9uLgogV29ya2xpc3QqIGdsb2JhbFdvcmtsaXN0KCk7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsOCArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2lu
ZyBuYW1lc3BhY2UgREZHOwogCi1pbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCitp
bmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKIHsKKyAgICAvLyBO
T1RFOiBJZiB3ZSBldmVyIGhhdmUgcGhhbnRvbSBhcmd1bWVudHMsIHdlIGNhbiBjb21waWxlIHRo
ZW0gYnV0IHdlIGNhbm5vdAorICAgIC8vIE9TUiBlbnRlci4KKyAgICAKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFu
dDoKQEAgLTgxLDYgKzg0LDggQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQog
ICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoK
KyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAg
ICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRBcnJheUxl
bmd0aDoKQEAgLTkwLDM5ICs5NSwzOSBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBDYW5ub3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRPU1JFbnRlcjsKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIENhbm5vdENv
bXBpbGU7CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5zcGVj
dWxhdGlvbigpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlNhbmVDaGFpbjoKICAgICAgICAgY2Fz
ZSBBcnJheTo6SW5Cb3VuZHM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21w
aWxlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5
cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kT1NSRW50ZXI7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGFy
ZUVxOgpAQCAtMTMzLDcgKzEzOCw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5k
KE9iamVjdFVzZSkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAg
IGNhc2UgQ29tcGFyZUxlc3NFcToKICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgpAQCAtMTQyLDcg
KzE0Nyw3IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
Q2Fubm90Q29tcGlsZTsKICAgICBjYXNlIEJyYW5jaDoKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CkBAIC0xNTIsNyArMTU3
LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIE9i
amVjdE9yT3RoZXJVc2U6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3dpdGNoOgpAQCAtMTYxLDE4
ICsxNjYsMjYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBj
YXNlIFN3aXRjaENoYXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIERv
bid0IGtub3cgaG93IHRvIGhhbmRsZSBhbnl0aGluZyBlbHNlLgotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZE9TUkVudGVyOwogfQogCi1ib29sIGNhbkNvbXBp
bGUoR3JhcGgmIGdyYXBoKQorQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBo
KQogeworICAgIGlmIChncmFwaC5tX2NvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNv
ZGUpIHsKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkZUTCByZWplY3RpbmcgY29kZSBibG9jayB0aGF0IGRvZXNuJ3QgYmVsb25n
IHRvIGEgZnVuY3Rpb24uXG4iKTsKKyAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7CisgICAg
fQorICAgIAorICAgIENhcGFiaWxpdHlMZXZlbCByZXN1bHQgPSBDYW5Db21waWxlQW5kT1NSRW50
ZXI7CisgICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtMjEwLDI1ICsyMjMs
MzYgQEAgYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkZUTCByZWplY3Rpbmcgbm9kZSBiZWNhdXNlIG9mIGJhZCB1c2Uga2luZDog
IiwgZWRnZS51c2VLaW5kKCksICIgaW4gbm9kZTpcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghY2FuQ29tcGlsZShub2Rl
KSkgeworICAgICAgICAgICAgc3dpdGNoIChjYW5Db21waWxlKG5vZGUpKSB7CisgICAgICAgICAg
ICBjYXNlIENhbm5vdENvbXBpbGU6IAogICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRlRMIHJlamVj
dGluZyBub2RlOlxuIik7CiAgICAgICAgICAgICAgICAgICAgIGdyYXBoLmR1bXAoV1RGOjpkYXRh
RmlsZSgpLCAiICAgICIsIG5vZGUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIENhbm5vdENvbXBpbGU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIENhbkNvbXBpbGU6CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBDYW5Db21waWxlQW5kT1NSRW50ZXIgJiYgdmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZUTCBkaXNh
YmxpbmcgT1NSIGVudHJ5IGJlY2F1c2Ugb2Ygbm9kZTpcbiIpOworICAgICAgICAgICAgICAgICAg
ICBncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gQ2FuQ29tcGlsZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQ2FuQ29tcGls
ZUFuZE9TUkVudGVyOgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHdlIGNhbiBjb21waWxl
IGFueXRoaW5nIGFmdGVyIGEgZm9yY2UtZXhpdC4KICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEZvcmNlT1NSRXhpdCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDEz
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotYm9vbCBjYW5Db21waWxl
KERGRzo6R3JhcGgmKTsKK2VudW0gQ2FwYWJpbGl0eUxldmVsIHsKKyAgICBDYW5ub3RDb21waWxl
LAorICAgIENhbkNvbXBpbGUsCisgICAgQ2FuQ29tcGlsZUFuZE9TUkVudGVyCit9OworCitDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShERkc6OkdyYXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRy
eUpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK0Zvck9TUkVudHJ5SklUQ29kZTo6Rm9yT1NSRW50cnlKSVRDb2RlKCkKK3sKK30KKworRm9y
T1NSRW50cnlKSVRDb2RlOjp+Rm9yT1NSRW50cnlKSVRDb2RlKCkKK3sKK30KKworRm9yT1NSRW50
cnlKSVRDb2RlKiBGb3JPU1JFbnRyeUpJVENvZGU6OmZ0bEZvck9TUkVudHJ5KCkKK3sKKyAgICBy
ZXR1cm4gdGhpczsKK30KKwordm9pZCBGb3JPU1JFbnRyeUpJVENvZGU6OmluaXRpYWxpemVFbnRy
eUJ1ZmZlcihWTSYgdm0sIHVuc2lnbmVkIG51bUNhbGxlZVJlZ2lzdGVycykKK3sKKyAgICBtX2Vu
dHJ5QnVmZmVyID0gdm0uc2NyYXRjaEJ1ZmZlckZvclNpemUobnVtQ2FsbGVlUmVnaXN0ZXJzICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9TUkVudHJ5SklUQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExGb3JPU1JFbnRyeUpJVENvZGVfaAorI2RlZmluZSBG
VExGb3JPU1JFbnRyeUpJVENvZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBPU1IgZW50cnkgaW50byB0aGUgRlRMIGhhcyBh
IG51bWJlciBvZiBxdWlya3M6CisvLworLy8gLSBPU1IgZW50cnkgb25seSBoYXBwZW5zIHRocm91
Z2ggc3BlY2lhbCBPU1IgZW50cnkgY29tcGlsYXRpb25zLiBUaGV5IGhhdmUgdGhlaXIKKy8vICAg
b3duIENvZGVCbG9jayBhbmQgdGhlaXIgb3duIEpJVENvZGUuCisvLworLy8gLSBXZSBvbmx5IE9T
UiBlbnRlciBpbiBsb29wIGhlYWRlcnMgdGhhdCBoYXZlIGEgbnVsbCBpbmxpbmUgY2FsbCBmcmFt
ZS4KKy8vCisvLyAtIEVhY2ggT1NSIGVudHJ5IGNvbXBpbGF0aW9uIGFsbG93cyBlbnRyeSB0aHJv
dWdoIG9ubHkgb25lIGJ5dGVjb2RlIGluZGV4LgorCitjbGFzcyBGb3JPU1JFbnRyeUpJVENvZGUg
OiBwdWJsaWMgRlRMOjpKSVRDb2RlIHsKK3B1YmxpYzoKKyAgICBGb3JPU1JFbnRyeUpJVENvZGUo
KTsKKyAgICB+Rm9yT1NSRW50cnlKSVRDb2RlKCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
RW50cnlCdWZmZXIoVk0mLCB1bnNpZ25lZCBudW1DYWxsZWVSZWdpc3RlcnMpOworICAgIFNjcmF0
Y2hCdWZmZXIqIGVudHJ5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeUJ1ZmZlcjsgfQor
ICAgIAorICAgIHZvaWQgc2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCB2YWx1ZSkgeyBtX2J5dGVj
b2RlSW5kZXggPSB2YWx1ZTsgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlSW5kZXg7IH0KKyAgICAKKyAgICB2b2lkIGNvdW50RW50cnlGYWls
dXJlKCkgeyBtX2VudHJ5RmFpbHVyZUNvdW50Kys7IH0KKyAgICB1bnNpZ25lZCBlbnRyeUZhaWx1
cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlGYWlsdXJlQ291bnQ7IH0KKyAgICAKKyAg
ICBGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CisgICAgCitwcml2YXRlOgor
ICAgIFNjcmF0Y2hCdWZmZXIqIG1fZW50cnlCdWZmZXI7IC8vIE9ubHkgZm9yIE9TUiBlbnRyeSBj
b2RlIGJsb2Nrcy4KKyAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQg
bV9lbnRyeUZhaWx1cmVDb3VudDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGTFRfSklUKQorCisjZW5kaWYgLy8gRlRMRm9yT1NSRW50cnlKSVRD
b2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxp
emVyLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw5IEBAIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICAoIkZUTCBl
eGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOwogICAgIH0gLy8g
ZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhpdHMsIHNvIG5vIGV4aXQgdGh1bmtzLgog
ICAgIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IG1fZW50cnlw
b2ludExpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CisgICAgaWYgKG1fYXJpdHlDaGVjay5pc1NldCgp
KQorICAgICAgICB3aXRoQXJpdHlDaGVjayA9IG1fZW50cnlwb2ludExpbmtCdWZmZXItPmxvY2F0
aW9uT2YobV9hcml0eUNoZWNrKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlKAogICAg
ICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAgICAgICAgICAgICptX2VudHJ5cG9pbnRMaW5rQnVm
ZmVyLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAx
NTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3OSArNTUsMTE0IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAg
Ly8gTExWTSB3aWxsIGNyZWF0ZSBpdHMgb3duIGp1bXAgdGFibGVzIGFzIG5lZWRlZC4KICAgICBj
b2RlQmxvY2stPmNsZWFyU3dpdGNoSnVtcFRhYmxlcygpOwogICAgIAotICAgIC8vIENyZWF0ZSB0
aGUgZW50cnlwb2ludC4KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRvdGFsIGtsdWRnZSAtIExM
Vk0gc2hvdWxkIGp1c3QgdXNlIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uCisgICAgLy8gQ3JlYXRl
IHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5
IGRpZmZlcmVudGx5CisgICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NS
IGVudHJ5IG9yIG5vdC4KKyAgICAvLyBGSVhNRTogRXhjZXB0IGZvciBPU1IgZW50cnksIHRoaXMg
aXMgYSB0b3RhbCBrbHVkZ2UgLSBMTFZNIHNob3VsZCBqdXN0IHVzZSBvdXIKKyAgICAvLyBjYWxs
aW5nIGNvbnZlbnRpb24uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzYyMQogICAgIENDYWxsSGVscGVycyBqaXQoJnN0YXRlLmdyYXBoLm1fdm0sIGNv
ZGVCbG9jayk7CiAgICAgCi0gICAgY29tcGlsZUVudHJ5KGppdCk7CisgICAgT3duUHRyPExpbmtC
dWZmZXI+IGxpbmtCdWZmZXI7CisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBhcml0eUNoZWNrOwor
ICAgIHN3aXRjaCAoc3RhdGUuZ3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6
IHsKKyAgICAgICAgY29tcGlsZUVudHJ5KGppdCk7CiAgICAgCi0gICAgLy8gVGhpcyBwYXJ0IGlz
IG9ubHkgbmVjZXNzYXJ5IGZvciBmdW5jdGlvbnMuIFdlIGN1cnJlbnRseSBvbmx5IGNvbXBpbGUg
ZnVuY3Rpb25zLgorICAgICAgICAvLyBUaGlzIHBhcnQgaXMgb25seSBuZWNlc3NhcnkgZm9yIGZ1
bmN0aW9ucy4gV2UgY3VycmVudGx5IG9ubHkgY29tcGlsZSBmdW5jdGlvbnMuCiAgICAgICAgIAot
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBmcm9tQXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOwog
ICAgICAgICAKLSAgICAvLyBQbGFudCBhIGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBh
dmFpbGFibGUgaW4gdGhlIEpTU3RhY2suCi0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjI5MQotICAgIGppdC5hZGRQdHIoCi0gICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMg
KiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OnJlZ1QxKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc3RhY2tDaGVjayA9IGpp
dC5icmFuY2hQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QmVsb3csCi0gICAgICAgIENDYWxs
SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHN0YXRlLmdyYXBoLm1fdm0uaW50ZXJwcmV0ZXItPnN0
YWNrKCkuYWRkcmVzc09mRW5kKCkpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBmcm9tU3RhY2tDaGVjayA9IGppdC5sYWJlbCgpOwotICAgICAgICAK
LSAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJh
dGVkRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpT
U3RhY2s6OlJldHVyblBDLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7Ci0gICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUklu
Zm86OnJlZ1QxKTsKLSAgICBqaXQucmV0KCk7Ci0gICAgICAgIAotICAgIHN0YWNrQ2hlY2subGlu
aygmaml0KTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGppdC5wb2tlKAotICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRT
dGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7Ci0gICAgICAgIAotICAgIGpp
dC5zdG9yZTMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6
OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KDApKSwKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsU3RhY2tDaGVjayA9IGppdC5j
YWxsKCk7Ci0gICAgLy8gRklYTUU6IG5lZWQgdG8gbWFrZSB0aGlzIGNhbGwgcmVnaXN0ZXIgd2l0
aCBleGNlcHRpb24gaGFuZGxpbmcgc29tZWhvdy4gVGhpcyBpcwotICAgIC8vIHBhcnQgb2YgYSBi
aWdnZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjIKLSAg
ICBqaXQuanVtcChmcm9tU3RhY2tDaGVjayk7Ci0gICAgICAgIAotICAgIENDYWxsSGVscGVyczo6
TGFiZWwgYXJpdHlDaGVjayA9IGppdC5sYWJlbCgpOwotICAgIGNvbXBpbGVFbnRyeShqaXQpOwot
ICAgIGppdC5sb2FkMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwKLSAgICAgICAg
R1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5icmFuY2gzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJlZ1QxLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAgICAgIC5saW5rVG8o
ZnJvbUFyaXR5Q2hlY2ssICZqaXQpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgaml0LnBva2UoCi0g
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICBPQkpFQ1RfT0ZGU0VU
T0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKLSAg
ICBqaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZy
YW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCi0gICAgICAgIENDYWxs
SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpKTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Q2hlY2sgPSBq
aXQuY2FsbCgpOwotICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVy
IHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKLSAgICAvLyBwYXJ0IG9m
IGEgYmlnZ2VyIHByb2JsZW06IEZUTCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgZXhjZXB0aW9u
cy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIy
Ci0gICAgaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1Qw
KS5saW5rVG8oZnJvbUFyaXR5Q2hlY2ssICZqaXQpOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKCk7Ci0gICAgaml0Lmp1bXAoZnJvbUFyaXR5Q2hlY2sp
OwotICAgICAgICAKLSAgICBPd25QdHI8TGlua0J1ZmZlcj4gbGlua0J1ZmZlciA9IGFkb3B0UHRy
KG5ldyBMaW5rQnVmZmVyKHN0YXRlLmdyYXBoLm1fdm0sICZqaXQsIGNvZGVCbG9jaywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCkpOwotICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbFN0YWNrQ2hl
Y2ssIGN0aV9zdGFja19jaGVjayk7Ci0gICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVj
aywgY29kZUJsb2NrLT5tX2lzQ29uc3RydWN0b3IgPyBjdGlfb3BfY29uc3RydWN0X2FyaXR5Q2hl
Y2sgOiBjdGlfb3BfY2FsbF9hcml0eUNoZWNrKTsKLSAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxB
cml0eUZpeHVwLCBGdW5jdGlvblB0cigoc3RhdGUuZ3JhcGgubV92bS5nZXRDVElTdHViKGFyaXR5
Rml4dXApKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAvLyBQbGFudCBh
IGNoZWNrIHRoYXQgc3VmZmljaWVudCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEpTU3RhY2su
CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTYyOTEKKyAgICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzdGFja0NoZWNrID0gaml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6QmVsb3csCisgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhzdGF0ZS5ncmFwaC5tX3ZtLmludGVycHJldGVy
LT5zdGFjaygpLmFkZHJlc3NPZkVuZCgpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBmcm9tU3RhY2tDaGVjayA9IGppdC5sYWJlbCgp
OworICAgICAgICAKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAg
ICAgIGppdC5tb3ZlKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksCisgICAgICAg
ICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQuZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LnJldCgpOworICAgICAgICAKKyAgICAgICAg
c3RhY2tDaGVjay5saW5rKCZqaXQpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQu
cG9rZSgKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAg
ICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6
ZW9mKHZvaWQqKSk7CisgICAgICAgIAorICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFz
Qnl0ZWNvZGVPZmZzZXQoMCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbFN0YWNrQ2hlY2sgPSBqaXQuY2FsbCgpOworICAg
ICAgICAvLyBGSVhNRTogbmVlZCB0byBtYWtlIHRoaXMgY2FsbCByZWdpc3RlciB3aXRoIGV4Y2Vw
dGlvbiBoYW5kbGluZyBzb21laG93LiBUaGlzIGlzCisgICAgICAgIC8vIHBhcnQgb2YgYSBiaWdn
ZXIgcHJvYmxlbTogRlRMIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBleGNlcHRpb25zLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIyCisg
ICAgICAgIGppdC5qdW1wKGZyb21TdGFja0NoZWNrKTsKKyAgICAgICAgCisgICAgICAgIGFyaXR5
Q2hlY2sgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgY29tcGlsZUVudHJ5KGppdCk7CisgICAgICAg
IGppdC5sb2FkMzIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksCisgICAgICAg
ICAgICBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5icmFuY2gzMigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZWdUMSwKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkK
KyAgICAgICAgICAgIC5saW5rVG8oZnJvbUFyaXR5Q2hlY2ssICZqaXQpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBqaXQucG9rZSgKKyAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLAorICAgICAgICAgICAgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0Zy
YW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgIGppdC5zdG9yZTMyKAor
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpMb2NhdGlv
bjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldCgwKSksCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKSk7CisgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsQXJpdHlDaGVjayA9IGppdC5j
YWxsKCk7CisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIG1ha2UgdGhpcyBjYWxsIHJlZ2lzdGVy
IHdpdGggZXhjZXB0aW9uIGhhbmRsaW5nIHNvbWVob3cuIFRoaXMgaXMKKyAgICAgICAgLy8gcGFy
dCBvZiBhIGJpZ2dlciBwcm9ibGVtOiBGVEwgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGV4Y2Vw
dGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTM2MjIKKyAgICAgICAgaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OnJlZ1QwKS5saW5rVG8oZnJvbUFyaXR5Q2hlY2ssICZqaXQpOworICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbEFyaXR5Rml4dXAgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQu
anVtcChmcm9tQXJpdHlDaGVjayk7CisgICAgICAgIAorICAgICAgICBsaW5rQnVmZmVyID0gYWRv
cHRQdHIobmV3IExpbmtCdWZmZXIoc3RhdGUuZ3JhcGgubV92bSwgJmppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKSk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2Fs
bFN0YWNrQ2hlY2ssIGN0aV9zdGFja19jaGVjayk7CisgICAgICAgIGxpbmtCdWZmZXItPmxpbmso
Y2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9yID8gY3RpX29wX2NvbnN0
cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7CisgICAgICAgIGxpbmtC
dWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKChzdGF0ZS5ncmFwaC5tX3Zt
LmdldENUSVN0dWIoYXJpdHlGaXh1cCkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBGVExGb3JPU1JFbnRyeU1v
ZGU6IHsKKyAgICAgICAgLy8gV2UganVtcCB0byBoZXJlIHN0cmFpZ2h0IGZyb20gREZHIGNvZGUs
IGFmdGVyIGhhdmluZyBib3hlZCB1cCBhbGwgb2YgdGhlCisgICAgICAgIC8vIHZhbHVlcyBpbnRv
IHRoZSBzY3JhdGNoIGJ1ZmZlci4gRXZlcnl0aGluZyBzaG91bGQgYmUgZ29vZCB0byBnbyAtIGF0
IHRoaXMKKyAgICAgICAgLy8gcG9pbnQgd2UndmUgZXZlbiBkb25lIHRoZSBzdGFjayBjaGVjay4g
QmFzaWNhbGx5IHdlIGp1c3QgaGF2ZSB0byBtYWtlIHRoZQorICAgICAgICAvLyBjYWxsIHRvIHRo
ZSBMTFZNLWdlbmVyYXRlZCBjb2RlLgorICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3Rh
dGUoKTsKKyAgICAgICAgaml0Lm1vdmUoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24p
KSwKKyAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBqaXQuY2FsbChH
UFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5l
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NC
ZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBqaXQucmV0KCk7CisgICAgICAg
IAorICAgICAgICBsaW5rQnVmZmVyID0gYWRvcHRQdHIobmV3IExpbmtCdWZmZXIoCisgICAgICAg
ICAgICBzdGF0ZS5ncmFwaC5tX3ZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgCiAgICAgc3RhdGUuZmluYWxpemVyLT5pbml0aWFsaXplRW50cnlwb2ludExp
bmtCdWZmZXIobGlua0J1ZmZlci5yZWxlYXNlKCkpOwogICAgIHN0YXRlLmZpbmFsaXplci0+aW5p
dGlhbGl6ZUZ1bmN0aW9uKHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
NTQ5ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgog
I2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVu
dHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAi
RlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgpAQCAtMTkxLDYg
KzE5Miw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIG1ha2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJl
YWQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2NrLCBtX25leHRMb3dCbG9jayk7CiAg
ICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6ZnRsQ3Jhc2hlcygpKQorICAgICAgICAgICAg
bV9vdXQuY3Jhc2hOb25UZXJtaW5hbCgpOworICAgICAgICAKICAgICAgICAgaWYgKCFtX2hpZ2hC
bG9jay0+Y2ZhSGFzVmlzaXRlZCkgewogICAgICAgICAgICAgbV9vdXQuY3Jhc2goKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTI0Myw2ICsyNDcsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldEFyZ3VtZW50OgogICAgICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50KCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICAgICAg
ICAgIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICBjb21waWxlR2V0TG9jYWwoKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjY0LDYgKzI3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgRmx1c2g6CiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgorICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CkBAIC01MDYsNiArNTE0
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxl
RXh0cmFjdE9TUkVudHJ5TG9jYWwoKQorICAgIHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1
ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgICAgICBtX2Z0bFN0
YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIo
KSk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZl
ciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpKSkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNv
bXBpbGVHZXRMb2NhbCgpCiAgICAgewogICAgICAgICAvLyBHZXRMb2NhbHMgYXJpc2Ugb25seSBm
b3IgY2FwdHVyZWQgdmFyaWFibGVzLgpAQCAtNTE1LDcgKzUzMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV92YWx1ZSkpCisg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAg
IHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNz
Rm9yKHZhcmlhYmxlLT5sb2NhbCgpKSkpOwpAQCAtMjgxNyw4ICsyODMyLDcgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCiAgICAgewot
ICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi53ZWFrUmVmZXJlbmNlcy5hcHBlbmQo
Ci0gICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSgpLCBjb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOworICAgICAgICBtX2dyYXBoLm1fcGxhbi53ZWFrUmVm
ZXJlbmNlcy5hZGRMYXppbHkodGFyZ2V0KTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIHdlYWtQ
b2ludGVyKEpTQ2VsbCogcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZUTE9TUkVudHJ5LmgiCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVk
ZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkKiBwcmVwYXJlT1NSRW50cnkoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBl
bnRyeUNvZGVCbG9jaywKKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBzdHJl
YW1JbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvZGVCbG9jayogYmFz
ZWxpbmUgPSBkZmdDb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIERGRzo6SklUQ29k
ZSogZGZnQ29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBGb3JPU1JF
bnRyeUpJVENvZGUqIGVudHJ5Q29kZSA9IGVudHJ5Q29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bEZv
ck9TUkVudHJ5KCk7CisgICAgCisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAg
ICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZUTCBPU1IgZnJvbSAiLCAqZGZnQ29kZUJsb2Nr
LCAiIHRvICIsICplbnRyeUNvZGVCbG9jaywgIiBhdCBiYyMiLAorICAgICAgICAgICAgYnl0ZWNv
ZGVJbmRleCwgIi5cbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZWNvZGVJbmRleCAhPSBl
bnRyeUNvZGUtPmJ5dGVjb2RlSW5kZXgoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB3ZSBk
b24ndCBoYXZlIGFuIGVudHJ5cG9pbnQgZm9yIGJjIyIsIGJ5dGVjb2RlSW5kZXgsICI7IG91cnMg
aXMgZm9yIGJjIyIsIGVudHJ5Q29kZS0+Ynl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPEpTVmFsdWU+IHZhbHVlczsKKyAgICBkZmdD
b2RlLT5yZWNvbnN0cnVjdCgKKyAgICAgICAgZXhlYywgZGZnQ29kZUJsb2NrLCBDb2RlT3JpZ2lu
KGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgdmFsdWVzKTsKKyAgICAKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWVzIGF0IGVudHJ5
OiAiLCB2YWx1ZXMsICJcbiIpOworICAgIAorICAgIGZvciAoaW50IGFyZ3VtZW50ID0gdmFsdWVz
Lm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50LS07KSB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKAorICAgICAgICAgICAgZXhlYy0+cihhcmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpLmpz
VmFsdWUoKSA9PSB2YWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQoCisgICAgICAgIHN0YXRpY19jYXN0PGludD4odmFsdWVzLm51bWJlck9m
TG9jYWxzKCkpID09IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CisgICAgCisgICAg
RW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KAor
ICAgICAgICBlbnRyeUNvZGUtPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7CisgICAgCisg
ICAgZm9yIChpbnQgbG9jYWwgPSB2YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspCisg
ICAgICAgIHNjcmF0Y2hbbG9jYWxdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlcy5sb2NhbChsb2Nh
bCkpOworICAgIAorICAgIHVuc2lnbmVkIHN0YWNrRnJhbWVTaXplID0gZW50cnlDb2RlQmxvY2st
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmICghdm0uaW50ZXJwcmV0ZXItPnN0YWNrKCku
Z3JvdygmZXhlYy0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZVNpemVdKSkgeworICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIE9TUiBmYWls
ZWQgYmNhdXNlIHN0YWNrIGdyb3d0aCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAorICAgIGV4ZWMtPnNldENvZGVCbG9jayhlbnRyeUNvZGVCbG9jayk7CisgICAg
CisgICAgdm9pZCogcmVzdWx0ID0gZW50cnlDb2RlLT5hZGRyZXNzRm9yQ2FsbCgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgZGF0
YUxvZygiICAgIEVudHJ5IHdpbGwgc3VjY2VlZCwgZ29pbmcgdG8gYWRkcmVzcyIsIFJhd1BvaW50
ZXIocmVzdWx0KSwgIlxuIik7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFbnRyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMT1NSRW50cnlfaAorI2RlZmluZSBGVExPU1JFbnRyeV9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgRXhlY1N0YXRlOworCituYW1lc3Bh
Y2UgRlRMIHsKKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KAorICAgIEV4ZWNTdGF0ZSosIENvZGVC
bG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGVudHJ5Q29kZUJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LAorICAgIHVuc2lnbmVkIHN0cmVhbUluZGV4KTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExPU1JFbnRyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAko
cmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDkgKzM1MSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICBjYWxsKHRyYXBJbnRyaW5zaWMoKSk7CiAgICAgfQotICAgIHZvaWQgY3Jhc2goKQorICAg
IAorICAgIHZvaWQgY3Jhc2hOb25UZXJtaW5hbCgpCiAgICAgewogICAgICAgICBjYWxsKGludFRv
UHRyKGNvbnN0SW50UHRyKGFib3J0KSwgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKHZvaWRUeXBl
KSkpKTsKKyAgICB9CisgICAgdm9pZCBjcmFzaCgpCisgICAgeworICAgICAgICBjcmFzaE5vblRl
cm1pbmFsKCk7CiAgICAgICAgIHVucmVhY2hhYmxlKCk7CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tX
aXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgorI2luY2x1
ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDAsOSArNDIsMjUgQEAgU3RhdGU6OlN0YXRl
KEdyYXBoJiBncmFwaCkKICAgICAsIGNvbnRleHQoTExWTUNvbnRleHRDcmVhdGUoKSkKICAgICAs
IG1vZHVsZSgwKQogICAgICwgZnVuY3Rpb24oMCkKLSAgICAsIGppdENvZGUoYWRvcHRSZWYobmV3
IEpJVENvZGUoKSkpCiAgICAgLCBnZW5lcmF0ZWRGdW5jdGlvbigwKQogeworICAgIHN3aXRjaCAo
Z3JhcGgubV9wbGFuLm1vZGUpIHsKKyAgICBjYXNlIEZUTE1vZGU6IHsKKyAgICAgICAgaml0Q29k
ZSA9IGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBGVExGb3JPU1JFbnRyeU1vZGU6IHsKKyAgICAgICAgUmVmUHRyPEZvck9TUkVudHJ5SklU
Q29kZT4gY29kZSA9IGFkb3B0UmVmKG5ldyBGb3JPU1JFbnRyeUpJVENvZGUoKSk7CisgICAgICAg
IGNvZGUtPmluaXRpYWxpemVFbnRyeUJ1ZmZlcihncmFwaC5tX3ZtLCBncmFwaC5tX3Byb2ZpbGVk
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsKKyAgICAgICAgY29kZS0+c2V0Qnl0ZWNvZGVJ
bmRleChncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICAgICAgaml0Q29k
ZSA9IGNvZGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CiAgICAgZmluYWxpemVyID0gbmV3IEpJVEZpbmFsaXplcihncmFwaC5tX3BsYW4pOwogICAgIGdy
YXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBhZG9wdFB0cihmaW5hbGl6ZXIpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHJldmlzaW9uIDE1
NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGFzSW5saW5lQ2FsbEZyYW1lKCkgY29uc3Q7CiAgICAgICAgIGludDMy
X3QgdW5ib3hlZEludDMyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgdW5ib3hlZEJvb2xlYW4oKSBj
b25zdDsKKyAgICAgICAgZG91YmxlIHVuYm94ZWREb3VibGUoKSBjb25zdDsKICAgICAgICAgSlND
ZWxsKiB1bmJveGVkQ2VsbCgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHBheWxvYWQoKSBjb25z
dDsKICAgICAgICAgaW50MzJfdCB0YWcoKSBjb25zdDsKQEAgLTk2LDYgKzk3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBDOwogICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICBFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yIGVuY29kZWRWYWx1ZTsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXI7CiAgICAg
ICAgIH0gdTsKICAgICB9OwogCkBAIC0xODgsNiArMTkwLDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gISFwYXlsb2FkKCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSBk
b3VibGUgUmVnaXN0ZXI6OnVuYm94ZWREb3VibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHUubnVtYmVyOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBSZWdpc3Rl
cjo6dW5ib3hlZENlbGwoKSBjb25zdAogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKICAgICBpZiAoIWNhbkJl
T3B0aW1pemVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0g
YnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvclJldHVybigpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRy
ZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CisgICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFu
Y2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yRW50cnkoKSksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09m
SklURXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcHRpbWl6ZSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0
ZWNvZGVPZmZzZXQpKTsKICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVPZmZzZXQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZpc2lvbiAxNTQ5ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2NiwxMiBAQCBGVEw6OkpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiAgICAgcmV0dXJuIDA7CiB9
CiAKK0ZUTDo6Rm9yT1NSRW50cnlKSVRDb2RlKiBKSVRDb2RlOjpmdGxGb3JPU1JFbnRyeSgpCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwog
UGFzc1JlZlB0cjxKSVRDb2RlPiBKSVRDb2RlOjpob3N0RnVuY3Rpb24oSklUQ29kZTo6Q29kZVJl
ZiBjb2RlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShjb2RlLCBI
b3N0Q2FsbFRodW5rKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2
aXNpb24gMTU0OTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgQ29tbW9uRGF0YTsKIGNsYXNzIEpJ
VENvZGU7CiB9CiBuYW1lc3BhY2UgRlRMIHsKK2NsYXNzIEZvck9TUkVudHJ5SklUQ29kZTsKIGNs
YXNzIEpJVENvZGU7CiB9CiAKQEAgLTE3NCw2ICsxNzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIHZpcnR1YWwgREZHOjpKSVRDb2Rl
KiBkZmcoKTsKICAgICB2aXJ0dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7CisgICAgdmlydHVhbCBG
VEw6OkZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKICAgICAKICAgICBKU1Zh
bHVlIGV4ZWN1dGUoSlNTdGFjayosIENhbGxGcmFtZSosIFZNKik7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTU0OTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MzYsMTYgKzEwMzYsMzIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJU
cmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsK
ICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNh
bGxiYWNrID0KLSAgICAgICAgICAgIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoKTsKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gY29k
ZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCF2bS53b3Jr
bGlzdCkKLSAgICAgICAgICAgIHZtLndvcmtsaXN0ID0gREZHOjpnbG9iYWxXb3JrbGlzdCgpOwor
ICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlczsKKyAgICAgICAgaWYgKGJ5dGVjb2Rl
SW5kZXgpCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IGNvZGVCbG9jay0+bV9udW1W
YXJzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7Cisg
ICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXMoCisgICAgICAgICAgICBj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyc1dpdGhWYWx1ZXMpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGludCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAg
ICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKKyAgICAgICAgICAgICAgICAm
JiBjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgICAgICAg
JiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7
CisgICAgICAgICAgICAgICAgLy8gVWdoLiBJZiB3ZSdyZSBpbiBhIGNvbnN0cnVjdG9yLCB0aGUg
J3RoaXMnIGFyZ3VtZW50IG1heSBob2xkIGdhcmJhZ2UuIEl0IHdpbGwKKyAgICAgICAgICAgICAg
ICAvLyBhbHNvIG5ldmVyIGJlIHVzZWQuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgcHV0IGlu
dG8gdGhlIHZhbHVlIGZvciB0aGlzLAorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBoYXMgdG8g
YmUgYW4gYWN0dWFsIHZhbHVlIHRoYXQgY2FuIGJlIGdyb2trZWQgYnkgc3Vic2VxdWVudCBERkcg
cGFzc2VzLAorICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNhbml0aXplIGl0IGhlcmUgYnkgdHVy
bmluZyBpdCBpbnRvIFVuZGVmaW5lZC4KKyAgICAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVz
W2ldID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IG11c3RIYW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNW
YWx1ZSgpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBERkc6OmNvbXBpbGUoCi0gICAgICAgICAgICBjYWxsRnJhbWUsIG5ld0NvZGVCbG9j
ay5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LCBjYWxsYmFjaywKLSAgICAgICAg
ICAgIHZtLndvcmtsaXN0LmdldCgpKTsKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCkuZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAg
ICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoKSwKKyAgICAgICAgICAgIHZtLmVuc3VyZVdvcmtsaXN0KCkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMDU0LDE1ICsxMDcwLDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCk7CiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChv
cHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAotICAgIGlmIChvcHRpbWl6ZWRD
b2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKLSAgICAgICAgLy8gRlRM
IEpJVCBkb2Vzbid0IHN1cHBvcnQgT1NSIGVudHJ5IHlldC4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNQotICAgICAgICAKLSAgICAgICAg
Ly8gRG9uJ3QgYXR0ZW1wdCBPU1IgZW50cnkgYWdhaW4uCi0gICAgICAgIGNvZGVCbG9jay0+ZG9u
dE9wdGltaXplQW55dGltZVNvb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKICAg
ICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0
aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewogICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1NDk4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzAsMjYgKzIzMCwzMiBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhl
Y3V0YWJsZTo6CiAgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkp
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAg
IEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhp
cyk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENv
ZGVCbG9jayo+KAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNl
bGluZVZlcnNpb24oKSk7CiAgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBh
ZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBh
cnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKKyAgICAgICAgcmVz
dWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAogICAgIGlmIChjbGFzc0luZm8oKSA9PSBQcm9ncmFtRXhlY3V0YWJsZTo6aW5m
bygpKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAg
ICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KHRoaXMpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRp
Y19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPigKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJv
Z3JhbUNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwogICAgICAgICBSZWZQdHI8UHJvZ3Jh
bUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAg
ICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmV4ZWN1dGFibGUtPm1fcHJvZ3Jh
bUNvZGVCbG9jaykpOwotICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGV4ZWN1dGFibGUt
Pm1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRC
bG9jaywgKmJhc2VsaW5lKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxp
bmUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJU
KGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhp
cyk7CisgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25Db2RlQmxvY2sqPigKKyAgICAgICAgZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpLT5i
YXNlbGluZVZlcnNpb24oKSk7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQg
PSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCi0gICAgICAgIENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKSk7Ci0gICAgcmVz
dWx0LT5zZXRBbHRlcm5hdGl2ZShleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAg
ICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7CisgICAgcmVzdWx0
LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTU0OTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksNiArMTI5LDcgQEAgdHlwZWRlZiBPcHRpb25SYW5nZSBvcHRpb25SYW5nZTsK
ICAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAg
dih1bnNpZ25lZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyKSBcCiAgICAgdih1bnNpZ25lZCwg
bGx2bVNpemVMZXZlbCwgMCkgXAorICAgIHYoYm9vbCwgZnRsQ3Jhc2hlcywgZmFsc2UpIC8qIGZv
b2wtcHJvb2Ygd2F5IG9mIGNoZWNraW5nIHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBGVEwuIDst
KSAqL1wKICAgICBcCiAgICAgdihib29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVlKSBcCiAg
ICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldv
cmtlclRocmVhZHMoMikgLSAxKSBcCkBAIC0xNTYsOSArMTU3LDE0IEBAIHR5cGVkZWYgT3B0aW9u
UmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcCwgMTAwMCkgXAogICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwLCAxMDAwKSBcCiAgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29u
LCAxMDAwKSBcCi0gICAgXAogICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JMb29wLCAxKSBcCi0gICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJl
dHVybiwgMTUpIFwKKyAgICB2KGludDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yRW50
cnksIDE1KSBcCisgICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckZUTE9wdGltaXplQWZ0
ZXJXYXJtVXAsIDI1MDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yRlRMT3B0aW1pemVT
b29uLCAxMDAwKSBcCisgICAgdihpbnQzMiwgZnRsVGllclVwQ291bnRlckluY3JlbWVudEZvckxv
b3AsIDEpIFwKKyAgICB2KGludDMyLCBmdGxUaWVyVXBDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJu
LCAxNSkgXAorICAgIHYodW5zaWduZWQsIGZ0bE9TUkVudHJ5RmFpbHVyZUNvdW50Rm9yUmVvcHRp
bWl6YXRpb24sIDE1KSBcCiAgICAgXAogICAgIHYoaW50MzIsIGV2YWxUaHJlc2hvbGRNdWx0aXBs
aWVyLCAxMCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDYgKzcxMCwxNSBAQCB2b2lkIFZNOjpnYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2CiAgICAgICAgIH0KICAgICB9CiB9CisKK0RGRzo6V29ya2xp
c3QqIFZNOjplbnN1cmVXb3JrbGlzdCgpCit7CisgICAgaWYgKCFERkc6OmVuYWJsZUNvbmN1cnJl
bnRKSVQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCF3b3JrbGlzdCkKKyAgICAgICAg
d29ya2xpc3QgPSBERkc6Omdsb2JhbFdvcmtsaXN0KCk7CisgICAgcmV0dXJuIHdvcmtsaXN0Lmdl
dCgpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDk4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwogCiAg
ICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFjaGlu
ZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9CisgICAgICAgIAor
I2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICBERkc6OldvcmtsaXN0KiBlbnN1cmVXb3JrbGlz
dCgpOworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTk4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTMtMDktMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUg
REZHIHNob3VsZCBiZSBhYmxlIHRvIHRpZXItdXAgYW5kIE9TUiBlbnRlciBpbnRvIHRoZSBGVEwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
Rml4IG1hcnNhZ2xpYSB0byBjaGVjayB0aGUgcmVzdWx0IGluc3RlYWQgb2YgcHJpbnRpbmcsIGFu
ZCBhZGQgYSBzZWNvbmQKKyAgICAgICAgdmVyc2lvbiB0aGF0IHJlbGllcyBvbiBPU1IgZW50cnku
CisKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvbWFyc2FnbGlhLW9zci1lbnRyeS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtb3NyLWVu
dHJ5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
bWFyc2FnbGlhLW9zci1lbnRyeS5qczogQWRkZWQuCisgICAgICAgIChtYXJzYWdsaWEpOgorICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzOgorCiAyMDEz
LTA5LTAzICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogZXhjZXB0aW9ucyB0cmlnZ2VyZWQgZnJvbSBjb25zb2xlIGV2YWx1YXRpb24g
ZG8gbm90IHBhdXNlIHRoZSBkZWJ1Z2dlcgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdy
ZXNzL21hcnNhZ2xpYS1vc3ItZW50cnktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtb3NyLWVudHJ5LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtb3Ny
LWVudHJ5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvbWFyc2FnbGlhLW9zci1lbnRyeQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L21hcnNhZ2xpYS1vc3ItZW50cnkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3MvbWFyc2FnbGlhLW9zci1lbnRyeS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL21hcnNhZ2xpYS1vc3ItZW50cnkuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9tYXJzYWdsaWEtb3NyLWVudHJ5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLW9zci1l
bnRyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL21hcnNhZ2xpYS1vc3ItZW50cnkuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcnNhZ2xpYS1vc3ItZW50cnkuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorZnVuY3Rpb24gbWFyc2FnbGlhKG1feiwgbV93
LCBuKSB7CisgICAgdmFyIHJlc3VsdDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICBtX3ogPSAoMzY5NjkgKiAobV96ICYgNjU1MzUpICsgKG1feiA+PiAxNikpIHwg
MDsKKyAgICAgICAgbV93ID0gKDE4MDAwICogKG1fdyAmIDY1NTM1KSArIChtX3cgPj4gMTYpKSB8
IDA7CisgICAgICAgIHJlc3VsdCA9ICgobV96IDw8IDE2KSArIG1fdykgfCAwOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gbWFyc2FnbGlhKDUsIDcsIDEwMDAw
MDAwKTsKKworaWYgKHJlc3VsdCAhPSAtMTA0NzM2NDA1NikKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbWFyc2FnbGlhLmpzCShyZXZpc2lvbiAxNTQ5ODYp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hcnNhZ2xpYS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTIsNCArMTIsNiBAQCB2YXIgcmVzdWx0ID0gMDsKIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCiAgICAgcmVzdWx0ICs9IG1hcnNhZ2xpYShpLCBpICsg
MSwgMTAwMDAwMCk7CiAKLXByaW50KHJlc3VsdCk7CitpZiAocmVzdWx0ICE9IDgyMTYzODYyNDMp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCg==
</data>
<flag name="review"
          id="232514"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>