<?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>26276</bug_id>
          
          <creation_ts>2009-06-09 11:09:50 -0700</creation_ts>
          <short_desc>Need a mechanism to determine stack extent on Windows, SOLARIS, OPENBSD, HAIKU platforms</short_desc>
          <delta_ts>2013-05-23 12:25:29 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</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>114978</dependson>
    
    <dependson>116661</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>abarth</cc>
    
    <cc>alp</cc>
    
    <cc>barraclough</cc>
    
    <cc>binary.chen</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jamesr</cc>
    
    <cc>oliver</cc>
    
    <cc>paroga</cc>
    
    <cc>rniwa</cc>
    
    <cc>s.mathur</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>124978</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-09 11:09:50 -0700</bug_when>
    <thetext>There are many places where we have arbitrary (and conservative) recursion count based limits.  A better approach would be to have a guard based on the actual extent of the stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270597</commentid>
    <comment_count>1</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-08-27 11:07:23 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; There are many places where we have arbitrary (and conservative) recursion count based limits.  A better approach would be to have a guard based on the actual extent of the stack.

Would the limit based on the stack extent by also arbitrary, or is there a way to get reasonable values, say, per platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270617</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-27 11:30:36 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; There are many places where we have arbitrary (and conservative) recursion count based limits.  A better approach would be to have a guard based on the actual extent of the stack.
&gt; 
&gt; Would the limit based on the stack extent by also arbitrary, or is there a way to get reasonable values, say, per platform?

There doesn&apos;t seem to be any reliable way to get the thread stack size on *nix at least -- it&apos;s dependent on the attribute being set through pthreads, and i&apos;m not sure if the attribute is required to correlate  to reality.

In the new parser I took a different approach and simply put a size limit by subtracting 512k (or something) from the first time we enter the parser on a given thread -- this assumes that the very first time we parse something we aren&apos;t already using too much stack space.  It also causes problems on platforms that have very low stack sizes :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271043</commentid>
    <comment_count>3</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-08-28 12:52:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; In the new parser I took a different approach and simply put a size limit by subtracting 512k (or something) from the first time we enter the parser on a given thread -- this assumes that the very first time we parse something we aren&apos;t already using too much stack space.  It also causes problems on platforms that have very low stack sizes :-/

(... after reading that code ...)

I see.

So I assume that even if it&apos;s less than perfect this is still better than the mechanisms used in, say, Interpreter.cpp?

BTW, just for fun I added an ASSERT in JSParser.cpp::canRecurse(), like


         char sample = 0;
         ASSERT(m_endAddress);
+        ASSERT(&amp;sample &gt; m_endAddress);
         return &amp;sample &gt; m_endAddress;

and, if I&apos;m not messing up, it does not seem to be triggered even once running LayoutTests/fast/js or the JSC tests. Do we have any reasonable test for the stack overflow business? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271045</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-28 12:56:37 -0700</bug_when>
    <thetext>&gt; BTW, just for fun I added an ASSERT in JSParser.cpp::canRecurse(), like
&gt; 
&gt; 
&gt;          char sample = 0;
&gt;          ASSERT(m_endAddress);
&gt; +        ASSERT(&amp;sample &gt; m_endAddress);
&gt;          return &amp;sample &gt; m_endAddress;
&gt; 
&gt; and, if I&apos;m not messing up, it does not seem to be triggered even once running LayoutTests/fast/js or the JSC tests. Do we have any reasonable test for the stack overflow business? :)

Seems like we could have some tests for that, file a bug on it and land a large number of tests for &quot;recursive&quot; bits of the grammar.

heavily nested functions, ()&apos;s, etc should all eventually trigger this... (i&apos;m sure i made tests for this though :-/)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273803</commentid>
    <comment_count>5</comment_count>
      <attachid>66474</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-02 23:30:06 -0700</bug_when>
    <thetext>Created attachment 66474
interpreteroverflow.diff

First crack at this.

I&apos;m using the same idiom that JSParser uses. I copied the value to calculate an end address from there, since I&apos;m unsure of whether we want to share it or not. If we do, we should probably have it in some header (where?), if we want a different value here we just need to change it.

WRT tests, there&apos;s actually a few tests that check for stack overflow in parsing, execution, ...(eg, js1_5/Regress/regress-192414.js, js1_5/Regress/regress-192465.js ), but we could write more if you think our coverage is not enough. In any case, no regressions here with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273819</commentid>
    <comment_count>6</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-03 00:24:04 -0700</bug_when>
    <thetext>btw, I didn&apos;t remove m_reentryDepth because its value is still used in one place inside ::execute:

    if (m_reentryDepth &amp;&amp; lastGlobalObject &amp;&amp; globalObject != lastGlobalObject)
        lastGlobalObject-&gt;copyGlobalsTo(m_registerFile);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315141</commentid>
    <comment_count>7</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-30 10:28:18 -0800</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320784</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-12 02:37:50 -0800</bug_when>
    <thetext>CCing some JSC folks will help get a review. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324305</commentid>
    <comment_count>9</comment_count>
      <attachid>76981</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 00:51:33 -0800</bug_when>
    <thetext>Created attachment 76981
The patch

Does not fix the problem (Need a mechanism to determine stack extent), but gives us a common place (StackBounds) to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324308</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-20 00:56:38 -0800</bug_when>
    <thetext>Attachment 76981 did not build on chromium:
Build output: http://queues.webkit.org/results/7268058</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324313</commentid>
    <comment_count>11</comment_count>
      <attachid>66474</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 01:12:14 -0800</bug_when>
    <thetext>Comment on attachment 66474
interpreteroverflow.diff

Hey xan,

Out of coincidence I&apos;ve hit a similar issue, I need to improve the bytecompiler&apos;s recursion guards.  As such I think we could do with some more of this code in a common place, where it can be shared.

I&apos;m going to give this an r- for now, since I think this change can be much simpler when my patch lands – you can basically just call globalData-&gt;stack().recursionCheck().  However I think in making this change we should also address one question slightly more thoroughly – how much machine stack space so we need to nest iterations of the VM? (the new recursionCheck() method defaults to checking that 4k of stack is available, but a different limit can be specified, and nesting entries into Interpreter::execute might take more than this – with the interpreter enabled the frame size for privateExecute is large).

I&apos;d suggest we should perform a couple of quick empirical tests to set a sensible value for the minimum amount of space to require upon entry into Interpreter::execute.  We could write some test code that causes nested entries into JIT code &amp; into private execute (we should test with the interpreter too), and measure the difference in the stack position at these points.  This may give us some guide as the to depth of stack space needed, but I guess this may be flawed – this may not be representative of a use case that uses the most stack space.

A better experiment might be to write a tool to dump the processes vm map on exit, run some test cases, and look at how much of the stack has been mapped in resident (we could do this on OS X using vmmap) - this would be harder, but would give us a better indication of common stack usage in JSC.  Maybe there is an easier way to produce similar information.

What do you think? - do you think you can come up with some form of test to pick a sensible amount of stack space to require to permit reentry?  If not, I suggest we at least hard code a constant to demand a more significant chunk of stack space be available to permit reentry, say, passing 16k/32k to recursionCheck().

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324314</commentid>
    <comment_count>12</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 01:14:31 -0800</bug_when>
    <thetext>Ooops, will add added files to other makefiles in the morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324318</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-20 01:30:47 -0800</bug_when>
    <thetext>Attachment 76981 did not build on win:
Build output: http://queues.webkit.org/results/7295064</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324321</commentid>
    <comment_count>14</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-20 01:33:27 -0800</bug_when>
    <thetext>Attachment 76981 did not build on qt:
Build output: http://queues.webkit.org/results/7236080</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324326</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-20 02:29:46 -0800</bug_when>
    <thetext>Attachment 76981 did not build on chromium:
Build output: http://queues.webkit.org/results/7309067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324358</commentid>
    <comment_count>16</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-12-20 06:28:36 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; A better experiment might be to write a tool to dump the processes vm map on exit, run some test cases, and look at how much of the stack has been mapped in resident (we could do this on OS X using vmmap) - this would be harder, but would give us a better indication of common stack usage in JSC.  Maybe there is an easier way to produce similar information.

It seems reasonably easy to dump the process vm map on exit and check how much of the stack has been mapped in resident, although not in a portable way. I can hack jsc or whatever to add an option to do this in Linux, if you want, and then you can fill in the OSX bits.

&gt; 
&gt; What do you think? - do you think you can come up with some form of test to pick a sensible amount of stack space to require to permit reentry?  If not, I suggest we at least hard code a constant to demand a more significant chunk of stack space be available to permit reentry, say, passing 16k/32k to recursionCheck().

My only question is what set of programs would we run to figure out what&apos;s a reasonable limit.
 
&gt; 
&gt; cheers,
&gt; G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324509</commentid>
    <comment_count>17</comment_count>
      <attachid>77027</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 12:43:39 -0800</bug_when>
    <thetext>Created attachment 77027
The patch (fix makefiles)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324510</commentid>
    <comment_count>18</comment_count>
      <attachid>77028</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 12:45:48 -0800</bug_when>
    <thetext>Created attachment 77028
The patch (ooops, fix fwding headers)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324513</commentid>
    <comment_count>19</comment_count>
      <attachid>77029</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 12:47:35 -0800</bug_when>
    <thetext>Created attachment 77029
Gah, fix StackBounds.h, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324518</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-20 12:52:52 -0800</bug_when>
    <thetext>Attachment 77029 did not build on chromium:
Build output: http://queues.webkit.org/results/7258068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324519</commentid>
    <comment_count>21</comment_count>
      <attachid>77029</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-12-20 12:53:38 -0800</bug_when>
    <thetext>Comment on attachment 77029
Gah, fix StackBounds.h, too.

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

There should be a follow on bug to separate JavaScriptCore/wtf/StackBounds.cpp into platform specific files.

&gt; JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:-2460
&gt; -			developmentRegion = English;

Please to be updating your copy of xcode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324530</commentid>
    <comment_count>22</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-20 13:06:51 -0800</bug_when>
    <thetext>Attachment 77029 did not build on qt:
Build output: http://queues.webkit.org/results/7309077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324534</commentid>
    <comment_count>23</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 13:16:49 -0800</bug_when>
    <thetext>StackBounds landed in r74360.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324561</commentid>
    <comment_count>24</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 13:58:44 -0800</bug_when>
    <thetext>Hey xan,

Hmmm, sure, I&apos;m beginning to question my own suggestion here.  There is a problem with the vm map based approach, in that it will measure the stack depth used by the lexer/parser &amp; byte compiler.  We don&apos;t want to include these, since they check stack usage themselves.

So maybe we should just measure the depth from vm entry  to vm entry (write a test case to call a host function, say, array sort, that can call back out to a JS function, and measure difference in stack depth between the two entries).

&gt; My only question is what set of programs would we run to figure out what&apos;s a reasonable limit.

If we&apos;re going to take this approach, then you just need to write a test that will cause a nested entry into JS language code.  We should measure with &amp; without the JIT, since we believe Interpreter::privateExecute to have a huge callframe.

It would be better to find a way to measure the deepest route through the VM, but I can&apos;t think of a good way to do so, without including the parser/bytecompiler stack depth.  If you have any bright ideas here, my suggestion would be run the fast/js LayoutTests &amp; javascriptcore-tests – in order to find the longest route through the VM we need to try different routes through the VM, and this will give us good coverage.

But maybe we should just stick to the simpler suggestion.  Any empirical test will be better than what we currently have, which is a wild guess! :-)

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324567</commentid>
    <comment_count>25</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-12-20 14:21:18 -0800</bug_when>
    <thetext>I think this may have broken the chromium mac compile:

CompileC ../../WebKit/chromium/xcodebuild/JavaScriptCore.build/Release/wtf.build/Objects-normal/i386/StackBounds.o /Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp normal i386 c++ com.apple.compilers.gcc.4_2
    cd /Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp
    /Developer/usr/bin/gcc-4.2 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fno-exceptions -fno-rtti -O3 -Wnewline-eof -DCHROMIUM_BUILD -DENABLE_REMOTING=1 -DENABLE_GPU=1 -DENABLE_3D_CANVAS=1 -DENABLE_3D_RENDERING=1 -DENABLE_ACCELERATED_2D_CANVAS=1 -DENABLE_BLOB=1 -DENABLE_BLOB_SLICE=1 -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_CLIENT_BASED_GEOLOCATION=1 -DENABLE_DASHBOARD_SUPPORT=0 -DENABLE_DATABASE=1 -DENABLE_DATAGRID=0 -DENABLE_DEVICE_ORIENTATION=1 -DENABLE_DIRECTORY_UPLOAD=1 -DENABLE_DOM_STORAGE=1 -DENABLE_EVENTSOURCE=1 -DENABLE_FILE_SYSTEM=1 -DENABLE_FILTERS=1 -DENABLE_GEOLOCATION=1 -DENABLE_ICONDATABASE=0 -DENABLE_INDEXED_DATABASE=1 -DENABLE_INPUT_SPEECH=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_JSC_MULTIPLE_THREADS=0 -DENABLE_LINK_PREFETCH=1 -DENABLE_MATHML=0 -DENABLE_METER_TAG=1 -DENABLE_NOTIFICATIONS=1 -DENABLE_OFFLINE_WEB_APPLICATIONS=1 -DENABLE_OPENTYPE_SANITIZER=1 -DENABLE_ORIENTATION_EVENTS=0 -DENABLE_PROGRESS_TAG=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_SVG=1 -DENABLE_SVG_ANIMATION=1 -DENABLE_SVG_AS_IMAGE=1 -DENABLE_SVG_FONTS=1 -DENABLE_SVG_FOREIGN_OBJECT=1 -DENABLE_SVG_USE=1 -DENABLE_TOUCH_EVENTS=1 -DENABLE_V8_SCRIPT_DEBUG_SERVER=1 -DENABLE_VIDEO=1 -DENABLE_WEB_AUDIO=0 -DENABLE_WEB_SOCKETS=1 -DENABLE_WEB_TIMING=1 -DENABLE_WORKERS=1 -DENABLE_XHR_RESPONSE_BLOB=1 -DENABLE_XPATH=1 -DENABLE_XSLT=1 -DWTF_USE_ACCELERATED_COMPOSITING=1 -DWTF_USE_WEBP=1 -DWTF_USE_WEBKIT_IMAGE_DECODERS=1 -DBUILDING_CHROMIUM__=1 -DUSE_SYSTEM_MALLOC=1 -DWTF_USE_NEW_THEME=1 -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -isysroot /Developer/SDKs/MacOSX10.5.sdk -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -mmacosx-version-min=10.5 -gdwarf-2 -Wendif-labels -Wno-unused-parameter -Wno-missing-field-initializers -F/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../../WebKit/chromium/xcodebuild/Release -I/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../../WebKit/chromium/xcodebuild/Release/include -I../../WebKit/chromium/third_party/icu/public/common -I../../WebKit/chromium/third_party/icu/public/i18n -I.. -I../wtf -I../wtf/unicode -I/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../../WebKit/chromium/xcodebuild/JavaScriptCore.build/Release/wtf.build/DerivedSources -c /Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp -o /Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../../WebKit/chromium/xcodebuild/JavaScriptCore.build/Release/wtf.build/Objects-normal/i386/StackBounds.o
/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp: In member function ‘void WTF::StackBounds::initialize()’:
/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp:72: error: ‘pthread_t’ was not declared in this scope
/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp:72: error: expected `;&apos; before ‘thread’
/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp:73: error: ‘thread’ was not declared in this scope
/Users/cltbld/Desktop/BuildSlaveData/WebKit-BuildSlave/chromium-mac-release/build/JavaScriptCore/JavaScriptCore.gyp/../wtf/StackBounds.cpp:73: error: ‘pthread_get_stackaddr_np’ was not declared in this scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324591</commentid>
    <comment_count>26</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-12-20 14:57:48 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; I think this may have broken the chromium mac compile:

Patch for chromium mac compile: https://bugs.webkit.org/show_bug.cgi?id=51356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324645</commentid>
    <comment_count>27</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 16:34:49 -0800</bug_when>
    <thetext>xan - fyi https://bugs.webkit.org/show_bug.cgi?id=51358.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324674</commentid>
    <comment_count>28</comment_count>
      <attachid>77059</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 17:36:33 -0800</bug_when>
    <thetext>Created attachment 77059
Fix stack size detection on DARWIN, WINDOWS, QNX, UNIX

Still needs fixes for SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE, these can follow on after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324679</commentid>
    <comment_count>29</comment_count>
      <attachid>77059</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-12-20 17:42:17 -0800</bug_when>
    <thetext>Comment on attachment 77059
Fix stack size detection on DARWIN, WINDOWS, QNX, UNIX

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324870</commentid>
    <comment_count>30</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-20 23:38:14 -0800</bug_when>
    <thetext>Fixed in r74402 for DARWIN, WINDOWS, QNX, UNIX.
Leaving bug open to track SOLARIS, OPENBSD, SYMBIAN, HAIKU, WINCE.
Updating bug title to reflect this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324902</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 00:55:39 -0800</bug_when>
    <thetext>Attachment 77059 was posted by a committer and has review+, assigning to Gavin Barraclough for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324916</commentid>
    <comment_count>32</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-21 01:37:56 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Attachment 77059 [details] was posted by a committer and has review+, assigning to Gavin Barraclough for commit.

Hi eric, 77059 is already committed in r74402, per comment #30.

I&apos;m not sure that setting an assignee is apt for this particular bug, since both xan and I are working on different aspects of the problem.  I&apos;m going to reset assignee, since I&apos;m expecting the next patches to come from xan - I hope this seems reasonable.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325361</commentid>
    <comment_count>33</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-21 20:31:42 -0800</bug_when>
    <thetext>Relanded in r74455, minus Windows support, since this broke Windows 7.
Unclear why StackLimit is not our friend on this platform.  Will explore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326286</commentid>
    <comment_count>34</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-23 14:37:05 -0800</bug_when>
    <thetext>http://build.webkit.org/changes/24047 seems to have caused a persistent test failure on Leopard bots:

http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r74460%20(25800)/results.html
http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r74461%20(25801)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326748</commentid>
    <comment_count>35</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-24 14:20:46 -0800</bug_when>
    <thetext>The crash in inspector/console-log-before-inspector-open.html is unexpected, I&apos;ll investigate.

I&apos;ll get some platform specific expected results checked in for fast/js/large-expressions.html - looks like we&apos;re going to have different results here now due to different stack sizes running on 32/64 bit platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328174</commentid>
    <comment_count>36</comment_count>
      <attachid>77721</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-12-31 08:26:36 -0800</bug_when>
    <thetext>Created attachment 77721
Patch for WinCE

This needs bug 51778.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328175</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-31 08:28:55 -0800</bug_when>
    <thetext>Attachment 77721 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;JavaScriptCore/ChangeLog&apos;, u&apos;JavaScriptCore/wtf/StackBounds.cpp&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/StackBounds.cpp:68:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 35 in 2 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>328225</commentid>
    <comment_count>38</comment_count>
      <attachid>77721</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-31 15:30:08 -0800</bug_when>
    <thetext>Comment on attachment 77721
Patch for WinCE

Hi Patrick, patch looks great, but r- for the style-bot issues.  Please resubmit without &apos;\r&apos;s &amp; I&apos;ll be happy to r+.
cheers, G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328398</commentid>
    <comment_count>39</comment_count>
      <attachid>77776</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-02 09:19:01 -0800</bug_when>
    <thetext>Created attachment 77776
Patch for WinCE (fixed line endings)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328415</commentid>
    <comment_count>40</comment_count>
      <attachid>77721</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-02 12:24:12 -0800</bug_when>
    <thetext>Comment on attachment 77721
Patch for WinCE

(In reply to comment #38)
&gt; (From update of attachment 77721 [details])
&gt; Hi Patrick, patch looks great, but r- for the style-bot issues.  Please resubmit without &apos;\r&apos;s &amp; I&apos;ll be happy to r+.
&gt; cheers, G.
Ok, now I know the problem: StackBounds.cpp has _no_ svn:eol-style=natvie _and_ CRLF (That&apos;s the reason why the second patch does not apply!).
If you r+ I&apos;ll commit it manually and add the svn:eol-style property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329048</commentid>
    <comment_count>41</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-04 10:30:05 -0800</bug_when>
    <thetext>It looks like this code is specific to JavaScriptCore, is there any reason the code in WTFThreadData was added outside the #if USE(JSC) guards?  This causes a few uesless pthread_* calls on ports that don&apos;t use JSC currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329068</commentid>
    <comment_count>42</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-04 10:46:52 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; It looks like this code is specific to JavaScriptCore, is there any reason the code in WTFThreadData was added outside the #if USE(JSC) guards?  This causes a few uesless pthread_* calls on ports that don&apos;t use JSC currently.

https://bugs.webkit.org/show_bug.cgi?id=51881</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330248</commentid>
    <comment_count>43</comment_count>
      <attachid>78133</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-06 11:18:47 -0800</bug_when>
    <thetext>Created attachment 78133
Patch for WinCE (with detectGrowingDownward)

Can you please r+ this patch?
It only added the required detectGrowingDownward function.

Diff to the already reviewed patch:

+static bool detectGrowingDownward(void* previousFrame)
+{
+    // Find the address of this stack frame by taking the address of a local variable.
+    int thisFrame;
+    return previousFrame &gt; &amp;thisFrame;
+}
+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330249</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-06 11:20:30 -0800</bug_when>
    <thetext>Attachment 78133 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/wtf/StackBounds.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/wtf/StackBounds.cpp:68:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 42 in 2 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>330358</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-06 13:10:21 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75180 might have broken Chromium Mac Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>330361</commentid>
    <comment_count>46</comment_count>
      <attachid>78133</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-01-06 13:12:17 -0800</bug_when>
    <thetext>Comment on attachment 78133
Patch for WinCE (with detectGrowingDownward)

Clearing flags on attachment: 78133

Manually committed r75180: &lt;http://trac.webkit.org/changeset/75180&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331014</commentid>
    <comment_count>47</comment_count>
      <attachid>78272</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-01-07 14:32:09 -0800</bug_when>
    <thetext>Created attachment 78272
Fix for win32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331017</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-07 14:34:48 -0800</bug_when>
    <thetext>Attachment 78272 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/wtf/StackBounds.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/wtf/StackBounds.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 2 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>331080</commentid>
    <comment_count>49</comment_count>
      <attachid>78272</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-01-07 15:55:02 -0800</bug_when>
    <thetext>Comment on attachment 78272
Fix for win32.

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

&gt; Source/JavaScriptCore/wtf/StackBounds.cpp:33
&gt; +#include &lt;stdio.h&gt;

Alphabetical sort, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331087</commentid>
    <comment_count>50</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-01-07 16:25:48 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 78272 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=78272&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/StackBounds.cpp:33
&gt; &gt; +#include &lt;stdio.h&gt;
&gt; 
&gt; Alphabetical sort, please.

Oops! - better still, include removed!
Fixed for win32 in r75289.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331826</commentid>
    <comment_count>51</comment_count>
      <attachid>78272</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-10 12:16:21 -0800</bug_when>
    <thetext>Comment on attachment 78272
Fix for win32.

I rolled this out in r75405. See bug 52156.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338984</commentid>
    <comment_count>52</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-01-24 06:55:50 -0800</bug_when>
    <thetext>Symbian fixed in Bug 52842. Updating title.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342891</commentid>
    <comment_count>53</comment_count>
      <attachid>77721</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-31 16:06:35 -0800</bug_when>
    <thetext>Comment on attachment 77721
Patch for WinCE

Cleared Gavin Barraclough&apos;s review+ from obsolete attachment 77721 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423244</commentid>
    <comment_count>54</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-18 13:42:41 -0700</bug_when>
    <thetext>Attachment 78272 was posted by a committer and has review+, assigning to Gavin Barraclough for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423288</commentid>
    <comment_count>55</comment_count>
      <attachid>78272</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-18 17:38:39 -0700</bug_when>
    <thetext>Comment on attachment 78272
Fix for win32.

Clearing all review flags; 78272 was landed but rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432407</commentid>
    <comment_count>56</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-05 14:29:28 -0700</bug_when>
    <thetext>*** Bug 22528 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432410</commentid>
    <comment_count>57</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-07-05 14:30:28 -0700</bug_when>
    <thetext>Updating title to reflect windows patch having been rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577762</commentid>
    <comment_count>58</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-13 13:41:15 -0700</bug_when>
    <thetext>*** Bug 17422 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66474</attachid>
            <date>2010-09-02 23:30:06 -0700</date>
            <delta_ts>2011-06-18 17:39:00 -0700</delta_ts>
            <desc>interpreteroverflow.diff</desc>
            <filename>interpreteroverflow.diff</filename>
            <type>text/plain</type>
            <size>7505</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBjNmE4MzUzMzBmMzM0MmZjNDA2ZTA0NmQxMmYzNTU4ZGE4NWViMjk4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBG
cmksIDMgU2VwIDIwMTAgMTU6MjQ6NTEgKzA5MDAKU3ViamVjdDogW1BBVENIXSAyMDEwLTA5LTAy
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgogICAgICAgIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHN0YWNr
IGV4dGVudAogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NjI3NgoKICAgICAgICBVc2UgYWN0dWFsIHN0YWNrIGV4dGVudCB2YWx1ZXMgaW5zdGVhZiBvZiBo
YXJkY29kZWQgKGFuZAogICAgICAgIGNvbnNlcnZhdGl2ZSkgY291bnQgYmFzZWQgbGltaXRzIHRv
IGNvbnRyb2wgcmVjdXJzaW9uIGluIHRoZQogICAgICAgIGludGVycHJldGVyLiBJdCdzIG5vdCBw
b3NzaWJsZSB0byBnZXQgcGVyZmVjdGx5IGFjY3VyYXRlIHZhbHVlcyBpbgogICAgICAgIGFsbCB0
aGUgcGxhdGZvcm1zIHNvIHRoaXMgaXMgc3RpbGwgYSBiaXQgb2YgYSBndWVzc3RpbWF0ZSwgYnV0
IGl0CiAgICAgICAgc2hvdWxkIGJlIGFuIGltcHJvdmVtZW50LgoKICAgICAgICBObyBuZXcgdGVz
dHMsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBqcyB0ZXN0cyBmb3Igc3RhY2sgb3ZlcmZsb3cuCgog
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgogICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpJbnRlcnByZXRlcik6CiAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhblJlY3Vy
c2UpOgogICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgogICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVj
dXRlQ29uc3RydWN0KToKICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVh
dENhbGwpOgogICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKLS0tCiBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgfCAgIDI0ICsrKysrKysrKysrKwog
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIHwgICA1MyArKysrKysr
KysrKysrKystLS0tLS0tLS0tLS0tCiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oICAgfCAgICAyICsKIDMgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgMjUg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdjYmY3ZjcuLjBjNjgzN2MgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNyBAQAorMjAxMC0wOS0wMiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVl
ZCBhIG1lY2hhbmlzbSB0byBkZXRlcm1pbmUgc3RhY2sgZXh0ZW50CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjI3NgorCisgICAgICAgIFVzZSBhY3R1
YWwgc3RhY2sgZXh0ZW50IHZhbHVlcyBpbnN0ZWFmIG9mIGhhcmRjb2RlZCAoYW5kCisgICAgICAg
IGNvbnNlcnZhdGl2ZSkgY291bnQgYmFzZWQgbGltaXRzIHRvIGNvbnRyb2wgcmVjdXJzaW9uIGlu
IHRoZQorICAgICAgICBpbnRlcnByZXRlci4gSXQncyBub3QgcG9zc2libGUgdG8gZ2V0IHBlcmZl
Y3RseSBhY2N1cmF0ZSB2YWx1ZXMgaW4KKyAgICAgICAgYWxsIHRoZSBwbGF0Zm9ybXMgc28gdGhp
cyBpcyBzdGlsbCBhIGJpdCBvZiBhIGd1ZXNzdGltYXRlLCBidXQgaXQKKyAgICAgICAgc2hvdWxk
IGJlIGFuIGltcHJvdmVtZW50LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgc2luY2Ugd2UgYWxy
ZWFkeSBoYXZlIGpzIHRlc3RzIGZvciBzdGFjayBvdmVyZmxvdy4KKworICAgICAgICAqIGludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OkludGVy
cHJldGVyKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhblJlY3Vyc2UpOgorICAgICAg
ICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
OjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3Ry
dWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToK
KyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorCiAyMDEwLTA5LTAyICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXgg
ZDQzZWI1Ny4uNjE5NmRhMSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9XVEZU
aHJlYWREYXRhLmg+CiAKICNpZiBFTkFCTEUoSklUKQogI2luY2x1ZGUgIkpJVC5oIgpAQCAtNzEs
NiArNzIsOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3Rh
dGljIGNvbnN0IHB0cmRpZmZfdCBrTWF4SW50ZXJwcmV0ZXJTdGFja1VzYWdlID0gMTI4ICogc2l6
ZW9mKHZvaWQqKSAqIDEwMjQ7CisKIC8vIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSBzY29wZSBj
aGFpbiB3aXRoaW4gYSBnaXZlbiBjYWxsIGZyYW1lLgogc3RhdGljIGludCBkZXB0aChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU2NvcGVDaGFpbiYgc2MpCiB7CkBAIC0zODMsNiArMzg2LDcgQEAgTkVW
RVJfSU5MSU5FIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBSZWdpc3RlckZpbGUqIHIKIEludGVycHJldGVyOjpJbnRlcnByZXRlcigpCiAgICAgOiBt
X3NhbXBsZUVudHJ5RGVwdGgoMCkKICAgICAsIG1fcmVlbnRyeURlcHRoKDApCisgICAgLCBtX2Vu
ZEFkZHJlc3MoMCkKIHsKICNpZiBFTkFCTEUoQ09NUFVURURfR09UT19JTlRFUlBSRVRFUikKICAg
ICBwcml2YXRlRXhlY3V0ZShJbml0aWFsaXplQW5kUmV0dXJuLCAwLCAwLCAwKTsKQEAgLTM5NCw2
ICszOTgsOCBAQCBJbnRlcnByZXRlcjo6SW50ZXJwcmV0ZXIoKQogI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCiAgICAgZW5hYmxlU2FtcGxlcigpOwogI2VuZGlmCisKKyAgICBtX2VuZEFkZHJl
c3MgPSB3dGZUaHJlYWREYXRhKCkuYXBwcm94aW1hdGVkU3RhY2tTdGFydCgpIC0ga01heEludGVy
cHJldGVyU3RhY2tVc2FnZTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTY0OCwxNSArNjU0LDIw
IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9u
KENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWCiAgICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAKK2Jv
b2wgSW50ZXJwcmV0ZXI6OmNhblJlY3Vyc2UoKQoreworICAgIGNoYXIgc2FtcGxlID0gMDsKKyAg
ICBBU1NFUlQobV9lbmRBZGRyZXNzKTsKKyAgICByZXR1cm4gJnNhbXBsZSA+IG1fZW5kQWRkcmVz
czsKK30KKwogSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBKU09iamVjdCogdGhpc09iaiwgSlNWYWx1ZSogZXhjZXB0aW9uKQogewogICAgIEFTU0VSVCgh
c2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKIAotICAgIGlmIChtX3JlZW50cnlE
ZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCkgewotICAgICAgICBpZiAobV9yZWVu
dHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKSB7Ci0g
ICAgICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFt
ZSk7Ci0gICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWNh
blJlY3Vyc2UoKSkgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGNhbGxGcmFtZSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKICAgICBK
U09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5jb21waWxlKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7
CkBAIC03MjEsMTEgKzczMiw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogZnVuY3Rpb24sIENhbGxUCiB7CiAgICAgQVNT
RVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIGlmIChtX3JlZW50cnlEZXB0
aCA+PSBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCkgewotICAgICAgICBpZiAobV9yZWVudHJ5
RGVwdGggPj0gY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKSB7Ci0gICAg
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7
Ci0gICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgIH0KKyAgICBpZiAoIWNhblJl
Y3Vyc2UoKSkgeworICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGNhbGxGcmFtZSk7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAKICAgICBSZWdp
c3Rlciogb2xkRW5kID0gbV9yZWdpc3RlckZpbGUuZW5kKCk7CkBAIC04MTksMTEgKzgyOCw5IEBA
IEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNPYmplY3QqIGNvbnN0cnVjCiB7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKTsKIAotICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBNYXhTbWFsbFRocmVhZFJl
ZW50cnlEZXB0aCkgewotICAgICAgICBpZiAobV9yZWVudHJ5RGVwdGggPj0gY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkubWF4UmVlbnRyeURlcHRoKSB7Ci0gICAgICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgfQorICAgIGlmICghY2FuUmVjdXJzZSgpKSB7CisgICAgICAgICpleGNlcHRp
b24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fcmVnaXN0ZXJGaWxlLmVuZCgp
OwpAQCAtOTIyLDExICs5MjksOSBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yUmVwZWF0Q2FsbChGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRQogewogICAgIEFT
U0VSVCghc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKICAgICAKLSAgICBpZiAo
bV9yZWVudHJ5RGVwdGggPj0gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGgpIHsKLSAgICAgICAg
aWYgKG1fcmVlbnRyeURlcHRoID49IGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm1heFJlZW50cnlE
ZXB0aCkgewotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJv
cihjYWxsRnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKLSAg
ICAgICAgfQorICAgIGlmICghY2FuUmVjdXJzZSgpKSB7CisgICAgICAgICpleGNlcHRpb24gPSBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIENhbGxG
cmFtZUNsb3N1cmUoKTsKICAgICB9CiAgICAgCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fcmVn
aXN0ZXJGaWxlLmVuZCgpOwpAQCAtMTAxMywxMSArMTAxOCw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U09iamVjCiB7CiAgICAgQVNTRVJUKCFzY29wZUNoYWluLT5nbG9iYWxEYXRhLT5leGNlcHRpb24p
OwogCi0gICAgaWYgKG1fcmVlbnRyeURlcHRoID49IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRo
KSB7Ci0gICAgICAgIGlmIChtX3JlZW50cnlEZXB0aCA+PSBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5tYXhSZWVudHJ5RGVwdGgpIHsKLSAgICAgICAgICAgICpleGNlcHRpb24gPSBjcmVhdGVTdGFj
a092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICAgICAgfQorICAgIGlmICghY2FuUmVjdXJzZSgpKSB7CisgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgIH0KIAogICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmpl
Y3RTY29wZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCk7CmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA1MGYwN2IzLi5jOThjNDk5IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTE1MiwxMCArMTUyLDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzQ2FsbEJ5dGVjb2RlKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbCkgfHwgb3Bjb2RlID09
IGdldE9wY29kZShvcF9jb25zdHJ1Y3QpIHx8IG9wY29kZSA9PSBnZXRPcGNvZGUob3BfY2FsbF9l
dmFsKTsgfQogCiAgICAgICAgIHZvaWQgZW5hYmxlU2FtcGxlcigpOworICAgICAgICBib29sIGNh
blJlY3Vyc2UoKTsKICAgICAgICAgaW50IG1fc2FtcGxlRW50cnlEZXB0aDsKICAgICAgICAgT3du
UHRyPFNhbXBsaW5nVG9vbD4gbV9zYW1wbGVyOwogCiAgICAgICAgIGludCBtX3JlZW50cnlEZXB0
aDsKKyAgICAgICAgY2hhciogbV9lbmRBZGRyZXNzOwogCiAgICAgICAgIFJlZ2lzdGVyRmlsZSBt
X3JlZ2lzdGVyRmlsZTsKICAgICAgICAgCi0tIAoxLjcuMi4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76981</attachid>
            <date>2010-12-20 00:51:33 -0800</date>
            <delta_ts>2010-12-20 12:43:39 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>StackBounds.patch</filename>
            <type>text/plain</type>
            <size>107058</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MzE3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTAtMTItMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20g
dG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGNs
YXNzICdTdGFja0JvdW5kcycsIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hY2hpbmUg
c3RhY2suCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGJyb2FkbHkg
YWRoZXJlcyB0byB0aGUgY3VycmVudCBpbXBsbWVudGF0aW9uIG9mCisgICAgICAgIHN0YWNrIGxp
bWl0IGNoZWNraW5nLCBhbmQgYXMgc3VjaCBkb2VzIG5vdCBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBk
ZXRlcm1pbmluZyBzdGFjaworICAgICAgICBleHRlbnQsIGJ1dCBnaXZlcyB1cyBhIGNvbW1vbiBw
bGFjZSB0byBkbyBzby4KKworICAgICAgICBDdXJyZW50bHkgdHdvIG1lY2hhbmlzbSBhcmUgcHJv
dmlkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBvcmlnaW4gKHRoZSBwb2ludCB0aGUKKyAgICAg
ICAgc3RhY2sgaXMgZ3Jvd2luZyBhd2F5IGZyb20pLiBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCkg
aW4gQ29sbGVjdG9yIHByb3ZpZGVzIGEKKyAgICAgICAgbW9yZSBhY2N1cmF0ZSBkZXRlcm1pbmF0
aW9uIG9mIHRoZSBzdGFjayBvcmlnaW4sIHNvIHVzZSB0aGlzIHRvIGNhbGN1bGF0ZQorICAgICAg
ICBTdGFja0JvdW5kczo6bV9vcmlnaW47IFdURlRocmVhZERhdGE6OmFwcHJveGltYXRlZFN0YWNr
U3RhcnQgaXMgbGVzcyBhY2N1cmF0ZSwgYW5kCisgICAgICAgIGFzIHN1Y2ggY2FuIGJlIHJlbW92
ZWQuICBDYWNoZSB0aGUgU3RhY2tCb3VuZHMgb24gV1RGVGhyZWFkRGF0YSBzdWNoIHRoYXQgdGhl
eQorICAgICAgICBuZWVkIG9ubHkgYmUgZGV0ZXJtaW5lZCBvbmNlIHBlciB0aHJlYWQsIGFuZCBm
b3Igbm9uLUFQSSBjb250ZXh0cyBjYWNoZSB0aGlzCisgICAgICAgIGluZm9ybWF0aW9uIGluIEpT
R2xvYmFsRGF0YSwgdG8gc2F2ZSBhIHRocmVhZC1zcGVjaWZpYyBhY2Nlc3MuCisKKyAgICAgICAg
Rm9yIHRoZSB0aW1lIGJlaW5nIHJldGFpbiB0aGUgZXN0aW1hdGUgb2Ygc3RhY2sgc2l6ZSB1c2Vk
IGJ5IEpTQydzIHBhcnNlcgorICAgICAgICAoMTI4ICogc2l6ZW9mKHZvaWQqKSAqIDEwMjQpLCB3
aXRoIGEgdmlldyB0byByZXBsYWNpbmcgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlCisgICAgICAg
IGFjY3VyYXRlIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAgICAgICAqIHBhcnNlci9KU1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpjYW5SZWN1cnNlKToKKyAgICAgICAgKEpT
Qzo6SlNQYXJzZXI6OkpTUGFyc2VyKToKKyAgICAgICAgICAgIENoYW5nZSB0byB1c2UgU3RhY2tC
b3VuZHMuCisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDdXJyZW50VGhy
ZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbCk6CisgICAgICAgICAgICBDaGFuZ2UgdG8gdXNlIFN0
YWNrQm91bmRzLCBjYWNoZWQgb24gSlNHbG9iYWxEYXRhLgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsRGF0YTo6c3RhY2spOgorICAgICAgICAgICAgQWRkIGEgY2FjaGVkIGNvcHkgb2YgU3RhY2tC
b3VuZHMuCisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmNwcDogQ29waWVkIGZyb20gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwLgorICAgICAgICAoV1RGOjplc3RpbWF0ZVN0
YWNrQm91bmQpOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXVEY6OmdldFN0YWNrTWF4KToKKyAgICAgICAgICAgIENvcHkgY29kZSBmcm9tIENvbGxl
Y3Rvci5jcHAgdG8gZGV0ZXJtaW5lIHN0YWNrIG9yaWdpbi4KKyAgICAgICAgKiB3dGYvU3RhY2tC
b3VuZHMuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6
CisgICAgICAgICAgICBObyBhcmd1bWVudCBjb25zdHJ1Y3RvcjsgcmV0dXJucyBhIG51bGwgU3Rh
Y2tCb3VuZHMuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tC
b3VuZHMpOgorICAgICAgICAgICAgUmV0dXJucyBhIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIHN0YWNrIGxpbWl0cworICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgdGhyZWFk
LgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6b3JpZ2luKToKKyAgICAgICAgICAgIFJldHVy
bnMgdG8gc3RhY2sgb3JpZ2luICh0aGUgcG9pbnQgdGhlIHN0YWNrIGlzIGdyb3dpbmcgYXdheQor
ICAgICAgICAgICAgZnJvbTsgdGhlIGhpZ2hlc3QgZXh0ZW50IG9mIHRoZSBzdGFjayBvbiBtYWNo
aW5lcyB3aGVyZSB0aGUKKyAgICAgICAgICAgIHN0YWNrIGdyb3dzIGRvd253YXJkcy4KKyAgICAg
ICAgKFdURjo6U3RhY2tCb3VuZHM6OnJlY3Vyc2lvbkxpbWl0KToKKyAgICAgICAgICAgIFJldHVy
bnMgYSBsaW1pdCB2YWx1ZSB0aGF0IGlzICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZyb20KKyAg
ICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhpcyBpcyBj
dXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93ZXZlciB0
aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBmdXR1cmUs
IGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhOworICAgICAg
ICAgICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlCisgICAgICAgICAgICBzdGFjayBvZiB0aGUgdGhyZWFkIHRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBvbiAoY2hlY2tlZCBieQorICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSkuCisg
ICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpyZWN1cnNpb25DaGVjayk6CisgICAgICAgICAgICBD
aGVja3Mgd2hldGhlciB3ZSBhcmUgY3VycmVudGx5ICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZy
b20KKyAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhp
cyBpcyBjdXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93
ZXZlciB0aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBm
dXR1cmUsIGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhCisg
ICAgICAgICAgICB0byBhcHBseSB3aGVuIGNoZWNraW5nLCBpZiB0aGV5IHdpc2ggdG8gZG8gc28u
IFRoaXMgbWV0aG9kCisgICAgICAgICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gU3RhY2tC
b3VuZHMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUKKyAgICAgICAgICAgIHN0YWNrIG9mIHRoZSB0
aHJlYWQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIChjaGVja2VkIGJ5CisgICAgICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KS4KKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OmN1cnJlbnQpOgor
ICAgICAgICAgICAgQXBwcm94aW1hdGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4gT24gbWFjaGlu
ZXMgd2hlcmUgdGhlIHN0YWNrCisgICAgICAgICAgICBpcyBncm93aW5nIGRvd253YXJkcyB0aGlz
IGlzIHRoZSBsb3dlc3QgYWRkcmVzcyB0aGF0IG1pZ2h0IG5lZWQKKyAgICAgICAgICAgIGNvbnNl
cnZhdGl2ZSBjb2xsZWN0aW9uLgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aXNHcm93aW5n
RG93bndhcmQpOgorICAgICAgICAgICAgVHJ1ZSBmb3IgYWxsIHBsYXRmb3JtcyBvdGhlciB0aGFu
IFdJTkNFLCB3aGljaCBoYXMgdG8gY2hlY2suCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGluIG1ldGhvZHMg
dGhhdCBzaG91bGRzIG9ubHkgYmUgb3BlcmF0aW5nIG9uIGEKKyAgICAgICAgICAgIHZhbGlkIHNl
dCBvZiBib3VuZHM7IGFzIHN1Y2ggd2UgZXhwZWN0IG1fb3JpZ2luICE9IG1fYm91bmRzCisgICAg
ICAgICAgICAoaS5lLiBzdGFjayBzaXplICE9IHplcm8pIC0gd2UncmUgcmVhbGx5IHRlc3Rpbmcg
dGhhdCB0aGlzCisgICAgICAgICAgICBvYmplY3QgaXMgbm90IG51bGwgKHRoZSBjb25zdHJ1Y3Rv
ciBpbml0aWFsaXplcyBib3RoIGZpZWxkcworICAgICAgICAgICAgdG8gemVybykuICBBbHNvIGNo
ZWNrcyB0aGF0IGN1cnJlbnQoKSBpcyB3aXRoaW4gdGhlIHN0YWNrJ3MKKyAgICAgICAgICAgIGJv
dW5kcy4KKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldU
RlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRh
Lmg6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNrKToKKyAgICAgICAgICAgIEFk
ZCB0aGUgU3RhY2tCb3VuZHMgbWVtYmVyIHZhcmlhYmxlLgorCiAyMDEwLTEyLTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MSw2ICsyNTEsOCBAQAogCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyog
TWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RDNCMkMyMTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5o
ICovOyB9OwogCQk4NkQzQjNDMzEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IzQzExMDE1OUQ3
RjAwMjg2NUU3IC8qIExpbmtCdWZmZXIuaCAqLzsgfTsKIAkJODZEM0IzQzQxMDE1OUQ3RjAwMjg2
NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmgg
Ki87IH07CisJCTg2RDg3REFFMTJCQ0E3RDEwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQ4N0RBNTEyQkM0
QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICovOyB9OworCQk4NkQ4N0REQjEyQkNBRjk0
MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RDg3REE2MTJCQzRCMTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2REI2
NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEQjY0NjMw
Rjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi87
IH07CiAJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTExNkIwMEZFNzVBQzgw
MEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAqLzsgfTsKIAkJODZFODU1MzkxMTFCOTk2ODAwMUFG
NTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRl
ci5oICovOyB9OwpAQCAtODY3LDYgKzg2OSw4IEBACiAJCTg2RDNCMkMyMTAxNTZCREUwMDI4NjVF
NyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYWNyb0Fzc2VtYmxlckFSTS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkQz
QjNDMTEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMaW5rQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2hCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODZEODdEQTUxMkJDNEIxNDAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YWNrQm91bmRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZEODdEQTYxMkJDNEIxNDAwOEU3M0ExIC8qIFN0
YWNrQm91bmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrQm91bmRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDky
MSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFMTE2QjAwRkU3NUFDODAwQjUxMkJDIC8q
IENvZGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlTG9j
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFODU1MzgxMTFCOTk2ODAw
MUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
NTUsNiArMTU1OSw4IEBACiAJCQkJNTFGNjQ4RDYwQkI0RTJDQTAwMzNENzYwIC8qIFJldGFpblB0
ci5oICovLAogCQkJCTk2OUEwNzI5MEVEMUNFNjkwMEYxRjY4MSAvKiBTZWdtZW50ZWRWZWN0b3Iu
aCAqLywKIAkJCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8s
CisJCQkJODZEODdEQTUxMkJDNEIxNDAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmNwcCAqLywKKwkJ
CQk4NkQ4N0RBNjEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuaCAqLywKIAkJCQk4NjhC
RkE1RjExN0QwNDgyMDBCOTA4QjEgLyogU3RhdGljQ29uc3RydWN0b3JzLmggKi8sCiAJCQkJRkUx
QjQ0NzkwRUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCUUxMUQ1MTc1
MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMuaCAqLywKQEAgLTIyOTIsNiArMjI5OCw3
IEBACiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQwMjc5IC8qIFNwZWNpYWxp
emVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RDg3RERCMTJCQ0FGOTQwMDhFNzNB
MSAvKiBTdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4QkZBNjAxMTdEMDQ4MjAw
QjkwOEIxIC8qIFN0YXRpY0NvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUxQjQ0
N0EwRUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZCOTlBRTMxMTdFNTc4MTAwREY1QTkwIC8qIFN0cmluZ0J1ZmZlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNDU3LDcgKzI0NjQsNiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAxNDlDMjc3MTA4OTAyQUZFMDA4QTlFRkMgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJKYXZhU2NyaXB0Q29yZSIgKi87CiAJCQljb21w
YXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBF
bmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMg
PSAoCiAJCQkJRW5nbGlzaCwKQEAgLTI3OTMsNiArMjc5OSw3IEBACiAJCQkJMTQ0NjlERUExMDdF
QzdFNzAwNjUwNDQ2IC8qIFNjb3BlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEJGMjhB
MjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk4NkQ4N0RBRTEyQkNBN0QxMDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2OEJGQTBFMTE3Q0VGRDEwMEI5MDhCMSAvKiBT
dHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0
NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvSlNQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNl
ci9KU1BhcnNlci5jcHAJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0pTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOSArNjUsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQ09NUElMRV9BU1NFUlQoTGFzdFVudGFnZ2VkVG9rZW4gPCA2NCwgTGVzc1RoYW42
NFVudGFnZ2VkVG9rZW5zKTsKIAotLy8gVGhpcyBtYXRjaGVzIHY4Ci1zdGF0aWMgY29uc3QgcHRy
ZGlmZl90IGtNYXhQYXJzZXJTdGFja1VzYWdlID0gMTI4ICogc2l6ZW9mKHZvaWQqKSAqIDEwMjQ7
Ci0KIGNsYXNzIEpTUGFyc2VyIHsKIHB1YmxpYzoKICAgICBKU1BhcnNlcihMZXhlciosIEpTR2xv
YmFsRGF0YSosIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wgaXNTdHJpY3RDb250ZXh0LCBib29s
IGlzRnVuY3Rpb24sIFNvdXJjZVByb3ZpZGVyKik7CkBAIC0xOTMsOSArMTkwLDcgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgY2FuUmVjdXJzZSgpCiAgICAgewotICAgICAgICBjaGFyIHNhbXBsZSA9
IDA7Ci0gICAgICAgIEFTU0VSVChtX2VuZEFkZHJlc3MpOwotICAgICAgICByZXR1cm4gJnNhbXBs
ZSA+IG1fZW5kQWRkcmVzczsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sucmVjdXJzaW9uQ2hlY2so
KTsKICAgICB9CiAgICAgCiAgICAgaW50IGxhc3RUb2tlbkVuZCgpIGNvbnN0CkBAIC0yMDUsNyAr
MjAwLDcgQEAgcHJpdmF0ZToKIAogICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7CiAgICAgTGV4ZXIq
IG1fbGV4ZXI7Ci0gICAgY2hhciogbV9lbmRBZGRyZXNzOworICAgIFN0YWNrQm91bmRzIG1fc3Rh
Y2s7CiAgICAgYm9vbCBtX2Vycm9yOwogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwog
ICAgIEpTVG9rZW4gbV90b2tlbjsKQEAgLTQ5MSw3ICs0ODYsNyBAQCBpbnQganNQYXJzZShKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhCiAKIEpTUGFyc2VyOjpKU1BhcnNlcihMZXhlciogbGV4
ZXIsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzLCBib29sIGluU3RyaWN0Q29udGV4dCwgYm9vbCBpc0Z1bmN0aW9uLCBTb3VyY2VQcm92aWRl
ciogcHJvdmlkZXIpCiAgICAgOiBtX2xleGVyKGxleGVyKQotICAgICwgbV9lbmRBZGRyZXNzKDAp
CisgICAgLCBtX3N0YWNrKGdsb2JhbERhdGEtPnN0YWNrKCkpCiAgICAgLCBtX2Vycm9yKGZhbHNl
KQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX2FsbG93c0luKHRydWUp
CkBAIC01MDUsNyArNTAwLDYgQEAgSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhlciwgSlNH
bG9iYQogICAgICwgbV9ub25Ucml2aWFsRXhwcmVzc2lvbkNvdW50KDApCiAgICAgLCBtX2xhc3RJ
ZGVudGlmaWVyKDApCiB7Ci0gICAgbV9lbmRBZGRyZXNzID0gd3RmVGhyZWFkRGF0YSgpLmFwcHJv
eGltYXRlZFN0YWNrU3RhcnQoKSAtIGtNYXhQYXJzZXJTdGFja1VzYWdlOwogICAgIFNjb3BlUmVm
IHNjb3BlID0gcHVzaFNjb3BlKCk7CiAgICAgaWYgKGlzRnVuY3Rpb24pCiAgICAgICAgIHNjb3Bl
LT5zZXRJc0Z1bmN0aW9uKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3Bw
CShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDE3NSArMzg5LDYgQEAgdm9pZCBIZWFwOjpzaHJpbmtC
bG9ja3Moc2l6ZV90IG5lZWRlZEJsbwogICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSkt
Pm1hcmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOwogfQogCi0jaWYg
T1MoV0lOQ0UpCi1KU19FWFBPUlREQVRBIHZvaWQqIGdfc3RhY2tCYXNlID0gMDsKLQotaW5saW5l
IGJvb2wgaXNQYWdlV3JpdGFibGUodm9pZCogcGFnZSkKLXsKLSAgICBNRU1PUllfQkFTSUNfSU5G
T1JNQVRJT04gbWVtb3J5SW5mb3JtYXRpb247Ci0gICAgRFdPUkQgcmVzdWx0ID0gVmlydHVhbFF1
ZXJ5KHBhZ2UsICZtZW1vcnlJbmZvcm1hdGlvbiwgc2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSk7
Ci0KLSAgICAvLyByZXR1cm4gZmFsc2Ugb24gZXJyb3IsIGluY2x1ZGluZyBwdHIgb3V0c2lkZSBt
ZW1vcnkKLSAgICBpZiAocmVzdWx0ICE9IHNpemVvZihtZW1vcnlJbmZvcm1hdGlvbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIERXT1JEIHByb3RlY3QgPSBtZW1vcnlJbmZvcm1hdGlv
bi5Qcm90ZWN0ICYgfihQQUdFX0dVQVJEIHwgUEFHRV9OT0NBQ0hFKTsKLSAgICByZXR1cm4gcHJv
dGVjdCA9PSBQQUdFX1JFQURXUklURQotICAgICAgICB8fCBwcm90ZWN0ID09IFBBR0VfV1JJVEVD
T1BZCi0gICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9FWEVDVVRFX1JFQURXUklURQotICAgICAg
ICB8fCBwcm90ZWN0ID09IFBBR0VfRVhFQ1VURV9XUklURUNPUFk7Ci19Ci0KLXN0YXRpYyB2b2lk
KiBnZXRTdGFja0Jhc2Uodm9pZCogcHJldmlvdXNGcmFtZSkKLXsKLSAgICAvLyBmaW5kIHRoZSBh
ZGRyZXNzIG9mIHRoaXMgc3RhY2sgZnJhbWUgYnkgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgbG9j
YWwgdmFyaWFibGUKLSAgICBib29sIGlzR3Jvd2luZ0Rvd253YXJkOwotICAgIHZvaWQqIHRoaXNG
cmFtZSA9ICh2b2lkKikoJmlzR3Jvd2luZ0Rvd253YXJkKTsKLQotICAgIGlzR3Jvd2luZ0Rvd253
YXJkID0gcHJldmlvdXNGcmFtZSA8ICZ0aGlzRnJhbWU7Ci0gICAgc3RhdGljIERXT1JEIHBhZ2VT
aXplID0gMDsKLSAgICBpZiAoIXBhZ2VTaXplKSB7Ci0gICAgICAgIFNZU1RFTV9JTkZPIHN5c3Rl
bUluZm87Ci0gICAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbUluZm8pOwotICAgICAgICBwYWdl
U2l6ZSA9IHN5c3RlbUluZm8uZHdQYWdlU2l6ZTsKLSAgICB9Ci0KLSAgICAvLyBzY2FuIGFsbCBv
ZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBsYXN0IHdy
aXRlYWJsZSBwYWdlIGZvdW5kCi0gICAgcmVnaXN0ZXIgY2hhciogY3VycmVudFBhZ2UgPSAoY2hh
ciopKChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkpOwotICAgIGlmIChpc0dyb3dp
bmdEb3dud2FyZCkgewotICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7Ci0gICAgICAg
ICAgICAvLyBjaGVjayBmb3IgdW5kZXJmbG93Ci0gICAgICAgICAgICBpZiAoY3VycmVudFBhZ2Ug
Pj0gKGNoYXIqKXBhZ2VTaXplKQotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09IHBhZ2VT
aXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMDsK
LSAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFibGUgcmV0
dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5Ci0gICAgICAgICAgICBjdXJyZW50UGFnZSArPSBw
YWdlU2l6ZTsKLSAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsKLSAgICAgICAgfQotICAgIH0KLX0K
LSNlbmRpZgotCi0jaWYgT1MoUU5YKQotc3RhdGljIGlubGluZSB2b2lkICpjdXJyZW50VGhyZWFk
U3RhY2tCYXNlUU5YKCkKLXsKLSAgICBzdGF0aWMgdm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBz
dGF0aWMgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7Ci0gICAgc3RhdGljIHB0aHJlYWRfdCBzdGFja1Ro
cmVhZDsKLSAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgaWYgKHN0
YWNrQmFzZSA9PSAwIHx8IHRocmVhZCAhPSBzdGFja1RocmVhZCkgewotICAgICAgICBzdHJ1Y3Qg
X2RlYnVnX3RocmVhZF9pbmZvIHRocmVhZEluZm87Ci0gICAgICAgIG1lbXNldCgmdGhyZWFkSW5m
bywgMCwgc2l6ZW9mKHRocmVhZEluZm8pKTsKLSAgICAgICAgdGhyZWFkSW5mby50aWQgPSBwdGhy
ZWFkX3NlbGYoKTsKLSAgICAgICAgaW50IGZkID0gb3BlbigiL3Byb2Mvc2VsZiIsIE9fUkRPTkxZ
KTsKLSAgICAgICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBvcGVuIC9wcm9jL3NlbGYgKGVycm5vOiAlZCkiLCBlcnJubyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBkZXZjdGwoZmQsIERDTURfUFJPQ19USURTVEFU
VVMsICZ0aHJlYWRJbmZvLCBzaXplb2YodGhyZWFkSW5mbyksIDApOwotICAgICAgICBjbG9zZShm
ZCk7Ci0gICAgICAgIHN0YWNrQmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZElu
Zm8uc3RrYmFzZSk7Ci0gICAgICAgIHN0YWNrU2l6ZSA9IHRocmVhZEluZm8uc3Rrc2l6ZTsKLSAg
ICAgICAgQVNTRVJUKHN0YWNrQmFzZSk7Ci0gICAgICAgIHN0YWNrVGhyZWFkID0gdGhyZWFkOwot
ICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1Np
emU7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkKiBjdXJyZW50VGhyZWFkU3RhY2tC
YXNlKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgcHRocmVhZF90IHRocmVhZCA9IHB0aHJlYWRf
c2VsZigpOwotICAgIHJldHVybiBwdGhyZWFkX2dldF9zdGFja2FkZHJfbnAodGhyZWFkKTsKLSNl
bGlmIE9TKFdJTkRPV1MpICYmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMpCi0gICAgLy8gb2Zm
c2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBvaW50ZXIgdG8K
LSAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3VycmVudCB0aHJl
YWQKLSAgICBOVF9USUIqIHBUaWI7Ci0gICAgX19hc20gewotICAgICAgICBNT1YgRUFYLCBGUzpb
MThoXQotICAgICAgICBNT1YgcFRpYiwgRUFYCi0gICAgfQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx2b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsKLSNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODYp
ICYmIENPTVBJTEVSKEdDQykKLSAgICAvLyBvZmZzZXQgMHgxOCBmcm9tIHRoZSBGUyBzZWdtZW50
IHJlZ2lzdGVyIGdpdmVzIGEgcG9pbnRlciB0bwotICAgIC8vIHRoZSB0aHJlYWQgaW5mb3JtYXRp
b24gYmxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZAotICAgIE5UX1RJQiogcFRpYjsKLSAgICBh
c20gKCAibW92bCAlJWZzOjB4MTgsICUwXG4iCi0gICAgICAgICAgOiAiPXIiIChwVGliKQotICAg
ICAgICApOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsK
LSNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAgUE5UX1RJQjY0IHBUaWIgPSBy
ZWludGVycHJldF9jYXN0PFBOVF9USUI2ND4oTnRDdXJyZW50VGViKCkpOwotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwotI2VsaWYgT1MoUU5YKQot
ICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0gKm5ldyBNdXRl
eCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4KTsKLSAgICByZXR1cm4gY3VycmVudFRo
cmVhZFN0YWNrQmFzZVFOWCgpOwotI2VsaWYgT1MoU09MQVJJUykKLSAgICBzdGFja190IHM7Ci0g
ICAgdGhyX3N0a3NlZ21lbnQoJnMpOwotICAgIHJldHVybiBzLnNzX3NwOwotI2VsaWYgT1MoT1BF
TkJTRCkKLSAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgc3RhY2tf
dCBzdGFjazsKLSAgICBwdGhyZWFkX3N0YWNrc2VnX25wKHRocmVhZCwgJnN0YWNrKTsKLSAgICBy
ZXR1cm4gc3RhY2suc3Nfc3A7Ci0jZWxpZiBPUyhTWU1CSUFOKQotICAgIFRUaHJlYWRTdGFja0lu
Zm8gaW5mbzsKLSAgICBSVGhyZWFkIHRocmVhZDsKLSAgICB0aHJlYWQuU3RhY2tJbmZvKGluZm8p
OwotICAgIHJldHVybiAodm9pZCopaW5mby5pQmFzZTsKLSNlbGlmIE9TKEhBSUtVKQotICAgIHRo
cmVhZF9pbmZvIHRocmVhZEluZm87Ci0gICAgZ2V0X3RocmVhZF9pbmZvKGZpbmRfdGhyZWFkKE5V
TEwpLCAmdGhyZWFkSW5mbyk7Ci0gICAgcmV0dXJuIHRocmVhZEluZm8uc3RhY2tfZW5kOwotI2Vs
aWYgT1MoVU5JWCkKLSAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgmLCBtdXRl
eCA9ICpuZXcgTXV0ZXgpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7Ci0gICAgc3Rh
dGljIHZvaWQqIHN0YWNrQmFzZSA9IDA7Ci0gICAgc3RhdGljIHNpemVfdCBzdGFja1NpemUgPSAw
OwotICAgIHN0YXRpYyBwdGhyZWFkX3Qgc3RhY2tUaHJlYWQ7Ci0gICAgcHRocmVhZF90IHRocmVh
ZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIGlmIChzdGFja0Jhc2UgPT0gMCB8fCB0aHJlYWQgIT0g
c3RhY2tUaHJlYWQpIHsKLSAgICAgICAgcHRocmVhZF9hdHRyX3Qgc2F0dHI7Ci0gICAgICAgIHB0
aHJlYWRfYXR0cl9pbml0KCZzYXR0cik7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5F
VEJTRCkKLSAgICAgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZwot
ICAgICAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRocmVhZCwgJnNhdHRyKTsKLSNlbHNlCi0gICAg
ICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVgg
c3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0ZXJuYXRpdmVzCi0gICAgICAgIHB0aHJl
YWRfZ2V0YXR0cl9ucCh0aHJlYWQsICZzYXR0cik7Ci0jZW5kaWYKLSAgICAgICAgaW50IHJjID0g
cHRocmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7Ci0g
ICAgICAgICh2b2lkKXJjOyAvLyBGSVhNRTogRGVhbCB3aXRoIGVycm9yIGNvZGUgc29tZWhvdz8g
U2VlbXMgZmF0YWwuCi0gICAgICAgIEFTU0VSVChzdGFja0Jhc2UpOwotICAgICAgICBwdGhyZWFk
X2F0dHJfZGVzdHJveSgmc2F0dHIpOwotICAgICAgICBzdGFja1RocmVhZCA9IHRocmVhZDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXpl
OwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4
JiwgbXV0ZXggPSAqbmV3IE11dGV4KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobXV0ZXgpOwot
ICAgIGlmIChnX3N0YWNrQmFzZSkKLSAgICAgICAgcmV0dXJuIGdfc3RhY2tCYXNlOwotICAgIGVs
c2UgewotICAgICAgICBpbnQgZHVtbXk7Ci0gICAgICAgIHJldHVybiBnZXRTdGFja0Jhc2UoJmR1
bW15KTsKLSAgICB9Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBi
YXNlIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBM
RV9USFJFQURTKQogCiBzdGF0aWMgaW5saW5lIFBsYXRmb3JtVGhyZWFkIGdldEN1cnJlbnRQbGF0
Zm9ybVRocmVhZCgpCkBAIC01ODcsNyArNDE4LDcgQEAgdm9pZCBIZWFwOjpyZWdpc3RlclRocmVh
ZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9jdXJyZW50
VGhyZWFkUmVnaXN0cmFyLCB0aGlzKTsKLSAgICBIZWFwOjpUaHJlYWQqIHRocmVhZCA9IG5ldyBI
ZWFwOjpUaHJlYWQocHRocmVhZF9zZWxmKCksIGdldEN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpLCBj
dXJyZW50VGhyZWFkU3RhY2tCYXNlKCkpOworICAgIEhlYXA6OlRocmVhZCogdGhyZWFkID0gbmV3
IEhlYXA6OlRocmVhZChwdGhyZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCks
IG1fZ2xvYmFsRGF0YS0+c3RhY2soKS5vcmlnaW4oKSk7CiAKICAgICBNdXRleExvY2tlciBsb2Nr
KG1fcmVnaXN0ZXJlZFRocmVhZHNNdXRleCk7CiAKQEAgLTY1NCwxMSArNDg1LDE1IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc1Bvc3NpYmxlQ2VsbCh2b2lkKiAKIAogdm9pZCBIZWFwOjptYXJrQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2ssIHZvaWQqIHN0YXJ0LCB2b2lkKiBlbmQp
CiB7CisjaWYgT1MoV0lOQ0UpCiAgICAgaWYgKHN0YXJ0ID4gZW5kKSB7CiAgICAgICAgIHZvaWQq
IHRtcCA9IHN0YXJ0OwogICAgICAgICBzdGFydCA9IGVuZDsKICAgICAgICAgZW5kID0gdG1wOwog
ICAgIH0KKyNlbHNlCisgICAgQVNTRVJUKHN0YXJ0IDw9IGVuZCk7CisjZW5kaWYKIAogICAgIEFT
U0VSVCgoc3RhdGljX2Nhc3Q8Y2hhcio+KGVuZCkgLSBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhcnQp
KSA8IDB4MTAwMDAwMCk7CiAgICAgQVNTRVJUKGlzUG9pbnRlckFsaWduZWQoc3RhcnQpKTsKQEAg
LTY5MiwxMCArNTI3LDcgQEAgdm9pZCBIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkoTWFya1N0YWNr
JgogCiB2b2lkIE5FVkVSX0lOTElORSBIZWFwOjptYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2
ZWx5SW50ZXJuYWwoTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7Ci0gICAgdm9pZCogZHVtbXk7Ci0g
ICAgdm9pZCogc3RhY2tQb2ludGVyID0gJmR1bW15OwotICAgIHZvaWQqIHN0YWNrQmFzZSA9IGN1
cnJlbnRUaHJlYWRTdGFja0Jhc2UoKTsKLSAgICBtYXJrQ29uc2VydmF0aXZlbHkobWFya1N0YWNr
LCBzdGFja1BvaW50ZXIsIHN0YWNrQmFzZSk7CisgICAgbWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtT
dGFjaywgbV9nbG9iYWxEYXRhLT5zdGFjaygpLmN1cnJlbnQoKSwgbV9nbG9iYWxEYXRhLT5zdGFj
aygpLm9yaWdpbigpKTsKICAgICBtYXJrU3RhY2suZHJhaW4oKTsKIH0KIApJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Myw2ICsxNTMsOSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAg
ICAgLCBleGNsdXNpdmVUaHJlYWQoMCkKICNlbmRpZgogeworICAgIGlmIChnbG9iYWxEYXRhVHlw
ZSA9PSBEZWZhdWx0KQorICAgICAgICBtX3N0YWNrID0gd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7
CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgc3RhcnRQcm9maWxlclNlcnZlcklmTmVlZGVkKCk7
CiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNp
b24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5o
PgorI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2VuZGlmCkBAIC0xNzgsNiArMTc5
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vsc2UKICAgICAgICAgYm9vbCBjYW5Vc2VKSVQoKSB7
IHJldHVybiBtX2NhblVzZUpJVDsgfQogI2VuZGlmCisKKyAgICAgICAgY29uc3QgU3RhY2tCb3Vu
ZHMmIHN0YWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChnbG9iYWxEYXRhVHlw
ZSA9PSBEZWZhdWx0KQorICAgICAgICAgICAgICAgID8gbV9zdGFjaworICAgICAgICAgICAgICAg
IDogd3RmVGhyZWFkRGF0YSgpLnN0YWNrKCk7CisgICAgICAgIH0KKwogICAgICAgICBMZXhlciog
bGV4ZXI7CiAgICAgICAgIFBhcnNlciogcGFyc2VyOwogICAgICAgICBJbnRlcnByZXRlciogaW50
ZXJwcmV0ZXI7CkBAIC0yNTAsNiArMjU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxF
KEpJVCkgJiYgRU5BQkxFKElOVEVSUFJFVEVSKQogICAgICAgICBib29sIG1fY2FuVXNlSklUOwog
I2VuZGlmCisgICAgICAgIFN0YWNrQm91bmRzIG1fc3RhY2s7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAJKHJldmlzaW9uIDc0
MzA2KQkoZnJvbSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHA6NzQzMDYpCisr
KyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb2xsZWN0b3IuaCIKKworI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDYWxs
RnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2xsZWN0b3JIZWFw
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKKyNp
bmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1pv
bWJpZS5oIgorI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5j
bHVkZSAiVHJhY2luZy5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxsaW1pdHMu
aD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Cisj
aW5jbHVkZSA8d3RmL1ZNVGFncy5oPgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFj
aC9tYWNoX2luaXQuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2luY2x1ZGUgPG1h
Y2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2luY2x1ZGUgPG1hY2gv
dm1fbWFwLmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+Cisj
aW5jbHVkZSA8bWFsbG9jLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1MuaD4K
KworI2VsaWYgT1MoVU5JWCkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICFPUyhIQUlLVSkK
KyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNp
ZiBPUyhTT0xBUklTKQorI2luY2x1ZGUgPHRocmVhZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwdGhy
ZWFkLmg+CisjZW5kaWYKKworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQorI2luY2x1ZGUgPHB0aHJl
YWRfbnAuaD4KKyNlbmRpZgorCisjaWYgT1MoUU5YKQorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j
bHVkZSA8c3lzL3Byb2Nmcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNlbmRpZgorCisjZW5kaWYKKworI2RlZmluZSBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJ
T04gMAorCit1c2luZyBzdGQ6Om1heDsKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIHR1bmFibGUg
cGFyYW1ldGVycworCitjb25zdCBzaXplX3QgR1JPV1RIX0ZBQ1RPUiA9IDI7Citjb25zdCBzaXpl
X3QgTE9XX1dBVEVSX0ZBQ1RPUiA9IDQ7Citjb25zdCBzaXplX3QgQUxMT0NBVElPTlNfUEVSX0NP
TExFQ1RJT04gPSAzNjAwOworLy8gVGhpcyB2YWx1ZSBoYXMgdG8gYmUgYSBtYWNybyB0byBiZSB1
c2VkIGluIG1heCgpIHdpdGhvdXQgaW50cm9kdWNpbmcKKy8vIGEgUElDIGJyYW5jaCBpbiBNYWNo
LU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCisjZGVmaW5lIE1JTl9B
UlJBWV9TSVpFIChzdGF0aWNfY2FzdDxzaXplX3Q+KDE0KSkKKworI2lmIEVOQUJMRShKU0NfTVVM
VElQTEVfVEhSRUFEUykKKworI2lmIE9TKERBUldJTikKK3R5cGVkZWYgbWFjaF9wb3J0X3QgUGxh
dGZvcm1UaHJlYWQ7CisjZWxpZiBPUyhXSU5ET1dTKQordHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1U
aHJlYWQ7CisjZW5kaWYKKworY2xhc3MgSGVhcDo6VGhyZWFkIHsKK3B1YmxpYzoKKyAgICBUaHJl
YWQocHRocmVhZF90IHB0aHJlYWQsIGNvbnN0IFBsYXRmb3JtVGhyZWFkJiBwbGF0VGhyZWFkLCB2
b2lkKiBiYXNlKSAKKyAgICAgICAgOiBwb3NpeFRocmVhZChwdGhyZWFkKQorICAgICAgICAsIHBs
YXRmb3JtVGhyZWFkKHBsYXRUaHJlYWQpCisgICAgICAgICwgc3RhY2tCYXNlKGJhc2UpCisgICAg
eworICAgIH0KKworICAgIFRocmVhZCogbmV4dDsKKyAgICBwdGhyZWFkX3QgcG9zaXhUaHJlYWQ7
CisgICAgUGxhdGZvcm1UaHJlYWQgcGxhdGZvcm1UaHJlYWQ7CisgICAgdm9pZCogc3RhY2tCYXNl
OworfTsKKworI2VuZGlmCisKK0hlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
ICAgIDogbV9tYXJrTGlzdFNldCgwKQorI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykK
KyAgICAsIG1fcmVnaXN0ZXJlZFRocmVhZHMoMCkKKyAgICAsIG1fY3VycmVudFRocmVhZFJlZ2lz
dHJhcigwKQorI2VuZGlmCisgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKK3sKKyAgICBB
U1NFUlQoZ2xvYmFsRGF0YSk7CisgICAgbWVtc2V0KCZtX2hlYXAsIDAsIHNpemVvZihDb2xsZWN0
b3JIZWFwKSk7CisgICAgYWxsb2NhdGVCbG9jaygpOworICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9
IERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSh0aGlzKTsKKyAgICAoKm1fYWN0aXZp
dHlDYWxsYmFjaykoKTsKK30KKworSGVhcDo6fkhlYXAoKQoreworICAgIC8vIFRoZSBkZXN0cm95
IGZ1bmN0aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkLCBzbyBhc3NlcnQgdGhpcy4K
KyAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgSGVhcDo6ZGVzdHJveSgpCit7
CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIGlmICghbV9n
bG9iYWxEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+
ZHluYW1pY0dsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKCFpc0J1c3koKSk7CisgICAgCisgICAg
Ly8gVGhlIGdsb2JhbCBvYmplY3QgaXMgbm90IEdDIHByb3RlY3RlZCBhdCB0aGlzIHBvaW50LCBz
byBzd2VlcGluZyBtYXkgZGVsZXRlIGl0CisgICAgLy8gKGFuZCB0aHVzIHRoZSBnbG9iYWwgZGF0
YSkgYmVmb3JlIG90aGVyIG9iamVjdHMgdGhhdCBtYXkgdXNlIHRoZSBnbG9iYWwgZGF0YS4KKyAg
ICBSZWZQdHI8SlNHbG9iYWxEYXRhPiBwcm90ZWN0KG1fZ2xvYmFsRGF0YSk7CisKKyAgICBkZWxl
dGUgbV9tYXJrTGlzdFNldDsKKyAgICBtX21hcmtMaXN0U2V0ID0gMDsKKworICAgIGZyZWVCbG9j
a3MoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3dlYWtHQ0hhbmRsZVBvb2xz
LnNpemUoKTsgKytpKQorICAgICAgICBtX3dlYWtHQ0hhbmRsZVBvb2xzW2ldLmRlYWxsb2NhdGUo
KTsKKworI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKKyAgICBpZiAobV9jdXJyZW50
VGhyZWFkUmVnaXN0cmFyKSB7CisgICAgICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2RlbGV0
ZShtX2N1cnJlbnRUaHJlYWRSZWdpc3RyYXIpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9y
LCAhZXJyb3IpOworICAgIH0KKworICAgIE11dGV4TG9ja2VyIHJlZ2lzdGVyZWRUaHJlYWRzTG9j
ayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOworICAgIGZvciAoSGVhcDo6VGhyZWFkKiB0ID0g
bV9yZWdpc3RlcmVkVGhyZWFkczsgdDspIHsKKyAgICAgICAgSGVhcDo6VGhyZWFkKiBuZXh0ID0g
dC0+bmV4dDsKKyAgICAgICAgZGVsZXRlIHQ7CisgICAgICAgIHQgPSBuZXh0OworICAgIH0KKyNl
bmRpZgorICAgIG1fYmxvY2thbGxvY2F0b3IuZGVzdHJveSgpOworICAgIG1fZ2xvYmFsRGF0YSA9
IDA7Cit9CisKK05FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVhcDo6YWxsb2NhdGVCbG9j
aygpCit7CisgICAgQWxpZ25lZENvbGxlY3RvckJsb2NrIGFsbG9jYXRpb24gPSBtX2Jsb2NrYWxs
b2NhdG9yLmFsbG9jYXRlKCk7CisgICAgQ29sbGVjdG9yQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nh
c3Q8Q29sbGVjdG9yQmxvY2sqPihhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgaWYgKCFibG9jaykK
KyAgICAgICAgQ1JBU0goKTsKKworICAgIC8vIEluaXRpYWxpemUgYmxvY2suCisKKyAgICBibG9j
ay0+aGVhcCA9IHRoaXM7CisgICAgY2xlYXJNYXJrQml0cyhibG9jayk7CisKKyAgICBTdHJ1Y3R1
cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9nbG9iYWxEYXRhLT5kdW1teU1hcmth
YmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhlYXBD
b25zdGFudHM6OmNlbGxzUGVyQmxvY2s7ICsraSkKKyAgICAgICAgbmV3ICgmYmxvY2stPmNlbGxz
W2ldKSBKU0NlbGwoZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOworICAgIAorICAgIC8vIEFk
ZCBibG9jayB0byBibG9ja3MgdmVjdG9yLgorCisgICAgc2l6ZV90IG51bUJsb2NrcyA9IG1faGVh
cC5udW1CbG9ja3M7CisgICAgaWYgKG1faGVhcC51c2VkQmxvY2tzID09IG51bUJsb2Nrcykgewor
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heE51bUJsb2NrcyA9IFVMT05HX01BWCAvIHNp
emVvZihBbGlnbmVkQ29sbGVjdG9yQmxvY2spIC8gR1JPV1RIX0ZBQ1RPUjsKKyAgICAgICAgaWYg
KG51bUJsb2NrcyA+IG1heE51bUJsb2NrcykKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IG51bUJsb2NrcyA9IG1heChNSU5fQVJSQVlfU0laRSwgbnVtQmxvY2tzICogR1JPV1RIX0ZBQ1RP
Uik7CisgICAgICAgIG1faGVhcC5udW1CbG9ja3MgPSBudW1CbG9ja3M7CisgICAgICAgIG1faGVh
cC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxBbGlnbmVkQ29sbGVjdG9yQmxvY2sqPihmYXN0UmVhbGxv
YyhtX2hlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQWxpZ25lZENvbGxlY3RvckJsb2Nr
KSkpOworICAgIH0KKyAgICBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzKytdID0gYWxs
b2NhdGlvbjsKKworICAgIHJldHVybiBibG9jazsKK30KKworTkVWRVJfSU5MSU5FIHZvaWQgSGVh
cDo6ZnJlZUJsb2NrKHNpemVfdCBibG9jaykKK3sKKyAgICBtX2hlYXAuZGlkU2hyaW5rID0gdHJ1
ZTsKKworICAgIE9iamVjdEl0ZXJhdG9yIGl0KG1faGVhcCwgYmxvY2spOworICAgIE9iamVjdEl0
ZXJhdG9yIGVuZChtX2hlYXAsIGJsb2NrICsgMSk7CisgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICgqaXQpLT5+SlNDZWxsKCk7CisgICAgbV9oZWFwLmJsb2Nrc1tibG9ja10u
ZGVhbGxvY2F0ZSgpOworCisgICAgLy8gc3dhcCB3aXRoIHRoZSBsYXN0IGJsb2NrIHNvIHdlIGNv
bXBhY3QgYXMgd2UgZ28KKyAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXSA9IG1faGVhcC5ibG9ja3Nb
bV9oZWFwLnVzZWRCbG9ja3MgLSAxXTsKKyAgICBtX2hlYXAudXNlZEJsb2Nrcy0tOworCisgICAg
aWYgKG1faGVhcC5udW1CbG9ja3MgPiBNSU5fQVJSQVlfU0laRSAmJiBtX2hlYXAudXNlZEJsb2Nr
cyA8IG1faGVhcC5udW1CbG9ja3MgLyBMT1dfV0FURVJfRkFDVE9SKSB7CisgICAgICAgIG1faGVh
cC5udW1CbG9ja3MgPSBtX2hlYXAubnVtQmxvY2tzIC8gR1JPV1RIX0ZBQ1RPUjsgCisgICAgICAg
IG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxBbGlnbmVkQ29sbGVjdG9yQmxvY2sqPihmYXN0
UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKEFsaWduZWRD
b2xsZWN0b3JCbG9jaykpKTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6ZnJlZUJsb2NrcygpCit7
CisgICAgUHJvdGVjdENvdW50U2V0IHByb3RlY3RlZFZhbHVlc0NvcHkgPSBtX3Byb3RlY3RlZFZh
bHVlczsKKworICAgIGNsZWFyTWFya0JpdHMoKTsKKyAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJh
dG9yIHByb3RlY3RlZFZhbHVlc0VuZCA9IHByb3RlY3RlZFZhbHVlc0NvcHkuZW5kKCk7CisgICAg
Zm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gcHJvdGVjdGVkVmFsdWVzQ29weS5i
ZWdpbigpOyBpdCAhPSBwcm90ZWN0ZWRWYWx1ZXNFbmQ7ICsraXQpCisgICAgICAgIG1hcmtDZWxs
KGl0LT5maXJzdCk7CisKKyAgICBtX2hlYXAubmV4dENlbGwgPSAwOworICAgIG1faGVhcC5uZXh0
QmxvY2sgPSAwOworICAgIERlYWRPYmplY3RJdGVyYXRvciBpdChtX2hlYXAsIG1faGVhcC5uZXh0
QmxvY2ssIG1faGVhcC5uZXh0Q2VsbCk7CisgICAgRGVhZE9iamVjdEl0ZXJhdG9yIGVuZChtX2hl
YXAsIG1faGVhcC51c2VkQmxvY2tzKTsKKyAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgKCppdCktPn5KU0NlbGwoKTsKKworICAgIEFTU0VSVCghcHJvdGVjdGVkT2JqZWN0Q291
bnQoKSk7CisKKyAgICBwcm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRWYWx1ZXNDb3B5LmVu
ZCgpOworICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IHByb3RlY3RlZFZh
bHVlc0NvcHkuYmVnaW4oKTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyArK2l0KQorICAgICAg
ICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKKworICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxv
Y2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKKyAgICAgICAgbV9oZWFwLmJsb2Nrc1ti
bG9ja10uZGVhbGxvY2F0ZSgpOworCisgICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7CisKKyAg
ICBtZW1zZXQoJm1faGVhcCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsKK30KKwordm9pZCBI
ZWFwOjpyZWNvcmRFeHRyYUNvc3Qoc2l6ZV90IGNvc3QpCit7CisgICAgLy8gT3VyIGZyZXF1ZW5j
eSBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBtZW1vcnkgdXNlIGFnYWlu
c3Qgc3BlZWQKKyAgICAvLyBieSBjb2xsZWN0aW5nIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgbmV3
bHkgY3JlYXRlZCB2YWx1ZXMuIEhvd2V2ZXIsIGZvciB2YWx1ZXMKKyAgICAvLyB0aGF0IGhvbGQg
b24gdG8gYSBncmVhdCBkZWFsIG9mIG1lbW9yeSB0aGF0J3Mgbm90IGluIHRoZSBmb3JtIG9mIG90
aGVyIEpTIHZhbHVlcywKKyAgICAvLyB0aGF0IGlzIG5vdCBnb29kIGVub3VnaCAtIGluIHNvbWUg
Y2FzZXMgYSBsb3Qgb2YgdGhvc2Ugb2JqZWN0cyBjYW4gcGlsZSB1cCBhbmQKKyAgICAvLyB1c2Ug
Y3JhenkgYW1vdW50cyBvZiBtZW1vcnkgd2l0aG91dCBhIEdDIGhhcHBlbmluZy4gU28gd2UgdHJh
Y2sgdGhlc2UgZXh0cmEKKyAgICAvLyBtZW1vcnkgY29zdHMuIE9ubHkgdW51c3VhbGx5IGxhcmdl
IG9iamVjdHMgYXJlIG5vdGVkLCBhbmQgd2Ugb25seSBrZWVwIHRyYWNrCisgICAgLy8gb2YgdGhp
cyBleHRyYSBjb3N0IHVudGlsIHRoZSBuZXh0IEdDLiBJbiBnYXJiYWdlIGNvbGxlY3RlZCBsYW5n
dWFnZXMsIG1vc3QgdmFsdWVzCisgICAgLy8gYXJlIGVpdGhlciB2ZXJ5IHNob3J0IGxpdmVkIHRl
bXBvcmFyaWVzLCBvciBoYXZlIGV4dHJlbWVseSBsb25nIGxpZmV0aW1lcy4gU28KKyAgICAvLyBp
ZiBhIGxhcmdlIHZhbHVlIHN1cnZpdmVzIG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZXJlIGlz
IG5vdCBtdWNoIHBvaW50IHRvCisgICAgLy8gY29sbGVjdGluZyBtb3JlIGZyZXF1ZW50bHkgYXMg
bG9uZyBhcyBpdCBzdGF5cyBhbGl2ZS4KKworICAgIGlmIChtX2hlYXAuZXh0cmFDb3N0ID4gbWF4
RXh0cmFDb3N0ICYmIG1faGVhcC5leHRyYUNvc3QgPiBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NL
X1NJWkUgLyAyKSB7CisgICAgICAgIC8vIElmIHRoZSBsYXN0IGl0ZXJhdGlvbiB0aHJvdWdoIHRo
ZSBoZWFwIGRlYWxsb2NhdGVkIGJsb2Nrcywgd2UgbmVlZAorICAgICAgICAvLyB0byBjbGVhbiB1
cCByZW1haW5pbmcgZ2FyYmFnZSBiZWZvcmUgbWFya2luZy4gT3RoZXJ3aXNlLCB0aGUgY29uc2Vy
dmF0aXZlCisgICAgICAgIC8vIG1hcmtpbmcgbWVjaGFuaXNtIG1pZ2h0IGZvbGxvdyBhIHBvaW50
ZXIgdG8gdW5tYXBwZWQgbWVtb3J5LgorICAgICAgICBpZiAobV9oZWFwLmRpZFNocmluaykKKyAg
ICAgICAgICAgIHN3ZWVwKCk7CisgICAgICAgIHJlc2V0KCk7CisgICAgfQorICAgIG1faGVhcC5l
eHRyYUNvc3QgKz0gY29zdDsKK30KKwordm9pZCogSGVhcDo6YWxsb2NhdGUoc2l6ZV90IHMpCit7
CisgICAgQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRocmVhZERh
dGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIHR5cGVkZWYgSGVhcENvbnN0YW50
czo6QmxvY2sgQmxvY2s7CisgICAgdHlwZWRlZiBIZWFwQ29uc3RhbnRzOjpDZWxsIENlbGw7Cisg
ICAgCisgICAgQVNTRVJUKEpTTG9jazo6bG9ja0NvdW50KCkgPiAwKTsKKyAgICBBU1NFUlQoSlNM
b2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHMs
IHMgPD0gSGVhcENvbnN0YW50czo6Y2VsbFNpemUpOworCisgICAgQVNTRVJUKG1faGVhcC5vcGVy
YXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKKworI2lmIENPTExFQ1RfT05fRVZFUllf
QUxMT0NBVElPTgorICAgIGNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgQVNTRVJUKG1faGVhcC5v
cGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKKyNlbmRpZgorCithbGxvY2F0ZToK
KworICAgIC8vIEZhc3QgY2FzZTogZmluZCB0aGUgbmV4dCBnYXJiYWdlIGNlbGwgYW5kIHJlY3lj
bGUgaXQuCisKKyAgICBkbyB7CisgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dEJsb2NrIDwgbV9o
ZWFwLnVzZWRCbG9ja3MpOworICAgICAgICBCbG9jayogYmxvY2sgPSBtX2hlYXAuY29sbGVjdG9y
QmxvY2sobV9oZWFwLm5leHRCbG9jayk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2hlYXAubmV4dENlbGwgPCBIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrKTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2stPm1hcmtlZC5nZXQobV9oZWFwLm5leHRDZWxsKSkgeyAvLyBBbHdh
eXMgZmFsc2UgZm9yIHRoZSBsYXN0IGNlbGwgaW4gdGhlIGJsb2NrCisgICAgICAgICAgICAgICAg
Q2VsbCogY2VsbCA9ICZibG9jay0+Y2VsbHNbbV9oZWFwLm5leHRDZWxsXTsKKworICAgICAgICAg
ICAgICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gQWxsb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICBKU0NlbGwqIGltcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oY2VsbCk7Cisg
ICAgICAgICAgICAgICAgaW1wLT5+SlNDZWxsKCk7CisgICAgICAgICAgICAgICAgbV9oZWFwLm9w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKKworICAgICAgICAgICAgICAgICsrbV9o
ZWFwLm5leHRDZWxsOworICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYmxvY2stPm1hcmtlZC5hZHZhbmNlVG9OZXh0UG9zc2libGVGcmVlQ2Vs
bChtX2hlYXAubmV4dENlbGwpOworICAgICAgICB9IHdoaWxlIChtX2hlYXAubmV4dENlbGwgIT0g
SGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7CisgICAgICAgIG1faGVhcC5uZXh0Q2VsbCA9
IDA7CisgICAgfSB3aGlsZSAoKyttX2hlYXAubmV4dEJsb2NrICE9IG1faGVhcC51c2VkQmxvY2tz
KTsKKworICAgIC8vIFNsb3cgY2FzZTogcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBoZWFwLiBNYXJr
IGxpdmUgb2JqZWN0cyBhbmQgc3RhcnQgb3Zlci4KKworICAgIHJlc2V0KCk7CisgICAgZ290byBh
bGxvY2F0ZTsKK30KKwordm9pZCBIZWFwOjpyZXNpemVCbG9ja3MoKQoreworICAgIG1faGVhcC5k
aWRTaHJpbmsgPSBmYWxzZTsKKworICAgIHNpemVfdCB1c2VkQ2VsbENvdW50ID0gbWFya2VkQ2Vs
bHMoKTsKKyAgICBzaXplX3QgbWluQ2VsbENvdW50ID0gdXNlZENlbGxDb3VudCArIG1heChBTExP
Q0FUSU9OU19QRVJfQ09MTEVDVElPTiwgdXNlZENlbGxDb3VudCk7CisgICAgc2l6ZV90IG1pbkJs
b2NrQ291bnQgPSAobWluQ2VsbENvdW50ICsgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAt
IDEpIC8gSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jazsKKworICAgIHNpemVfdCBtYXhDZWxs
Q291bnQgPSAxLjI1ZiAqIG1pbkNlbGxDb3VudDsKKyAgICBzaXplX3QgbWF4QmxvY2tDb3VudCA9
IChtYXhDZWxsQ291bnQgKyBIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSkgLyBIZWFw
Q29uc3RhbnRzOjpjZWxsc1BlckJsb2NrOworCisgICAgaWYgKG1faGVhcC51c2VkQmxvY2tzIDwg
bWluQmxvY2tDb3VudCkKKyAgICAgICAgZ3Jvd0Jsb2NrcyhtaW5CbG9ja0NvdW50KTsKKyAgICBl
bHNlIGlmIChtX2hlYXAudXNlZEJsb2NrcyA+IG1heEJsb2NrQ291bnQpCisgICAgICAgIHNocmlu
a0Jsb2NrcyhtYXhCbG9ja0NvdW50KTsKK30KKwordm9pZCBIZWFwOjpncm93QmxvY2tzKHNpemVf
dCBuZWVkZWRCbG9ja3MpCit7CisgICAgQVNTRVJUKG1faGVhcC51c2VkQmxvY2tzIDwgbmVlZGVk
QmxvY2tzKTsKKyAgICB3aGlsZSAobV9oZWFwLnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpCisg
ICAgICAgIGFsbG9jYXRlQmxvY2soKTsKK30KKwordm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6
ZV90IG5lZWRlZEJsb2NrcykKK3sKKyAgICBBU1NFUlQobV9oZWFwLnVzZWRCbG9ja3MgPiBuZWVk
ZWRCbG9ja3MpOworICAgIAorICAgIC8vIENsZWFyIHRoZSBhbHdheXMtb24gbGFzdCBiaXQsIHNv
IGlzRW1wdHkoKSBpc24ndCBmb29sZWQgYnkgaXQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQorICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2so
aSktPm1hcmtlZC5jbGVhcihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBtX2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAudXNl
ZEJsb2NrcyAhPSBuZWVkZWRCbG9ja3M7ICkgeworICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3Rv
ckJsb2NrKGkpLT5tYXJrZWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmcmVlQmxvY2soaSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKytpOworICAgIH0KKworICAgIC8vIFJlc2V0
IHRoZSBhbHdheXMtb24gbGFzdCBiaXQuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hl
YXAudXNlZEJsb2NrczsgKytpKQorICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1h
cmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOworfQorCisjaWYgT1Mo
V0lOQ0UpCitKU19FWFBPUlREQVRBIHZvaWQqIGdfc3RhY2tCYXNlID0gMDsKKworaW5saW5lIGJv
b2wgaXNQYWdlV3JpdGFibGUodm9pZCogcGFnZSkKK3sKKyAgICBNRU1PUllfQkFTSUNfSU5GT1JN
QVRJT04gbWVtb3J5SW5mb3JtYXRpb247CisgICAgRFdPUkQgcmVzdWx0ID0gVmlydHVhbFF1ZXJ5
KHBhZ2UsICZtZW1vcnlJbmZvcm1hdGlvbiwgc2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSk7CisK
KyAgICAvLyByZXR1cm4gZmFsc2Ugb24gZXJyb3IsIGluY2x1ZGluZyBwdHIgb3V0c2lkZSBtZW1v
cnkKKyAgICBpZiAocmVzdWx0ICE9IHNpemVvZihtZW1vcnlJbmZvcm1hdGlvbikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIERXT1JEIHByb3RlY3QgPSBtZW1vcnlJbmZvcm1hdGlvbi5Q
cm90ZWN0ICYgfihQQUdFX0dVQVJEIHwgUEFHRV9OT0NBQ0hFKTsKKyAgICByZXR1cm4gcHJvdGVj
dCA9PSBQQUdFX1JFQURXUklURQorICAgICAgICB8fCBwcm90ZWN0ID09IFBBR0VfV1JJVEVDT1BZ
CisgICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9FWEVDVVRFX1JFQURXUklURQorICAgICAgICB8
fCBwcm90ZWN0ID09IFBBR0VfRVhFQ1VURV9XUklURUNPUFk7Cit9CisKK3N0YXRpYyB2b2lkKiBn
ZXRTdGFja0Jhc2Uodm9pZCogcHJldmlvdXNGcmFtZSkKK3sKKyAgICAvLyBmaW5kIHRoZSBhZGRy
ZXNzIG9mIHRoaXMgc3RhY2sgZnJhbWUgYnkgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwg
dmFyaWFibGUKKyAgICBib29sIGlzR3Jvd2luZ0Rvd253YXJkOworICAgIHZvaWQqIHRoaXNGcmFt
ZSA9ICh2b2lkKikoJmlzR3Jvd2luZ0Rvd253YXJkKTsKKworICAgIGlzR3Jvd2luZ0Rvd253YXJk
ID0gcHJldmlvdXNGcmFtZSA8ICZ0aGlzRnJhbWU7CisgICAgc3RhdGljIERXT1JEIHBhZ2VTaXpl
ID0gMDsKKyAgICBpZiAoIXBhZ2VTaXplKSB7CisgICAgICAgIFNZU1RFTV9JTkZPIHN5c3RlbUlu
Zm87CisgICAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbUluZm8pOworICAgICAgICBwYWdlU2l6
ZSA9IHN5c3RlbUluZm8uZHdQYWdlU2l6ZTsKKyAgICB9CisKKyAgICAvLyBzY2FuIGFsbCBvZiBt
ZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBsYXN0IHdyaXRl
YWJsZSBwYWdlIGZvdW5kCisgICAgcmVnaXN0ZXIgY2hhciogY3VycmVudFBhZ2UgPSAoY2hhciop
KChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkpOworICAgIGlmIChpc0dyb3dpbmdE
b3dud2FyZCkgeworICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7CisgICAgICAgICAg
ICAvLyBjaGVjayBmb3IgdW5kZXJmbG93CisgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2UgPj0g
KGNoYXIqKXBhZ2VTaXplKQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09IHBhZ2VTaXpl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMDsKKyAg
ICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFibGUgcmV0dXJu
cyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5CisgICAgICAgICAgICBjdXJyZW50UGFnZSArPSBwYWdl
U2l6ZTsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsKKyAgICAgICAgfQorICAgIH0KK30KKyNl
bmRpZgorCisjaWYgT1MoUU5YKQorc3RhdGljIGlubGluZSB2b2lkICpjdXJyZW50VGhyZWFkU3Rh
Y2tCYXNlUU5YKCkKK3sKKyAgICBzdGF0aWMgdm9pZCogc3RhY2tCYXNlID0gMDsKKyAgICBzdGF0
aWMgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7CisgICAgc3RhdGljIHB0aHJlYWRfdCBzdGFja1RocmVh
ZDsKKyAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgaWYgKHN0YWNr
QmFzZSA9PSAwIHx8IHRocmVhZCAhPSBzdGFja1RocmVhZCkgeworICAgICAgICBzdHJ1Y3QgX2Rl
YnVnX3RocmVhZF9pbmZvIHRocmVhZEluZm87CisgICAgICAgIG1lbXNldCgmdGhyZWFkSW5mbywg
MCwgc2l6ZW9mKHRocmVhZEluZm8pKTsKKyAgICAgICAgdGhyZWFkSW5mby50aWQgPSBwdGhyZWFk
X3NlbGYoKTsKKyAgICAgICAgaW50IGZkID0gb3BlbigiL3Byb2Mvc2VsZiIsIE9fUkRPTkxZKTsK
KyAgICAgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byBvcGVuIC9wcm9jL3NlbGYgKGVycm5vOiAlZCkiLCBlcnJubyk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgICAgICBkZXZjdGwoZmQsIERDTURfUFJPQ19USURTVEFUVVMs
ICZ0aHJlYWRJbmZvLCBzaXplb2YodGhyZWFkSW5mbyksIDApOworICAgICAgICBjbG9zZShmZCk7
CisgICAgICAgIHN0YWNrQmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRocmVhZEluZm8u
c3RrYmFzZSk7CisgICAgICAgIHN0YWNrU2l6ZSA9IHRocmVhZEluZm8uc3Rrc2l6ZTsKKyAgICAg
ICAgQVNTRVJUKHN0YWNrQmFzZSk7CisgICAgICAgIHN0YWNrVGhyZWFkID0gdGhyZWFkOworICAg
IH0KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7
Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkKiBjdXJyZW50VGhyZWFkU3RhY2tCYXNl
KCkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgcHRocmVhZF90IHRocmVhZCA9IHB0aHJlYWRfc2Vs
ZigpOworICAgIHJldHVybiBwdGhyZWFkX2dldF9zdGFja2FkZHJfbnAodGhyZWFkKTsKKyNlbGlm
IE9TKFdJTkRPV1MpICYmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMpCisgICAgLy8gb2Zmc2V0
IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBvaW50ZXIgdG8KKyAg
ICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQK
KyAgICBOVF9USUIqIHBUaWI7CisgICAgX19hc20geworICAgICAgICBNT1YgRUFYLCBGUzpbMTho
XQorICAgICAgICBNT1YgcFRpYiwgRUFYCisgICAgfQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx2
b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsKKyNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODYpICYm
IENPTVBJTEVSKEdDQykKKyAgICAvLyBvZmZzZXQgMHgxOCBmcm9tIHRoZSBGUyBzZWdtZW50IHJl
Z2lzdGVyIGdpdmVzIGEgcG9pbnRlciB0bworICAgIC8vIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24g
YmxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZAorICAgIE5UX1RJQiogcFRpYjsKKyAgICBhc20g
KCAibW92bCAlJWZzOjB4MTgsICUwXG4iCisgICAgICAgICAgOiAiPXIiIChwVGliKQorICAgICAg
ICApOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsKKyNl
bGlmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCisgICAgUE5UX1RJQjY0IHBUaWIgPSByZWlu
dGVycHJldF9jYXN0PFBOVF9USUI2ND4oTnRDdXJyZW50VGViKCkpOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2VsaWYgT1MoUU5YKQorICAg
IEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0gKm5ldyBNdXRleCk7
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4KTsKKyAgICByZXR1cm4gY3VycmVudFRocmVh
ZFN0YWNrQmFzZVFOWCgpOworI2VsaWYgT1MoU09MQVJJUykKKyAgICBzdGFja190IHM7CisgICAg
dGhyX3N0a3NlZ21lbnQoJnMpOworICAgIHJldHVybiBzLnNzX3NwOworI2VsaWYgT1MoT1BFTkJT
RCkKKyAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAgc3RhY2tfdCBz
dGFjazsKKyAgICBwdGhyZWFkX3N0YWNrc2VnX25wKHRocmVhZCwgJnN0YWNrKTsKKyAgICByZXR1
cm4gc3RhY2suc3Nfc3A7CisjZWxpZiBPUyhTWU1CSUFOKQorICAgIFRUaHJlYWRTdGFja0luZm8g
aW5mbzsKKyAgICBSVGhyZWFkIHRocmVhZDsKKyAgICB0aHJlYWQuU3RhY2tJbmZvKGluZm8pOwor
ICAgIHJldHVybiAodm9pZCopaW5mby5pQmFzZTsKKyNlbGlmIE9TKEhBSUtVKQorICAgIHRocmVh
ZF9pbmZvIHRocmVhZEluZm87CisgICAgZ2V0X3RocmVhZF9pbmZvKGZpbmRfdGhyZWFkKE5VTEwp
LCAmdGhyZWFkSW5mbyk7CisgICAgcmV0dXJuIHRocmVhZEluZm8uc3RhY2tfZW5kOworI2VsaWYg
T1MoVU5JWCkKKyAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgmLCBtdXRleCA9
ICpuZXcgTXV0ZXgpOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7CisgICAgc3RhdGlj
IHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc3RhdGljIHNpemVfdCBzdGFja1NpemUgPSAwOwor
ICAgIHN0YXRpYyBwdGhyZWFkX3Qgc3RhY2tUaHJlYWQ7CisgICAgcHRocmVhZF90IHRocmVhZCA9
IHB0aHJlYWRfc2VsZigpOworICAgIGlmIChzdGFja0Jhc2UgPT0gMCB8fCB0aHJlYWQgIT0gc3Rh
Y2tUaHJlYWQpIHsKKyAgICAgICAgcHRocmVhZF9hdHRyX3Qgc2F0dHI7CisgICAgICAgIHB0aHJl
YWRfYXR0cl9pbml0KCZzYXR0cik7CisjaWYgSEFWRShQVEhSRUFEX05QX0gpIHx8IE9TKE5FVEJT
RCkKKyAgICAgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZAa2RlLm9yZworICAg
ICAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRocmVhZCwgJnNhdHRyKTsKKyNlbHNlCisgICAgICAg
IC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3RoZXIgUE9TSVggc3lz
dGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0ZXJuYXRpdmVzCisgICAgICAgIHB0aHJlYWRf
Z2V0YXR0cl9ucCh0aHJlYWQsICZzYXR0cik7CisjZW5kaWYKKyAgICAgICAgaW50IHJjID0gcHRo
cmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwgJnN0YWNrU2l6ZSk7CisgICAg
ICAgICh2b2lkKXJjOyAvLyBGSVhNRTogRGVhbCB3aXRoIGVycm9yIGNvZGUgc29tZWhvdz8gU2Vl
bXMgZmF0YWwuCisgICAgICAgIEFTU0VSVChzdGFja0Jhc2UpOworICAgICAgICBwdGhyZWFkX2F0
dHJfZGVzdHJveSgmc2F0dHIpOworICAgICAgICBzdGFja1RocmVhZCA9IHRocmVhZDsKKyAgICB9
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsgc3RhY2tTaXplOwor
I2VsaWYgT1MoV0lOQ0UpCisgICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4Jiwg
bXV0ZXggPSAqbmV3IE11dGV4KTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobXV0ZXgpOworICAg
IGlmIChnX3N0YWNrQmFzZSkKKyAgICAgICAgcmV0dXJuIGdfc3RhY2tCYXNlOworICAgIGVsc2Ug
eworICAgICAgICBpbnQgZHVtbXk7CisgICAgICAgIHJldHVybiBnZXRTdGFja0Jhc2UoJmR1bW15
KTsKKyAgICB9CisjZWxzZQorI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBiYXNl
IG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9U
SFJFQURTKQorCitzdGF0aWMgaW5saW5lIFBsYXRmb3JtVGhyZWFkIGdldEN1cnJlbnRQbGF0Zm9y
bVRocmVhZCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIHJldHVybiBwdGhyZWFkX21hY2hfdGhy
ZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHB0
aHJlYWRfZ2V0dzMydGhyZWFkaGFuZGxlX25wKHB0aHJlYWRfc2VsZigpKTsKKyNlbmRpZgorfQor
Cit2b2lkIEhlYXA6Om1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkKK3sKKyAgICBpZiAo
bV9jdXJyZW50VGhyZWFkUmVnaXN0cmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgZXJy
b3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fY3VycmVudFRocmVhZFJlZ2lzdHJhciwgdW5yZWdp
c3RlclRocmVhZCk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBDUkFTSCgpOworfQorCit2b2lk
IEhlYXA6OnJlZ2lzdGVyVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+ZXhj
bHVzaXZlVGhyZWFkIHx8IG1fZ2xvYmFsRGF0YS0+ZXhjbHVzaXZlVGhyZWFkID09IGN1cnJlbnRU
aHJlYWQoKSk7CisKKyAgICBpZiAoIW1fY3VycmVudFRocmVhZFJlZ2lzdHJhciB8fCBwdGhyZWFk
X2dldHNwZWNpZmljKG1fY3VycmVudFRocmVhZFJlZ2lzdHJhcikpCisgICAgICAgIHJldHVybjsK
KworICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9jdXJyZW50VGhyZWFkUmVnaXN0cmFyLCB0aGlz
KTsKKyAgICBIZWFwOjpUaHJlYWQqIHRocmVhZCA9IG5ldyBIZWFwOjpUaHJlYWQocHRocmVhZF9z
ZWxmKCksIGdldEN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpLCBjdXJyZW50VGhyZWFkU3RhY2tCYXNl
KCkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwor
CisgICAgdGhyZWFkLT5uZXh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAgICBtX3JlZ2lzdGVy
ZWRUaHJlYWRzID0gdGhyZWFkOworfQorCit2b2lkIEhlYXA6OnVucmVnaXN0ZXJUaHJlYWQodm9p
ZCogcCkKK3sKKyAgICBpZiAocCkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SGVhcCo+KHApLT51bnJl
Z2lzdGVyVGhyZWFkKCk7Cit9CisKK3ZvaWQgSGVhcDo6dW5yZWdpc3RlclRocmVhZCgpCit7Cisg
ICAgcHRocmVhZF90IGN1cnJlbnRQb3NpeFRocmVhZCA9IHB0aHJlYWRfc2VsZigpOworCisgICAg
TXV0ZXhMb2NrZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOworCisgICAgaWYgKHB0
aHJlYWRfZXF1YWwoY3VycmVudFBvc2l4VGhyZWFkLCBtX3JlZ2lzdGVyZWRUaHJlYWRzLT5wb3Np
eFRocmVhZCkpIHsKKyAgICAgICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKKyAg
ICAgICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVhZHMtPm5leHQ7Cisg
ICAgICAgIGRlbGV0ZSB0OworICAgIH0gZWxzZSB7CisgICAgICAgIEhlYXA6OlRocmVhZCogbGFz
dCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7CisgICAgICAgIEhlYXA6OlRocmVhZCogdDsKKyAgICAg
ICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9IHQtPm5leHQpIHsK
KyAgICAgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKHQtPnBvc2l4VGhyZWFkLCBjdXJyZW50UG9z
aXhUaHJlYWQpKSB7CisgICAgICAgICAgICAgICAgbGFzdC0+bmV4dCA9IHQtPm5leHQ7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0ID0gdDsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQodCk7IC8vIElmIHQgaXMgTlVMTCwgd2UgbmV2ZXIg
Zm91bmQgb3Vyc2VsdmVzIGluIHRoZSBsaXN0LgorICAgICAgICBkZWxldGUgdDsKKyAgICB9Cit9
CisKKyNlbHNlIC8vIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKKwordm9pZCBIZWFwOjpy
ZWdpc3RlclRocmVhZCgpCit7Cit9CisKKyNlbmRpZgorCitpbmxpbmUgYm9vbCBpc1BvaW50ZXJB
bGlnbmVkKHZvaWQqIHApCit7CisgICAgcmV0dXJuICgoKGludHB0cl90KShwKSAmIChzaXplb2Yo
Y2hhciopIC0gMSkpID09IDApOworfQorCisvLyBDZWxsIHNpemUgbmVlZHMgdG8gYmUgYSBwb3dl
ciBvZiB0d28gZm9yIGlzUG9zc2libGVDZWxsIHRvIGJlIHZhbGlkLgorQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKENvbGxlY3RvckNlbGwpICUgMiA9PSAwLCBDb2xsZWN0b3JfY2VsbF9zaXplX2lzX3Bv
d2VyX29mX3R3byk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0NlbGxBbGlnbmVkKHZvaWQgKnAp
Cit7CisgICAgcmV0dXJuICgoKGludHB0cl90KShwKSAmIENFTExfTUFTSykgPT0gMCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc3NpYmxlQ2VsbCh2b2lkKiBwKQoreworICAgIHJldHVy
biBpc0NlbGxBbGlnbmVkKHApICYmIHA7Cit9CisKK3ZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2
ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwgdm9pZCogZW5kKQoreworICAg
IGlmIChzdGFydCA+IGVuZCkgeworICAgICAgICB2b2lkKiB0bXAgPSBzdGFydDsKKyAgICAgICAg
c3RhcnQgPSBlbmQ7CisgICAgICAgIGVuZCA9IHRtcDsKKyAgICB9CisKKyAgICBBU1NFUlQoKHN0
YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YXJ0KSkgPCAweDEw
MDAwMDApOworICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKHN0YXJ0KSk7CisgICAgQVNTRVJU
KGlzUG9pbnRlckFsaWduZWQoZW5kKSk7CisKKyAgICBjaGFyKiogcCA9IHN0YXRpY19jYXN0PGNo
YXIqKj4oc3RhcnQpOworICAgIGNoYXIqKiBlID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihlbmQpOwor
CisgICAgd2hpbGUgKHAgIT0gZSkgeworICAgICAgICBjaGFyKiB4ID0gKnArKzsKKyAgICAgICAg
aWYgKGlzUG9zc2libGVDZWxsKHgpKSB7CisgICAgICAgICAgICBzaXplX3QgdXNlZEJsb2NrczsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCB4QXNCaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHgpOworICAgICAgICAgICAgeEFzQml0cyAmPSBDRUxMX0FMSUdOX01BU0s7CisKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSB4QXNCaXRzICYgQkxPQ0tfT0ZGU0VUX01BU0s7Cisg
ICAgICAgICAgICBjb25zdCBzaXplX3QgbGFzdENlbGxPZmZzZXQgPSBzaXplb2YoQ29sbGVjdG9y
Q2VsbCkgKiAoQ0VMTFNfUEVSX0JMT0NLIC0gMSk7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID4g
bGFzdENlbGxPZmZzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJs
b2NrKj4oeEFzQml0cyAtIG9mZnNldCk7CisgICAgICAgICAgICB1c2VkQmxvY2tzID0gbV9oZWFw
LnVzZWRCbG9ja3M7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwg
dXNlZEJsb2NrczsgYmxvY2srKykgeworICAgICAgICAgICAgICAgIGlmIChtX2hlYXAuY29sbGVj
dG9yQmxvY2soYmxvY2spICE9IGJsb2NrQWRkcikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChyZWludGVycHJldF9jYXN0PEpT
Q2VsbCo+KHhBc0JpdHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBORVZFUl9JTkxJTkUgSGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseUlu
dGVybmFsKE1hcmtTdGFjayYgbWFya1N0YWNrKQoreworICAgIHZvaWQqIGR1bW15OworICAgIHZv
aWQqIHN0YWNrUG9pbnRlciA9ICZkdW1teTsKKyAgICB2b2lkKiBzdGFja0Jhc2UgPSBjdXJyZW50
VGhyZWFkU3RhY2tCYXNlKCk7CisgICAgbWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjaywgc3Rh
Y2tQb2ludGVyLCBzdGFja0Jhc2UpOworICAgIG1hcmtTdGFjay5kcmFpbigpOworfQorCisjaWYg
Q09NUElMRVIoR0NDKQorI2RlZmluZSBSRUdJU1RFUl9CVUZGRVJfQUxJR05NRU5UIF9fYXR0cmli
dXRlX18gKChhbGlnbmVkIChzaXplb2Yodm9pZCopKSkpCisjZWxzZQorI2RlZmluZSBSRUdJU1RF
Ul9CVUZGRVJfQUxJR05NRU5UCisjZW5kaWYKKwordm9pZCBIZWFwOjptYXJrQ3VycmVudFRocmVh
ZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrKQoreworICAgIC8vIHNldGptcCBm
b3JjZXMgdm9sYXRpbGUgcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrCisgICAgam1wX2J1ZiByZWdp
c3RlcnMgUkVHSVNURVJfQlVGRkVSX0FMSUdOTUVOVDsKKyNpZiBDT01QSUxFUihNU1ZDKQorI3By
YWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDYxMSkKKyNlbmRp
ZgorICAgIHNldGptcChyZWdpc3RlcnMpOworI2lmIENPTVBJTEVSKE1TVkMpCisjcHJhZ21hIHdh
cm5pbmcocG9wKQorI2VuZGlmCisKKyAgICBtYXJrQ3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5
SW50ZXJuYWwobWFya1N0YWNrKTsKK30KKworI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFE
UykKKworc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRUaHJlYWQoY29uc3QgUGxhdGZvcm1UaHJl
YWQmIHBsYXRmb3JtVGhyZWFkKQoreworI2lmIE9TKERBUldJTikKKyAgICB0aHJlYWRfc3VzcGVu
ZChwbGF0Zm9ybVRocmVhZCk7CisjZWxpZiBPUyhXSU5ET1dTKQorICAgIFN1c3BlbmRUaHJlYWQo
cGxhdGZvcm1UaHJlYWQpOworI2Vsc2UKKyNlcnJvciBOZWVkIGEgd2F5IHRvIHN1c3BlbmQgdGhy
ZWFkcyBvbiB0aGlzIHBsYXRmb3JtCisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJl
c3VtZVRocmVhZChjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQpCit7CisjaWYg
T1MoREFSV0lOKQorICAgIHRocmVhZF9yZXN1bWUocGxhdGZvcm1UaHJlYWQpOworI2VsaWYgT1Mo
V0lORE9XUykKKyAgICBSZXN1bWVUaHJlYWQocGxhdGZvcm1UaHJlYWQpOworI2Vsc2UKKyNlcnJv
ciBOZWVkIGEgd2F5IHRvIHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZgor
fQorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdXN3b3JkX3Q7IC8vIHdvcmQgc2l6ZSwgYXNzdW1l
ZCB0byBiZSBlaXRoZXIgMzIgb3IgNjQgYml0CisKKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBDUFUo
WDg2KQordHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJz
OworI2VsaWYgQ1BVKFg4Nl82NCkKK3R5cGVkZWYgeDg2X3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZv
cm1UaHJlYWRSZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDKQordHlwZWRlZiBwcGNfdGhyZWFkX3N0
YXRlX3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnM7CisjZWxpZiBDUFUoUFBDNjQpCit0eXBlZGVm
IHBwY190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzOworI2VsaWYgQ1BV
KEFSTSkKK3R5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJz
OworI2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbGlmIE9T
KFdJTkRPV1MpICYmIENQVShYODYpCit0eXBlZGVmIENPTlRFWFQgUGxhdGZvcm1UaHJlYWRSZWdp
c3RlcnM7CisjZWxzZQorI2Vycm9yIE5lZWQgYSB0aHJlYWQgcmVnaXN0ZXIgc3RydWN0IGZvciB0
aGlzIHBsYXRmb3JtCisjZW5kaWYKKworc3RhdGljIHNpemVfdCBnZXRQbGF0Zm9ybVRocmVhZFJl
Z2lzdGVycyhjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJlYWQsIFBsYXRmb3JtVGhy
ZWFkUmVnaXN0ZXJzJiByZWdzKQoreworI2lmIE9TKERBUldJTikKKworI2lmIENQVShYODYpCisg
ICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXplb2YoaW50KTsKKyAgICB0
aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBD
UFUoWDg2XzY0KQorICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRf
Q09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RB
VEU2NDsKKyNlbGlmIENQVShQUEMpIAorICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSBQUENfVEhS
RUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBQUENf
VEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFBQQzY0KQorICAgIHVuc2lnbmVkIHVzZXJfY291bnQg
PSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWduZWQg
dXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxzZQorI2Vycm9yIFVua25vd24g
QXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIGtlcm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFk
X2dldF9zdGF0ZShwbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ3Ms
ICZ1c2VyX2NvdW50KTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAg
ICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5D
VElPTiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkphdmFTY3JpcHQgZ2FyYmFnZSBj
b2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRocmVhZF9nZXRfc3RhdGUgcmV0dXJuZWQgYW4gZXJy
b3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgaW5zaWRlIFJv
c2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgcmVzdWx0KTsKKyAgICAgICAgQ1JBU0go
KTsKKyAgICB9CisgICAgcmV0dXJuIHVzZXJfY291bnQgKiBzaXplb2YodXN3b3JkX3QpOworLy8g
ZW5kIE9TKERBUldJTikKKworI2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikKKyAgICByZWdz
LkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRfQ09OVFJPTCB8IENPTlRF
WFRfU0VHTUVOVFM7CisgICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9ybVRocmVhZCwgJnJlZ3Mp
OworICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7CisjZWxzZQorI2Vycm9yIE5lZWQgYSB3YXkg
dG8gZ2V0IHRocmVhZCByZWdpc3RlcnMgb24gdGhpcyBwbGF0Zm9ybQorI2VuZGlmCit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCogb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIoY29uc3QgUGxhdGZvcm1U
aHJlYWRSZWdpc3RlcnMmIHJlZ3MpCit7CisjaWYgT1MoREFSV0lOKQorCisjaWYgX19EQVJXSU5f
VU5JWDAzCisKKyNpZiBDUFUoWDg2KQorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWdzLl9fZXNwKTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yc3ApOworI2VsaWYgQ1BVKFBQQykgfHwgQ1BVKFBQQzY0KQor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLl9fcjEpOworI2VsaWYgQ1BV
KEFSTSkKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVncy5fX3NwKTsKKyNl
bHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisjZWxzZSAvLyAhX19E
QVJXSU5fVU5JWDAzCisKKyNpZiBDUFUoWDg2KQorICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWdzLmVzcCk7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWdzLnJzcCk7CisjZWxpZiBDUFUoUFBDKSB8fCBDUFUoUFBDNjQp
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MucjEpOworI2Vsc2UKKyNl
cnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyNlbmRpZiAvLyBfX0RBUldJTl9V
TklYMDMKKworLy8gZW5kIE9TKERBUldJTikKKyNlbGlmIENQVShYODYpICYmIE9TKFdJTkRPV1Mp
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50cHRyX3QpIHJlZ3MuRXNw
KTsKKyNlbHNlCisjZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0YWNrIHBvaW50ZXIgZm9y
IGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KKyNlbmRpZgorfQorCit2b2lkIEhlYXA6
Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCBUaHJl
YWQqIHRocmVhZCkKK3sKKyAgICBzdXNwZW5kVGhyZWFkKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQp
OworCisgICAgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnMgcmVnczsKKyAgICBzaXplX3QgcmVnU2l6
ZSA9IGdldFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQsIHJl
Z3MpOworCisgICAgLy8gbWFyayB0aGUgdGhyZWFkJ3MgcmVnaXN0ZXJzCisgICAgbWFya0NvbnNl
cnZhdGl2ZWx5KG1hcmtTdGFjaywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZyZWdzKSwgc3RhdGljX2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZyZWdzKSArIHJlZ1NpemUpKTsKKyAg
ICBtYXJrU3RhY2suZHJhaW4oKTsKKworICAgIHZvaWQqIHN0YWNrUG9pbnRlciA9IG90aGVyVGhy
ZWFkU3RhY2tQb2ludGVyKHJlZ3MpOworICAgIG1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ss
IHN0YWNrUG9pbnRlciwgdGhyZWFkLT5zdGFja0Jhc2UpOworICAgIG1hcmtTdGFjay5kcmFpbigp
OworCisgICAgcmVzdW1lVGhyZWFkKHRocmVhZC0+cGxhdGZvcm1UaHJlYWQpOworfQorCisjZW5k
aWYKKwordm9pZCBIZWFwOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0aXZlbHkoTWFya1N0YWNr
JiBtYXJrU3RhY2spCit7CisgICAgbWFya0N1cnJlbnRUaHJlYWRDb25zZXJ2YXRpdmVseShtYXJr
U3RhY2spOworCisjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQorCisgICAgaWYgKG1f
Y3VycmVudFRocmVhZFJlZ2lzdHJhcikgeworCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV9y
ZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLy8gRm9y
YmlkIG1hbGxvYyBkdXJpbmcgdGhlIG1hcmsgcGhhc2UuIE1hcmtpbmcgYSB0aHJlYWQgc3VzcGVu
ZHMgaXQsIHNvIAorICAgICAgICAvLyBhIG1hbGxvYyBpbnNpZGUgbWFya0NoaWxkcmVuKCkgd291
bGQgcmlzayBhIGRlYWRsb2NrIHdpdGggYSB0aHJlYWQgdGhhdCBoYWQgYmVlbiAKKyAgICAgICAg
Ly8gc3VzcGVuZGVkIHdoaWxlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2NrLgorICAgICAgICBmYXN0
TWFsbG9jRm9yYmlkKCk7CisjZW5kaWYKKyAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBhY2Nlc3Mg
dGhlIHJlZ2lzdGVyZWRUaHJlYWRzIGxpc3QsIGJlY2F1c2Ugd2UgZWFybGllciBhc3NlcnRlZCB0
aGF0IGxvY2tzIGFyZSBiZWluZyBoZWxkLAorICAgICAgICAvLyBhbmQgc2luY2UgdGhpcyBpcyBh
IHNoYXJlZCBoZWFwLCB0aGV5IGFyZSByZWFsIGxvY2tzLgorICAgICAgICBmb3IgKFRocmVhZCog
dGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5l
eHQpIHsKKyAgICAgICAgICAgIGlmICghcHRocmVhZF9lcXVhbCh0aHJlYWQtPnBvc2l4VGhyZWFk
LCBwdGhyZWFkX3NlbGYoKSkpCisgICAgICAgICAgICAgICAgbWFya090aGVyVGhyZWFkQ29uc2Vy
dmF0aXZlbHkobWFya1N0YWNrLCB0aHJlYWQpOworICAgICAgICB9CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBmYXN0TWFsbG9jQWxsb3coKTsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorfQorCit2
b2lkIEhlYXA6OnVwZGF0ZVdlYWtHQ0hhbmRsZXMoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3dlYWtHQ0hhbmRsZVBvb2xzLnNpemUoKTsgKytpKQorICAgICAgICB3ZWFrR0NI
YW5kbGVQb29sKGkpLT51cGRhdGUoKTsKK30KKwordm9pZCBXZWFrR0NIYW5kbGVQb29sOjp1cGRh
dGUoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBXZWFrR0NIYW5kbGVQb29sOjpu
dW1Qb29sRW50cmllczsgKytpKSB7CisgICAgICAgIGlmIChtX2VudHJpZXNbaV0uaXNWYWxpZFB0
cigpKSB7CisgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2VudHJpZXNbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAoIWNlbGwgfHwgIUhlYXA6OmlzQ2VsbE1hcmtlZChjZWxsKSkKKyAgICAg
ICAgICAgICAgICBtX2VudHJpZXNbaV0uaW52YWxpZGF0ZSgpOworICAgICAgICB9CisgICAgfQor
fQorCitXZWFrR0NIYW5kbGUqIEhlYXA6OmFkZFdlYWtHQ0hhbmRsZShKU0NlbGwqIHB0cikKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV93ZWFrR0NIYW5kbGVQb29scy5zaXplKCk7
ICsraSkKKyAgICAgICAgaWYgKCF3ZWFrR0NIYW5kbGVQb29sKGkpLT5pc0Z1bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiB3ZWFrR0NIYW5kbGVQb29sKGkpLT5hbGxvY2F0ZShwdHIpOworCisgICAg
QWxpZ25lZE1lbW9yeTxXZWFrR0NIYW5kbGVQb29sOjpwb29sU2l6ZT4gYWxsb2NhdGlvbiA9IG1f
d2Vha0dDSGFuZGxlUG9vbEFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIG1fd2Vha0dDSGFuZGxl
UG9vbHMuYXBwZW5kKGFsbG9jYXRpb24pOworCisgICAgV2Vha0dDSGFuZGxlUG9vbCogcG9vbCA9
IG5ldyAoYWxsb2NhdGlvbikgV2Vha0dDSGFuZGxlUG9vbCgpOworICAgIHJldHVybiBwb29sLT5h
bGxvY2F0ZShwdHIpOworfQorCit2b2lkIEhlYXA6OnByb3RlY3QoSlNWYWx1ZSBrKQoreworICAg
IEFTU0VSVChrKTsKKyAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9j
aygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisKKyAgICBpZiAoIWsu
aXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJvdGVjdGVkVmFsdWVzLmFkZChr
LmFzQ2VsbCgpKTsKK30KKworYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQoreworICAg
IEFTU0VSVChrKTsKKyAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9j
aygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7CisKKyAgICBpZiAoIWsu
aXNDZWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3Byb3RlY3Rl
ZFZhbHVlcy5yZW1vdmUoay5hc0NlbGwoKSk7Cit9CisKK3ZvaWQgSGVhcDo6bWFya1Byb3RlY3Rl
ZE9iamVjdHMoTWFya1N0YWNrJiBtYXJrU3RhY2spCit7CisgICAgUHJvdGVjdENvdW50U2V0Ojpp
dGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKKyAgICBmb3IgKFByb3RlY3RD
b3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgbWFya1N0YWNrLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICBtYXJrU3RhY2suZHJhaW4oKTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0
VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQoreworICAgIG1fdGVt
cFNvcnRpbmdWZWN0b3JzLmFwcGVuZCh0ZW1wVmVjdG9yKTsKK30KKwordm9pZCBIZWFwOjpwb3BU
ZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKHRlbXBWZWN0b3IsIHRlbXBWZWN0b3IgPT0gbV90ZW1wU29ydGluZ1Zl
Y3RvcnMubGFzdCgpKTsKKyAgICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5yZW1vdmVMYXN0KCk7Cit9
CisgICAgCit2b2lkIEhlYXA6Om1hcmtUZW1wU29ydFZlY3RvcnMoTWFya1N0YWNrJiBtYXJrU3Rh
Y2spCit7CisgICAgdHlwZWRlZiBWZWN0b3I8VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qID4gVmVj
dG9yT2ZWYWx1ZVN0cmluZ1ZlY3RvcnM7CisKKyAgICBWZWN0b3JPZlZhbHVlU3RyaW5nVmVjdG9y
czo6aXRlcmF0b3IgZW5kID0gbV90ZW1wU29ydGluZ1ZlY3RvcnMuZW5kKCk7CisgICAgZm9yIChW
ZWN0b3JPZlZhbHVlU3RyaW5nVmVjdG9yczo6aXRlcmF0b3IgaXQgPSBtX3RlbXBTb3J0aW5nVmVj
dG9ycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPFZhbHVlU3Ry
aW5nUGFpcj4qIHRlbXBTb3J0aW5nVmVjdG9yID0gKml0OworCisgICAgICAgIFZlY3RvcjxWYWx1
ZVN0cmluZ1BhaXI+OjppdGVyYXRvciB2ZWN0b3JFbmQgPSB0ZW1wU29ydGluZ1ZlY3Rvci0+ZW5k
KCk7CisgICAgICAgIGZvciAoVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj46Oml0ZXJhdG9yIHZlY3Rv
ckl0ID0gdGVtcFNvcnRpbmdWZWN0b3ItPmJlZ2luKCk7IHZlY3Rvckl0ICE9IHZlY3RvckVuZDsg
Kyt2ZWN0b3JJdCkKKyAgICAgICAgICAgIGlmICh2ZWN0b3JJdC0+Zmlyc3QpCisgICAgICAgICAg
ICAgICAgbWFya1N0YWNrLmFwcGVuZCh2ZWN0b3JJdC0+Zmlyc3QpOworICAgICAgICBtYXJrU3Rh
Y2suZHJhaW4oKTsKKyAgICB9Cit9CisgICAgCit2b2lkIEhlYXA6OmNsZWFyTWFya0JpdHMoKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKKyAg
ICAgICAgY2xlYXJNYXJrQml0cyhtX2hlYXAuY29sbGVjdG9yQmxvY2soaSkpOworfQorCit2b2lk
IEhlYXA6OmNsZWFyTWFya0JpdHMoQ29sbGVjdG9yQmxvY2sqIGJsb2NrKQoreworICAgIC8vIGFs
bG9jYXRlIGFzc3VtZXMgdGhhdCB0aGUgbGFzdCBjZWxsIGluIGV2ZXJ5IGJsb2NrIGlzIG1hcmtl
ZC4KKyAgICBibG9jay0+bWFya2VkLmNsZWFyQWxsKCk7CisgICAgYmxvY2stPm1hcmtlZC5zZXQo
SGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOworfQorCitzaXplX3QgSGVhcDo6bWFy
a2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENlbGwpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHN0YXJ0QmxvY2sgPD0gbV9oZWFwLnVzZWRCbG9ja3MpOworICAgIEFTU0VSVChz
dGFydENlbGwgPCBIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrKTsKKworICAgIGlmIChzdGFy
dEJsb2NrID49IG1faGVhcC51c2VkQmxvY2tzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNp
emVfdCByZXN1bHQgPSAwOworICAgIHJlc3VsdCArPSBtX2hlYXAuY29sbGVjdG9yQmxvY2soc3Rh
cnRCbG9jayktPm1hcmtlZC5jb3VudChzdGFydENlbGwpOworICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEJsb2NrICsgMTsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCisgICAgICAgIHJlc3Vs
dCArPSBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5jb3VudCgpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBIZWFwOjpzd2VlcCgpCit7CisgICAgQVNTRVJUKG1faGVh
cC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKKyAgICBpZiAobV9oZWFwLm9w
ZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCisgICAgICAgIENSQVNIKCk7CisgICAg
bV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOworICAgIAorI2lmICFFTkFC
TEUoSlNDX1pPTUJJRVMpCisgICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVy
ZSA9IG1fZ2xvYmFsRGF0YS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7CisjZW5k
aWYKKworICAgIERlYWRPYmplY3RJdGVyYXRvciBpdChtX2hlYXAsIG1faGVhcC5uZXh0QmxvY2ss
IG1faGVhcC5uZXh0Q2VsbCk7CisgICAgRGVhZE9iamVjdEl0ZXJhdG9yIGVuZChtX2hlYXAsIG1f
aGVhcC51c2VkQmxvY2tzKTsKKyAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBKU0NlbGwqIGNlbGwgPSAqaXQ7CisjaWYgRU5BQkxFKEpTQ19aT01CSUVTKQorICAgICAgICBp
ZiAoIWNlbGwtPmlzWm9tYmllKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogaW5m
byA9IGNlbGwtPmNsYXNzSW5mbygpOworICAgICAgICAgICAgY2VsbC0+fkpTQ2VsbCgpOworICAg
ICAgICAgICAgbmV3IChjZWxsKSBKU1pvbWJpZShpbmZvLCBKU1pvbWJpZTo6bGVha2VkWm9tYmll
U3RydWN0dXJlKCkpOworICAgICAgICAgICAgSGVhcDo6bWFya0NlbGwoY2VsbCk7CisgICAgICAg
IH0KKyNlbHNlCisgICAgICAgIGNlbGwtPn5KU0NlbGwoKTsKKyAgICAgICAgLy8gQ2FsbGVycyBv
ZiBzd2VlcCBhc3N1bWUgaXQncyBzYWZlIHRvIG1hcmsgYW55IGNlbGwgaW4gdGhlIGhlYXAuCisg
ICAgICAgIG5ldyAoY2VsbCkgSlNDZWxsKGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlKTsKKyNl
bmRpZgorICAgIH0KKworICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRp
b247Cit9CisKK3ZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAg
aWYgKG1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKSB7CisgICAgICAgIEFTU0VSVChK
U0xvY2s6OmxvY2tDb3VudCgpID4gMCk7CisgICAgICAgIEFTU0VSVChKU0xvY2s6OmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgQVNTRVJUKG1faGVh
cC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKKyAgICBpZiAobV9oZWFwLm9w
ZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCisgICAgICAgIENSQVNIKCk7CisKKyAg
ICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CisKKyAgICBNYXJrU3Rh
Y2smIG1hcmtTdGFjayA9IG1fZ2xvYmFsRGF0YS0+bWFya1N0YWNrOworCisgICAgLy8gUmVzZXQg
bWFyayBiaXRzLgorICAgIGNsZWFyTWFya0JpdHMoKTsKKworICAgIC8vIE1hcmsgc3RhY2sgcm9v
dHMuCisgICAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjayk7CisgICAg
bV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCkubWFya0NhbGxGcmFtZXMo
bWFya1N0YWNrLCB0aGlzKTsKKworICAgIC8vIE1hcmsgZXhwbGljaXRseSByZWdpc3RlcmVkIHJv
b3RzLgorICAgIG1hcmtQcm90ZWN0ZWRPYmplY3RzKG1hcmtTdGFjayk7CisgICAgCisgICAgLy8g
TWFyayB0ZW1wb3JhcnkgdmVjdG9yIGZvciBBcnJheSBzb3J0aW5nCisgICAgbWFya1RlbXBTb3J0
VmVjdG9ycyhtYXJrU3RhY2spOworCisgICAgLy8gTWFyayBtaXNjLiBvdGhlciByb290cy4KKyAg
ICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMobWFya1N0YWNrLCAqbV9tYXJrTGlzdFNldCk7
CisgICAgaWYgKG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQorICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKKyAgICBpZiAobV9nbG9iYWxEYXRhLT5maXJz
dFN0cmluZ2lmaWVyVG9NYXJrKQorICAgICAgICBKU09OT2JqZWN0OjptYXJrU3RyaW5naWZpZXJz
KG1hcmtTdGFjaywgbV9nbG9iYWxEYXRhLT5maXJzdFN0cmluZ2lmaWVyVG9NYXJrKTsKKworICAg
IC8vIE1hcmsgdGhlIHNtYWxsIHN0cmluZ3MgY2FjaGUgbGFzdCwgc2luY2UgaXQgd2lsbCBjbGVh
ciBpdHNlbGYgaWYgbm90aGluZworICAgIC8vIGVsc2UgaGFzIG1hcmtlZCBpdC4KKyAgICBtX2ds
b2JhbERhdGEtPnNtYWxsU3RyaW5ncy5tYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKworICAgIG1h
cmtTdGFjay5kcmFpbigpOworICAgIG1hcmtTdGFjay5jb21wYWN0KCk7CisKKyAgICB1cGRhdGVX
ZWFrR0NIYW5kbGVzKCk7CisKKyAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3Bl
cmF0aW9uOworfQorCitzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2hlYXAubmV4dEJsb2NrICogSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAvLyBh
bGxvY2F0ZWQgZnVsbCBibG9ja3MKKyAgICAgICAgICAgKyBtX2hlYXAubmV4dENlbGwgLy8gYWxs
b2NhdGVkIGNlbGxzIGluIGN1cnJlbnQgYmxvY2sKKyAgICAgICAgICAgKyBtYXJrZWRDZWxscyht
X2hlYXAubmV4dEJsb2NrLCBtX2hlYXAubmV4dENlbGwpIC8vIG1hcmtlZCBjZWxscyBpbiByZW1h
aW5kZXIgb2YgbV9oZWFwCisgICAgICAgICAgIC0gbV9oZWFwLnVzZWRCbG9ja3M7IC8vIDEgY2Vs
bCBwZXIgYmxvY2sgaXMgYSBkdW1teSBzZW50aW5lbAorfQorCit2b2lkIEhlYXA6OmFkZFRvU3Rh
dGlzdGljcyhIZWFwOjpTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAoreworICAgIHN0YXRp
c3RpY3Muc2l6ZSArPSBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJWkU7CisgICAgc3RhdGlz
dGljcy5mcmVlICs9IG1faGVhcC51c2VkQmxvY2tzICogQkxPQ0tfU0laRSAtIChvYmplY3RDb3Vu
dCgpICogSGVhcENvbnN0YW50czo6Y2VsbFNpemUpOworfQorCitIZWFwOjpTdGF0aXN0aWNzIEhl
YXA6OnN0YXRpc3RpY3MoKSBjb25zdAoreworICAgIFN0YXRpc3RpY3Mgc3RhdGlzdGljcyA9IHsg
MCwgMCB9OworICAgIGFkZFRvU3RhdGlzdGljcyhzdGF0aXN0aWNzKTsKKyAgICByZXR1cm4gc3Rh
dGlzdGljczsKK30KKworc2l6ZV90IEhlYXA6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJWkU7Cit9CisKK3NpemVfdCBIZWFwOjpnbG9iYWxP
YmplY3RDb3VudCgpCit7CisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICBpZiAoSlNHbG9iYWxP
YmplY3QqIGhlYWQgPSBtX2dsb2JhbERhdGEtPmhlYWQpIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIG8gPSBoZWFkOworICAgICAgICBkbyB7CisgICAgICAgICAgICArK2NvdW50OworICAgICAg
ICAgICAgbyA9IG8tPm5leHQoKTsKKyAgICAgICAgfSB3aGlsZSAobyAhPSBoZWFkKTsKKyAgICB9
CisgICAgcmV0dXJuIGNvdW50OworfQorCitzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2Jq
ZWN0Q291bnQoKQoreworICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgaWYgKEpTR2xvYmFsT2Jq
ZWN0KiBoZWFkID0gbV9nbG9iYWxEYXRhLT5oZWFkKSB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBvID0gaGVhZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKG1fcHJvdGVjdGVkVmFs
dWVzLmNvbnRhaW5zKG8pKQorICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICBv
ID0gby0+bmV4dCgpOworICAgICAgICB9IHdoaWxlIChvICE9IGhlYWQpOworICAgIH0KKworICAg
IHJldHVybiBjb3VudDsKK30KKworc2l6ZV90IEhlYXA6OnByb3RlY3RlZE9iamVjdENvdW50KCkK
K3sKKyAgICByZXR1cm4gbV9wcm90ZWN0ZWRWYWx1ZXMuc2l6ZSgpOworfQorCitzdGF0aWMgY29u
c3QgY2hhciogdHlwZU5hbWUoSlNDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsLT5pc1N0cmlu
ZygpKQorICAgICAgICByZXR1cm4gInN0cmluZyI7CisgICAgaWYgKGNlbGwtPmlzR2V0dGVyU2V0
dGVyKCkpCisgICAgICAgIHJldHVybiAiR2V0dGVyLVNldHRlciI7CisgICAgaWYgKGNlbGwtPmlz
QVBJVmFsdWVXcmFwcGVyKCkpCisgICAgICAgIHJldHVybiAiQVBJIHdyYXBwZXIiOworICAgIGlm
IChjZWxsLT5pc1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCkpCisgICAgICAgIHJldHVybiAiRm9yLWlu
IGl0ZXJhdG9yIjsKKyAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAi
W2VtcHR5IGNlbGxdIjsKKyAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjZWxsLT5jbGFzc0lu
Zm8oKTsKKyAgICByZXR1cm4gaW5mbyA/IGluZm8tPmNsYXNzTmFtZSA6ICJPYmplY3QiOworfQor
CitIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIEhlYXA6OnByb3RlY3RlZE9iamVjdFR5cGVD
b3VudHMoKQoreworICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogY291bnRzID0gbmV3
IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjsKKworICAgIFByb3RlY3RDb3VudFNldDo6aXRl
cmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CisgICAgZm9yIChQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBjb3VudHMtPmFkZCh0eXBlTmFtZShpdC0+Zmlyc3QpKTsKKworICAg
IHJldHVybiBjb3VudHM7Cit9CisKK0hhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogSGVhcDo6
b2JqZWN0VHlwZUNvdW50cygpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBj
b3VudHMgPSBuZXcgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OworCisgICAgTGl2ZU9iamVj
dEl0ZXJhdG9yIGl0ID0gcHJpbWFyeUhlYXBCZWdpbigpOworICAgIExpdmVPYmplY3RJdGVyYXRv
ciBoZWFwRW5kID0gcHJpbWFyeUhlYXBFbmQoKTsKKyAgICBmb3IgKCA7IGl0ICE9IGhlYXBFbmQ7
ICsraXQpCisgICAgICAgIGNvdW50cy0+YWRkKHR5cGVOYW1lKCppdCkpOworCisgICAgcmV0dXJu
IGNvdW50czsKK30KKworYm9vbCBIZWFwOjppc0J1c3koKQoreworICAgIHJldHVybiBtX2hlYXAu
b3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKK30KKwordm9pZCBIZWFwOjpyZXNl
dCgpCit7CisgICAgQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09IHd0ZlRo
cmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOworICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7CisKKyAgICBtYXJrUm9vdHMoKTsKKworICAgIEpBVkFTQ1JJUFRDT1JFX0dD
X01BUktFRCgpOworCisgICAgbV9oZWFwLm5leHRDZWxsID0gMDsKKyAgICBtX2hlYXAubmV4dEJs
b2NrID0gMDsKKyAgICBtX2hlYXAubmV4dE51bWJlciA9IDA7CisgICAgbV9oZWFwLmV4dHJhQ29z
dCA9IDA7CisjaWYgRU5BQkxFKEpTQ19aT01CSUVTKQorICAgIHN3ZWVwKCk7CisjZW5kaWYKKyAg
ICByZXNpemVCbG9ja3MoKTsKKworICAgIEpBVkFTQ1JJUFRDT1JFX0dDX0VORCgpOworCisgICAg
KCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7Cit9CisKK3ZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJh
Z2UoKQoreworICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZU
aHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKKyAgICBKQVZBU0NSSVBUQ09S
RV9HQ19CRUdJTigpOworCisgICAgLy8gSWYgdGhlIGxhc3QgaXRlcmF0aW9uIHRocm91Z2ggdGhl
IGhlYXAgZGVhbGxvY2F0ZWQgYmxvY2tzLCB3ZSBuZWVkCisgICAgLy8gdG8gY2xlYW4gdXAgcmVt
YWluaW5nIGdhcmJhZ2UgYmVmb3JlIG1hcmtpbmcuIE90aGVyd2lzZSwgdGhlIGNvbnNlcnZhdGl2
ZQorICAgIC8vIG1hcmtpbmcgbWVjaGFuaXNtIG1pZ2h0IGZvbGxvdyBhIHBvaW50ZXIgdG8gdW5t
YXBwZWQgbWVtb3J5LgorICAgIGlmIChtX2hlYXAuZGlkU2hyaW5rKQorICAgICAgICBzd2VlcCgp
OworCisgICAgbWFya1Jvb3RzKCk7CisKKyAgICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsK
KworICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7CisgICAgbV9oZWFwLm5leHRCbG9jayA9IDA7Cisg
ICAgbV9oZWFwLm5leHROdW1iZXIgPSAwOworICAgIG1faGVhcC5leHRyYUNvc3QgPSAwOworICAg
IHN3ZWVwKCk7CisgICAgcmVzaXplQmxvY2tzKCk7CisKKyAgICBKQVZBU0NSSVBUQ09SRV9HQ19F
TkQoKTsKK30KKworTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlIZWFwQmVnaW4oKQor
eworICAgIHJldHVybiBMaXZlT2JqZWN0SXRlcmF0b3IobV9oZWFwLCAwKTsKK30KKworTGl2ZU9i
amVjdEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlIZWFwRW5kKCkKK3sKKyAgICByZXR1cm4gTGl2ZU9i
amVjdEl0ZXJhdG9yKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOworfQorCit2b2lkIEhlYXA6
OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2
aXR5Q2FsbGJhY2spCit7CisgICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gYWN0aXZpdHlDYWxsYmFj
azsKK30KKworR0NBY3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rpdml0eUNhbGxiYWNrKCkKK3sK
KyAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmNwcAkocmV2aXNpb24gNzQzMDYp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOSwzNzggKzE5LDE5MCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJDb2xsZWN0b3IuaCIKLQotI2luY2x1ZGUgIkFyZ0xpc3QuaCIKLSNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb2xsZWN0b3JIZWFwSXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKLSNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgotI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgotI2luY2x1ZGUgIkpTTG9jay5oIgotI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKLSNpbmNs
dWRlICJKU1N0cmluZy5oIgotI2luY2x1ZGUgIkpTVmFsdWUuaCIKLSNpbmNsdWRlICJKU1pvbWJp
ZS5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgotI2luY2x1ZGUgIk5vZGVzLmgiCi0jaW5jbHVk
ZSAiVHJhY2luZy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxsaW1pdHMuaD4K
LSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9XVEZUaHJlYWREYXRhLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZNVGFncy5oPgorI2luY2x1ZGUgIlN0YWNrQm91bmRzLmgiCiAKICNpZiBPUyhE
QVJXSU4pCiAKLSNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvbWFj
aF9wb3J0Lmg+CiAjaW5jbHVkZSA8bWFjaC90YXNrLmg+CiAjaW5jbHVkZSA8bWFjaC90aHJlYWRf
YWN0Lmg+Ci0jaW5jbHVkZSA8bWFjaC92bV9tYXAuaD4KIAogI2VsaWYgT1MoV0lORE9XUykKIAog
I2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KIAogI2VsaWYgT1MoSEFJ
S1UpCiAKICNpbmNsdWRlIDxPUy5oPgogCi0jZWxpZiBPUyhVTklYKQotCi0jaW5jbHVkZSA8c3Rk
bGliLmg+Ci0jaWYgIU9TKEhBSUtVKQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jZW5kaWYKLSNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNlbGlmIE9TKFNPTEFSSVMpCiAKLSNpZiBPUyhTT0xBUklTKQog
I2luY2x1ZGUgPHRocmVhZC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYK
IAotI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQotI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KLSNlbmRp
ZgorI2VsaWYgT1MoUU5YKQogCi0jaWYgT1MoUU5YKQogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5j
bHVkZSA8c3lzL3Byb2Nmcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZXJybm8u
aD4KLSNlbmRpZgotCi0jZW5kaWYKLQotI2RlZmluZSBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJ
T04gMAotCi11c2luZyBzdGQ6Om1heDsKLQotbmFtZXNwYWNlIEpTQyB7CiAKLS8vIHR1bmFibGUg
cGFyYW1ldGVycwotCi1jb25zdCBzaXplX3QgR1JPV1RIX0ZBQ1RPUiA9IDI7Ci1jb25zdCBzaXpl
X3QgTE9XX1dBVEVSX0ZBQ1RPUiA9IDQ7Ci1jb25zdCBzaXplX3QgQUxMT0NBVElPTlNfUEVSX0NP
TExFQ1RJT04gPSAzNjAwOwotLy8gVGhpcyB2YWx1ZSBoYXMgdG8gYmUgYSBtYWNybyB0byBiZSB1
c2VkIGluIG1heCgpIHdpdGhvdXQgaW50cm9kdWNpbmcKLS8vIGEgUElDIGJyYW5jaCBpbiBNYWNo
LU8gYmluYXJpZXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTk3MTM5MT4uCi0jZGVmaW5lIE1JTl9B
UlJBWV9TSVpFIChzdGF0aWNfY2FzdDxzaXplX3Q+KDE0KSkKLQotI2lmIEVOQUJMRShKU0NfTVVM
VElQTEVfVEhSRUFEUykKKyNlbGlmIE9TKFVOSVgpCiAKLSNpZiBPUyhEQVJXSU4pCi10eXBlZGVm
IG1hY2hfcG9ydF90IFBsYXRmb3JtVGhyZWFkOwotI2VsaWYgT1MoV0lORE9XUykKLXR5cGVkZWYg
SEFORExFIFBsYXRmb3JtVGhyZWFkOworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpZiBIQVZFKFBU
SFJFQURfTlBfSCkKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CiAjZW5kaWYKIAotY2xhc3MgSGVh
cDo6VGhyZWFkIHsKLXB1YmxpYzoKLSAgICBUaHJlYWQocHRocmVhZF90IHB0aHJlYWQsIGNvbnN0
IFBsYXRmb3JtVGhyZWFkJiBwbGF0VGhyZWFkLCB2b2lkKiBiYXNlKSAKLSAgICAgICAgOiBwb3Np
eFRocmVhZChwdGhyZWFkKQotICAgICAgICAsIHBsYXRmb3JtVGhyZWFkKHBsYXRUaHJlYWQpCi0g
ICAgICAgICwgc3RhY2tCYXNlKGJhc2UpCi0gICAgewotICAgIH0KKyNlbmRpZgogCi0gICAgVGhy
ZWFkKiBuZXh0OwotICAgIHB0aHJlYWRfdCBwb3NpeFRocmVhZDsKLSAgICBQbGF0Zm9ybVRocmVh
ZCBwbGF0Zm9ybVRocmVhZDsKLSAgICB2b2lkKiBzdGFja0Jhc2U7Ci19OworbmFtZXNwYWNlIFdU
RiB7CiAKLSNlbmRpZgorLy8gQmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUg
SlNDIHBhcnNlciwgZ3Vlc3MgdGhlIHN0YWNrIHNpemUuCitzdGF0aWMgY29uc3QgcHRyZGlmZl90
IGVzdGltYXRlZFN0YWNrU2l6ZSA9IDEyOCAqIHNpemVvZih2b2lkKikgKiAxMDI0OwogCi1IZWFw
OjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICA6IG1fbWFya0xpc3RTZXQoMCkK
LSNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRUaHJl
YWRzKDApCi0gICAgLCBtX2N1cnJlbnRUaHJlYWRSZWdpc3RyYXIoMCkKLSNlbmRpZgotICAgICwg
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZSBzdGFj
ayBpcyBncm93aW5nIGRvd253YXJkcy4KK3N0YXRpYyB2b2lkKiBlc3RpbWF0ZVN0YWNrQm91bmQo
dm9pZCogb3JpZ2luKQogewotICAgIEFTU0VSVChnbG9iYWxEYXRhKTsKLSAgICBtZW1zZXQoJm1f
aGVhcCwgMCwgc2l6ZW9mKENvbGxlY3RvckhlYXApKTsKLSAgICBhbGxvY2F0ZUJsb2NrKCk7Ci0g
ICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gRGVmYXVsdEdDQWN0aXZpdHlDYWxsYmFjazo6Y3JlYXRl
KHRoaXMpOwotICAgICgqbV9hY3Rpdml0eUNhbGxiYWNrKSgpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjaGFyKj4ob3JpZ2luKSAtIGVzdGltYXRlZFN0YWNrU2l6ZTsKIH0KIAotSGVhcDo6fkhl
YXAoKQotewotICAgIC8vIFRoZSBkZXN0cm95IGZ1bmN0aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJl
ZW4gY2FsbGVkLCBzbyBhc3NlcnQgdGhpcy4KLSAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YSk7Ci19
CisjaWYgT1MoREFSV0lOKQogCi12b2lkIEhlYXA6OmRlc3Ryb3koKQordm9pZCBTdGFja0JvdW5k
czo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5
KTsKLQotICAgIGlmICghbV9nbG9iYWxEYXRhKQotICAgICAgICByZXR1cm47CisgICAgcHRocmVh
ZF90IHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOworICAgIG1fb3JpZ2luID0gcHRocmVhZF9nZXRf
c3RhY2thZGRyX25wKHRocmVhZCk7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZCht
X29yaWdpbik7Cit9CiAKLSAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9i
amVjdCk7Ci0gICAgQVNTRVJUKCFpc0J1c3koKSk7Ci0gICAgCi0gICAgLy8gVGhlIGdsb2JhbCBv
YmplY3QgaXMgbm90IEdDIHByb3RlY3RlZCBhdCB0aGlzIHBvaW50LCBzbyBzd2VlcGluZyBtYXkg
ZGVsZXRlIGl0Ci0gICAgLy8gKGFuZCB0aHVzIHRoZSBnbG9iYWwgZGF0YSkgYmVmb3JlIG90aGVy
IG9iamVjdHMgdGhhdCBtYXkgdXNlIHRoZSBnbG9iYWwgZGF0YS4KLSAgICBSZWZQdHI8SlNHbG9i
YWxEYXRhPiBwcm90ZWN0KG1fZ2xvYmFsRGF0YSk7Ci0KLSAgICBkZWxldGUgbV9tYXJrTGlzdFNl
dDsKLSAgICBtX21hcmtMaXN0U2V0ID0gMDsKLQotICAgIGZyZWVCbG9ja3MoKTsKLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3dlYWtHQ0hhbmRsZVBvb2xzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX3dlYWtHQ0hhbmRsZVBvb2xzW2ldLmRlYWxsb2NhdGUoKTsKLQotI2lmIEVOQUJM
RShKU0NfTVVMVElQTEVfVEhSRUFEUykKLSAgICBpZiAobV9jdXJyZW50VGhyZWFkUmVnaXN0cmFy
KSB7Ci0gICAgICAgIGludCBlcnJvciA9IHB0aHJlYWRfa2V5X2RlbGV0ZShtX2N1cnJlbnRUaHJl
YWRSZWdpc3RyYXIpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCAhZXJyb3IpOwotICAg
IH0KKyNlbGlmIE9TKFdJTkRPV1MpCiAKLSAgICBNdXRleExvY2tlciByZWdpc3RlcmVkVGhyZWFk
c0xvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLSAgICBmb3IgKEhlYXA6OlRocmVhZCog
dCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7IHQ7KSB7Ci0gICAgICAgIEhlYXA6OlRocmVhZCogbmV4
dCA9IHQtPm5leHQ7Ci0gICAgICAgIGRlbGV0ZSB0OwotICAgICAgICB0ID0gbmV4dDsKK3ZvaWQg
U3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQoreworI2lmIENQVShYODYpICYmIENPTVBJTEVSKE1T
VkMpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZl
cyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0
aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIqIHBUaWI7CisgICAgX19hc20geworICAgICAg
ICBNT1YgRUFYLCBGUzpbMThoXQorICAgICAgICBNT1YgcFRpYiwgRUFYCiAgICAgfQorICAgIG1f
b3JpZ2luID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHBUaWItPlN0YWNrQmFzZSk7CisjZWxpZiBPUyhX
SU5ET1dTKSAmJiBDUFUoWDg2KSAmJiBDT01QSUxFUihHQ0MpCisgICAgLy8gb2Zmc2V0IDB4MTgg
ZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0
aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBO
VF9USUIqIHBUaWI7CisgICAgYXNtICggIm1vdmwgJSVmczoweDE4LCAlMFxuIgorICAgICAgICAg
IDogIj1yIiAocFRpYikKKyAgICAgICAgKTsKKyAgICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PHZv
aWQqPihwVGliLT5TdGFja0Jhc2UpOworI2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkK
KyAgICBQTlRfVElCNjQgcFRpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJl
bnRUZWIoKSk7CisgICAgbV9vcmlnaW4gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5T
dGFja0Jhc2UpOworI2Vsc2UKKyNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgYm91
bmRzIG9uIHRoaXMgcGxhdGZvcm0gKFdpbmRvd3MpCiAjZW5kaWYKLSAgICBtX2Jsb2NrYWxsb2Nh
dG9yLmRlc3Ryb3koKTsKLSAgICBtX2dsb2JhbERhdGEgPSAwOworICAgIG1fYm91bmQgPSBlc3Rp
bWF0ZVN0YWNrQm91bmQobV9vcmlnaW4pOwogfQogCi1ORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxv
Y2sqIEhlYXA6OmFsbG9jYXRlQmxvY2soKQotewotICAgIEFsaWduZWRDb2xsZWN0b3JCbG9jayBh
bGxvY2F0aW9uID0gbV9ibG9ja2FsbG9jYXRvci5hbGxvY2F0ZSgpOwotICAgIENvbGxlY3RvckJs
b2NrKiBibG9jayA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKj4oYWxsb2NhdGlvbi5iYXNl
KCkpOwotICAgIGlmICghYmxvY2spCi0gICAgICAgIENSQVNIKCk7Ci0KLSAgICAvLyBJbml0aWFs
aXplIGJsb2NrLgorI2VsaWYgT1MoUU5YKQogCi0gICAgYmxvY2stPmhlYXAgPSB0aGlzOwotICAg
IGNsZWFyTWFya0JpdHMoYmxvY2spOwordm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7
CisgICAgdm9pZCogc3RhY2tCYXNlID0gMDsKKyAgICBzaXplX3Qgc3RhY2tTaXplID0gMDsKKyAg
ICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CiAKLSAgICBTdHJ1Y3R1cmUqIGR1
bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9nbG9iYWxEYXRhLT5kdW1teU1hcmthYmxlQ2Vs
bFN0cnVjdHVyZS5nZXQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhlYXBDb25zdGFu
dHM6OmNlbGxzUGVyQmxvY2s7ICsraSkKLSAgICAgICAgbmV3ICgmYmxvY2stPmNlbGxzW2ldKSBK
U0NlbGwoZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUpOwotICAgIAotICAgIC8vIEFkZCBibG9j
ayB0byBibG9ja3MgdmVjdG9yLgotCi0gICAgc2l6ZV90IG51bUJsb2NrcyA9IG1faGVhcC5udW1C
bG9ja3M7Ci0gICAgaWYgKG1faGVhcC51c2VkQmxvY2tzID09IG51bUJsb2NrcykgewotICAgICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heE51bUJsb2NrcyA9IFVMT05HX01BWCAvIHNpemVvZihB
bGlnbmVkQ29sbGVjdG9yQmxvY2spIC8gR1JPV1RIX0ZBQ1RPUjsKLSAgICAgICAgaWYgKG51bUJs
b2NrcyA+IG1heE51bUJsb2NrcykKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIG51bUJs
b2NrcyA9IG1heChNSU5fQVJSQVlfU0laRSwgbnVtQmxvY2tzICogR1JPV1RIX0ZBQ1RPUik7Ci0g
ICAgICAgIG1faGVhcC5udW1CbG9ja3MgPSBudW1CbG9ja3M7Ci0gICAgICAgIG1faGVhcC5ibG9j
a3MgPSBzdGF0aWNfY2FzdDxBbGlnbmVkQ29sbGVjdG9yQmxvY2sqPihmYXN0UmVhbGxvYyhtX2hl
YXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQWxpZ25lZENvbGxlY3RvckJsb2NrKSkpOwor
ICAgIHN0cnVjdCBfZGVidWdfdGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKKyAgICBtZW1zZXQoJnRo
cmVhZEluZm8sIDAsIHNpemVvZih0aHJlYWRJbmZvKSk7CisgICAgdGhyZWFkSW5mby50aWQgPSBw
dGhyZWFkX3NlbGYoKTsKKyAgICBpbnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkp
OworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVu
IC9wcm9jL3NlbGYgKGVycm5vOiAlZCkiLCBlcnJubyk7CisgICAgICAgIENSQVNIKCk7CiAgICAg
fQotICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRCbG9ja3MrK10gPSBhbGxvY2F0aW9uOwor
ICAgIGRldmN0bChmZCwgRENNRF9QUk9DX1RJRFNUQVRVUywgJnRocmVhZEluZm8sIHNpemVvZih0
aHJlYWRJbmZvKSwgMCk7CisgICAgY2xvc2UoZmQpOworICAgIHN0YWNrQmFzZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHRocmVhZEluZm8uc3RrYmFzZSk7CisgICAgc3RhY2tTaXplID0gdGhy
ZWFkSW5mby5zdGtzaXplOworICAgIEFTU0VSVChzdGFja0Jhc2UpOwogCi0gICAgcmV0dXJuIGJs
b2NrOworICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFj
a1NpemU7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZChtX29yaWdpbik7CiB9CiAK
LU5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmZyZWVCbG9jayhzaXplX3QgYmxvY2spCi17Ci0gICAg
bV9oZWFwLmRpZFNocmluayA9IHRydWU7Ci0KLSAgICBPYmplY3RJdGVyYXRvciBpdChtX2hlYXAs
IGJsb2NrKTsKLSAgICBPYmplY3RJdGVyYXRvciBlbmQobV9oZWFwLCBibG9jayArIDEpOwotICAg
IGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+fkpTQ2VsbCgpOwotICAg
IG1faGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUoKTsKLQotICAgIC8vIHN3YXAgd2l0aCB0
aGUgbGFzdCBibG9jayBzbyB3ZSBjb21wYWN0IGFzIHdlIGdvCi0gICAgbV9oZWFwLmJsb2Nrc1ti
bG9ja10gPSBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzIC0gMV07Ci0gICAgbV9oZWFw
LnVzZWRCbG9ja3MtLTsKLQotICAgIGlmIChtX2hlYXAubnVtQmxvY2tzID4gTUlOX0FSUkFZX1NJ
WkUgJiYgbV9oZWFwLnVzZWRCbG9ja3MgPCBtX2hlYXAubnVtQmxvY2tzIC8gTE9XX1dBVEVSX0ZB
Q1RPUikgewotICAgICAgICBtX2hlYXAubnVtQmxvY2tzID0gbV9oZWFwLm51bUJsb2NrcyAvIEdS
T1dUSF9GQUNUT1I7IAotICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8QWxpZ25l
ZENvbGxlY3RvckJsb2NrKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbV9oZWFwLm51bUJs
b2NrcyAqIHNpemVvZihBbGlnbmVkQ29sbGVjdG9yQmxvY2spKSk7Ci0gICAgfQotfQorI2VsaWYg
T1MoU09MQVJJUykKIAotdm9pZCBIZWFwOjpmcmVlQmxvY2tzKCkKK3ZvaWQgU3RhY2tCb3VuZHM6
OmluaXRpYWxpemUoKQogewotICAgIFByb3RlY3RDb3VudFNldCBwcm90ZWN0ZWRWYWx1ZXNDb3B5
ID0gbV9wcm90ZWN0ZWRWYWx1ZXM7Ci0KLSAgICBjbGVhck1hcmtCaXRzKCk7Ci0gICAgUHJvdGVj
dENvdW50U2V0OjppdGVyYXRvciBwcm90ZWN0ZWRWYWx1ZXNFbmQgPSBwcm90ZWN0ZWRWYWx1ZXND
b3B5LmVuZCgpOwotICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IHByb3Rl
Y3RlZFZhbHVlc0NvcHkuYmVnaW4oKTsgaXQgIT0gcHJvdGVjdGVkVmFsdWVzRW5kOyArK2l0KQot
ICAgICAgICBtYXJrQ2VsbChpdC0+Zmlyc3QpOwotCi0gICAgbV9oZWFwLm5leHRDZWxsID0gMDsK
LSAgICBtX2hlYXAubmV4dEJsb2NrID0gMDsKLSAgICBEZWFkT2JqZWN0SXRlcmF0b3IgaXQobV9o
ZWFwLCBtX2hlYXAubmV4dEJsb2NrLCBtX2hlYXAubmV4dENlbGwpOwotICAgIERlYWRPYmplY3RJ
dGVyYXRvciBlbmQobV9oZWFwLCBtX2hlYXAudXNlZEJsb2Nrcyk7Ci0gICAgZm9yICggOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5+SlNDZWxsKCk7Ci0KLSAgICBBU1NFUlQoIXBy
b3RlY3RlZE9iamVjdENvdW50KCkpOwotCi0gICAgcHJvdGVjdGVkVmFsdWVzRW5kID0gcHJvdGVj
dGVkVmFsdWVzQ29weS5lbmQoKTsKLSAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3Ig
aXQgPSBwcm90ZWN0ZWRWYWx1ZXNDb3B5LmJlZ2luKCk7IGl0ICE9IHByb3RlY3RlZFZhbHVlc0Vu
ZDsgKytpdCkKLSAgICAgICAgaXQtPmZpcnN0LT5+SlNDZWxsKCk7Ci0KLSAgICBmb3IgKHNpemVf
dCBibG9jayA9IDA7IGJsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsrYmxvY2spCi0gICAgICAg
IG1faGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUoKTsKLQotICAgIGZhc3RGcmVlKG1faGVh
cC5ibG9ja3MpOwotCi0gICAgbWVtc2V0KCZtX2hlYXAsIDAsIHNpemVvZihDb2xsZWN0b3JIZWFw
KSk7CisgICAgc3RhY2tfdCBzOworICAgIHRocl9zdGtzZWdtZW50KCZzKTsKKyAgICBtX29yaWdp
biA9IHMuc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZChtX29yaWdpbik7
CiB9CiAKLXZvaWQgSGVhcDo6cmVjb3JkRXh0cmFDb3N0KHNpemVfdCBjb3N0KQotewotICAgIC8v
IE91ciBmcmVxdWVuY3kgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uIHRyaWVzIHRvIGJhbGFuY2UgbWVt
b3J5IHVzZSBhZ2FpbnN0IHNwZWVkCi0gICAgLy8gYnkgY29sbGVjdGluZyBiYXNlZCBvbiB0aGUg
bnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgdmFsdWVzLiBIb3dldmVyLCBmb3IgdmFsdWVzCi0gICAg
Ly8gdGhhdCBob2xkIG9uIHRvIGEgZ3JlYXQgZGVhbCBvZiBtZW1vcnkgdGhhdCdzIG5vdCBpbiB0
aGUgZm9ybSBvZiBvdGhlciBKUyB2YWx1ZXMsCi0gICAgLy8gdGhhdCBpcyBub3QgZ29vZCBlbm91
Z2ggLSBpbiBzb21lIGNhc2VzIGEgbG90IG9mIHRob3NlIG9iamVjdHMgY2FuIHBpbGUgdXAgYW5k
Ci0gICAgLy8gdXNlIGNyYXp5IGFtb3VudHMgb2YgbWVtb3J5IHdpdGhvdXQgYSBHQyBoYXBwZW5p
bmcuIFNvIHdlIHRyYWNrIHRoZXNlIGV4dHJhCi0gICAgLy8gbWVtb3J5IGNvc3RzLiBPbmx5IHVu
dXN1YWxseSBsYXJnZSBvYmplY3RzIGFyZSBub3RlZCwgYW5kIHdlIG9ubHkga2VlcCB0cmFjawot
ICAgIC8vIG9mIHRoaXMgZXh0cmEgY29zdCB1bnRpbCB0aGUgbmV4dCBHQy4gSW4gZ2FyYmFnZSBj
b2xsZWN0ZWQgbGFuZ3VhZ2VzLCBtb3N0IHZhbHVlcwotICAgIC8vIGFyZSBlaXRoZXIgdmVyeSBz
aG9ydCBsaXZlZCB0ZW1wb3Jhcmllcywgb3IgaGF2ZSBleHRyZW1lbHkgbG9uZyBsaWZldGltZXMu
IFNvCi0gICAgLy8gaWYgYSBsYXJnZSB2YWx1ZSBzdXJ2aXZlcyBvbmUgZ2FyYmFnZSBjb2xsZWN0
aW9uLCB0aGVyZSBpcyBub3QgbXVjaCBwb2ludCB0bwotICAgIC8vIGNvbGxlY3RpbmcgbW9yZSBm
cmVxdWVudGx5IGFzIGxvbmcgYXMgaXQgc3RheXMgYWxpdmUuCi0KLSAgICBpZiAobV9oZWFwLmV4
dHJhQ29zdCA+IG1heEV4dHJhQ29zdCAmJiBtX2hlYXAuZXh0cmFDb3N0ID4gbV9oZWFwLnVzZWRC
bG9ja3MgKiBCTE9DS19TSVpFIC8gMikgewotICAgICAgICAvLyBJZiB0aGUgbGFzdCBpdGVyYXRp
b24gdGhyb3VnaCB0aGUgaGVhcCBkZWFsbG9jYXRlZCBibG9ja3MsIHdlIG5lZWQKLSAgICAgICAg
Ly8gdG8gY2xlYW4gdXAgcmVtYWluaW5nIGdhcmJhZ2UgYmVmb3JlIG1hcmtpbmcuIE90aGVyd2lz
ZSwgdGhlIGNvbnNlcnZhdGl2ZQotICAgICAgICAvLyBtYXJraW5nIG1lY2hhbmlzbSBtaWdodCBm
b2xsb3cgYSBwb2ludGVyIHRvIHVubWFwcGVkIG1lbW9yeS4KLSAgICAgICAgaWYgKG1faGVhcC5k
aWRTaHJpbmspCi0gICAgICAgICAgICBzd2VlcCgpOwotICAgICAgICByZXNldCgpOwotICAgIH0K
LSAgICBtX2hlYXAuZXh0cmFDb3N0ICs9IGNvc3Q7Ci19CisjZWxpZiBPUyhPUEVOQlNEKQogCi12
b2lkKiBIZWFwOjphbGxvY2F0ZShzaXplX3QgcykKK3ZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxp
emUoKQogewotICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZpZXJUYWJsZSA9PSB3dGZU
aHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAgICB0eXBlZGVmIEhlYXBD
b25zdGFudHM6OkJsb2NrIEJsb2NrOwotICAgIHR5cGVkZWYgSGVhcENvbnN0YW50czo6Q2VsbCBD
ZWxsOwotICAgIAotICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgQVNT
RVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Ci0gICAgQVNTRVJUX1VO
VVNFRChzLCBzIDw9IEhlYXBDb25zdGFudHM6OmNlbGxTaXplKTsKLQotICAgIEFTU0VSVChtX2hl
YXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7Ci0KLSNpZiBDT0xMRUNUX09O
X0VWRVJZX0FMTE9DQVRJT04KLSAgICBjb2xsZWN0QWxsR2FyYmFnZSgpOwotICAgIEFTU0VSVCht
X2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBOb09wZXJhdGlvbik7Ci0jZW5kaWYKLQotYWxs
b2NhdGU6Ci0KLSAgICAvLyBGYXN0IGNhc2U6IGZpbmQgdGhlIG5leHQgZ2FyYmFnZSBjZWxsIGFu
ZCByZWN5Y2xlIGl0LgotCi0gICAgZG8gewotICAgICAgICBBU1NFUlQobV9oZWFwLm5leHRCbG9j
ayA8IG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICAgICAgQmxvY2sqIGJsb2NrID0gbV9oZWFwLmNv
bGxlY3RvckJsb2NrKG1faGVhcC5uZXh0QmxvY2spOwotICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9oZWFwLm5leHRDZWxsIDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5tYXJrZWQuZ2V0KG1faGVhcC5uZXh0Q2VsbCkpIHsg
Ly8gQWx3YXlzIGZhbHNlIGZvciB0aGUgbGFzdCBjZWxsIGluIHRoZSBibG9jawotICAgICAgICAg
ICAgICAgIENlbGwqIGNlbGwgPSAmYmxvY2stPmNlbGxzW21faGVhcC5uZXh0Q2VsbF07Ci0KLSAg
ICAgICAgICAgICAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFsbG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgSlNDZWxsKiBpbXAgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KGNl
bGwpOwotICAgICAgICAgICAgICAgIGltcC0+fkpTQ2VsbCgpOwotICAgICAgICAgICAgICAgIG1f
aGVhcC5vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247Ci0KLSAgICAgICAgICAgICAg
ICArK21faGVhcC5uZXh0Q2VsbDsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2VsbDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJsb2NrLT5tYXJrZWQuYWR2YW5jZVRvTmV4dFBvc3NpYmxl
RnJlZUNlbGwobV9oZWFwLm5leHRDZWxsKTsKLSAgICAgICAgfSB3aGlsZSAobV9oZWFwLm5leHRD
ZWxsICE9IEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2spOwotICAgICAgICBtX2hlYXAubmV4
dENlbGwgPSAwOwotICAgIH0gd2hpbGUgKCsrbV9oZWFwLm5leHRCbG9jayAhPSBtX2hlYXAudXNl
ZEJsb2Nrcyk7Ci0KLSAgICAvLyBTbG93IGNhc2U6IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaGVh
cC4gTWFyayBsaXZlIG9iamVjdHMgYW5kIHN0YXJ0IG92ZXIuCi0KLSAgICByZXNldCgpOwotICAg
IGdvdG8gYWxsb2NhdGU7CisgICAgcHRocmVhZF90IHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwor
ICAgIHN0YWNrX3Qgc3RhY2s7CisgICAgcHRocmVhZF9zdGFja3NlZ19ucCh0aHJlYWQsICZzdGFj
ayk7CisgICAgbV9vcmlnaW4gPSBzdGFjay5zc19zcDsKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVT
dGFja0JvdW5kKG1fb3JpZ2luKTsKIH0KIAotdm9pZCBIZWFwOjpyZXNpemVCbG9ja3MoKQotewot
ICAgIG1faGVhcC5kaWRTaHJpbmsgPSBmYWxzZTsKKyNlbGlmIE9TKFNZTUJJQU4pCiAKLSAgICBz
aXplX3QgdXNlZENlbGxDb3VudCA9IG1hcmtlZENlbGxzKCk7Ci0gICAgc2l6ZV90IG1pbkNlbGxD
b3VudCA9IHVzZWRDZWxsQ291bnQgKyBtYXgoQUxMT0NBVElPTlNfUEVSX0NPTExFQ1RJT04sIHVz
ZWRDZWxsQ291bnQpOwotICAgIHNpemVfdCBtaW5CbG9ja0NvdW50ID0gKG1pbkNlbGxDb3VudCAr
IEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKSAvIEhlYXBDb25zdGFudHM6OmNlbGxz
UGVyQmxvY2s7Ci0KLSAgICBzaXplX3QgbWF4Q2VsbENvdW50ID0gMS4yNWYgKiBtaW5DZWxsQ291
bnQ7Ci0gICAgc2l6ZV90IG1heEJsb2NrQ291bnQgPSAobWF4Q2VsbENvdW50ICsgSGVhcENvbnN0
YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpIC8gSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jazsK
LQotICAgIGlmIChtX2hlYXAudXNlZEJsb2NrcyA8IG1pbkJsb2NrQ291bnQpCi0gICAgICAgIGdy
b3dCbG9ja3MobWluQmxvY2tDb3VudCk7Ci0gICAgZWxzZSBpZiAobV9oZWFwLnVzZWRCbG9ja3Mg
PiBtYXhCbG9ja0NvdW50KQotICAgICAgICBzaHJpbmtCbG9ja3MobWF4QmxvY2tDb3VudCk7Cit2
b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKK3sKKyAgICBUVGhyZWFkU3RhY2tJbmZvIGlu
Zm87CisgICAgUlRocmVhZCB0aHJlYWQ7CisgICAgdGhyZWFkLlN0YWNrSW5mbyhpbmZvKTsKKyAg
ICBtX29yaWdpbiA9ICh2b2lkKilpbmZvLmlCYXNlOworICAgIG1fYm91bmQgPSBlc3RpbWF0ZVN0
YWNrQm91bmQobV9vcmlnaW4pOwogfQogCi12b2lkIEhlYXA6Omdyb3dCbG9ja3Moc2l6ZV90IG5l
ZWRlZEJsb2NrcykKKyNlbGlmIE9TKEhBSUtVKQorCit2b2lkIFN0YWNrQm91bmRzOjppbml0aWFs
aXplKCkKIHsKLSAgICBBU1NFUlQobV9oZWFwLnVzZWRCbG9ja3MgPCBuZWVkZWRCbG9ja3MpOwot
ICAgIHdoaWxlIChtX2hlYXAudXNlZEJsb2NrcyA8IG5lZWRlZEJsb2NrcykKLSAgICAgICAgYWxs
b2NhdGVCbG9jaygpOworICAgIHRocmVhZF9pbmZvIHRocmVhZEluZm87CisgICAgZ2V0X3RocmVh
ZF9pbmZvKGZpbmRfdGhyZWFkKE5VTEwpLCAmdGhyZWFkSW5mbyk7CisgICAgbV9vcmlnaW4gPSB0
aHJlYWRJbmZvLnN0YWNrX2VuZDsKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0JvdW5kKG1f
b3JpZ2luKTsKIH0KIAotdm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2Nr
cykKKyNlbGlmIE9TKFVOSVgpCisKK3ZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQogewot
ICAgIEFTU0VSVChtX2hlYXAudXNlZEJsb2NrcyA+IG5lZWRlZEJsb2Nrcyk7Ci0gICAgCi0gICAg
Ly8gQ2xlYXIgdGhlIGFsd2F5cy1vbiBsYXN0IGJpdCwgc28gaXNFbXB0eSgpIGlzbid0IGZvb2xl
ZCBieSBpdC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyAr
K2kpCi0gICAgICAgIG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+bWFya2VkLmNsZWFyKEhlYXBD
b25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
ICE9IG1faGVhcC51c2VkQmxvY2tzICYmIG1faGVhcC51c2VkQmxvY2tzICE9IG5lZWRlZEJsb2Nr
czsgKSB7Ci0gICAgICAgIGlmIChtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGZyZWVCbG9jayhpKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICArK2k7Ci0gICAgfQorICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90
IHN0YWNrU2l6ZSA9IDA7CiAKLSAgICAvLyBSZXNldCB0aGUgYWx3YXlzLW9uIGxhc3QgYml0Lgot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAg
ICAgbV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuc2V0KEhlYXBDb25zdGFudHM6OmNl
bGxzUGVyQmxvY2sgLSAxKTsKKyAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7
CisgICAgcHRocmVhZF9hdHRyX3Qgc2F0dHI7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJnNhdHRy
KTsKKyNpZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQorICAgIC8vIGUuZy4gb24g
RnJlZUJTRCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRo
cmVhZCwgJnNhdHRyKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9u
LXBvcnRhYmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRl
cm5hdGl2ZXMKKyAgICBwdGhyZWFkX2dldGF0dHJfbnAodGhyZWFkLCAmc2F0dHIpOworI2VuZGlm
CisgICAgaW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwg
JnN0YWNrU2l6ZSk7CisgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29k
ZSBzb21laG93PyBTZWVtcyBmYXRhbC4KKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICBwdGhy
ZWFkX2F0dHJfZGVzdHJveSgmc2F0dHIpOworICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7CiB9CiAKLSNpZiBPUyhXSU5DRSkKLUpTX0VYUE9SVERBVEEgdm9pZCog
Z19zdGFja0Jhc2UgPSAwOworI2VsaWYgT1MoV0lOQ0UpCisKK30gLy8gbmFtZXNwYWNlIFdURgor
Ly8gRklYTUU6IHRoaXMgaXMgbm90IHRocmVhZHNhZmUsIGFuZCBzaG91bGQgcHJvYmFibHkgYmUg
cmVtb3ZlZC4KK25hbWVzcGFjZSBKU0MgeyBKU19FWFBPUlREQVRBIHZvaWQqIGdfc3RhY2tCYXNl
ID0gMDsgfQorbmFtZXNwYWNlIFdURiB7CiAKIGlubGluZSBib29sIGlzUGFnZVdyaXRhYmxlKHZv
aWQqIHBhZ2UpCiB7CkBAIC00MDgsMTkgKzIyMCwxOCBAQCBpbmxpbmUgYm9vbCBpc1BhZ2VXcml0
YWJsZSh2b2lkKiBwYWdlKQogICAgICAgICB8fCBwcm90ZWN0ID09IFBBR0VfRVhFQ1VURV9XUklU
RUNPUFk7CiB9CiAKLXN0YXRpYyB2b2lkKiBnZXRTdGFja0Jhc2Uodm9pZCogcHJldmlvdXNGcmFt
ZSkKK3N0YXRpYyB2b2lkKiBnZXRTdGFja01heCh2b2lkKiBwcmV2aW91c0ZyYW1lLCBib29sJiBp
c0dyb3dpbmdEb3dud2FyZCkKIHsKICAgICAvLyBmaW5kIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3Rh
Y2sgZnJhbWUgYnkgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUKLSAgICBi
b29sIGlzR3Jvd2luZ0Rvd253YXJkOwotICAgIHZvaWQqIHRoaXNGcmFtZSA9ICh2b2lkKikoJmlz
R3Jvd2luZ0Rvd253YXJkKTsKLQorICAgIHZvaWQqIHRoaXNGcmFtZSA9ICZ0aGlzRnJhbWU7CiAg
ICAgaXNHcm93aW5nRG93bndhcmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKLSAgICBz
dGF0aWMgRFdPUkQgcGFnZVNpemUgPSAwOwotICAgIGlmICghcGFnZVNpemUpIHsKLSAgICAgICAg
U1lTVEVNX0lORk8gc3lzdGVtSW5mbzsKLSAgICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5m
byk7Ci0gICAgICAgIHBhZ2VTaXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOwotICAgIH0KKwor
ICAgIGlmIChKU0M6Omdfc3RhY2tCYXNlKQorICAgICAgICByZXR1cm4gSlNDOjpnX3N0YWNrQmFz
ZTsKKworICAgIFNZU1RFTV9JTkZPIHN5c3RlbUluZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lz
dGVtSW5mbyk7CisgICAgRFdPUkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7CiAK
ICAgICAvLyBzY2FuIGFsbCBvZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQg
cmV0dXJuIHRoZSBsYXN0IHdyaXRlYWJsZSBwYWdlIGZvdW5kCiAgICAgcmVnaXN0ZXIgY2hhciog
Y3VycmVudFBhZ2UgPSAoY2hhciopKChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkp
OwpAQCAtNDQ0LDgyOSArMjU1LDE4IEBAIHN0YXRpYyB2b2lkKiBnZXRTdGFja0Jhc2Uodm9pZCog
cHJldmlvdXMKICAgICAgICAgfQogICAgIH0KIH0KLSNlbmRpZgogCi0jaWYgT1MoUU5YKQotc3Rh
dGljIGlubGluZSB2b2lkICpjdXJyZW50VGhyZWFkU3RhY2tCYXNlUU5YKCkKK3ZvaWQgU3RhY2tC
b3VuZHM6OmluaXRpYWxpemUoKQogewotICAgIHN0YXRpYyB2b2lkKiBzdGFja0Jhc2UgPSAwOwot
ICAgIHN0YXRpYyBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSAgICBzdGF0aWMgcHRocmVhZF90IHN0
YWNrVGhyZWFkOwotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBp
ZiAoc3RhY2tCYXNlID09IDAgfHwgdGhyZWFkICE9IHN0YWNrVGhyZWFkKSB7Ci0gICAgICAgIHN0
cnVjdCBfZGVidWdfdGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICAgICAgbWVtc2V0KCZ0aHJl
YWRJbmZvLCAwLCBzaXplb2YodGhyZWFkSW5mbykpOwotICAgICAgICB0aHJlYWRJbmZvLnRpZCA9
IHB0aHJlYWRfc2VsZigpOwotICAgICAgICBpbnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19S
RE9OTFkpOwotICAgICAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIG9wZW4gL3Byb2Mvc2VsZiAoZXJybm86ICVkKSIsIGVycm5vKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGRldmN0bChmZCwgRENNRF9QUk9DX1RJ
RFNUQVRVUywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Ci0gICAgICAgIGNs
b3NlKGZkKTsKLSAgICAgICAgc3RhY2tCYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odGhy
ZWFkSW5mby5zdGtiYXNlKTsKLSAgICAgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXpl
OwotICAgICAgICBBU1NFUlQoc3RhY2tCYXNlKTsKLSAgICAgICAgc3RhY2tUaHJlYWQgPSB0aHJl
YWQ7Ci0gICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0
YWNrU2l6ZTsKKyAgICBib29sIGlzR3Jvd2luZ0Rvd253YXJkCisgICAgbV9vcmlnaW4gPSBnZXRT
dGFja01heChpc0dyb3dpbmdEb3dud2FyZCk7CisgICAgbV9ib3VuZCA9IGlzR3Jvd2luZ0Rvd253
YXJkCisgICAgICAgID8gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fb3JpZ2luKSAtIGVzdGltYXRlZFN0
YWNrU2l6ZQorICAgICAgICA6IHN0YXRpY19jYXN0PGNoYXIqPihtX29yaWdpbikgKyBlc3RpbWF0
ZWRTdGFja1NpemU7CiB9Ci0jZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkKiBjdXJyZW50VGhy
ZWFkU3RhY2tCYXNlKCkKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgcHRocmVhZF90IHRocmVhZCA9
IHB0aHJlYWRfc2VsZigpOwotICAgIHJldHVybiBwdGhyZWFkX2dldF9zdGFja2FkZHJfbnAodGhy
ZWFkKTsKLSNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMpCi0g
ICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBv
aW50ZXIgdG8KLSAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3Vy
cmVudCB0aHJlYWQKLSAgICBOVF9USUIqIHBUaWI7Ci0gICAgX19hc20gewotICAgICAgICBNT1Yg
RUFYLCBGUzpbMThoXQotICAgICAgICBNT1YgcFRpYiwgRUFYCi0gICAgfQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDx2b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsKLSNlbGlmIE9TKFdJTkRPV1MpICYm
IENQVShYODYpICYmIENPTVBJTEVSKEdDQykKLSAgICAvLyBvZmZzZXQgMHgxOCBmcm9tIHRoZSBG
UyBzZWdtZW50IHJlZ2lzdGVyIGdpdmVzIGEgcG9pbnRlciB0bwotICAgIC8vIHRoZSB0aHJlYWQg
aW5mb3JtYXRpb24gYmxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZAotICAgIE5UX1RJQiogcFRp
YjsKLSAgICBhc20gKCAibW92bCAlJWZzOjB4MTgsICUwXG4iCi0gICAgICAgICAgOiAiPXIiIChw
VGliKQotICAgICAgICApOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4ocFRpYi0+U3Rh
Y2tCYXNlKTsKLSNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCi0gICAgUE5UX1RJQjY0
IHBUaWIgPSByZWludGVycHJldF9jYXN0PFBOVF9USUI2ND4oTnRDdXJyZW50VGViKCkpOwotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwotI2VsaWYg
T1MoUU5YKQotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0g
Km5ldyBNdXRleCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4KTsKLSAgICByZXR1cm4g
Y3VycmVudFRocmVhZFN0YWNrQmFzZVFOWCgpOwotI2VsaWYgT1MoU09MQVJJUykKLSAgICBzdGFj
a190IHM7Ci0gICAgdGhyX3N0a3NlZ21lbnQoJnMpOwotICAgIHJldHVybiBzLnNzX3NwOwotI2Vs
aWYgT1MoT1BFTkJTRCkKLSAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7Ci0g
ICAgc3RhY2tfdCBzdGFjazsKLSAgICBwdGhyZWFkX3N0YWNrc2VnX25wKHRocmVhZCwgJnN0YWNr
KTsKLSAgICByZXR1cm4gc3RhY2suc3Nfc3A7Ci0jZWxpZiBPUyhTWU1CSUFOKQotICAgIFRUaHJl
YWRTdGFja0luZm8gaW5mbzsKLSAgICBSVGhyZWFkIHRocmVhZDsKLSAgICB0aHJlYWQuU3RhY2tJ
bmZvKGluZm8pOwotICAgIHJldHVybiAodm9pZCopaW5mby5pQmFzZTsKLSNlbGlmIE9TKEhBSUtV
KQotICAgIHRocmVhZF9pbmZvIHRocmVhZEluZm87Ci0gICAgZ2V0X3RocmVhZF9pbmZvKGZpbmRf
dGhyZWFkKE5VTEwpLCAmdGhyZWFkSW5mbyk7Ci0gICAgcmV0dXJuIHRocmVhZEluZm8uc3RhY2tf
ZW5kOwotI2VsaWYgT1MoVU5JWCkKLSAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0
ZXgmLCBtdXRleCA9ICpuZXcgTXV0ZXgpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7
Ci0gICAgc3RhdGljIHZvaWQqIHN0YWNrQmFzZSA9IDA7Ci0gICAgc3RhdGljIHNpemVfdCBzdGFj
a1NpemUgPSAwOwotICAgIHN0YXRpYyBwdGhyZWFkX3Qgc3RhY2tUaHJlYWQ7Ci0gICAgcHRocmVh
ZF90IHRocmVhZCA9IHB0aHJlYWRfc2VsZigpOwotICAgIGlmIChzdGFja0Jhc2UgPT0gMCB8fCB0
aHJlYWQgIT0gc3RhY2tUaHJlYWQpIHsKLSAgICAgICAgcHRocmVhZF9hdHRyX3Qgc2F0dHI7Ci0g
ICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZzYXR0cik7Ci0jaWYgSEFWRShQVEhSRUFEX05QX0gp
IHx8IE9TKE5FVEJTRCkKLSAgICAgICAgLy8gZS5nLiBvbiBGcmVlQlNEIDUuNCwgbmV1bmRvcmZA
a2RlLm9yZwotICAgICAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRocmVhZCwgJnNhdHRyKTsKICNl
bHNlCi0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGlzIG5vbi1wb3J0YWJsZTsgb3Ro
ZXIgUE9TSVggc3lzdGVtcyBtYXkgaGF2ZSBkaWZmZXJlbnQgbnAgYWx0ZXJuYXRpdmVzCi0gICAg
ICAgIHB0aHJlYWRfZ2V0YXR0cl9ucCh0aHJlYWQsICZzYXR0cik7Ci0jZW5kaWYKLSAgICAgICAg
aW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwgJnN0YWNr
U2l6ZSk7Ci0gICAgICAgICh2b2lkKXJjOyAvLyBGSVhNRTogRGVhbCB3aXRoIGVycm9yIGNvZGUg
c29tZWhvdz8gU2VlbXMgZmF0YWwuCi0gICAgICAgIEFTU0VSVChzdGFja0Jhc2UpOwotICAgICAg
ICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmc2F0dHIpOwotICAgICAgICBzdGFja1RocmVhZCA9IHRo
cmVhZDsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihzdGFja0Jhc2UpICsg
c3RhY2tTaXplOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgQXRvbWljYWxseUluaXRpYWxpemVkU3Rh
dGljKE11dGV4JiwgbXV0ZXggPSAqbmV3IE11dGV4KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
bXV0ZXgpOwotICAgIGlmIChnX3N0YWNrQmFzZSkKLSAgICAgICAgcmV0dXJuIGdfc3RhY2tCYXNl
OwotICAgIGVsc2UgewotICAgICAgICBpbnQgZHVtbXk7Ci0gICAgICAgIHJldHVybiBnZXRTdGFj
a0Jhc2UoJmR1bW15KTsKLSAgICB9Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRo
ZSBzdGFjayBiYXNlIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEpT
Q19NVUxUSVBMRV9USFJFQURTKQotCi1zdGF0aWMgaW5saW5lIFBsYXRmb3JtVGhyZWFkIGdldEN1
cnJlbnRQbGF0Zm9ybVRocmVhZCgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHJldHVybiBwdGhy
ZWFkX21hY2hfdGhyZWFkX25wKHB0aHJlYWRfc2VsZigpKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0g
ICAgcmV0dXJuIHB0aHJlYWRfZ2V0dzMydGhyZWFkaGFuZGxlX25wKHB0aHJlYWRfc2VsZigpKTsK
LSNlbmRpZgotfQotCi12b2lkIEhlYXA6Om1ha2VVc2FibGVGcm9tTXVsdGlwbGVUaHJlYWRzKCkK
LXsKLSAgICBpZiAobV9jdXJyZW50VGhyZWFkUmVnaXN0cmFyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbnQgZXJyb3IgPSBwdGhyZWFkX2tleV9jcmVhdGUoJm1fY3VycmVudFRocmVhZFJlZ2lz
dHJhciwgdW5yZWdpc3RlclRocmVhZCk7Ci0gICAgaWYgKGVycm9yKQotICAgICAgICBDUkFTSCgp
OwotfQotCi12b2lkIEhlYXA6OnJlZ2lzdGVyVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoIW1fZ2xv
YmFsRGF0YS0+ZXhjbHVzaXZlVGhyZWFkIHx8IG1fZ2xvYmFsRGF0YS0+ZXhjbHVzaXZlVGhyZWFk
ID09IGN1cnJlbnRUaHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fY3VycmVudFRocmVhZFJlZ2lzdHJh
ciB8fCBwdGhyZWFkX2dldHNwZWNpZmljKG1fY3VycmVudFRocmVhZFJlZ2lzdHJhcikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMobV9jdXJyZW50VGhyZWFkUmVn
aXN0cmFyLCB0aGlzKTsKLSAgICBIZWFwOjpUaHJlYWQqIHRocmVhZCA9IG5ldyBIZWFwOjpUaHJl
YWQocHRocmVhZF9zZWxmKCksIGdldEN1cnJlbnRQbGF0Zm9ybVRocmVhZCgpLCBjdXJyZW50VGhy
ZWFkU3RhY2tCYXNlKCkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJl
YWRzTXV0ZXgpOwotCi0gICAgdGhyZWFkLT5uZXh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkczsKLSAg
ICBtX3JlZ2lzdGVyZWRUaHJlYWRzID0gdGhyZWFkOwotfQotCi12b2lkIEhlYXA6OnVucmVnaXN0
ZXJUaHJlYWQodm9pZCogcCkKLXsKLSAgICBpZiAocCkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SGVh
cCo+KHApLT51bnJlZ2lzdGVyVGhyZWFkKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dW5yZWdpc3RlclRo
cmVhZCgpCi17Ci0gICAgcHRocmVhZF90IGN1cnJlbnRQb3NpeFRocmVhZCA9IHB0aHJlYWRfc2Vs
ZigpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3JlZ2lzdGVyZWRUaHJlYWRzTXV0ZXgpOwot
Ci0gICAgaWYgKHB0aHJlYWRfZXF1YWwoY3VycmVudFBvc2l4VGhyZWFkLCBtX3JlZ2lzdGVyZWRU
aHJlYWRzLT5wb3NpeFRocmVhZCkpIHsKLSAgICAgICAgVGhyZWFkKiB0ID0gbV9yZWdpc3RlcmVk
VGhyZWFkczsKLSAgICAgICAgbV9yZWdpc3RlcmVkVGhyZWFkcyA9IG1fcmVnaXN0ZXJlZFRocmVh
ZHMtPm5leHQ7Ci0gICAgICAgIGRlbGV0ZSB0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEhlYXA6
OlRocmVhZCogbGFzdCA9IG1fcmVnaXN0ZXJlZFRocmVhZHM7Ci0gICAgICAgIEhlYXA6OlRocmVh
ZCogdDsKLSAgICAgICAgZm9yICh0ID0gbV9yZWdpc3RlcmVkVGhyZWFkcy0+bmV4dDsgdDsgdCA9
IHQtPm5leHQpIHsKLSAgICAgICAgICAgIGlmIChwdGhyZWFkX2VxdWFsKHQtPnBvc2l4VGhyZWFk
LCBjdXJyZW50UG9zaXhUaHJlYWQpKSB7Ci0gICAgICAgICAgICAgICAgbGFzdC0+bmV4dCA9IHQt
Pm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsYXN0ID0gdDsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodCk7IC8vIElmIHQgaXMgTlVM
TCwgd2UgbmV2ZXIgZm91bmQgb3Vyc2VsdmVzIGluIHRoZSBsaXN0LgotICAgICAgICBkZWxldGUg
dDsKLSAgICB9Ci19Ci0KLSNlbHNlIC8vIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKLQot
dm9pZCBIZWFwOjpyZWdpc3RlclRocmVhZCgpCi17Ci19Ci0KLSNlbmRpZgotCi1pbmxpbmUgYm9v
bCBpc1BvaW50ZXJBbGlnbmVkKHZvaWQqIHApCi17Ci0gICAgcmV0dXJuICgoKGludHB0cl90KShw
KSAmIChzaXplb2YoY2hhciopIC0gMSkpID09IDApOwotfQotCi0vLyBDZWxsIHNpemUgbmVlZHMg
dG8gYmUgYSBwb3dlciBvZiB0d28gZm9yIGlzUG9zc2libGVDZWxsIHRvIGJlIHZhbGlkLgotQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKENvbGxlY3RvckNlbGwpICUgMiA9PSAwLCBDb2xsZWN0b3JfY2Vs
bF9zaXplX2lzX3Bvd2VyX29mX3R3byk7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0NlbGxBbGln
bmVkKHZvaWQgKnApCi17Ci0gICAgcmV0dXJuICgoKGludHB0cl90KShwKSAmIENFTExfTUFTSykg
PT0gMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc3NpYmxlQ2VsbCh2b2lkKiBwKQot
ewotICAgIHJldHVybiBpc0NlbGxBbGlnbmVkKHApICYmIHA7Ci19Ci0KLXZvaWQgSGVhcDo6bWFy
a0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrLCB2b2lkKiBzdGFydCwgdm9pZCog
ZW5kKQotewotICAgIGlmIChzdGFydCA+IGVuZCkgewotICAgICAgICB2b2lkKiB0bXAgPSBzdGFy
dDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAgIGVuZCA9IHRtcDsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoKHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0
YXJ0KSkgPCAweDEwMDAwMDApOwotICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKHN0YXJ0KSk7
Ci0gICAgQVNTRVJUKGlzUG9pbnRlckFsaWduZWQoZW5kKSk7Ci0KLSAgICBjaGFyKiogcCA9IHN0
YXRpY19jYXN0PGNoYXIqKj4oc3RhcnQpOwotICAgIGNoYXIqKiBlID0gc3RhdGljX2Nhc3Q8Y2hh
cioqPihlbmQpOwotCi0gICAgd2hpbGUgKHAgIT0gZSkgewotICAgICAgICBjaGFyKiB4ID0gKnAr
KzsKLSAgICAgICAgaWYgKGlzUG9zc2libGVDZWxsKHgpKSB7Ci0gICAgICAgICAgICBzaXplX3Qg
dXNlZEJsb2NrczsKLSAgICAgICAgICAgIHVpbnRwdHJfdCB4QXNCaXRzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHgpOwotICAgICAgICAgICAgeEFzQml0cyAmPSBDRUxMX0FMSUdOX01B
U0s7Ci0KLSAgICAgICAgICAgIHVpbnRwdHJfdCBvZmZzZXQgPSB4QXNCaXRzICYgQkxPQ0tfT0ZG
U0VUX01BU0s7Ci0gICAgICAgICAgICBjb25zdCBzaXplX3QgbGFzdENlbGxPZmZzZXQgPSBzaXpl
b2YoQ29sbGVjdG9yQ2VsbCkgKiAoQ0VMTFNfUEVSX0JMT0NLIC0gMSk7Ci0gICAgICAgICAgICBp
ZiAob2Zmc2V0ID4gbGFzdENlbGxPZmZzZXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgICAgIENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJldF9jYXN0
PENvbGxlY3RvckJsb2NrKj4oeEFzQml0cyAtIG9mZnNldCk7Ci0gICAgICAgICAgICB1c2VkQmxv
Y2tzID0gbV9oZWFwLnVzZWRCbG9ja3M7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9
IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewotICAgICAgICAgICAgICAgIGlmICht
X2hlYXAuY29sbGVjdG9yQmxvY2soYmxvY2spICE9IGJsb2NrQWRkcikKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChyZWludGVy
cHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBORVZFUl9JTkxJTkUgSGVhcDo6bWFya0N1cnJlbnRUaHJlYWRDb25z
ZXJ2YXRpdmVseUludGVybmFsKE1hcmtTdGFjayYgbWFya1N0YWNrKQotewotICAgIHZvaWQqIGR1
bW15OwotICAgIHZvaWQqIHN0YWNrUG9pbnRlciA9ICZkdW1teTsKLSAgICB2b2lkKiBzdGFja0Jh
c2UgPSBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCk7Ci0gICAgbWFya0NvbnNlcnZhdGl2ZWx5KG1h
cmtTdGFjaywgc3RhY2tQb2ludGVyLCBzdGFja0Jhc2UpOwotICAgIG1hcmtTdGFjay5kcmFpbigp
OwotfQotCi0jaWYgQ09NUElMRVIoR0NDKQotI2RlZmluZSBSRUdJU1RFUl9CVUZGRVJfQUxJR05N
RU5UIF9fYXR0cmlidXRlX18gKChhbGlnbmVkIChzaXplb2Yodm9pZCopKSkpCi0jZWxzZQotI2Rl
ZmluZSBSRUdJU1RFUl9CVUZGRVJfQUxJR05NRU5UCi0jZW5kaWYKLQotdm9pZCBIZWFwOjptYXJr
Q3VycmVudFRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYgbWFya1N0YWNrKQotewotICAg
IC8vIHNldGptcCBmb3JjZXMgdm9sYXRpbGUgcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrCi0gICAg
am1wX2J1ZiByZWdpc3RlcnMgUkVHSVNURVJfQlVGRkVSX0FMSUdOTUVOVDsKLSNpZiBDT01QSUxF
UihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDYxMSkKKyNlcnJvciBOZWVkIGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgYm91bmRzIG9uIHRoaXMg
cGxhdGZvcm0KICNlbmRpZgotICAgIHNldGptcChyZWdpc3RlcnMpOwotI2lmIENPTVBJTEVSKE1T
VkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLSAgICBtYXJrQ3VycmVudFRocmVh
ZENvbnNlcnZhdGl2ZWx5SW50ZXJuYWwobWFya1N0YWNrKTsKLX0KLQotI2lmIEVOQUJMRShKU0Nf
TVVMVElQTEVfVEhSRUFEUykKLQotc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRUaHJlYWQoY29u
c3QgUGxhdGZvcm1UaHJlYWQmIHBsYXRmb3JtVGhyZWFkKQotewotI2lmIE9TKERBUldJTikKLSAg
ICB0aHJlYWRfc3VzcGVuZChwbGF0Zm9ybVRocmVhZCk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAg
IFN1c3BlbmRUaHJlYWQocGxhdGZvcm1UaHJlYWQpOwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5
IHRvIHN1c3BlbmQgdGhyZWFkcyBvbiB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIHJlc3VtZVRocmVhZChjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1U
aHJlYWQpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHRocmVhZF9yZXN1bWUocGxhdGZvcm1UaHJl
YWQpOwotI2VsaWYgT1MoV0lORE9XUykKLSAgICBSZXN1bWVUaHJlYWQocGxhdGZvcm1UaHJlYWQp
OwotI2Vsc2UKLSNlcnJvciBOZWVkIGEgd2F5IHRvIHJlc3VtZSB0aHJlYWRzIG9uIHRoaXMgcGxh
dGZvcm0KLSNlbmRpZgotfQotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdXN3b3JkX3Q7IC8vIHdv
cmQgc2l6ZSwgYXNzdW1lZCB0byBiZSBlaXRoZXIgMzIgb3IgNjQgYml0Ci0KLSNpZiBPUyhEQVJX
SU4pCi0KLSNpZiBDUFUoWDg2KQotdHlwZWRlZiBpMzg2X3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
VGhyZWFkUmVnaXN0ZXJzOwotI2VsaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYgeDg2X3RocmVhZF9z
dGF0ZTY0X3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnM7Ci0jZWxpZiBDUFUoUFBDKQotdHlwZWRl
ZiBwcGNfdGhyZWFkX3N0YXRlX3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnM7Ci0jZWxpZiBDUFUo
UFBDNjQpCi10eXBlZGVmIHBwY190aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtVGhyZWFkUmVnaXN0
ZXJzOwotI2VsaWYgQ1BVKEFSTSkKLXR5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZV90IFBsYXRmb3Jt
VGhyZWFkUmVnaXN0ZXJzOwotI2Vsc2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2Vu
ZGlmCi0KLSNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODYpCi10eXBlZGVmIENPTlRFWFQgUGxh
dGZvcm1UaHJlYWRSZWdpc3RlcnM7Ci0jZWxzZQotI2Vycm9yIE5lZWQgYSB0aHJlYWQgcmVnaXN0
ZXIgc3RydWN0IGZvciB0aGlzIHBsYXRmb3JtCi0jZW5kaWYKLQotc3RhdGljIHNpemVfdCBnZXRQ
bGF0Zm9ybVRocmVhZFJlZ2lzdGVycyhjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdGZvcm1UaHJl
YWQsIFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzJiByZWdzKQotewotI2lmIE9TKERBUldJTikKLQot
I2lmIENQVShYODYpCi0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IHNpemVvZihyZWdzKS9zaXpl
b2YoaW50KTsKLSAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gaTM4Nl9USFJFQURf
U1RBVEU7Ci0jZWxpZiBDUFUoWDg2XzY0KQotICAgIHVuc2lnbmVkIHVzZXJfY291bnQgPSB4ODZf
VEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9
IHg4Nl9USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShQUEMpIAotICAgIHVuc2lnbmVkIHVzZXJf
Y291bnQgPSBQUENfVEhSRUFEX1NUQVRFX0NPVU5UOwotICAgIHRocmVhZF9zdGF0ZV9mbGF2b3Jf
dCBmbGF2b3IgPSBQUENfVEhSRUFEX1NUQVRFOwotI2VsaWYgQ1BVKFBQQzY0KQotICAgIHVuc2ln
bmVkIHVzZXJfY291bnQgPSBQUENfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7Ci0gICAgdGhyZWFkX3N0
YXRlX2ZsYXZvcl90IGZsYXZvciA9IFBQQ19USFJFQURfU1RBVEU2NDsKLSNlbGlmIENQVShBUk0p
Ci0gICAgdW5zaWduZWQgdXNlcl9jb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Ci0gICAg
dGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7Ci0jZWxzZQot
I2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCi0jZW5kaWYKLQotICAgIGtlcm5fcmV0dXJuX3Qg
cmVzdWx0ID0gdGhyZWFkX2dldF9zdGF0ZShwbGF0Zm9ybVRocmVhZCwgZmxhdm9yLCAodGhyZWFk
X3N0YXRlX3QpJnJlZ3MsICZ1c2VyX2NvdW50KTsKLSAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VD
Q0VTUykgewotICAgICAgICBXVEZSZXBvcnRGYXRhbEVycm9yKF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkphdmFT
Y3JpcHQgZ2FyYmFnZSBjb2xsZWN0aW9uIGZhaWxlZCBiZWNhdXNlIHRocmVhZF9nZXRfc3RhdGUg
cmV0dXJuZWQgYW4gZXJyb3IgKCVkKS4gVGhpcyBpcyBwcm9iYWJseSB0aGUgcmVzdWx0IG9mIHJ1
bm5pbmcgaW5zaWRlIFJvc2V0dGEsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIiwgcmVzdWx0KTsK
LSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVzZXJfY291bnQgKiBzaXplb2Yo
dXN3b3JkX3QpOwotLy8gZW5kIE9TKERBUldJTikKLQotI2VsaWYgT1MoV0lORE9XUykgJiYgQ1BV
KFg4NikKLSAgICByZWdzLkNvbnRleHRGbGFncyA9IENPTlRFWFRfSU5URUdFUiB8IENPTlRFWFRf
Q09OVFJPTCB8IENPTlRFWFRfU0VHTUVOVFM7Ci0gICAgR2V0VGhyZWFkQ29udGV4dChwbGF0Zm9y
bVRocmVhZCwgJnJlZ3MpOwotICAgIHJldHVybiBzaXplb2YoQ09OVEVYVCk7Ci0jZWxzZQotI2Vy
cm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRocmVhZCByZWdpc3RlcnMgb24gdGhpcyBwbGF0Zm9ybQot
I2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCogb3RoZXJUaHJlYWRTdGFja1BvaW50ZXIo
Y29uc3QgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnMmIHJlZ3MpCi17Ci0jaWYgT1MoREFSV0lOKQot
Ci0jaWYgX19EQVJXSU5fVU5JWDAzCi0KLSNpZiBDUFUoWDg2KQotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWdzLl9fZXNwKTsKLSNlbGlmIENQVShYODZfNjQpCi0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3MuX19yc3ApOwotI2VsaWYgQ1BVKFBQQykg
fHwgQ1BVKFBQQzY0KQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLl9f
cjEpOwotI2VsaWYgQ1BVKEFSTSkKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVncy5fX3NwKTsKLSNlbHNlCi0jZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKLSNlbmRpZgot
Ci0jZWxzZSAvLyAhX19EQVJXSU5fVU5JWDAzCi0KLSNpZiBDUFUoWDg2KQotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLmVzcCk7Ci0jZWxpZiBDUFUoWDg2XzY0KQotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdzLnJzcCk7Ci0jZWxpZiBDUFUoUFBD
KSB8fCBDUFUoUFBDNjQpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ3Mu
cjEpOwotI2Vsc2UKLSNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQotI2VuZGlmCi0KLSNlbmRp
ZiAvLyBfX0RBUldJTl9VTklYMDMKLQotLy8gZW5kIE9TKERBUldJTikKLSNlbGlmIENQVShYODYp
ICYmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCh1aW50
cHRyX3QpIHJlZ3MuRXNwKTsKLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0
YWNrIHBvaW50ZXIgZm9yIGFub3RoZXIgdGhyZWFkIG9uIHRoaXMgcGxhdGZvcm0KLSNlbmRpZgot
fQotCi12b2lkIEhlYXA6Om1hcmtPdGhlclRocmVhZENvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYg
bWFya1N0YWNrLCBUaHJlYWQqIHRocmVhZCkKLXsKLSAgICBzdXNwZW5kVGhyZWFkKHRocmVhZC0+
cGxhdGZvcm1UaHJlYWQpOwotCi0gICAgUGxhdGZvcm1UaHJlYWRSZWdpc3RlcnMgcmVnczsKLSAg
ICBzaXplX3QgcmVnU2l6ZSA9IGdldFBsYXRmb3JtVGhyZWFkUmVnaXN0ZXJzKHRocmVhZC0+cGxh
dGZvcm1UaHJlYWQsIHJlZ3MpOwotCi0gICAgLy8gbWFyayB0aGUgdGhyZWFkJ3MgcmVnaXN0ZXJz
Ci0gICAgbWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjaywgc3RhdGljX2Nhc3Q8dm9pZCo+KCZy
ZWdzKSwgc3RhdGljX2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZyZWdzKSAr
IHJlZ1NpemUpKTsKLSAgICBtYXJrU3RhY2suZHJhaW4oKTsKLQotICAgIHZvaWQqIHN0YWNrUG9p
bnRlciA9IG90aGVyVGhyZWFkU3RhY2tQb2ludGVyKHJlZ3MpOwotICAgIG1hcmtDb25zZXJ2YXRp
dmVseShtYXJrU3RhY2ssIHN0YWNrUG9pbnRlciwgdGhyZWFkLT5zdGFja0Jhc2UpOwotICAgIG1h
cmtTdGFjay5kcmFpbigpOwotCi0gICAgcmVzdW1lVGhyZWFkKHRocmVhZC0+cGxhdGZvcm1UaHJl
YWQpOwotfQotCi0jZW5kaWYKLQotdm9pZCBIZWFwOjptYXJrU3RhY2tPYmplY3RzQ29uc2VydmF0
aXZlbHkoTWFya1N0YWNrJiBtYXJrU3RhY2spCi17Ci0gICAgbWFya0N1cnJlbnRUaHJlYWRDb25z
ZXJ2YXRpdmVseShtYXJrU3RhY2spOwotCi0jaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURT
KQotCi0gICAgaWYgKG1fY3VycmVudFRocmVhZFJlZ2lzdHJhcikgewotCi0gICAgICAgIE11dGV4
TG9ja2VyIGxvY2sobV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKLQotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgLy8gRm9yYmlkIG1hbGxvYyBkdXJpbmcgdGhlIG1hcmsgcGhhc2UuIE1hcmtpbmcg
YSB0aHJlYWQgc3VzcGVuZHMgaXQsIHNvIAotICAgICAgICAvLyBhIG1hbGxvYyBpbnNpZGUgbWFy
a0NoaWxkcmVuKCkgd291bGQgcmlzayBhIGRlYWRsb2NrIHdpdGggYSB0aHJlYWQgdGhhdCBoYWQg
YmVlbiAKLSAgICAgICAgLy8gc3VzcGVuZGVkIHdoaWxlIGhvbGRpbmcgdGhlIG1hbGxvYyBsb2Nr
LgotICAgICAgICBmYXN0TWFsbG9jRm9yYmlkKCk7Ci0jZW5kaWYKLSAgICAgICAgLy8gSXQgaXMg
c2FmZSB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVyZWRUaHJlYWRzIGxpc3QsIGJlY2F1c2Ugd2UgZWFy
bGllciBhc3NlcnRlZCB0aGF0IGxvY2tzIGFyZSBiZWluZyBoZWxkLAotICAgICAgICAvLyBhbmQg
c2luY2UgdGhpcyBpcyBhIHNoYXJlZCBoZWFwLCB0aGV5IGFyZSByZWFsIGxvY2tzLgotICAgICAg
ICBmb3IgKFRocmVhZCogdGhyZWFkID0gbV9yZWdpc3RlcmVkVGhyZWFkczsgdGhyZWFkOyB0aHJl
YWQgPSB0aHJlYWQtPm5leHQpIHsKLSAgICAgICAgICAgIGlmICghcHRocmVhZF9lcXVhbCh0aHJl
YWQtPnBvc2l4VGhyZWFkLCBwdGhyZWFkX3NlbGYoKSkpCi0gICAgICAgICAgICAgICAgbWFya090
aGVyVGhyZWFkQ29uc2VydmF0aXZlbHkobWFya1N0YWNrLCB0aHJlYWQpOwotICAgICAgICB9Ci0j
aWZuZGVmIE5ERUJVRwotICAgICAgICBmYXN0TWFsbG9jQWxsb3coKTsKLSNlbmRpZgotICAgIH0K
LSNlbmRpZgotfQotCi12b2lkIEhlYXA6OnVwZGF0ZVdlYWtHQ0hhbmRsZXMoKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3dlYWtHQ0hhbmRsZVBvb2xzLnNpemUoKTsgKytpKQot
ICAgICAgICB3ZWFrR0NIYW5kbGVQb29sKGkpLT51cGRhdGUoKTsKLX0KLQotdm9pZCBXZWFrR0NI
YW5kbGVQb29sOjp1cGRhdGUoKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBXZWFr
R0NIYW5kbGVQb29sOjpudW1Qb29sRW50cmllczsgKytpKSB7Ci0gICAgICAgIGlmIChtX2VudHJp
ZXNbaV0uaXNWYWxpZFB0cigpKSB7Ci0gICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2VudHJp
ZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWNlbGwgfHwgIUhlYXA6OmlzQ2VsbE1hcmtl
ZChjZWxsKSkKLSAgICAgICAgICAgICAgICBtX2VudHJpZXNbaV0uaW52YWxpZGF0ZSgpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi1XZWFrR0NIYW5kbGUqIEhlYXA6OmFkZFdlYWtHQ0hhbmRsZShK
U0NlbGwqIHB0cikKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV93ZWFrR0NIYW5k
bGVQb29scy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYgKCF3ZWFrR0NIYW5kbGVQb29sKGkpLT5p
c0Z1bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB3ZWFrR0NIYW5kbGVQb29sKGkpLT5hbGxvY2F0
ZShwdHIpOwotCi0gICAgQWxpZ25lZE1lbW9yeTxXZWFrR0NIYW5kbGVQb29sOjpwb29sU2l6ZT4g
YWxsb2NhdGlvbiA9IG1fd2Vha0dDSGFuZGxlUG9vbEFsbG9jYXRvci5hbGxvY2F0ZSgpOwotICAg
IG1fd2Vha0dDSGFuZGxlUG9vbHMuYXBwZW5kKGFsbG9jYXRpb24pOwotCi0gICAgV2Vha0dDSGFu
ZGxlUG9vbCogcG9vbCA9IG5ldyAoYWxsb2NhdGlvbikgV2Vha0dDSGFuZGxlUG9vbCgpOwotICAg
IHJldHVybiBwb29sLT5hbGxvY2F0ZShwdHIpOwotfQotCi12b2lkIEhlYXA6OnByb3RlY3QoSlNW
YWx1ZSBrKQotewotICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7
Ci0KLSAgICBpZiAoIWsuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJvdGVj
dGVkVmFsdWVzLmFkZChrLmFzQ2VsbCgpKTsKLX0KLQotYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNW
YWx1ZSBrKQotewotICAgIEFTU0VSVChrKTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhy
ZWFkSXNIb2xkaW5nTG9jaygpIHx8ICFtX2dsb2JhbERhdGEtPmlzU2hhcmVkSW5zdGFuY2UoKSk7
Ci0KLSAgICBpZiAoIWsuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBtX3Byb3RlY3RlZFZhbHVlcy5yZW1vdmUoay5hc0NlbGwoKSk7Ci19Ci0KLXZvaWQgSGVh
cDo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0YWNrJiBtYXJrU3RhY2spCi17Ci0gICAgUHJv
dGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKLSAg
ICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgbWFya1N0YWNrLmFwcGVuZChpdC0+
Zmlyc3QpOwotICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKLSAgICB9Ci19Ci0KLXZvaWQgSGVh
cDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9y
KQotewotICAgIG1fdGVtcFNvcnRpbmdWZWN0b3JzLmFwcGVuZCh0ZW1wVmVjdG9yKTsKLX0KLQot
dm9pZCBIZWFwOjpwb3BUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVt
cFZlY3RvcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHRlbXBWZWN0b3IsIHRlbXBWZWN0b3IgPT0g
bV90ZW1wU29ydGluZ1ZlY3RvcnMubGFzdCgpKTsKLSAgICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5y
ZW1vdmVMYXN0KCk7Ci19Ci0gICAgCi12b2lkIEhlYXA6Om1hcmtUZW1wU29ydFZlY3RvcnMoTWFy
a1N0YWNrJiBtYXJrU3RhY2spCi17Ci0gICAgdHlwZWRlZiBWZWN0b3I8VmVjdG9yPFZhbHVlU3Ry
aW5nUGFpcj4qID4gVmVjdG9yT2ZWYWx1ZVN0cmluZ1ZlY3RvcnM7Ci0KLSAgICBWZWN0b3JPZlZh
bHVlU3RyaW5nVmVjdG9yczo6aXRlcmF0b3IgZW5kID0gbV90ZW1wU29ydGluZ1ZlY3RvcnMuZW5k
KCk7Ci0gICAgZm9yIChWZWN0b3JPZlZhbHVlU3RyaW5nVmVjdG9yczo6aXRlcmF0b3IgaXQgPSBt
X3RlbXBTb3J0aW5nVmVjdG9ycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
VmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBTb3J0aW5nVmVjdG9yID0gKml0OwotCi0gICAg
ICAgIFZlY3RvcjxWYWx1ZVN0cmluZ1BhaXI+OjppdGVyYXRvciB2ZWN0b3JFbmQgPSB0ZW1wU29y
dGluZ1ZlY3Rvci0+ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj46
Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdGVtcFNvcnRpbmdWZWN0b3ItPmJlZ2luKCk7IHZlY3Rvckl0
ICE9IHZlY3RvckVuZDsgKyt2ZWN0b3JJdCkKLSAgICAgICAgICAgIGlmICh2ZWN0b3JJdC0+Zmly
c3QpCi0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2ZWN0b3JJdC0+Zmlyc3QpOwot
ICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKLSAgICB9Ci19Ci0gICAgCi12b2lkIEhlYXA6OmNs
ZWFyTWFya0JpdHMoKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRC
bG9ja3M7ICsraSkKLSAgICAgICAgY2xlYXJNYXJrQml0cyhtX2hlYXAuY29sbGVjdG9yQmxvY2so
aSkpOwotfQotCi12b2lkIEhlYXA6OmNsZWFyTWFya0JpdHMoQ29sbGVjdG9yQmxvY2sqIGJsb2Nr
KQotewotICAgIC8vIGFsbG9jYXRlIGFzc3VtZXMgdGhhdCB0aGUgbGFzdCBjZWxsIGluIGV2ZXJ5
IGJsb2NrIGlzIG1hcmtlZC4KLSAgICBibG9jay0+bWFya2VkLmNsZWFyQWxsKCk7Ci0gICAgYmxv
Y2stPm1hcmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOwotfQotCi1z
aXplX3QgSGVhcDo6bWFya2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENl
bGwpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHN0YXJ0QmxvY2sgPD0gbV9oZWFwLnVzZWRCbG9ja3Mp
OwotICAgIEFTU0VSVChzdGFydENlbGwgPCBIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrKTsK
LQotICAgIGlmIChzdGFydEJsb2NrID49IG1faGVhcC51c2VkQmxvY2tzKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIHJlc3VsdCArPSBtX2hlYXAuY29s
bGVjdG9yQmxvY2soc3RhcnRCbG9jayktPm1hcmtlZC5jb3VudChzdGFydENlbGwpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSBzdGFydEJsb2NrICsgMTsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kp
Ci0gICAgICAgIHJlc3VsdCArPSBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5jb3Vu
dCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBIZWFwOjpzd2VlcCgpCi17Ci0g
ICAgQVNTRVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKLSAg
ICBpZiAobV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgbV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwot
ICAgIAotI2lmICFFTkFCTEUoSlNDX1pPTUJJRVMpCi0gICAgU3RydWN0dXJlKiBkdW1teU1hcmth
YmxlQ2VsbFN0cnVjdHVyZSA9IG1fZ2xvYmFsRGF0YS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1
cmUuZ2V0KCk7Ci0jZW5kaWYKLQotICAgIERlYWRPYmplY3RJdGVyYXRvciBpdChtX2hlYXAsIG1f
aGVhcC5uZXh0QmxvY2ssIG1faGVhcC5uZXh0Q2VsbCk7Ci0gICAgRGVhZE9iamVjdEl0ZXJhdG9y
IGVuZChtX2hlYXAsIG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICBmb3IgKCA7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBKU0NlbGwqIGNlbGwgPSAqaXQ7Ci0jaWYgRU5BQkxFKEpTQ19aT01C
SUVTKQotICAgICAgICBpZiAoIWNlbGwtPmlzWm9tYmllKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IENsYXNzSW5mbyogaW5mbyA9IGNlbGwtPmNsYXNzSW5mbygpOwotICAgICAgICAgICAgY2VsbC0+
fkpTQ2VsbCgpOwotICAgICAgICAgICAgbmV3IChjZWxsKSBKU1pvbWJpZShpbmZvLCBKU1pvbWJp
ZTo6bGVha2VkWm9tYmllU3RydWN0dXJlKCkpOwotICAgICAgICAgICAgSGVhcDo6bWFya0NlbGwo
Y2VsbCk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGNlbGwtPn5KU0NlbGwoKTsKLSAgICAg
ICAgLy8gQ2FsbGVycyBvZiBzd2VlcCBhc3N1bWUgaXQncyBzYWZlIHRvIG1hcmsgYW55IGNlbGwg
aW4gdGhlIGhlYXAuCi0gICAgICAgIG5ldyAoY2VsbCkgSlNDZWxsKGR1bW15TWFya2FibGVDZWxs
U3RydWN0dXJlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIG1faGVhcC5vcGVyYXRpb25JblByb2dy
ZXNzID0gTm9PcGVyYXRpb247Ci19Ci0KLXZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKLXsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgaWYgKG1fZ2xvYmFsRGF0YS0+aXNTaGFyZWRJbnN0YW5jZSgpKSB7Ci0g
ICAgICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgICAgIEFTU0VSVChK
U0xvY2s6OmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgQVNTRVJUKG1faGVhcC5vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKLSAg
ICBpZiAobV9oZWFwLm9wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCi0gICAgICAg
IENSQVNIKCk7Ci0KLSAgICBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247
Ci0KLSAgICBNYXJrU3RhY2smIG1hcmtTdGFjayA9IG1fZ2xvYmFsRGF0YS0+bWFya1N0YWNrOwot
Ci0gICAgLy8gUmVzZXQgbWFyayBiaXRzLgotICAgIGNsZWFyTWFya0JpdHMoKTsKLQotICAgIC8v
IE1hcmsgc3RhY2sgcm9vdHMuCi0gICAgbWFya1N0YWNrT2JqZWN0c0NvbnNlcnZhdGl2ZWx5KG1h
cmtTdGFjayk7Ci0gICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCku
bWFya0NhbGxGcmFtZXMobWFya1N0YWNrLCB0aGlzKTsKLQotICAgIC8vIE1hcmsgZXhwbGljaXRs
eSByZWdpc3RlcmVkIHJvb3RzLgotICAgIG1hcmtQcm90ZWN0ZWRPYmplY3RzKG1hcmtTdGFjayk7
Ci0gICAgCi0gICAgLy8gTWFyayB0ZW1wb3JhcnkgdmVjdG9yIGZvciBBcnJheSBzb3J0aW5nCi0g
ICAgbWFya1RlbXBTb3J0VmVjdG9ycyhtYXJrU3RhY2spOwotCi0gICAgLy8gTWFyayBtaXNjLiBv
dGhlciByb290cy4KLSAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXpl
KCkpCi0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMobWFya1N0YWNrLCAq
bV9tYXJrTGlzdFNldCk7Ci0gICAgaWYgKG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKQotICAgICAg
ICBtYXJrU3RhY2suYXBwZW5kKG1fZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uKTsKLSAgICBpZiAobV9n
bG9iYWxEYXRhLT5maXJzdFN0cmluZ2lmaWVyVG9NYXJrKQotICAgICAgICBKU09OT2JqZWN0Ojpt
YXJrU3RyaW5naWZpZXJzKG1hcmtTdGFjaywgbV9nbG9iYWxEYXRhLT5maXJzdFN0cmluZ2lmaWVy
VG9NYXJrKTsKLQotICAgIC8vIE1hcmsgdGhlIHNtYWxsIHN0cmluZ3MgY2FjaGUgbGFzdCwgc2lu
Y2UgaXQgd2lsbCBjbGVhciBpdHNlbGYgaWYgbm90aGluZwotICAgIC8vIGVsc2UgaGFzIG1hcmtl
ZCBpdC4KLSAgICBtX2dsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5tYXJrQ2hpbGRyZW4obWFya1N0
YWNrKTsKLQotICAgIG1hcmtTdGFjay5kcmFpbigpOwotICAgIG1hcmtTdGFjay5jb21wYWN0KCk7
Ci0KLSAgICB1cGRhdGVXZWFrR0NIYW5kbGVzKCk7Ci0KLSAgICBtX2hlYXAub3BlcmF0aW9uSW5Q
cm9ncmVzcyA9IE5vT3BlcmF0aW9uOwotfQotCi1zaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2hlYXAubmV4dEJsb2NrICogSGVhcENvbnN0YW50czo6Y2Vs
bHNQZXJCbG9jayAvLyBhbGxvY2F0ZWQgZnVsbCBibG9ja3MKLSAgICAgICAgICAgKyBtX2hlYXAu
bmV4dENlbGwgLy8gYWxsb2NhdGVkIGNlbGxzIGluIGN1cnJlbnQgYmxvY2sKLSAgICAgICAgICAg
KyBtYXJrZWRDZWxscyhtX2hlYXAubmV4dEJsb2NrLCBtX2hlYXAubmV4dENlbGwpIC8vIG1hcmtl
ZCBjZWxscyBpbiByZW1haW5kZXIgb2YgbV9oZWFwCi0gICAgICAgICAgIC0gbV9oZWFwLnVzZWRC
bG9ja3M7IC8vIDEgY2VsbCBwZXIgYmxvY2sgaXMgYSBkdW1teSBzZW50aW5lbAotfQotCi12b2lk
IEhlYXA6OmFkZFRvU3RhdGlzdGljcyhIZWFwOjpTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25z
dAotewotICAgIHN0YXRpc3RpY3Muc2l6ZSArPSBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJ
WkU7Ci0gICAgc3RhdGlzdGljcy5mcmVlICs9IG1faGVhcC51c2VkQmxvY2tzICogQkxPQ0tfU0la
RSAtIChvYmplY3RDb3VudCgpICogSGVhcENvbnN0YW50czo6Y2VsbFNpemUpOwotfQotCi1IZWFw
OjpTdGF0aXN0aWNzIEhlYXA6OnN0YXRpc3RpY3MoKSBjb25zdAotewotICAgIFN0YXRpc3RpY3Mg
c3RhdGlzdGljcyA9IHsgMCwgMCB9OwotICAgIGFkZFRvU3RhdGlzdGljcyhzdGF0aXN0aWNzKTsK
LSAgICByZXR1cm4gc3RhdGlzdGljczsKLX0KLQotc2l6ZV90IEhlYXA6OnNpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2hlYXAudXNlZEJsb2NrcyAqIEJMT0NLX1NJWkU7Ci19Ci0KLXNpemVf
dCBIZWFwOjpnbG9iYWxPYmplY3RDb3VudCgpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gMDsKLSAg
ICBpZiAoSlNHbG9iYWxPYmplY3QqIGhlYWQgPSBtX2dsb2JhbERhdGEtPmhlYWQpIHsKLSAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIG8gPSBoZWFkOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICAr
K2NvdW50OwotICAgICAgICAgICAgbyA9IG8tPm5leHQoKTsKLSAgICAgICAgfSB3aGlsZSAobyAh
PSBoZWFkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1zaXplX3QgSGVhcDo6cHJv
dGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKQotewotICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAg
aWYgKEpTR2xvYmFsT2JqZWN0KiBoZWFkID0gbV9nbG9iYWxEYXRhLT5oZWFkKSB7Ci0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBvID0gaGVhZDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYg
KG1fcHJvdGVjdGVkVmFsdWVzLmNvbnRhaW5zKG8pKQotICAgICAgICAgICAgICAgICsrY291bnQ7
Ci0gICAgICAgICAgICBvID0gby0+bmV4dCgpOwotICAgICAgICB9IHdoaWxlIChvICE9IGhlYWQp
OwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotc2l6ZV90IEhlYXA6OnByb3RlY3Rl
ZE9iamVjdENvdW50KCkKLXsKLSAgICByZXR1cm4gbV9wcm90ZWN0ZWRWYWx1ZXMuc2l6ZSgpOwot
fQotCi1zdGF0aWMgY29uc3QgY2hhciogdHlwZU5hbWUoSlNDZWxsKiBjZWxsKQotewotICAgIGlm
IChjZWxsLT5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4gInN0cmluZyI7Ci0gICAgaWYgKGNl
bGwtPmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgIHJldHVybiAiR2V0dGVyLVNldHRlciI7Ci0g
ICAgaWYgKGNlbGwtPmlzQVBJVmFsdWVXcmFwcGVyKCkpCi0gICAgICAgIHJldHVybiAiQVBJIHdy
YXBwZXIiOwotICAgIGlmIChjZWxsLT5pc1Byb3BlcnR5TmFtZUl0ZXJhdG9yKCkpCi0gICAgICAg
IHJldHVybiAiRm9yLWluIGl0ZXJhdG9yIjsKLSAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCi0g
ICAgICAgIHJldHVybiAiW2VtcHR5IGNlbGxdIjsKLSAgICBjb25zdCBDbGFzc0luZm8qIGluZm8g
PSBjZWxsLT5jbGFzc0luZm8oKTsKLSAgICByZXR1cm4gaW5mbyA/IGluZm8tPmNsYXNzTmFtZSA6
ICJPYmplY3QiOwotfQotCi1IYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIEhlYXA6OnByb3Rl
Y3RlZE9iamVjdFR5cGVDb3VudHMoKQotewotICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIq
PiogY291bnRzID0gbmV3IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjsKLQotICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7Ci0gICAg
Zm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb3VudHMtPmFkZCh0eXBlTmFtZShpdC0+
Zmlyc3QpKTsKLQotICAgIHJldHVybiBjb3VudHM7Ci19Ci0KLUhhc2hDb3VudGVkU2V0PGNvbnN0
IGNoYXIqPiogSGVhcDo6b2JqZWN0VHlwZUNvdW50cygpCi17Ci0gICAgSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+KiBjb3VudHMgPSBuZXcgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+Owot
Ci0gICAgTGl2ZU9iamVjdEl0ZXJhdG9yIGl0ID0gcHJpbWFyeUhlYXBCZWdpbigpOwotICAgIExp
dmVPYmplY3RJdGVyYXRvciBoZWFwRW5kID0gcHJpbWFyeUhlYXBFbmQoKTsKLSAgICBmb3IgKCA7
IGl0ICE9IGhlYXBFbmQ7ICsraXQpCi0gICAgICAgIGNvdW50cy0+YWRkKHR5cGVOYW1lKCppdCkp
OwotCi0gICAgcmV0dXJuIGNvdW50czsKLX0KLQotYm9vbCBIZWFwOjppc0J1c3koKQotewotICAg
IHJldHVybiBtX2hlYXAub3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBOb09wZXJhdGlvbjsKLX0KLQot
dm9pZCBIZWFwOjpyZXNldCgpCi17Ci0gICAgQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmll
clRhYmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwotICAg
IEpBVkFTQ1JJUFRDT1JFX0dDX0JFR0lOKCk7Ci0KLSAgICBtYXJrUm9vdHMoKTsKLQotICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwotCi0gICAgbV9oZWFwLm5leHRDZWxsID0gMDsKLSAg
ICBtX2hlYXAubmV4dEJsb2NrID0gMDsKLSAgICBtX2hlYXAubmV4dE51bWJlciA9IDA7Ci0gICAg
bV9oZWFwLmV4dHJhQ29zdCA9IDA7Ci0jaWYgRU5BQkxFKEpTQ19aT01CSUVTKQotICAgIHN3ZWVw
KCk7Ci0jZW5kaWYKLSAgICByZXNpemVCbG9ja3MoKTsKLQotICAgIEpBVkFTQ1JJUFRDT1JFX0dD
X0VORCgpOwotCi0gICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7Ci19Ci0KLXZvaWQgSGVhcDo6
Y29sbGVjdEFsbEdhcmJhZ2UoKQotewotICAgIEFTU0VSVChnbG9iYWxEYXRhKCktPmlkZW50aWZp
ZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJsZSgpKTsKLSAg
ICBKQVZBU0NSSVBUQ09SRV9HQ19CRUdJTigpOwotCi0gICAgLy8gSWYgdGhlIGxhc3QgaXRlcmF0
aW9uIHRocm91Z2ggdGhlIGhlYXAgZGVhbGxvY2F0ZWQgYmxvY2tzLCB3ZSBuZWVkCi0gICAgLy8g
dG8gY2xlYW4gdXAgcmVtYWluaW5nIGdhcmJhZ2UgYmVmb3JlIG1hcmtpbmcuIE90aGVyd2lzZSwg
dGhlIGNvbnNlcnZhdGl2ZQotICAgIC8vIG1hcmtpbmcgbWVjaGFuaXNtIG1pZ2h0IGZvbGxvdyBh
IHBvaW50ZXIgdG8gdW5tYXBwZWQgbWVtb3J5LgotICAgIGlmIChtX2hlYXAuZGlkU2hyaW5rKQot
ICAgICAgICBzd2VlcCgpOwotCi0gICAgbWFya1Jvb3RzKCk7Ci0KLSAgICBKQVZBU0NSSVBUQ09S
RV9HQ19NQVJLRUQoKTsKLQotICAgIG1faGVhcC5uZXh0Q2VsbCA9IDA7Ci0gICAgbV9oZWFwLm5l
eHRCbG9jayA9IDA7Ci0gICAgbV9oZWFwLm5leHROdW1iZXIgPSAwOwotICAgIG1faGVhcC5leHRy
YUNvc3QgPSAwOwotICAgIHN3ZWVwKCk7Ci0gICAgcmVzaXplQmxvY2tzKCk7Ci0KLSAgICBKQVZB
U0NSSVBUQ09SRV9HQ19FTkQoKTsKLX0KLQotTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnByaW1h
cnlIZWFwQmVnaW4oKQotewotICAgIHJldHVybiBMaXZlT2JqZWN0SXRlcmF0b3IobV9oZWFwLCAw
KTsKLX0KLQotTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlIZWFwRW5kKCkKLXsKLSAg
ICByZXR1cm4gTGl2ZU9iamVjdEl0ZXJhdG9yKG1faGVhcCwgbV9oZWFwLnVzZWRCbG9ja3MpOwot
fQotCi12b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5
Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCi17Ci0gICAgbV9hY3Rpdml0eUNhbGxiYWNrID0g
YWN0aXZpdHlDYWxsYmFjazsKLX0KLQotR0NBY3Rpdml0eUNhbGxiYWNrKiBIZWFwOjphY3Rpdml0
eUNhbGxiYWNrKCkKLXsKLSAgICByZXR1cm4gbV9hY3Rpdml0eUNhbGxiYWNrLmdldCgpOwotfQog
Ci19IC8vIG5hbWVzcGFjZSBKU0MKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogSmF2YVNjcmlw
dENvcmUvd3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3Rm
L1N0YWNrQm91bmRzLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tC
b3VuZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lm
bmRlZiBTdGFja0JvdW5kc19oCisjZGVmaW5lIFN0YWNrQm91bmRzX2gKKworbmFtZXNwYWNlIFdU
RiB7CisKK2NsYXNzIFN0YWNrQm91bmRzIHsKKyAgICAvLyByZWN1cnNpb25DaGVjaygpIC8gcmVj
dXJzaW9uTGltaXQoKSB0ZXN0cyAoYnkgZGVmYXVsdCkKKyAgICAvLyB0aGF0IHdlIGFyZSBhdCBs
ZWFzdCB0aGlzIGZhciBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgorICAgIGNvbnN0IHN0YXRp
YyBzaXplX3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA0MDk2OworCitwdWJsaWM6Cisg
ICAgU3RhY2tCb3VuZHMoKQorICAgICAgICA6IG1fb3JpZ2luKDApCisgICAgICAgICwgbV9ib3Vu
ZCgwKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhY2tCb3VuZHMgY3VycmVudFRocmVh
ZFN0YWNrQm91bmRzKCkKKyAgICB7CisgICAgICAgIFN0YWNrQm91bmRzIGJvdW5kczsKKyAgICAg
ICAgYm91bmRzLmluaXRpYWxpemUoKTsKKyAgICAgICAgYm91bmRzLmNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICB2b2lkKiBvcmlnaW4oKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1f
b3JpZ2luOworICAgIH0KKworICAgIHZvaWQqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAm
Y3VycmVudFBvc2l0aW9uOworICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOworICAgIH0K
KworICAgIHZvaWQqIHJlY3Vyc2lvbkxpbWl0KHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNf
ZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAgICAg
ICAgPyBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgKyBtaW5BdmFpbGFibGVEZWx0YQorICAg
ICAgICAgICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFpbGFibGVEZWx0
YTsKKyAgICB9CisKKyAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5BdmFpbGFibGVE
ZWx0YSA9IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQor
ICAgICAgICAgICAgPyBjdXJyZW50KCkgPj0gcmVjdXJzaW9uTGltaXQobWluQXZhaWxhYmxlRGVs
dGEpCisgICAgICAgICAgICA6IGN1cnJlbnQoKSA8PSByZWN1cnNpb25MaW1pdChtaW5BdmFpbGFi
bGVEZWx0YSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisK
KyAgICBib29sIGlzR3Jvd2luZ0Rvd253YXJkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29yaWdpbiAmJiBtX2JvdW5kKTsKKyNpZiBPUyhXSU5DRSkKKyAgICAgICAgcmV0dXJuIG1f
b3JpZ2luID4gbV9ib3VuZDsKKyNlbHNlCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKKyAgICB7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVudFBv
c2l0aW9uOworICAgICAgICBBU1NFUlQobV9vcmlnaW4gIT0gbV9ib3VuZCk7CisgICAgICAgIEFT
U0VSVChpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IChjdXJyZW50UG9zaXRpb24g
PCBtX29yaWdpbiAmJiBjdXJyZW50UG9zaXRpb24gPiBtX2JvdW5kKQorICAgICAgICAgICAgOiAo
Y3VycmVudFBvc2l0aW9uID4gbV9vcmlnaW4gJiYgY3VycmVudFBvc2l0aW9uIDwgbV9ib3VuZCkp
OworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCogbV9vcmlnaW47CisgICAgdm9pZCogbV9ib3Vu
ZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0YWNrQm91bmRzOwor
CisjZW5kaWYgLyogU3RhY2tCb3VuZHNfaCAqLwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1dU
RlRocmVhZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJl
YWREYXRhLmNwcAkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvV1RGVGhy
ZWFkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDkgKzQyLDggQEAgV1RGVGhyZWFkRGF0
YTo6V1RGVGhyZWFkRGF0YSgpCiAgICAgLCBtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUobmV3IEpT
Qzo6SWRlbnRpZmllclRhYmxlKCkpCiAgICAgLCBtX2N1cnJlbnRJZGVudGlmaWVyVGFibGUobV9k
ZWZhdWx0SWRlbnRpZmllclRhYmxlKQogI2VuZGlmCisgICAgLCBtX3N0YWNrQm91bmRzKFN0YWNr
Qm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKSkKIHsKLSAgICBjaGFyIHNhbXBsZSA9
IDA7Ci0gICAgbV9hcHByb3hpbWF0ZWRTdGFja1N0YXJ0ID0gJnNhbXBsZTsKIH0KIAogV1RGVGhy
ZWFkRGF0YTo6fldURlRocmVhZERhdGEoKQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1dURlRo
cmVhZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0
YS5oCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCiAvLyBUaGlzIHdhcyBFTkFCTEUoV09SS0VSUykgaW4gV2ViQ29yZSwgYnV0
IHRoaXMgaXMgbm90IGRlZmluZWQgd2hlbiBjb21waWxpbmcgSlNDLgpAQCAtMTEzLDkgKzExNCw5
IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIGNoYXIqIGFwcHJveGltYXRlZFN0YWNr
U3RhcnQoKSBjb25zdAorICAgIGNvbnN0IFN0YWNrQm91bmRzJiBzdGFjaygpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9hcHByb3hpbWF0ZWRTdGFja1N0YXJ0OworICAgICAgICByZXR1
cm4gbV9zdGFja0JvdW5kczsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMzUsNyArMTM2LDcgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgV1RGVGhyZWFkRGF0YSYgd3RmVGhyZWFkRGF0YSgpOwogICAg
IGZyaWVuZCBjbGFzcyBBdG9taWNTdHJpbmdUYWJsZTsKIAotICAgIGNoYXIqIG1fYXBwcm94aW1h
dGVkU3RhY2tTdGFydDsKKyAgICBTdGFja0JvdW5kcyBtX3N0YWNrQm91bmRzOwogfTsKIAogaW5s
aW5lIFdURlRocmVhZERhdGEmIHd0ZlRocmVhZERhdGEoKQpJbmRleDogSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNp
b24gNzQzMTcpCisrKyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAxMC0xMi0xOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3Vn
aEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDI2Mjc2IC0gTmVlZCBhIG1lY2hhbmlzbSB0byBkZXRlcm1pbmUgc3RhY2sgZXh0
ZW50CisKKyAgICAgICAgQWRkIGZvcndhcmRpbmcgaGVhZGVyIGZvciBTdGFja0JvdW5kcy5oLgor
CisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmg6IEFkZGVkLgor
CiAyMDEwLTEyLTAxICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQnVpbGQgZml4OiBBZGRlZCBhIGZvcndhcmRpbmcgaGVhZGVyLgpJbmRleDogSmF2YVNjcmlw
dEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmgJKHJldmlz
aW9uIDApCisrKyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3Vu
ZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N0YWNrQm91bmRzLmg+CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQzMTcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTE4ICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjYyNzYgLSBOZWVkIGEgbWVjaGFuaXNtIHRvIGRl
dGVybWluZSBzdGFjayBleHRlbnQKKworICAgICAgICBBZGQgZm9yd2FyZGluZyBoZWFkZXIgZm9y
IFN0YWNrQm91bmRzLmguCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tC
b3VuZHMuaDogQWRkZWQuCisKIDIwMTAtMTItMTggIEhlbGRlciBDb3JyZWlhICA8aGVsZGVyQHNl
bmNoYS5jb20+IGFuZCBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvU3RhY2tCb3VuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3VuZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1N0YWNrQm91bmRzX2gKKyNkZWZpbmUgV2ViQ29y
ZV9GV0RfU3RhY2tCb3VuZHNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0YWNrQm91bmRz
Lmg+CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77027</attachid>
            <date>2010-12-20 12:43:39 -0800</date>
            <delta_ts>2010-12-20 12:45:48 -0800</delta_ts>
            <desc>The patch (fix makefiles)</desc>
            <filename>StackBounds.3.patch</filename>
            <type>text/plain</type>
            <size>45882</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MzE3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTAtMTItMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20g
dG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGNs
YXNzICdTdGFja0JvdW5kcycsIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hY2hpbmUg
c3RhY2suCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGJyb2FkbHkg
YWRoZXJlcyB0byB0aGUgY3VycmVudCBpbXBsbWVudGF0aW9uIG9mCisgICAgICAgIHN0YWNrIGxp
bWl0IGNoZWNraW5nLCBhbmQgYXMgc3VjaCBkb2VzIG5vdCBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBk
ZXRlcm1pbmluZyBzdGFjaworICAgICAgICBleHRlbnQsIGJ1dCBnaXZlcyB1cyBhIGNvbW1vbiBw
bGFjZSB0byBkbyBzby4KKworICAgICAgICBDdXJyZW50bHkgdHdvIG1lY2hhbmlzbSBhcmUgcHJv
dmlkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBvcmlnaW4gKHRoZSBwb2ludCB0aGUKKyAgICAg
ICAgc3RhY2sgaXMgZ3Jvd2luZyBhd2F5IGZyb20pLiBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCkg
aW4gQ29sbGVjdG9yIHByb3ZpZGVzIGEKKyAgICAgICAgbW9yZSBhY2N1cmF0ZSBkZXRlcm1pbmF0
aW9uIG9mIHRoZSBzdGFjayBvcmlnaW4sIHNvIHVzZSB0aGlzIHRvIGNhbGN1bGF0ZQorICAgICAg
ICBTdGFja0JvdW5kczo6bV9vcmlnaW47IFdURlRocmVhZERhdGE6OmFwcHJveGltYXRlZFN0YWNr
U3RhcnQgaXMgbGVzcyBhY2N1cmF0ZSwgYW5kCisgICAgICAgIGFzIHN1Y2ggY2FuIGJlIHJlbW92
ZWQuICBDYWNoZSB0aGUgU3RhY2tCb3VuZHMgb24gV1RGVGhyZWFkRGF0YSBzdWNoIHRoYXQgdGhl
eQorICAgICAgICBuZWVkIG9ubHkgYmUgZGV0ZXJtaW5lZCBvbmNlIHBlciB0aHJlYWQsIGFuZCBm
b3Igbm9uLUFQSSBjb250ZXh0cyBjYWNoZSB0aGlzCisgICAgICAgIGluZm9ybWF0aW9uIGluIEpT
R2xvYmFsRGF0YSwgdG8gc2F2ZSBhIHRocmVhZC1zcGVjaWZpYyBhY2Nlc3MuCisKKyAgICAgICAg
Rm9yIHRoZSB0aW1lIGJlaW5nIHJldGFpbiB0aGUgZXN0aW1hdGUgb2Ygc3RhY2sgc2l6ZSB1c2Vk
IGJ5IEpTQydzIHBhcnNlcgorICAgICAgICAoMTI4ICogc2l6ZW9mKHZvaWQqKSAqIDEwMjQpLCB3
aXRoIGEgdmlldyB0byByZXBsYWNpbmcgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlCisgICAgICAg
IGFjY3VyYXRlIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAgICAgICAqIHBhcnNlci9KU1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpjYW5SZWN1cnNlKToKKyAgICAgICAgKEpT
Qzo6SlNQYXJzZXI6OkpTUGFyc2VyKToKKyAgICAgICAgICAgIENoYW5nZSB0byB1c2UgU3RhY2tC
b3VuZHMuCisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDdXJyZW50VGhy
ZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbCk6CisgICAgICAgICAgICBDaGFuZ2UgdG8gdXNlIFN0
YWNrQm91bmRzLCBjYWNoZWQgb24gSlNHbG9iYWxEYXRhLgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsRGF0YTo6c3RhY2spOgorICAgICAgICAgICAgQWRkIGEgY2FjaGVkIGNvcHkgb2YgU3RhY2tC
b3VuZHMuCisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmNwcDogQ29waWVkIGZyb20gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwLgorICAgICAgICAoV1RGOjplc3RpbWF0ZVN0
YWNrQm91bmQpOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXVEY6OmdldFN0YWNrTWF4KToKKyAgICAgICAgICAgIENvcHkgY29kZSBmcm9tIENvbGxl
Y3Rvci5jcHAgdG8gZGV0ZXJtaW5lIHN0YWNrIG9yaWdpbi4KKyAgICAgICAgKiB3dGYvU3RhY2tC
b3VuZHMuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6
CisgICAgICAgICAgICBObyBhcmd1bWVudCBjb25zdHJ1Y3RvcjsgcmV0dXJucyBhIG51bGwgU3Rh
Y2tCb3VuZHMuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tC
b3VuZHMpOgorICAgICAgICAgICAgUmV0dXJucyBhIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIHN0YWNrIGxpbWl0cworICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgdGhyZWFk
LgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6b3JpZ2luKToKKyAgICAgICAgICAgIFJldHVy
bnMgdG8gc3RhY2sgb3JpZ2luICh0aGUgcG9pbnQgdGhlIHN0YWNrIGlzIGdyb3dpbmcgYXdheQor
ICAgICAgICAgICAgZnJvbTsgdGhlIGhpZ2hlc3QgZXh0ZW50IG9mIHRoZSBzdGFjayBvbiBtYWNo
aW5lcyB3aGVyZSB0aGUKKyAgICAgICAgICAgIHN0YWNrIGdyb3dzIGRvd253YXJkcy4KKyAgICAg
ICAgKFdURjo6U3RhY2tCb3VuZHM6OnJlY3Vyc2lvbkxpbWl0KToKKyAgICAgICAgICAgIFJldHVy
bnMgYSBsaW1pdCB2YWx1ZSB0aGF0IGlzICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZyb20KKyAg
ICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhpcyBpcyBj
dXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93ZXZlciB0
aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBmdXR1cmUs
IGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhOworICAgICAg
ICAgICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlCisgICAgICAgICAgICBzdGFjayBvZiB0aGUgdGhyZWFkIHRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBvbiAoY2hlY2tlZCBieQorICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSkuCisg
ICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpyZWN1cnNpb25DaGVjayk6CisgICAgICAgICAgICBD
aGVja3Mgd2hldGhlciB3ZSBhcmUgY3VycmVudGx5ICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZy
b20KKyAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhp
cyBpcyBjdXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93
ZXZlciB0aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBm
dXR1cmUsIGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhCisg
ICAgICAgICAgICB0byBhcHBseSB3aGVuIGNoZWNraW5nLCBpZiB0aGV5IHdpc2ggdG8gZG8gc28u
IFRoaXMgbWV0aG9kCisgICAgICAgICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gU3RhY2tC
b3VuZHMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUKKyAgICAgICAgICAgIHN0YWNrIG9mIHRoZSB0
aHJlYWQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIChjaGVja2VkIGJ5CisgICAgICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KS4KKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OmN1cnJlbnQpOgor
ICAgICAgICAgICAgQXBwcm94aW1hdGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4gT24gbWFjaGlu
ZXMgd2hlcmUgdGhlIHN0YWNrCisgICAgICAgICAgICBpcyBncm93aW5nIGRvd253YXJkcyB0aGlz
IGlzIHRoZSBsb3dlc3QgYWRkcmVzcyB0aGF0IG1pZ2h0IG5lZWQKKyAgICAgICAgICAgIGNvbnNl
cnZhdGl2ZSBjb2xsZWN0aW9uLgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aXNHcm93aW5n
RG93bndhcmQpOgorICAgICAgICAgICAgVHJ1ZSBmb3IgYWxsIHBsYXRmb3JtcyBvdGhlciB0aGFu
IFdJTkNFLCB3aGljaCBoYXMgdG8gY2hlY2suCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGluIG1ldGhvZHMg
dGhhdCBzaG91bGRzIG9ubHkgYmUgb3BlcmF0aW5nIG9uIGEKKyAgICAgICAgICAgIHZhbGlkIHNl
dCBvZiBib3VuZHM7IGFzIHN1Y2ggd2UgZXhwZWN0IG1fb3JpZ2luICE9IG1fYm91bmRzCisgICAg
ICAgICAgICAoaS5lLiBzdGFjayBzaXplICE9IHplcm8pIC0gd2UncmUgcmVhbGx5IHRlc3Rpbmcg
dGhhdCB0aGlzCisgICAgICAgICAgICBvYmplY3QgaXMgbm90IG51bGwgKHRoZSBjb25zdHJ1Y3Rv
ciBpbml0aWFsaXplcyBib3RoIGZpZWxkcworICAgICAgICAgICAgdG8gemVybykuICBBbHNvIGNo
ZWNrcyB0aGF0IGN1cnJlbnQoKSBpcyB3aXRoaW4gdGhlIHN0YWNrJ3MKKyAgICAgICAgICAgIGJv
dW5kcy4KKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldU
RlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRh
Lmg6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNrKToKKyAgICAgICAgICAgIEFk
ZCB0aGUgU3RhY2tCb3VuZHMgbWVtYmVyIHZhcmlhYmxlLgorCiAyMDEwLTEyLTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRD
b3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gXAogCWppdC9QYWdlQWxsb2NhdGlvbi5jcHBcCiAJd3RmL1JhbmRvbU51bWJl
ci5jcHAgXAogCXd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKKyAgICB3dGYvU3RhY2tC
b3VuZHMuY3BwIFwKIAl3dGYvVENTeXN0ZW1BbGxvYy5jcHAgXAogCXd0Zi9UaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBcCiAJd3RmL1RocmVhZGluZy5jcHAgXApJbmRleDogSmF2YVNj
cmlwdENvcmUvQW5kcm9pZC52OC53dGYubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
QW5kcm9pZC52OC53dGYubWsJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvQW5k
cm9pZC52OC53dGYubWsJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9IFwKIAl3dGYvTWFpblRocmVhZC5jcHAgXAogCXd0Zi9SYW5kb21OdW1iZXIuY3Bw
IFwKIAl3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBcCisgICAgd3RmL1N0YWNrQm91bmRz
LmNwcCBcCiAJd3RmL1RDU3lzdGVtQWxsb2MuY3BwIFwKIAl3dGYvVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAgXAogCXd0Zi9UaHJlYWRpbmcuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL1JldGFpblB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVj
dG9yLmggXAorICAgIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAgXAorICAgIEph
dmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvU3Rh
dGljQ29uc3RydWN0b3JzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaCBc
CiAJSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0V4dHJhcy5oIFwKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNiArNDI0LDggQEAKICAgICAg
ICAgICAgICd3dGYvUmV0YWluUHRyLmgnLAogICAgICAgICAgICAgJ3d0Zi9TZWdtZW50ZWRWZWN0
b3IuaCcsCiAgICAgICAgICAgICAnd3RmL1NpemVMaW1pdHMuY3BwJywKKyAgICAgICAgICAgICd3
dGYvU3RhY2tCb3VuZHMuY3BwJywKKyAgICAgICAgICAgICd3dGYvU3RhY2tCb3VuZHMuaCcsCiAg
ICAgICAgICAgICAnd3RmL1N0YXRpY0NvbnN0cnVjdG9ycy5oJywKICAgICAgICAgICAgICd3dGYv
U3RkTGliRXh0cmFzLmgnLAogICAgICAgICAgICAgJ3d0Zi9TdHJpbmdFeHRyYXMuaCcsCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYu
dmNwcm9qCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzc3LDYgKzc3NywxNCBA
QAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxT
dGFja0JvdW5kcy5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cd3RmXFN0YWNrQm91bmRzLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFN0YXRpY0NvbnN0cnVjdG9ycy5oIgogCQkJPgogCQk8
L0ZpbGU+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDYgKzI1MSw4IEBACiAJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBN
YWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmgg
Ki87IH07CiAJCTg2RDNCM0MzMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMTEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovOyB9OwogCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1
RTcgLyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAq
LzsgfTsKKwkJODZEODdEQUUxMkJDQTdEMTAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDg3REE1MTJCQzRC
MTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgKi87IH07CisJCTg2RDg3RERCMTJCQ0FGOTQw
MDhFNzNBMSAvKiBTdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZEODdEQTYxMkJDNEIxNDAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEQjY0
NjQwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkRCNjQ2MzBG
OTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLzsg
fTsKIAkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFMTE2QjAwRkU3NUFDODAw
QjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oICovOyB9OwogCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1
MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggKi87IH07CkBAIC04NjcsNiArODY5LDggQEAKIAkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyQVJNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDNC
M0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpbmtCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NkQ4N0RBNTEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tCb3VuZHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkQ4N0RBNjEyQkM0QjE0MDA4RTczQTEgLyogU3Rh
Y2tCb3VuZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tCb3VuZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIx
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyog
Q29kZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVMb2Nh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAx
QUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1
NSw2ICsxNTU5LDggQEAKIAkJCQk1MUY2NDhENjBCQjRFMkNBMDAzM0Q3NjAgLyogUmV0YWluUHRy
LmggKi8sCiAJCQkJOTY5QTA3MjkwRUQxQ0U2OTAwRjFGNjgxIC8qIFNlZ21lbnRlZFZlY3Rvci5o
ICovLAogCQkJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLywK
KwkJCQk4NkQ4N0RBNTEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICovLAorCQkJ
CTg2RDg3REE2MTJCQzRCMTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5oICovLAogCQkJCTg2OEJG
QTVGMTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAqLywKIAkJCQlGRTFC
NDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJRTExRDUxNzUw
QjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4dHJhcy5oICovLApAQCAtMjI5Miw2ICsyMjk4LDcg
QEAKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6
ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZEODdEREIxMkJDQUY5NDAwOEU3M0Ex
IC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjhCRkE2MDExN0QwNDgyMDBC
OTA4QjEgLyogU3RhdGljQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTFCNDQ3
QTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkI5OUFFMzExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTI0NTcsNyArMjQ2NCw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDE0OUMyNzcxMDg5MDJBRkUwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkphdmFTY3JpcHRDb3JlIiAqLzsKIAkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVu
Z2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9
ICgKIAkJCQlFbmdsaXNoLApAQCAtMjc5Myw2ICsyNzk5LDcgQEAKIAkJCQkxNDQ2OURFQTEwN0VD
N0U3MDA2NTA0NDYgLyogU2NvcGVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTg2RDg3REFFMTJCQ0E3RDEwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4QkZBMEUxMTdDRUZEMTAwQjkwOEIxIC8qIFN0
cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUwNDQ2
IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3BhcnNlci9KU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0pTUGFyc2VyLmNwcAkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
SlNQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBDT01QSUxFX0FTU0VSVChMYXN0VW50YWdnZWRUb2tlbiA8IDY0LCBMZXNzVGhhbjY0
VW50YWdnZWRUb2tlbnMpOwogCi0vLyBUaGlzIG1hdGNoZXMgdjgKLXN0YXRpYyBjb25zdCBwdHJk
aWZmX3Qga01heFBhcnNlclN0YWNrVXNhZ2UgPSAxMjggKiBzaXplb2Yodm9pZCopICogMTAyNDsK
LQogY2xhc3MgSlNQYXJzZXIgewogcHVibGljOgogICAgIEpTUGFyc2VyKExleGVyKiwgSlNHbG9i
YWxEYXRhKiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCBpc1N0cmljdENvbnRleHQsIGJvb2wg
aXNGdW5jdGlvbiwgU291cmNlUHJvdmlkZXIqKTsKQEAgLTE5Myw5ICsxOTAsNyBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBjYW5SZWN1cnNlKCkKICAgICB7Ci0gICAgICAgIGNoYXIgc2FtcGxlID0g
MDsKLSAgICAgICAgQVNTRVJUKG1fZW5kQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiAmc2FtcGxl
ID4gbV9lbmRBZGRyZXNzOworICAgICAgICByZXR1cm4gbV9zdGFjay5yZWN1cnNpb25DaGVjaygp
OwogICAgIH0KICAgICAKICAgICBpbnQgbGFzdFRva2VuRW5kKCkgY29uc3QKQEAgLTIwNSw3ICsy
MDAsNyBAQCBwcml2YXRlOgogCiAgICAgUGFyc2VyQXJlbmEgbV9hcmVuYTsKICAgICBMZXhlciog
bV9sZXhlcjsKLSAgICBjaGFyKiBtX2VuZEFkZHJlc3M7CisgICAgU3RhY2tCb3VuZHMgbV9zdGFj
azsKICAgICBib29sIG1fZXJyb3I7CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAg
ICAgSlNUb2tlbiBtX3Rva2VuOwpAQCAtNDkxLDcgKzQ4Niw3IEBAIGludCBqc1BhcnNlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIAogSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhl
ciwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBib29sIGlzRnVuY3Rpb24sIFNvdXJjZVByb3ZpZGVy
KiBwcm92aWRlcikKICAgICA6IG1fbGV4ZXIobGV4ZXIpCi0gICAgLCBtX2VuZEFkZHJlc3MoMCkK
KyAgICAsIG1fc3RhY2soZ2xvYmFsRGF0YS0+c3RhY2soKSkKICAgICAsIG1fZXJyb3IoZmFsc2Up
CiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkK
QEAgLTUwNSw3ICs1MDAsNiBAQCBKU1BhcnNlcjo6SlNQYXJzZXIoTGV4ZXIqIGxleGVyLCBKU0ds
b2JhCiAgICAgLCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQoMCkKICAgICAsIG1fbGFzdElk
ZW50aWZpZXIoMCkKIHsKLSAgICBtX2VuZEFkZHJlc3MgPSB3dGZUaHJlYWREYXRhKCkuYXBwcm94
aW1hdGVkU3RhY2tTdGFydCgpIC0ga01heFBhcnNlclN0YWNrVXNhZ2U7CiAgICAgU2NvcGVSZWYg
c2NvcGUgPSBwdXNoU2NvcGUoKTsKICAgICBpZiAoaXNGdW5jdGlvbikKICAgICAgICAgc2NvcGUt
PnNldElzRnVuY3Rpb24oKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJ
KHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODksMTc1ICszODksNiBAQCB2b2lkIEhlYXA6OnNocmlua0Js
b2NrcyhzaXplX3QgbmVlZGVkQmxvCiAgICAgICAgIG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+
bWFya2VkLnNldChIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiB9CiAKLSNpZiBP
UyhXSU5DRSkKLUpTX0VYUE9SVERBVEEgdm9pZCogZ19zdGFja0Jhc2UgPSAwOwotCi1pbmxpbmUg
Ym9vbCBpc1BhZ2VXcml0YWJsZSh2b2lkKiBwYWdlKQotewotICAgIE1FTU9SWV9CQVNJQ19JTkZP
Uk1BVElPTiBtZW1vcnlJbmZvcm1hdGlvbjsKLSAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVl
cnkocGFnZSwgJm1lbW9yeUluZm9ybWF0aW9uLCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsK
LQotICAgIC8vIHJldHVybiBmYWxzZSBvbiBlcnJvciwgaW5jbHVkaW5nIHB0ciBvdXRzaWRlIG1l
bW9yeQotICAgIGlmIChyZXN1bHQgIT0gc2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdPUkQgcHJvdGVjdCA9IG1lbW9yeUluZm9ybWF0aW9u
LlByb3RlY3QgJiB+KFBBR0VfR1VBUkQgfCBQQUdFX05PQ0FDSEUpOwotICAgIHJldHVybiBwcm90
ZWN0ID09IFBBR0VfUkVBRFdSSVRFCi0gICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9XUklURUNP
UFkKLSAgICAgICAgfHwgcHJvdGVjdCA9PSBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFCi0gICAgICAg
IHx8IHByb3RlY3QgPT0gUEFHRV9FWEVDVVRFX1dSSVRFQ09QWTsKLX0KLQotc3RhdGljIHZvaWQq
IGdldFN0YWNrQmFzZSh2b2lkKiBwcmV2aW91c0ZyYW1lKQotewotICAgIC8vIGZpbmQgdGhlIGFk
ZHJlc3Mgb2YgdGhpcyBzdGFjayBmcmFtZSBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsb2Nh
bCB2YXJpYWJsZQotICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQ7Ci0gICAgdm9pZCogdGhpc0Zy
YW1lID0gKHZvaWQqKSgmaXNHcm93aW5nRG93bndhcmQpOwotCi0gICAgaXNHcm93aW5nRG93bndh
cmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKLSAgICBzdGF0aWMgRFdPUkQgcGFnZVNp
emUgPSAwOwotICAgIGlmICghcGFnZVNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVt
SW5mbzsKLSAgICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Ci0gICAgICAgIHBhZ2VT
aXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOwotICAgIH0KLQotICAgIC8vIHNjYW4gYWxsIG9m
IG1lbW9yeSBzdGFydGluZyBmcm9tIHRoaXMgZnJhbWUsIGFuZCByZXR1cm4gdGhlIGxhc3Qgd3Jp
dGVhYmxlIHBhZ2UgZm91bmQKLSAgICByZWdpc3RlciBjaGFyKiBjdXJyZW50UGFnZSA9IChjaGFy
KikoKERXT1JEKXRoaXNGcmFtZSAmIH4ocGFnZVNpemUgLSAxKSk7Ci0gICAgaWYgKGlzR3Jvd2lu
Z0Rvd253YXJkKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50UGFnZSA+IDApIHsKLSAgICAgICAg
ICAgIC8vIGNoZWNrIGZvciB1bmRlcmZsb3cKLSAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+
PSAoY2hhciopcGFnZVNpemUpCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgLT0gcGFnZVNp
emU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAwOwot
ICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlICsgcGFnZVNpemU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgIC8vIGd1YXJhbnRlZWQgdG8gY29tcGxldGUgYmVjYXVzZSBpc1BhZ2VXcml0YWJsZSByZXR1
cm5zIGZhbHNlIGF0IGVuZCBvZiBtZW1vcnkKLSAgICAgICAgICAgIGN1cnJlbnRQYWdlICs9IHBh
Z2VTaXplOwotICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlOwotICAgICAgICB9Ci0gICAgfQotfQot
I2VuZGlmCi0KLSNpZiBPUyhRTlgpCi1zdGF0aWMgaW5saW5lIHZvaWQgKmN1cnJlbnRUaHJlYWRT
dGFja0Jhc2VRTlgoKQotewotICAgIHN0YXRpYyB2b2lkKiBzdGFja0Jhc2UgPSAwOwotICAgIHN0
YXRpYyBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSAgICBzdGF0aWMgcHRocmVhZF90IHN0YWNrVGhy
ZWFkOwotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoc3Rh
Y2tCYXNlID09IDAgfHwgdGhyZWFkICE9IHN0YWNrVGhyZWFkKSB7Ci0gICAgICAgIHN0cnVjdCBf
ZGVidWdfdGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICAgICAgbWVtc2V0KCZ0aHJlYWRJbmZv
LCAwLCBzaXplb2YodGhyZWFkSW5mbykpOwotICAgICAgICB0aHJlYWRJbmZvLnRpZCA9IHB0aHJl
YWRfc2VsZigpOwotICAgICAgICBpbnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkp
OwotICAgICAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIG9wZW4gL3Byb2Mvc2VsZiAoZXJybm86ICVkKSIsIGVycm5vKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGRldmN0bChmZCwgRENNRF9QUk9DX1RJRFNUQVRV
UywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Ci0gICAgICAgIGNsb3NlKGZk
KTsKLSAgICAgICAgc3RhY2tCYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odGhyZWFkSW5m
by5zdGtiYXNlKTsKLSAgICAgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXplOwotICAg
ICAgICBBU1NFUlQoc3RhY2tCYXNlKTsKLSAgICAgICAgc3RhY2tUaHJlYWQgPSB0aHJlYWQ7Ci0g
ICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6
ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQqIGN1cnJlbnRUaHJlYWRTdGFja0Jh
c2UoKQotewotI2lmIE9TKERBUldJTikKLSAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9z
ZWxmKCk7Ci0gICAgcmV0dXJuIHB0aHJlYWRfZ2V0X3N0YWNrYWRkcl9ucCh0aHJlYWQpOwotI2Vs
aWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikgJiYgQ09NUElMRVIoTVNWQykKLSAgICAvLyBvZmZz
ZXQgMHgxOCBmcm9tIHRoZSBGUyBzZWdtZW50IHJlZ2lzdGVyIGdpdmVzIGEgcG9pbnRlciB0bwot
ICAgIC8vIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gYmxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVh
ZAotICAgIE5UX1RJQiogcFRpYjsKLSAgICBfX2FzbSB7Ci0gICAgICAgIE1PViBFQVgsIEZTOlsx
OGhdCi0gICAgICAgIE1PViBwVGliLCBFQVgKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwotI2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nikg
JiYgQ09NUElMRVIoR0NDKQotICAgIC8vIG9mZnNldCAweDE4IGZyb20gdGhlIEZTIHNlZ21lbnQg
cmVnaXN0ZXIgZ2l2ZXMgYSBwb2ludGVyIHRvCi0gICAgLy8gdGhlIHRocmVhZCBpbmZvcm1hdGlv
biBibG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkCi0gICAgTlRfVElCKiBwVGliOwotICAgIGFz
bSAoICJtb3ZsICUlZnM6MHgxOCwgJTBcbiIKLSAgICAgICAgICA6ICI9ciIgKHBUaWIpCi0gICAg
ICAgICk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwot
I2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICBQTlRfVElCNjQgcFRpYiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBUaWItPlN0YWNrQmFzZSk7Ci0jZWxpZiBPUyhRTlgpCi0g
ICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4JiwgbXV0ZXggPSAqbmV3IE11dGV4
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobXV0ZXgpOwotICAgIHJldHVybiBjdXJyZW50VGhy
ZWFkU3RhY2tCYXNlUU5YKCk7Ci0jZWxpZiBPUyhTT0xBUklTKQotICAgIHN0YWNrX3QgczsKLSAg
ICB0aHJfc3Rrc2VnbWVudCgmcyk7Ci0gICAgcmV0dXJuIHMuc3Nfc3A7Ci0jZWxpZiBPUyhPUEVO
QlNEKQotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBzdGFja190
IHN0YWNrOwotICAgIHB0aHJlYWRfc3RhY2tzZWdfbnAodGhyZWFkLCAmc3RhY2spOwotICAgIHJl
dHVybiBzdGFjay5zc19zcDsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgVFRocmVhZFN0YWNrSW5m
byBpbmZvOwotICAgIFJUaHJlYWQgdGhyZWFkOwotICAgIHRocmVhZC5TdGFja0luZm8oaW5mbyk7
Ci0gICAgcmV0dXJuICh2b2lkKilpbmZvLmlCYXNlOwotI2VsaWYgT1MoSEFJS1UpCi0gICAgdGhy
ZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICBnZXRfdGhyZWFkX2luZm8oZmluZF90aHJlYWQoTlVM
TCksICZ0aHJlYWRJbmZvKTsKLSAgICByZXR1cm4gdGhyZWFkSW5mby5zdGFja19lbmQ7Ci0jZWxp
ZiBPUyhVTklYKQotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4
ID0gKm5ldyBNdXRleCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4KTsKLSAgICBzdGF0
aWMgdm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBzdGF0aWMgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7
Ci0gICAgc3RhdGljIHB0aHJlYWRfdCBzdGFja1RocmVhZDsKLSAgICBwdGhyZWFkX3QgdGhyZWFk
ID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgaWYgKHN0YWNrQmFzZSA9PSAwIHx8IHRocmVhZCAhPSBz
dGFja1RocmVhZCkgewotICAgICAgICBwdGhyZWFkX2F0dHJfdCBzYXR0cjsKLSAgICAgICAgcHRo
cmVhZF9hdHRyX2luaXQoJnNhdHRyKTsKLSNpZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVU
QlNEKQotICAgICAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0g
ICAgICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAodGhyZWFkLCAmc2F0dHIpOwotI2Vsc2UKLSAgICAg
ICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBz
eXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICAgICAgcHRocmVh
ZF9nZXRhdHRyX25wKHRocmVhZCwgJnNhdHRyKTsKLSNlbmRpZgotICAgICAgICBpbnQgcmMgPSBw
dGhyZWFkX2F0dHJfZ2V0c3RhY2soJnNhdHRyLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsKLSAg
ICAgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBT
ZWVtcyBmYXRhbC4KLSAgICAgICAgQVNTRVJUKHN0YWNrQmFzZSk7Ci0gICAgICAgIHB0aHJlYWRf
YXR0cl9kZXN0cm95KCZzYXR0cik7Ci0gICAgICAgIHN0YWNrVGhyZWFkID0gdGhyZWFkOwotICAg
IH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7
Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgm
LCBtdXRleCA9ICpuZXcgTXV0ZXgpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7Ci0g
ICAgaWYgKGdfc3RhY2tCYXNlKQotICAgICAgICByZXR1cm4gZ19zdGFja0Jhc2U7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGludCBkdW1teTsKLSAgICAgICAgcmV0dXJuIGdldFN0YWNrQmFzZSgmZHVt
bXkpOwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0YWNrIGJh
c2Ugb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KICNpZiBFTkFCTEUoSlNDX01VTFRJUExF
X1RIUkVBRFMpCiAKIHN0YXRpYyBpbmxpbmUgUGxhdGZvcm1UaHJlYWQgZ2V0Q3VycmVudFBsYXRm
b3JtVGhyZWFkKCkKQEAgLTU4Nyw3ICs0MTgsNyBAQCB2b2lkIEhlYXA6OnJlZ2lzdGVyVGhyZWFk
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2N1cnJlbnRU
aHJlYWRSZWdpc3RyYXIsIHRoaXMpOwotICAgIEhlYXA6OlRocmVhZCogdGhyZWFkID0gbmV3IEhl
YXA6OlRocmVhZChwdGhyZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCksIGN1
cnJlbnRUaHJlYWRTdGFja0Jhc2UoKSk7CisgICAgSGVhcDo6VGhyZWFkKiB0aHJlYWQgPSBuZXcg
SGVhcDo6VGhyZWFkKHB0aHJlYWRfc2VsZigpLCBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQoKSwg
bV9nbG9iYWxEYXRhLT5zdGFjaygpLm9yaWdpbigpKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2so
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKIApAQCAtNjU0LDExICs0ODUsMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzUG9zc2libGVDZWxsKHZvaWQqIAogCiB2b2lkIEhlYXA6Om1hcmtDb25z
ZXJ2YXRpdmVseShNYXJrU3RhY2smIG1hcmtTdGFjaywgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkK
IHsKKyNpZiBPUyhXSU5DRSkKICAgICBpZiAoc3RhcnQgPiBlbmQpIHsKICAgICAgICAgdm9pZCog
dG1wID0gc3RhcnQ7CiAgICAgICAgIHN0YXJ0ID0gZW5kOwogICAgICAgICBlbmQgPSB0bXA7CiAg
ICAgfQorI2Vsc2UKKyAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsKKyNlbmRpZgogCiAgICAgQVNT
RVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIqPihzdGFydCkp
IDwgMHgxMDAwMDAwKTsKICAgICBBU1NFUlQoaXNQb2ludGVyQWxpZ25lZChzdGFydCkpOwpAQCAt
NjkyLDEwICs1MjcsNyBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2sm
CiAKIHZvaWQgTkVWRVJfSU5MSU5FIEhlYXA6Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZl
bHlJbnRlcm5hbChNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICB2b2lkKiBkdW1teTsKLSAg
ICB2b2lkKiBzdGFja1BvaW50ZXIgPSAmZHVtbXk7Ci0gICAgdm9pZCogc3RhY2tCYXNlID0gY3Vy
cmVudFRocmVhZFN0YWNrQmFzZSgpOwotICAgIG1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ss
IHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKKyAgICBtYXJrQ29uc2VydmF0aXZlbHkobWFya1N0
YWNrLCBtX2dsb2JhbERhdGEtPnN0YWNrKCkuY3VycmVudCgpLCBtX2dsb2JhbERhdGEtPnN0YWNr
KCkub3JpZ2luKCkpOwogICAgIG1hcmtTdGFjay5kcmFpbigpOwogfQogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDYgKzE1Myw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAg
ICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQogI2VuZGlmCiB7CisgICAgaWYgKGdsb2JhbERhdGFUeXBl
ID09IERlZmF1bHQpCisgICAgICAgIG1fc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsK
KwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdGFydFByb2ZpbGVyU2VydmVySWZOZWVkZWQoKTsK
ICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lv
biA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJ
TkcpCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjZW5kaWYKQEAgLTE3OCw2ICsxNzks
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZWxzZQogICAgICAgICBib29sIGNhblVzZUpJVCgpIHsg
cmV0dXJuIG1fY2FuVXNlSklUOyB9CiAjZW5kaWYKKworICAgICAgICBjb25zdCBTdGFja0JvdW5k
cyYgc3RhY2soKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGdsb2JhbERhdGFUeXBl
ID09IERlZmF1bHQpCisgICAgICAgICAgICAgICAgPyBtX3N0YWNrCisgICAgICAgICAgICAgICAg
OiB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAgICAgICAgfQorCiAgICAgICAgIExleGVyKiBs
ZXhlcjsKICAgICAgICAgUGFyc2VyKiBwYXJzZXI7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlcjsKQEAgLTI1MCw2ICsyNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUo
SklUKSAmJiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7CiAj
ZW5kaWYKKyAgICAgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDc0MzA2
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05LDYgKzksNyBAQCBTRVQoV1RGX1NPVVJDRVMKICAgICBNRDUuY3BwCiAgICAgUmFuZG9tTnVt
YmVyLmNwcAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKyAgICBTdGFja0JvdW5kcy5j
cHAKICAgICBTdHJpbmdFeHRyYXMuY3BwCiAgICAgVGhyZWFkaW5nLmNwcAogICAgIFR5cGVUcmFp
dHMuY3BwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAJKHJldmlzaW9uIDApCisr
KyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdGFja0JvdW5kcy5oIgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC90YXNr
Lmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisK
KyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1Mu
aD4KKworI2VsaWYgT1MoU09MQVJJUykKKworI2luY2x1ZGUgPHRocmVhZC5oPgorCisjZWxpZiBP
UyhRTlgpCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNlbGlmIE9TKFVOSVgpCisK
KyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgSEFWRShQVEhSRUFEX05QX0gpCisjaW5jbHVkZSA8
cHRocmVhZF9ucC5oPgorI2VuZGlmCisKKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
QmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlNDIHBhcnNlciwgZ3Vlc3Mg
dGhlIHN0YWNrIHNpemUuCitzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVzdGltYXRlZFN0YWNrU2l6
ZSA9IDEyOCAqIHNpemVvZih2b2lkKikgKiAxMDI0OworCisvLyBUaGlzIG1ldGhvZCBhc3N1bWVz
IHRoZSBzdGFjayBpcyBncm93aW5nIGRvd253YXJkcy4KK3N0YXRpYyB2b2lkKiBlc3RpbWF0ZVN0
YWNrQm91bmQodm9pZCogb3JpZ2luKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4o
b3JpZ2luKSAtIGVzdGltYXRlZFN0YWNrU2l6ZTsKK30KKworI2lmIE9TKERBUldJTikKKwordm9p
ZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7CisgICAgcHRocmVhZF90IHRocmVhZCA9IHB0
aHJlYWRfc2VsZigpOworICAgIG1fb3JpZ2luID0gcHRocmVhZF9nZXRfc3RhY2thZGRyX25wKHRo
cmVhZCk7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZChtX29yaWdpbik7Cit9CisK
KyNlbGlmIE9TKFdJTkRPV1MpCisKK3ZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQorewor
I2lmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0
aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhy
ZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIq
IHBUaWI7CisgICAgX19hc20geworICAgICAgICBNT1YgRUFYLCBGUzpbMThoXQorICAgICAgICBN
T1YgcFRpYiwgRUFYCisgICAgfQorICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHBU
aWItPlN0YWNrQmFzZSk7CisjZWxpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2KSAmJiBDT01QSUxF
UihHQ0MpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBn
aXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZv
ciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIqIHBUaWI7CisgICAgYXNtICggIm1vdmwg
JSVmczoweDE4LCAlMFxuIgorICAgICAgICAgIDogIj1yIiAocFRpYikKKyAgICAgICAgKTsKKyAg
ICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2VsaWYg
T1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKKyAgICBQTlRfVElCNjQgcFRpYiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7CisgICAgbV9vcmlnaW4gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2Vsc2UKKyNlcnJvciBOZWVk
IGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgYm91bmRzIG9uIHRoaXMgcGxhdGZvcm0gKFdpbmRvd3Mp
CisjZW5kaWYKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0JvdW5kKG1fb3JpZ2luKTsKK30K
KworI2VsaWYgT1MoUU5YKQorCit2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKK3sKKyAg
ICB2b2lkKiBzdGFja0Jhc2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIHB0
aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKworICAgIHN0cnVjdCBfZGVidWdfdGhy
ZWFkX2luZm8gdGhyZWFkSW5mbzsKKyAgICBtZW1zZXQoJnRocmVhZEluZm8sIDAsIHNpemVvZih0
aHJlYWRJbmZvKSk7CisgICAgdGhyZWFkSW5mby50aWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBp
bnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkpOworICAgIGlmIChmZCA9PSAtMSkg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIC9wcm9jL3NlbGYgKGVycm5vOiAl
ZCkiLCBlcnJubyk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIGRldmN0bChmZCwgRENN
RF9QUk9DX1RJRFNUQVRVUywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Cisg
ICAgY2xvc2UoZmQpOworICAgIHN0YWNrQmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRo
cmVhZEluZm8uc3RrYmFzZSk7CisgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXplOwor
ICAgIEFTU0VSVChzdGFja0Jhc2UpOworCisgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0Jv
dW5kKG1fb3JpZ2luKTsKK30KKworI2VsaWYgT1MoU09MQVJJUykKKwordm9pZCBTdGFja0JvdW5k
czo6aW5pdGlhbGl6ZSgpCit7CisgICAgc3RhY2tfdCBzOworICAgIHRocl9zdGtzZWdtZW50KCZz
KTsKKyAgICBtX29yaWdpbiA9IHMuc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKE9QRU5CU0QpCisKK3ZvaWQgU3RhY2tCb3Vu
ZHM6OmluaXRpYWxpemUoKQoreworICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYo
KTsKKyAgICBzdGFja190IHN0YWNrOworICAgIHB0aHJlYWRfc3RhY2tzZWdfbnAodGhyZWFkLCAm
c3RhY2spOworICAgIG1fb3JpZ2luID0gc3RhY2suc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGlt
YXRlU3RhY2tCb3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFNZTUJJQU4pCisKK3ZvaWQg
U3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQoreworICAgIFRUaHJlYWRTdGFja0luZm8gaW5mbzsK
KyAgICBSVGhyZWFkIHRocmVhZDsKKyAgICB0aHJlYWQuU3RhY2tJbmZvKGluZm8pOworICAgIG1f
b3JpZ2luID0gKHZvaWQqKWluZm8uaUJhc2U7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKEhBSUtVKQorCit2b2lkIFN0YWNrQm91bmRz
Ojppbml0aWFsaXplKCkKK3sKKyAgICB0aHJlYWRfaW5mbyB0aHJlYWRJbmZvOworICAgIGdldF90
aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRocmVhZEluZm8pOworICAgIG1fb3JpZ2lu
ID0gdGhyZWFkSW5mby5zdGFja19lbmQ7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3Vu
ZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFVOSVgpCisKK3ZvaWQgU3RhY2tCb3VuZHM6Omlu
aXRpYWxpemUoKQoreworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0YWNr
U2l6ZSA9IDA7CisKKyAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAg
cHRocmVhZF9hdHRyX3Qgc2F0dHI7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJnNhdHRyKTsKKyNp
ZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJT
RCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRocmVhZCwg
JnNhdHRyKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRh
YmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2
ZXMKKyAgICBwdGhyZWFkX2dldGF0dHJfbnAodGhyZWFkLCAmc2F0dHIpOworI2VuZGlmCisgICAg
aW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwgJnN0YWNr
U2l6ZSk7CisgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21l
aG93PyBTZWVtcyBmYXRhbC4KKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICBwdGhyZWFkX2F0
dHJfZGVzdHJveSgmc2F0dHIpOworICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0
YWNrQmFzZSkgKyBzdGFja1NpemU7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZCht
X29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFdJTkNFKQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKy8v
IEZJWE1FOiB0aGlzIGlzIG5vdCB0aHJlYWRzYWZlLCBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIHJl
bW92ZWQuCituYW1lc3BhY2UgSlNDIHsgSlNfRVhQT1JUREFUQSB2b2lkKiBnX3N0YWNrQmFzZSA9
IDA7IH0KK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2b2lk
KiBwYWdlKQoreworICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlJbmZvcm1hdGlv
bjsKKyAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVlcnkocGFnZSwgJm1lbW9yeUluZm9ybWF0
aW9uLCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsKKworICAgIC8vIHJldHVybiBmYWxzZSBv
biBlcnJvciwgaW5jbHVkaW5nIHB0ciBvdXRzaWRlIG1lbW9yeQorICAgIGlmIChyZXN1bHQgIT0g
c2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RFdPUkQgcHJvdGVjdCA9IG1lbW9yeUluZm9ybWF0aW9uLlByb3RlY3QgJiB+KFBBR0VfR1VBUkQg
fCBQQUdFX05PQ0FDSEUpOworICAgIHJldHVybiBwcm90ZWN0ID09IFBBR0VfUkVBRFdSSVRFCisg
ICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9XUklURUNPUFkKKyAgICAgICAgfHwgcHJvdGVjdCA9
PSBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFCisgICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9FWEVD
VVRFX1dSSVRFQ09QWTsKK30KKworc3RhdGljIHZvaWQqIGdldFN0YWNrTWF4KHZvaWQqIHByZXZp
b3VzRnJhbWUsIGJvb2wmIGlzR3Jvd2luZ0Rvd253YXJkKQoreworICAgIC8vIGZpbmQgdGhlIGFk
ZHJlc3Mgb2YgdGhpcyBzdGFjayBmcmFtZSBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsb2Nh
bCB2YXJpYWJsZQorICAgIHZvaWQqIHRoaXNGcmFtZSA9ICZ0aGlzRnJhbWU7CisgICAgaXNHcm93
aW5nRG93bndhcmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKKworICAgIGlmIChKU0M6
Omdfc3RhY2tCYXNlKQorICAgICAgICByZXR1cm4gSlNDOjpnX3N0YWNrQmFzZTsKKworICAgIFNZ
U1RFTV9JTkZPIHN5c3RlbUluZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Cisg
ICAgRFdPUkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7CisKKyAgICAvLyBzY2Fu
IGFsbCBvZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBs
YXN0IHdyaXRlYWJsZSBwYWdlIGZvdW5kCisgICAgcmVnaXN0ZXIgY2hhciogY3VycmVudFBhZ2Ug
PSAoY2hhciopKChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkpOworICAgIGlmIChp
c0dyb3dpbmdEb3dud2FyZCkgeworICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7Cisg
ICAgICAgICAgICAvLyBjaGVjayBmb3IgdW5kZXJmbG93CisgICAgICAgICAgICBpZiAoY3VycmVu
dFBhZ2UgPj0gKGNoYXIqKXBhZ2VTaXplKQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09
IHBhZ2VTaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdl
ID0gMDsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFi
bGUgcmV0dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5CisgICAgICAgICAgICBjdXJyZW50UGFn
ZSArPSBwYWdlU2l6ZTsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBh
Z2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7CisgICAgYm9vbCBpc0dy
b3dpbmdEb3dud2FyZAorICAgIG1fb3JpZ2luID0gZ2V0U3RhY2tNYXgoaXNHcm93aW5nRG93bndh
cmQpOworICAgIG1fYm91bmQgPSBpc0dyb3dpbmdEb3dud2FyZAorICAgICAgICA/IHN0YXRpY19j
YXN0PGNoYXIqPihtX29yaWdpbikgLSBlc3RpbWF0ZWRTdGFja1NpemUKKyAgICAgICAgOiBzdGF0
aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pICsgZXN0aW1hdGVkU3RhY2tTaXplOworfQorCisjZWxz
ZQorI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBib3VuZHMgb24gdGhpcyBwbGF0
Zm9ybQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogSmF2YVNjcmlwdENvcmUv
d3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNr
Qm91bmRzLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBT
dGFja0JvdW5kc19oCisjZGVmaW5lIFN0YWNrQm91bmRzX2gKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFN0YWNrQm91bmRzIHsKKyAgICAvLyByZWN1cnNpb25DaGVjaygpIC8gcmVjdXJzaW9u
TGltaXQoKSB0ZXN0cyAoYnkgZGVmYXVsdCkKKyAgICAvLyB0aGF0IHdlIGFyZSBhdCBsZWFzdCB0
aGlzIGZhciBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgorICAgIGNvbnN0IHN0YXRpYyBzaXpl
X3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA0MDk2OworCitwdWJsaWM6CisgICAgU3Rh
Y2tCb3VuZHMoKQorICAgICAgICA6IG1fb3JpZ2luKDApCisgICAgICAgICwgbV9ib3VuZCgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhY2tCb3VuZHMgY3VycmVudFRocmVhZFN0YWNr
Qm91bmRzKCkKKyAgICB7CisgICAgICAgIFN0YWNrQm91bmRzIGJvdW5kczsKKyAgICAgICAgYm91
bmRzLmluaXRpYWxpemUoKTsKKyAgICAgICAgYm91bmRzLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICB2b2lkKiBvcmlnaW4oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2lu
OworICAgIH0KKworICAgIHZvaWQqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVu
dFBvc2l0aW9uOworICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOworICAgIH0KKworICAg
IHZvaWQqIHJlY3Vyc2lvbkxpbWl0KHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVs
dEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAgICAgICAgPyBz
dGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgKyBtaW5BdmFpbGFibGVEZWx0YQorICAgICAgICAg
ICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFpbGFibGVEZWx0YTsKKyAg
ICB9CisKKyAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9
IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAg
ICAgICAgPyBjdXJyZW50KCkgPj0gcmVjdXJzaW9uTGltaXQobWluQXZhaWxhYmxlRGVsdGEpCisg
ICAgICAgICAgICA6IGN1cnJlbnQoKSA8PSByZWN1cnNpb25MaW1pdChtaW5BdmFpbGFibGVEZWx0
YSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisKKyAgICBi
b29sIGlzR3Jvd2luZ0Rvd253YXJkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29y
aWdpbiAmJiBtX2JvdW5kKTsKKyNpZiBPUyhXSU5DRSkKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2lu
ID4gbV9ib3VuZDsKKyNlbHNlCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgfQor
CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKKyAgICB7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVudFBvc2l0aW9u
OworICAgICAgICBBU1NFUlQobV9vcmlnaW4gIT0gbV9ib3VuZCk7CisgICAgICAgIEFTU0VSVChp
c0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IChjdXJyZW50UG9zaXRpb24gPCBtX29y
aWdpbiAmJiBjdXJyZW50UG9zaXRpb24gPiBtX2JvdW5kKQorICAgICAgICAgICAgOiAoY3VycmVu
dFBvc2l0aW9uID4gbV9vcmlnaW4gJiYgY3VycmVudFBvc2l0aW9uIDwgbV9ib3VuZCkpOworI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCogbV9vcmlnaW47CisgICAgdm9pZCogbV9ib3VuZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0YWNrQm91bmRzOworCisjZW5k
aWYgLyogU3RhY2tCb3VuZHNfaCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFN0YWNrQm91bmRz
X2gKKyNkZWZpbmUgU3RhY2tCb3VuZHNfaAorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3Rh
Y2tCb3VuZHMgeworICAgIC8vIHJlY3Vyc2lvbkNoZWNrKCkgLyByZWN1cnNpb25MaW1pdCgpIHRl
c3RzIChieSBkZWZhdWx0KQorICAgIC8vIHRoYXQgd2UgYXJlIGF0IGxlYXN0IHRoaXMgZmFyIGZy
b20gdGhlIGVuZCBvZiB0aGUgc3RhY2suCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBzX2RlZmF1
bHRBdmFpbGFiaWxpdHlEZWx0YSA9IDQwOTY7CisKK3B1YmxpYzoKKyAgICBTdGFja0JvdW5kcygp
CisgICAgICAgIDogbV9vcmlnaW4oMCkKKyAgICAgICAgLCBtX2JvdW5kKDApCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyBTdGFja0JvdW5kcyBjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKQor
ICAgIHsKKyAgICAgICAgU3RhY2tCb3VuZHMgYm91bmRzOworICAgICAgICBib3VuZHMuaW5pdGlh
bGl6ZSgpOworICAgICAgICBib3VuZHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1
cm4gYm91bmRzOworICAgIH0KKworICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9vcmlnaW4pOworICAgICAgICByZXR1cm4gbV9vcmlnaW47CisgICAgfQor
CisgICAgdm9pZCogY3VycmVudCgpIGNvbnN0CisgICAgeworICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIHZvaWQqIGN1cnJlbnRQb3NpdGlvbiA9ICZjdXJyZW50UG9zaXRpb247
CisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgfQorCisgICAgdm9pZCogcmVj
dXJzaW9uTGltaXQoc2l6ZV90IG1pbkF2YWlsYWJsZURlbHRhID0gc19kZWZhdWx0QXZhaWxhYmls
aXR5RGVsdGEpIGNvbnN0CisgICAgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIHJldHVybiBpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IHN0YXRpY19jYXN0
PGNoYXIqPihtX2JvdW5kKSArIG1pbkF2YWlsYWJsZURlbHRhCisgICAgICAgICAgICA6IHN0YXRp
Y19jYXN0PGNoYXIqPihtX2JvdW5kKSAtIG1pbkF2YWlsYWJsZURlbHRhOworICAgIH0KKworICAg
IGJvb2wgcmVjdXJzaW9uQ2hlY2soc2l6ZV90IG1pbkF2YWlsYWJsZURlbHRhID0gc19kZWZhdWx0
QXZhaWxhYmlsaXR5RGVsdGEpIGNvbnN0CisgICAgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgICAgIHJldHVybiBpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IGN1
cnJlbnQoKSA+PSByZWN1cnNpb25MaW1pdChtaW5BdmFpbGFibGVEZWx0YSkKKyAgICAgICAgICAg
IDogY3VycmVudCgpIDw9IHJlY3Vyc2lvbkxpbWl0KG1pbkF2YWlsYWJsZURlbHRhKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKCk7CisKKworICAgIGJvb2wgaXNHcm93
aW5nRG93bndhcmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luICYmIG1f
Ym91bmQpOworI2lmIE9TKFdJTkNFKQorICAgICAgICByZXR1cm4gbV9vcmlnaW4gPiBtX2JvdW5k
OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIHZvaWQqIGN1cnJlbnRQb3NpdGlvbiA9ICZjdXJyZW50UG9zaXRpb247CisgICAgICAg
IEFTU0VSVChtX29yaWdpbiAhPSBtX2JvdW5kKTsKKyAgICAgICAgQVNTRVJUKGlzR3Jvd2luZ0Rv
d253YXJkKCkKKyAgICAgICAgICAgID8gKGN1cnJlbnRQb3NpdGlvbiA8IG1fb3JpZ2luICYmIGN1
cnJlbnRQb3NpdGlvbiA+IG1fYm91bmQpCisgICAgICAgICAgICA6IChjdXJyZW50UG9zaXRpb24g
PiBtX29yaWdpbiAmJiBjdXJyZW50UG9zaXRpb24gPCBtX2JvdW5kKSk7CisjZW5kaWYKKyAgICB9
CisKKyAgICB2b2lkKiBtX29yaWdpbjsKKyAgICB2b2lkKiBtX2JvdW5kOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhY2tCb3VuZHM7CisKKyNlbmRpZiAvKiBTdGFj
a0JvdW5kc19oICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgU3RhY2tCb3VuZHNfaAorI2RlZmlu
ZSBTdGFja0JvdW5kc19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBTdGFja0JvdW5kcyB7
CisgICAgLy8gcmVjdXJzaW9uQ2hlY2soKSAvIHJlY3Vyc2lvbkxpbWl0KCkgdGVzdHMgKGJ5IGRl
ZmF1bHQpCisgICAgLy8gdGhhdCB3ZSBhcmUgYXQgbGVhc3QgdGhpcyBmYXIgZnJvbSB0aGUgZW5k
IG9mIHRoZSBzdGFjay4KKyAgICBjb25zdCBzdGF0aWMgc2l6ZV90IHNfZGVmYXVsdEF2YWlsYWJp
bGl0eURlbHRhID0gNDA5NjsKKworcHVibGljOgorICAgIFN0YWNrQm91bmRzKCkKKyAgICAgICAg
OiBtX29yaWdpbigwKQorICAgICAgICAsIG1fYm91bmQoMCkKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIFN0YWNrQm91bmRzIGN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpCisgICAgeworICAg
ICAgICBTdGFja0JvdW5kcyBib3VuZHM7CisgICAgICAgIGJvdW5kcy5pbml0aWFsaXplKCk7Cisg
ICAgICAgIGJvdW5kcy5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBib3VuZHM7
CisgICAgfQorCisgICAgdm9pZCogb3JpZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29yaWdpbik7CisgICAgICAgIHJldHVybiBtX29yaWdpbjsKKyAgICB9CisKKyAgICB2b2lk
KiBjdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgdm9pZCogY3VycmVudFBvc2l0aW9uID0gJmN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAg
cmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICB9CisKKyAgICB2b2lkKiByZWN1cnNpb25MaW1p
dChzaXplX3QgbWluQXZhaWxhYmxlRGVsdGEgPSBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJu
IGlzR3Jvd2luZ0Rvd253YXJkKCkKKyAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8Y2hhcio+KG1f
Ym91bmQpICsgbWluQXZhaWxhYmxlRGVsdGEKKyAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8Y2hh
cio+KG1fYm91bmQpIC0gbWluQXZhaWxhYmxlRGVsdGE7CisgICAgfQorCisgICAgYm9vbCByZWN1
cnNpb25DaGVjayhzaXplX3QgbWluQXZhaWxhYmxlRGVsdGEgPSBzX2RlZmF1bHRBdmFpbGFiaWxp
dHlEZWx0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgcmV0dXJuIGlzR3Jvd2luZ0Rvd253YXJkKCkKKyAgICAgICAgICAgID8gY3VycmVudCgpID49
IHJlY3Vyc2lvbkxpbWl0KG1pbkF2YWlsYWJsZURlbHRhKQorICAgICAgICAgICAgOiBjdXJyZW50
KCkgPD0gcmVjdXJzaW9uTGltaXQobWluQXZhaWxhYmxlRGVsdGEpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworCisgICAgYm9vbCBpc0dyb3dpbmdEb3dud2Fy
ZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vcmlnaW4gJiYgbV9ib3VuZCk7Cisj
aWYgT1MoV0lOQ0UpCisgICAgICAgIHJldHVybiBtX29yaWdpbiA+IG1fYm91bmQ7CisjZWxzZQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeSgpIGNvbnN0CisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgdm9p
ZCogY3VycmVudFBvc2l0aW9uID0gJmN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgQVNTRVJUKG1f
b3JpZ2luICE9IG1fYm91bmQpOworICAgICAgICBBU1NFUlQoaXNHcm93aW5nRG93bndhcmQoKQor
ICAgICAgICAgICAgPyAoY3VycmVudFBvc2l0aW9uIDwgbV9vcmlnaW4gJiYgY3VycmVudFBvc2l0
aW9uID4gbV9ib3VuZCkKKyAgICAgICAgICAgIDogKGN1cnJlbnRQb3NpdGlvbiA+IG1fb3JpZ2lu
ICYmIGN1cnJlbnRQb3NpdGlvbiA8IG1fYm91bmQpKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQqIG1fb3JpZ2luOworICAgIHZvaWQqIG1fYm91bmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpTdGFja0JvdW5kczsKKworI2VuZGlmIC8qIFN0YWNrQm91bmRzX2gg
Ki8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHJldmlzaW9uIDc0MzA2
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw5ICs0Miw4IEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgICwg
bV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpKQogICAg
ICwgbV9jdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSkKICNl
bmRpZgorICAgICwgbV9zdGFja0JvdW5kcyhTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNr
Qm91bmRzKCkpCiB7Ci0gICAgY2hhciBzYW1wbGUgPSAwOwotICAgIG1fYXBwcm94aW1hdGVkU3Rh
Y2tTdGFydCA9ICZzYW1wbGU7CiB9CiAKIFdURlRocmVhZERhdGE6On5XVEZUaHJlYWREYXRhKCkK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERhdGEuaAkocmV2aXNpb24gNzQzMDYpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja0Jv
dW5kcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogLy8gVGhpcyB3YXMg
RU5BQkxFKFdPUktFUlMpIGluIFdlYkNvcmUsIGJ1dCB0aGlzIGlzIG5vdCBkZWZpbmVkIHdoZW4g
Y29tcGlsaW5nIEpTQy4KQEAgLTExMyw5ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlm
CiAKLSAgICBjaGFyKiBhcHByb3hpbWF0ZWRTdGFja1N0YXJ0KCkgY29uc3QKKyAgICBjb25zdCBT
dGFja0JvdW5kcyYgc3RhY2soKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXBwcm94
aW1hdGVkU3RhY2tTdGFydDsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2tCb3VuZHM7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMTM1LDcgKzEzNiw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIFdURlRo
cmVhZERhdGEmIHd0ZlRocmVhZERhdGEoKTsKICAgICBmcmllbmQgY2xhc3MgQXRvbWljU3RyaW5n
VGFibGU7CiAKLSAgICBjaGFyKiBtX2FwcHJveGltYXRlZFN0YWNrU3RhcnQ7CisgICAgU3RhY2tC
b3VuZHMgbV9zdGFja0JvdW5kczsKIH07CiAKIGlubGluZSBXVEZUaHJlYWREYXRhJiB3dGZUaHJl
YWREYXRhKCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIHd0Zi9QYWdlQWxsb2NhdGlvbi5jcHAgXAogICAgIHd0Zi9SYW5kb21OdW1i
ZXIuY3BwIFwKICAgICB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBcCisgICAgd3RmL1N0
YWNrQm91bmRzLmNwcCBcCiAgICAgd3RmL1RocmVhZGluZ05vbmUuY3BwIFwKICAgICB3dGYvVGhy
ZWFkaW5nLmNwcCBcCiAgICAgd3RmL1R5cGVUcmFpdHMuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRH
bHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0MzE3KQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMTggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFj
bG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHN0YWNr
IGV4dGVudAorCisgICAgICAgIEFkZCBmb3J3YXJkaW5nIGhlYWRlciBmb3IgU3RhY2tCb3VuZHMu
aC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oOiBBZGRl
ZC4KKwogMjAxMC0xMi0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEJ1aWxkIGZpeDogQWRkZWQgYSBmb3J3YXJkaW5nIGhlYWRlci4KSW5kZXg6IEphdmFT
Y3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCShy
ZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNr
Qm91bmRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1N0YWNrQm91bmRzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3RhY2tCb3Vu
ZHMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdGFja0JvdW5kcy5oPgpJbmRleDogV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc0MzE3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxMC0xMi0xOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDI2Mjc2IC0gTmVlZCBhIG1lY2hhbmlzbSB0byBkZXRlcm1pbmUgc3RhY2sgZXh0ZW50CisKKyAg
ICAgICAgQWRkIGZvcndhcmRpbmcgaGVhZGVyIGZvciBTdGFja0JvdW5kcy5oLgorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmg6IEFkZGVkLgorCiAyMDEwLTEy
LTE4ICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRlckBzZW5jaGEuY29tPiBhbmQgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEg
SGlkYXlhdC4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3Vu
ZHMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNr
Qm91bmRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgV2ViQ29yZV9G
V0RfU3RhY2tCb3VuZHNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9TdGFja0JvdW5kc19oCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvU3RhY2tCb3VuZHMuaD4KKyNlbmRpZgorI2lmbmRlZiBXZWJD
b3JlX0ZXRF9TdGFja0JvdW5kc19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1N0YWNrQm91bmRzX2gK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdGFja0JvdW5kcy5oPgorI2VuZGlmCisjaWZuZGVm
IFdlYkNvcmVfRldEX1N0YWNrQm91bmRzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfU3RhY2tCb3Vu
ZHNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N0YWNrQm91bmRzLmg+CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77028</attachid>
            <date>2010-12-20 12:45:48 -0800</date>
            <delta_ts>2010-12-20 12:47:35 -0800</delta_ts>
            <desc>The patch (ooops, fix fwding headers)</desc>
            <filename>StackBounds.3a.patch</filename>
            <type>text/plain</type>
            <size>45559</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MzE3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTAtMTItMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20g
dG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGNs
YXNzICdTdGFja0JvdW5kcycsIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hY2hpbmUg
c3RhY2suCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGJyb2FkbHkg
YWRoZXJlcyB0byB0aGUgY3VycmVudCBpbXBsbWVudGF0aW9uIG9mCisgICAgICAgIHN0YWNrIGxp
bWl0IGNoZWNraW5nLCBhbmQgYXMgc3VjaCBkb2VzIG5vdCBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBk
ZXRlcm1pbmluZyBzdGFjaworICAgICAgICBleHRlbnQsIGJ1dCBnaXZlcyB1cyBhIGNvbW1vbiBw
bGFjZSB0byBkbyBzby4KKworICAgICAgICBDdXJyZW50bHkgdHdvIG1lY2hhbmlzbSBhcmUgcHJv
dmlkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBvcmlnaW4gKHRoZSBwb2ludCB0aGUKKyAgICAg
ICAgc3RhY2sgaXMgZ3Jvd2luZyBhd2F5IGZyb20pLiBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCkg
aW4gQ29sbGVjdG9yIHByb3ZpZGVzIGEKKyAgICAgICAgbW9yZSBhY2N1cmF0ZSBkZXRlcm1pbmF0
aW9uIG9mIHRoZSBzdGFjayBvcmlnaW4sIHNvIHVzZSB0aGlzIHRvIGNhbGN1bGF0ZQorICAgICAg
ICBTdGFja0JvdW5kczo6bV9vcmlnaW47IFdURlRocmVhZERhdGE6OmFwcHJveGltYXRlZFN0YWNr
U3RhcnQgaXMgbGVzcyBhY2N1cmF0ZSwgYW5kCisgICAgICAgIGFzIHN1Y2ggY2FuIGJlIHJlbW92
ZWQuICBDYWNoZSB0aGUgU3RhY2tCb3VuZHMgb24gV1RGVGhyZWFkRGF0YSBzdWNoIHRoYXQgdGhl
eQorICAgICAgICBuZWVkIG9ubHkgYmUgZGV0ZXJtaW5lZCBvbmNlIHBlciB0aHJlYWQsIGFuZCBm
b3Igbm9uLUFQSSBjb250ZXh0cyBjYWNoZSB0aGlzCisgICAgICAgIGluZm9ybWF0aW9uIGluIEpT
R2xvYmFsRGF0YSwgdG8gc2F2ZSBhIHRocmVhZC1zcGVjaWZpYyBhY2Nlc3MuCisKKyAgICAgICAg
Rm9yIHRoZSB0aW1lIGJlaW5nIHJldGFpbiB0aGUgZXN0aW1hdGUgb2Ygc3RhY2sgc2l6ZSB1c2Vk
IGJ5IEpTQydzIHBhcnNlcgorICAgICAgICAoMTI4ICogc2l6ZW9mKHZvaWQqKSAqIDEwMjQpLCB3
aXRoIGEgdmlldyB0byByZXBsYWNpbmcgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlCisgICAgICAg
IGFjY3VyYXRlIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAgICAgICAqIHBhcnNlci9KU1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpjYW5SZWN1cnNlKToKKyAgICAgICAgKEpT
Qzo6SlNQYXJzZXI6OkpTUGFyc2VyKToKKyAgICAgICAgICAgIENoYW5nZSB0byB1c2UgU3RhY2tC
b3VuZHMuCisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDdXJyZW50VGhy
ZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbCk6CisgICAgICAgICAgICBDaGFuZ2UgdG8gdXNlIFN0
YWNrQm91bmRzLCBjYWNoZWQgb24gSlNHbG9iYWxEYXRhLgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsRGF0YTo6c3RhY2spOgorICAgICAgICAgICAgQWRkIGEgY2FjaGVkIGNvcHkgb2YgU3RhY2tC
b3VuZHMuCisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmNwcDogQ29waWVkIGZyb20gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwLgorICAgICAgICAoV1RGOjplc3RpbWF0ZVN0
YWNrQm91bmQpOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXVEY6OmdldFN0YWNrTWF4KToKKyAgICAgICAgICAgIENvcHkgY29kZSBmcm9tIENvbGxl
Y3Rvci5jcHAgdG8gZGV0ZXJtaW5lIHN0YWNrIG9yaWdpbi4KKyAgICAgICAgKiB3dGYvU3RhY2tC
b3VuZHMuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6
CisgICAgICAgICAgICBObyBhcmd1bWVudCBjb25zdHJ1Y3RvcjsgcmV0dXJucyBhIG51bGwgU3Rh
Y2tCb3VuZHMuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tC
b3VuZHMpOgorICAgICAgICAgICAgUmV0dXJucyBhIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIHN0YWNrIGxpbWl0cworICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgdGhyZWFk
LgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6b3JpZ2luKToKKyAgICAgICAgICAgIFJldHVy
bnMgdG8gc3RhY2sgb3JpZ2luICh0aGUgcG9pbnQgdGhlIHN0YWNrIGlzIGdyb3dpbmcgYXdheQor
ICAgICAgICAgICAgZnJvbTsgdGhlIGhpZ2hlc3QgZXh0ZW50IG9mIHRoZSBzdGFjayBvbiBtYWNo
aW5lcyB3aGVyZSB0aGUKKyAgICAgICAgICAgIHN0YWNrIGdyb3dzIGRvd253YXJkcy4KKyAgICAg
ICAgKFdURjo6U3RhY2tCb3VuZHM6OnJlY3Vyc2lvbkxpbWl0KToKKyAgICAgICAgICAgIFJldHVy
bnMgYSBsaW1pdCB2YWx1ZSB0aGF0IGlzICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZyb20KKyAg
ICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhpcyBpcyBj
dXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93ZXZlciB0
aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBmdXR1cmUs
IGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhOworICAgICAg
ICAgICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlCisgICAgICAgICAgICBzdGFjayBvZiB0aGUgdGhyZWFkIHRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBvbiAoY2hlY2tlZCBieQorICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSkuCisg
ICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpyZWN1cnNpb25DaGVjayk6CisgICAgICAgICAgICBD
aGVja3Mgd2hldGhlciB3ZSBhcmUgY3VycmVudGx5ICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZy
b20KKyAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhp
cyBpcyBjdXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93
ZXZlciB0aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBm
dXR1cmUsIGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhCisg
ICAgICAgICAgICB0byBhcHBseSB3aGVuIGNoZWNraW5nLCBpZiB0aGV5IHdpc2ggdG8gZG8gc28u
IFRoaXMgbWV0aG9kCisgICAgICAgICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gU3RhY2tC
b3VuZHMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUKKyAgICAgICAgICAgIHN0YWNrIG9mIHRoZSB0
aHJlYWQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIChjaGVja2VkIGJ5CisgICAgICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KS4KKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OmN1cnJlbnQpOgor
ICAgICAgICAgICAgQXBwcm94aW1hdGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4gT24gbWFjaGlu
ZXMgd2hlcmUgdGhlIHN0YWNrCisgICAgICAgICAgICBpcyBncm93aW5nIGRvd253YXJkcyB0aGlz
IGlzIHRoZSBsb3dlc3QgYWRkcmVzcyB0aGF0IG1pZ2h0IG5lZWQKKyAgICAgICAgICAgIGNvbnNl
cnZhdGl2ZSBjb2xsZWN0aW9uLgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aXNHcm93aW5n
RG93bndhcmQpOgorICAgICAgICAgICAgVHJ1ZSBmb3IgYWxsIHBsYXRmb3JtcyBvdGhlciB0aGFu
IFdJTkNFLCB3aGljaCBoYXMgdG8gY2hlY2suCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGluIG1ldGhvZHMg
dGhhdCBzaG91bGRzIG9ubHkgYmUgb3BlcmF0aW5nIG9uIGEKKyAgICAgICAgICAgIHZhbGlkIHNl
dCBvZiBib3VuZHM7IGFzIHN1Y2ggd2UgZXhwZWN0IG1fb3JpZ2luICE9IG1fYm91bmRzCisgICAg
ICAgICAgICAoaS5lLiBzdGFjayBzaXplICE9IHplcm8pIC0gd2UncmUgcmVhbGx5IHRlc3Rpbmcg
dGhhdCB0aGlzCisgICAgICAgICAgICBvYmplY3QgaXMgbm90IG51bGwgKHRoZSBjb25zdHJ1Y3Rv
ciBpbml0aWFsaXplcyBib3RoIGZpZWxkcworICAgICAgICAgICAgdG8gemVybykuICBBbHNvIGNo
ZWNrcyB0aGF0IGN1cnJlbnQoKSBpcyB3aXRoaW4gdGhlIHN0YWNrJ3MKKyAgICAgICAgICAgIGJv
dW5kcy4KKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldU
RlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRh
Lmg6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNrKToKKyAgICAgICAgICAgIEFk
ZCB0aGUgU3RhY2tCb3VuZHMgbWVtYmVyIHZhcmlhYmxlLgorCiAyMDEwLTEyLTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRD
b3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gXAogCWppdC9QYWdlQWxsb2NhdGlvbi5jcHBcCiAJd3RmL1JhbmRvbU51bWJl
ci5jcHAgXAogCXd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKKyAgICB3dGYvU3RhY2tC
b3VuZHMuY3BwIFwKIAl3dGYvVENTeXN0ZW1BbGxvYy5jcHAgXAogCXd0Zi9UaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBcCiAJd3RmL1RocmVhZGluZy5jcHAgXApJbmRleDogSmF2YVNj
cmlwdENvcmUvQW5kcm9pZC52OC53dGYubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
QW5kcm9pZC52OC53dGYubWsJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvQW5k
cm9pZC52OC53dGYubWsJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9IFwKIAl3dGYvTWFpblRocmVhZC5jcHAgXAogCXd0Zi9SYW5kb21OdW1iZXIuY3Bw
IFwKIAl3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBcCisgICAgd3RmL1N0YWNrQm91bmRz
LmNwcCBcCiAJd3RmL1RDU3lzdGVtQWxsb2MuY3BwIFwKIAl3dGYvVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAgXAogCXd0Zi9UaHJlYWRpbmcuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL1JldGFpblB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVj
dG9yLmggXAorICAgIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAgXAorICAgIEph
dmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvU3Rh
dGljQ29uc3RydWN0b3JzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaCBc
CiAJSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0V4dHJhcy5oIFwKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNiArNDI0LDggQEAKICAgICAg
ICAgICAgICd3dGYvUmV0YWluUHRyLmgnLAogICAgICAgICAgICAgJ3d0Zi9TZWdtZW50ZWRWZWN0
b3IuaCcsCiAgICAgICAgICAgICAnd3RmL1NpemVMaW1pdHMuY3BwJywKKyAgICAgICAgICAgICd3
dGYvU3RhY2tCb3VuZHMuY3BwJywKKyAgICAgICAgICAgICd3dGYvU3RhY2tCb3VuZHMuaCcsCiAg
ICAgICAgICAgICAnd3RmL1N0YXRpY0NvbnN0cnVjdG9ycy5oJywKICAgICAgICAgICAgICd3dGYv
U3RkTGliRXh0cmFzLmgnLAogICAgICAgICAgICAgJ3d0Zi9TdHJpbmdFeHRyYXMuaCcsCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYu
dmNwcm9qCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzc3LDYgKzc3NywxNCBA
QAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxT
dGFja0JvdW5kcy5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cd3RmXFN0YWNrQm91bmRzLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFN0YXRpY0NvbnN0cnVjdG9ycy5oIgogCQkJPgogCQk8
L0ZpbGU+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDYgKzI1MSw4IEBACiAJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBN
YWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmgg
Ki87IH07CiAJCTg2RDNCM0MzMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMTEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovOyB9OwogCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1
RTcgLyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAq
LzsgfTsKKwkJODZEODdEQUUxMkJDQTdEMTAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDg3REE1MTJCQzRC
MTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgKi87IH07CisJCTg2RDg3RERCMTJCQ0FGOTQw
MDhFNzNBMSAvKiBTdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZEODdEQTYxMkJDNEIxNDAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEQjY0
NjQwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkRCNjQ2MzBG
OTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLzsg
fTsKIAkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFMTE2QjAwRkU3NUFDODAw
QjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oICovOyB9OwogCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1
MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggKi87IH07CkBAIC04NjcsNiArODY5LDggQEAKIAkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyQVJNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDNC
M0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpbmtCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NkQ4N0RBNTEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tCb3VuZHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkQ4N0RBNjEyQkM0QjE0MDA4RTczQTEgLyogU3Rh
Y2tCb3VuZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tCb3VuZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIx
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyog
Q29kZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVMb2Nh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAx
QUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1
NSw2ICsxNTU5LDggQEAKIAkJCQk1MUY2NDhENjBCQjRFMkNBMDAzM0Q3NjAgLyogUmV0YWluUHRy
LmggKi8sCiAJCQkJOTY5QTA3MjkwRUQxQ0U2OTAwRjFGNjgxIC8qIFNlZ21lbnRlZFZlY3Rvci5o
ICovLAogCQkJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLywK
KwkJCQk4NkQ4N0RBNTEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICovLAorCQkJ
CTg2RDg3REE2MTJCQzRCMTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5oICovLAogCQkJCTg2OEJG
QTVGMTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAqLywKIAkJCQlGRTFC
NDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJRTExRDUxNzUw
QjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4dHJhcy5oICovLApAQCAtMjI5Miw2ICsyMjk4LDcg
QEAKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6
ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZEODdEREIxMkJDQUY5NDAwOEU3M0Ex
IC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjhCRkE2MDExN0QwNDgyMDBC
OTA4QjEgLyogU3RhdGljQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTFCNDQ3
QTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkI5OUFFMzExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTI0NTcsNyArMjQ2NCw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDE0OUMyNzcxMDg5MDJBRkUwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkphdmFTY3JpcHRDb3JlIiAqLzsKIAkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVu
Z2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9
ICgKIAkJCQlFbmdsaXNoLApAQCAtMjc5Myw2ICsyNzk5LDcgQEAKIAkJCQkxNDQ2OURFQTEwN0VD
N0U3MDA2NTA0NDYgLyogU2NvcGVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTg2RDg3REFFMTJCQ0E3RDEwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4QkZBMEUxMTdDRUZEMTAwQjkwOEIxIC8qIFN0
cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUwNDQ2
IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3BhcnNlci9KU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0pTUGFyc2VyLmNwcAkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
SlNQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBDT01QSUxFX0FTU0VSVChMYXN0VW50YWdnZWRUb2tlbiA8IDY0LCBMZXNzVGhhbjY0
VW50YWdnZWRUb2tlbnMpOwogCi0vLyBUaGlzIG1hdGNoZXMgdjgKLXN0YXRpYyBjb25zdCBwdHJk
aWZmX3Qga01heFBhcnNlclN0YWNrVXNhZ2UgPSAxMjggKiBzaXplb2Yodm9pZCopICogMTAyNDsK
LQogY2xhc3MgSlNQYXJzZXIgewogcHVibGljOgogICAgIEpTUGFyc2VyKExleGVyKiwgSlNHbG9i
YWxEYXRhKiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCBpc1N0cmljdENvbnRleHQsIGJvb2wg
aXNGdW5jdGlvbiwgU291cmNlUHJvdmlkZXIqKTsKQEAgLTE5Myw5ICsxOTAsNyBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBjYW5SZWN1cnNlKCkKICAgICB7Ci0gICAgICAgIGNoYXIgc2FtcGxlID0g
MDsKLSAgICAgICAgQVNTRVJUKG1fZW5kQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiAmc2FtcGxl
ID4gbV9lbmRBZGRyZXNzOworICAgICAgICByZXR1cm4gbV9zdGFjay5yZWN1cnNpb25DaGVjaygp
OwogICAgIH0KICAgICAKICAgICBpbnQgbGFzdFRva2VuRW5kKCkgY29uc3QKQEAgLTIwNSw3ICsy
MDAsNyBAQCBwcml2YXRlOgogCiAgICAgUGFyc2VyQXJlbmEgbV9hcmVuYTsKICAgICBMZXhlciog
bV9sZXhlcjsKLSAgICBjaGFyKiBtX2VuZEFkZHJlc3M7CisgICAgU3RhY2tCb3VuZHMgbV9zdGFj
azsKICAgICBib29sIG1fZXJyb3I7CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAg
ICAgSlNUb2tlbiBtX3Rva2VuOwpAQCAtNDkxLDcgKzQ4Niw3IEBAIGludCBqc1BhcnNlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIAogSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhl
ciwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBib29sIGlzRnVuY3Rpb24sIFNvdXJjZVByb3ZpZGVy
KiBwcm92aWRlcikKICAgICA6IG1fbGV4ZXIobGV4ZXIpCi0gICAgLCBtX2VuZEFkZHJlc3MoMCkK
KyAgICAsIG1fc3RhY2soZ2xvYmFsRGF0YS0+c3RhY2soKSkKICAgICAsIG1fZXJyb3IoZmFsc2Up
CiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkK
QEAgLTUwNSw3ICs1MDAsNiBAQCBKU1BhcnNlcjo6SlNQYXJzZXIoTGV4ZXIqIGxleGVyLCBKU0ds
b2JhCiAgICAgLCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQoMCkKICAgICAsIG1fbGFzdElk
ZW50aWZpZXIoMCkKIHsKLSAgICBtX2VuZEFkZHJlc3MgPSB3dGZUaHJlYWREYXRhKCkuYXBwcm94
aW1hdGVkU3RhY2tTdGFydCgpIC0ga01heFBhcnNlclN0YWNrVXNhZ2U7CiAgICAgU2NvcGVSZWYg
c2NvcGUgPSBwdXNoU2NvcGUoKTsKICAgICBpZiAoaXNGdW5jdGlvbikKICAgICAgICAgc2NvcGUt
PnNldElzRnVuY3Rpb24oKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJ
KHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODksMTc1ICszODksNiBAQCB2b2lkIEhlYXA6OnNocmlua0Js
b2NrcyhzaXplX3QgbmVlZGVkQmxvCiAgICAgICAgIG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+
bWFya2VkLnNldChIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiB9CiAKLSNpZiBP
UyhXSU5DRSkKLUpTX0VYUE9SVERBVEEgdm9pZCogZ19zdGFja0Jhc2UgPSAwOwotCi1pbmxpbmUg
Ym9vbCBpc1BhZ2VXcml0YWJsZSh2b2lkKiBwYWdlKQotewotICAgIE1FTU9SWV9CQVNJQ19JTkZP
Uk1BVElPTiBtZW1vcnlJbmZvcm1hdGlvbjsKLSAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVl
cnkocGFnZSwgJm1lbW9yeUluZm9ybWF0aW9uLCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsK
LQotICAgIC8vIHJldHVybiBmYWxzZSBvbiBlcnJvciwgaW5jbHVkaW5nIHB0ciBvdXRzaWRlIG1l
bW9yeQotICAgIGlmIChyZXN1bHQgIT0gc2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdPUkQgcHJvdGVjdCA9IG1lbW9yeUluZm9ybWF0aW9u
LlByb3RlY3QgJiB+KFBBR0VfR1VBUkQgfCBQQUdFX05PQ0FDSEUpOwotICAgIHJldHVybiBwcm90
ZWN0ID09IFBBR0VfUkVBRFdSSVRFCi0gICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9XUklURUNP
UFkKLSAgICAgICAgfHwgcHJvdGVjdCA9PSBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFCi0gICAgICAg
IHx8IHByb3RlY3QgPT0gUEFHRV9FWEVDVVRFX1dSSVRFQ09QWTsKLX0KLQotc3RhdGljIHZvaWQq
IGdldFN0YWNrQmFzZSh2b2lkKiBwcmV2aW91c0ZyYW1lKQotewotICAgIC8vIGZpbmQgdGhlIGFk
ZHJlc3Mgb2YgdGhpcyBzdGFjayBmcmFtZSBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsb2Nh
bCB2YXJpYWJsZQotICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQ7Ci0gICAgdm9pZCogdGhpc0Zy
YW1lID0gKHZvaWQqKSgmaXNHcm93aW5nRG93bndhcmQpOwotCi0gICAgaXNHcm93aW5nRG93bndh
cmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKLSAgICBzdGF0aWMgRFdPUkQgcGFnZVNp
emUgPSAwOwotICAgIGlmICghcGFnZVNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVt
SW5mbzsKLSAgICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Ci0gICAgICAgIHBhZ2VT
aXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOwotICAgIH0KLQotICAgIC8vIHNjYW4gYWxsIG9m
IG1lbW9yeSBzdGFydGluZyBmcm9tIHRoaXMgZnJhbWUsIGFuZCByZXR1cm4gdGhlIGxhc3Qgd3Jp
dGVhYmxlIHBhZ2UgZm91bmQKLSAgICByZWdpc3RlciBjaGFyKiBjdXJyZW50UGFnZSA9IChjaGFy
KikoKERXT1JEKXRoaXNGcmFtZSAmIH4ocGFnZVNpemUgLSAxKSk7Ci0gICAgaWYgKGlzR3Jvd2lu
Z0Rvd253YXJkKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50UGFnZSA+IDApIHsKLSAgICAgICAg
ICAgIC8vIGNoZWNrIGZvciB1bmRlcmZsb3cKLSAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+
PSAoY2hhciopcGFnZVNpemUpCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgLT0gcGFnZVNp
emU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAwOwot
ICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlICsgcGFnZVNpemU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgIC8vIGd1YXJhbnRlZWQgdG8gY29tcGxldGUgYmVjYXVzZSBpc1BhZ2VXcml0YWJsZSByZXR1
cm5zIGZhbHNlIGF0IGVuZCBvZiBtZW1vcnkKLSAgICAgICAgICAgIGN1cnJlbnRQYWdlICs9IHBh
Z2VTaXplOwotICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlOwotICAgICAgICB9Ci0gICAgfQotfQot
I2VuZGlmCi0KLSNpZiBPUyhRTlgpCi1zdGF0aWMgaW5saW5lIHZvaWQgKmN1cnJlbnRUaHJlYWRT
dGFja0Jhc2VRTlgoKQotewotICAgIHN0YXRpYyB2b2lkKiBzdGFja0Jhc2UgPSAwOwotICAgIHN0
YXRpYyBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSAgICBzdGF0aWMgcHRocmVhZF90IHN0YWNrVGhy
ZWFkOwotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoc3Rh
Y2tCYXNlID09IDAgfHwgdGhyZWFkICE9IHN0YWNrVGhyZWFkKSB7Ci0gICAgICAgIHN0cnVjdCBf
ZGVidWdfdGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICAgICAgbWVtc2V0KCZ0aHJlYWRJbmZv
LCAwLCBzaXplb2YodGhyZWFkSW5mbykpOwotICAgICAgICB0aHJlYWRJbmZvLnRpZCA9IHB0aHJl
YWRfc2VsZigpOwotICAgICAgICBpbnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkp
OwotICAgICAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIG9wZW4gL3Byb2Mvc2VsZiAoZXJybm86ICVkKSIsIGVycm5vKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGRldmN0bChmZCwgRENNRF9QUk9DX1RJRFNUQVRV
UywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Ci0gICAgICAgIGNsb3NlKGZk
KTsKLSAgICAgICAgc3RhY2tCYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odGhyZWFkSW5m
by5zdGtiYXNlKTsKLSAgICAgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXplOwotICAg
ICAgICBBU1NFUlQoc3RhY2tCYXNlKTsKLSAgICAgICAgc3RhY2tUaHJlYWQgPSB0aHJlYWQ7Ci0g
ICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6
ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQqIGN1cnJlbnRUaHJlYWRTdGFja0Jh
c2UoKQotewotI2lmIE9TKERBUldJTikKLSAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9z
ZWxmKCk7Ci0gICAgcmV0dXJuIHB0aHJlYWRfZ2V0X3N0YWNrYWRkcl9ucCh0aHJlYWQpOwotI2Vs
aWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikgJiYgQ09NUElMRVIoTVNWQykKLSAgICAvLyBvZmZz
ZXQgMHgxOCBmcm9tIHRoZSBGUyBzZWdtZW50IHJlZ2lzdGVyIGdpdmVzIGEgcG9pbnRlciB0bwot
ICAgIC8vIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gYmxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVh
ZAotICAgIE5UX1RJQiogcFRpYjsKLSAgICBfX2FzbSB7Ci0gICAgICAgIE1PViBFQVgsIEZTOlsx
OGhdCi0gICAgICAgIE1PViBwVGliLCBFQVgKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwotI2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nikg
JiYgQ09NUElMRVIoR0NDKQotICAgIC8vIG9mZnNldCAweDE4IGZyb20gdGhlIEZTIHNlZ21lbnQg
cmVnaXN0ZXIgZ2l2ZXMgYSBwb2ludGVyIHRvCi0gICAgLy8gdGhlIHRocmVhZCBpbmZvcm1hdGlv
biBibG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkCi0gICAgTlRfVElCKiBwVGliOwotICAgIGFz
bSAoICJtb3ZsICUlZnM6MHgxOCwgJTBcbiIKLSAgICAgICAgICA6ICI9ciIgKHBUaWIpCi0gICAg
ICAgICk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwot
I2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICBQTlRfVElCNjQgcFRpYiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBUaWItPlN0YWNrQmFzZSk7Ci0jZWxpZiBPUyhRTlgpCi0g
ICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4JiwgbXV0ZXggPSAqbmV3IE11dGV4
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobXV0ZXgpOwotICAgIHJldHVybiBjdXJyZW50VGhy
ZWFkU3RhY2tCYXNlUU5YKCk7Ci0jZWxpZiBPUyhTT0xBUklTKQotICAgIHN0YWNrX3QgczsKLSAg
ICB0aHJfc3Rrc2VnbWVudCgmcyk7Ci0gICAgcmV0dXJuIHMuc3Nfc3A7Ci0jZWxpZiBPUyhPUEVO
QlNEKQotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBzdGFja190
IHN0YWNrOwotICAgIHB0aHJlYWRfc3RhY2tzZWdfbnAodGhyZWFkLCAmc3RhY2spOwotICAgIHJl
dHVybiBzdGFjay5zc19zcDsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgVFRocmVhZFN0YWNrSW5m
byBpbmZvOwotICAgIFJUaHJlYWQgdGhyZWFkOwotICAgIHRocmVhZC5TdGFja0luZm8oaW5mbyk7
Ci0gICAgcmV0dXJuICh2b2lkKilpbmZvLmlCYXNlOwotI2VsaWYgT1MoSEFJS1UpCi0gICAgdGhy
ZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICBnZXRfdGhyZWFkX2luZm8oZmluZF90aHJlYWQoTlVM
TCksICZ0aHJlYWRJbmZvKTsKLSAgICByZXR1cm4gdGhyZWFkSW5mby5zdGFja19lbmQ7Ci0jZWxp
ZiBPUyhVTklYKQotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4
ID0gKm5ldyBNdXRleCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4KTsKLSAgICBzdGF0
aWMgdm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBzdGF0aWMgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7
Ci0gICAgc3RhdGljIHB0aHJlYWRfdCBzdGFja1RocmVhZDsKLSAgICBwdGhyZWFkX3QgdGhyZWFk
ID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgaWYgKHN0YWNrQmFzZSA9PSAwIHx8IHRocmVhZCAhPSBz
dGFja1RocmVhZCkgewotICAgICAgICBwdGhyZWFkX2F0dHJfdCBzYXR0cjsKLSAgICAgICAgcHRo
cmVhZF9hdHRyX2luaXQoJnNhdHRyKTsKLSNpZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVU
QlNEKQotICAgICAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0g
ICAgICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAodGhyZWFkLCAmc2F0dHIpOwotI2Vsc2UKLSAgICAg
ICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBz
eXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICAgICAgcHRocmVh
ZF9nZXRhdHRyX25wKHRocmVhZCwgJnNhdHRyKTsKLSNlbmRpZgotICAgICAgICBpbnQgcmMgPSBw
dGhyZWFkX2F0dHJfZ2V0c3RhY2soJnNhdHRyLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsKLSAg
ICAgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBT
ZWVtcyBmYXRhbC4KLSAgICAgICAgQVNTRVJUKHN0YWNrQmFzZSk7Ci0gICAgICAgIHB0aHJlYWRf
YXR0cl9kZXN0cm95KCZzYXR0cik7Ci0gICAgICAgIHN0YWNrVGhyZWFkID0gdGhyZWFkOwotICAg
IH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7
Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgm
LCBtdXRleCA9ICpuZXcgTXV0ZXgpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7Ci0g
ICAgaWYgKGdfc3RhY2tCYXNlKQotICAgICAgICByZXR1cm4gZ19zdGFja0Jhc2U7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGludCBkdW1teTsKLSAgICAgICAgcmV0dXJuIGdldFN0YWNrQmFzZSgmZHVt
bXkpOwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0YWNrIGJh
c2Ugb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KICNpZiBFTkFCTEUoSlNDX01VTFRJUExF
X1RIUkVBRFMpCiAKIHN0YXRpYyBpbmxpbmUgUGxhdGZvcm1UaHJlYWQgZ2V0Q3VycmVudFBsYXRm
b3JtVGhyZWFkKCkKQEAgLTU4Nyw3ICs0MTgsNyBAQCB2b2lkIEhlYXA6OnJlZ2lzdGVyVGhyZWFk
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2N1cnJlbnRU
aHJlYWRSZWdpc3RyYXIsIHRoaXMpOwotICAgIEhlYXA6OlRocmVhZCogdGhyZWFkID0gbmV3IEhl
YXA6OlRocmVhZChwdGhyZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCksIGN1
cnJlbnRUaHJlYWRTdGFja0Jhc2UoKSk7CisgICAgSGVhcDo6VGhyZWFkKiB0aHJlYWQgPSBuZXcg
SGVhcDo6VGhyZWFkKHB0aHJlYWRfc2VsZigpLCBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQoKSwg
bV9nbG9iYWxEYXRhLT5zdGFjaygpLm9yaWdpbigpKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2so
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKIApAQCAtNjU0LDExICs0ODUsMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzUG9zc2libGVDZWxsKHZvaWQqIAogCiB2b2lkIEhlYXA6Om1hcmtDb25z
ZXJ2YXRpdmVseShNYXJrU3RhY2smIG1hcmtTdGFjaywgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkK
IHsKKyNpZiBPUyhXSU5DRSkKICAgICBpZiAoc3RhcnQgPiBlbmQpIHsKICAgICAgICAgdm9pZCog
dG1wID0gc3RhcnQ7CiAgICAgICAgIHN0YXJ0ID0gZW5kOwogICAgICAgICBlbmQgPSB0bXA7CiAg
ICAgfQorI2Vsc2UKKyAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsKKyNlbmRpZgogCiAgICAgQVNT
RVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIqPihzdGFydCkp
IDwgMHgxMDAwMDAwKTsKICAgICBBU1NFUlQoaXNQb2ludGVyQWxpZ25lZChzdGFydCkpOwpAQCAt
NjkyLDEwICs1MjcsNyBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2sm
CiAKIHZvaWQgTkVWRVJfSU5MSU5FIEhlYXA6Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZl
bHlJbnRlcm5hbChNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICB2b2lkKiBkdW1teTsKLSAg
ICB2b2lkKiBzdGFja1BvaW50ZXIgPSAmZHVtbXk7Ci0gICAgdm9pZCogc3RhY2tCYXNlID0gY3Vy
cmVudFRocmVhZFN0YWNrQmFzZSgpOwotICAgIG1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ss
IHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKKyAgICBtYXJrQ29uc2VydmF0aXZlbHkobWFya1N0
YWNrLCBtX2dsb2JhbERhdGEtPnN0YWNrKCkuY3VycmVudCgpLCBtX2dsb2JhbERhdGEtPnN0YWNr
KCkub3JpZ2luKCkpOwogICAgIG1hcmtTdGFjay5kcmFpbigpOwogfQogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDYgKzE1Myw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAg
ICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQogI2VuZGlmCiB7CisgICAgaWYgKGdsb2JhbERhdGFUeXBl
ID09IERlZmF1bHQpCisgICAgICAgIG1fc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsK
KwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdGFydFByb2ZpbGVyU2VydmVySWZOZWVkZWQoKTsK
ICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lv
biA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJ
TkcpCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjZW5kaWYKQEAgLTE3OCw2ICsxNzks
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZWxzZQogICAgICAgICBib29sIGNhblVzZUpJVCgpIHsg
cmV0dXJuIG1fY2FuVXNlSklUOyB9CiAjZW5kaWYKKworICAgICAgICBjb25zdCBTdGFja0JvdW5k
cyYgc3RhY2soKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGdsb2JhbERhdGFUeXBl
ID09IERlZmF1bHQpCisgICAgICAgICAgICAgICAgPyBtX3N0YWNrCisgICAgICAgICAgICAgICAg
OiB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAgICAgICAgfQorCiAgICAgICAgIExleGVyKiBs
ZXhlcjsKICAgICAgICAgUGFyc2VyKiBwYXJzZXI7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlcjsKQEAgLTI1MCw2ICsyNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUo
SklUKSAmJiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7CiAj
ZW5kaWYKKyAgICAgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDc0MzA2
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05LDYgKzksNyBAQCBTRVQoV1RGX1NPVVJDRVMKICAgICBNRDUuY3BwCiAgICAgUmFuZG9tTnVt
YmVyLmNwcAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKyAgICBTdGFja0JvdW5kcy5j
cHAKICAgICBTdHJpbmdFeHRyYXMuY3BwCiAgICAgVGhyZWFkaW5nLmNwcAogICAgIFR5cGVUcmFp
dHMuY3BwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAJKHJldmlzaW9uIDApCisr
KyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdGFja0JvdW5kcy5oIgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC90YXNr
Lmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisK
KyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1Mu
aD4KKworI2VsaWYgT1MoU09MQVJJUykKKworI2luY2x1ZGUgPHRocmVhZC5oPgorCisjZWxpZiBP
UyhRTlgpCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNlbGlmIE9TKFVOSVgpCisK
KyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgSEFWRShQVEhSRUFEX05QX0gpCisjaW5jbHVkZSA8
cHRocmVhZF9ucC5oPgorI2VuZGlmCisKKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
QmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlNDIHBhcnNlciwgZ3Vlc3Mg
dGhlIHN0YWNrIHNpemUuCitzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVzdGltYXRlZFN0YWNrU2l6
ZSA9IDEyOCAqIHNpemVvZih2b2lkKikgKiAxMDI0OworCisvLyBUaGlzIG1ldGhvZCBhc3N1bWVz
IHRoZSBzdGFjayBpcyBncm93aW5nIGRvd253YXJkcy4KK3N0YXRpYyB2b2lkKiBlc3RpbWF0ZVN0
YWNrQm91bmQodm9pZCogb3JpZ2luKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4o
b3JpZ2luKSAtIGVzdGltYXRlZFN0YWNrU2l6ZTsKK30KKworI2lmIE9TKERBUldJTikKKwordm9p
ZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7CisgICAgcHRocmVhZF90IHRocmVhZCA9IHB0
aHJlYWRfc2VsZigpOworICAgIG1fb3JpZ2luID0gcHRocmVhZF9nZXRfc3RhY2thZGRyX25wKHRo
cmVhZCk7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZChtX29yaWdpbik7Cit9CisK
KyNlbGlmIE9TKFdJTkRPV1MpCisKK3ZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQorewor
I2lmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0
aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhy
ZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIq
IHBUaWI7CisgICAgX19hc20geworICAgICAgICBNT1YgRUFYLCBGUzpbMThoXQorICAgICAgICBN
T1YgcFRpYiwgRUFYCisgICAgfQorICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHBU
aWItPlN0YWNrQmFzZSk7CisjZWxpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2KSAmJiBDT01QSUxF
UihHQ0MpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBn
aXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZv
ciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIqIHBUaWI7CisgICAgYXNtICggIm1vdmwg
JSVmczoweDE4LCAlMFxuIgorICAgICAgICAgIDogIj1yIiAocFRpYikKKyAgICAgICAgKTsKKyAg
ICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2VsaWYg
T1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKKyAgICBQTlRfVElCNjQgcFRpYiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7CisgICAgbV9vcmlnaW4gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2Vsc2UKKyNlcnJvciBOZWVk
IGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgYm91bmRzIG9uIHRoaXMgcGxhdGZvcm0gKFdpbmRvd3Mp
CisjZW5kaWYKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0JvdW5kKG1fb3JpZ2luKTsKK30K
KworI2VsaWYgT1MoUU5YKQorCit2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKK3sKKyAg
ICB2b2lkKiBzdGFja0Jhc2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIHB0
aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKworICAgIHN0cnVjdCBfZGVidWdfdGhy
ZWFkX2luZm8gdGhyZWFkSW5mbzsKKyAgICBtZW1zZXQoJnRocmVhZEluZm8sIDAsIHNpemVvZih0
aHJlYWRJbmZvKSk7CisgICAgdGhyZWFkSW5mby50aWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBp
bnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkpOworICAgIGlmIChmZCA9PSAtMSkg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIC9wcm9jL3NlbGYgKGVycm5vOiAl
ZCkiLCBlcnJubyk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIGRldmN0bChmZCwgRENN
RF9QUk9DX1RJRFNUQVRVUywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Cisg
ICAgY2xvc2UoZmQpOworICAgIHN0YWNrQmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRo
cmVhZEluZm8uc3RrYmFzZSk7CisgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXplOwor
ICAgIEFTU0VSVChzdGFja0Jhc2UpOworCisgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0Jv
dW5kKG1fb3JpZ2luKTsKK30KKworI2VsaWYgT1MoU09MQVJJUykKKwordm9pZCBTdGFja0JvdW5k
czo6aW5pdGlhbGl6ZSgpCit7CisgICAgc3RhY2tfdCBzOworICAgIHRocl9zdGtzZWdtZW50KCZz
KTsKKyAgICBtX29yaWdpbiA9IHMuc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKE9QRU5CU0QpCisKK3ZvaWQgU3RhY2tCb3Vu
ZHM6OmluaXRpYWxpemUoKQoreworICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYo
KTsKKyAgICBzdGFja190IHN0YWNrOworICAgIHB0aHJlYWRfc3RhY2tzZWdfbnAodGhyZWFkLCAm
c3RhY2spOworICAgIG1fb3JpZ2luID0gc3RhY2suc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGlt
YXRlU3RhY2tCb3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFNZTUJJQU4pCisKK3ZvaWQg
U3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQoreworICAgIFRUaHJlYWRTdGFja0luZm8gaW5mbzsK
KyAgICBSVGhyZWFkIHRocmVhZDsKKyAgICB0aHJlYWQuU3RhY2tJbmZvKGluZm8pOworICAgIG1f
b3JpZ2luID0gKHZvaWQqKWluZm8uaUJhc2U7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKEhBSUtVKQorCit2b2lkIFN0YWNrQm91bmRz
Ojppbml0aWFsaXplKCkKK3sKKyAgICB0aHJlYWRfaW5mbyB0aHJlYWRJbmZvOworICAgIGdldF90
aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRocmVhZEluZm8pOworICAgIG1fb3JpZ2lu
ID0gdGhyZWFkSW5mby5zdGFja19lbmQ7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3Vu
ZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFVOSVgpCisKK3ZvaWQgU3RhY2tCb3VuZHM6Omlu
aXRpYWxpemUoKQoreworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0YWNr
U2l6ZSA9IDA7CisKKyAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAg
cHRocmVhZF9hdHRyX3Qgc2F0dHI7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJnNhdHRyKTsKKyNp
ZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJT
RCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRocmVhZCwg
JnNhdHRyKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRh
YmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2
ZXMKKyAgICBwdGhyZWFkX2dldGF0dHJfbnAodGhyZWFkLCAmc2F0dHIpOworI2VuZGlmCisgICAg
aW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwgJnN0YWNr
U2l6ZSk7CisgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21l
aG93PyBTZWVtcyBmYXRhbC4KKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICBwdGhyZWFkX2F0
dHJfZGVzdHJveSgmc2F0dHIpOworICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0
YWNrQmFzZSkgKyBzdGFja1NpemU7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZCht
X29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFdJTkNFKQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKy8v
IEZJWE1FOiB0aGlzIGlzIG5vdCB0aHJlYWRzYWZlLCBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIHJl
bW92ZWQuCituYW1lc3BhY2UgSlNDIHsgSlNfRVhQT1JUREFUQSB2b2lkKiBnX3N0YWNrQmFzZSA9
IDA7IH0KK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2b2lk
KiBwYWdlKQoreworICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlJbmZvcm1hdGlv
bjsKKyAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVlcnkocGFnZSwgJm1lbW9yeUluZm9ybWF0
aW9uLCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsKKworICAgIC8vIHJldHVybiBmYWxzZSBv
biBlcnJvciwgaW5jbHVkaW5nIHB0ciBvdXRzaWRlIG1lbW9yeQorICAgIGlmIChyZXN1bHQgIT0g
c2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RFdPUkQgcHJvdGVjdCA9IG1lbW9yeUluZm9ybWF0aW9uLlByb3RlY3QgJiB+KFBBR0VfR1VBUkQg
fCBQQUdFX05PQ0FDSEUpOworICAgIHJldHVybiBwcm90ZWN0ID09IFBBR0VfUkVBRFdSSVRFCisg
ICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9XUklURUNPUFkKKyAgICAgICAgfHwgcHJvdGVjdCA9
PSBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFCisgICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9FWEVD
VVRFX1dSSVRFQ09QWTsKK30KKworc3RhdGljIHZvaWQqIGdldFN0YWNrTWF4KHZvaWQqIHByZXZp
b3VzRnJhbWUsIGJvb2wmIGlzR3Jvd2luZ0Rvd253YXJkKQoreworICAgIC8vIGZpbmQgdGhlIGFk
ZHJlc3Mgb2YgdGhpcyBzdGFjayBmcmFtZSBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsb2Nh
bCB2YXJpYWJsZQorICAgIHZvaWQqIHRoaXNGcmFtZSA9ICZ0aGlzRnJhbWU7CisgICAgaXNHcm93
aW5nRG93bndhcmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKKworICAgIGlmIChKU0M6
Omdfc3RhY2tCYXNlKQorICAgICAgICByZXR1cm4gSlNDOjpnX3N0YWNrQmFzZTsKKworICAgIFNZ
U1RFTV9JTkZPIHN5c3RlbUluZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Cisg
ICAgRFdPUkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7CisKKyAgICAvLyBzY2Fu
IGFsbCBvZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBs
YXN0IHdyaXRlYWJsZSBwYWdlIGZvdW5kCisgICAgcmVnaXN0ZXIgY2hhciogY3VycmVudFBhZ2Ug
PSAoY2hhciopKChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkpOworICAgIGlmIChp
c0dyb3dpbmdEb3dud2FyZCkgeworICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7Cisg
ICAgICAgICAgICAvLyBjaGVjayBmb3IgdW5kZXJmbG93CisgICAgICAgICAgICBpZiAoY3VycmVu
dFBhZ2UgPj0gKGNoYXIqKXBhZ2VTaXplKQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09
IHBhZ2VTaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdl
ID0gMDsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFi
bGUgcmV0dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5CisgICAgICAgICAgICBjdXJyZW50UGFn
ZSArPSBwYWdlU2l6ZTsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBh
Z2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7CisgICAgYm9vbCBpc0dy
b3dpbmdEb3dud2FyZAorICAgIG1fb3JpZ2luID0gZ2V0U3RhY2tNYXgoaXNHcm93aW5nRG93bndh
cmQpOworICAgIG1fYm91bmQgPSBpc0dyb3dpbmdEb3dud2FyZAorICAgICAgICA/IHN0YXRpY19j
YXN0PGNoYXIqPihtX29yaWdpbikgLSBlc3RpbWF0ZWRTdGFja1NpemUKKyAgICAgICAgOiBzdGF0
aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pICsgZXN0aW1hdGVkU3RhY2tTaXplOworfQorCisjZWxz
ZQorI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBib3VuZHMgb24gdGhpcyBwbGF0
Zm9ybQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogSmF2YVNjcmlwdENvcmUv
d3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNr
Qm91bmRzLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBT
dGFja0JvdW5kc19oCisjZGVmaW5lIFN0YWNrQm91bmRzX2gKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFN0YWNrQm91bmRzIHsKKyAgICAvLyByZWN1cnNpb25DaGVjaygpIC8gcmVjdXJzaW9u
TGltaXQoKSB0ZXN0cyAoYnkgZGVmYXVsdCkKKyAgICAvLyB0aGF0IHdlIGFyZSBhdCBsZWFzdCB0
aGlzIGZhciBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgorICAgIGNvbnN0IHN0YXRpYyBzaXpl
X3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA0MDk2OworCitwdWJsaWM6CisgICAgU3Rh
Y2tCb3VuZHMoKQorICAgICAgICA6IG1fb3JpZ2luKDApCisgICAgICAgICwgbV9ib3VuZCgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhY2tCb3VuZHMgY3VycmVudFRocmVhZFN0YWNr
Qm91bmRzKCkKKyAgICB7CisgICAgICAgIFN0YWNrQm91bmRzIGJvdW5kczsKKyAgICAgICAgYm91
bmRzLmluaXRpYWxpemUoKTsKKyAgICAgICAgYm91bmRzLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICB2b2lkKiBvcmlnaW4oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2lu
OworICAgIH0KKworICAgIHZvaWQqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVu
dFBvc2l0aW9uOworICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOworICAgIH0KKworICAg
IHZvaWQqIHJlY3Vyc2lvbkxpbWl0KHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVs
dEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAgICAgICAgPyBz
dGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgKyBtaW5BdmFpbGFibGVEZWx0YQorICAgICAgICAg
ICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFpbGFibGVEZWx0YTsKKyAg
ICB9CisKKyAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9
IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAg
ICAgICAgPyBjdXJyZW50KCkgPj0gcmVjdXJzaW9uTGltaXQobWluQXZhaWxhYmxlRGVsdGEpCisg
ICAgICAgICAgICA6IGN1cnJlbnQoKSA8PSByZWN1cnNpb25MaW1pdChtaW5BdmFpbGFibGVEZWx0
YSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisKKyAgICBi
b29sIGlzR3Jvd2luZ0Rvd253YXJkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29y
aWdpbiAmJiBtX2JvdW5kKTsKKyNpZiBPUyhXSU5DRSkKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2lu
ID4gbV9ib3VuZDsKKyNlbHNlCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgfQor
CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKKyAgICB7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVudFBvc2l0aW9u
OworICAgICAgICBBU1NFUlQobV9vcmlnaW4gIT0gbV9ib3VuZCk7CisgICAgICAgIEFTU0VSVChp
c0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IChjdXJyZW50UG9zaXRpb24gPCBtX29y
aWdpbiAmJiBjdXJyZW50UG9zaXRpb24gPiBtX2JvdW5kKQorICAgICAgICAgICAgOiAoY3VycmVu
dFBvc2l0aW9uID4gbV9vcmlnaW4gJiYgY3VycmVudFBvc2l0aW9uIDwgbV9ib3VuZCkpOworI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCogbV9vcmlnaW47CisgICAgdm9pZCogbV9ib3VuZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0YWNrQm91bmRzOworCisjZW5k
aWYgLyogU3RhY2tCb3VuZHNfaCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFN0YWNrQm91bmRz
X2gKKyNkZWZpbmUgU3RhY2tCb3VuZHNfaAorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgU3Rh
Y2tCb3VuZHMgeworICAgIC8vIHJlY3Vyc2lvbkNoZWNrKCkgLyByZWN1cnNpb25MaW1pdCgpIHRl
c3RzIChieSBkZWZhdWx0KQorICAgIC8vIHRoYXQgd2UgYXJlIGF0IGxlYXN0IHRoaXMgZmFyIGZy
b20gdGhlIGVuZCBvZiB0aGUgc3RhY2suCisgICAgY29uc3Qgc3RhdGljIHNpemVfdCBzX2RlZmF1
bHRBdmFpbGFiaWxpdHlEZWx0YSA9IDQwOTY7CisKK3B1YmxpYzoKKyAgICBTdGFja0JvdW5kcygp
CisgICAgICAgIDogbV9vcmlnaW4oMCkKKyAgICAgICAgLCBtX2JvdW5kKDApCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyBTdGFja0JvdW5kcyBjdXJyZW50VGhyZWFkU3RhY2tCb3VuZHMoKQor
ICAgIHsKKyAgICAgICAgU3RhY2tCb3VuZHMgYm91bmRzOworICAgICAgICBib3VuZHMuaW5pdGlh
bGl6ZSgpOworICAgICAgICBib3VuZHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1
cm4gYm91bmRzOworICAgIH0KKworICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9vcmlnaW4pOworICAgICAgICByZXR1cm4gbV9vcmlnaW47CisgICAgfQor
CisgICAgdm9pZCogY3VycmVudCgpIGNvbnN0CisgICAgeworICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIHZvaWQqIGN1cnJlbnRQb3NpdGlvbiA9ICZjdXJyZW50UG9zaXRpb247
CisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgfQorCisgICAgdm9pZCogcmVj
dXJzaW9uTGltaXQoc2l6ZV90IG1pbkF2YWlsYWJsZURlbHRhID0gc19kZWZhdWx0QXZhaWxhYmls
aXR5RGVsdGEpIGNvbnN0CisgICAgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIHJldHVybiBpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IHN0YXRpY19jYXN0
PGNoYXIqPihtX2JvdW5kKSArIG1pbkF2YWlsYWJsZURlbHRhCisgICAgICAgICAgICA6IHN0YXRp
Y19jYXN0PGNoYXIqPihtX2JvdW5kKSAtIG1pbkF2YWlsYWJsZURlbHRhOworICAgIH0KKworICAg
IGJvb2wgcmVjdXJzaW9uQ2hlY2soc2l6ZV90IG1pbkF2YWlsYWJsZURlbHRhID0gc19kZWZhdWx0
QXZhaWxhYmlsaXR5RGVsdGEpIGNvbnN0CisgICAgeworICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgICAgIHJldHVybiBpc0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IGN1
cnJlbnQoKSA+PSByZWN1cnNpb25MaW1pdChtaW5BdmFpbGFibGVEZWx0YSkKKyAgICAgICAgICAg
IDogY3VycmVudCgpIDw9IHJlY3Vyc2lvbkxpbWl0KG1pbkF2YWlsYWJsZURlbHRhKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKCk7CisKKworICAgIGJvb2wgaXNHcm93
aW5nRG93bndhcmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luICYmIG1f
Ym91bmQpOworI2lmIE9TKFdJTkNFKQorICAgICAgICByZXR1cm4gbV9vcmlnaW4gPiBtX2JvdW5k
OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIHZvaWQqIGN1cnJlbnRQb3NpdGlvbiA9ICZjdXJyZW50UG9zaXRpb247CisgICAgICAg
IEFTU0VSVChtX29yaWdpbiAhPSBtX2JvdW5kKTsKKyAgICAgICAgQVNTRVJUKGlzR3Jvd2luZ0Rv
d253YXJkKCkKKyAgICAgICAgICAgID8gKGN1cnJlbnRQb3NpdGlvbiA8IG1fb3JpZ2luICYmIGN1
cnJlbnRQb3NpdGlvbiA+IG1fYm91bmQpCisgICAgICAgICAgICA6IChjdXJyZW50UG9zaXRpb24g
PiBtX29yaWdpbiAmJiBjdXJyZW50UG9zaXRpb24gPCBtX2JvdW5kKSk7CisjZW5kaWYKKyAgICB9
CisKKyAgICB2b2lkKiBtX29yaWdpbjsKKyAgICB2b2lkKiBtX2JvdW5kOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U3RhY2tCb3VuZHM7CisKKyNlbmRpZiAvKiBTdGFj
a0JvdW5kc19oICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgU3RhY2tCb3VuZHNfaAorI2RlZmlu
ZSBTdGFja0JvdW5kc19oCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBTdGFja0JvdW5kcyB7
CisgICAgLy8gcmVjdXJzaW9uQ2hlY2soKSAvIHJlY3Vyc2lvbkxpbWl0KCkgdGVzdHMgKGJ5IGRl
ZmF1bHQpCisgICAgLy8gdGhhdCB3ZSBhcmUgYXQgbGVhc3QgdGhpcyBmYXIgZnJvbSB0aGUgZW5k
IG9mIHRoZSBzdGFjay4KKyAgICBjb25zdCBzdGF0aWMgc2l6ZV90IHNfZGVmYXVsdEF2YWlsYWJp
bGl0eURlbHRhID0gNDA5NjsKKworcHVibGljOgorICAgIFN0YWNrQm91bmRzKCkKKyAgICAgICAg
OiBtX29yaWdpbigwKQorICAgICAgICAsIG1fYm91bmQoMCkKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIFN0YWNrQm91bmRzIGN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygpCisgICAgeworICAg
ICAgICBTdGFja0JvdW5kcyBib3VuZHM7CisgICAgICAgIGJvdW5kcy5pbml0aWFsaXplKCk7Cisg
ICAgICAgIGJvdW5kcy5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHJldHVybiBib3VuZHM7
CisgICAgfQorCisgICAgdm9pZCogb3JpZ2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29yaWdpbik7CisgICAgICAgIHJldHVybiBtX29yaWdpbjsKKyAgICB9CisKKyAgICB2b2lk
KiBjdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgdm9pZCogY3VycmVudFBvc2l0aW9uID0gJmN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAg
cmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICB9CisKKyAgICB2b2lkKiByZWN1cnNpb25MaW1p
dChzaXplX3QgbWluQXZhaWxhYmxlRGVsdGEgPSBzX2RlZmF1bHRBdmFpbGFiaWxpdHlEZWx0YSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJu
IGlzR3Jvd2luZ0Rvd253YXJkKCkKKyAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8Y2hhcio+KG1f
Ym91bmQpICsgbWluQXZhaWxhYmxlRGVsdGEKKyAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8Y2hh
cio+KG1fYm91bmQpIC0gbWluQXZhaWxhYmxlRGVsdGE7CisgICAgfQorCisgICAgYm9vbCByZWN1
cnNpb25DaGVjayhzaXplX3QgbWluQXZhaWxhYmxlRGVsdGEgPSBzX2RlZmF1bHRBdmFpbGFiaWxp
dHlEZWx0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgcmV0dXJuIGlzR3Jvd2luZ0Rvd253YXJkKCkKKyAgICAgICAgICAgID8gY3VycmVudCgpID49
IHJlY3Vyc2lvbkxpbWl0KG1pbkF2YWlsYWJsZURlbHRhKQorICAgICAgICAgICAgOiBjdXJyZW50
KCkgPD0gcmVjdXJzaW9uTGltaXQobWluQXZhaWxhYmxlRGVsdGEpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworCisgICAgYm9vbCBpc0dyb3dpbmdEb3dud2Fy
ZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9vcmlnaW4gJiYgbV9ib3VuZCk7Cisj
aWYgT1MoV0lOQ0UpCisgICAgICAgIHJldHVybiBtX29yaWdpbiA+IG1fYm91bmQ7CisjZWxzZQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeSgpIGNvbnN0CisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgdm9p
ZCogY3VycmVudFBvc2l0aW9uID0gJmN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgQVNTRVJUKG1f
b3JpZ2luICE9IG1fYm91bmQpOworICAgICAgICBBU1NFUlQoaXNHcm93aW5nRG93bndhcmQoKQor
ICAgICAgICAgICAgPyAoY3VycmVudFBvc2l0aW9uIDwgbV9vcmlnaW4gJiYgY3VycmVudFBvc2l0
aW9uID4gbV9ib3VuZCkKKyAgICAgICAgICAgIDogKGN1cnJlbnRQb3NpdGlvbiA+IG1fb3JpZ2lu
ICYmIGN1cnJlbnRQb3NpdGlvbiA8IG1fYm91bmQpKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQqIG1fb3JpZ2luOworICAgIHZvaWQqIG1fYm91bmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpTdGFja0JvdW5kczsKKworI2VuZGlmIC8qIFN0YWNrQm91bmRzX2gg
Ki8KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0YS5jcHAJKHJldmlzaW9uIDc0MzA2
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw5ICs0Miw4IEBAIFdURlRocmVhZERhdGE6OldURlRocmVhZERhdGEoKQogICAgICwg
bV9kZWZhdWx0SWRlbnRpZmllclRhYmxlKG5ldyBKU0M6OklkZW50aWZpZXJUYWJsZSgpKQogICAg
ICwgbV9jdXJyZW50SWRlbnRpZmllclRhYmxlKG1fZGVmYXVsdElkZW50aWZpZXJUYWJsZSkKICNl
bmRpZgorICAgICwgbV9zdGFja0JvdW5kcyhTdGFja0JvdW5kczo6Y3VycmVudFRocmVhZFN0YWNr
Qm91bmRzKCkpCiB7Ci0gICAgY2hhciBzYW1wbGUgPSAwOwotICAgIG1fYXBwcm94aW1hdGVkU3Rh
Y2tTdGFydCA9ICZzYW1wbGU7CiB9CiAKIFdURlRocmVhZERhdGE6On5XVEZUaHJlYWREYXRhKCkK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERhdGEuaAkocmV2aXNpb24gNzQzMDYpCisrKyBK
YXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGFja0Jv
dW5kcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogLy8gVGhpcyB3YXMg
RU5BQkxFKFdPUktFUlMpIGluIFdlYkNvcmUsIGJ1dCB0aGlzIGlzIG5vdCBkZWZpbmVkIHdoZW4g
Y29tcGlsaW5nIEpTQy4KQEAgLTExMyw5ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlm
CiAKLSAgICBjaGFyKiBhcHByb3hpbWF0ZWRTdGFja1N0YXJ0KCkgY29uc3QKKyAgICBjb25zdCBT
dGFja0JvdW5kcyYgc3RhY2soKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXBwcm94
aW1hdGVkU3RhY2tTdGFydDsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2tCb3VuZHM7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMTM1LDcgKzEzNiw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIFdURlRo
cmVhZERhdGEmIHd0ZlRocmVhZERhdGEoKTsKICAgICBmcmllbmQgY2xhc3MgQXRvbWljU3RyaW5n
VGFibGU7CiAKLSAgICBjaGFyKiBtX2FwcHJveGltYXRlZFN0YWNrU3RhcnQ7CisgICAgU3RhY2tC
b3VuZHMgbV9zdGFja0JvdW5kczsKIH07CiAKIGlubGluZSBXVEZUaHJlYWREYXRhJiB3dGZUaHJl
YWREYXRhKCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2ICsxOSw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIHd0Zi9QYWdlQWxsb2NhdGlvbi5jcHAgXAogICAgIHd0Zi9SYW5kb21OdW1i
ZXIuY3BwIFwKICAgICB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBcCisgICAgd3RmL1N0
YWNrQm91bmRzLmNwcCBcCiAgICAgd3RmL1RocmVhZGluZ05vbmUuY3BwIFwKICAgICB3dGYvVGhy
ZWFkaW5nLmNwcCBcCiAgICAgd3RmL1R5cGVUcmFpdHMuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRH
bHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDc0MzE3KQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMTggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFj
bG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHN0YWNr
IGV4dGVudAorCisgICAgICAgIEFkZCBmb3J3YXJkaW5nIGhlYWRlciBmb3IgU3RhY2tCb3VuZHMu
aC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oOiBBZGRl
ZC4KKwogMjAxMC0xMi0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEJ1aWxkIGZpeDogQWRkZWQgYSBmb3J3YXJkaW5nIGhlYWRlci4KSW5kZXg6IEphdmFT
Y3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCShy
ZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNr
Qm91bmRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9TdGFja0JvdW5kcy5oPgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MzE3KQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0xOCAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDI2Mjc2IC0gTmVlZCBhIG1lY2hhbmlzbSB0
byBkZXRlcm1pbmUgc3RhY2sgZXh0ZW50CisKKyAgICAgICAgQWRkIGZvcndhcmRpbmcgaGVhZGVy
IGZvciBTdGFja0JvdW5kcy5oLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0
YWNrQm91bmRzLmg6IEFkZGVkLgorCiAyMDEwLTEyLTE4ICBIZWxkZXIgQ29ycmVpYSAgPGhlbGRl
ckBzZW5jaGEuY29tPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4KSW5kZXg6IFdlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3VuZHMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9TdGFja0JvdW5kc19oCisjZGVmaW5lIFdl
YkNvcmVfRldEX1N0YWNrQm91bmRzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdGFja0Jv
dW5kcy5oPgorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77029</attachid>
            <date>2010-12-20 12:47:35 -0800</date>
            <delta_ts>2011-06-18 17:39:15 -0700</delta_ts>
            <desc>Gah, fix StackBounds.h, too.</desc>
            <filename>StackBounds.3b.patch</filename>
            <type>text/plain</type>
            <size>38597</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0MzE3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTAtMTItMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20g
dG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGNs
YXNzICdTdGFja0JvdW5kcycsIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hY2hpbmUg
c3RhY2suCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGJyb2FkbHkg
YWRoZXJlcyB0byB0aGUgY3VycmVudCBpbXBsbWVudGF0aW9uIG9mCisgICAgICAgIHN0YWNrIGxp
bWl0IGNoZWNraW5nLCBhbmQgYXMgc3VjaCBkb2VzIG5vdCBzb2x2ZSB0aGUgcHJvYmxlbSBvZiBk
ZXRlcm1pbmluZyBzdGFjaworICAgICAgICBleHRlbnQsIGJ1dCBnaXZlcyB1cyBhIGNvbW1vbiBw
bGFjZSB0byBkbyBzby4KKworICAgICAgICBDdXJyZW50bHkgdHdvIG1lY2hhbmlzbSBhcmUgcHJv
dmlkZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdGFjayBvcmlnaW4gKHRoZSBwb2ludCB0aGUKKyAgICAg
ICAgc3RhY2sgaXMgZ3Jvd2luZyBhd2F5IGZyb20pLiBjdXJyZW50VGhyZWFkU3RhY2tCYXNlKCkg
aW4gQ29sbGVjdG9yIHByb3ZpZGVzIGEKKyAgICAgICAgbW9yZSBhY2N1cmF0ZSBkZXRlcm1pbmF0
aW9uIG9mIHRoZSBzdGFjayBvcmlnaW4sIHNvIHVzZSB0aGlzIHRvIGNhbGN1bGF0ZQorICAgICAg
ICBTdGFja0JvdW5kczo6bV9vcmlnaW47IFdURlRocmVhZERhdGE6OmFwcHJveGltYXRlZFN0YWNr
U3RhcnQgaXMgbGVzcyBhY2N1cmF0ZSwgYW5kCisgICAgICAgIGFzIHN1Y2ggY2FuIGJlIHJlbW92
ZWQuICBDYWNoZSB0aGUgU3RhY2tCb3VuZHMgb24gV1RGVGhyZWFkRGF0YSBzdWNoIHRoYXQgdGhl
eQorICAgICAgICBuZWVkIG9ubHkgYmUgZGV0ZXJtaW5lZCBvbmNlIHBlciB0aHJlYWQsIGFuZCBm
b3Igbm9uLUFQSSBjb250ZXh0cyBjYWNoZSB0aGlzCisgICAgICAgIGluZm9ybWF0aW9uIGluIEpT
R2xvYmFsRGF0YSwgdG8gc2F2ZSBhIHRocmVhZC1zcGVjaWZpYyBhY2Nlc3MuCisKKyAgICAgICAg
Rm9yIHRoZSB0aW1lIGJlaW5nIHJldGFpbiB0aGUgZXN0aW1hdGUgb2Ygc3RhY2sgc2l6ZSB1c2Vk
IGJ5IEpTQydzIHBhcnNlcgorICAgICAgICAoMTI4ICogc2l6ZW9mKHZvaWQqKSAqIDEwMjQpLCB3
aXRoIGEgdmlldyB0byByZXBsYWNpbmcgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlCisgICAgICAg
IGFjY3VyYXRlIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAgICAgICAqIHBhcnNlci9KU1BhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpjYW5SZWN1cnNlKToKKyAgICAgICAgKEpT
Qzo6SlNQYXJzZXI6OkpTUGFyc2VyKToKKyAgICAgICAgICAgIENoYW5nZSB0byB1c2UgU3RhY2tC
b3VuZHMuCisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDdXJyZW50VGhy
ZWFkQ29uc2VydmF0aXZlbHlJbnRlcm5hbCk6CisgICAgICAgICAgICBDaGFuZ2UgdG8gdXNlIFN0
YWNrQm91bmRzLCBjYWNoZWQgb24gSlNHbG9iYWxEYXRhLgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsRGF0YTo6c3RhY2spOgorICAgICAgICAgICAgQWRkIGEgY2FjaGVkIGNvcHkgb2YgU3RhY2tC
b3VuZHMuCisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmNwcDogQ29waWVkIGZyb20gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwLgorICAgICAgICAoV1RGOjplc3RpbWF0ZVN0
YWNrQm91bmQpOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXVEY6OmdldFN0YWNrTWF4KToKKyAgICAgICAgICAgIENvcHkgY29kZSBmcm9tIENvbGxl
Y3Rvci5jcHAgdG8gZGV0ZXJtaW5lIHN0YWNrIG9yaWdpbi4KKyAgICAgICAgKiB3dGYvU3RhY2tC
b3VuZHMuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6
CisgICAgICAgICAgICBObyBhcmd1bWVudCBjb25zdHJ1Y3RvcjsgcmV0dXJucyBhIG51bGwgU3Rh
Y2tCb3VuZHMuCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpjdXJyZW50VGhyZWFkU3RhY2tC
b3VuZHMpOgorICAgICAgICAgICAgUmV0dXJucyBhIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIHN0YWNrIGxpbWl0cworICAgICAgICAgICAgb2YgdGhlIGN1cnJlbnQgdGhyZWFk
LgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6b3JpZ2luKToKKyAgICAgICAgICAgIFJldHVy
bnMgdG8gc3RhY2sgb3JpZ2luICh0aGUgcG9pbnQgdGhlIHN0YWNrIGlzIGdyb3dpbmcgYXdheQor
ICAgICAgICAgICAgZnJvbTsgdGhlIGhpZ2hlc3QgZXh0ZW50IG9mIHRoZSBzdGFjayBvbiBtYWNo
aW5lcyB3aGVyZSB0aGUKKyAgICAgICAgICAgIHN0YWNrIGdyb3dzIGRvd253YXJkcy4KKyAgICAg
ICAgKFdURjo6U3RhY2tCb3VuZHM6OnJlY3Vyc2lvbkxpbWl0KToKKyAgICAgICAgICAgIFJldHVy
bnMgYSBsaW1pdCB2YWx1ZSB0aGF0IGlzICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZyb20KKyAg
ICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhpcyBpcyBj
dXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93ZXZlciB0
aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBmdXR1cmUs
IGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhOworICAgICAg
ICAgICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIFN0YWNrQm91bmRzIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlCisgICAgICAgICAgICBzdGFjayBvZiB0aGUgdGhyZWFkIHRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBvbiAoY2hlY2tlZCBieQorICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSkuCisg
ICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpyZWN1cnNpb25DaGVjayk6CisgICAgICAgICAgICBD
aGVja3Mgd2hldGhlciB3ZSBhcmUgY3VycmVudGx5ICdhIGNvbWZvcnRhYmxlIGRpc3RhbmNlIGZy
b20KKyAgICAgICAgICAgIHRoZSBlbmQgb2YgdGhlIHN0YWNrJy4gT3VyIGNvbmNlcHQgb2YgdGhp
cyBpcyBjdXJyZW50bHkgMSBwYWdlCisgICAgICAgICAgICBhd2F5IGZyb20gdGhlIGVuZCwgaG93
ZXZlciB0aGUgZGVmYXVsdCB2YWx1ZSBtYXkgYmUgdHVuZWQgaW4KKyAgICAgICAgICAgIHRoZSBm
dXR1cmUsIGFuZCBjbGllbnRzIG1heSBvdmVycmlkZSBwYXNzaW5nIGEgbGFyZ2VyIGRlbHRhCisg
ICAgICAgICAgICB0byBhcHBseSB3aGVuIGNoZWNraW5nLCBpZiB0aGV5IHdpc2ggdG8gZG8gc28u
IFRoaXMgbWV0aG9kCisgICAgICAgICAgICBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gU3RhY2tC
b3VuZHMgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUKKyAgICAgICAgICAgIHN0YWNrIG9mIHRoZSB0
aHJlYWQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIChjaGVja2VkIGJ5CisgICAgICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KS4KKyAgICAgICAgKFdURjo6U3RhY2tCb3VuZHM6OmN1cnJlbnQpOgor
ICAgICAgICAgICAgQXBwcm94aW1hdGUgY3VycmVudCBzdGFjayBwb3NpdGlvbi4gT24gbWFjaGlu
ZXMgd2hlcmUgdGhlIHN0YWNrCisgICAgICAgICAgICBpcyBncm93aW5nIGRvd253YXJkcyB0aGlz
IGlzIHRoZSBsb3dlc3QgYWRkcmVzcyB0aGF0IG1pZ2h0IG5lZWQKKyAgICAgICAgICAgIGNvbnNl
cnZhdGl2ZSBjb2xsZWN0aW9uLgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aXNHcm93aW5n
RG93bndhcmQpOgorICAgICAgICAgICAgVHJ1ZSBmb3IgYWxsIHBsYXRmb3JtcyBvdGhlciB0aGFu
IFdJTkNFLCB3aGljaCBoYXMgdG8gY2hlY2suCisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGluIG1ldGhvZHMg
dGhhdCBzaG91bGRzIG9ubHkgYmUgb3BlcmF0aW5nIG9uIGEKKyAgICAgICAgICAgIHZhbGlkIHNl
dCBvZiBib3VuZHM7IGFzIHN1Y2ggd2UgZXhwZWN0IG1fb3JpZ2luICE9IG1fYm91bmRzCisgICAg
ICAgICAgICAoaS5lLiBzdGFjayBzaXplICE9IHplcm8pIC0gd2UncmUgcmVhbGx5IHRlc3Rpbmcg
dGhhdCB0aGlzCisgICAgICAgICAgICBvYmplY3QgaXMgbm90IG51bGwgKHRoZSBjb25zdHJ1Y3Rv
ciBpbml0aWFsaXplcyBib3RoIGZpZWxkcworICAgICAgICAgICAgdG8gemVybykuICBBbHNvIGNo
ZWNrcyB0aGF0IGN1cnJlbnQoKSBpcyB3aXRoaW4gdGhlIHN0YWNrJ3MKKyAgICAgICAgICAgIGJv
dW5kcy4KKyAgICAgICAgKiB3dGYvV1RGVGhyZWFkRGF0YS5jcHA6CisgICAgICAgIChXVEY6OldU
RlRocmVhZERhdGE6OldURlRocmVhZERhdGEpOgorICAgICAgICAqIHd0Zi9XVEZUaHJlYWREYXRh
Lmg6CisgICAgICAgIChXVEY6OldURlRocmVhZERhdGE6OnN0YWNrKToKKyAgICAgICAgICAgIEFk
ZCB0aGUgU3RhY2tCb3VuZHMgbWVtYmVyIHZhcmlhYmxlLgorCiAyMDEwLTEyLTE3ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRD
b3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gXAogCWppdC9QYWdlQWxsb2NhdGlvbi5jcHBcCiAJd3RmL1JhbmRvbU51bWJl
ci5jcHAgXAogCXd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKKyAgICB3dGYvU3RhY2tC
b3VuZHMuY3BwIFwKIAl3dGYvVENTeXN0ZW1BbGxvYy5jcHAgXAogCXd0Zi9UaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmNwcCBcCiAJd3RmL1RocmVhZGluZy5jcHAgXApJbmRleDogSmF2YVNj
cmlwdENvcmUvQW5kcm9pZC52OC53dGYubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
QW5kcm9pZC52OC53dGYubWsJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvQW5k
cm9pZC52OC53dGYubWsJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9IFwKIAl3dGYvTWFpblRocmVhZC5jcHAgXAogCXd0Zi9SYW5kb21OdW1iZXIuY3Bw
IFwKIAl3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBcCisgICAgd3RmL1N0YWNrQm91bmRz
LmNwcCBcCiAJd3RmL1RDU3lzdGVtQWxsb2MuY3BwIFwKIAl3dGYvVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5jcHAgXAogCXd0Zi9UaHJlYWRpbmcuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL1JldGFpblB0ci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVj
dG9yLmggXAorICAgIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAgXAorICAgIEph
dmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvU3Rh
dGljQ29uc3RydWN0b3JzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaCBc
CiAJSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0V4dHJhcy5oIFwKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNiArNDI0LDggQEAKICAgICAg
ICAgICAgICd3dGYvUmV0YWluUHRyLmgnLAogICAgICAgICAgICAgJ3d0Zi9TZWdtZW50ZWRWZWN0
b3IuaCcsCiAgICAgICAgICAgICAnd3RmL1NpemVMaW1pdHMuY3BwJywKKyAgICAgICAgICAgICd3
dGYvU3RhY2tCb3VuZHMuY3BwJywKKyAgICAgICAgICAgICd3dGYvU3RhY2tCb3VuZHMuaCcsCiAg
ICAgICAgICAgICAnd3RmL1N0YXRpY0NvbnN0cnVjdG9ycy5oJywKICAgICAgICAgICAgICd3dGYv
U3RkTGliRXh0cmFzLmgnLAogICAgICAgICAgICAgJ3d0Zi9TdHJpbmdFeHRyYXMuaCcsCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYu
dmNwcm9qCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzc3LDYgKzc3NywxNCBA
QAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxT
dGFja0JvdW5kcy5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cd3RmXFN0YWNrQm91bmRzLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFN0YXRpY0NvbnN0cnVjdG9ycy5oIgogCQkJPgogCQk8
L0ZpbGU+CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjUxLDYgKzI1MSw4IEBACiAJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBN
YWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmgg
Ki87IH07CiAJCTg2RDNCM0MzMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMTEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovOyB9OwogCQk4NkQzQjNDNDEwMTU5RDdGMDAyODY1
RTcgLyogUmVwYXRjaEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAq
LzsgfTsKKwkJODZEODdEQUUxMkJDQTdEMTAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDg3REE1MTJCQzRC
MTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgKi87IH07CisJCTg2RDg3RERCMTJCQ0FGOTQw
MDhFNzNBMSAvKiBTdGFja0JvdW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZEODdEQTYxMkJDNEIxNDAwOEU3M0ExIC8qIFN0YWNrQm91bmRzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZEQjY0
NjQwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkRCNjQ2MzBG
OTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLzsg
fTsKIAkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFMTE2QjAwRkU3NUFDODAw
QjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oICovOyB9OwogCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1
MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggKi87IH07CkBAIC04NjcsNiArODY5LDggQEAKIAkJODZEM0IyQzIxMDE1NkJERTAwMjg2NUU3
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyQVJNLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDNC
M0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpbmtCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZEM0IzQzIxMDE1OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4NkQ4N0RBNTEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tCb3VuZHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkQ4N0RBNjEyQkM0QjE0MDA4RTczQTEgLyogU3Rh
Y2tCb3VuZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tCb3VuZHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIx
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyog
Q29kZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVMb2Nh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkU4NTUzODExMUI5OTY4MDAx
QUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1
NSw2ICsxNTU5LDggQEAKIAkJCQk1MUY2NDhENjBCQjRFMkNBMDAzM0Q3NjAgLyogUmV0YWluUHRy
LmggKi8sCiAJCQkJOTY5QTA3MjkwRUQxQ0U2OTAwRjFGNjgxIC8qIFNlZ21lbnRlZFZlY3Rvci5o
ICovLAogCQkJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLywK
KwkJCQk4NkQ4N0RBNTEyQkM0QjE0MDA4RTczQTEgLyogU3RhY2tCb3VuZHMuY3BwICovLAorCQkJ
CTg2RDg3REE2MTJCQzRCMTQwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5oICovLAogCQkJCTg2OEJG
QTVGMTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAqLywKIAkJCQlGRTFC
NDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggKi8sCiAJCQkJRTExRDUxNzUw
QjJFNzk4RDAwNTZDMTg4IC8qIFN0cmluZ0V4dHJhcy5oICovLApAQCAtMjI5Miw2ICsyMjk4LDcg
QEAKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6
ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZEODdEREIxMkJDQUY5NDAwOEU3M0Ex
IC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjhCRkE2MDExN0QwNDgyMDBC
OTA4QjEgLyogU3RhdGljQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTFCNDQ3
QTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkI5OUFFMzExN0U1NzgxMDBERjVBOTAgLyogU3RyaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTI0NTcsNyArMjQ2NCw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDE0OUMyNzcxMDg5MDJBRkUwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkphdmFTY3JpcHRDb3JlIiAqLzsKIAkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVu
Z2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9
ICgKIAkJCQlFbmdsaXNoLApAQCAtMjc5Myw2ICsyNzk5LDcgQEAKIAkJCQkxNDQ2OURFQTEwN0VD
N0U3MDA2NTA0NDYgLyogU2NvcGVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTg2RDg3REFFMTJCQ0E3RDEwMDhFNzNBMSAvKiBTdGFja0JvdW5kcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4QkZBMEUxMTdDRUZEMTAwQjkwOEIxIC8qIFN0
cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUwNDQ2
IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3BhcnNlci9KU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0pTUGFyc2VyLmNwcAkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
SlNQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw5ICs2NSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiBDT01QSUxFX0FTU0VSVChMYXN0VW50YWdnZWRUb2tlbiA8IDY0LCBMZXNzVGhhbjY0
VW50YWdnZWRUb2tlbnMpOwogCi0vLyBUaGlzIG1hdGNoZXMgdjgKLXN0YXRpYyBjb25zdCBwdHJk
aWZmX3Qga01heFBhcnNlclN0YWNrVXNhZ2UgPSAxMjggKiBzaXplb2Yodm9pZCopICogMTAyNDsK
LQogY2xhc3MgSlNQYXJzZXIgewogcHVibGljOgogICAgIEpTUGFyc2VyKExleGVyKiwgSlNHbG9i
YWxEYXRhKiwgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCBpc1N0cmljdENvbnRleHQsIGJvb2wg
aXNGdW5jdGlvbiwgU291cmNlUHJvdmlkZXIqKTsKQEAgLTE5Myw5ICsxOTAsNyBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBjYW5SZWN1cnNlKCkKICAgICB7Ci0gICAgICAgIGNoYXIgc2FtcGxlID0g
MDsKLSAgICAgICAgQVNTRVJUKG1fZW5kQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiAmc2FtcGxl
ID4gbV9lbmRBZGRyZXNzOworICAgICAgICByZXR1cm4gbV9zdGFjay5yZWN1cnNpb25DaGVjaygp
OwogICAgIH0KICAgICAKICAgICBpbnQgbGFzdFRva2VuRW5kKCkgY29uc3QKQEAgLTIwNSw3ICsy
MDAsNyBAQCBwcml2YXRlOgogCiAgICAgUGFyc2VyQXJlbmEgbV9hcmVuYTsKICAgICBMZXhlciog
bV9sZXhlcjsKLSAgICBjaGFyKiBtX2VuZEFkZHJlc3M7CisgICAgU3RhY2tCb3VuZHMgbV9zdGFj
azsKICAgICBib29sIG1fZXJyb3I7CiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAg
ICAgSlNUb2tlbiBtX3Rva2VuOwpAQCAtNDkxLDcgKzQ4Niw3IEBAIGludCBqc1BhcnNlKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIAogSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhl
ciwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBib29sIGlzRnVuY3Rpb24sIFNvdXJjZVByb3ZpZGVy
KiBwcm92aWRlcikKICAgICA6IG1fbGV4ZXIobGV4ZXIpCi0gICAgLCBtX2VuZEFkZHJlc3MoMCkK
KyAgICAsIG1fc3RhY2soZ2xvYmFsRGF0YS0+c3RhY2soKSkKICAgICAsIG1fZXJyb3IoZmFsc2Up
CiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAsIG1fYWxsb3dzSW4odHJ1ZSkK
QEAgLTUwNSw3ICs1MDAsNiBAQCBKU1BhcnNlcjo6SlNQYXJzZXIoTGV4ZXIqIGxleGVyLCBKU0ds
b2JhCiAgICAgLCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQoMCkKICAgICAsIG1fbGFzdElk
ZW50aWZpZXIoMCkKIHsKLSAgICBtX2VuZEFkZHJlc3MgPSB3dGZUaHJlYWREYXRhKCkuYXBwcm94
aW1hdGVkU3RhY2tTdGFydCgpIC0ga01heFBhcnNlclN0YWNrVXNhZ2U7CiAgICAgU2NvcGVSZWYg
c2NvcGUgPSBwdXNoU2NvcGUoKTsKICAgICBpZiAoaXNGdW5jdGlvbikKICAgICAgICAgc2NvcGUt
PnNldElzRnVuY3Rpb24oKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJ
KHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODksMTc1ICszODksNiBAQCB2b2lkIEhlYXA6OnNocmlua0Js
b2NrcyhzaXplX3QgbmVlZGVkQmxvCiAgICAgICAgIG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+
bWFya2VkLnNldChIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiB9CiAKLSNpZiBP
UyhXSU5DRSkKLUpTX0VYUE9SVERBVEEgdm9pZCogZ19zdGFja0Jhc2UgPSAwOwotCi1pbmxpbmUg
Ym9vbCBpc1BhZ2VXcml0YWJsZSh2b2lkKiBwYWdlKQotewotICAgIE1FTU9SWV9CQVNJQ19JTkZP
Uk1BVElPTiBtZW1vcnlJbmZvcm1hdGlvbjsKLSAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVl
cnkocGFnZSwgJm1lbW9yeUluZm9ybWF0aW9uLCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsK
LQotICAgIC8vIHJldHVybiBmYWxzZSBvbiBlcnJvciwgaW5jbHVkaW5nIHB0ciBvdXRzaWRlIG1l
bW9yeQotICAgIGlmIChyZXN1bHQgIT0gc2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRFdPUkQgcHJvdGVjdCA9IG1lbW9yeUluZm9ybWF0aW9u
LlByb3RlY3QgJiB+KFBBR0VfR1VBUkQgfCBQQUdFX05PQ0FDSEUpOwotICAgIHJldHVybiBwcm90
ZWN0ID09IFBBR0VfUkVBRFdSSVRFCi0gICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9XUklURUNP
UFkKLSAgICAgICAgfHwgcHJvdGVjdCA9PSBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFCi0gICAgICAg
IHx8IHByb3RlY3QgPT0gUEFHRV9FWEVDVVRFX1dSSVRFQ09QWTsKLX0KLQotc3RhdGljIHZvaWQq
IGdldFN0YWNrQmFzZSh2b2lkKiBwcmV2aW91c0ZyYW1lKQotewotICAgIC8vIGZpbmQgdGhlIGFk
ZHJlc3Mgb2YgdGhpcyBzdGFjayBmcmFtZSBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsb2Nh
bCB2YXJpYWJsZQotICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQ7Ci0gICAgdm9pZCogdGhpc0Zy
YW1lID0gKHZvaWQqKSgmaXNHcm93aW5nRG93bndhcmQpOwotCi0gICAgaXNHcm93aW5nRG93bndh
cmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKLSAgICBzdGF0aWMgRFdPUkQgcGFnZVNp
emUgPSAwOwotICAgIGlmICghcGFnZVNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVt
SW5mbzsKLSAgICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Ci0gICAgICAgIHBhZ2VT
aXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOwotICAgIH0KLQotICAgIC8vIHNjYW4gYWxsIG9m
IG1lbW9yeSBzdGFydGluZyBmcm9tIHRoaXMgZnJhbWUsIGFuZCByZXR1cm4gdGhlIGxhc3Qgd3Jp
dGVhYmxlIHBhZ2UgZm91bmQKLSAgICByZWdpc3RlciBjaGFyKiBjdXJyZW50UGFnZSA9IChjaGFy
KikoKERXT1JEKXRoaXNGcmFtZSAmIH4ocGFnZVNpemUgLSAxKSk7Ci0gICAgaWYgKGlzR3Jvd2lu
Z0Rvd253YXJkKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50UGFnZSA+IDApIHsKLSAgICAgICAg
ICAgIC8vIGNoZWNrIGZvciB1bmRlcmZsb3cKLSAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+
PSAoY2hhciopcGFnZVNpemUpCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgLT0gcGFnZVNp
emU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAwOwot
ICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlICsgcGFnZVNpemU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgIC8vIGd1YXJhbnRlZWQgdG8gY29tcGxldGUgYmVjYXVzZSBpc1BhZ2VXcml0YWJsZSByZXR1
cm5zIGZhbHNlIGF0IGVuZCBvZiBtZW1vcnkKLSAgICAgICAgICAgIGN1cnJlbnRQYWdlICs9IHBh
Z2VTaXplOwotICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQYWdlOwotICAgICAgICB9Ci0gICAgfQotfQot
I2VuZGlmCi0KLSNpZiBPUyhRTlgpCi1zdGF0aWMgaW5saW5lIHZvaWQgKmN1cnJlbnRUaHJlYWRT
dGFja0Jhc2VRTlgoKQotewotICAgIHN0YXRpYyB2b2lkKiBzdGFja0Jhc2UgPSAwOwotICAgIHN0
YXRpYyBzaXplX3Qgc3RhY2tTaXplID0gMDsKLSAgICBzdGF0aWMgcHRocmVhZF90IHN0YWNrVGhy
ZWFkOwotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBpZiAoc3Rh
Y2tCYXNlID09IDAgfHwgdGhyZWFkICE9IHN0YWNrVGhyZWFkKSB7Ci0gICAgICAgIHN0cnVjdCBf
ZGVidWdfdGhyZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICAgICAgbWVtc2V0KCZ0aHJlYWRJbmZv
LCAwLCBzaXplb2YodGhyZWFkSW5mbykpOwotICAgICAgICB0aHJlYWRJbmZvLnRpZCA9IHB0aHJl
YWRfc2VsZigpOwotICAgICAgICBpbnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkp
OwotICAgICAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIG9wZW4gL3Byb2Mvc2VsZiAoZXJybm86ICVkKSIsIGVycm5vKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGRldmN0bChmZCwgRENNRF9QUk9DX1RJRFNUQVRV
UywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Ci0gICAgICAgIGNsb3NlKGZk
KTsKLSAgICAgICAgc3RhY2tCYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odGhyZWFkSW5m
by5zdGtiYXNlKTsKLSAgICAgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXplOwotICAg
ICAgICBBU1NFUlQoc3RhY2tCYXNlKTsKLSAgICAgICAgc3RhY2tUaHJlYWQgPSB0aHJlYWQ7Ci0g
ICAgfQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6
ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQqIGN1cnJlbnRUaHJlYWRTdGFja0Jh
c2UoKQotewotI2lmIE9TKERBUldJTikKLSAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9z
ZWxmKCk7Ci0gICAgcmV0dXJuIHB0aHJlYWRfZ2V0X3N0YWNrYWRkcl9ucCh0aHJlYWQpOwotI2Vs
aWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4NikgJiYgQ09NUElMRVIoTVNWQykKLSAgICAvLyBvZmZz
ZXQgMHgxOCBmcm9tIHRoZSBGUyBzZWdtZW50IHJlZ2lzdGVyIGdpdmVzIGEgcG9pbnRlciB0bwot
ICAgIC8vIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gYmxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVh
ZAotICAgIE5UX1RJQiogcFRpYjsKLSAgICBfX2FzbSB7Ci0gICAgICAgIE1PViBFQVgsIEZTOlsx
OGhdCi0gICAgICAgIE1PViBwVGliLCBFQVgKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwotI2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nikg
JiYgQ09NUElMRVIoR0NDKQotICAgIC8vIG9mZnNldCAweDE4IGZyb20gdGhlIEZTIHNlZ21lbnQg
cmVnaXN0ZXIgZ2l2ZXMgYSBwb2ludGVyIHRvCi0gICAgLy8gdGhlIHRocmVhZCBpbmZvcm1hdGlv
biBibG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkCi0gICAgTlRfVElCKiBwVGliOwotICAgIGFz
bSAoICJtb3ZsICUlZnM6MHgxOCwgJTBcbiIKLSAgICAgICAgICA6ICI9ciIgKHBUaWIpCi0gICAg
ICAgICk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwot
I2VsaWYgT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKLSAgICBQTlRfVElCNjQgcFRpYiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBUaWItPlN0YWNrQmFzZSk7Ci0jZWxpZiBPUyhRTlgpCi0g
ICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4JiwgbXV0ZXggPSAqbmV3IE11dGV4
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobXV0ZXgpOwotICAgIHJldHVybiBjdXJyZW50VGhy
ZWFkU3RhY2tCYXNlUU5YKCk7Ci0jZWxpZiBPUyhTT0xBUklTKQotICAgIHN0YWNrX3QgczsKLSAg
ICB0aHJfc3Rrc2VnbWVudCgmcyk7Ci0gICAgcmV0dXJuIHMuc3Nfc3A7Ci0jZWxpZiBPUyhPUEVO
QlNEKQotICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICBzdGFja190
IHN0YWNrOwotICAgIHB0aHJlYWRfc3RhY2tzZWdfbnAodGhyZWFkLCAmc3RhY2spOwotICAgIHJl
dHVybiBzdGFjay5zc19zcDsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgVFRocmVhZFN0YWNrSW5m
byBpbmZvOwotICAgIFJUaHJlYWQgdGhyZWFkOwotICAgIHRocmVhZC5TdGFja0luZm8oaW5mbyk7
Ci0gICAgcmV0dXJuICh2b2lkKilpbmZvLmlCYXNlOwotI2VsaWYgT1MoSEFJS1UpCi0gICAgdGhy
ZWFkX2luZm8gdGhyZWFkSW5mbzsKLSAgICBnZXRfdGhyZWFkX2luZm8oZmluZF90aHJlYWQoTlVM
TCksICZ0aHJlYWRJbmZvKTsKLSAgICByZXR1cm4gdGhyZWFkSW5mby5zdGFja19lbmQ7Ci0jZWxp
ZiBPUyhVTklYKQotICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4
ID0gKm5ldyBNdXRleCk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG11dGV4KTsKLSAgICBzdGF0
aWMgdm9pZCogc3RhY2tCYXNlID0gMDsKLSAgICBzdGF0aWMgc2l6ZV90IHN0YWNrU2l6ZSA9IDA7
Ci0gICAgc3RhdGljIHB0aHJlYWRfdCBzdGFja1RocmVhZDsKLSAgICBwdGhyZWFkX3QgdGhyZWFk
ID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgaWYgKHN0YWNrQmFzZSA9PSAwIHx8IHRocmVhZCAhPSBz
dGFja1RocmVhZCkgewotICAgICAgICBwdGhyZWFkX2F0dHJfdCBzYXR0cjsKLSAgICAgICAgcHRo
cmVhZF9hdHRyX2luaXQoJnNhdHRyKTsKLSNpZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVU
QlNEKQotICAgICAgICAvLyBlLmcuIG9uIEZyZWVCU0QgNS40LCBuZXVuZG9yZkBrZGUub3JnCi0g
ICAgICAgIHB0aHJlYWRfYXR0cl9nZXRfbnAodGhyZWFkLCAmc2F0dHIpOwotI2Vsc2UKLSAgICAg
ICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRhYmxlOyBvdGhlciBQT1NJWCBz
eXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2ZXMKLSAgICAgICAgcHRocmVh
ZF9nZXRhdHRyX25wKHRocmVhZCwgJnNhdHRyKTsKLSNlbmRpZgotICAgICAgICBpbnQgcmMgPSBw
dGhyZWFkX2F0dHJfZ2V0c3RhY2soJnNhdHRyLCAmc3RhY2tCYXNlLCAmc3RhY2tTaXplKTsKLSAg
ICAgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBT
ZWVtcyBmYXRhbC4KLSAgICAgICAgQVNTRVJUKHN0YWNrQmFzZSk7Ci0gICAgICAgIHB0aHJlYWRf
YXR0cl9kZXN0cm95KCZzYXR0cik7Ci0gICAgICAgIHN0YWNrVGhyZWFkID0gdGhyZWFkOwotICAg
IH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7
Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICBBdG9taWNhbGx5SW5pdGlhbGl6ZWRTdGF0aWMoTXV0ZXgm
LCBtdXRleCA9ICpuZXcgTXV0ZXgpOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7Ci0g
ICAgaWYgKGdfc3RhY2tCYXNlKQotICAgICAgICByZXR1cm4gZ19zdGFja0Jhc2U7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGludCBkdW1teTsKLSAgICAgICAgcmV0dXJuIGdldFN0YWNrQmFzZSgmZHVt
bXkpOwotICAgIH0KLSNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0YWNrIGJh
c2Ugb24gdGhpcyBwbGF0Zm9ybQotI2VuZGlmCi19Ci0KICNpZiBFTkFCTEUoSlNDX01VTFRJUExF
X1RIUkVBRFMpCiAKIHN0YXRpYyBpbmxpbmUgUGxhdGZvcm1UaHJlYWQgZ2V0Q3VycmVudFBsYXRm
b3JtVGhyZWFkKCkKQEAgLTU4Nyw3ICs0MTgsNyBAQCB2b2lkIEhlYXA6OnJlZ2lzdGVyVGhyZWFk
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhtX2N1cnJlbnRU
aHJlYWRSZWdpc3RyYXIsIHRoaXMpOwotICAgIEhlYXA6OlRocmVhZCogdGhyZWFkID0gbmV3IEhl
YXA6OlRocmVhZChwdGhyZWFkX3NlbGYoKSwgZ2V0Q3VycmVudFBsYXRmb3JtVGhyZWFkKCksIGN1
cnJlbnRUaHJlYWRTdGFja0Jhc2UoKSk7CisgICAgSGVhcDo6VGhyZWFkKiB0aHJlYWQgPSBuZXcg
SGVhcDo6VGhyZWFkKHB0aHJlYWRfc2VsZigpLCBnZXRDdXJyZW50UGxhdGZvcm1UaHJlYWQoKSwg
bV9nbG9iYWxEYXRhLT5zdGFjaygpLm9yaWdpbigpKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2so
bV9yZWdpc3RlcmVkVGhyZWFkc011dGV4KTsKIApAQCAtNjU0LDExICs0ODUsMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzUG9zc2libGVDZWxsKHZvaWQqIAogCiB2b2lkIEhlYXA6Om1hcmtDb25z
ZXJ2YXRpdmVseShNYXJrU3RhY2smIG1hcmtTdGFjaywgdm9pZCogc3RhcnQsIHZvaWQqIGVuZCkK
IHsKKyNpZiBPUyhXSU5DRSkKICAgICBpZiAoc3RhcnQgPiBlbmQpIHsKICAgICAgICAgdm9pZCog
dG1wID0gc3RhcnQ7CiAgICAgICAgIHN0YXJ0ID0gZW5kOwogICAgICAgICBlbmQgPSB0bXA7CiAg
ICAgfQorI2Vsc2UKKyAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsKKyNlbmRpZgogCiAgICAgQVNT
RVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIqPihzdGFydCkp
IDwgMHgxMDAwMDAwKTsKICAgICBBU1NFUlQoaXNQb2ludGVyQWxpZ25lZChzdGFydCkpOwpAQCAt
NjkyLDEwICs1MjcsNyBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2sm
CiAKIHZvaWQgTkVWRVJfSU5MSU5FIEhlYXA6Om1hcmtDdXJyZW50VGhyZWFkQ29uc2VydmF0aXZl
bHlJbnRlcm5hbChNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKLSAgICB2b2lkKiBkdW1teTsKLSAg
ICB2b2lkKiBzdGFja1BvaW50ZXIgPSAmZHVtbXk7Ci0gICAgdm9pZCogc3RhY2tCYXNlID0gY3Vy
cmVudFRocmVhZFN0YWNrQmFzZSgpOwotICAgIG1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ss
IHN0YWNrUG9pbnRlciwgc3RhY2tCYXNlKTsKKyAgICBtYXJrQ29uc2VydmF0aXZlbHkobWFya1N0
YWNrLCBtX2dsb2JhbERhdGEtPnN0YWNrKCkuY3VycmVudCgpLCBtX2dsb2JhbERhdGEtPnN0YWNr
KCkub3JpZ2luKCkpOwogICAgIG1hcmtTdGFjay5kcmFpbigpOwogfQogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA3NDMwNikKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUz
LDYgKzE1Myw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAg
ICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQogI2VuZGlmCiB7CisgICAgaWYgKGdsb2JhbERhdGFUeXBl
ID09IERlZmF1bHQpCisgICAgICAgIG1fc3RhY2sgPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsK
KwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdGFydFByb2ZpbGVyU2VydmVySWZOZWVkZWQoKTsK
ICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lv
biA3NDMwNikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+
CisjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJ
TkcpCiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjZW5kaWYKQEAgLTE3OCw2ICsxNzks
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZWxzZQogICAgICAgICBib29sIGNhblVzZUpJVCgpIHsg
cmV0dXJuIG1fY2FuVXNlSklUOyB9CiAjZW5kaWYKKworICAgICAgICBjb25zdCBTdGFja0JvdW5k
cyYgc3RhY2soKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKGdsb2JhbERhdGFUeXBl
ID09IERlZmF1bHQpCisgICAgICAgICAgICAgICAgPyBtX3N0YWNrCisgICAgICAgICAgICAgICAg
OiB3dGZUaHJlYWREYXRhKCkuc3RhY2soKTsKKyAgICAgICAgfQorCiAgICAgICAgIExleGVyKiBs
ZXhlcjsKICAgICAgICAgUGFyc2VyKiBwYXJzZXI7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRl
cnByZXRlcjsKQEAgLTI1MCw2ICsyNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUo
SklUKSAmJiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIGJvb2wgbV9jYW5Vc2VKSVQ7CiAj
ZW5kaWYKKyAgICAgICAgU3RhY2tCb3VuZHMgbV9zdGFjazsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDc0MzA2
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05LDYgKzksNyBAQCBTRVQoV1RGX1NPVVJDRVMKICAgICBNRDUuY3BwCiAgICAgUmFuZG9tTnVt
YmVyLmNwcAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAKKyAgICBTdGFja0JvdW5kcy5j
cHAKICAgICBTdHJpbmdFeHRyYXMuY3BwCiAgICAgVGhyZWFkaW5nLmNwcAogICAgIFR5cGVUcmFp
dHMuY3BwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAJKHJldmlzaW9uIDApCisr
KyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI3MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTdGFja0JvdW5kcy5oIgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC90YXNr
Lmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisK
KyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1Mu
aD4KKworI2VsaWYgT1MoU09MQVJJUykKKworI2luY2x1ZGUgPHRocmVhZC5oPgorCisjZWxpZiBP
UyhRTlgpCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNlbGlmIE9TKFVOSVgpCisK
KyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgSEFWRShQVEhSRUFEX05QX0gpCisjaW5jbHVkZSA8
cHRocmVhZF9ucC5oPgorI2VuZGlmCisKKyNlbmRpZgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
QmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlNDIHBhcnNlciwgZ3Vlc3Mg
dGhlIHN0YWNrIHNpemUuCitzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVzdGltYXRlZFN0YWNrU2l6
ZSA9IDEyOCAqIHNpemVvZih2b2lkKikgKiAxMDI0OworCisvLyBUaGlzIG1ldGhvZCBhc3N1bWVz
IHRoZSBzdGFjayBpcyBncm93aW5nIGRvd253YXJkcy4KK3N0YXRpYyB2b2lkKiBlc3RpbWF0ZVN0
YWNrQm91bmQodm9pZCogb3JpZ2luKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4o
b3JpZ2luKSAtIGVzdGltYXRlZFN0YWNrU2l6ZTsKK30KKworI2lmIE9TKERBUldJTikKKwordm9p
ZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7CisgICAgcHRocmVhZF90IHRocmVhZCA9IHB0
aHJlYWRfc2VsZigpOworICAgIG1fb3JpZ2luID0gcHRocmVhZF9nZXRfc3RhY2thZGRyX25wKHRo
cmVhZCk7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZChtX29yaWdpbik7Cit9CisK
KyNlbGlmIE9TKFdJTkRPV1MpCisKK3ZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQorewor
I2lmIENQVShYODYpICYmIENPTVBJTEVSKE1TVkMpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0
aGUgRlMgc2VnbWVudCByZWdpc3RlciBnaXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhy
ZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIq
IHBUaWI7CisgICAgX19hc20geworICAgICAgICBNT1YgRUFYLCBGUzpbMThoXQorICAgICAgICBN
T1YgcFRpYiwgRUFYCisgICAgfQorICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHBU
aWItPlN0YWNrQmFzZSk7CisjZWxpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2KSAmJiBDT01QSUxF
UihHQ0MpCisgICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdpc3RlciBn
aXZlcyBhIHBvaW50ZXIgdG8KKyAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJsb2NrIGZv
ciB0aGUgY3VycmVudCB0aHJlYWQKKyAgICBOVF9USUIqIHBUaWI7CisgICAgYXNtICggIm1vdmwg
JSVmczoweDE4LCAlMFxuIgorICAgICAgICAgIDogIj1yIiAocFRpYikKKyAgICAgICAgKTsKKyAg
ICBtX29yaWdpbiA9IHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2VsaWYg
T1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkKKyAgICBQTlRfVElCNjQgcFRpYiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7CisgICAgbV9vcmlnaW4gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworI2Vsc2UKKyNlcnJvciBOZWVk
IGEgd2F5IHRvIGdldCB0aGUgc3RhY2sgYm91bmRzIG9uIHRoaXMgcGxhdGZvcm0gKFdpbmRvd3Mp
CisjZW5kaWYKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0JvdW5kKG1fb3JpZ2luKTsKK30K
KworI2VsaWYgT1MoUU5YKQorCit2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKK3sKKyAg
ICB2b2lkKiBzdGFja0Jhc2UgPSAwOworICAgIHNpemVfdCBzdGFja1NpemUgPSAwOworICAgIHB0
aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKKworICAgIHN0cnVjdCBfZGVidWdfdGhy
ZWFkX2luZm8gdGhyZWFkSW5mbzsKKyAgICBtZW1zZXQoJnRocmVhZEluZm8sIDAsIHNpemVvZih0
aHJlYWRJbmZvKSk7CisgICAgdGhyZWFkSW5mby50aWQgPSBwdGhyZWFkX3NlbGYoKTsKKyAgICBp
bnQgZmQgPSBvcGVuKCIvcHJvYy9zZWxmIiwgT19SRE9OTFkpOworICAgIGlmIChmZCA9PSAtMSkg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBvcGVuIC9wcm9jL3NlbGYgKGVycm5vOiAl
ZCkiLCBlcnJubyk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIGRldmN0bChmZCwgRENN
RF9QUk9DX1RJRFNUQVRVUywgJnRocmVhZEluZm8sIHNpemVvZih0aHJlYWRJbmZvKSwgMCk7Cisg
ICAgY2xvc2UoZmQpOworICAgIHN0YWNrQmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHRo
cmVhZEluZm8uc3RrYmFzZSk7CisgICAgc3RhY2tTaXplID0gdGhyZWFkSW5mby5zdGtzaXplOwor
ICAgIEFTU0VSVChzdGFja0Jhc2UpOworCisgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKKyAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0Jv
dW5kKG1fb3JpZ2luKTsKK30KKworI2VsaWYgT1MoU09MQVJJUykKKwordm9pZCBTdGFja0JvdW5k
czo6aW5pdGlhbGl6ZSgpCit7CisgICAgc3RhY2tfdCBzOworICAgIHRocl9zdGtzZWdtZW50KCZz
KTsKKyAgICBtX29yaWdpbiA9IHMuc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKE9QRU5CU0QpCisKK3ZvaWQgU3RhY2tCb3Vu
ZHM6OmluaXRpYWxpemUoKQoreworICAgIHB0aHJlYWRfdCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYo
KTsKKyAgICBzdGFja190IHN0YWNrOworICAgIHB0aHJlYWRfc3RhY2tzZWdfbnAodGhyZWFkLCAm
c3RhY2spOworICAgIG1fb3JpZ2luID0gc3RhY2suc3Nfc3A7CisgICAgbV9ib3VuZCA9IGVzdGlt
YXRlU3RhY2tCb3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFNZTUJJQU4pCisKK3ZvaWQg
U3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQoreworICAgIFRUaHJlYWRTdGFja0luZm8gaW5mbzsK
KyAgICBSVGhyZWFkIHRocmVhZDsKKyAgICB0aHJlYWQuU3RhY2tJbmZvKGluZm8pOworICAgIG1f
b3JpZ2luID0gKHZvaWQqKWluZm8uaUJhc2U7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tC
b3VuZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKEhBSUtVKQorCit2b2lkIFN0YWNrQm91bmRz
Ojppbml0aWFsaXplKCkKK3sKKyAgICB0aHJlYWRfaW5mbyB0aHJlYWRJbmZvOworICAgIGdldF90
aHJlYWRfaW5mbyhmaW5kX3RocmVhZChOVUxMKSwgJnRocmVhZEluZm8pOworICAgIG1fb3JpZ2lu
ID0gdGhyZWFkSW5mby5zdGFja19lbmQ7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3Vu
ZChtX29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFVOSVgpCisKK3ZvaWQgU3RhY2tCb3VuZHM6Omlu
aXRpYWxpemUoKQoreworICAgIHZvaWQqIHN0YWNrQmFzZSA9IDA7CisgICAgc2l6ZV90IHN0YWNr
U2l6ZSA9IDA7CisKKyAgICBwdGhyZWFkX3QgdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisgICAg
cHRocmVhZF9hdHRyX3Qgc2F0dHI7CisgICAgcHRocmVhZF9hdHRyX2luaXQoJnNhdHRyKTsKKyNp
ZiBIQVZFKFBUSFJFQURfTlBfSCkgfHwgT1MoTkVUQlNEKQorICAgIC8vIGUuZy4gb24gRnJlZUJT
RCA1LjQsIG5ldW5kb3JmQGtkZS5vcmcKKyAgICBwdGhyZWFkX2F0dHJfZ2V0X25wKHRocmVhZCwg
JnNhdHRyKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gaXMgbm9uLXBvcnRh
YmxlOyBvdGhlciBQT1NJWCBzeXN0ZW1zIG1heSBoYXZlIGRpZmZlcmVudCBucCBhbHRlcm5hdGl2
ZXMKKyAgICBwdGhyZWFkX2dldGF0dHJfbnAodGhyZWFkLCAmc2F0dHIpOworI2VuZGlmCisgICAg
aW50IHJjID0gcHRocmVhZF9hdHRyX2dldHN0YWNrKCZzYXR0ciwgJnN0YWNrQmFzZSwgJnN0YWNr
U2l6ZSk7CisgICAgKHZvaWQpcmM7IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21l
aG93PyBTZWVtcyBmYXRhbC4KKyAgICBBU1NFUlQoc3RhY2tCYXNlKTsKKyAgICBwdGhyZWFkX2F0
dHJfZGVzdHJveSgmc2F0dHIpOworICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0
YWNrQmFzZSkgKyBzdGFja1NpemU7CisgICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZCht
X29yaWdpbik7Cit9CisKKyNlbGlmIE9TKFdJTkNFKQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKy8v
IEZJWE1FOiB0aGlzIGlzIG5vdCB0aHJlYWRzYWZlLCBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIHJl
bW92ZWQuCituYW1lc3BhY2UgSlNDIHsgSlNfRVhQT1JUREFUQSB2b2lkKiBnX3N0YWNrQmFzZSA9
IDA7IH0KK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2b2lk
KiBwYWdlKQoreworICAgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlJbmZvcm1hdGlv
bjsKKyAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVlcnkocGFnZSwgJm1lbW9yeUluZm9ybWF0
aW9uLCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsKKworICAgIC8vIHJldHVybiBmYWxzZSBv
biBlcnJvciwgaW5jbHVkaW5nIHB0ciBvdXRzaWRlIG1lbW9yeQorICAgIGlmIChyZXN1bHQgIT0g
c2l6ZW9mKG1lbW9yeUluZm9ybWF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RFdPUkQgcHJvdGVjdCA9IG1lbW9yeUluZm9ybWF0aW9uLlByb3RlY3QgJiB+KFBBR0VfR1VBUkQg
fCBQQUdFX05PQ0FDSEUpOworICAgIHJldHVybiBwcm90ZWN0ID09IFBBR0VfUkVBRFdSSVRFCisg
ICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9XUklURUNPUFkKKyAgICAgICAgfHwgcHJvdGVjdCA9
PSBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFCisgICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9FWEVD
VVRFX1dSSVRFQ09QWTsKK30KKworc3RhdGljIHZvaWQqIGdldFN0YWNrTWF4KHZvaWQqIHByZXZp
b3VzRnJhbWUsIGJvb2wmIGlzR3Jvd2luZ0Rvd253YXJkKQoreworICAgIC8vIGZpbmQgdGhlIGFk
ZHJlc3Mgb2YgdGhpcyBzdGFjayBmcmFtZSBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBsb2Nh
bCB2YXJpYWJsZQorICAgIHZvaWQqIHRoaXNGcmFtZSA9ICZ0aGlzRnJhbWU7CisgICAgaXNHcm93
aW5nRG93bndhcmQgPSBwcmV2aW91c0ZyYW1lIDwgJnRoaXNGcmFtZTsKKworICAgIGlmIChKU0M6
Omdfc3RhY2tCYXNlKQorICAgICAgICByZXR1cm4gSlNDOjpnX3N0YWNrQmFzZTsKKworICAgIFNZ
U1RFTV9JTkZPIHN5c3RlbUluZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7Cisg
ICAgRFdPUkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7CisKKyAgICAvLyBzY2Fu
IGFsbCBvZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBs
YXN0IHdyaXRlYWJsZSBwYWdlIGZvdW5kCisgICAgcmVnaXN0ZXIgY2hhciogY3VycmVudFBhZ2Ug
PSAoY2hhciopKChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkpOworICAgIGlmIChp
c0dyb3dpbmdEb3dud2FyZCkgeworICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7Cisg
ICAgICAgICAgICAvLyBjaGVjayBmb3IgdW5kZXJmbG93CisgICAgICAgICAgICBpZiAoY3VycmVu
dFBhZ2UgPj0gKGNoYXIqKXBhZ2VTaXplKQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09
IHBhZ2VTaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdl
ID0gMDsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFi
bGUgcmV0dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5CisgICAgICAgICAgICBjdXJyZW50UGFn
ZSArPSBwYWdlU2l6ZTsKKyAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBh
Z2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCit7CisgICAgYm9vbCBpc0dy
b3dpbmdEb3dud2FyZAorICAgIG1fb3JpZ2luID0gZ2V0U3RhY2tNYXgoaXNHcm93aW5nRG93bndh
cmQpOworICAgIG1fYm91bmQgPSBpc0dyb3dpbmdEb3dud2FyZAorICAgICAgICA/IHN0YXRpY19j
YXN0PGNoYXIqPihtX29yaWdpbikgLSBlc3RpbWF0ZWRTdGFja1NpemUKKyAgICAgICAgOiBzdGF0
aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pICsgZXN0aW1hdGVkU3RhY2tTaXplOworfQorCisjZWxz
ZQorI2Vycm9yIE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBzdGFjayBib3VuZHMgb24gdGhpcyBwbGF0
Zm9ybQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogSmF2YVNjcmlwdENvcmUv
d3RmL1N0YWNrQm91bmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNr
Qm91bmRzLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBT
dGFja0JvdW5kc19oCisjZGVmaW5lIFN0YWNrQm91bmRzX2gKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFN0YWNrQm91bmRzIHsKKyAgICAvLyByZWN1cnNpb25DaGVjaygpIC8gcmVjdXJzaW9u
TGltaXQoKSB0ZXN0cyAoYnkgZGVmYXVsdCkKKyAgICAvLyB0aGF0IHdlIGFyZSBhdCBsZWFzdCB0
aGlzIGZhciBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0YWNrLgorICAgIGNvbnN0IHN0YXRpYyBzaXpl
X3Qgc19kZWZhdWx0QXZhaWxhYmlsaXR5RGVsdGEgPSA0MDk2OworCitwdWJsaWM6CisgICAgU3Rh
Y2tCb3VuZHMoKQorICAgICAgICA6IG1fb3JpZ2luKDApCisgICAgICAgICwgbV9ib3VuZCgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhY2tCb3VuZHMgY3VycmVudFRocmVhZFN0YWNr
Qm91bmRzKCkKKyAgICB7CisgICAgICAgIFN0YWNrQm91bmRzIGJvdW5kczsKKyAgICAgICAgYm91
bmRzLmluaXRpYWxpemUoKTsKKyAgICAgICAgYm91bmRzLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICB2b2lkKiBvcmlnaW4oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2lu
OworICAgIH0KKworICAgIHZvaWQqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVu
dFBvc2l0aW9uOworICAgICAgICByZXR1cm4gY3VycmVudFBvc2l0aW9uOworICAgIH0KKworICAg
IHZvaWQqIHJlY3Vyc2lvbkxpbWl0KHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9IHNfZGVmYXVs
dEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAgICAgICAgPyBz
dGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgKyBtaW5BdmFpbGFibGVEZWx0YQorICAgICAgICAg
ICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9ib3VuZCkgLSBtaW5BdmFpbGFibGVEZWx0YTsKKyAg
ICB9CisKKyAgICBib29sIHJlY3Vyc2lvbkNoZWNrKHNpemVfdCBtaW5BdmFpbGFibGVEZWx0YSA9
IHNfZGVmYXVsdEF2YWlsYWJpbGl0eURlbHRhKSBjb25zdAorICAgIHsKKyAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gaXNHcm93aW5nRG93bndhcmQoKQorICAgICAg
ICAgICAgPyBjdXJyZW50KCkgPj0gcmVjdXJzaW9uTGltaXQobWluQXZhaWxhYmxlRGVsdGEpCisg
ICAgICAgICAgICA6IGN1cnJlbnQoKSA8PSByZWN1cnNpb25MaW1pdChtaW5BdmFpbGFibGVEZWx0
YSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisKKyAgICBi
b29sIGlzR3Jvd2luZ0Rvd253YXJkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX29y
aWdpbiAmJiBtX2JvdW5kKTsKKyNpZiBPUyhXSU5DRSkKKyAgICAgICAgcmV0dXJuIG1fb3JpZ2lu
ID4gbV9ib3VuZDsKKyNlbHNlCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgfQor
CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKKyAgICB7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICB2b2lkKiBjdXJyZW50UG9zaXRpb24gPSAmY3VycmVudFBvc2l0aW9u
OworICAgICAgICBBU1NFUlQobV9vcmlnaW4gIT0gbV9ib3VuZCk7CisgICAgICAgIEFTU0VSVChp
c0dyb3dpbmdEb3dud2FyZCgpCisgICAgICAgICAgICA/IChjdXJyZW50UG9zaXRpb24gPCBtX29y
aWdpbiAmJiBjdXJyZW50UG9zaXRpb24gPiBtX2JvdW5kKQorICAgICAgICAgICAgOiAoY3VycmVu
dFBvc2l0aW9uID4gbV9vcmlnaW4gJiYgY3VycmVudFBvc2l0aW9uIDwgbV9ib3VuZCkpOworI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCogbV9vcmlnaW47CisgICAgdm9pZCogbV9ib3VuZDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlN0YWNrQm91bmRzOworCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL1dURlRocmVhZERhdGEuY3BwCShyZXZpc2lvbiA3NDMwNikKKysrIEph
dmFTY3JpcHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OSArNDIsOCBAQCBXVEZUaHJlYWREYXRhOjpXVEZUaHJlYWREYXRhKCkKICAgICAsIG1fZGVmYXVs
dElkZW50aWZpZXJUYWJsZShuZXcgSlNDOjpJZGVudGlmaWVyVGFibGUoKSkKICAgICAsIG1fY3Vy
cmVudElkZW50aWZpZXJUYWJsZShtX2RlZmF1bHRJZGVudGlmaWVyVGFibGUpCiAjZW5kaWYKKyAg
ICAsIG1fc3RhY2tCb3VuZHMoU3RhY2tCb3VuZHM6OmN1cnJlbnRUaHJlYWRTdGFja0JvdW5kcygp
KQogewotICAgIGNoYXIgc2FtcGxlID0gMDsKLSAgICBtX2FwcHJveGltYXRlZFN0YWNrU3RhcnQg
PSAmc2FtcGxlOwogfQogCiBXVEZUaHJlYWREYXRhOjp+V1RGVGhyZWFkRGF0YSgpCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS93dGYvV1RGVGhyZWFkRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3d0Zi9XVEZUaHJlYWREYXRhLmgJKHJldmlzaW9uIDc0MzA2KQorKysgSmF2YVNjcmlw
dENvcmUvd3RmL1dURlRocmVhZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIC8vIFRoaXMgd2FzIEVOQUJMRShX
T1JLRVJTKSBpbiBXZWJDb3JlLCBidXQgdGhpcyBpcyBub3QgZGVmaW5lZCB3aGVuIGNvbXBpbGlu
ZyBKU0MuCkBAIC0xMTMsOSArMTE0LDkgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogCi0gICAg
Y2hhciogYXBwcm94aW1hdGVkU3RhY2tTdGFydCgpIGNvbnN0CisgICAgY29uc3QgU3RhY2tCb3Vu
ZHMmIHN0YWNrKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2FwcHJveGltYXRlZFN0
YWNrU3RhcnQ7CisgICAgICAgIHJldHVybiBtX3N0YWNrQm91bmRzOwogICAgIH0KIAogcHJpdmF0
ZToKQEAgLTEzNSw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBXVEZUaHJlYWREYXRh
JiB3dGZUaHJlYWREYXRhKCk7CiAgICAgZnJpZW5kIGNsYXNzIEF0b21pY1N0cmluZ1RhYmxlOwog
Ci0gICAgY2hhciogbV9hcHByb3hpbWF0ZWRTdGFja1N0YXJ0OworICAgIFN0YWNrQm91bmRzIG1f
c3RhY2tCb3VuZHM7CiB9OwogCiBpbmxpbmUgV1RGVGhyZWFkRGF0YSYgd3RmVGhyZWFkRGF0YSgp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvd3RmLnByaQkocmV2aXNpb24gNzQzMDYpCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICB3dGYvUGFnZUFsbG9jYXRpb24uY3BwIFwKICAgICB3dGYvUmFuZG9tTnVtYmVyLmNwcCBc
CiAgICAgd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgXAorICAgIHd0Zi9TdGFja0JvdW5k
cy5jcHAgXAogICAgIHd0Zi9UaHJlYWRpbmdOb25lLmNwcCBcCiAgICAgd3RmL1RocmVhZGluZy5j
cHAgXAogICAgIHd0Zi9UeXBlVHJhaXRzLmNwcCBcCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3
NDMxNykKKysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDEwLTEyLTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCdWcgMjYyNzYgLSBOZWVkIGEgbWVjaGFuaXNtIHRvIGRldGVybWluZSBzdGFjayBleHRlbnQK
KworICAgICAgICBBZGQgZm9yd2FyZGluZyBoZWFkZXIgZm9yIFN0YWNrQm91bmRzLmguCisKKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3VuZHMuaDogQWRkZWQuCisKIDIw
MTAtMTItMDEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBC
dWlsZCBmaXg6IEFkZGVkIGEgZm9yd2FyZGluZyBoZWFkZXIuCkluZGV4OiBKYXZhU2NyaXB0R2x1
ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3VuZHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RhY2tCb3VuZHMuaAkocmV2aXNpb24g
MCkKKysrIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Rh
Y2tCb3VuZHMuaD4KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NDMxNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMTggIEdhdmluIEJhcnJhY2xvdWdo
ICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJt
aW5lIHN0YWNrIGV4dGVudAorCisgICAgICAgIEFkZCBmb3J3YXJkaW5nIGhlYWRlciBmb3IgU3Rh
Y2tCb3VuZHMuaC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5k
cy5oOiBBZGRlZC4KKwogMjAxMC0xMi0xOCAgSGVsZGVyIENvcnJlaWEgIDxoZWxkZXJAc2VuY2hh
LmNvbT4gYW5kIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL1N0YWNrQm91bmRzLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9TdGFja0JvdW5kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfU3RhY2tCb3VuZHNfaAorI2RlZmluZSBXZWJDb3JlX0ZX
RF9TdGFja0JvdW5kc19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3RhY2tCb3VuZHMuaD4K
KyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77059</attachid>
            <date>2010-12-20 17:36:33 -0800</date>
            <delta_ts>2011-06-18 17:39:30 -0700</delta_ts>
            <desc>Fix stack size detection on DARWIN, WINDOWS, QNX, UNIX</desc>
            <filename>StackBounds.4.patch</filename>
            <type>text/plain</type>
            <size>5824</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0Mzc3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMjAgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20g
dG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhY2N1
cmF0ZSBzdGFjayBzaXplIGNhbGN1bGF0aW9uIGZvcjoKKyAgICAgICAgICAgIERBUldJTiwgV0lO
RE9XUywgUU5YLCBVTklYCisgICAgICAgIFdlIHN0aWxsIG5lZWQgdG8gZml4OgorICAgICAgICAg
ICAgU09MQVJJUywgT1BFTkJTRCwgU1lNQklBTiwgSEFJS1UsIFdJTkNFCisKKyAgICAgICAgKiB3
dGYvU3RhY2tCb3VuZHMuY3BwOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6
ZSk6CisKIDIwMTAtMTItMjAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9TdGFja0JvdW5kcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNr
Qm91bmRzLmNwcAkocmV2aXNpb24gNzQzNzIpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tC
b3VuZHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxNCArNTcsMjMgQEAKIAogbmFtZXNwYWNl
IFdURiB7CiAKKy8vIEJ1ZyAyNjI3NiAtIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHN0
YWNrIGV4dGVudAorLy8KKy8vIFRoZXNlIHBsYXRmb3JtcyBzaG91bGQgbm93IGJlIHdvcmtpbmcg
Y29ycmVjdGx5OgorLy8gICAgIERBUldJTiwgV0lORE9XUywgUU5YLCBVTklYCisvLyBUaGVzZSBw
bGF0Zm9ybXMgYXJlIG5vdDoKKy8vICAgICBTT0xBUklTLCBPUEVOQlNELCBTWU1CSUFOLCBIQUlL
VSwgV0lOQ0UKKy8vCisvLyBGSVhNRTogcmVtb3ZlIHRoaXMhIC0gdGhpcyBjb2RlIHVuc2FmZWx5
IGd1ZXNzZXMgYXQgc3RhY2sgc2l6ZXMhCisjaWYgT1MoU09MQVJJUykgfHwgT1MoT1BFTkJTRCkg
fHwgT1MoU1lNQklBTikgfHwgT1MoSEFJS1UpIHx8IE9TKFdJTkNFKQogLy8gQmFzZWQgb24gdGhl
IGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlNDIHBhcnNlciwgZ3Vlc3MgdGhlIHN0YWNrIHNp
emUuCiBzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVzdGltYXRlZFN0YWNrU2l6ZSA9IDEyOCAqIHNp
emVvZih2b2lkKikgKiAxMDI0OwotCiAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZSBzdGFjayBp
cyBncm93aW5nIGRvd253YXJkcy4KIHN0YXRpYyB2b2lkKiBlc3RpbWF0ZVN0YWNrQm91bmQodm9p
ZCogb3JpZ2luKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4ob3JpZ2luKSAtIGVz
dGltYXRlZFN0YWNrU2l6ZTsKIH0KKyNlbmRpZgogCiAjaWYgT1MoREFSV0lOKQogCkBAIC03Miw3
ICs4MSw3IEBAIHZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQogewogICAgIHB0aHJlYWRf
dCB0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKICAgICBtX29yaWdpbiA9IHB0aHJlYWRfZ2V0X3N0
YWNrYWRkcl9ucCh0aHJlYWQpOwotICAgIG1fYm91bmQgPSBlc3RpbWF0ZVN0YWNrQm91bmQobV9v
cmlnaW4pOworICAgIG1fYm91bmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pIC0gcHRo
cmVhZF9nZXRfc3RhY2tzaXplX25wKHRocmVhZCk7CiB9CiAKICNlbGlmIE9TKFdJTkRPV1MpCkBA
IC04OCw2ICs5Nyw3IEBAIHZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQogICAgICAgICBN
T1YgcFRpYiwgRUFYCiAgICAgfQogICAgIG1fb3JpZ2luID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHBU
aWItPlN0YWNrQmFzZSk7CisgICAgbV9ib3VuZCA9IHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5T
dGFja0xpbWl0KTsKICNlbGlmIE9TKFdJTkRPV1MpICYmIENQVShYODYpICYmIENPTVBJTEVSKEdD
QykKICAgICAvLyBvZmZzZXQgMHgxOCBmcm9tIHRoZSBGUyBzZWdtZW50IHJlZ2lzdGVyIGdpdmVz
IGEgcG9pbnRlciB0bwogICAgIC8vIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gYmxvY2sgZm9yIHRo
ZSBjdXJyZW50IHRocmVhZApAQCAtOTYsMTMgKzEwNiwxNCBAQCB2b2lkIFN0YWNrQm91bmRzOjpp
bml0aWFsaXplKCkKICAgICAgICAgICA6ICI9ciIgKHBUaWIpCiAgICAgICAgICk7CiAgICAgbV9v
cmlnaW4gPSBzdGF0aWNfY2FzdDx2b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsKKyAgICBtX2JvdW5k
ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KHBUaWItPlN0YWNrTGltaXQpOwogI2VsaWYgT1MoV0lORE9X
UykgJiYgQ1BVKFg4Nl82NCkKICAgICBQTlRfVElCNjQgcFRpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UE5UX1RJQjY0PihOdEN1cnJlbnRUZWIoKSk7CiAgICAgbV9vcmlnaW4gPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOworICAgIG1fYm91bmQgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihwVGliLT5TdGFja0xpbWl0KTsKICNlbHNlCiAjZXJyb3IgTmVlZCBhIHdheSB0
byBnZXQgdGhlIHN0YWNrIGJvdW5kcyBvbiB0aGlzIHBsYXRmb3JtIChXaW5kb3dzKQogI2VuZGlm
Ci0gICAgbV9ib3VuZCA9IGVzdGltYXRlU3RhY2tCb3VuZChtX29yaWdpbik7CiB9CiAKICNlbGlm
IE9TKFFOWCkKQEAgLTEyNyw4ICsxMzgsOCBAQCB2b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXpl
KCkKICAgICBzdGFja1NpemUgPSB0aHJlYWRJbmZvLnN0a3NpemU7CiAgICAgQVNTRVJUKHN0YWNr
QmFzZSk7CiAKKyAgICBtX2JvdW5kID0gc3RhY2tCYXNlOwogICAgIG1fb3JpZ2luID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KHN0YWNrQmFzZSkgKyBzdGFja1NpemU7Ci0gICAgbV9ib3VuZCA9IGVzdGlt
YXRlU3RhY2tCb3VuZChtX29yaWdpbik7CiB9CiAKICNlbGlmIE9TKFNPTEFSSVMpCkBAIC0xOTQs
OCArMjA1LDggQEAgdm9pZCBTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSgpCiAgICAgKHZvaWQpcmM7
IC8vIEZJWE1FOiBEZWFsIHdpdGggZXJyb3IgY29kZSBzb21laG93PyBTZWVtcyBmYXRhbC4KICAg
ICBBU1NFUlQoc3RhY2tCYXNlKTsKICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmc2F0dHIpOwor
ICAgIG1fYm91bmQgPSBzdGFja0Jhc2U7CiAgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oc3RhY2tCYXNlKSArIHN0YWNrU2l6ZTsKLSAgICBtX2JvdW5kID0gZXN0aW1hdGVTdGFja0Jv
dW5kKG1fb3JpZ2luKTsKIH0KIAogI2VsaWYgT1MoV0lOQ0UpCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3
NDM3NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTEyLTIwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBC
dWcgMjYyNzYgLSBOZWVkIGEgbWVjaGFuaXNtIHRvIGRldGVybWluZSBzdGFjayBleHRlbnQKKwor
ICAgICAgICBDb3JyZWN0bHkgbWVhc3VyaW5nIGF2YWlsYWJsZSBzdGFjayBpbmNyZWFzZXMgdGhl
IHNpemUgb2YgZXhwcmVzc2lvbiB3ZSBjYW4gaGFuZGxlIQorCisgICAgICAgICogZmFzdC9qcy9s
YXJnZS1leHByZXNzaW9ucy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQt
dGVzdHMvbGFyZ2UtZXhwcmVzc2lvbnMuanM6CisKIDIwMTAtMTItMjAgIE9saXZlciBIdW50ICA8
b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2UtZXhwcmVzc2lvbnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA3NDM3MikKKysrIExheW91dFRlc3RzL2Zhc3QvanMvbGFyZ2Ut
ZXhwcmVzc2lvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01LDcgKzUsNyBAQCBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIFBBU1MgZXZhbChyZXBl
YXRlZEV4cHJlc3Npb24oImxldHRlckEiLCAiKyIsIDEwMCkpIGlzIHJlcGVhdGVkU3RyaW5nKCJh
IiwgMTAwKQogUEFTUyBldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIsICIrIiwgMTAw
MCkpIGlzIHJlcGVhdGVkU3RyaW5nKCJhIiwgMTAwMCkKLVBBU1MgZXZhbChyZXBlYXRlZEV4cHJl
c3Npb24oImxldHRlckEiLCAiKyIsIDEwMDAwKSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9y
OiBFeHByZXNzaW9uIHRvbyBkZWVwLgorUEFTUyBldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0
dGVyQSIsICIrIiwgMTAwMDApKSBpcyByZXBlYXRlZFN0cmluZygiYSIsIDEwMDAwKQogUEFTUyBl
dmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIsICIrIiwgMTAwMDAwKSkgdGhyZXcgZXhj
ZXB0aW9uIFN5bnRheEVycm9yOiBFeHByZXNzaW9uIHRvbyBkZWVwLgogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0
cy9sYXJnZS1leHByZXNzaW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L3NjcmlwdC10ZXN0cy9sYXJnZS1leHByZXNzaW9ucy5qcwkocmV2aXNpb24gNzQzNzIpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9sYXJnZS1leHByZXNzaW9ucy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQCBmdW5jdGlvbiByZXBlYXRlZFN0cmluZyh2YWx1
ZSwgY291bnQpCiAKIHNob3VsZEJlKCdldmFsKHJlcGVhdGVkRXhwcmVzc2lvbigibGV0dGVyQSIs
ICIrIiwgMTAwKSknLCAncmVwZWF0ZWRTdHJpbmcoImEiLCAxMDApJyk7CiBzaG91bGRCZSgnZXZh
bChyZXBlYXRlZEV4cHJlc3Npb24oImxldHRlckEiLCAiKyIsIDEwMDApKScsICdyZXBlYXRlZFN0
cmluZygiYSIsIDEwMDApJyk7Ci1zaG91bGRUaHJvdygnZXZhbChyZXBlYXRlZEV4cHJlc3Npb24o
ImxldHRlckEiLCAiKyIsIDEwMDAwKSknLCAnIlN5bnRheEVycm9yOiBFeHByZXNzaW9uIHRvbyBk
ZWVwIicpOworc2hvdWxkQmUoJ2V2YWwocmVwZWF0ZWRFeHByZXNzaW9uKCJsZXR0ZXJBIiwgIisi
LCAxMDAwMCkpJywgJ3JlcGVhdGVkU3RyaW5nKCJhIiwgMTAwMDApJyk7CiBzaG91bGRUaHJvdygn
ZXZhbChyZXBlYXRlZEV4cHJlc3Npb24oImxldHRlckEiLCAiKyIsIDEwMDAwMCkpJywgJyJTeW50
YXhFcnJvcjogRXhwcmVzc2lvbiB0b28gZGVlcCInKTsKIAogdmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77721</attachid>
            <date>2010-12-31 08:26:36 -0800</date>
            <delta_ts>2011-01-31 16:06:35 -0800</delta_ts>
            <desc>Patch for WinCE</desc>
            <filename>bug-26276-wince.patch</filename>
            <type>text/plain</type>
            <size>4739</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OGY4MWUxLi4wMjFhZTY3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTAtMTItMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJTkNFXSBE
ZXRlcm1pbmUgc3RhY2sgZXh0ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjI3NgorCisgICAgICAgIFNjYW4gdGhlIHN0YWNrIGZvciB3cml0ZWFi
bGUgcGFnZXMgYW5kIHVzZSB0aGUgbGltaXRzLgorCisgICAgICAgICogd3RmL1N0YWNrQm91bmRz
LmNwcDoKKyAgICAgICAgKFdURjo6aXNQYWdlV3JpdGFibGUpOgorICAgICAgICAoV1RGOjpnZXRM
b3dlclN0YWNrQm91bmQpOgorICAgICAgICAoV1RGOjpnZXRVcHBlclN0YWNrQm91bmQpOgorICAg
ICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSk6CisKIDIwMTAtMTItMzEgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3Vu
ZHMuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmNwcAppbmRleCA0OTA1ZTU1
Li42MjRhNzc0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAKQEAgLTY1LDcgKzY1LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAvLyAgICAgV0lORE9XUywgU09MQVJJUywgT1BFTkJTRCwgU1lN
QklBTiwgSEFJS1UsIFdJTkNFDQogLy8NCiAvLyBGSVhNRTogcmVtb3ZlIHRoaXMhIC0gdGhpcyBj
b2RlIHVuc2FmZWx5IGd1ZXNzZXMgYXQgc3RhY2sgc2l6ZXMhDQotI2lmIE9TKFdJTkRPV1MpIHx8
IE9TKFNPTEFSSVMpIHx8IE9TKE9QRU5CU0QpIHx8IE9TKFNZTUJJQU4pIHx8IE9TKEhBSUtVKSB8
fCBPUyhXSU5DRSkNCisjaWYgT1MoV0lORE9XUykgfHwgT1MoU09MQVJJUykgfHwgT1MoT1BFTkJT
RCkgfHwgT1MoU1lNQklBTikgfHwgT1MoSEFJS1UpDQogLy8gQmFzZWQgb24gdGhlIGN1cnJlbnQg
bGltaXQgdXNlZCBieSB0aGUgSlNDIHBhcnNlciwgZ3Vlc3MgdGhlIHN0YWNrIHNpemUuDQogc3Rh
dGljIGNvbnN0IHB0cmRpZmZfdCBlc3RpbWF0ZWRTdGFja1NpemUgPSAxMjggKiBzaXplb2Yodm9p
ZCopICogMTAyNDsNCiAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoZSBzdGFjayBpcyBncm93aW5n
IGRvd253YXJkcy4NCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBTdGFja0JvdW5kczo6aW5pdGlh
bGl6ZSgpCiBuYW1lc3BhY2UgSlNDIHsgSlNfRVhQT1JUREFUQSB2b2lkKiBnX3N0YWNrQmFzZSA9
IDA7IH0NCiBuYW1lc3BhY2UgV1RGIHsNCiANCi1pbmxpbmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2
b2lkKiBwYWdlKQ0KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2b2lkKiBwYWdl
KQ0KIHsNCiAgICAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1lbW9yeUluZm9ybWF0aW9uOw0K
ICAgICBEV09SRCByZXN1bHQgPSBWaXJ0dWFsUXVlcnkocGFnZSwgJm1lbW9yeUluZm9ybWF0aW9u
LCBzaXplb2YobWVtb3J5SW5mb3JtYXRpb24pKTsNCkBAIC0yMDcsNTAgKzIwNyw0OSBAQCBpbmxp
bmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2b2lkKiBwYWdlKQogICAgICAgICB8fCBwcm90ZWN0ID09
IFBBR0VfRVhFQ1VURV9XUklURUNPUFk7DQogfQ0KIA0KLXN0YXRpYyB2b2lkKiBnZXRTdGFja01h
eCh2b2lkKiBwcmV2aW91c0ZyYW1lLCBib29sJiBpc0dyb3dpbmdEb3dud2FyZCkNCitzdGF0aWMg
aW5saW5lIHZvaWQqIGdldExvd2VyU3RhY2tCb3VuZChjaGFyKiBjdXJyZW50UGFnZSwgRFdPUkQg
cGFnZVNpemUpDQorew0KKyAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7DQorICAgICAgICAv
LyBjaGVjayBmb3IgdW5kZXJmbG93DQorICAgICAgICBpZiAoY3VycmVudFBhZ2UgPj0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocGFnZVNpemUpKQ0KKyAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09
IHBhZ2VTaXplOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMDsN
CisNCisgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQ0KKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOw0KKyAgICB9DQorDQorICAgIHJldHVy
biAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQqIGdldFVwcGVyU3RhY2tCb3VuZChjaGFy
KiBjdXJyZW50UGFnZSwgRFdPUkQgcGFnZVNpemUpDQorew0KKyAgICBkbyB7DQorICAgICAgICAv
LyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFibGUgcmV0dXJucyBm
YWxzZSBhdCBlbmQgb2YgbWVtb3J5DQorICAgICAgICBjdXJyZW50UGFnZSArPSBwYWdlU2l6ZTsN
CisgICAgfSB3aGlsZSAoaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKTsNCisNCisgICAgcmV0
dXJuIGN1cnJlbnRQYWdlIC0gcGFnZVNpemU7DQorfQ0KKw0KK3ZvaWQgU3RhY2tCb3VuZHM6Omlu
aXRpYWxpemUoKQ0KIHsNCiAgICAgLy8gZmluZCB0aGUgYWRkcmVzcyBvZiB0aGlzIHN0YWNrIGZy
YW1lIGJ5IHRha2luZyB0aGUgYWRkcmVzcyBvZiBhIGxvY2FsIHZhcmlhYmxlDQogICAgIHZvaWQq
IHRoaXNGcmFtZSA9ICZ0aGlzRnJhbWU7DQotICAgIGlzR3Jvd2luZ0Rvd253YXJkID0gcHJldmlv
dXNGcmFtZSA8ICZ0aGlzRnJhbWU7DQotDQotICAgIGlmIChKU0M6Omdfc3RhY2tCYXNlKQ0KLSAg
ICAgICAgcmV0dXJuIEpTQzo6Z19zdGFja0Jhc2U7DQorICAgIGJvb2wgaXNHcm93aW5nRG93bndh
cmQgPSBkZXRlY3RHcm93aW5nRG93bndhcmQodGhpc0ZyYW1lKTsNCiANCiAgICAgU1lTVEVNX0lO
Rk8gc3lzdGVtSW5mbzsNCiAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7DQogICAgIERX
T1JEIHBhZ2VTaXplID0gc3lzdGVtSW5mby5kd1BhZ2VTaXplOw0KIA0KICAgICAvLyBzY2FuIGFs
bCBvZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBsYXN0
IHdyaXRlYWJsZSBwYWdlIGZvdW5kDQotICAgIHJlZ2lzdGVyIGNoYXIqIGN1cnJlbnRQYWdlID0g
KGNoYXIqKSgoRFdPUkQpdGhpc0ZyYW1lICYgfihwYWdlU2l6ZSAtIDEpKTsNCi0gICAgaWYgKGlz
R3Jvd2luZ0Rvd253YXJkKSB7DQotICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7DQot
ICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHVuZGVyZmxvdw0KLSAgICAgICAgICAgIGlmIChjdXJy
ZW50UGFnZSA+PSAoY2hhciopcGFnZVNpemUpDQotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdl
IC09IHBhZ2VTaXplOw0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgY3VycmVu
dFBhZ2UgPSAwOw0KLSAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2Up
KQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBhZ2UgKyBwYWdlU2l6ZTsNCi0gICAg
ICAgIH0NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2hpbGUg
KHRydWUpIHsNCi0gICAgICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2Ug
aXNQYWdlV3JpdGFibGUgcmV0dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5DQotICAgICAgICAg
ICAgY3VycmVudFBhZ2UgKz0gcGFnZVNpemU7DQotICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0
YWJsZShjdXJyZW50UGFnZSkpDQotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsN
Ci0gICAgICAgIH0NCi0gICAgfQ0KLX0NCisgICAgY2hhciogY3VycmVudFBhZ2UgPSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PERXT1JEPih0aGlzRnJhbWUpICYgfihw
YWdlU2l6ZSAtIDEpKTsNCisgICAgdm9pZCogbG93ZXJTdGFja0JvdW5kID0gZ2V0TG93ZXJTdGFj
a0JvdW5kKGN1cnJlbnRQYWdlLCBwYWdlU2l6ZSk7DQorICAgIHZvaWQqIHVwcGVyU3RhY2tCb3Vu
ZCA9IGdldFVwcGVyU3RhY2tCb3VuZChjdXJyZW50UGFnZSwgcGFnZVNpemUpOw0KIA0KLXZvaWQg
U3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQ0KLXsNCi0gICAgaW50IGR1bW15Ow0KLSAgICBib29s
IGlzR3Jvd2luZ0Rvd253YXJkOw0KLSAgICBtX29yaWdpbiA9IGdldFN0YWNrTWF4KCZkdW1teSwg
aXNHcm93aW5nRG93bndhcmQpOw0KLSAgICBtX2JvdW5kID0gaXNHcm93aW5nRG93bndhcmQNCi0g
ICAgICAgID8gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fb3JpZ2luKSAtIGVzdGltYXRlZFN0YWNrU2l6
ZQ0KLSAgICAgICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9vcmlnaW4pICsgZXN0aW1hdGVkU3Rh
Y2tTaXplOw0KKyAgICBtX29yaWdpbiA9IGlzR3Jvd2luZ0Rvd253YXJkID8gdXBwZXJTdGFja0Jv
dW5kIDogbG93ZXJTdGFja0JvdW5kOw0KKyAgICBtX2JvdW5kID0gaXNHcm93aW5nRG93bndhcmQg
PyBsb3dlclN0YWNrQm91bmQgOiB1cHBlclN0YWNrQm91bmQ7DQogfQ0KIA0KICNlbGlmIE9TKFdJ
TkRPV1MpDQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77776</attachid>
            <date>2011-01-02 09:19:01 -0800</date>
            <delta_ts>2011-01-02 12:24:32 -0800</delta_ts>
            <desc>Patch for WinCE (fixed line endings)</desc>
            <filename>bug-26276-wince2.patch</filename>
            <type>text/plain</type>
            <size>4640</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA5OGY4MWUxLi4wMjFhZTY3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTAtMTItMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJTkNFXSBE
ZXRlcm1pbmUgc3RhY2sgZXh0ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNjI3NgorCisgICAgICAgIFNjYW4gdGhlIHN0YWNrIGZvciB3cml0ZWFi
bGUgcGFnZXMgYW5kIHVzZSB0aGUgbGltaXRzLgorCisgICAgICAgICogd3RmL1N0YWNrQm91bmRz
LmNwcDoKKyAgICAgICAgKFdURjo6aXNQYWdlV3JpdGFibGUpOgorICAgICAgICAoV1RGOjpnZXRM
b3dlclN0YWNrQm91bmQpOgorICAgICAgICAoV1RGOjpnZXRVcHBlclN0YWNrQm91bmQpOgorICAg
ICAgICAoV1RGOjpTdGFja0JvdW5kczo6aW5pdGlhbGl6ZSk6CisKIDIwMTAtMTItMzEgIFBhdHJp
Y2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3Vu
ZHMuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmNwcAppbmRleCA0OTA1ZTU1
Li42MjRhNzc0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvU3RhY2tCb3VuZHMuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAKQEAgLTY1LDcgKzY1LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAvLyAgICAgV0lORE9XUywgU09MQVJJUywgT1BFTkJTRCwgU1lN
QklBTiwgSEFJS1UsIFdJTkNFCiAvLwogLy8gRklYTUU6IHJlbW92ZSB0aGlzISAtIHRoaXMgY29k
ZSB1bnNhZmVseSBndWVzc2VzIGF0IHN0YWNrIHNpemVzIQotI2lmIE9TKFdJTkRPV1MpIHx8IE9T
KFNPTEFSSVMpIHx8IE9TKE9QRU5CU0QpIHx8IE9TKFNZTUJJQU4pIHx8IE9TKEhBSUtVKSB8fCBP
UyhXSU5DRSkKKyNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTT0xBUklTKSB8fCBPUyhPUEVOQlNEKSB8
fCBPUyhTWU1CSUFOKSB8fCBPUyhIQUlLVSkKIC8vIEJhc2VkIG9uIHRoZSBjdXJyZW50IGxpbWl0
IHVzZWQgYnkgdGhlIEpTQyBwYXJzZXIsIGd1ZXNzIHRoZSBzdGFjayBzaXplLgogc3RhdGljIGNv
bnN0IHB0cmRpZmZfdCBlc3RpbWF0ZWRTdGFja1NpemUgPSAxMjggKiBzaXplb2Yodm9pZCopICog
MTAyNDsKIC8vIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhlIHN0YWNrIGlzIGdyb3dpbmcgZG93bndh
cmRzLgpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQog
bmFtZXNwYWNlIEpTQyB7IEpTX0VYUE9SVERBVEEgdm9pZCogZ19zdGFja0Jhc2UgPSAwOyB9CiBu
YW1lc3BhY2UgV1RGIHsKIAotaW5saW5lIGJvb2wgaXNQYWdlV3JpdGFibGUodm9pZCogcGFnZSkK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1BhZ2VXcml0YWJsZSh2b2lkKiBwYWdlKQogewogICAgIE1F
TU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtZW1vcnlJbmZvcm1hdGlvbjsKICAgICBEV09SRCByZXN1
bHQgPSBWaXJ0dWFsUXVlcnkocGFnZSwgJm1lbW9yeUluZm9ybWF0aW9uLCBzaXplb2YobWVtb3J5
SW5mb3JtYXRpb24pKTsKQEAgLTIwNyw1MCArMjA3LDQ5IEBAIGlubGluZSBib29sIGlzUGFnZVdy
aXRhYmxlKHZvaWQqIHBhZ2UpCiAgICAgICAgIHx8IHByb3RlY3QgPT0gUEFHRV9FWEVDVVRFX1dS
SVRFQ09QWTsKIH0KIAotc3RhdGljIHZvaWQqIGdldFN0YWNrTWF4KHZvaWQqIHByZXZpb3VzRnJh
bWUsIGJvb2wmIGlzR3Jvd2luZ0Rvd253YXJkKQorc3RhdGljIGlubGluZSB2b2lkKiBnZXRMb3dl
clN0YWNrQm91bmQoY2hhciogY3VycmVudFBhZ2UsIERXT1JEIHBhZ2VTaXplKQoreworICAgIHdo
aWxlIChjdXJyZW50UGFnZSA+IDApIHsKKyAgICAgICAgLy8gY2hlY2sgZm9yIHVuZGVyZmxvdwor
ICAgICAgICBpZiAoY3VycmVudFBhZ2UgPj0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGFnZVNp
emUpKQorICAgICAgICAgICAgY3VycmVudFBhZ2UgLT0gcGFnZVNpemU7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMDsKKworICAgICAgICBpZiAoIWlzUGFnZVdyaXRh
YmxlKGN1cnJlbnRQYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VT
aXplOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQqIGdl
dFVwcGVyU3RhY2tCb3VuZChjaGFyKiBjdXJyZW50UGFnZSwgRFdPUkQgcGFnZVNpemUpCit7Cisg
ICAgZG8geworICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdl
V3JpdGFibGUgcmV0dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5CisgICAgICAgIGN1cnJlbnRQ
YWdlICs9IHBhZ2VTaXplOworICAgIH0gd2hpbGUgKGlzUGFnZVdyaXRhYmxlKGN1cnJlbnRQYWdl
KSk7CisKKyAgICByZXR1cm4gY3VycmVudFBhZ2UgLSBwYWdlU2l6ZTsKK30KKwordm9pZCBTdGFj
a0JvdW5kczo6aW5pdGlhbGl6ZSgpCiB7CiAgICAgLy8gZmluZCB0aGUgYWRkcmVzcyBvZiB0aGlz
IHN0YWNrIGZyYW1lIGJ5IHRha2luZyB0aGUgYWRkcmVzcyBvZiBhIGxvY2FsIHZhcmlhYmxlCiAg
ICAgdm9pZCogdGhpc0ZyYW1lID0gJnRoaXNGcmFtZTsKLSAgICBpc0dyb3dpbmdEb3dud2FyZCA9
IHByZXZpb3VzRnJhbWUgPCAmdGhpc0ZyYW1lOwotCi0gICAgaWYgKEpTQzo6Z19zdGFja0Jhc2Up
Ci0gICAgICAgIHJldHVybiBKU0M6Omdfc3RhY2tCYXNlOworICAgIGJvb2wgaXNHcm93aW5nRG93
bndhcmQgPSBkZXRlY3RHcm93aW5nRG93bndhcmQodGhpc0ZyYW1lKTsKIAogICAgIFNZU1RFTV9J
TkZPIHN5c3RlbUluZm87CiAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtSW5mbyk7CiAgICAgRFdP
UkQgcGFnZVNpemUgPSBzeXN0ZW1JbmZvLmR3UGFnZVNpemU7CiAKICAgICAvLyBzY2FuIGFsbCBv
ZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBsYXN0IHdy
aXRlYWJsZSBwYWdlIGZvdW5kCi0gICAgcmVnaXN0ZXIgY2hhciogY3VycmVudFBhZ2UgPSAoY2hh
ciopKChEV09SRCl0aGlzRnJhbWUgJiB+KHBhZ2VTaXplIC0gMSkpOwotICAgIGlmIChpc0dyb3dp
bmdEb3dud2FyZCkgewotICAgICAgICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7Ci0gICAgICAg
ICAgICAvLyBjaGVjayBmb3IgdW5kZXJmbG93Ci0gICAgICAgICAgICBpZiAoY3VycmVudFBhZ2Ug
Pj0gKGNoYXIqKXBhZ2VTaXplKQotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09IHBhZ2VT
aXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMDsK
LSAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBhZ2VTaXplOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFibGUgcmV0
dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5Ci0gICAgICAgICAgICBjdXJyZW50UGFnZSArPSBw
YWdlU2l6ZTsKLSAgICAgICAgICAgIGlmICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsKLSAgICAgICAgfQotICAgIH0KLX0K
KyAgICBjaGFyKiBjdXJyZW50UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlaW50ZXJw
cmV0X2Nhc3Q8RFdPUkQ+KHRoaXNGcmFtZSkgJiB+KHBhZ2VTaXplIC0gMSkpOworICAgIHZvaWQq
IGxvd2VyU3RhY2tCb3VuZCA9IGdldExvd2VyU3RhY2tCb3VuZChjdXJyZW50UGFnZSwgcGFnZVNp
emUpOworICAgIHZvaWQqIHVwcGVyU3RhY2tCb3VuZCA9IGdldFVwcGVyU3RhY2tCb3VuZChjdXJy
ZW50UGFnZSwgcGFnZVNpemUpOwogCi12b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKLXsK
LSAgICBpbnQgZHVtbXk7Ci0gICAgYm9vbCBpc0dyb3dpbmdEb3dud2FyZDsKLSAgICBtX29yaWdp
biA9IGdldFN0YWNrTWF4KCZkdW1teSwgaXNHcm93aW5nRG93bndhcmQpOwotICAgIG1fYm91bmQg
PSBpc0dyb3dpbmdEb3dud2FyZAotICAgICAgICA/IHN0YXRpY19jYXN0PGNoYXIqPihtX29yaWdp
bikgLSBlc3RpbWF0ZWRTdGFja1NpemUKLSAgICAgICAgOiBzdGF0aWNfY2FzdDxjaGFyKj4obV9v
cmlnaW4pICsgZXN0aW1hdGVkU3RhY2tTaXplOworICAgIG1fb3JpZ2luID0gaXNHcm93aW5nRG93
bndhcmQgPyB1cHBlclN0YWNrQm91bmQgOiBsb3dlclN0YWNrQm91bmQ7CisgICAgbV9ib3VuZCA9
IGlzR3Jvd2luZ0Rvd253YXJkID8gbG93ZXJTdGFja0JvdW5kIDogdXBwZXJTdGFja0JvdW5kOwog
fQogCiAjZWxpZiBPUyhXSU5ET1dTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78133</attachid>
            <date>2011-01-06 11:18:47 -0800</date>
            <delta_ts>2011-01-06 13:12:17 -0800</delta_ts>
            <desc>Patch for WinCE (with detectGrowingDownward)</desc>
            <filename>bug-26276-svn.patch</filename>
            <type>text/plain</type>
            <size>5054</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTE2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBA
QAorMjAxMS0wMS0wNiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lOQ0VdIERl
dGVybWluZSBzdGFjayBleHRlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2Mjc2CisKKyAgICAgICAgU2NhbiB0aGUgc3RhY2sgZm9yIHdyaXRlYWJs
ZSBwYWdlcyBhbmQgdXNlIHRoZSBsaW1pdHMuCisKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMu
Y3BwOgorICAgICAgICAoV1RGOjppc1BhZ2VXcml0YWJsZSk6CisgICAgICAgIChXVEY6OmdldExv
d2VyU3RhY2tCb3VuZCk6CisgICAgICAgIChXVEY6OmdldFVwcGVyU3RhY2tCb3VuZCk6CisgICAg
ICAgIChXVEY6OlN0YWNrQm91bmRzOjppbml0aWFsaXplKToKKwogMjAxMS0wMS0wNSAgU3RldmUg
RmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQg
Zml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRzLmNwcAko
cmV2aXNpb24gNzUxNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0YWNrQm91bmRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgV1RGIHsNCiAv
LyAgICAgV0lORE9XUywgU09MQVJJUywgT1BFTkJTRCwgU1lNQklBTiwgSEFJS1UsIFdJTkNFDQog
Ly8NCiAvLyBGSVhNRTogcmVtb3ZlIHRoaXMhIC0gdGhpcyBjb2RlIHVuc2FmZWx5IGd1ZXNzZXMg
YXQgc3RhY2sgc2l6ZXMhDQotI2lmIE9TKFdJTkRPV1MpIHx8IE9TKFNPTEFSSVMpIHx8IE9TKE9Q
RU5CU0QpIHx8IE9TKFNZTUJJQU4pIHx8IE9TKEhBSUtVKSB8fCBPUyhXSU5DRSkNCisjaWYgT1Mo
V0lORE9XUykgfHwgT1MoU09MQVJJUykgfHwgT1MoT1BFTkJTRCkgfHwgT1MoU1lNQklBTikgfHwg
T1MoSEFJS1UpDQogLy8gQmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlND
IHBhcnNlciwgZ3Vlc3MgdGhlIHN0YWNrIHNpemUuDQogc3RhdGljIGNvbnN0IHB0cmRpZmZfdCBl
c3RpbWF0ZWRTdGFja1NpemUgPSAxMjggKiBzaXplb2Yodm9pZCopICogMTAyNDsNCiAvLyBUaGlz
IG1ldGhvZCBhc3N1bWVzIHRoZSBzdGFjayBpcyBncm93aW5nIGRvd253YXJkcy4NCkBAIC0xODQs
NyArMTg0LDE0IEBAIHZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQ0KIG5hbWVzcGFjZSBK
U0MgeyBKU19FWFBPUlREQVRBIHZvaWQqIGdfc3RhY2tCYXNlID0gMDsgfQ0KIG5hbWVzcGFjZSBX
VEYgew0KIA0KLWlubGluZSBib29sIGlzUGFnZVdyaXRhYmxlKHZvaWQqIHBhZ2UpDQorc3RhdGlj
IGJvb2wgZGV0ZWN0R3Jvd2luZ0Rvd253YXJkKHZvaWQqIHByZXZpb3VzRnJhbWUpDQorew0KKyAg
ICAvLyBGaW5kIHRoZSBhZGRyZXNzIG9mIHRoaXMgc3RhY2sgZnJhbWUgYnkgdGFraW5nIHRoZSBh
ZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUuDQorICAgIGludCB0aGlzRnJhbWU7DQorICAgIHJl
dHVybiBwcmV2aW91c0ZyYW1lID4gJnRoaXNGcmFtZTsNCit9DQorDQorc3RhdGljIGlubGluZSBi
b29sIGlzUGFnZVdyaXRhYmxlKHZvaWQqIHBhZ2UpDQogew0KICAgICBNRU1PUllfQkFTSUNfSU5G
T1JNQVRJT04gbWVtb3J5SW5mb3JtYXRpb247DQogICAgIERXT1JEIHJlc3VsdCA9IFZpcnR1YWxR
dWVyeShwYWdlLCAmbWVtb3J5SW5mb3JtYXRpb24sIHNpemVvZihtZW1vcnlJbmZvcm1hdGlvbikp
Ow0KQEAgLTIwMCw1MCArMjA3LDQ5IEBAIGlubGluZSBib29sIGlzUGFnZVdyaXRhYmxlKHZvaWQq
IHBhZ2UpDQogICAgICAgICB8fCBwcm90ZWN0ID09IFBBR0VfRVhFQ1VURV9XUklURUNPUFk7DQog
fQ0KIA0KLXN0YXRpYyB2b2lkKiBnZXRTdGFja01heCh2b2lkKiBwcmV2aW91c0ZyYW1lLCBib29s
JiBpc0dyb3dpbmdEb3dud2FyZCkNCitzdGF0aWMgaW5saW5lIHZvaWQqIGdldExvd2VyU3RhY2tC
b3VuZChjaGFyKiBjdXJyZW50UGFnZSwgRFdPUkQgcGFnZVNpemUpDQorew0KKyAgICB3aGlsZSAo
Y3VycmVudFBhZ2UgPiAwKSB7DQorICAgICAgICAvLyBjaGVjayBmb3IgdW5kZXJmbG93DQorICAg
ICAgICBpZiAoY3VycmVudFBhZ2UgPj0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocGFnZVNpemUp
KQ0KKyAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09IHBhZ2VTaXplOw0KKyAgICAgICAgZWxzZQ0K
KyAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMDsNCisNCisgICAgICAgIGlmICghaXNQYWdlV3Jp
dGFibGUoY3VycmVudFBhZ2UpKQ0KKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZSArIHBh
Z2VTaXplOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW5saW5l
IHZvaWQqIGdldFVwcGVyU3RhY2tCb3VuZChjaGFyKiBjdXJyZW50UGFnZSwgRFdPUkQgcGFnZVNp
emUpDQorew0KKyAgICBkbyB7DQorICAgICAgICAvLyBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJl
Y2F1c2UgaXNQYWdlV3JpdGFibGUgcmV0dXJucyBmYWxzZSBhdCBlbmQgb2YgbWVtb3J5DQorICAg
ICAgICBjdXJyZW50UGFnZSArPSBwYWdlU2l6ZTsNCisgICAgfSB3aGlsZSAoaXNQYWdlV3JpdGFi
bGUoY3VycmVudFBhZ2UpKTsNCisNCisgICAgcmV0dXJuIGN1cnJlbnRQYWdlIC0gcGFnZVNpemU7
DQorfQ0KKw0KK3ZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQ0KIHsNCiAgICAgLy8gZmlu
ZCB0aGUgYWRkcmVzcyBvZiB0aGlzIHN0YWNrIGZyYW1lIGJ5IHRha2luZyB0aGUgYWRkcmVzcyBv
ZiBhIGxvY2FsIHZhcmlhYmxlDQogICAgIHZvaWQqIHRoaXNGcmFtZSA9ICZ0aGlzRnJhbWU7DQot
ICAgIGlzR3Jvd2luZ0Rvd253YXJkID0gcHJldmlvdXNGcmFtZSA8ICZ0aGlzRnJhbWU7DQotDQot
ICAgIGlmIChKU0M6Omdfc3RhY2tCYXNlKQ0KLSAgICAgICAgcmV0dXJuIEpTQzo6Z19zdGFja0Jh
c2U7DQorICAgIGJvb2wgaXNHcm93aW5nRG93bndhcmQgPSBkZXRlY3RHcm93aW5nRG93bndhcmQo
dGhpc0ZyYW1lKTsNCiANCiAgICAgU1lTVEVNX0lORk8gc3lzdGVtSW5mbzsNCiAgICAgR2V0U3lz
dGVtSW5mbygmc3lzdGVtSW5mbyk7DQogICAgIERXT1JEIHBhZ2VTaXplID0gc3lzdGVtSW5mby5k
d1BhZ2VTaXplOw0KIA0KICAgICAvLyBzY2FuIGFsbCBvZiBtZW1vcnkgc3RhcnRpbmcgZnJvbSB0
aGlzIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBsYXN0IHdyaXRlYWJsZSBwYWdlIGZvdW5kDQotICAg
IHJlZ2lzdGVyIGNoYXIqIGN1cnJlbnRQYWdlID0gKGNoYXIqKSgoRFdPUkQpdGhpc0ZyYW1lICYg
fihwYWdlU2l6ZSAtIDEpKTsNCi0gICAgaWYgKGlzR3Jvd2luZ0Rvd253YXJkKSB7DQotICAgICAg
ICB3aGlsZSAoY3VycmVudFBhZ2UgPiAwKSB7DQotICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHVu
ZGVyZmxvdw0KLSAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA+PSAoY2hhciopcGFnZVNpemUp
DQotICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlIC09IHBhZ2VTaXplOw0KLSAgICAgICAgICAg
IGVsc2UNCi0gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAwOw0KLSAgICAgICAgICAgIGlm
ICghaXNQYWdlV3JpdGFibGUoY3VycmVudFBhZ2UpKQ0KLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3VycmVudFBhZ2UgKyBwYWdlU2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAwOw0K
LSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsNCi0gICAgICAgICAgICAvLyBn
dWFyYW50ZWVkIHRvIGNvbXBsZXRlIGJlY2F1c2UgaXNQYWdlV3JpdGFibGUgcmV0dXJucyBmYWxz
ZSBhdCBlbmQgb2YgbWVtb3J5DQotICAgICAgICAgICAgY3VycmVudFBhZ2UgKz0gcGFnZVNpemU7
DQotICAgICAgICAgICAgaWYgKCFpc1BhZ2VXcml0YWJsZShjdXJyZW50UGFnZSkpDQotICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50UGFnZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCisg
ICAgY2hhciogY3VycmVudFBhZ2UgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJl
dF9jYXN0PERXT1JEPih0aGlzRnJhbWUpICYgfihwYWdlU2l6ZSAtIDEpKTsNCisgICAgdm9pZCog
bG93ZXJTdGFja0JvdW5kID0gZ2V0TG93ZXJTdGFja0JvdW5kKGN1cnJlbnRQYWdlLCBwYWdlU2l6
ZSk7DQorICAgIHZvaWQqIHVwcGVyU3RhY2tCb3VuZCA9IGdldFVwcGVyU3RhY2tCb3VuZChjdXJy
ZW50UGFnZSwgcGFnZVNpemUpOw0KIA0KLXZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQ0K
LXsNCi0gICAgaW50IGR1bW15Ow0KLSAgICBib29sIGlzR3Jvd2luZ0Rvd253YXJkOw0KLSAgICBt
X29yaWdpbiA9IGdldFN0YWNrTWF4KCZkdW1teSwgaXNHcm93aW5nRG93bndhcmQpOw0KLSAgICBt
X2JvdW5kID0gaXNHcm93aW5nRG93bndhcmQNCi0gICAgICAgID8gc3RhdGljX2Nhc3Q8Y2hhcio+
KG1fb3JpZ2luKSAtIGVzdGltYXRlZFN0YWNrU2l6ZQ0KLSAgICAgICAgOiBzdGF0aWNfY2FzdDxj
aGFyKj4obV9vcmlnaW4pICsgZXN0aW1hdGVkU3RhY2tTaXplOw0KKyAgICBtX29yaWdpbiA9IGlz
R3Jvd2luZ0Rvd253YXJkID8gdXBwZXJTdGFja0JvdW5kIDogbG93ZXJTdGFja0JvdW5kOw0KKyAg
ICBtX2JvdW5kID0gaXNHcm93aW5nRG93bndhcmQgPyBsb3dlclN0YWNrQm91bmQgOiB1cHBlclN0
YWNrQm91bmQ7DQogfQ0KIA0KICNlbGlmIE9TKFdJTkRPV1MpDQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78272</attachid>
            <date>2011-01-07 14:32:09 -0800</date>
            <delta_ts>2011-06-18 17:38:39 -0700</delta_ts>
            <desc>Fix for win32.</desc>
            <filename>26276.win32.patch</filename>
            <type>text/plain</type>
            <size>3773</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzUyNzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTEtMDEtMDcgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyNjI3
NiAtIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudCBvbiBXSU5ET1dT
LCBTT0xBUklTLCBPUEVOQlNELCBTWU1CSUFOLCBIQUlLVSwgV0lOQ0UgcGxhdGZvcm1zCisKKyAg
ICAgICAgRml4IGZvciB3aW4zMi4gIFRoZSBiYXNlIG9mIHRoZSBzdGFjayBpcyBzdG9yZWQgaW4g
dGhlICJkZWFsbG9jYXRpb24gc3RhY2siIGZpZWxkIG9mIHRoZQorICAgICAgICBUaHJlYWQgSW5m
b3JtYXRpb24gQmxvY2sgLSBzZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2luMzJf
VGhyZWFkX0luZm9ybWF0aW9uX0Jsb2NrCisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uIQor
CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmNwcDoKKyAgICAgICAgKFdURjo6U3RhY2tCb3Vu
ZHM6OmluaXRpYWxpemUpOgorCiAyMDExLTAxLTA3ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBVcGRhdGUgcmVhY3QtdG8tdnNwcm9wcy1jaGFuZ2VzLnB5IGFmdGVy
IHI3NDg1NQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5kcy5jcHAJ
KHJldmlzaW9uIDc1MjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGFja0JvdW5k
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNlbGlmIE9TKFdJTkRPV1Mp
CiAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2VsaWYgT1Mo
SEFJS1UpCiAKQEAgLTYwLDEyICs2MSwxMiBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIEJ1ZyAyNjI3
NiAtIE5lZWQgYSBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHN0YWNrIGV4dGVudAogLy8KIC8vIFRo
ZXNlIHBsYXRmb3JtcyBzaG91bGQgbm93IGJlIHdvcmtpbmcgY29ycmVjdGx5OgotLy8gICAgIERB
UldJTiwgUU5YLCBVTklYCisvLyAgICAgREFSV0lOLCBXSU5ET1dTLUNQVShYODYpLCBRTlgsIFVO
SVgsIFdJTkNFCiAvLyBUaGVzZSBwbGF0Zm9ybXMgYXJlIG5vdDoKLS8vICAgICBXSU5ET1dTLCBT
T0xBUklTLCBPUEVOQlNELCBTWU1CSUFOLCBIQUlLVSwgV0lOQ0UKKy8vICAgICBXSU5ET1dTLUNQ
VShYODZfNjQpLCBTT0xBUklTLCBPUEVOQlNELCBTWU1CSUFOLCBIQUlLVQogLy8KIC8vIEZJWE1F
OiByZW1vdmUgdGhpcyEgLSB0aGlzIGNvZGUgdW5zYWZlbHkgZ3Vlc3NlcyBhdCBzdGFjayBzaXpl
cyEKLSNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTT0xBUklTKSB8fCBPUyhPUEVOQlNEKSB8fCBPUyhT
WU1CSUFOKSB8fCBPUyhIQUlLVSkKKyNpZiAoT1MoV0lORE9XUykgJiYgQ1BVKFg4Nl82NCkpIHx8
IE9TKFNPTEFSSVMpIHx8IE9TKE9QRU5CU0QpIHx8IE9TKFNZTUJJQU4pIHx8IE9TKEhBSUtVKQog
Ly8gQmFzZWQgb24gdGhlIGN1cnJlbnQgbGltaXQgdXNlZCBieSB0aGUgSlNDIHBhcnNlciwgZ3Vl
c3MgdGhlIHN0YWNrIHNpemUuCiBzdGF0aWMgY29uc3QgcHRyZGlmZl90IGVzdGltYXRlZFN0YWNr
U2l6ZSA9IDEyOCAqIHNpemVvZih2b2lkKikgKiAxMDI0OwogLy8gVGhpcyBtZXRob2QgYXNzdW1l
cyB0aGUgc3RhY2sgaXMgZ3Jvd2luZyBkb3dud2FyZHMuCkBAIC0yNDcsMzkgKzI0OCwzNyBAQCB2
b2lkIFN0YWNrQm91bmRzOjppbml0aWFsaXplKCkKICAgICBtX2JvdW5kID0gaXNHcm93aW5nRG93
bndhcmQgPyBsb3dlclN0YWNrQm91bmQgOiB1cHBlclN0YWNrQm91bmQ7CiB9CiAKLSNlbGlmIE9T
KFdJTkRPV1MpCisjZWxpZiBPUyhXSU5ET1dTKSAmJiAoQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkp
CiAKIHZvaWQgU3RhY2tCb3VuZHM6OmluaXRpYWxpemUoKQogewotI2lmIENQVShYODYpICYmIENP
TVBJTEVSKE1TVkMpCi0gICAgLy8gb2Zmc2V0IDB4MTggZnJvbSB0aGUgRlMgc2VnbWVudCByZWdp
c3RlciBnaXZlcyBhIHBvaW50ZXIgdG8KLSAgICAvLyB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIGJs
b2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQKKyNpZiBDUFUoWDg2KQorICAgIC8vIE9mZnNldCAw
eDE4IGZyb20gdGhlIEZTIHNlZ21lbnQgcmVnaXN0ZXIgZ2l2ZXMgYSBwb2ludGVyIHRvCisgICAg
Ly8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBibG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLgog
ICAgIE5UX1RJQiogcFRpYjsKKyNpZiBDT01QSUxFUihNU1ZDKQogICAgIF9fYXNtIHsKICAgICAg
ICAgTU9WIEVBWCwgRlM6WzE4aF0KICAgICAgICAgTU9WIHBUaWIsIEVBWAogICAgIH0KLSAgICBt
X29yaWdpbiA9IHN0YXRpY19jYXN0PHZvaWQqPihwVGliLT5TdGFja0Jhc2UpOwotI2VsaWYgQ1BV
KFg4NikgJiYgQ09NUElMRVIoR0NDKQotICAgIC8vIG9mZnNldCAweDE4IGZyb20gdGhlIEZTIHNl
Z21lbnQgcmVnaXN0ZXIgZ2l2ZXMgYSBwb2ludGVyIHRvCi0gICAgLy8gdGhlIHRocmVhZCBpbmZv
cm1hdGlvbiBibG9jayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkCi0gICAgTlRfVElCKiBwVGliOwor
I2Vsc2UKICAgICBhc20gKCAibW92bCAlJWZzOjB4MTgsICUwXG4iCiAgICAgICAgICAgOiAiPXIi
IChwVGliKQogICAgICAgICApOworI2VuZGlmCisgICAgLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvV2luMzJfVGhyZWFkX0luZm9ybWF0aW9uX0Jsb2NrIGZvciBtb3JlIGluZm9y
bWF0aW9uIQorICAgIHZvaWQqIHBEZWFsbG9jYXRpb25TdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHBUaWIpICsgMHhFMEM7CiAgICAgbV9vcmlnaW4gPSBzdGF0aWNfY2FzdDx2b2lkKj4o
cFRpYi0+U3RhY2tCYXNlKTsKKyAgICBtX2JvdW5kID0gKnN0YXRpY19jYXN0PHZvaWQqKj4ocERl
YWxsb2NhdGlvblN0YWNrKTsKICNlbGlmIENQVShYODZfNjQpCiAgICAgUE5UX1RJQjY0IHBUaWIg
PSByZWludGVycHJldF9jYXN0PFBOVF9USUI2ND4oTnRDdXJyZW50VGViKCkpOwogICAgIG1fb3Jp
Z2luID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocFRpYi0+U3RhY2tCYXNlKTsKLSNlbHNlCi0j
ZXJyb3IgTmVlZCBhIHdheSB0byBnZXQgdGhlIHN0YWNrIGJvdW5kcyBvbiB0aGlzIHBsYXRmb3Jt
IChXaW5kb3dzKQotI2VuZGlmCi0gICAgLy8gTG9va3MgbGlrZSB3ZSBzaG91bGQgYmUgYWJsZSB0
byBnZXQgcFRpYi0+U3RhY2tMaW1pdAogICAgIG1fYm91bmQgPSBlc3RpbWF0ZVN0YWNrQm91bmQo
bV9vcmlnaW4pOworI2VuZGlmCiB9CiAKICNlbHNlCi0jZXJyb3IgTmVlZCBhIHdheSB0byBnZXQg
dGhlIHN0YWNrIGJvdW5kcyBvbiB0aGlzIHBsYXRmb3JtCisjZXJyb3IgTmVlZCBhIHdheSB0byBn
ZXQgdGhlIHN0YWNrIGJvdW5kcyBvbiB0aGlzIHBsYXRmb3JtLgogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdURgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>