<?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>16202</bug_id>
          
          <creation_ts>2007-11-30 03:58:15 -0800</creation_ts>
          <short_desc>Optimize allocation of ActivationImp objects</short_desc>
          <delta_ts>2008-01-11 18:13:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>62772</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-11-30 03:58:15 -0800</bug_when>
    <thetext>During the recent flood of optimization of JavaScriptCore, profiling has revealed that a major issue for performance in the existing interpreter is the allocation of ActivationImp objects on the JS heap. In particular, this is likely the cause for JSC&apos;s poor performance on control-flow heavy benchmarks in the SunSpider suite relative to other benchmarks.

Most ActivationImp objects do not need to be allocated in the garbage collected heap, because they only exist for a static extent. We would like to keep a WTF::Vector of ActivationImps that we can use as a stack for most purposes. The question is when we need an ActivationImp to  be torn off and be heap allocated. For now, I think we need to do it in the following cases:

1) eval

2) with

3) try ... catch

4) local function definitions

5) function expressions

If I am missing anything, please let me know. Some of these may be possible to eliminate with some form of eval limiting (see bug 15759), but that is a hard problem, so we can&apos;t rely on it being solved for now. We may also be able to determine a number of these situations statically and mark the node tree so we don&apos;t even allocate on the ActivationImp stack in the first place.

Some issues creep up in the implementation. Every ActivationImp also heap allocates a private data structure and keeps a pointer to it (to get around the JSObject size restriction), so we need to also allocate this information on the stack. My idea was to create a friend class StackActivation that stores both an ActivationImp and an ActivationImpPrivate object:

We need to be sure we update all the pointers to the ActivationImp or ActivationImpPrivate when we tear off onto the heap. As far as I can tell, the only ones that need to be updated are:

1) The pointer from the ActivationImp to the ActivationImpPrivate

2) ExecState::m_activation

3) ExecState::m_variable

4) The top of the scope chain

5) ExecState::m_localStorageBuffer (points into the local storage allocated in ActivationImpPrivate)

Is this all of them?

I should note that a proper implementation of this optimization is particularly  important for any future bytecode interpreter, because the gains that come from not allocating activation frames on the heap will be more pronounced in that situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62776</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-11-30 04:21:01 -0800</bug_when>
    <thetext>Hum... so now all we need is the patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62787</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-11-30 05:52:21 -0800</bug_when>
    <thetext>The analysis here seems generally sound. I said on IRC that I&apos;m not sure you need to tear off in cases 2 and 3. But you may want to anyway, since then tearoff is always for the current top of the scope chain, even though sometimes it happens before the moment a closure truly needs it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62804</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-11-30 11:30:37 -0800</bug_when>
    <thetext>In the general case, where we don&apos;t need an ActivationImp, I think we can just put LocalStorage directly into the stack-allocated ExecState. When we do need an ActivationImp, we can allocate it, and move LocalStorage from the ExecState to the ActivationImp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62823</commentid>
    <comment_count>4</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-11-30 15:13:21 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; The analysis here seems generally sound. I said on IRC that I&apos;m not sure you
&gt; need to tear off in cases 2 and 3. But you may want to anyway, since then
&gt; tearoff is always for the current top of the scope chain, even though sometimes
&gt; it happens before the moment a closure truly needs it.

Cases 2 and 3 push an object on the top of the scope chain, so that when we would go to tear off an ActivationImp upon seeing a function expression, we would have to change pointers to the ActivationImp further up the scope chain. Am I incorrect here?

(In reply to comment #3)
&gt; In the general case, where we don&apos;t need an ActivationImp, I think we can just
&gt; put LocalStorage directly into the stack-allocated ExecState. When we do need
&gt; an ActivationImp, we can allocate it, and move LocalStorage from the ExecState
&gt; to the ActivationImp.

Doesn&apos;t JavaScriptCore already have stack space issues? Is there a consensus that this is the best idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62865</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-01 02:33:59 -0800</bug_when>
    <thetext>When Geoff says &quot;stack-allocated&quot; he does not necessarily mean the machine stack, more likely he means an explicit stack managed as a Vector or the like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62954</commentid>
    <comment_count>6</comment_count>
      <attachid>17642</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-12-02 05:04:21 -0800</bug_when>
    <thetext>Created attachment 17642
Patch in progress

Here&apos;s an implementation of the basic idea. I used a Deque instead of a Vector, because on resize a Vector will copy all of the deeper ActivationImps as well, and those will have pointers into them from ExecStates further up the stack. For this to actually be a performance gain we will have to implement a segmented stack, but that will be easy once we get the mechanics right.

I didn&apos;t actually insert the calls to Interpreter::tearOffActivation() everywhere, because I want to check a few more things. However, I uploaded it now since I have a few other things to do today and Eric has been on my case to upload something for a while. ;-)

No ChangeLog because it&apos;s clearly not meant for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64928</commentid>
    <comment_count>7</comment_count>
      <attachid>18026</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-12-21 00:25:21 -0800</bug_when>
    <thetext>Created attachment 18026
Revised patch in progress

Here&apos;s a new version of the patch. It runs most tests in the JSC test suite, but it still segfaults on the odd one, which perhaps means that there is a reference to the old ActivationImp lying around that I missed. I also frequently get the error:

ERROR: free is not supported
(/Users/Cameron/WebKit/JavaScriptCore/kjs/CollectorHeapIntrospector.h:56 static void KJS::CollectorHeapIntrospector::zoneFree(malloc_zone_t*, void*))

However, this is probably due to the destructor automatically being called on the ActivationImp that is a member of StackActivation.

I think this patch is pretty close to being completely functional. When it is, we&apos;ll just need to make the right segmented stack data structure so we can get some performance out of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65335</commentid>
    <comment_count>8</comment_count>
      <attachid>18125</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2007-12-26 23:11:07 -0800</bug_when>
    <thetext>Created attachment 18125
Revised patch in progress

Here is a revised version of my patch in progress. I am focusing on getting it to pass all of the JSC tests without crashing. It is not quite there, but there are only a handful left. 

Running testkjs with debug output on some of the examples (e.g. /ecma/Date/15.9.5.7.js) reports that there are a number of KJS::Node leaks. I don&apos;t yet know if these are spurious, but I hope so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66004</commentid>
    <comment_count>9</comment_count>
      <attachid>18234</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-01 23:24:50 -0800</bug_when>
    <thetext>Created attachment 18234
Revised patch in progress

Just another update of the patch in progress. I am in the middle of fixing up the interaction with the GC, as that might be the cause of the few remaining problems. After I do some reorganization of header files for dependencies I&apos;ll upload another updated version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66016</commentid>
    <comment_count>10</comment_count>
      <attachid>18236</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-02 03:16:44 -0800</bug_when>
    <thetext>Created attachment 18236
Revised patch in progress

Well, this version passes all of the JSC tests in both Debug and Release modes without any problems. I also eliminated the cause of the CollectorHeapIntrospector warnings. 

I&apos;ll merge it with a newer tree tomorrow, add the correct forwarding headers, and run the JS layout tests. I&apos;m not expecting any issues. If that works then the only remaining issue is the inefficiency WTF::Deque data structure.

Also, is there a better way to copy the ActivationImpPrivate::localStorage than I did in this code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66276</commentid>
    <comment_count>11</comment_count>
      <attachid>18287</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-05 04:45:29 -0800</bug_when>
    <thetext>Created attachment 18287
Proposed patch

Here it is, passing all tests! I moved from a WTF::Deque data structure to an explicit list of arrays of activation records, which exposed some bugs that were not present before, most likely due to memory for each of the Deque records not being reused by anything else after being freed. I think it&apos;s pretty solid at this point. The JSC and layout tests contain a lot of the sort of things that might trip up a patch like this.

Here are the Sunspider results:

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           1.044x as fast    3321.7ms +/- 0.2%   3180.5ms +/- 0.1%     significant

=============================================================================

  3d:                  1.014x as fast     401.2ms +/- 0.2%    395.8ms +/- 0.1%     significant
    cube:              1.013x as fast     135.6ms +/- 0.3%    133.9ms +/- 0.3%     significant
    morph:             *1.004x as slow*   132.4ms +/- 0.3%    132.9ms +/- 0.2%     significant
    raytrace:          1.033x as fast     133.2ms +/- 0.2%    129.0ms +/- 0.0%     significant

  access:              1.047x as fast     533.0ms +/- 0.3%    509.1ms +/- 0.1%     significant
    binary-trees:      1.162x as fast      78.2ms +/- 0.4%     67.3ms +/- 0.5%     significant
    fannkuch:          1.056x as fast     249.3ms +/- 0.3%    236.1ms +/- 0.1%     significant
    nbody:             -                  147.7ms +/- 0.2%    147.8ms +/- 0.2% 
    nsieve:            ??                  57.8ms +/- 0.8%     57.9ms +/- 0.4%     not conclusive: might be *1.002x as slow*

  bitops:              1.062x as fast     404.8ms +/- 0.4%    381.0ms +/- 0.1%     significant
    3bit-bits-in-byte: 1.101x as fast      81.5ms +/- 0.6%     74.0ms +/- 0.0%     significant
    bits-in-byte:      1.109x as fast     104.8ms +/- 0.3%     94.5ms +/- 0.4%     significant
    bitwise-and:       1.068x as fast     111.8ms +/- 1.1%    104.7ms +/- 0.3%     significant
    nsieve-bits:       *1.010x as slow*   106.7ms +/- 0.3%    107.8ms +/- 0.3%     significant

  controlflow:         1.25x as fast      111.8ms +/- 0.3%     89.5ms +/- 0.6%     significant
    recursive:         1.25x as fast      111.8ms +/- 0.3%     89.5ms +/- 0.6%     significant

  crypto:              1.088x as fast     263.5ms +/- 0.2%    242.2ms +/- 0.3%     significant
    aes:               1.006x as fast      80.2ms +/- 0.4%     79.7ms +/- 0.4%     significant
    md5:               1.144x as fast      92.7ms +/- 0.4%     81.0ms +/- 0.4%     significant
    sha1:              1.112x as fast      90.6ms +/- 0.4%     81.5ms +/- 0.5%     significant

  date:                1.026x as fast     291.3ms +/- 0.1%    284.0ms +/- 0.2%     significant
    format-tofte:      1.004x as fast     133.3ms +/- 0.3%    132.8ms +/- 0.3%     significant
    format-xparb:      1.045x as fast     158.0ms +/- 0.0%    151.2ms +/- 0.2%     significant

  math:                1.037x as fast     428.1ms +/- 0.3%    413.0ms +/- 0.2%     significant
    cordic:            1.025x as fast     172.0ms +/- 0.5%    167.8ms +/- 0.4%     significant
    partial-sums:      -                  163.2ms +/- 0.5%    162.8ms +/- 0.2% 
    spectral-norm:     1.127x as fast      92.9ms +/- 0.4%     82.4ms +/- 0.4%     significant

  regexp:              *1.060x as slow*   207.4ms +/- 0.2%    219.8ms +/- 0.4%     significant
    dna:               *1.060x as slow*   207.4ms +/- 0.2%    219.8ms +/- 0.4%     significant

  string:              1.053x as fast     680.6ms +/- 0.2%    646.1ms +/- 0.2%     significant
    base64:            1.016x as fast      99.3ms +/- 0.6%     97.7ms +/- 0.5%     significant
    fasta:             1.039x as fast     172.5ms +/- 0.5%    166.0ms +/- 0.3%     significant
    tagcloud:          1.067x as fast     146.5ms +/- 0.5%    137.3ms +/- 0.3%     significant
    unpack-code:       1.090x as fast     150.9ms +/- 0.3%    138.5ms +/- 0.3%     significant
    validate-input:    1.045x as fast     111.4ms +/- 1.1%    106.6ms +/- 0.8%     significant

As you can see, it&apos;s a nice improvement across the board and an even better improvement on benchmarks that use a lot of function calls. The only test that is slightly mysterious is the regexp-dna test, because it doesn&apos;t have any user functions and thus shouldn&apos;t be getting a significant hit. It might be a code layout issue.

The one thing I didn&apos;t do was attempt to annotate the syntax tree so that many cases of tear-off could be avoided by simply allocating the activation record on the JS heap in the first place. This might give a slight performance improvement.

I didn&apos;t even bother including a ChangeLog at this point, because I know the style police are going to be all over me with this one. I apologize in advance if there is anything particularly bad in the code, but it is difficult to do some of the things in the patch in a completely clean way.

I know a lot of people, myself included, want to see this landed soon, so I will try to be extremely responsive to any comments and suggestions from reviewers. Hopefully, we can get a final version in a few days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66326</commentid>
    <comment_count>12</comment_count>
      <attachid>18287</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-05 17:20:01 -0800</bug_when>
    <thetext>Comment on attachment 18287
Proposed patch

Obviously the commented out printf()s will need to be removed.  Also, the indenting is incorrect on things like ActivationImp::init, 4 spaces instead of 2.

Single line ifs are two lines:
if (!switchGlobal) exec-&gt;dynamicGlobalObject()-&gt;tearOffActivation(exec);

Otherwise looks OK.  mjs definitely should look at this.

You should read: http://webkit.org/coding/coding-style.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66327</commentid>
    <comment_count>13</comment_count>
      <attachid>18292</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-05 18:26:15 -0800</bug_when>
    <thetext>Created attachment 18292
Revised proposed patch

(In reply to comment #12)
&gt; (From update of attachment 18287 [edit])
&gt; Obviously the commented out printf()s will need to be removed.

Oops! Took those out.

&gt; Also, the
&gt; indenting is incorrect on things like ActivationImp::init, 4 spaces instead of
&gt; 2.

There might be an indentation problem somewhere, due to the inconsistent indentation throughout JSC, but I used 2 spaces for ActivationImp::init.

&gt; Single line ifs are two lines:
&gt; if (!switchGlobal) exec-&gt;dynamicGlobalObject()-&gt;tearOffActivation(exec);

Fixed.

&gt; You should read: http://webkit.org/coding/coding-style.html

I&apos;ve read it, but I still occasionally make some mistakes. Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66330</commentid>
    <comment_count>14</comment_count>
      <attachid>18293</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-05 19:15:19 -0800</bug_when>
    <thetext>Created attachment 18293
Revised proposed patch

Some indentation fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66385</commentid>
    <comment_count>15</comment_count>
      <attachid>18293</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-06 11:54:24 -0800</bug_when>
    <thetext>Comment on attachment 18293
Revised proposed patch

I think this looks really good. Lets get it landed!

Despite your reason for not including it, I still wish there was a change log here.

I suggest naming the new header file Activation.h -- we&apos;re going to rename ActivationImp to Activation soon, and it would be nice not to have to rename the file.

Why all the additional includes? Without a change log, I don&apos;t understand the need for them and for changes like the one where you add the KJS:: prefix in NP_jsobject.cpp.

 25 #ifndef KJS_ACTIVATIONIMP_H
 26 #define KJS_ACTIVATIONIMP_H

As per style guidelines, this should be ActivationImp_h, not KJS_ACTIVATIONIMP_H.

 32 #define KJS_ACTIVATION_STACK_SIZE 32

Something like this does not need to be a define. Instead, it should be a constant.

    const int activationStackSize = 12;

(Or maybe unsigned or size_t.)

 36     class StackActivation;
 37     class FunctionImp;
 38     class Arguments;

These should be sorted alphabetically.

 41         friend class StackActivation;
 42         friend class JSGlobalObject;

Do we really need these friend declarations? We usually try to avoid them if possible.

 44         using JSVariableObject::JSVariableObjectData;

How does this &quot;using&quot; help us?

 46         struct ActivationImpData : public JSVariableObject::JSVariableObjectData {

Because of the &quot;using&quot; you don&apos;t need to qualify the JSVariableObjectData here with the class name.

 48             ActivationImpData(const ActivationImpData&amp;);

It&apos;s a minor problem that you have a copy constructor here without an assignment operator. Perhaps you should inherit from Noncopyable to make sure you get a compiler error if you try to do assignment on this. StackActivation has the same issue.

Why not call it &quot;ActivationData&quot; instead of &quot;ActivationImpData&quot;?

 61         virtual ~ActivationImp()
 62         {
 63             if (!d()-&gt;onStack)
 64                 delete d();
 65         }

This should be in the .cpp file, not the header.

 80         bool isOnStack() { return d()-&gt;onStack; }

Maybe this should be a const member?

 86         ActivationImpData* d() { return static_cast&lt;ActivationImpData*&gt;(JSVariableObject::d); }

I am not a fan of the name &quot;d()&quot; for this. I&apos;d prefer a word rather than a letter.

 93         ~StackActivation() { } 

This destructor definition has no effect. You should omit it.

108      ActivationImp* activation = new ActivationImp(this);
109      m_activation = activation;
110      m_localStorage = &amp;activation-&gt;localStorage();
111      m_variableObject = activation;
112      m_scopeChain.push(activation);

 110     m_activation = globalObject-&gt;pushActivation(this);
 111     m_localStorage = &amp;m_activation-&gt;localStorage();
 112     m_variableObject = m_activation;
 113     m_scopeChain.push(m_activation);

Why did you eliminate the use of a local variable here? Seems unrelated to the change, makes the patch bigger, and might even make things less efficient. Or does it make things more efficient?

 119     if (m_codeType == FunctionCode &amp;&amp; static_cast&lt;ActivationImp*&gt;(m_activation)-&gt;isOnStack())
 120         m_globalObject-&gt;popActivation();

Seeing this code makes me think we should have a derived class for each of the 3 kinds of ExecState, so we don&apos;t have to have the check for m_codeType == FunctionCode in the destructor. Or we could just have the one additional kind, FunctionExecState.

 80         void setScopeChainTop(JSObject* o) { m_scopeChain.set(o); }

I think the word &quot;replace&quot; might be clearer here than &quot;set&quot;.

3232 #include &quot;SavedBuiltins.h&quot;
 33 #include &quot;ActivationImp.h&quot;
3334 #include &quot;array_object.h&quot;

We normally keep these lists of includes sorted alphabetically.

 525     d()-&gt;activationCount--;
 526     d()-&gt;activations-&gt;data[d()-&gt;activationCount].activationDataStorage.localStorage.shrink(0);

Since you use post-increment when pushing, I think pre-decrement here when popping would be good instead of a separate line of code for the decrement.

 532         if (!d()-&gt;activationCount) {
 533             ActivationStackNode* prev = d()-&gt;activations-&gt;prev;
 534             delete d()-&gt;activations;
 535             d()-&gt;activations = prev;
 536             d()-&gt;activationCount = KJS_ACTIVATION_STACK_SIZE;
 537         }
 538         
 539         ActivationImp* newActivation = new ActivationImp(&amp;d()-&gt;activations-&gt;data[d()-&gt;activationCount - 1]);
 540         
 541         popActivation();

This looks inefficient, since popActivation is going to check activationCount against 0 again. Is there a way to write this to avoid the double work? Is there a way to write it to avoid the copied and pasted code to delete the activation?

 235         ActivationImp* pushActivation(ExecState* exec);
 236         void popActivation();
 237         void tearOffActivation(ExecState* exec);

We normally omit names of parameters like this &quot;exec&quot; here.

 59             JSVariableObjectData() { }

 81         JSVariableObject() { }

How are these empty constructors helpful?

= 66             JSVariableObjectData(const JSVariableObjectData&amp; old)
 67             {
 68                 localStorage.reserveCapacity(old.localStorage.size());
 69                 
 70                 for (LocalStorage::const_iterator iter = old.localStorage.begin(); iter != old.localStorage.end(); ++iter)
 71                     localStorage.append(*iter);
 72                 
 73                 symbolTable = old.symbolTable;
 74             }

This looks identical to what the compiler-generated copy constructor would do. And I expect it would do it more efficiently too. Can you just omit this?

 91       e-&gt;dynamicGlobalObject()-&gt;tearOffActivation(e);
9092       return e-&gt;activationObject()-&gt;get(exec, propertyName);

I suggest that we change the idiom here so that there&apos;s a single function that gets you the activation object, tearing it off if needed. The callers should make the call directly on ExecState and not have to talk directly to the global object.

 347 ActivationImp::ActivationImp(StackActivation* oldStackEntry)
 348 {
 349   JSVariableObject::d = new ActivationImpData(oldStackEntry-&gt;activationDataStorage);
 350 }

This should be indented 4 to match the rest of the file.

 388         ExecState* e = exec;
 389         while (e) {
 390             if (e-&gt;function() == d()-&gt;function) {
 391                 e-&gt;dynamicGlobalObject()-&gt;tearOffActivation(e);
 392                 ActivationImp* newActivation = e-&gt;activationObject();
 393                 slot.setCustom(newActivation, newActivation-&gt;getArgumentsGetter());
 394                 return true;
 395             }
 396 
 397             e = e-&gt;callingExecState();
 398         }

This should be written as a for loop so it&apos;s easier to see the loop structure.

 436     size_t size = d()-&gt;localStorage.size();
 437     
 438     for (size_t i = 0; i &lt; size; ++i) {
 439         JSValue* value = d()-&gt;localStorage[i].value;
 440         
 441         if (!value-&gt;marked())
 442             value-&gt;mark();
 443     }

It seems that we want to hoist d()-&gt;localStorage out of the loop, unless we think the compiler will do it for us.

 460 ActivationImp::ActivationImpData::ActivationImpData(const ActivationImpData&amp; old)
 461   : JSVariableObjectData(old)
 462 {
 463     exec = old.exec;
 464     function = old.function;
 465     argumentsObject = old.argumentsObject;
 466     onStack = false;
 467 }

Why not use construction syntax here instead of assignment syntax?

12861286     base = *iter;
12871287     if (base-&gt;getPropertySlot(exec, m_ident, slot)) {
 1288         base = *iter;

Why this change? This really needs a comment, in the change log if nowhere else.

 2  *  This file is part of the KDE libraries

Please leave that out of new source files.

 32             if ((o-&gt;isActivationObject() &amp;&amp; static_cast&lt;ActivationImp*&gt;(o)-&gt;isOnStack()) || !o-&gt;marked())
 33                 o-&gt;mark();

I think this needs a comment. I also think that the function to mark activation objects that are on the stack should be something other than &quot;mark()&quot; itself. That would save a branch inside the function because the new function would only be for the activations on the stack and the override of mark would only be for the activations that are not.

I&apos;m tempted to just make all these revisions myself and land this. But I&apos;m busy with something else at the moment -- I&apos;ll mark this review-, but if I have time I&apos;ll grab this and work on whipping into a shape a little and landing it later. If I do that I&apos;ll add a comment and assign this bug to myself to indicate I&apos;m doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66412</commentid>
    <comment_count>16</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-06 15:43:58 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 18293 [edit])
&gt; I think this looks really good. Lets get it landed!

Thanks. Maciej gave me some comments in the channel, so I&apos;ve already made some of your requested changes.

&gt; I suggest naming the new header file Activation.h -- we&apos;re going to rename
&gt; ActivationImp to Activation soon, and it would be nice not to have to rename
&gt; the file.

No problem. I can do that.

&gt; Why all the additional includes? Without a change log, I don&apos;t understand the
&gt; need for them and for changes like the one where you add the KJS:: prefix in
&gt; NP_jsobject.cpp.

Some header changes were made since I started working on this patch, so I can remove everything before ActivationImp.h.

&gt;  41         friend class StackActivation;
&gt;  42         friend class JSGlobalObject;
&gt; 
&gt; Do we really need these friend declarations? We usually try to avoid them if
&gt; possible.

Since the definition of ActivationImpData is private ActivationImp, in order for StackActivation to have one, it must be a friiend of ActivationImp. Either way, JSGlobalObject does, because d() is a private method of ActivationImp. Both of these conventions are consistent across the current code, so I didn&apos;t want to change them.
 
&gt;  44         using JSVariableObject::JSVariableObjectData;
&gt;
&gt; How does this &quot;using&quot; help us?

I actually don&apos;t know. But I also wasn&apos;t the one to add it. I only copied it from function.h to ActivationImp.h

&gt;  46         struct ActivationImpData : public
&gt; JSVariableObject::JSVariableObjectData {
&gt; 
&gt; Because of the &quot;using&quot; you don&apos;t need to qualify the JSVariableObjectData here
&gt; with the class name.

I just removed the &quot;using&quot; instead. Is that better?

&gt;  48             ActivationImpData(const ActivationImpData&amp;);
&gt; 
&gt; It&apos;s a minor problem that you have a copy constructor here without an
&gt; assignment operator. Perhaps you should inherit from Noncopyable to make sure
&gt; you get a compiler error if you try to do assignment on this. StackActivation
&gt; has the same issue.
&gt; 
&gt; Why not call it &quot;ActivationData&quot; instead of &quot;ActivationImpData&quot;?

Because the class already exists in function.h and is called ActivationImpData. I didn&apos;t want to change the name of an existing class.

&gt;  80         bool isOnStack() { return d()-&gt;onStack; }
&gt; 
&gt; Maybe this should be a const member?

It can&apos;t be a member, because we can&apos;t make ActivationImp any bigger.

&gt;  86         ActivationImpData* d() { return
&gt; static_cast&lt;ActivationImpData*&gt;(JSVariableObject::d); }
&gt; 
&gt; I am not a fan of the name &quot;d()&quot; for this. I&apos;d prefer a word rather than a
&gt; letter.

Again, I did not introduce it. It was there before for ActivationImp, and seems to be an idiom in the code for anything that inherits from JSVariableObject, to cast JSVariableObject::d to its own class that inherits from JSVariableObjectData.

&gt; 108      ActivationImp* activation = new ActivationImp(this);
&gt; 109      m_activation = activation;
&gt; 110      m_localStorage = &amp;activation-&gt;localStorage();
&gt; 111      m_variableObject = activation;
&gt; 112      m_scopeChain.push(activation);
&gt; 
&gt;  110     m_activation = globalObject-&gt;pushActivation(this);
&gt;  111     m_localStorage = &amp;m_activation-&gt;localStorage();
&gt;  112     m_variableObject = m_activation;
&gt;  113     m_scopeChain.push(m_activation);
&gt; 
&gt; Why did you eliminate the use of a local variable here? Seems unrelated to the
&gt; change, makes the patch bigger, and might even make things less efficient. Or
&gt; does it make things more efficient?

I&apos;ll change it back.

&gt;  119     if (m_codeType == FunctionCode &amp;&amp;
&gt; static_cast&lt;ActivationImp*&gt;(m_activation)-&gt;isOnStack())
&gt;  120         m_globalObject-&gt;popActivation();
&gt; 
&gt; Seeing this code makes me think we should have a derived class for each of the
&gt; 3 kinds of ExecState, so we don&apos;t have to have the check for m_codeType ==
&gt; FunctionCode in the destructor. Or we could just have the one additional kind,
&gt; FunctionExecState.

Sounds like it might be a good idea, but this patch is not really the place for the change, is it?

&gt; 3232 #include &quot;SavedBuiltins.h&quot;
&gt;  33 #include &quot;ActivationImp.h&quot;
&gt; 3334 #include &quot;array_object.h&quot;
&gt; 
&gt; We normally keep these lists of includes sorted alphabetically.

I know, but I was adding one file to an existing list that is already not alphabetical. I&apos;ll resort it.

&gt;  532         if (!d()-&gt;activationCount) {
&gt;  533             ActivationStackNode* prev = d()-&gt;activations-&gt;prev;
&gt;  534             delete d()-&gt;activations;
&gt;  535             d()-&gt;activations = prev;
&gt;  536             d()-&gt;activationCount = KJS_ACTIVATION_STACK_SIZE;
&gt;  537         }
&gt;  538         
&gt;  539         ActivationImp* newActivation = new
&gt; ActivationImp(&amp;d()-&gt;activations-&gt;data[d()-&gt;activationCount - 1]);
&gt;  540         
&gt;  541         popActivation();
&gt; 
&gt; This looks inefficient, since popActivation is going to check activationCount
&gt; against 0 again. Is there a way to write this to avoid the double work? Is
&gt; there a way to write it to avoid the copied and pasted code to delete the
&gt; activation?

I could make another inline function that both of them call. I should also probably do the same with this code, duplicated between the two functions:

    if (!d()-&gt;activationCount) {
        ActivationStackNode* prev = d()-&gt;activations-&gt;prev;
        delete d()-&gt;activations;
        d()-&gt;activations = prev;
        d()-&gt;activationCount = activationStackSize;
    }

&gt;  59             JSVariableObjectData() { }
&gt; 
&gt;  81         JSVariableObject() { }
&gt; 
&gt; How are these empty constructors helpful?

They are are all required because StackActivation has both a JSVariableObject and a JSVariableObjectData as members, and they need to be allocated without doing any initialization.

&gt;  91       e-&gt;dynamicGlobalObject()-&gt;tearOffActivation(e);
&gt; 9092       return e-&gt;activationObject()-&gt;get(exec, propertyName);
&gt; 
&gt; I suggest that we change the idiom here so that there&apos;s a single function that
&gt; gets you the activation object, tearing it off if needed. The callers should
&gt; make the call directly on ExecState and not have to talk directly to the global
&gt; object.

It&apos;s only used twice and there still needs to be explicit tear-off elsewhere, so is it really worth it?

&gt;  388         ExecState* e = exec;
&gt;  389         while (e) {
&gt;  390             if (e-&gt;function() == d()-&gt;function) {
&gt;  391                 e-&gt;dynamicGlobalObject()-&gt;tearOffActivation(e);
&gt;  392                 ActivationImp* newActivation = e-&gt;activationObject();
&gt;  393                 slot.setCustom(newActivation,
&gt; newActivation-&gt;getArgumentsGetter());
&gt;  394                 return true;
&gt;  395             }
&gt;  396 
&gt;  397             e = e-&gt;callingExecState();
&gt;  398         }
&gt; 
&gt; This should be written as a for loop so it&apos;s easier to see the loop structure.

I just copied the existing code, but I&apos;ll change it to a for loop.

&gt;  436     size_t size = d()-&gt;localStorage.size();
&gt;  437     
&gt;  438     for (size_t i = 0; i &lt; size; ++i) {
&gt;  439         JSValue* value = d()-&gt;localStorage[i].value;
&gt;  440         
&gt;  441         if (!value-&gt;marked())
&gt;  442             value-&gt;mark();
&gt;  443     }
&gt; 
&gt; It seems that we want to hoist d()-&gt;localStorage out of the loop, unless we
&gt; think the compiler will do it for us.

I&apos;ll make the change, but there should also be a better way to copy a Vector than iterating through the elements.

&gt; 12861286     base = *iter;
&gt; 12871287     if (base-&gt;getPropertySlot(exec, m_ident, slot)) {
&gt;  1288         base = *iter;
&gt; 
&gt; Why this change? This really needs a comment, in the change log if nowhere
&gt; else.

getPropertySlot can now cause an activation record to get torn off when you ask for the slot for &quot;arguments&quot;, so anything that asks for it must check to get the activation record again. I&apos;ll add it as a comment.

&gt;  32             if ((o-&gt;isActivationObject() &amp;&amp;
&gt; static_cast&lt;ActivationImp*&gt;(o)-&gt;isOnStack()) || !o-&gt;marked())
&gt;  33                 o-&gt;mark();
&gt; 
&gt; I think this needs a comment. I also think that the function to mark activation
&gt; objects that are on the stack should be something other than &quot;mark()&quot; itself.
&gt; That would save a branch inside the function because the new function would
&gt; only be for the activations on the stack and the override of mark would only be
&gt; for the activations that are not.

That makes sense.

&gt; I&apos;m tempted to just make all these revisions myself and land this. But I&apos;m busy
&gt; with something else at the moment -- I&apos;ll mark this review-, but if I have time
&gt; I&apos;ll grab this and work on whipping into a shape a little and landing it later.
&gt; If I do that I&apos;ll add a comment and assign this bug to myself to indicate I&apos;m
&gt; doing so.

I&apos;ll make the changes you wanted (besides the ones I still have questions about) and post a new patch soon.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66425</commentid>
    <comment_count>17</comment_count>
      <attachid>18307</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-06 18:44:15 -0800</bug_when>
    <thetext>Created attachment 18307
Revised proposed patch

Here is a revised version that incorporates most of the changes Darin requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66436</commentid>
    <comment_count>18</comment_count>
      <attachid>18307</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-01-07 01:54:56 -0800</bug_when>
    <thetext>Comment on attachment 18307
Revised proposed patch

I reviewed this. The style is looking pretty good, I made a few suggestions on IRC.

The only showstopper is that this has a potential crashing bug when tearing off an activation that is not the top opne (which can only happen when getting the &quot;arguments&quot; property from a function object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66486</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-07 12:45:24 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt;  46         struct ActivationImpData : public
&gt; &gt; JSVariableObject::JSVariableObjectData {
&gt; &gt; 
&gt; &gt; Because of the &quot;using&quot; you don&apos;t need to qualify the JSVariableObjectData here
&gt; &gt; with the class name.
&gt; 
&gt; I just removed the &quot;using&quot; instead. Is that better?

Yes, I think so.

&gt; &gt;  80         bool isOnStack() { return d()-&gt;onStack; }
&gt; &gt; 
&gt; &gt; Maybe this should be a const member?
&gt; 
&gt; It can&apos;t be a member, because we can&apos;t make ActivationImp any bigger.

I was referring to isOnStack(), not onStack. Making it a const member function instead of non-const.

&gt; &gt;  119     if (m_codeType == FunctionCode &amp;&amp;
&gt; &gt; static_cast&lt;ActivationImp*&gt;(m_activation)-&gt;isOnStack())
&gt; &gt;  120         m_globalObject-&gt;popActivation();
&gt; &gt; 
&gt; &gt; Seeing this code makes me think we should have a derived class for each of the
&gt; &gt; 3 kinds of ExecState, so we don&apos;t have to have the check for m_codeType ==
&gt; &gt; FunctionCode in the destructor. Or we could just have the one additional kind,
&gt; &gt; FunctionExecState.
&gt; 
&gt; Sounds like it might be a good idea, but this patch is not really the place for
&gt; the change, is it?

Well, the class-specific work is new to your patch. The branch to check the codeType is new. That&apos;s why I raised the issue. It could be done in separate patch, yes, either before or after this change. But it is this change to the class that creates the need for it.

&gt; &gt;  91       e-&gt;dynamicGlobalObject()-&gt;tearOffActivation(e);
&gt; &gt; 9092       return e-&gt;activationObject()-&gt;get(exec, propertyName);
&gt; &gt; 
&gt; &gt; I suggest that we change the idiom here so that there&apos;s a single function that
&gt; &gt; gets you the activation object, tearing it off if needed. The callers should
&gt; &gt; make the call directly on ExecState and not have to talk directly to the global
&gt; &gt; object.
&gt; 
&gt; It&apos;s only used twice and there still needs to be explicit tear-off elsewhere,
&gt; so is it really worth it?

Probably not.

&gt; &gt;  436     size_t size = d()-&gt;localStorage.size();
&gt; &gt;  437     
&gt; &gt;  438     for (size_t i = 0; i &lt; size; ++i) {
&gt; &gt;  439         JSValue* value = d()-&gt;localStorage[i].value;
&gt; &gt;  440         
&gt; &gt;  441         if (!value-&gt;marked())
&gt; &gt;  442             value-&gt;mark();
&gt; &gt;  443     }
&gt; &gt; 
&gt; &gt; It seems that we want to hoist d()-&gt;localStorage out of the loop, unless we
&gt; &gt; think the compiler will do it for us.
&gt; 
&gt; I&apos;ll make the change, but there should also be a better way to copy a Vector
&gt; than iterating through the elements.

There is. You can just use assignment to copy one vector to another.

But the code above is marking a vector, not copying a vector. So I&apos;m not sure what you mean.

&gt; 
&gt; &gt; 12861286     base = *iter;
&gt; &gt; 12871287     if (base-&gt;getPropertySlot(exec, m_ident, slot)) {
&gt; &gt;  1288         base = *iter;
&gt; &gt; 
&gt; &gt; Why this change? This really needs a comment, in the change log if nowhere
&gt; &gt; else.
&gt; 
&gt; getPropertySlot can now cause an activation record to get torn off when you ask
&gt; for the slot for &quot;arguments&quot;, so anything that asks for it must check to get
&gt; the activation record again. I&apos;ll add it as a comment.

It seems pointless to put base into a local variable if it&apos;s immediately going to be invalidated. I would probably structure it a little differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66548</commentid>
    <comment_count>20</comment_count>
      <attachid>18327</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-08 07:09:28 -0800</bug_when>
    <thetext>Created attachment 18327
Revised proposed patch

(In reply to comment #19)
&gt; &gt; &gt;  436     size_t size = d()-&gt;localStorage.size();
&gt; &gt; &gt;  437     
&gt; &gt; &gt;  438     for (size_t i = 0; i &lt; size; ++i) {
&gt; &gt; &gt;  439         JSValue* value = d()-&gt;localStorage[i].value;
&gt; &gt; &gt;  440         
&gt; &gt; &gt;  441         if (!value-&gt;marked())
&gt; &gt; &gt;  442             value-&gt;mark();
&gt; &gt; &gt;  443     }
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems that we want to hoist d()-&gt;localStorage out of the loop, unless we
&gt; &gt; &gt; think the compiler will do it for us.
&gt; &gt; 
&gt; &gt; I&apos;ll make the change, but there should also be a better way to copy a Vector
&gt; &gt; than iterating through the elements.
&gt; 
&gt; There is. You can just use assignment to copy one vector to another.
&gt; 
&gt; But the code above is marking a vector, not copying a vector. So I&apos;m not sure
&gt; what you mean.

Sorry. I think I was thinking about two things at once.

&gt; &gt; &gt; 12861286     base = *iter;
&gt; &gt; &gt; 12871287     if (base-&gt;getPropertySlot(exec, m_ident, slot)) {
&gt; &gt; &gt;  1288         base = *iter;
&gt; &gt; &gt; 
&gt; &gt; &gt; Why this change? This really needs a comment, in the change log if nowhere
&gt; &gt; &gt; else.
&gt; &gt; 
&gt; &gt; getPropertySlot can now cause an activation record to get torn off when you ask
&gt; &gt; for the slot for &quot;arguments&quot;, so anything that asks for it must check to get
&gt; &gt; the activation record again. I&apos;ll add it as a comment.
&gt; 
&gt; It seems pointless to put base into a local variable if it&apos;s immediately going
&gt; to be invalidated. I would probably structure it a little differently.

I structured it differently in the cases that don&apos;t use goto. Those could be rewritten as well, if you want, but I didn&apos;t want to change unrelated existing code.

Here&apos;s a new version of the patch that corrects the tear-off behaviour when tearing off something that is not at the top of the activation stack, and includes a test case to check for this (the test returned &apos;undefined&apos; before the change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66626</commentid>
    <comment_count>21</comment_count>
      <attachid>18327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-08 22:02:36 -0800</bug_when>
    <thetext>Comment on attachment 18327
Revised proposed patch

I think you accidentally pasted the old patch again. This is not updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66627</commentid>
    <comment_count>22</comment_count>
      <attachid>18327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-08 22:04:11 -0800</bug_when>
    <thetext>Comment on attachment 18327
Revised proposed patch

On second thought, maybe there are some updates, but the changes I requested have not been done -- is this really the latest version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66628</commentid>
    <comment_count>23</comment_count>
      <attachid>18344</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-08 22:04:26 -0800</bug_when>
    <thetext>Created attachment 18344
Revised proposed patch

Oops. Here&apos;s the actual patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66630</commentid>
    <comment_count>24</comment_count>
      <attachid>18344</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-08 22:18:50 -0800</bug_when>
    <thetext>Comment on attachment 18344
Revised proposed patch

This looks great. I am going to say review+, although if you decide to review this you may want to clear the review flag.

 27 #include &quot;JSVariableObject.h&quot;
 28 #include &quot;object.h&quot;
 29 #include &quot;ExecState.h&quot;

Should sort includes alphabetically. (We normally do this with straight &quot;sort&quot;, which puts the capital letters before the lowercase.)

 41         struct ActivationData : public JSVariableObject::JSVariableObjectData {

I think the fact that JSVariableObject is a base class means you won&apos;t have to qualify this at all. You could try removing the JSVariableObject prefix.

 59         void init(ExecState* exec);

We normally omit the argument name in cases like this where it&apos;s obvious.

 74         bool needsPop() const { return (d()-&gt;isOnStack || d()-&gt;leftRelic); }

I don&apos;t think the parentheses are helpful here.

 78         static JSValue* argumentsGetter(ExecState*, JSObject*, const Identifier&amp;, const PropertySlot&amp; slot);

Same rule here about omitting argument names -- we&apos;d normally omit that word &quot;slot&quot;.

 83     const size_t activationStackSize = 32;

This isn&apos;t actually a stack size. It&apos;s the size of the chunk of stack stored in each node, so it ought to have a name that doesn&apos;t make it seem like it&apos;s the size of the entire activation stack.

2828 #include &quot;JSGlobalObject.h&quot;
 29 #include &quot;Activation.h&quot;
2930 #include &quot;function.h&quot;
3031 #include &quot;internal.h&quot;
 32 #include &quot;scope_chain_mark.h&quot;

Activation.h should go first alphabetically, before JSGlobalObject.h.

 120     if (m_codeType == FunctionCode &amp;&amp; static_cast&lt;ActivationImp*&gt;(m_activation)-&gt;needsPop())
 121         m_globalObject-&gt;popActivation();

Why do you need to cast m_activation to ActivationImp*? Isn&apos;t that already the type of m_activation?

 504     if (d()-&gt;activationCount == activationStackSize) {
 505         ActivationStackNode* newNode = new ActivationStackNode;
 506         newNode-&gt;prev = d()-&gt;activations;
 507         d()-&gt;activations = newNode;
 508         d()-&gt;activationCount = 0;
 509       }

Closing brace here is indented incorrectly.

 1286         // If m_ident is &apos;arguments&apos;, the getPropertySlot() call may cause 
 1287         // base (which must be an ActivationImp in such this case) to be torn
 1288         // off from the activation stack, in which case we need to get it again
 1289         // from the ScopeChainIterator.
 1290 
 1291         JSObject* base = *iter;

Good comment, but it&apos;s less important now that there is no local variable base set up before getPropertySlot. And I feel bad for asking you to put it in -- we don&apos;t want the same comment copied and pasted at every call site. Should probably just have a comment that points at the top one (see xxx, where xxx is the name of the first function).

 30             JSObject *o = n-&gt;object;

The * should go next to the type, JSObject*.

 33             // JSobject::mark() method called on it, because it doesn&apos;t have an

Should say JSObject with a capital O. Also, it&apos;s not just JSObject::mark() that can&apos;t be called on it, but more importantly JSObject::marked().

 83         void replace(JSObject*);

I think this should be called replaceTop, not just replace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66632</commentid>
    <comment_count>25</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-08 22:23:04 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 18344 [edit])
&gt; This looks great. I am going to say review+, although if you decide to review
&gt; this you may want to clear the review flag.

I cleared the flag because I might as well make these changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66645</commentid>
    <comment_count>26</comment_count>
      <attachid>18346</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-01-09 00:51:31 -0800</bug_when>
    <thetext>Created attachment 18346
Revised proposed patch

Here it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66977</commentid>
    <comment_count>27</comment_count>
      <attachid>18346</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-01-11 16:11:36 -0800</bug_when>
    <thetext>Comment on attachment 18346
Revised proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66985</commentid>
    <comment_count>28</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-01-11 18:13:21 -0800</bug_when>
    <thetext>Landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17642</attachid>
            <date>2007-12-02 05:04:21 -0800</date>
            <delta_ts>2007-12-21 00:25:21 -0800</delta_ts>
            <desc>Patch in progress</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10302</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEFQSS9KU0NhbGxi
YWNrQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCisj
aW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBLSlMgewpJbmRleDogQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysgQVBJL0pT
Q2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJmdW5j
dGlvbl9vYmplY3QuaCIKKyNpbmNsdWRlICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtKUyB7CkluZGV4OiBBUEkvSlNDbGFzc1JlZi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEFQSS9KU0NsYXNzUmVmLmgJKHJldmlzaW9uIDI4MjMwKQorKysgQVBJL0pTQ2xh
c3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGtqcy9w
cm90ZWN0Lmg+CiAjaW5jbHVkZSA8a2pzL3VzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIHN0cnVjdCBTdGF0aWNWYWx1ZUVu
dHJ5IHsKICAgICBTdGF0aWNWYWx1ZUVudHJ5KEpTT2JqZWN0R2V0UHJvcGVydHlDYWxsYmFjayBf
Z2V0UHJvcGVydHksIEpTT2JqZWN0U2V0UHJvcGVydHlDYWxsYmFjayBfc2V0UHJvcGVydHksIEpT
UHJvcGVydHlBdHRyaWJ1dGVzIF9hdHRyaWJ1dGVzKQpJbmRleDogYmluZGluZ3MvcnVudGltZV9h
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHJldmlz
aW9uIDI4MjMwKQorKysgYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInJ1bnRp
bWVfYXJyYXkuaCIKKyNpbmNsdWRlICJpbnRlcnByZXRlci5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogCkluZGV4OiBiaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIGJpbmRpbmdz
L3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKKyNpbmNs
dWRlICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVk
ZSAiZnVuY3Rpb25fb2JqZWN0LmgiCiAKSW5kZXg6IGJpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gYmluZGluZ3MvcnVudGltZV9tZXRob2QuaAkocmV2aXNpb24gMjgyMzAp
CisrKyBiaW5kaW5ncy9ydW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5j
bHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgS0pT
IHsKIApJbmRleDoga2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0V4ZWNTdGF0
ZS5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysga2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgRXhlY1N0YXRlOjpFeGVjU3RhdGUoSW50ZXJwcmV0ZXIqIGlu
dGVycAogICAgIAogICAgIC8vIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhY3RpdmF0aW9uIG9iamVj
dCAoRUNNQSAxMC4xLjYpCiAgICAgaWYgKHR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAg
IG1fYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9uSW1wKHRoaXMpOworICAgICAgICBtX2FjdGl2
YXRpb24gPSBpbnRlcnByZXRlci0+cHVzaEFjdGl2YXRpb24odGhpcyk7CiAgICAgICAgIG1fdmFy
aWFibGUgPSBtX2FjdGl2YXRpb247CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9hY3RpdmF0aW9u
ID0gMDsKQEAgLTg1LDcgKzg1LDEwIEBAIEV4ZWNTdGF0ZTo6RXhlY1N0YXRlKEludGVycHJldGVy
KiBpbnRlcnAKIAogRXhlY1N0YXRlOjp+RXhlY1N0YXRlKCkKIHsKLSAgICBtX2ludGVycHJldGVy
LT5zZXRDdXJyZW50RXhlYyhtX3NhdmVkRXhlY1N0YXRlKTsKKyAgaWYgKG1fY29kZVR5cGUgPT0g
RnVuY3Rpb25Db2RlKQorICAgIG1faW50ZXJwcmV0ZXItPnBvcEFjdGl2YXRpb24oKTsKKyAgCisg
IG1faW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFeGVjKG1fc2F2ZWRFeGVjU3RhdGUpOwogfQogCiB2
b2lkIEV4ZWNTdGF0ZTo6bWFyaygpCkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysga2pzL2Z1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDE2ICszOTMsMjcgQEAgYm9vbCBBcmd1bWVudHM6OmRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZQogCiBjb25zdCBDbGFzc0luZm8gQWN0aXZhdGlvbkltcDo6
aW5mbyA9IHsgIkFjdGl2YXRpb24iLCAwLCAwIH07CiAKLUFjdGl2YXRpb25JbXA6OkFjdGl2YXRp
b25JbXAoRXhlY1N0YXRlKiBleGVjKQotICAgIDogZChuZXcgQWN0aXZhdGlvbkltcFByaXZhdGUo
ZXhlYykpCi0gICAgLCBtX3N5bWJvbFRhYmxlKCZleGVjLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1i
b2xUYWJsZSgpKQorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcChTdGFja0FjdGl2YXRpb24q
IG9sZFN0YWNrRW50cnkpCiB7CisgIGQgPSBuZXcgQWN0aXZhdGlvbkltcFByaXZhdGUob2xkU3Rh
Y2tFbnRyeS0+YWN0aXZhdGlvblByaXZhdGVTdG9yYWdlKTsKKyAgbV9zeW1ib2xUYWJsZSA9IG9s
ZFN0YWNrRW50cnktPmFjdGl2YXRpb25TdG9yYWdlLm1fc3ltYm9sVGFibGU7CiB9CiAKK3ZvaWQg
QWN0aXZhdGlvbkltcDo6aW5pdChFeGVjU3RhdGUqIGV4ZWMsIEFjdGl2YXRpb25JbXBQcml2YXRl
KiBwKQoreworICBkID0gcDsKKyAgbV9zeW1ib2xUYWJsZSA9ICZleGVjLT5mdW5jdGlvbigpLT5i
b2R5LT5zeW1ib2xUYWJsZSgpOworICAKKyAgZC0+ZXhlYyA9IGV4ZWM7CisgIGQtPmZ1bmN0aW9u
ID0gZXhlYy0+ZnVuY3Rpb24oKTsKKyAgZC0+YXJndW1lbnRzT2JqZWN0ID0gMDsKKyAgZC0+b25T
dGFjayA9IHRydWU7Cit9CisgIAogSlNWYWx1ZSogQWN0aXZhdGlvbkltcDo6YXJndW1lbnRzR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewogICBBY3RpdmF0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8QWN0aXZhdGlvbkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEFjdGl2YXRpb25JbXBQ
cml2YXRlKiBkID0gdGhpc09iai0+ZC5nZXQoKTsKKyAgQWN0aXZhdGlvbkltcFByaXZhdGUqIGQg
PSB0aGlzT2JqLT5kOwogICAKICAgaWYgKCFkLT5hcmd1bWVudHNPYmplY3QpCiAgICAgdGhpc09i
ai0+Y3JlYXRlQXJndW1lbnRzT2JqZWN0KGV4ZWMpOwpAQCAtNTExLDYgKzUyMiwxOSBAQCB2b2lk
IEFjdGl2YXRpb25JbXA6OmNyZWF0ZUFyZ3VtZW50c09iamVjCiAgICAgZC0+YXJndW1lbnRzT2Jq
ZWN0ID0gbmV3IEFyZ3VtZW50cyhleGVjLCBkLT5mdW5jdGlvbiwgKmQtPmV4ZWMtPmFyZ3VtZW50
cygpLCB0aGlzKTsKIH0KIAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcFByaXZhdGU6OkFj
dGl2YXRpb25JbXBQcml2YXRlKGNvbnN0IEFjdGl2YXRpb25JbXBQcml2YXRlJiBvbGQpCit7ICAK
KyAgbWVtY3B5KHRoaXMsICZvbGQsIHNpemVvZihBY3RpdmF0aW9uSW1wUHJpdmF0ZSkpOworfQor
CitTdGFja0FjdGl2YXRpb246OlN0YWNrQWN0aXZhdGlvbihjb25zdCBTdGFja0FjdGl2YXRpb24m
IG9sZCkKK3sKKyAgbWVtY3B5KCZhY3RpdmF0aW9uU3RvcmFnZSwgJihvbGQuYWN0aXZhdGlvblN0
b3JhZ2UpLCBzaXplb2YoQWN0aXZhdGlvbkltcCkpOworICBtZW1jcHkoJmFjdGl2YXRpb25Qcml2
YXRlU3RvcmFnZSwgJihvbGQuYWN0aXZhdGlvblByaXZhdGVTdG9yYWdlKSwgc2l6ZW9mKEFjdGl2
YXRpb25JbXA6OkFjdGl2YXRpb25JbXBQcml2YXRlKSk7CisgIAorICBhY3RpdmF0aW9uU3RvcmFn
ZS5kID0gJmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZTsKK30KKyAgCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiAKSW5kZXg6IGtqcy9mdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5j
dGlvbi5oCShyZXZpc2lvbiAyODIzMCkKKysrIGtqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCwxMyArMjgsMTMgQEAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRl
ICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KIAogbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgY2xh
c3MgRnVuY3Rpb25Cb2R5Tm9kZTsKICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CisgIGNsYXNz
IFN0YWNrQWN0aXZhdGlvbjsKIAogICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGlj
IEpTT2JqZWN0IHsKICAgcHVibGljOgpAQCAtMTM4LDI0ICsxMzgsMzIgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgIH07CiAKICAgY2xhc3MgQWN0aXZhdGlvbkltcCA6IHB1YmxpYyBKU09iamVjdCB7Cisg
IGZyaWVuZCBjbGFzcyBTdGFja0FjdGl2YXRpb247CiAgIHByaXZhdGU6CiAgICAgc3RydWN0IEFj
dGl2YXRpb25JbXBQcml2YXRlIHsKLSAgICAgICAgQWN0aXZhdGlvbkltcFByaXZhdGUoRXhlY1N0
YXRlKiBlKQotICAgICAgICAgICAgOiBleGVjKGUpCi0gICAgICAgICAgICAsIGZ1bmN0aW9uKGUt
PmZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAsIGFyZ3VtZW50c09iamVjdCgwKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIEFjdGl2YXRpb25JbXBQcml2YXRlKCkgeyB9
CisgICAgICAgIEFjdGl2YXRpb25JbXBQcml2YXRlKGNvbnN0IEFjdGl2YXRpb25JbXBQcml2YXRl
Jik7CisgICAgICAKICAgICAgICAgTG9jYWxTdG9yYWdlIGxvY2FsU3RvcmFnZTsKICAgICAgICAg
RXhlY1N0YXRlKiBleGVjOwogICAgICAgICBGdW5jdGlvbkltcCogZnVuY3Rpb247CiAgICAgICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzT2JqZWN0OworICAgICAgICAKKyAgICAgICAgYm9vbCBvblN0
YWNrOwogICAgIH07CiAKICAgcHVibGljOgotICAgIEFjdGl2YXRpb25JbXAoRXhlY1N0YXRlKik7
Ci0KKyAgICBBY3RpdmF0aW9uSW1wKCkgeyB9OworICAgIEFjdGl2YXRpb25JbXAoU3RhY2tBY3Rp
dmF0aW9uKiBvbGRTdGFja0VudHJ5KTsKKyAgICAKKyAgICB+QWN0aXZhdGlvbkltcCgpCisgICAg
eworICAgICAgaWYgKCFkLT5vblN0YWNrKQorICAgICAgICBkZWxldGUgZDsKKyAgICB9CisgICAg
CisgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSogZXhlYywgQWN0aXZhdGlvbkltcFByaXZhdGUqIHAp
OworICAgIAogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKQEAgLTE3NiwxMCArMTg0
LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KTsKICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUq
KTsKICAgICAKLSAgICBPd25QdHI8QWN0aXZhdGlvbkltcFByaXZhdGU+IGQ7CisgICAgQWN0aXZh
dGlvbkltcFByaXZhdGUqIGQ7CiAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAgIH07
CiAKKyAgc3RydWN0IFN0YWNrQWN0aXZhdGlvbiB7CisgICAgU3RhY2tBY3RpdmF0aW9uKCkgeyB9
CisgICAgU3RhY2tBY3RpdmF0aW9uKGNvbnN0IFN0YWNrQWN0aXZhdGlvbiYpOworICAgIAorICAg
IH5TdGFja0FjdGl2YXRpb24oKSB7IH0gCisgICAgCisgICAgQWN0aXZhdGlvbkltcCBhY3RpdmF0
aW9uU3RvcmFnZTsKKyAgICBBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wUHJpdmF0ZSBhY3Rp
dmF0aW9uUHJpdmF0ZVN0b3JhZ2U7CisgIH07CisgIAogICBjbGFzcyBHbG9iYWxGdW5jSW1wIDog
cHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICBwdWJsaWM6CiAgICAgR2xvYmFsRnVuY0lt
cChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBjb25zdCBJ
ZGVudGlmaWVyJik7CkluZGV4OiBranMvaW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9pbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysga2pzL2ludGVycHJldGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYgKzE5Nyw4IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmNy
ZWF0ZU9iamVjdHNGb3JHbG9iYWwKICAgICBtX1R5cGVFcnJvciA9IDA7CiAgICAgbV9VcmlFcnJv
ciA9IDA7CiAKKyAgICBtX2FjdGl2YXRpb25zID0gbmV3IERlcXVlPFN0YWNrQWN0aXZhdGlvbio+
OworICAKICAgICAvLyBQcm90b3R5cGVzCiAgICAgbV9GdW5jdGlvblByb3RvdHlwZSA9IG5ldyBG
dW5jdGlvblByb3RvdHlwZSgmbV9nbG9iYWxFeGVjKTsKICAgICBtX09iamVjdFByb3RvdHlwZSA9
IG5ldyBPYmplY3RQcm90b3R5cGUoJm1fZ2xvYmFsRXhlYywgbV9GdW5jdGlvblByb3RvdHlwZSk7
CkBAIC0zOTksNiArNDAxLDM1IEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGNv
bnN0IFUKICAgICByZXR1cm4gcmVzOwogfQogCitBY3RpdmF0aW9uSW1wKiBJbnRlcnByZXRlcjo6
cHVzaEFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICBTdGFja0FjdGl2YXRpb24qIHN0
YWNrRW50cnkgPSBuZXcgU3RhY2tBY3RpdmF0aW9uOworICBtX2FjdGl2YXRpb25zLT5wcmVwZW5k
KHN0YWNrRW50cnkpOworICBzdGFja0VudHJ5LT5hY3RpdmF0aW9uU3RvcmFnZS5pbml0KGV4ZWMs
ICYoc3RhY2tFbnRyeS0+YWN0aXZhdGlvblByaXZhdGVTdG9yYWdlKSk7CisgICAgCisgIHJldHVy
biAmKHN0YWNrRW50cnktPmFjdGl2YXRpb25TdG9yYWdlKTsKK30KKyAgCit2b2lkIEludGVycHJl
dGVyOjpwb3BBY3RpdmF0aW9uKCkKK3sKKyAgbV9hY3RpdmF0aW9ucy0+cmVtb3ZlRmlyc3QoKTsK
K30KKwordm9pZCBJbnRlcnByZXRlcjo6dGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVj
KQoreworICBTdGFja0FjdGl2YXRpb24qIG9sZFN0YWNrRW50cnkgPSBtX2FjdGl2YXRpb25zLT5m
aXJzdCgpOworICBtX2FjdGl2YXRpb25zLT5yZW1vdmVGaXJzdCgpOworICAKKyAgQWN0aXZhdGlv
bkltcCogbmV3QWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9uSW1wKG9sZFN0YWNrRW50cnkpOwor
ICAKKyAgZXhlYy0+bV9hY3RpdmF0aW9uID0gbmV3QWN0aXZhdGlvbjsKKyAgZXhlYy0+bV92YXJp
YWJsZSA9IG5ld0FjdGl2YXRpb247CisgIGV4ZWMtPnVwZGF0ZUxvY2FsU3RvcmFnZSgpOworICAK
KyAgZXhlYy0+cG9wU2NvcGUoKTsKKyAgZXhlYy0+cHVzaFNjb3BlKG5ld0FjdGl2YXRpb24pOwor
fQorICAKIEpTT2JqZWN0ICpJbnRlcnByZXRlcjo6YnVpbHRpbk9iamVjdCgpIGNvbnN0CiB7CiAg
IHJldHVybiBtX09iamVjdDsKSW5kZXg6IGtqcy9pbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9pbnRlcnByZXRlci5oCShyZXZpc2lvbiAyODIzMCkKKysrIGtqcy9pbnRlcnByZXRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKICNkZWZpbmUgX0tKU19JTlRFUlBS
RVRFUl9IXwogCiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiZnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJwcm90ZWN0LmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJ2YWx1
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CiAKIG5hbWVzcGFjZSBLSlMgewogCkBAIC0xNTgsNiArMTYwLDEwIEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQg
c3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVQ2hhciogY29kZSwgaW50IGNvZGVMZW5ndGgsIEpT
VmFsdWUqIHRoaXNWID0gMCk7CiAgICAgQ29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBVU3RyaW5n
JiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcmIGNvZGUs
IEpTVmFsdWUqIHRoaXNWID0gMCk7CiAKKyAgICBBY3RpdmF0aW9uSW1wKiBwdXNoQWN0aXZhdGlv
bihFeGVjU3RhdGUqIGV4ZWMpOworICAgIHZvaWQgcG9wQWN0aXZhdGlvbigpOworICAgIHZvaWQg
dGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKTsKKyAgICAKICAgICAvKioKICAgICAg
KiBSZXR1cm5zIHRoZSBidWlsdGluICJPYmplY3QiIG9iamVjdC4gVGhpcyBpcyB0aGUgb2JqZWN0
IHRoYXQgd2FzIHNldAogICAgICAqIGFzIGEgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3Qg
ZHVyaW5nIGNvbnN0cnVjdGlvbjsgaWYgdGhlIHByb3BlcnR5CkBAIC0zNjIsNiArMzY4LDcgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3RpY2tDb3VudDsKICAgICB1bnNpZ25lZCBtX3RpY2tz
VW50aWxOZXh0VGltZW91dENoZWNrOwogCisgICAgRGVxdWU8U3RhY2tBY3RpdmF0aW9uKj4qIG1f
YWN0aXZhdGlvbnM7CiAKICAgICBPYmplY3RPYmplY3RJbXAqIG1fT2JqZWN0OwogICAgIEZ1bmN0
aW9uT2JqZWN0SW1wKiBtX0Z1bmN0aW9uOwpJbmRleDoga2pzL29iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9vYmplY3QuaAkocmV2aXNpb24gMjgyMzApCisrKyBranMvb2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1
ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCi0jaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKKyNpbmNs
dWRlICJFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJwcm9wZXJ0eV9tYXAuaCIKICNpbmNsdWRlICJw
cm9wZXJ0eV9zbG90LmgiCiAjaW5jbHVkZSAic2NvcGVfY2hhaW4uaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18026</attachid>
            <date>2007-12-21 00:25:21 -0800</date>
            <delta_ts>2007-12-26 23:11:07 -0800</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>12121</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiaW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJ
bmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5j
bHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtK
UyB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CiAjaW5jbHVkZSA8a2pzL3VzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IHN0cnVjdCBTdGF0aWNWYWx1ZUVudHJ5IHsKICAgICBTdGF0aWNWYWx1ZUVudHJ5KEpTT2JqZWN0
R2V0UHJvcGVydHlDYWxsYmFjayBfZ2V0UHJvcGVydHksIEpTT2JqZWN0U2V0UHJvcGVydHlDYWxs
YmFjayBfc2V0UHJvcGVydHksIEpTUHJvcGVydHlBdHRyaWJ1dGVzIF9hdHRyaWJ1dGVzKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI4
MjMwKQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJpbnRlcnByZXRlci5oIgogCiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
ZnVuY3Rpb25fb2JqZWN0LmgiCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9tZXRob2QuaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAib2JqZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgS0pTIHsKIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgRXhlY1N0
YXRlOjpFeGVjU3RhdGUoSW50ZXJwcmV0ZXIqIGludGVycAogICAgIAogICAgIC8vIGNyZWF0ZSBh
bmQgaW5pdGlhbGl6ZSBhY3RpdmF0aW9uIG9iamVjdCAoRUNNQSAxMC4xLjYpCiAgICAgaWYgKHR5
cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIG1fYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0
aW9uSW1wKHRoaXMpOworICAgICAgICBtX2FjdGl2YXRpb24gPSBpbnRlcnByZXRlci0+cHVzaEFj
dGl2YXRpb24odGhpcyk7CiAgICAgICAgIG1fdmFyaWFibGUgPSBtX2FjdGl2YXRpb247CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9hY3RpdmF0aW9uID0gMDsKQEAgLTg1LDcgKzg1LDEwIEBAIEV4
ZWNTdGF0ZTo6RXhlY1N0YXRlKEludGVycHJldGVyKiBpbnRlcnAKIAogRXhlY1N0YXRlOjp+RXhl
Y1N0YXRlKCkKIHsKLSAgICBtX2ludGVycHJldGVyLT5zZXRDdXJyZW50RXhlYyhtX3NhdmVkRXhl
Y1N0YXRlKTsKKyAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIHN0YXRpY19jYXN0
PEFjdGl2YXRpb25JbXAqPihtX2FjdGl2YXRpb24pLT5pc09uU3RhY2soKSkKKyAgICBtX2ludGVy
cHJldGVyLT5wb3BBY3RpdmF0aW9uKCk7CisgIAorICBtX2ludGVycHJldGVyLT5zZXRDdXJyZW50
RXhlYyhtX3NhdmVkRXhlY1N0YXRlKTsKIH0KIAogdm9pZCBFeGVjU3RhdGU6Om1hcmsoKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxNiArMzkzLDI4IEBA
IGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKIAogY29uc3QgQ2xhc3NJ
bmZvIEFjdGl2YXRpb25JbXA6OmluZm8gPSB7ICJBY3RpdmF0aW9uIiwgMCwgMCB9OwogCi1BY3Rp
dmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IGQobmV3IEFj
dGl2YXRpb25JbXBQcml2YXRlKGV4ZWMpKQotICAgICwgbV9zeW1ib2xUYWJsZSgmZXhlYy0+ZnVu
Y3Rpb24oKS0+Ym9keS0+c3ltYm9sVGFibGUoKSkKK0FjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25J
bXAoU3RhY2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5KQogeworICBkID0gbmV3IEFjdGl2YXRp
b25JbXBQcml2YXRlKG9sZFN0YWNrRW50cnktPmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSk7Cisg
IGQtPm9uU3RhY2sgPSBmYWxzZTsKKyAgbV9zeW1ib2xUYWJsZSA9IG9sZFN0YWNrRW50cnktPmFj
dGl2YXRpb25TdG9yYWdlLm1fc3ltYm9sVGFibGU7CiB9CiAKK3ZvaWQgQWN0aXZhdGlvbkltcDo6
aW5pdChFeGVjU3RhdGUqIGV4ZWMsIEFjdGl2YXRpb25JbXBQcml2YXRlKiBwKQoreworICBkID0g
cDsKKyAgbV9zeW1ib2xUYWJsZSA9ICZleGVjLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJs
ZSgpOworICAKKyAgZC0+ZXhlYyA9IGV4ZWM7CisgIGQtPmZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rp
b24oKTsKKyAgZC0+YXJndW1lbnRzT2JqZWN0ID0gMDsKKyAgZC0+b25TdGFjayA9IHRydWU7Cit9
CisgIAogSlNWYWx1ZSogQWN0aXZhdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICBBY3RpdmF0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlv
bkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEFjdGl2YXRpb25JbXBQcml2YXRlKiBkID0gdGhp
c09iai0+ZC5nZXQoKTsKKyAgQWN0aXZhdGlvbkltcFByaXZhdGUqIGQgPSB0aGlzT2JqLT5kOwog
ICAKICAgaWYgKCFkLT5hcmd1bWVudHNPYmplY3QpCiAgICAgdGhpc09iai0+Y3JlYXRlQXJndW1l
bnRzT2JqZWN0KGV4ZWMpOwpAQCAtNTExLDYgKzUyMywxOSBAQCB2b2lkIEFjdGl2YXRpb25JbXA6
OmNyZWF0ZUFyZ3VtZW50c09iamVjCiAgICAgZC0+YXJndW1lbnRzT2JqZWN0ID0gbmV3IEFyZ3Vt
ZW50cyhleGVjLCBkLT5mdW5jdGlvbiwgKmQtPmV4ZWMtPmFyZ3VtZW50cygpLCB0aGlzKTsKIH0K
IAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcFByaXZhdGU6OkFjdGl2YXRpb25JbXBQcml2
YXRlKGNvbnN0IEFjdGl2YXRpb25JbXBQcml2YXRlJiBvbGQpCit7ICAKKyAgbWVtY3B5KHRoaXMs
ICZvbGQsIHNpemVvZihBY3RpdmF0aW9uSW1wUHJpdmF0ZSkpOworfQorCitTdGFja0FjdGl2YXRp
b246OlN0YWNrQWN0aXZhdGlvbihjb25zdCBTdGFja0FjdGl2YXRpb24mIG9sZCkKK3sKKyAgbWVt
Y3B5KCZhY3RpdmF0aW9uU3RvcmFnZSwgJihvbGQuYWN0aXZhdGlvblN0b3JhZ2UpLCBzaXplb2Yo
QWN0aXZhdGlvbkltcCkpOworICBtZW1jcHkoJmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSwgJihv
bGQuYWN0aXZhdGlvblByaXZhdGVTdG9yYWdlKSwgc2l6ZW9mKEFjdGl2YXRpb25JbXA6OkFjdGl2
YXRpb25JbXBQcml2YXRlKSk7CisgIAorICBhY3RpdmF0aW9uU3RvcmFnZS5kID0gJmFjdGl2YXRp
b25Qcml2YXRlU3RvcmFnZTsKK30KKyAgCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gR2xvYmFsRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMTMgQEAKICNpbmNs
dWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUg
Im9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFtZXNwYWNlIEtKUyB7CiAK
ICAgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKICAgY2xh
c3MgRnVuY3Rpb25Qcm90b3R5cGU7CisgIGNsYXNzIFN0YWNrQWN0aXZhdGlvbjsKIAogICBjbGFz
cyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGljIEpTT2JqZWN0IHsKICAgcHVibGljOgpAQCAt
MTM4LDI0ICsxMzgsMzIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIH07CiAKICAgY2xhc3MgQWN0aXZh
dGlvbkltcCA6IHB1YmxpYyBKU09iamVjdCB7CisgIGZyaWVuZCBjbGFzcyBTdGFja0FjdGl2YXRp
b247CiAgIHByaXZhdGU6CiAgICAgc3RydWN0IEFjdGl2YXRpb25JbXBQcml2YXRlIHsKLSAgICAg
ICAgQWN0aXZhdGlvbkltcFByaXZhdGUoRXhlY1N0YXRlKiBlKQotICAgICAgICAgICAgOiBleGVj
KGUpCi0gICAgICAgICAgICAsIGZ1bmN0aW9uKGUtPmZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAs
IGFyZ3VtZW50c09iamVjdCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAg
ICAgIEFjdGl2YXRpb25JbXBQcml2YXRlKCkgeyB9CisgICAgICAgIEFjdGl2YXRpb25JbXBQcml2
YXRlKGNvbnN0IEFjdGl2YXRpb25JbXBQcml2YXRlJik7CisgICAgICAKICAgICAgICAgTG9jYWxT
dG9yYWdlIGxvY2FsU3RvcmFnZTsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjOwogICAgICAgICBG
dW5jdGlvbkltcCogZnVuY3Rpb247CiAgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzT2JqZWN0
OworICAgICAgICAKKyAgICAgICAgYm9vbCBvblN0YWNrOwogICAgIH07CiAKICAgcHVibGljOgot
ICAgIEFjdGl2YXRpb25JbXAoRXhlY1N0YXRlKik7Ci0KKyAgICBBY3RpdmF0aW9uSW1wKCkgeyB9
OworICAgIEFjdGl2YXRpb25JbXAoU3RhY2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5KTsKKyAg
ICAKKyAgICB+QWN0aXZhdGlvbkltcCgpCisgICAgeworICAgICAgaWYgKCFkLT5vblN0YWNrKQor
ICAgICAgICBkZWxldGUgZDsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSog
ZXhlYywgQWN0aXZhdGlvbkltcFByaXZhdGUqIHApOworICAgIAogICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKTsKQEAgLTE2OCw2ICsxNzYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAg
IGJvb2wgaXNBY3RpdmF0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgYm9vbCBpc09uU3Rh
Y2soKSB7IHJldHVybiBkLT5vblN0YWNrOyB9CiAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3Jh
Z2UoKSB7IHJldHVybiBkLT5sb2NhbFN0b3JhZ2U7IH0KICAgICBTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogCkBAIC0xNzYsMTAgKzE4NSwyMCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCk7CiAgICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKik7CiAg
ICAgCi0gICAgT3duUHRyPEFjdGl2YXRpb25JbXBQcml2YXRlPiBkOworICAgIEFjdGl2YXRpb25J
bXBQcml2YXRlKiBkOwogICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogICB9OwogCisg
IHN0cnVjdCBTdGFja0FjdGl2YXRpb24geworICAgIFN0YWNrQWN0aXZhdGlvbigpIHsgfQorICAg
IFN0YWNrQWN0aXZhdGlvbihjb25zdCBTdGFja0FjdGl2YXRpb24mKTsKKyAgICAKKyAgICB+U3Rh
Y2tBY3RpdmF0aW9uKCkgeyB9IAorICAgIAorICAgIEFjdGl2YXRpb25JbXAgYWN0aXZhdGlvblN0
b3JhZ2U7CisgICAgQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcFByaXZhdGUgYWN0aXZhdGlv
blByaXZhdGVTdG9yYWdlOworICB9OworICAKICAgY2xhc3MgR2xvYmFsRnVuY0ltcCA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAgIEdsb2JhbEZ1bmNJbXAoRXhl
Y1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRlbnRp
ZmllciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyODIz
MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw2ICsxOTcsOCBAQCB2b2lkIEludGVycHJldGVyOjpjcmVhdGVPYmplY3RzRm9yR2xv
YmFsCiAgICAgbV9UeXBlRXJyb3IgPSAwOwogICAgIG1fVXJpRXJyb3IgPSAwOwogCisgICAgbV9h
Y3RpdmF0aW9ucyA9IG5ldyBEZXF1ZTxTdGFja0FjdGl2YXRpb24qPjsKKyAgCiAgICAgLy8gUHJv
dG90eXBlcwogICAgIG1fRnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcgRnVuY3Rpb25Qcm90b3R5cGUo
Jm1fZ2xvYmFsRXhlYyk7CiAgICAgbV9PYmplY3RQcm90b3R5cGUgPSBuZXcgT2JqZWN0UHJvdG90
eXBlKCZtX2dsb2JhbEV4ZWMsIG1fRnVuY3Rpb25Qcm90b3R5cGUpOwpAQCAtMzk5LDYgKzQwMSwz
NyBAQCBDb21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShjb25zdCBVCiAgICAgcmV0dXJu
IHJlczsKIH0KIAorQWN0aXZhdGlvbkltcCogSW50ZXJwcmV0ZXI6OnB1c2hBY3RpdmF0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgU3RhY2tBY3RpdmF0aW9uKiBzdGFja0VudHJ5ID0gbmV3IFN0
YWNrQWN0aXZhdGlvbjsKKyAgbV9hY3RpdmF0aW9ucy0+cHJlcGVuZChzdGFja0VudHJ5KTsKKyAg
c3RhY2tFbnRyeS0+YWN0aXZhdGlvblN0b3JhZ2UuaW5pdChleGVjLCAmKHN0YWNrRW50cnktPmFj
dGl2YXRpb25Qcml2YXRlU3RvcmFnZSkpOworICAgIAorICByZXR1cm4gJihzdGFja0VudHJ5LT5h
Y3RpdmF0aW9uU3RvcmFnZSk7Cit9CisgIAordm9pZCBJbnRlcnByZXRlcjo6cG9wQWN0aXZhdGlv
bigpCit7CisgIG1fYWN0aXZhdGlvbnMtPnJlbW92ZUZpcnN0KCk7Cit9CisKK3ZvaWQgSW50ZXJw
cmV0ZXI6OnRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgaWYgKHN0YXRp
Y19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT5hY3RpdmF0aW9uT2JqZWN0KCkpLT5pc09uU3Rh
Y2soKSkgeworICAgIFN0YWNrQWN0aXZhdGlvbiogb2xkU3RhY2tFbnRyeSA9IG1fYWN0aXZhdGlv
bnMtPmZpcnN0KCk7CisgICAgbV9hY3RpdmF0aW9ucy0+cmVtb3ZlRmlyc3QoKTsKKyAgICAKKyAg
ICBBY3RpdmF0aW9uSW1wKiBuZXdBY3RpdmF0aW9uID0gbmV3IEFjdGl2YXRpb25JbXAob2xkU3Rh
Y2tFbnRyeSk7CisgICAgCisgICAgZXhlYy0+bV9hY3RpdmF0aW9uID0gbmV3QWN0aXZhdGlvbjsK
KyAgICBleGVjLT5tX3ZhcmlhYmxlID0gbmV3QWN0aXZhdGlvbjsKKyAgICBleGVjLT51cGRhdGVM
b2NhbFN0b3JhZ2UoKTsKKyAgICAKKyAgICBleGVjLT5wb3BTY29wZSgpOworICAgIGV4ZWMtPnB1
c2hTY29wZShuZXdBY3RpdmF0aW9uKTsgICAgCisgIH0KK30KKyAgCiBKU09iamVjdCAqSW50ZXJw
cmV0ZXI6OmJ1aWx0aW5PYmplY3QoKSBjb25zdAogewogICByZXR1cm4gbV9PYmplY3Q7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBA
CiAjZGVmaW5lIF9LSlNfSU5URVJQUkVURVJfSF8KIAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgor
I2luY2x1ZGUgImZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAicHJvdGVjdC5oIgogI2luY2x1ZGUgInR5
cGVzLmgiCiAjaW5jbHVkZSAidmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCiBuYW1lc3BhY2UgS0pTIHsKIApAQCAtMTU4LDYgKzE2
MCwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IFVT
dHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVUNoYXIqIGNv
ZGUsIGludCBjb2RlTGVuZ3RoLCBKU1ZhbHVlKiB0aGlzViA9IDApOwogICAgIENvbXBsZXRpb24g
ZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVy
LCBjb25zdCBVU3RyaW5nJiBjb2RlLCBKU1ZhbHVlKiB0aGlzViA9IDApOwogCisgICAgQWN0aXZh
dGlvbkltcCogcHVzaEFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKTsKKyAgICB2b2lkIHBvcEFj
dGl2YXRpb24oKTsKKyAgICB2b2lkIHRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYyk7
CisgICAgCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiT2JqZWN0IiBvYmpl
Y3QuIFRoaXMgaXMgdGhlIG9iamVjdCB0aGF0IHdhcyBzZXQKICAgICAgKiBhcyBhIHByb3BlcnR5
IG9mIHRoZSBnbG9iYWwgb2JqZWN0IGR1cmluZyBjb25zdHJ1Y3Rpb247IGlmIHRoZSBwcm9wZXJ0
eQpAQCAtMzYyLDYgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV90aWNrQ291bnQ7
CiAgICAgdW5zaWduZWQgbV90aWNrc1VudGlsTmV4dFRpbWVvdXRDaGVjazsKIAorICAgIERlcXVl
PFN0YWNrQWN0aXZhdGlvbio+KiBtX2FjdGl2YXRpb25zOwogCiAgICAgT2JqZWN0T2JqZWN0SW1w
KiBtX09iamVjdDsKICAgICBGdW5jdGlvbk9iamVjdEltcCogbV9GdW5jdGlvbjsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL25vZGVzLmNwcAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTM0LDYgKzQxMzQsNyBAQCBDb21wbGV0aW9uIFdp
dGhOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqCiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICBKU09i
amVjdCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KKyAgZXhl
Yy0+ZHluYW1pY0ludGVycHJldGVyKCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICBleGVj
LT5wdXNoU2NvcGUobyk7CiAgIENvbXBsZXRpb24gcmVzID0gc3RhdGVtZW50LT5leGVjdXRlKGV4
ZWMpOwogICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDM5NCw2ICs0Mzk1LDcgQEAgQ29tcGxldGlv
biBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZQogICBpZiAoY2F0Y2hCbG9jayAmJiBjLmNv
bXBsVHlwZSgpID09IFRocm93KSB7CiAgICAgSlNPYmplY3QgKm9iaiA9IG5ldyBKU09iamVjdDsK
ICAgICBvYmotPnB1dChleGVjLCBleGNlcHRpb25JZGVudCwgYy52YWx1ZSgpLCBEb250RGVsZXRl
KTsKKyAgICBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhl
Yyk7CiAgICAgZXhlYy0+cHVzaFNjb3BlKG9iaik7CiAgICAgYyA9IGNhdGNoQmxvY2stPmV4ZWN1
dGUoZXhlYyk7CiAgICAgZXhlYy0+cG9wU2NvcGUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJKHJl
dmlzaW9uIDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJD
b21tb25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgImludGVycHJldGVyLmgiCisjaW5jbHVkZSAi
RXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAicHJvcGVydHlfbWFwLmgiCiAjaW5jbHVkZSAicHJvcGVy
dHlfc2xvdC5oIgogI2luY2x1ZGUgInNjb3BlX2NoYWluLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18125</attachid>
            <date>2007-12-26 23:11:07 -0800</date>
            <delta_ts>2008-01-01 23:24:50 -0800</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>12859</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiaW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJ
bmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5j
bHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtK
UyB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CiAjaW5jbHVkZSA8a2pzL3VzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IHN0cnVjdCBTdGF0aWNWYWx1ZUVudHJ5IHsKICAgICBTdGF0aWNWYWx1ZUVudHJ5KEpTT2JqZWN0
R2V0UHJvcGVydHlDYWxsYmFjayBfZ2V0UHJvcGVydHksIEpTT2JqZWN0U2V0UHJvcGVydHlDYWxs
YmFjayBfc2V0UHJvcGVydHksIEpTUHJvcGVydHlBdHRyaWJ1dGVzIF9hdHRyaWJ1dGVzKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI4
MjMwKQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJpbnRlcnByZXRlci5oIgogCiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
ZnVuY3Rpb25fb2JqZWN0LmgiCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9tZXRob2QuaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAib2JqZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgS0pTIHsKIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgRXhlY1N0
YXRlOjpFeGVjU3RhdGUoSW50ZXJwcmV0ZXIqIGludGVycAogICAgIAogICAgIC8vIGNyZWF0ZSBh
bmQgaW5pdGlhbGl6ZSBhY3RpdmF0aW9uIG9iamVjdCAoRUNNQSAxMC4xLjYpCiAgICAgaWYgKHR5
cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIG1fYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0
aW9uSW1wKHRoaXMpOworICAgICAgICBtX2FjdGl2YXRpb24gPSBpbnRlcnByZXRlci0+cHVzaEFj
dGl2YXRpb24odGhpcyk7CiAgICAgICAgIG1fdmFyaWFibGUgPSBtX2FjdGl2YXRpb247CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9hY3RpdmF0aW9uID0gMDsKQEAgLTg1LDcgKzg1LDEwIEBAIEV4
ZWNTdGF0ZTo6RXhlY1N0YXRlKEludGVycHJldGVyKiBpbnRlcnAKIAogRXhlY1N0YXRlOjp+RXhl
Y1N0YXRlKCkKIHsKLSAgICBtX2ludGVycHJldGVyLT5zZXRDdXJyZW50RXhlYyhtX3NhdmVkRXhl
Y1N0YXRlKTsKKyAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIHN0YXRpY19jYXN0
PEFjdGl2YXRpb25JbXAqPihtX2FjdGl2YXRpb24pLT5pc09uU3RhY2soKSkKKyAgICBtX2ludGVy
cHJldGVyLT5wb3BBY3RpdmF0aW9uKCk7CisgIAorICBtX2ludGVycHJldGVyLT5zZXRDdXJyZW50
RXhlYyhtX3NhdmVkRXhlY1N0YXRlKTsKIH0KIAogdm9pZCBFeGVjU3RhdGU6Om1hcmsoKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxNiArMzkzLDI4IEBA
IGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKIAogY29uc3QgQ2xhc3NJ
bmZvIEFjdGl2YXRpb25JbXA6OmluZm8gPSB7ICJBY3RpdmF0aW9uIiwgMCwgMCB9OwogCi1BY3Rp
dmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IGQobmV3IEFj
dGl2YXRpb25JbXBQcml2YXRlKGV4ZWMpKQotICAgICwgbV9zeW1ib2xUYWJsZSgmZXhlYy0+ZnVu
Y3Rpb24oKS0+Ym9keS0+c3ltYm9sVGFibGUoKSkKK0FjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25J
bXAoU3RhY2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5KQogeworICBkID0gbmV3IEFjdGl2YXRp
b25JbXBQcml2YXRlKG9sZFN0YWNrRW50cnktPmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSk7Cisg
IGQtPm9uU3RhY2sgPSBmYWxzZTsKKyAgbV9zeW1ib2xUYWJsZSA9IG9sZFN0YWNrRW50cnktPmFj
dGl2YXRpb25TdG9yYWdlLm1fc3ltYm9sVGFibGU7CiB9CiAKK3ZvaWQgQWN0aXZhdGlvbkltcDo6
aW5pdChFeGVjU3RhdGUqIGV4ZWMsIEFjdGl2YXRpb25JbXBQcml2YXRlKiBwKQoreworICBkID0g
cDsKKyAgbV9zeW1ib2xUYWJsZSA9ICZleGVjLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJs
ZSgpOworICAKKyAgZC0+ZXhlYyA9IGV4ZWM7CisgIGQtPmZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rp
b24oKTsKKyAgZC0+YXJndW1lbnRzT2JqZWN0ID0gMDsKKyAgZC0+b25TdGFjayA9IHRydWU7Cit9
CisgIAogSlNWYWx1ZSogQWN0aXZhdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICBBY3RpdmF0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlv
bkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEFjdGl2YXRpb25JbXBQcml2YXRlKiBkID0gdGhp
c09iai0+ZC5nZXQoKTsKKyAgQWN0aXZhdGlvbkltcFByaXZhdGUqIGQgPSB0aGlzT2JqLT5kOwog
ICAKICAgaWYgKCFkLT5hcmd1bWVudHNPYmplY3QpCiAgICAgdGhpc09iai0+Y3JlYXRlQXJndW1l
bnRzT2JqZWN0KGV4ZWMpOwpAQCAtNTExLDYgKzUyMywxOSBAQCB2b2lkIEFjdGl2YXRpb25JbXA6
OmNyZWF0ZUFyZ3VtZW50c09iamVjCiAgICAgZC0+YXJndW1lbnRzT2JqZWN0ID0gbmV3IEFyZ3Vt
ZW50cyhleGVjLCBkLT5mdW5jdGlvbiwgKmQtPmV4ZWMtPmFyZ3VtZW50cygpLCB0aGlzKTsKIH0K
IAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcFByaXZhdGU6OkFjdGl2YXRpb25JbXBQcml2
YXRlKGNvbnN0IEFjdGl2YXRpb25JbXBQcml2YXRlJiBvbGQpCit7ICAKKyAgbWVtY3B5KHRoaXMs
ICZvbGQsIHNpemVvZihBY3RpdmF0aW9uSW1wUHJpdmF0ZSkpOworfQorCitTdGFja0FjdGl2YXRp
b246OlN0YWNrQWN0aXZhdGlvbihjb25zdCBTdGFja0FjdGl2YXRpb24mIG9sZCkKK3sKKyAgbWVt
Y3B5KCZhY3RpdmF0aW9uU3RvcmFnZSwgJihvbGQuYWN0aXZhdGlvblN0b3JhZ2UpLCBzaXplb2Yo
QWN0aXZhdGlvbkltcCkpOworICBtZW1jcHkoJmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSwgJihv
bGQuYWN0aXZhdGlvblByaXZhdGVTdG9yYWdlKSwgc2l6ZW9mKEFjdGl2YXRpb25JbXA6OkFjdGl2
YXRpb25JbXBQcml2YXRlKSk7CisgIAorICBhY3RpdmF0aW9uU3RvcmFnZS5kID0gJmFjdGl2YXRp
b25Qcml2YXRlU3RvcmFnZTsKK30KKyAgCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gR2xvYmFsRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAg
LTc4OCw4ICs4MTMsOSBAQCBKU1ZhbHVlKiBHbG9iYWxGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbihF
CiAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywg
ZXJyTGluZSwgc291cmNlSWQsIE5VTEwpOwogCiAgICAgICAgIGJvb2wgc3dpdGNoR2xvYmFsID0g
dGhpc09iaiAmJiB0aGlzT2JqICE9IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxP
YmplY3QoKTsKLSAgICAgICAgICAKKyAgICAgICAgCiAgICAgICAgIC8vIGVudGVyIGEgbmV3IGV4
ZWN1dGlvbiBjb250ZXh0CisgICAgICAgIGlmICghc3dpdGNoR2xvYmFsKSBleGVjLT5keW5hbWlj
SW50ZXJwcmV0ZXIoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgICAgICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlciA9IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4odGhpc09iaiktPmludGVycHJldGVyKCkgOiBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIo
KTsKICAgICAgICAgSlNPYmplY3QqIHRoaXNWYWwgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGV4
ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICAgICAgRXhlY1N0YXRlIG5ld0V4ZWMoaW50ZXJwcmV0ZXIs
IGludGVycHJldGVyLT5nbG9iYWxPYmplY3QoKSwgdGhpc1ZhbCwgcHJvZ05vZGUuZ2V0KCksIEV2
YWxDb2RlLCBleGVjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAyODIzMCkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
MyArMjgsMTMgQEAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJTeW1ib2xU
YWJsZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAog
bmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgY2xhc3MgRnVuY3Rp
b25Cb2R5Tm9kZTsKICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CisgIGNsYXNzIFN0YWNrQWN0
aXZhdGlvbjsKIAogICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGljIEpTT2JqZWN0
IHsKICAgcHVibGljOgpAQCAtMTM4LDI0ICsxMzgsMzIgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIH07
CiAKICAgY2xhc3MgQWN0aXZhdGlvbkltcCA6IHB1YmxpYyBKU09iamVjdCB7CisgIGZyaWVuZCBj
bGFzcyBTdGFja0FjdGl2YXRpb247CiAgIHByaXZhdGU6CiAgICAgc3RydWN0IEFjdGl2YXRpb25J
bXBQcml2YXRlIHsKLSAgICAgICAgQWN0aXZhdGlvbkltcFByaXZhdGUoRXhlY1N0YXRlKiBlKQot
ICAgICAgICAgICAgOiBleGVjKGUpCi0gICAgICAgICAgICAsIGZ1bmN0aW9uKGUtPmZ1bmN0aW9u
KCkpCi0gICAgICAgICAgICAsIGFyZ3VtZW50c09iamVjdCgwKQotICAgICAgICB7Ci0gICAgICAg
IH0KLSAgICAgICAgCisgICAgICAgIEFjdGl2YXRpb25JbXBQcml2YXRlKCkgeyB9CisgICAgICAg
IEFjdGl2YXRpb25JbXBQcml2YXRlKGNvbnN0IEFjdGl2YXRpb25JbXBQcml2YXRlJik7CisgICAg
ICAKICAgICAgICAgTG9jYWxTdG9yYWdlIGxvY2FsU3RvcmFnZTsKICAgICAgICAgRXhlY1N0YXRl
KiBleGVjOwogICAgICAgICBGdW5jdGlvbkltcCogZnVuY3Rpb247CiAgICAgICAgIEFyZ3VtZW50
cyogYXJndW1lbnRzT2JqZWN0OworICAgICAgICAKKyAgICAgICAgYm9vbCBvblN0YWNrOwogICAg
IH07CiAKICAgcHVibGljOgotICAgIEFjdGl2YXRpb25JbXAoRXhlY1N0YXRlKik7Ci0KKyAgICBB
Y3RpdmF0aW9uSW1wKCkgeyB9OworICAgIEFjdGl2YXRpb25JbXAoU3RhY2tBY3RpdmF0aW9uKiBv
bGRTdGFja0VudHJ5KTsKKyAgICAKKyAgICB+QWN0aXZhdGlvbkltcCgpCisgICAgeworICAgICAg
aWYgKCFkLT5vblN0YWNrKQorICAgICAgICBkZWxldGUgZDsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBpbml0KEV4ZWNTdGF0ZSogZXhlYywgQWN0aXZhdGlvbkltcFByaXZhdGUqIHApOworICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0
dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKQEAgLTE2OCw2ICsxNzYsNyBAQCBuYW1l
c3BhY2UgS0pTIHsKIAogICAgIGJvb2wgaXNBY3RpdmF0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgYm9vbCBpc09uU3RhY2soKSB7IHJldHVybiBkLT5vblN0YWNrOyB9CiAgICAgTG9jYWxT
dG9yYWdlJiBsb2NhbFN0b3JhZ2UoKSB7IHJldHVybiBkLT5sb2NhbFN0b3JhZ2U7IH0KICAgICBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogCkBA
IC0xNzYsMTAgKzE4NSwyMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgSlNWYWx1ZSog
YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7CiAgICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmpl
Y3QoRXhlY1N0YXRlKik7CiAgICAgCi0gICAgT3duUHRyPEFjdGl2YXRpb25JbXBQcml2YXRlPiBk
OworICAgIEFjdGl2YXRpb25JbXBQcml2YXRlKiBkOwogICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJv
bFRhYmxlOwogICB9OwogCisgIHN0cnVjdCBTdGFja0FjdGl2YXRpb24geworICAgIFN0YWNrQWN0
aXZhdGlvbigpIHsgfQorICAgIFN0YWNrQWN0aXZhdGlvbihjb25zdCBTdGFja0FjdGl2YXRpb24m
KTsKKyAgICAKKyAgICB+U3RhY2tBY3RpdmF0aW9uKCkgeyB9IAorICAgIAorICAgIEFjdGl2YXRp
b25JbXAgYWN0aXZhdGlvblN0b3JhZ2U7CisgICAgQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbklt
cFByaXZhdGUgYWN0aXZhdGlvblByaXZhdGVTdG9yYWdlOworICB9OworICAKICAgY2xhc3MgR2xv
YmFsRnVuY0ltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAg
IEdsb2JhbEZ1bmNJbXAoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBpbnQgaSwgaW50
IGxlbiwgY29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
cHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIu
Y3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw2ICsxOTcsOCBAQCB2b2lkIEludGVycHJldGVyOjpj
cmVhdGVPYmplY3RzRm9yR2xvYmFsCiAgICAgbV9UeXBlRXJyb3IgPSAwOwogICAgIG1fVXJpRXJy
b3IgPSAwOwogCisgICAgbV9hY3RpdmF0aW9ucyA9IG5ldyBEZXF1ZTxTdGFja0FjdGl2YXRpb24q
PjsKKyAgCiAgICAgLy8gUHJvdG90eXBlcwogICAgIG1fRnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcg
RnVuY3Rpb25Qcm90b3R5cGUoJm1fZ2xvYmFsRXhlYyk7CiAgICAgbV9PYmplY3RQcm90b3R5cGUg
PSBuZXcgT2JqZWN0UHJvdG90eXBlKCZtX2dsb2JhbEV4ZWMsIG1fRnVuY3Rpb25Qcm90b3R5cGUp
OwpAQCAtMzk5LDYgKzQwMSwzNyBAQCBDb21wbGV0aW9uIEludGVycHJldGVyOjpldmFsdWF0ZShj
b25zdCBVCiAgICAgcmV0dXJuIHJlczsKIH0KIAorQWN0aXZhdGlvbkltcCogSW50ZXJwcmV0ZXI6
OnB1c2hBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgU3RhY2tBY3RpdmF0aW9uKiBz
dGFja0VudHJ5ID0gbmV3IFN0YWNrQWN0aXZhdGlvbjsKKyAgbV9hY3RpdmF0aW9ucy0+cHJlcGVu
ZChzdGFja0VudHJ5KTsKKyAgc3RhY2tFbnRyeS0+YWN0aXZhdGlvblN0b3JhZ2UuaW5pdChleGVj
LCAmKHN0YWNrRW50cnktPmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSkpOworICAgIAorICByZXR1
cm4gJihzdGFja0VudHJ5LT5hY3RpdmF0aW9uU3RvcmFnZSk7Cit9CisgIAordm9pZCBJbnRlcnBy
ZXRlcjo6cG9wQWN0aXZhdGlvbigpCit7CisgIG1fYWN0aXZhdGlvbnMtPnJlbW92ZUZpcnN0KCk7
Cit9CisKK3ZvaWQgSW50ZXJwcmV0ZXI6OnRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgaWYgKGV4ZWMtPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN0YXRpY19j
YXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT5hY3RpdmF0aW9uT2JqZWN0KCkpLT5pc09uU3RhY2so
KSkgeworICAgIFN0YWNrQWN0aXZhdGlvbiogb2xkU3RhY2tFbnRyeSA9IG1fYWN0aXZhdGlvbnMt
PmZpcnN0KCk7CisgICAgbV9hY3RpdmF0aW9ucy0+cmVtb3ZlRmlyc3QoKTsKKyAgICAKKyAgICBB
Y3RpdmF0aW9uSW1wKiBuZXdBY3RpdmF0aW9uID0gbmV3IEFjdGl2YXRpb25JbXAob2xkU3RhY2tF
bnRyeSk7CisgICAgCisgICAgZXhlYy0+bV9hY3RpdmF0aW9uID0gbmV3QWN0aXZhdGlvbjsKKyAg
ICBleGVjLT5tX3ZhcmlhYmxlID0gbmV3QWN0aXZhdGlvbjsKKyAgICBleGVjLT51cGRhdGVMb2Nh
bFN0b3JhZ2UoKTsKKyAgICAKKyAgICBleGVjLT5wb3BTY29wZSgpOworICAgIGV4ZWMtPnB1c2hT
Y29wZShuZXdBY3RpdmF0aW9uKTsgICAgCisgIH0KK30KKyAgCiBKU09iamVjdCAqSW50ZXJwcmV0
ZXI6OmJ1aWx0aW5PYmplY3QoKSBjb25zdAogewogICByZXR1cm4gbV9PYmplY3Q7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEyIEBACiAj
ZGVmaW5lIF9LSlNfSU5URVJQUkVURVJfSF8KIAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgorI2lu
Y2x1ZGUgImZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAicHJvdGVjdC5oIgogI2luY2x1ZGUgInR5cGVz
LmgiCiAjaW5jbHVkZSAidmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCiBuYW1lc3BhY2UgS0pTIHsKIApAQCAtMTU4LDYgKzE2MCwx
MCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IFVTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVUNoYXIqIGNvZGUs
IGludCBjb2RlTGVuZ3RoLCBKU1ZhbHVlKiB0aGlzViA9IDApOwogICAgIENvbXBsZXRpb24gZXZh
bHVhdGUoY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBj
b25zdCBVU3RyaW5nJiBjb2RlLCBKU1ZhbHVlKiB0aGlzViA9IDApOwogCisgICAgQWN0aXZhdGlv
bkltcCogcHVzaEFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKTsKKyAgICB2b2lkIHBvcEFjdGl2
YXRpb24oKTsKKyAgICB2b2lkIHRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYyk7Cisg
ICAgCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiAiT2JqZWN0IiBvYmplY3Qu
IFRoaXMgaXMgdGhlIG9iamVjdCB0aGF0IHdhcyBzZXQKICAgICAgKiBhcyBhIHByb3BlcnR5IG9m
IHRoZSBnbG9iYWwgb2JqZWN0IGR1cmluZyBjb25zdHJ1Y3Rpb247IGlmIHRoZSBwcm9wZXJ0eQpA
QCAtMzYyLDYgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV90aWNrQ291bnQ7CiAg
ICAgdW5zaWduZWQgbV90aWNrc1VudGlsTmV4dFRpbWVvdXRDaGVjazsKIAorICAgIERlcXVlPFN0
YWNrQWN0aXZhdGlvbio+KiBtX2FjdGl2YXRpb25zOwogCiAgICAgT2JqZWN0T2JqZWN0SW1wKiBt
X09iamVjdDsKICAgICBGdW5jdGlvbk9iamVjdEltcCogbV9GdW5jdGlvbjsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmNwcAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTM0LDYgKzQxMzQsNyBAQCBDb21wbGV0aW9uIFdpdGhO
b2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqCiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICBKU09iamVj
dCAqbyA9IHYtPnRvT2JqZWN0KGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KKyAgZXhlYy0+
ZHluYW1pY0ludGVycHJldGVyKCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICBleGVjLT5w
dXNoU2NvcGUobyk7CiAgIENvbXBsZXRpb24gcmVzID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMp
OwogICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDM5NCw2ICs0Mzk1LDcgQEAgQ29tcGxldGlvbiBU
cnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZQogICBpZiAoY2F0Y2hCbG9jayAmJiBjLmNvbXBs
VHlwZSgpID09IFRocm93KSB7CiAgICAgSlNPYmplY3QgKm9iaiA9IG5ldyBKU09iamVjdDsKICAg
ICBvYmotPnB1dChleGVjLCBleGNlcHRpb25JZGVudCwgYy52YWx1ZSgpLCBEb250RGVsZXRlKTsK
KyAgICBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7
CiAgICAgZXhlYy0+cHVzaFNjb3BlKG9iaik7CiAgICAgYyA9IGNhdGNoQmxvY2stPmV4ZWN1dGUo
ZXhlYyk7CiAgICAgZXhlYy0+cG9wU2NvcGUoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJKHJldmlz
aW9uIDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJKU1R5cGUuaCIKICNpbmNsdWRlICJDb21t
b25JZGVudGlmaWVycy5oIgotI2luY2x1ZGUgImludGVycHJldGVyLmgiCisjaW5jbHVkZSAiRXhl
Y1N0YXRlLmgiCiAjaW5jbHVkZSAicHJvcGVydHlfbWFwLmgiCiAjaW5jbHVkZSAicHJvcGVydHlf
c2xvdC5oIgogI2luY2x1ZGUgInNjb3BlX2NoYWluLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18234</attachid>
            <date>2008-01-01 23:24:50 -0800</date>
            <delta_ts>2008-01-02 03:16:44 -0800</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>13359</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiaW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJ
bmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5j
bHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtK
UyB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CiAjaW5jbHVkZSA8a2pzL3VzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IHN0cnVjdCBTdGF0aWNWYWx1ZUVudHJ5IHsKICAgICBTdGF0aWNWYWx1ZUVudHJ5KEpTT2JqZWN0
R2V0UHJvcGVydHlDYWxsYmFjayBfZ2V0UHJvcGVydHksIEpTT2JqZWN0U2V0UHJvcGVydHlDYWxs
YmFjayBfc2V0UHJvcGVydHksIEpTUHJvcGVydHlBdHRyaWJ1dGVzIF9hdHRyaWJ1dGVzKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI4
MjMwKQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJpbnRlcnByZXRlci5oIgogCiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
ZnVuY3Rpb25fb2JqZWN0LmgiCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9tZXRob2QuaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAib2JqZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgS0pTIHsKIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgRXhlY1N0
YXRlOjpFeGVjU3RhdGUoSW50ZXJwcmV0ZXIqIGludGVycAogICAgIAogICAgIC8vIGNyZWF0ZSBh
bmQgaW5pdGlhbGl6ZSBhY3RpdmF0aW9uIG9iamVjdCAoRUNNQSAxMC4xLjYpCiAgICAgaWYgKHR5
cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0gICAgICAgIG1fYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0
aW9uSW1wKHRoaXMpOworICAgICAgICBtX2FjdGl2YXRpb24gPSBpbnRlcnByZXRlci0+cHVzaEFj
dGl2YXRpb24odGhpcyk7CiAgICAgICAgIG1fdmFyaWFibGUgPSBtX2FjdGl2YXRpb247CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9hY3RpdmF0aW9uID0gMDsKQEAgLTg1LDcgKzg1LDEwIEBAIEV4
ZWNTdGF0ZTo6RXhlY1N0YXRlKEludGVycHJldGVyKiBpbnRlcnAKIAogRXhlY1N0YXRlOjp+RXhl
Y1N0YXRlKCkKIHsKLSAgICBtX2ludGVycHJldGVyLT5zZXRDdXJyZW50RXhlYyhtX3NhdmVkRXhl
Y1N0YXRlKTsKKyAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIHN0YXRpY19jYXN0
PEFjdGl2YXRpb25JbXAqPihtX2FjdGl2YXRpb24pLT5pc09uU3RhY2soKSkKKyAgICBtX2ludGVy
cHJldGVyLT5wb3BBY3RpdmF0aW9uKCk7CisgIAorICBtX2ludGVycHJldGVyLT5zZXRDdXJyZW50
RXhlYyhtX3NhdmVkRXhlY1N0YXRlKTsKIH0KIAogdm9pZCBFeGVjU3RhdGU6Om1hcmsoKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MywxNiArMzkzLDI4IEBA
IGJvb2wgQXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKIAogY29uc3QgQ2xhc3NJ
bmZvIEFjdGl2YXRpb25JbXA6OmluZm8gPSB7ICJBY3RpdmF0aW9uIiwgMCwgMCB9OwogCi1BY3Rp
dmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wKEV4ZWNTdGF0ZSogZXhlYykKLSAgICA6IGQobmV3IEFj
dGl2YXRpb25JbXBQcml2YXRlKGV4ZWMpKQotICAgICwgbV9zeW1ib2xUYWJsZSgmZXhlYy0+ZnVu
Y3Rpb24oKS0+Ym9keS0+c3ltYm9sVGFibGUoKSkKK0FjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25J
bXAoU3RhY2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5KQogeworICBkID0gbmV3IEFjdGl2YXRp
b25JbXBQcml2YXRlKG9sZFN0YWNrRW50cnktPmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSk7Cisg
IGQtPm9uU3RhY2sgPSBmYWxzZTsKKyAgbV9zeW1ib2xUYWJsZSA9IG9sZFN0YWNrRW50cnktPmFj
dGl2YXRpb25TdG9yYWdlLm1fc3ltYm9sVGFibGU7CiB9CiAKK3ZvaWQgQWN0aXZhdGlvbkltcDo6
aW5pdChFeGVjU3RhdGUqIGV4ZWMsIEFjdGl2YXRpb25JbXBQcml2YXRlKiBwKQoreworICBkID0g
cDsKKyAgbV9zeW1ib2xUYWJsZSA9ICZleGVjLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJs
ZSgpOworICAKKyAgZC0+ZXhlYyA9IGV4ZWM7CisgIGQtPmZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rp
b24oKTsKKyAgZC0+YXJndW1lbnRzT2JqZWN0ID0gMDsKKyAgZC0+b25TdGFjayA9IHRydWU7Cit9
CisgIAogSlNWYWx1ZSogQWN0aXZhdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICBBY3RpdmF0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlv
bkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEFjdGl2YXRpb25JbXBQcml2YXRlKiBkID0gdGhp
c09iai0+ZC5nZXQoKTsKKyAgQWN0aXZhdGlvbkltcFByaXZhdGUqIGQgPSB0aGlzT2JqLT5kOwog
ICAKICAgaWYgKCFkLT5hcmd1bWVudHNPYmplY3QpCiAgICAgdGhpc09iai0+Y3JlYXRlQXJndW1l
bnRzT2JqZWN0KGV4ZWMpOwpAQCAtNDg2LDcgKzQ5OCw3IEBAIHZvaWQgQWN0aXZhdGlvbkltcDo6
cHV0KEV4ZWNTdGF0ZSosIGNvbnMKIAogdm9pZCBBY3RpdmF0aW9uSW1wOjptYXJrKCkKIHsKLSAg
ICBKU09iamVjdDo6bWFyaygpOworICAgIGlmICghaXNPblN0YWNrKCkpIEpTT2JqZWN0OjptYXJr
KCk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGQtPmxvY2FsU3RvcmFnZS5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTUxMSw2ICs1MjMsMTkgQEAgdm9p
ZCBBY3RpdmF0aW9uSW1wOjpjcmVhdGVBcmd1bWVudHNPYmplYwogICAgIGQtPmFyZ3VtZW50c09i
amVjdCA9IG5ldyBBcmd1bWVudHMoZXhlYywgZC0+ZnVuY3Rpb24sICpkLT5leGVjLT5hcmd1bWVu
dHMoKSwgdGhpcyk7CiB9CiAKK0FjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBQcml2YXRlOjpB
Y3RpdmF0aW9uSW1wUHJpdmF0ZShjb25zdCBBY3RpdmF0aW9uSW1wUHJpdmF0ZSYgb2xkKQoreyAg
CisgIG1lbWNweSh0aGlzLCAmb2xkLCBzaXplb2YoQWN0aXZhdGlvbkltcFByaXZhdGUpKTsKK30K
KworU3RhY2tBY3RpdmF0aW9uOjpTdGFja0FjdGl2YXRpb24oY29uc3QgU3RhY2tBY3RpdmF0aW9u
JiBvbGQpCit7CisgIG1lbWNweSgmYWN0aXZhdGlvblN0b3JhZ2UsICYob2xkLmFjdGl2YXRpb25T
dG9yYWdlKSwgc2l6ZW9mKEFjdGl2YXRpb25JbXApKTsKKyAgbWVtY3B5KCZhY3RpdmF0aW9uUHJp
dmF0ZVN0b3JhZ2UsICYob2xkLmFjdGl2YXRpb25Qcml2YXRlU3RvcmFnZSksIHNpemVvZihBY3Rp
dmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wUHJpdmF0ZSkpOworICAKKyAgYWN0aXZhdGlvblN0b3Jh
Z2UuZCA9ICZhY3RpdmF0aW9uUHJpdmF0ZVN0b3JhZ2U7Cit9CisgIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbEZ1bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogCkBAIC03NjksNiArNzk0LDcgQEAgSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6
Y2FsbEFzRnVuY3Rpb24oRQogICAgICAgaWYgKCF4LT5pc1N0cmluZygpKQogICAgICAgICByZXR1
cm4geDsKICAgICAgIGVsc2UgeworICAgICAgICBleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+
dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgICAgICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5n
KGV4ZWMpOwogICAgICAgICAKICAgICAgICAgaW50IHNvdXJjZUlkOwpAQCAtNzg4LDggKzgxNCw5
IEBAIEpTVmFsdWUqIEdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEUKICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3Vy
Y2VJZCwgTlVMTCk7CiAKICAgICAgICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYmIHRo
aXNPYmogIT0gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICAgIAorICAgICAgICAKICAgICAgICAgLy8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRl
eHQKKyAgICAgICAgaWYgKCFzd2l0Y2hHbG9iYWwpIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigp
LT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKICAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJl
dGVyID0gc3dpdGNoR2xvYmFsID8gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzT2Jq
KS0+aW50ZXJwcmV0ZXIoKSA6IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpOwogICAgICAgICBK
U09iamVjdCogdGhpc1ZhbCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOwogICAgICAgICBFeGVjU3RhdGUgbmV3RXhlYyhpbnRlcnByZXRlciwgaW50ZXJwcmV0ZXIt
Pmdsb2JhbE9iamVjdCgpLCB0aGlzVmFsLCBwcm9nTm9kZS5nZXQoKSwgRXZhbENvZGUsIGV4ZWMp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAog
I2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5j
bHVkZSAib2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgS0pT
IHsKIAogICBjbGFzcyBBY3RpdmF0aW9uSW1wOwogICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwog
ICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKKyAgY2xhc3MgU3RhY2tBY3RpdmF0aW9uOwogCiAg
IGNsYXNzIEludGVybmFsRnVuY3Rpb25JbXAgOiBwdWJsaWMgSlNPYmplY3QgewogICBwdWJsaWM6
CkBAIC0xMzgsMjQgKzEzOCwzMiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgfTsKIAogICBjbGFzcyBB
Y3RpdmF0aW9uSW1wIDogcHVibGljIEpTT2JqZWN0IHsKKyAgZnJpZW5kIGNsYXNzIFN0YWNrQWN0
aXZhdGlvbjsKICAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgQWN0aXZhdGlvbkltcFByaXZhdGUgewot
ICAgICAgICBBY3RpdmF0aW9uSW1wUHJpdmF0ZShFeGVjU3RhdGUqIGUpCi0gICAgICAgICAgICA6
IGV4ZWMoZSkKLSAgICAgICAgICAgICwgZnVuY3Rpb24oZS0+ZnVuY3Rpb24oKSkKLSAgICAgICAg
ICAgICwgYXJndW1lbnRzT2JqZWN0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAK
KyAgICAgICAgQWN0aXZhdGlvbkltcFByaXZhdGUoKSB7IH0KKyAgICAgICAgQWN0aXZhdGlvbklt
cFByaXZhdGUoY29uc3QgQWN0aXZhdGlvbkltcFByaXZhdGUmKTsKKyAgICAgIAogICAgICAgICBM
b2NhbFN0b3JhZ2UgbG9jYWxTdG9yYWdlOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7CiAgICAg
ICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbjsKICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHNP
YmplY3Q7CisgICAgICAgIAorICAgICAgICBib29sIG9uU3RhY2s7CiAgICAgfTsKIAogICBwdWJs
aWM6Ci0gICAgQWN0aXZhdGlvbkltcChFeGVjU3RhdGUqKTsKLQorICAgIEFjdGl2YXRpb25JbXAo
KSB7IH07CisgICAgQWN0aXZhdGlvbkltcChTdGFja0FjdGl2YXRpb24qIG9sZFN0YWNrRW50cnkp
OworICAgIAorICAgIH5BY3RpdmF0aW9uSW1wKCkKKyAgICB7CisgICAgICBpZiAoIWQtPm9uU3Rh
Y2spCisgICAgICAgIGRlbGV0ZSBkOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXQoRXhlY1N0
YXRlKiBleGVjLCBBY3RpdmF0aW9uSW1wUHJpdmF0ZSogcCk7CisgICAgCiAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwog
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpOwpAQCAtMTY4LDYgKzE3Niw3IEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgICAgYm9vbCBpc0FjdGl2YXRpb24oKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBib29sIGlz
T25TdGFjaygpIHsgcmV0dXJuIGQtPm9uU3RhY2s7IH0KICAgICBMb2NhbFN0b3JhZ2UmIGxvY2Fs
U3RvcmFnZSgpIHsgcmV0dXJuIGQtPmxvY2FsU3RvcmFnZTsgfQogICAgIFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9CiAKQEAgLTE3NiwxMCArMTg1
LDIwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90KTsKICAgICB2b2lkIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUq
KTsKICAgICAKLSAgICBPd25QdHI8QWN0aXZhdGlvbkltcFByaXZhdGU+IGQ7CisgICAgQWN0aXZh
dGlvbkltcFByaXZhdGUqIGQ7CiAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAgIH07
CiAKKyAgc3RydWN0IFN0YWNrQWN0aXZhdGlvbiB7CisgICAgU3RhY2tBY3RpdmF0aW9uKCkgeyB9
CisgICAgU3RhY2tBY3RpdmF0aW9uKGNvbnN0IFN0YWNrQWN0aXZhdGlvbiYpOworICAgIAorICAg
IH5TdGFja0FjdGl2YXRpb24oKSB7IH0gCisgICAgCisgICAgQWN0aXZhdGlvbkltcCBhY3RpdmF0
aW9uU3RvcmFnZTsKKyAgICBBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wUHJpdmF0ZSBhY3Rp
dmF0aW9uUHJpdmF0ZVN0b3JhZ2U7CisgIH07CisgIAogICBjbGFzcyBHbG9iYWxGdW5jSW1wIDog
cHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICBwdWJsaWM6CiAgICAgR2xvYmFsRnVuY0lt
cChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBjb25zdCBJ
ZGVudGlmaWVyJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk3LDYgKzE5Nyw4IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmNyZWF0ZU9iamVjdHNG
b3JHbG9iYWwKICAgICBtX1R5cGVFcnJvciA9IDA7CiAgICAgbV9VcmlFcnJvciA9IDA7CiAKKyAg
ICBtX2FjdGl2YXRpb25zID0gbmV3IERlcXVlPFN0YWNrQWN0aXZhdGlvbio+OworICAKICAgICAv
LyBQcm90b3R5cGVzCiAgICAgbV9GdW5jdGlvblByb3RvdHlwZSA9IG5ldyBGdW5jdGlvblByb3Rv
dHlwZSgmbV9nbG9iYWxFeGVjKTsKICAgICBtX09iamVjdFByb3RvdHlwZSA9IG5ldyBPYmplY3RQ
cm90b3R5cGUoJm1fZ2xvYmFsRXhlYywgbV9GdW5jdGlvblByb3RvdHlwZSk7CkBAIC0zOTksNiAr
NDAxLDM3IEBAIENvbXBsZXRpb24gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGNvbnN0IFUKICAgICBy
ZXR1cm4gcmVzOwogfQogCitBY3RpdmF0aW9uSW1wKiBJbnRlcnByZXRlcjo6cHVzaEFjdGl2YXRp
b24oRXhlY1N0YXRlKiBleGVjKQoreworICBTdGFja0FjdGl2YXRpb24qIHN0YWNrRW50cnkgPSBu
ZXcgU3RhY2tBY3RpdmF0aW9uOworICBtX2FjdGl2YXRpb25zLT5wcmVwZW5kKHN0YWNrRW50cnkp
OworICBzdGFja0VudHJ5LT5hY3RpdmF0aW9uU3RvcmFnZS5pbml0KGV4ZWMsICYoc3RhY2tFbnRy
eS0+YWN0aXZhdGlvblByaXZhdGVTdG9yYWdlKSk7CisgICAgCisgIHJldHVybiAmKHN0YWNrRW50
cnktPmFjdGl2YXRpb25TdG9yYWdlKTsKK30KKyAgCit2b2lkIEludGVycHJldGVyOjpwb3BBY3Rp
dmF0aW9uKCkKK3sKKyAgbV9hY3RpdmF0aW9ucy0+cmVtb3ZlRmlyc3QoKTsKK30KKwordm9pZCBJ
bnRlcnByZXRlcjo6dGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICBpZiAo
ZXhlYy0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3RhdGljX2Nhc3Q8QWN0aXZhdGlv
bkltcCo+KGV4ZWMtPmFjdGl2YXRpb25PYmplY3QoKSktPmlzT25TdGFjaygpKSB7CisgICAgU3Rh
Y2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5ID0gbV9hY3RpdmF0aW9ucy0+Zmlyc3QoKTsKKyAg
ICBtX2FjdGl2YXRpb25zLT5yZW1vdmVGaXJzdCgpOworICAgIAorICAgIEFjdGl2YXRpb25JbXAq
IG5ld0FjdGl2YXRpb24gPSBuZXcgQWN0aXZhdGlvbkltcChvbGRTdGFja0VudHJ5KTsKKyAgICAK
KyAgICBleGVjLT5tX2FjdGl2YXRpb24gPSBuZXdBY3RpdmF0aW9uOworICAgIGV4ZWMtPm1fdmFy
aWFibGUgPSBuZXdBY3RpdmF0aW9uOworICAgIGV4ZWMtPnVwZGF0ZUxvY2FsU3RvcmFnZSgpOwor
ICAgIAorICAgIGV4ZWMtPnBvcFNjb3BlKCk7CisgICAgZXhlYy0+cHVzaFNjb3BlKG5ld0FjdGl2
YXRpb24pOyAgICAKKyAgfQorfQorICAKIEpTT2JqZWN0ICpJbnRlcnByZXRlcjo6YnVpbHRpbk9i
amVjdCgpIGNvbnN0CiB7CiAgIHJldHVybiBtX09iamVjdDsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9pbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cnByZXRlci5oCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnBy
ZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTIgQEAKICNkZWZpbmUgX0tKU19J
TlRFUlBSRVRFUl9IXwogCiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiZnVuY3Rp
b24uaCIKICNpbmNsdWRlICJwcm90ZWN0LmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRl
ICJ2YWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CiAKIG5hbWVzcGFjZSBLSlMgewogCkBAIC0xNTgsNiArMTYwLDEwIEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgIENvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgVVN0cmluZyYgc291cmNlVVJM
LCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBjb25zdCBVQ2hhciogY29kZSwgaW50IGNvZGVMZW5n
dGgsIEpTVmFsdWUqIHRoaXNWID0gMCk7CiAgICAgQ29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBV
U3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcm
IGNvZGUsIEpTVmFsdWUqIHRoaXNWID0gMCk7CiAKKyAgICBBY3RpdmF0aW9uSW1wKiBwdXNoQWN0
aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpOworICAgIHZvaWQgcG9wQWN0aXZhdGlvbigpOworICAg
IHZvaWQgdGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKTsKKyAgICAKICAgICAvKioK
ICAgICAgKiBSZXR1cm5zIHRoZSBidWlsdGluICJPYmplY3QiIG9iamVjdC4gVGhpcyBpcyB0aGUg
b2JqZWN0IHRoYXQgd2FzIHNldAogICAgICAqIGFzIGEgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBv
YmplY3QgZHVyaW5nIGNvbnN0cnVjdGlvbjsgaWYgdGhlIHByb3BlcnR5CkBAIC0zNjIsNiArMzY4
LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3RpY2tDb3VudDsKICAgICB1bnNpZ25lZCBt
X3RpY2tzVW50aWxOZXh0VGltZW91dENoZWNrOwogCisgICAgRGVxdWU8U3RhY2tBY3RpdmF0aW9u
Kj4qIG1fYWN0aXZhdGlvbnM7CiAKICAgICBPYmplY3RPYmplY3RJbXAqIG1fT2JqZWN0OwogICAg
IEZ1bmN0aW9uT2JqZWN0SW1wKiBtX0Z1bmN0aW9uOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShy
ZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxMzQsNiArNDEzNCw3IEBAIENvbXBsZXRpb24gV2l0aE5vZGU6OmV4ZWN1dGUo
RXhlY1N0YXRlICoKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAgIEpTT2JqZWN0ICpvID0gdi0+dG9P
YmplY3QoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgorICBleGVjLT5keW5hbWljSW50ZXJw
cmV0ZXIoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgIGV4ZWMtPnB1c2hTY29wZShvKTsK
ICAgQ29tcGxldGlvbiByZXMgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgIGV4ZWMtPnBv
cFNjb3BlKCk7CkBAIC00Mzk0LDYgKzQzOTUsNyBAQCBDb21wbGV0aW9uIFRyeU5vZGU6OmV4ZWN1
dGUoRXhlY1N0YXRlICplCiAgIGlmIChjYXRjaEJsb2NrICYmIGMuY29tcGxUeXBlKCkgPT0gVGhy
b3cpIHsKICAgICBKU09iamVjdCAqb2JqID0gbmV3IEpTT2JqZWN0OwogICAgIG9iai0+cHV0KGV4
ZWMsIGV4Y2VwdGlvbklkZW50LCBjLnZhbHVlKCksIERvbnREZWxldGUpOworICAgIGV4ZWMtPmR5
bmFtaWNJbnRlcnByZXRlcigpLT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKICAgICBleGVjLT5w
dXNoU2NvcGUob2JqKTsKICAgICBjID0gY2F0Y2hCbG9jay0+ZXhlY3V0ZShleGVjKTsKICAgICBl
eGVjLT5wb3BTY29wZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkocmV2aXNpb24gMjgyMzApCisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCi0jaW5jbHVkZSAiaW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJFeGVjU3RhdGUuaCIKICNp
bmNsdWRlICJwcm9wZXJ0eV9tYXAuaCIKICNpbmNsdWRlICJwcm9wZXJ0eV9zbG90LmgiCiAjaW5j
bHVkZSAic2NvcGVfY2hhaW4uaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18236</attachid>
            <date>2008-01-02 03:16:44 -0800</date>
            <delta_ts>2008-01-05 04:45:29 -0800</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>16229</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNDYWxs
YmFja0NvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiaW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJ
bmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5j
bHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtK
UyB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmgJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CiAjaW5jbHVkZSA8a2pzL3VzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IHN0cnVjdCBTdGF0aWNWYWx1ZUVudHJ5IHsKICAgICBTdGF0aWNWYWx1ZUVudHJ5KEpTT2JqZWN0
R2V0UHJvcGVydHlDYWxsYmFjayBfZ2V0UHJvcGVydHksIEpTT2JqZWN0U2V0UHJvcGVydHlDYWxs
YmFjayBfc2V0UHJvcGVydHksIEpTUHJvcGVydHlBdHRyaWJ1dGVzIF9hdHRyaWJ1dGVzKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI4
MjMwKQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNsdWRlICJpbnRlcnByZXRlci5oIgogCiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9t
ZXRob2QuY3BwCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKKyNpbmNsdWRl
ICJpbnRlcnByZXRlci5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
ZnVuY3Rpb25fb2JqZWN0LmgiCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGlt
ZV9tZXRob2QuaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAjaW5jbHVkZSAib2JqZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgS0pTIHsKIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL0V4ZWNTdGF0ZS5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL0V4ZWNTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgImZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
aW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzY29wZV9jaGFpbl9tYXJrLmgiCiAKIG5hbWVzcGFjZSBL
SlMgewogCkBAIC01MSw3ICs1Miw3IEBAIEV4ZWNTdGF0ZTo6RXhlY1N0YXRlKEludGVycHJldGVy
KiBpbnRlcnAKICAgICAKICAgICAvLyBjcmVhdGUgYW5kIGluaXRpYWxpemUgYWN0aXZhdGlvbiBv
YmplY3QgKEVDTUEgMTAuMS42KQogICAgIGlmICh0eXBlID09IEZ1bmN0aW9uQ29kZSkgewotICAg
ICAgICBtX2FjdGl2YXRpb24gPSBuZXcgQWN0aXZhdGlvbkltcCh0aGlzKTsKKyAgICAgICAgbV9h
Y3RpdmF0aW9uID0gaW50ZXJwcmV0ZXItPnB1c2hBY3RpdmF0aW9uKHRoaXMpOwogICAgICAgICBt
X3ZhcmlhYmxlID0gbV9hY3RpdmF0aW9uOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fYWN0aXZh
dGlvbiA9IDA7CkBAIC04NSw3ICs4NiwxMCBAQCBFeGVjU3RhdGU6OkV4ZWNTdGF0ZShJbnRlcnBy
ZXRlciogaW50ZXJwCiAKIEV4ZWNTdGF0ZTo6fkV4ZWNTdGF0ZSgpCiB7Ci0gICAgbV9pbnRlcnBy
ZXRlci0+c2V0Q3VycmVudEV4ZWMobV9zYXZlZEV4ZWNTdGF0ZSk7CisgIGlmIChtX2NvZGVUeXBl
ID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obV9hY3RpdmF0
aW9uKS0+aXNPblN0YWNrKCkpCisgICAgbV9pbnRlcnByZXRlci0+cG9wQWN0aXZhdGlvbigpOwor
ICAKKyAgbV9pbnRlcnByZXRlci0+c2V0Q3VycmVudEV4ZWMobV9zYXZlZEV4ZWNTdGF0ZSk7CiB9
CiAKIHZvaWQgRXhlY1N0YXRlOjptYXJrKCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTMsMTYgKzM5MywyOCBAQCBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJv
cGVydHkoRXhlY1N0YXRlCiAKIGNvbnN0IENsYXNzSW5mbyBBY3RpdmF0aW9uSW1wOjppbmZvID0g
eyAiQWN0aXZhdGlvbiIsIDAsIDAgfTsKIAotQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcChF
eGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBkKG5ldyBBY3RpdmF0aW9uSW1wUHJpdmF0ZShleGVjKSkK
LSAgICAsIG1fc3ltYm9sVGFibGUoJmV4ZWMtPmZ1bmN0aW9uKCktPmJvZHktPnN5bWJvbFRhYmxl
KCkpCitBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wKFN0YWNrQWN0aXZhdGlvbiogb2xkU3Rh
Y2tFbnRyeSkKIHsKKyAgZCA9IG5ldyBBY3RpdmF0aW9uSW1wUHJpdmF0ZShvbGRTdGFja0VudHJ5
LT5hY3RpdmF0aW9uUHJpdmF0ZVN0b3JhZ2UpOworICBkLT5vblN0YWNrID0gZmFsc2U7CisgIG1f
c3ltYm9sVGFibGUgPSBvbGRTdGFja0VudHJ5LT5hY3RpdmF0aW9uU3RvcmFnZS5tX3N5bWJvbFRh
YmxlOwogfQogCit2b2lkIEFjdGl2YXRpb25JbXA6OmluaXQoRXhlY1N0YXRlKiBleGVjLCBBY3Rp
dmF0aW9uSW1wUHJpdmF0ZSogcCkKK3sKKyAgZCA9IHA7CisgIG1fc3ltYm9sVGFibGUgPSAmZXhl
Yy0+ZnVuY3Rpb24oKS0+Ym9keS0+c3ltYm9sVGFibGUoKTsKKyAgCisgIGQtPmV4ZWMgPSBleGVj
OworICBkLT5mdW5jdGlvbiA9IGV4ZWMtPmZ1bmN0aW9uKCk7CisgIGQtPmFyZ3VtZW50c09iamVj
dCA9IDA7CisgIGQtPm9uU3RhY2sgPSB0cnVlOworfQorICAKIEpTVmFsdWUqIEFjdGl2YXRpb25J
bXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgQWN0aXZhdGlvbkltcCog
dGhpc09iaiA9IHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihzbG90LnNsb3RCYXNlKCkpOwot
ICBBY3RpdmF0aW9uSW1wUHJpdmF0ZSogZCA9IHRoaXNPYmotPmQuZ2V0KCk7CisgIEFjdGl2YXRp
b25JbXBQcml2YXRlKiBkID0gdGhpc09iai0+ZDsKICAgCiAgIGlmICghZC0+YXJndW1lbnRzT2Jq
ZWN0KQogICAgIHRoaXNPYmotPmNyZWF0ZUFyZ3VtZW50c09iamVjdChleGVjKTsKQEAgLTQ4Niw3
ICs0OTgsNyBAQCB2b2lkIEFjdGl2YXRpb25JbXA6OnB1dChFeGVjU3RhdGUqLCBjb25zCiAKIHZv
aWQgQWN0aXZhdGlvbkltcDo6bWFyaygpCiB7Ci0gICAgSlNPYmplY3Q6Om1hcmsoKTsKKyAgICBp
ZiAoIWlzT25TdGFjaygpKSBKU09iamVjdDo6bWFyaygpOwogCiAgICAgc2l6ZV90IHNpemUgPSBk
LT5sb2NhbFN0b3JhZ2Uuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKSB7CkBAIC01MTEsNiArNTIzLDIwIEBAIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJn
dW1lbnRzT2JqZWMKICAgICBkLT5hcmd1bWVudHNPYmplY3QgPSBuZXcgQXJndW1lbnRzKGV4ZWMs
IGQtPmZ1bmN0aW9uLCAqZC0+ZXhlYy0+YXJndW1lbnRzKCksIHRoaXMpOwogfQogCitBY3RpdmF0
aW9uSW1wOjpBY3RpdmF0aW9uSW1wUHJpdmF0ZTo6QWN0aXZhdGlvbkltcFByaXZhdGUoY29uc3Qg
QWN0aXZhdGlvbkltcFByaXZhdGUmIG9sZCkKK3sKKyAgLy8gbWVtY3B5KCZsb2NhbFN0b3JhZ2Us
ICYob2xkLmxvY2FsU3RvcmFnZSksIHNpemVvZihMb2NhbFN0b3JhZ2UpKTsKKyAgCisgIGxvY2Fs
U3RvcmFnZS5yZXNlcnZlQ2FwYWNpdHkob2xkLmxvY2FsU3RvcmFnZS5zaXplKCkpOworICAKKyAg
Zm9yIChMb2NhbFN0b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvbGQubG9jYWxTdG9yYWdl
LmJlZ2luKCk7IGl0ZXIgIT0gb2xkLmxvY2FsU3RvcmFnZS5lbmQoKTsgKytpdGVyKQorICAgIGxv
Y2FsU3RvcmFnZS51bmNoZWNrZWRBcHBlbmQoKml0ZXIpOworICAKKyAgZXhlYyA9IG9sZC5leGVj
OworICBmdW5jdGlvbiA9IG9sZC5mdW5jdGlvbjsKKyAgYXJndW1lbnRzT2JqZWN0ID0gb2xkLmFy
Z3VtZW50c09iamVjdDsKK30KKyAgCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
R2xvYmFsRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKQEAgLTc2
OSw2ICs3OTUsNyBAQCBKU1ZhbHVlKiBHbG9iYWxGdW5jSW1wOjpjYWxsQXNGdW5jdGlvbihFCiAg
ICAgICBpZiAoIXgtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiB4OwogICAgICAgZWxzZSB7
CisgICAgICAgIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT50ZWFyT2ZmQWN0aXZhdGlvbihl
eGVjKTsKICAgICAgICAgVVN0cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIAog
ICAgICAgICBpbnQgc291cmNlSWQ7CkBAIC03ODgsOCArODE1LDkgQEAgSlNWYWx1ZSogR2xvYmFs
RnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKIAogICAg
ICAgICBib29sIHN3aXRjaEdsb2JhbCA9IHRoaXNPYmogJiYgdGhpc09iaiAhPSBleGVjLT5keW5h
bWljSW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgICAgCisgICAgICAgIAog
ICAgICAgICAvLyBlbnRlciBhIG5ldyBleGVjdXRpb24gY29udGV4dAorICAgICAgICBpZiAoIXN3
aXRjaEdsb2JhbCkgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPnRlYXJPZmZBY3RpdmF0aW9u
KGV4ZWMpOwogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBzd2l0Y2hHbG9iYWwg
PyBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmopLT5pbnRlcnByZXRlcigpIDog
ZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCk7CiAgICAgICAgIEpTT2JqZWN0KiB0aGlzVmFsID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgICAgIEV4ZWNT
dGF0ZSBuZXdFeGVjKGludGVycHJldGVyLCBpbnRlcnByZXRlci0+Z2xvYmFsT2JqZWN0KCksIHRo
aXNWYWwsIHByb2dOb2RlLmdldCgpLCBFdmFsQ29kZSwgZXhlYyk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvZnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVu
Y3Rpb24uaAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4LDEzIEBACiAjaW5jbHVkZSAiTG9jYWxTdG9y
YWdlLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJvYmplY3QuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIEFjdGl2
YXRpb25JbXA7CiAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiAgIGNsYXNzIEZ1bmN0aW9uUHJv
dG90eXBlOworICBjbGFzcyBTdGFja0FjdGl2YXRpb247CiAKICAgY2xhc3MgSW50ZXJuYWxGdW5j
dGlvbkltcCA6IHB1YmxpYyBKU09iamVjdCB7CiAgIHB1YmxpYzoKQEAgLTEzOCwyNCArMTM4LDMy
IEBAIG5hbWVzcGFjZSBLSlMgewogICB9OwogCiAgIGNsYXNzIEFjdGl2YXRpb25JbXAgOiBwdWJs
aWMgSlNPYmplY3QgeworICBmcmllbmQgY2xhc3MgU3RhY2tBY3RpdmF0aW9uOwogICBwcml2YXRl
OgogICAgIHN0cnVjdCBBY3RpdmF0aW9uSW1wUHJpdmF0ZSB7Ci0gICAgICAgIEFjdGl2YXRpb25J
bXBQcml2YXRlKEV4ZWNTdGF0ZSogZSkKLSAgICAgICAgICAgIDogZXhlYyhlKQotICAgICAgICAg
ICAgLCBmdW5jdGlvbihlLT5mdW5jdGlvbigpKQotICAgICAgICAgICAgLCBhcmd1bWVudHNPYmpl
Y3QoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAorICAgICAgICBBY3RpdmF0aW9u
SW1wUHJpdmF0ZSgpIHsgfQorICAgICAgICBBY3RpdmF0aW9uSW1wUHJpdmF0ZShjb25zdCBBY3Rp
dmF0aW9uSW1wUHJpdmF0ZSYpOworICAgICAgCiAgICAgICAgIExvY2FsU3RvcmFnZSBsb2NhbFN0
b3JhZ2U7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYzsKICAgICAgICAgRnVuY3Rpb25JbXAqIGZ1
bmN0aW9uOwogICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50c09iamVjdDsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgb25TdGFjazsKICAgICB9OwogCiAgIHB1YmxpYzoKLSAgICBBY3RpdmF0aW9u
SW1wKEV4ZWNTdGF0ZSopOwotCisgICAgQWN0aXZhdGlvbkltcCgpIHsgfTsKKyAgICBBY3RpdmF0
aW9uSW1wKFN0YWNrQWN0aXZhdGlvbiogb2xkU3RhY2tFbnRyeSk7CisgICAgCisgICAgfkFjdGl2
YXRpb25JbXAoKQorICAgIHsKKyAgICAgIGlmICghZC0+b25TdGFjaykKKyAgICAgICAgZGVsZXRl
IGQ7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdChFeGVjU3RhdGUqIGV4ZWMsIEFjdGl2YXRp
b25JbXBQcml2YXRlKiBwKTsKKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBib29sIGRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7
CkBAIC0xNjgsNiArMTc2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICBib29sIGlzQWN0aXZh
dGlvbigpIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIGJvb2wgaXNPblN0YWNrKCkgeyByZXR1cm4g
ZC0+b25TdGFjazsgfQogICAgIExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlKCkgeyByZXR1cm4g
ZC0+bG9jYWxTdG9yYWdlOyB9CiAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1
cm4gKm1fc3ltYm9sVGFibGU7IH0KIApAQCAtMTc2LDEwICsxODUsMjAgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgc3RhdGljIEpTVmFsdWUqIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICAg
IHZvaWQgY3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSopOwogICAgIAotICAgIE93blB0
cjxBY3RpdmF0aW9uSW1wUHJpdmF0ZT4gZDsKKyAgICBBY3RpdmF0aW9uSW1wUHJpdmF0ZSogZDsK
ICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKICAgfTsKIAorICBzdHJ1Y3QgU3RhY2tB
Y3RpdmF0aW9uIHsKKyAgICBTdGFja0FjdGl2YXRpb24oKSB7IH0KKyAgICBTdGFja0FjdGl2YXRp
b24oY29uc3QgU3RhY2tBY3RpdmF0aW9uJik7CisgICAgCisgICAgflN0YWNrQWN0aXZhdGlvbigp
IHsgfSAKKyAgICAKKyAgICBBY3RpdmF0aW9uSW1wIGFjdGl2YXRpb25TdG9yYWdlOworICAgIEFj
dGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBQcml2YXRlIGFjdGl2YXRpb25Qcml2YXRlU3RvcmFn
ZTsKKyAgfTsKKyAgCiAgIGNsYXNzIEdsb2JhbEZ1bmNJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbkltcCB7CiAgIHB1YmxpYzoKICAgICBHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0ZSosIEZ1bmN0
aW9uUHJvdG90eXBlKiwgaW50IGksIGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9pbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL2ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjgyMzApCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvaW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3
LDggQEAgdm9pZCBJbnRlcnByZXRlcjo6Y3JlYXRlT2JqZWN0c0Zvckdsb2JhbAogICAgIG1fVHlw
ZUVycm9yID0gMDsKICAgICBtX1VyaUVycm9yID0gMDsKIAorICAgIG1fYWN0aXZhdGlvbnMgPSBu
ZXcgRGVxdWU8U3RhY2tBY3RpdmF0aW9uKj47CisgIAogICAgIC8vIFByb3RvdHlwZXMKICAgICBt
X0Z1bmN0aW9uUHJvdG90eXBlID0gbmV3IEZ1bmN0aW9uUHJvdG90eXBlKCZtX2dsb2JhbEV4ZWMp
OwogICAgIG1fT2JqZWN0UHJvdG90eXBlID0gbmV3IE9iamVjdFByb3RvdHlwZSgmbV9nbG9iYWxF
eGVjLCBtX0Z1bmN0aW9uUHJvdG90eXBlKTsKQEAgLTM5OSw2ICs0MDEsMzcgQEAgQ29tcGxldGlv
biBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoY29uc3QgVQogICAgIHJldHVybiByZXM7CiB9CiAKK0Fj
dGl2YXRpb25JbXAqIEludGVycHJldGVyOjpwdXNoQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgIFN0YWNrQWN0aXZhdGlvbiogc3RhY2tFbnRyeSA9IG5ldyBTdGFja0FjdGl2YXRpb247
CisgIG1fYWN0aXZhdGlvbnMtPnByZXBlbmQoc3RhY2tFbnRyeSk7CisgIHN0YWNrRW50cnktPmFj
dGl2YXRpb25TdG9yYWdlLmluaXQoZXhlYywgJihzdGFja0VudHJ5LT5hY3RpdmF0aW9uUHJpdmF0
ZVN0b3JhZ2UpKTsKKyAgICAKKyAgcmV0dXJuICYoc3RhY2tFbnRyeS0+YWN0aXZhdGlvblN0b3Jh
Z2UpOworfQorICAKK3ZvaWQgSW50ZXJwcmV0ZXI6OnBvcEFjdGl2YXRpb24oKQoreworICBtX2Fj
dGl2YXRpb25zLT5yZW1vdmVGaXJzdCgpOworfQorCit2b2lkIEludGVycHJldGVyOjp0ZWFyT2Zm
QWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgIGlmIChleGVjLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+YWN0aXZh
dGlvbk9iamVjdCgpKS0+aXNPblN0YWNrKCkpIHsKKyAgICBTdGFja0FjdGl2YXRpb24qIG9sZFN0
YWNrRW50cnkgPSBtX2FjdGl2YXRpb25zLT5maXJzdCgpOworICAgIG1fYWN0aXZhdGlvbnMtPnJl
bW92ZUZpcnN0KCk7CisgICAgCisgICAgQWN0aXZhdGlvbkltcCogbmV3QWN0aXZhdGlvbiA9IG5l
dyBBY3RpdmF0aW9uSW1wKG9sZFN0YWNrRW50cnkpOworICAgIAorICAgIGV4ZWMtPm1fYWN0aXZh
dGlvbiA9IG5ld0FjdGl2YXRpb247CisgICAgZXhlYy0+bV92YXJpYWJsZSA9IG5ld0FjdGl2YXRp
b247CisgICAgZXhlYy0+dXBkYXRlTG9jYWxTdG9yYWdlKCk7CisgICAgCisgICAgZXhlYy0+cG9w
U2NvcGUoKTsKKyAgICBleGVjLT5wdXNoU2NvcGUobmV3QWN0aXZhdGlvbik7ICAgIAorICB9Cit9
CisgIAogSlNPYmplY3QgKkludGVycHJldGVyOjpidWlsdGluT2JqZWN0KCkgY29uc3QKIHsKICAg
cmV0dXJuIG1fT2JqZWN0OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVycHJldGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDEwICsyNSwxMiBAQAogI2RlZmluZSBfS0pTX0lOVEVSUFJFVEVSX0hfCiAKICNp
bmNsdWRlICJFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJmdW5jdGlvbi5oIgogI2luY2x1ZGUgInBy
b3RlY3QuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgInZhbHVlLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KIAogbmFtZXNwYWNl
IEtKUyB7CiAKQEAgLTE1OCw2ICsxNjAsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQ29tcGxl
dGlvbiBldmFsdWF0ZShjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVO
dW1iZXIsIGNvbnN0IFVDaGFyKiBjb2RlLCBpbnQgY29kZUxlbmd0aCwgSlNWYWx1ZSogdGhpc1Yg
PSAwKTsKICAgICBDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwg
aW50IHN0YXJ0aW5nTGluZU51bWJlciwgY29uc3QgVVN0cmluZyYgY29kZSwgSlNWYWx1ZSogdGhp
c1YgPSAwKTsKIAorICAgIEFjdGl2YXRpb25JbXAqIHB1c2hBY3RpdmF0aW9uKEV4ZWNTdGF0ZSog
ZXhlYyk7CisgICAgdm9pZCBwb3BBY3RpdmF0aW9uKCk7CisgICAgdm9pZCB0ZWFyT2ZmQWN0aXZh
dGlvbihFeGVjU3RhdGUqIGV4ZWMpOworICAgIAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhl
IGJ1aWx0aW4gIk9iamVjdCIgb2JqZWN0LiBUaGlzIGlzIHRoZSBvYmplY3QgdGhhdCB3YXMgc2V0
CiAgICAgICogYXMgYSBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVjdCBkdXJpbmcgY29uc3Ry
dWN0aW9uOyBpZiB0aGUgcHJvcGVydHkKQEAgLTM2Miw2ICszNjgsNyBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1fdGlja0NvdW50OwogICAgIHVuc2lnbmVkIG1fdGlja3NVbnRpbE5leHRUaW1l
b3V0Q2hlY2s7CiAKKyAgICBEZXF1ZTxTdGFja0FjdGl2YXRpb24qPiogbV9hY3RpdmF0aW9uczsK
IAogICAgIE9iamVjdE9iamVjdEltcCogbV9PYmplY3Q7CiAgICAgRnVuY3Rpb25PYmplY3RJbXAq
IG1fRnVuY3Rpb247CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDI4MjMwKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEzNCw2ICs0
MTM0LDcgQEAgQ29tcGxldGlvbiBXaXRoTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKgogICBLSlNf
Q0hFQ0tFWENFUFRJT04KICAgSlNPYmplY3QgKm8gPSB2LT50b09iamVjdChleGVjKTsKICAgS0pT
X0NIRUNLRVhDRVBUSU9OCisgIGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT50ZWFyT2ZmQWN0
aXZhdGlvbihleGVjKTsKICAgZXhlYy0+cHVzaFNjb3BlKG8pOwogICBDb21wbGV0aW9uIHJlcyA9
IHN0YXRlbWVudC0+ZXhlY3V0ZShleGVjKTsKICAgZXhlYy0+cG9wU2NvcGUoKTsKQEAgLTQzOTQs
NiArNDM5NSw3IEBAIENvbXBsZXRpb24gVHJ5Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmUKICAg
aWYgKGNhdGNoQmxvY2sgJiYgYy5jb21wbFR5cGUoKSA9PSBUaHJvdykgewogICAgIEpTT2JqZWN0
ICpvYmogPSBuZXcgSlNPYmplY3Q7CiAgICAgb2JqLT5wdXQoZXhlYywgZXhjZXB0aW9uSWRlbnQs
IGMudmFsdWUoKSwgRG9udERlbGV0ZSk7CisgICAgZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCkt
PnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICAgIGV4ZWMtPnB1c2hTY29wZShvYmopOwogICAg
IGMgPSBjYXRjaEJsb2NrLT5leGVjdXRlKGV4ZWMpOwogICAgIGV4ZWMtPnBvcFNjb3BlKCk7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL29iamVjdC5oCShyZXZpc2lvbiAyODIzMCkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAi
SlNUeXBlLmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKLSNpbmNsdWRlICJpbnRl
cnByZXRlci5oIgorI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgInByb3BlcnR5X21h
cC5oIgogI2luY2x1ZGUgInByb3BlcnR5X3Nsb3QuaCIKICNpbmNsdWRlICJzY29wZV9jaGFpbi5o
IgpAQCAtNTgzLDE4ICs1ODMsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0KLS8vIEZJWE1FOiBQdXQgdGhpcyBmdW5j
dGlvbiBpbiBhIHNlcGFyYXRlIGZpbGUgbmFtZWQgc29tZXRoaW5nIGxpa2Ugc2NvcGVfY2hhaW5f
bWFyay5oIC0tIGNhbid0IHB1dCBpdCBpbiBzY29wZV9jaGFpbi5oIHNpbmNlIGl0IGRlcGVuZHMg
b24gSlNPYmplY3QuCi0KLWlubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmsoKQotewotICAgIGZv
ciAoU2NvcGVDaGFpbk5vZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKLSAgICAgICAg
SlNPYmplY3QgKm8gPSBuLT5vYmplY3Q7Ci0gICAgICAgIGlmICghby0+bWFya2VkKCkpCi0gICAg
ICAgICAgICBvLT5tYXJrKCk7Ci0gICAgfQotfQotCiBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjpy
ZWxlYXNlKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5IGRlcmVm
KCksCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5jcHAJKHJldmlzaW9uIDI4MjMwKQor
KysgSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJmdW5jdGlvbi5oIgogCiBu
YW1lc3BhY2UgS0pTIHsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgJKHJldmlzaW9u
IDI4MjMwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Myw3ICsxNDMsNyBAQCBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjpwb3AoKQogICAg
ICAgICBkZWxldGUgb2xkTm9kZTsKICAgICB9CiB9Ci0KKyAgCiB9IC8vIG5hbWVzcGFjZSBLSlMK
IAogI2VuZGlmIC8vIEtKU19TQ09QRV9DSEFJTl9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
c2NvcGVfY2hhaW5fbWFyay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zY29w
ZV9jaGFpbl9tYXJrLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVf
Y2hhaW5fbWFyay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2IEFwcGxlIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJzY29wZV9jaGFpbi5o
IgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImZ1bmN0aW9uLmgiCisKK25hbWVzcGFj
ZSBLSlMgeworCitpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKK3sKKyAgZm9yIChTY29w
ZUNoYWluTm9kZSAqbiA9IF9ub2RlOyBuOyBuID0gbi0+bmV4dCkgeworICAgIEpTT2JqZWN0ICpv
ID0gbi0+b2JqZWN0OworICAgIGlmICgoby0+aXNBY3RpdmF0aW9uKCkgJiYgc3RhdGljX2Nhc3Q8
QWN0aXZhdGlvbkltcCo+KG8pLT5pc09uU3RhY2soKSkgfHwgIW8tPm1hcmtlZCgpKQorICAgICAg
by0+bWFyaygpOworICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEtKUwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18287</attachid>
            <date>2008-01-05 04:45:29 -0800</date>
            <delta_ts>2008-01-05 18:26:15 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>26750</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNp
bmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKICNpbmNsdWRlIDxranMvSlNHbG9iYWxPYmplY3Qu
aD4KKyNpbmNsdWRlIDxranMvaW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNv
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9OUF9q
c29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJu
cHJ1bnRpbWVfcHJpdi5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgorI2luY2x1ZGUgInVzdHJpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVz
aW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwpAQCAtMTk3LDcgKzE5OCw3IEBAIGJvb2wgX05Q
Tl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUFMKICAgICAgICAgdW5zaWduZWQgaW50IFVU
RjE2TGVuZ3RoOwogICAgICAgICBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMsICZzY3JpcHRTdHJp
bmcsICZVVEYxNkxlbmd0aCk7IC8vIHJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBtZW1vcnkK
ICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7
Ci0gICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5nKCksIDAsIFVT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNjcmlwdFN0cmluZyksIFVURjE2
TGVuZ3RoKSk7CisgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpl
dmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5n
KCksIDAsIFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBLSlM6OlVDaGFyKj4oc2NyaXB0
U3RyaW5nKSwgVVRGMTZMZW5ndGgpKTsKICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0
aW9uLmNvbXBsVHlwZSgpOwogICAgICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgImFycmF5X29iamVjdC5o
IgorI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9u
IDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9tZXRob2Qu
aCIKIAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgog
I2luY2x1ZGUgImZ1bmN0aW9uX29iamVjdC5oIgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJmdW5jdGlvbi5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJv
YmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBLSlMgewogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQWN0aXZhdGlvbkltcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9BY3RpdmF0aW9uSW1wLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvQWN0aXZhdGlvbkltcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBA
QAorLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBLSlNfQUNUSVZBVElPTklNUF9ICisjZGVmaW5lIEtKU19BQ1RJVkFUSU9OSU1QX0gKKwor
I2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNs
dWRlICJFeGVjU3RhdGUuaCIKKworI2RlZmluZSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFIDMy
CisKK25hbWVzcGFjZSBLSlMgeworCisgIGNsYXNzIFN0YWNrQWN0aXZhdGlvbjsKKyAgY2xhc3Mg
RnVuY3Rpb25JbXA7CisgIGNsYXNzIEFyZ3VtZW50czsKKworICBjbGFzcyBBY3RpdmF0aW9uSW1w
IDogcHVibGljIEpTVmFyaWFibGVPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBTdGFja0FjdGl2
YXRpb247CisgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsT2JqZWN0OworICBwcml2YXRlOgorICAg
IHVzaW5nIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhOworCisgICAgc3Ry
dWN0IEFjdGl2YXRpb25JbXBEYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFi
bGVPYmplY3REYXRhIHsKKyAgICAgICAgQWN0aXZhdGlvbkltcERhdGEoKSA6IG9uU3RhY2sodHJ1
ZSkgeyB9CisgICAgICAgIEFjdGl2YXRpb25JbXBEYXRhKGNvbnN0IEFjdGl2YXRpb25JbXBEYXRh
Jik7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjOworICAgICAgICBGdW5jdGlvbkltcCogZnVu
Y3Rpb247CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzT2JqZWN0OworICAgICAgICAKKyAg
ICAgICAgYm9vbCBvblN0YWNrOworICAgIH07CisKKyAgcHVibGljOgorICAgIEFjdGl2YXRpb25J
bXAoKSB7IH0KKyAgICBBY3RpdmF0aW9uSW1wKFN0YWNrQWN0aXZhdGlvbiogb2xkU3RhY2tFbnRy
eSk7CisKKyAgICB2aXJ0dWFsIH5BY3RpdmF0aW9uSW1wKCkKKyAgICB7CisgICAgICBpZiAoIWQo
KS0+b25TdGFjaykKKyAgICAgICAgZGVsZXRlIGQoKTsKKyAgICB9CisKKyAgICB2b2lkIGluaXQo
RXhlY1N0YXRlKiBleGVjKTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1
YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKworICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0aW9uT2JqZWN0KCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIGJvb2wgaXNPblN0YWNrKCkgeyByZXR1cm4gZCgpLT5v
blN0YWNrOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CisgICAgc3RhdGljIEpTVmFsdWUqIGFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNT
dGF0ZSopOworICAgIEFjdGl2YXRpb25JbXBEYXRhKiBkKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
QWN0aXZhdGlvbkltcERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQorICB9OworCisgIHN0
cnVjdCBTdGFja0FjdGl2YXRpb24geworICAgIFN0YWNrQWN0aXZhdGlvbigpIHsgYWN0aXZhdGlv
blN0b3JhZ2UuSlNWYXJpYWJsZU9iamVjdDo6ZCA9ICZhY3RpdmF0aW9uRGF0YVN0b3JhZ2U7IH0K
KyAgICBTdGFja0FjdGl2YXRpb24oY29uc3QgU3RhY2tBY3RpdmF0aW9uJik7CisgICAgCisgICAg
flN0YWNrQWN0aXZhdGlvbigpIHsgfSAKKyAgICAKKyAgICBBY3RpdmF0aW9uSW1wIGFjdGl2YXRp
b25TdG9yYWdlOworICAgIEFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBEYXRhIGFjdGl2YXRp
b25EYXRhU3RvcmFnZTsKKyAgfTsKKworICBzdHJ1Y3QgQWN0aXZhdGlvblN0YWNrTm9kZSB7Cisg
ICAgQWN0aXZhdGlvblN0YWNrTm9kZSogcHJldjsKKyAgICBTdGFja0FjdGl2YXRpb24gZGF0YVtL
SlNfQUNUSVZBVElPTl9TVEFDS19TSVpFXTsKKyAgfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2Vu
ZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsMTAgQEAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKIAogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1ZGUgImZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzY29wZV9jaGFpbl9tYXJrLmgiCiAK
IG5hbWVzcGFjZSBLSlMgewogCkBAIC0xMDUsMTYgKzEwNywxOCBAQCBFeGVjU3RhdGU6OkV4ZWNT
dGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgLCBtX3N3aXRjaERlcHRoKDApIAogICAgICwg
bV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiB7Ci0gICAgQWN0aXZhdGlvbkltcCogYWN0aXZhdGlv
biA9IG5ldyBBY3RpdmF0aW9uSW1wKHRoaXMpOwotICAgIG1fYWN0aXZhdGlvbiA9IGFjdGl2YXRp
b247Ci0gICAgbV9sb2NhbFN0b3JhZ2UgPSAmYWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCk7Ci0g
ICAgbV92YXJpYWJsZU9iamVjdCA9IGFjdGl2YXRpb247Ci0gICAgbV9zY29wZUNoYWluLnB1c2go
YWN0aXZhdGlvbik7CisgICAgbV9hY3RpdmF0aW9uID0gZ2xvYmFsT2JqZWN0LT5wdXNoQWN0aXZh
dGlvbih0aGlzKTsKKyAgICBtX2xvY2FsU3RvcmFnZSA9ICZtX2FjdGl2YXRpb24tPmxvY2FsU3Rv
cmFnZSgpOworICAgIG1fdmFyaWFibGVPYmplY3QgPSBtX2FjdGl2YXRpb247CisgICAgbV9zY29w
ZUNoYWluLnB1c2gobV9hY3RpdmF0aW9uKTsKICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRF
eGVjKHRoaXMpOwogfQogCiBFeGVjU3RhdGU6On5FeGVjU3RhdGUoKQogeworICAgIGlmIChtX2Nv
ZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obV9h
Y3RpdmF0aW9uKS0+aXNPblN0YWNrKCkpCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5wb3BBY3Rp
dmF0aW9uKCk7CisgICAgCiAgICAgbV9nbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFeGVjKG1fc2F2
ZWRFeGVjKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMjkwNzkp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb247IH0KICAgICAgICAgCiAgICAgICAgIGNvbnN0
IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW47IH0K
KyAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluVG9wKEpTT2JqZWN0KiBvKSB7IG1fc2NvcGVDaGFp
bi5zZXQobyk7IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxl
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZU9iamVjdDsgfQogICAgICAgICB2b2lk
IHNldFZhcmlhYmxlT2JqZWN0KEpTVmFyaWFibGVPYmplY3QqIHYpIHsgbV92YXJpYWJsZU9iamVj
dCA9IHY7IH0KQEAgLTg3LDYgKzg4LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBFeGVj
U3RhdGUqIHNhdmVkRXhlYygpIHsgcmV0dXJuIG1fc2F2ZWRFeGVjOyB9CiAgICAgICAgIAogICAg
ICAgICBBY3RpdmF0aW9uSW1wKiBhY3RpdmF0aW9uT2JqZWN0KCkgeyByZXR1cm4gbV9hY3RpdmF0
aW9uOyB9CisgICAgICAgIHZvaWQgc2V0QWN0aXZhdGlvbk9iamVjdChBY3RpdmF0aW9uSW1wKiBh
KSB7IG1fYWN0aXZhdGlvbiA9IGE7IH0KICAgICAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSB7IHJl
dHVybiBtX2NvZGVUeXBlOyB9CiAgICAgICAgIFNjb3BlTm9kZSogc2NvcGVOb2RlKCkgeyByZXR1
cm4gbV9zY29wZU5vZGU7IH0KICAgICAgICAgRnVuY3Rpb25JbXAqIGZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvbjsgfQpAQCAtMTEyLDYgKzExNCw3IEBAIG5hbWVzcGFjZSBLSlMg
IHsKICAgICAgICAgY29uc3QgTGlzdCYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKm1fZW1w
dHlMaXN0OyB9CiAKICAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UoKSB7IHJldHVy
biAqbV9sb2NhbFN0b3JhZ2U7IH0KKyAgICAgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2UoTG9jYWxT
dG9yYWdlKiBzKSB7IG1fbG9jYWxTdG9yYWdlID0gczsgfQogCiAgICAgICAgIC8vIFRoZXNlIGFy
ZSBvbmx5IHZhbGlkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgZXhlY3V0ZSgpLgogICAgICAgICBDb21w
bFR5cGUgY29tcGxldGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXRpb25UeXBlOyB9
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI5MDc5
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKICNpbmNs
dWRlICJTYXZlZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1
ZGUgImFycmF5X29iamVjdC5oIgogI2luY2x1ZGUgImJvb2xfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
ZGF0ZV9vYmplY3QuaCIKQEAgLTIwMCw2ICsyMDEsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldChKU1ZhbHVlKiBwcm90CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSAmZCgpLT5nbG9iYWxF
eGVjOwogCisgICAgZCgpLT5hY3RpdmF0aW9ucyA9IG5ldyBBY3RpdmF0aW9uU3RhY2tOb2RlOwor
ICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50ID0gMDsKKwogICAgIC8vIFByb3RvdHlwZXMKICAgICBk
KCktPmZ1bmN0aW9uUHJvdG90eXBlID0gbmV3IEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMpOwogICAg
IGQoKS0+b2JqZWN0UHJvdG90eXBlID0gbmV3IE9iamVjdFByb3RvdHlwZShleGVjLCBkKCktPmZ1
bmN0aW9uUHJvdG90eXBlKTsKQEAgLTQ5NCw0ICs0OTgsNTMgQEAgRXhlY1N0YXRlKiBKU0dsb2Jh
bE9iamVjdDo6Z2xvYmFsRXhlYygpCiAgICAgcmV0dXJuICZkKCktPmdsb2JhbEV4ZWM7CiB9CiAK
K0FjdGl2YXRpb25JbXAqIEpTR2xvYmFsT2JqZWN0OjpwdXNoQWN0aXZhdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgIGlmIChkKCktPmFjdGl2YXRpb25Db3VudCA9PSBLSlNfQUNUSVZBVElPTl9T
VEFDS19TSVpFKSB7CisgICAgQWN0aXZhdGlvblN0YWNrTm9kZSogbmV3Tm9kZSA9IG5ldyBBY3Rp
dmF0aW9uU3RhY2tOb2RlOworICAgIG5ld05vZGUtPnByZXYgPSBkKCktPmFjdGl2YXRpb25zOwor
ICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBuZXdOb2RlOworICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50
ID0gMDsKKyAgfQorICAKKyAgU3RhY2tBY3RpdmF0aW9uKiBzdGFja0VudHJ5ID0gJmQoKS0+YWN0
aXZhdGlvbnMtPmRhdGFbZCgpLT5hY3RpdmF0aW9uQ291bnQrK107CisgIHN0YWNrRW50cnktPmFj
dGl2YXRpb25TdG9yYWdlLmluaXQoZXhlYyk7CisgIAorICByZXR1cm4gJihzdGFja0VudHJ5LT5h
Y3RpdmF0aW9uU3RvcmFnZSk7Cit9CisKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnBvcEFjdGl2YXRp
b24oKQoreworICBpZiAoIWQoKS0+YWN0aXZhdGlvbkNvdW50KSB7CisgICAgQWN0aXZhdGlvblN0
YWNrTm9kZSogcHJldiA9IGQoKS0+YWN0aXZhdGlvbnMtPnByZXY7CisgICAgZGVsZXRlIGQoKS0+
YWN0aXZhdGlvbnM7CisgICAgZCgpLT5hY3RpdmF0aW9ucyA9IHByZXY7CisgICAgZCgpLT5hY3Rp
dmF0aW9uQ291bnQgPSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFOworICB9CisgIAorICBkKCkt
PmFjdGl2YXRpb25Db3VudC0tOworICBkKCktPmFjdGl2YXRpb25zLT5kYXRhW2QoKS0+YWN0aXZh
dGlvbkNvdW50XS5hY3RpdmF0aW9uRGF0YVN0b3JhZ2UubG9jYWxTdG9yYWdlLnNocmluaygwKTsK
K30KKwordm9pZCBKU0dsb2JhbE9iamVjdDo6dGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBl
eGVjKQoreworICBpZiAoZXhlYy0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3RhdGlj
X2Nhc3Q8QWN0aXZhdGlvbkltcCo+KGV4ZWMtPmFjdGl2YXRpb25PYmplY3QoKSktPmlzT25TdGFj
aygpKSB7CisgICAgaWYgKCFkKCktPmFjdGl2YXRpb25Db3VudCkgeworICAgICAgQWN0aXZhdGlv
blN0YWNrTm9kZSogcHJldiA9IGQoKS0+YWN0aXZhdGlvbnMtPnByZXY7CisgICAgICBkZWxldGUg
ZCgpLT5hY3RpdmF0aW9uczsKKyAgICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBwcmV2OworICAgICAg
ZCgpLT5hY3RpdmF0aW9uQ291bnQgPSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFOworICAgIH0K
KworICAgIEFjdGl2YXRpb25JbXAqIG5ld0FjdGl2YXRpb24gPSBuZXcgQWN0aXZhdGlvbkltcCgm
ZCgpLT5hY3RpdmF0aW9ucy0+ZGF0YVtkKCktPmFjdGl2YXRpb25Db3VudCAtIDFdKTsKKworICAg
IHBvcEFjdGl2YXRpb24oKTsKKworICAgIGV4ZWMtPnNldEFjdGl2YXRpb25PYmplY3QobmV3QWN0
aXZhdGlvbik7CisgICAgZXhlYy0+c2V0VmFyaWFibGVPYmplY3QobmV3QWN0aXZhdGlvbik7Cisg
ICAgZXhlYy0+c2V0TG9jYWxTdG9yYWdlKCYobmV3QWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCkp
KTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluVG9wKG5ld0FjdGl2YXRpb24pOworICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKKyAg
ICBjbGFzcyBBY3RpdmF0aW9uSW1wOworICAgIGNsYXNzIEFjdGl2YXRpb25TdGFja05vZGU7CiAg
ICAgY2xhc3MgQXJyYXlPYmplY3RJbXA7CiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGU7CiAgICAg
Y2xhc3MgQm9vbGVhbk9iamVjdEltcDsKQEAgLTEyOCw2ICsxMzAsOSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBVUklFcnJvclByb3RvdHlwZTsK
IAogICAgICAgICAgICAgU3ltYm9sVGFibGUgaW5saW5lU3ltYm9sVGFibGU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIGFjdGl2YXRpb25zOworICAgICAg
ICAgICAgaW50IGFjdGl2YXRpb25Db3VudDsKICAgICAgICAgfTsKIAogICAgIHB1YmxpYzoKQEAg
LTIyNiw2ICsyMzEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRJbnRlcnJ1cHRTY3JpcHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAg
dmlydHVhbCBib29sIGFsbG93c0FjY2Vzc0Zyb20oY29uc3QgSlNHbG9iYWxPYmplY3QqKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICBBY3RpdmF0aW9uSW1wKiBwdXNo
QWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpOworICAgICAgICB2b2lkIHBvcEFjdGl2YXRpb24o
KTsKKyAgICAgICAgdm9pZCB0ZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0KCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9K
U1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTYgKzU2LDMzIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlaXIgb3duIHNp
emUgKHNpbmNlIHRoZXJlJ3MgYSBoYXJkIGxpbWl0IG9uIHRoZQogICAgICAgICAvLyBzaXplIG9m
IGEgSlNDZWxsKS4KICAgICAgICAgc3RydWN0IEpTVmFyaWFibGVPYmplY3REYXRhIHsKKyAgICAg
ICAgICAgIEpTVmFyaWFibGVPYmplY3REYXRhKCkgeyB9CisgICAgICAgIAogICAgICAgICAgICAg
SlNWYXJpYWJsZU9iamVjdERhdGEoU3ltYm9sVGFibGUqIHMpCiAgICAgICAgICAgICAgICAgOiBz
eW1ib2xUYWJsZShzKSAvLyBTdWJjbGFzcyBvd25zIHRoaXMgcG9pbnRlci4KICAgICAgICAgICAg
IHsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgSlNWYXJpYWJsZU9iamVjdERhdGEoY29u
c3QgSlNWYXJpYWJsZU9iamVjdERhdGEmIG9sZCkKKyAgICAgICAgICAgIHsKKy8vICAgICAgICAg
ICAgICBwcmludGYoIk9sZCBhZGRyZXNzLCBsb2NhbCBzdG9yYWdlIHNpemUgYW5kIGNhcGFjaXR5
OiAoJWQsICVkLCAlZClcbiIsIChpbnQpICZvbGQubG9jYWxTdG9yYWdlLCAoaW50KSBvbGQubG9j
YWxTdG9yYWdlLnNpemUoKSwgKGludCkgb2xkLmxvY2FsU3RvcmFnZS5jYXBhY2l0eSgpKTsKKy8v
ICAgICAgICAgICAgICBwcmludGYoIlByZSBhZGRyZXNzLCBsb2NhbCBzdG9yYWdlIHNpemUgYW5k
IGNhcGFjaXR5OiAoJWQsICVkLCAlZClcbiIsIChpbnQpICZsb2NhbFN0b3JhZ2UsIChpbnQpIGxv
Y2FsU3RvcmFnZS5zaXplKCksIChpbnQpIGxvY2FsU3RvcmFnZS5jYXBhY2l0eSgpKTsKKyAgICAg
ICAgICAgICAgbG9jYWxTdG9yYWdlLnJlc2VydmVDYXBhY2l0eShvbGQubG9jYWxTdG9yYWdlLnNp
emUoKSk7CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3IgKExvY2FsU3RvcmFnZTo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG9sZC5sb2NhbFN0b3JhZ2UuYmVnaW4oKTsgaXRlciAhPSBv
bGQubG9jYWxTdG9yYWdlLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9y
YWdlLmFwcGVuZCgqaXRlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIHN5bWJv
bFRhYmxlID0gb2xkLnN5bWJvbFRhYmxlOworLy8gICAgICAgICAgICAgIHByaW50ZigiUG9zdCBh
ZGRyZXNzLCBsb2NhbCBzdG9yYWdlIHNpemUgYW5kIGNhcGFjaXR5OiAoJWQsICVkLCAlZClcbiIs
IChpbnQpICZsb2NhbFN0b3JhZ2UsIChpbnQpIGxvY2FsU3RvcmFnZS5zaXplKCksIChpbnQpIGxv
Y2FsU3RvcmFnZS5jYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgTG9j
YWxTdG9yYWdlIGxvY2FsU3RvcmFnZTsgLy8gU3RvcmFnZSBmb3IgdmFyaWFibGVzIGluIHRoZSBz
eW1ib2wgdGFibGUuCiAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGU7IC8vIE1h
cHMgbmFtZSAtPiBpbmRleCBpbiBsb2NhbFN0b3JhZ2UuCiAKICAgICAgICAgfTsKIAorICAgICAg
ICBKU1ZhcmlhYmxlT2JqZWN0KCkgeyB9CisKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdChKU1Zh
cmlhYmxlT2JqZWN0RGF0YSogZGF0YSkKICAgICAgICAgICAgIDogZChkYXRhKSAvLyBTdWJjbGFz
cyBvd25zIHRoaXMgcG9pbnRlci4KICAgICAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pz
L2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJmdW5jdGlvbi5oIgogCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1
ZGUgIkV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UGFyc2VyLmgiCkBAIC04Niw4ICs4NywxMSBAQCBKU1ZhbHVlKiBGdW5jdGlvbkltcDo6YXJndW1l
bnRzR2V0dGVyKEV4CiAgIEZ1bmN0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25JbXAqPihzbG90LnNsb3RCYXNlKCkpOwogICBFeGVjU3RhdGUqIGUgPSBleGVjOwogICB3aGls
ZSAoZSkgewotICAgIGlmIChlLT5mdW5jdGlvbigpID09IHRoaXNPYmopCisgICAgaWYgKGUtPmZ1
bmN0aW9uKCkgPT0gdGhpc09iaikgeworICAgICAgZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50
ZWFyT2ZmQWN0aXZhdGlvbihlKTsKICAgICAgIHJldHVybiBlLT5hY3RpdmF0aW9uT2JqZWN0KCkt
PmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAgICAKICAgICBlID0gZS0+Y2FsbGlu
Z0V4ZWNTdGF0ZSgpOwogICB9CiAgIHJldHVybiBqc051bGwoKTsKQEAgLTM0MCw2ICszNDQsMjAg
QEAgYm9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZQogCiBjb25zdCBDbGFz
c0luZm8gQWN0aXZhdGlvbkltcDo6aW5mbyA9IHsgIkFjdGl2YXRpb24iLCAwLCAwIH07CiAKK0Fj
dGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXAoU3RhY2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5
KQoreworICBKU1ZhcmlhYmxlT2JqZWN0OjpkID0gbmV3IEFjdGl2YXRpb25JbXBEYXRhKG9sZFN0
YWNrRW50cnktPmFjdGl2YXRpb25EYXRhU3RvcmFnZSk7Cit9CisgIAordm9pZCBBY3RpdmF0aW9u
SW1wOjppbml0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgZCgpLT5zeW1ib2xUYWJsZSA9ICZleGVj
LT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJsZSgpOworICBkKCktPmV4ZWMgPSBleGVjOwor
ICBkKCktPmZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKKyAgZCgpLT5hcmd1bWVudHNPYmpl
Y3QgPSAwOworICBkKCktPm9uU3RhY2sgPSB0cnVlOworfQorICAKIEpTVmFsdWUqIEFjdGl2YXRp
b25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgQWN0aXZhdGlvbklt
cCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihzbG90LnNsb3RCYXNlKCkp
OwpAQCAtMzY3LDcgKzM4NSw5IEBAIGJvb2wgQWN0aXZhdGlvbkltcDo6Z2V0T3duUHJvcGVydHlT
bG90KEUKIAogICAgIC8vIE9ubHkgcmV0dXJuIHRoZSBidWlsdC1pbiBhcmd1bWVudHMgb2JqZWN0
IGlmIGl0IHdhc24ndCBvdmVycmlkZGVuIGFib3ZlLgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBnZXRBcmd1bWVudHNHZXR0ZXIoKSk7CisgICAgICAgIGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CisgICAgICAgIEFjdGl2YXRpb25J
bXAqIG5ld0FjdGl2YXRpb24gPSBleGVjLT5hY3RpdmF0aW9uT2JqZWN0KCk7CisgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKG5ld0FjdGl2YXRpb24sIG5ld0FjdGl2YXRpb24tPmdldEFyZ3VtZW50c0dl
dHRlcigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00MDAsMTMgKzQyMCwy
MyBAQCB2b2lkIEFjdGl2YXRpb25JbXA6OnB1dChFeGVjU3RhdGUqLCBjb25zCiAKIHZvaWQgQWN0
aXZhdGlvbkltcDo6bWFyaygpCiB7Ci0gICAgSlNWYXJpYWJsZU9iamVjdDo6bWFyaygpOworICBp
ZiAoIWlzT25TdGFjaygpKQorICAgIEpTT2JqZWN0OjptYXJrKCk7CiAgICAgCi0gICAgaWYgKCFk
KCktPmZ1bmN0aW9uLT5tYXJrZWQoKSkKLSAgICAgICAgZCgpLT5mdW5jdGlvbi0+bWFyaygpOwot
Ci0gICAgaWYgKGQoKS0+YXJndW1lbnRzT2JqZWN0ICYmICFkKCktPmFyZ3VtZW50c09iamVjdC0+
bWFya2VkKCkpCi0gICAgICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrKCk7CisgIHNpemVf
dCBzaXplID0gZCgpLT5sb2NhbFN0b3JhZ2Uuc2l6ZSgpOworICAKKyAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IGQoKS0+bG9jYWxTdG9y
YWdlW2ldLnZhbHVlOworICAgIAorICAgIGlmICghdmFsdWUtPm1hcmtlZCgpKQorICAgICAgdmFs
dWUtPm1hcmsoKTsKKyAgfQorICAKKyAgaWYgKCFkKCktPmZ1bmN0aW9uLT5tYXJrZWQoKSkKKyAg
ICBkKCktPmZ1bmN0aW9uLT5tYXJrKCk7CisgIAorICBpZiAoZCgpLT5hcmd1bWVudHNPYmplY3Qg
JiYgIWQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrZWQoKSkKKyAgICBkKCktPmFyZ3VtZW50c09i
amVjdC0+bWFyaygpOwogfQogCiB2b2lkIEFjdGl2YXRpb25JbXA6OmNyZWF0ZUFyZ3VtZW50c09i
amVjdChFeGVjU3RhdGUqIGV4ZWMpCkBAIC00MTcsNiArNDQ3LDE1IEBAIHZvaWQgQWN0aXZhdGlv
bkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWMKICAgICBkKCktPmFyZ3VtZW50c09iamVjdCA9IG5l
dyBBcmd1bWVudHMoZXhlYywgZCgpLT5leGVjLT5mdW5jdGlvbigpLCAqZCgpLT5leGVjLT5hcmd1
bWVudHMoKSwgdGhpcyk7CiB9CiAKK0FjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBEYXRhOjpB
Y3RpdmF0aW9uSW1wRGF0YShjb25zdCBBY3RpdmF0aW9uSW1wRGF0YSYgb2xkKQorICA6IEpTVmFy
aWFibGVPYmplY3REYXRhKG9sZCkKK3sKKyAgZXhlYyA9IG9sZC5leGVjOworICBmdW5jdGlvbiA9
IG9sZC5mdW5jdGlvbjsKKyAgYXJndW1lbnRzT2JqZWN0ID0gb2xkLmFyZ3VtZW50c09iamVjdDsK
KyAgb25TdGFjayA9IGZhbHNlOworfQorICAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBHbG9iYWxGdW5jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIApA
QCAtNjk2LDYgKzczNSw3IEBAIEpTVmFsdWUqIEdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9u
KEUKICAgICAgICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYmIHRoaXNPYmogIT0gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpICYmIHRoaXNPYmotPmlzR2xvYmFsT2JqZWN0KCk7CiAK
ICAgICAgICAgLy8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQKKyAgICAgICAgaWYgKCFz
d2l0Y2hHbG9iYWwpIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRp
b24oZXhlYyk7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzd2l0Y2hH
bG9iYWwgPyBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmopIDogZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpOwogICAgICAgICBFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmpl
Y3QsIGV2YWxOb2RlLmdldCgpLCBleGVjKTsKICAgICAgICAgICAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5j
dGlvbi5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFz
cyBBY3RpdmF0aW9uSW1wOwogICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOwogICBjbGFzcyBGdW5j
dGlvblByb3RvdHlwZTsKKyAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAKICAgY2xhc3MgSW50ZXJu
YWxGdW5jdGlvbkltcCA6IHB1YmxpYyBKU09iamVjdCB7CiAgIHB1YmxpYzoKQEAgLTEzNiw1NCAr
MTM3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQWN0aXZhdGlvbkltcCogX2FjdGl2YXRpb25P
YmplY3Q7CiAgICAgbXV0YWJsZSBJbmRleFRvTmFtZU1hcCBpbmRleFRvTmFtZU1hcDsKICAgfTsK
LQotICBjbGFzcyBBY3RpdmF0aW9uSW1wIDogcHVibGljIEpTVmFyaWFibGVPYmplY3QgewotICBw
cml2YXRlOgotICAgIHVzaW5nIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRh
OwotCi0gICAgc3RydWN0IEFjdGl2YXRpb25JbXBEYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmpl
Y3REYXRhIHsKLSAgICAgICAgQWN0aXZhdGlvbkltcERhdGEoRXhlY1N0YXRlKiBlKQotICAgICAg
ICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0RGF0YSgmZS0+ZnVuY3Rpb24oKS0+Ym9keS0+c3ltYm9s
VGFibGUoKSkKLSAgICAgICAgICAgICwgZXhlYyhlKQotICAgICAgICAgICAgLCBmdW5jdGlvbihl
LT5mdW5jdGlvbigpKSAvLyBTdG9yZSB0aGlzIHBvaW50ZXIgZm9yIG1hcmtpbmcsIHRvIGtlZXAg
b3VyIHN5bWJvbCB0YWJsZSAvIHNjb3BlIGFsaXZlIGFmdGVyIGV4ZWMgaGFzIGdvbmUgb3V0IG9m
IHNjb3BlLgotICAgICAgICAgICAgLCBhcmd1bWVudHNPYmplY3QoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgRXhlY1N0YXRlKiBleGVjOwotICAgICAgICBGdW5jdGlvbkltcCog
ZnVuY3Rpb247Ci0gICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzT2JqZWN0OwotICAgIH07Ci0K
LSAgcHVibGljOgotICAgIEFjdGl2YXRpb25JbXAoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICA6
IEpTVmFyaWFibGVPYmplY3QobmV3IEFjdGl2YXRpb25JbXBEYXRhKGV4ZWMpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIH5BY3RpdmF0aW9uSW1wKCkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZSBkKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUqIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9w
ZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwotCi0gICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9Ci0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotCi0gICAgdmlydHVhbCB2b2lk
IG1hcmsoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRpb25PYmplY3QoKSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7Ci0gICAgc3RhdGljIEpTVmFsdWUqIGFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpOwotICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNT
dGF0ZSopOwotICAgIEFjdGl2YXRpb25JbXBEYXRhKiBkKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
QWN0aXZhdGlvbkltcERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQotICB9OwotCisgIAog
ICBjbGFzcyBHbG9iYWxGdW5jSW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICBw
dWJsaWM6CiAgICAgR2xvYmFsRnVuY0ltcChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSos
IGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJik7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5j
cHAJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4NSw2ICsxMjg1LDcgQEAgSlNWYWx1ZSAqUG9zdEluY1Jlc29sdmVO
b2RlOjpldmFsdWF0ZShFeAogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBpZiAoYmFz
ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAgIGJhc2Ug
PSAqaXRlcjsKICAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwg
bV9pZGVudCktPnRvSlNOdW1iZXIoZXhlYyk7CiAgICAgICAgIGJhc2UtPnB1dChleGVjLCBtX2lk
ZW50LCBqc051bWJlcih2LT50b051bWJlcihleGVjKSArIDEpKTsKICAgICAgICAgcmV0dXJuIHY7
CkBAIC0xMzQyLDYgKzEzNDMsNyBAQCBKU1ZhbHVlICpQb3N0RGVjUmVzb2x2ZU5vZGU6OmV2YWx1
YXRlKEV4CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwogICAgIGlmIChiYXNlLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAgICAgYmFzZSA9ICppdGVyOwog
ICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KS0+
dG9KU051bWJlcihleGVjKTsKICAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVt
YmVyKHYtPnRvTnVtYmVyKGV4ZWMpIC0gMSkpOwogICAgICAgICByZXR1cm4gdjsKQEAgLTE3NTUs
NiArMTc1Nyw3IEBAIEpTVmFsdWUgKlByZUluY1Jlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUKICAg
ZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICAgIEpT
VmFsdWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwogCiAgICAgICAg
IGRvdWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBAIC0xODAyLDYgKzE4MDUsNyBAQCBKU1Zh
bHVlICpQcmVEZWNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlCiAgIGRvIHsgCiAgICAgYmFzZSA9
ICppdGVyOwogICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xv
dCkpIHsKKyAgICAgICAgYmFzZSA9ICppdGVyOwogICAgICAgICBKU1ZhbHVlICp2ID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBkb3VibGUgbiA9IHYtPnRv
TnVtYmVyKGV4ZWMpOwpAQCAtMzI2NSw4ICszMjY5LDEwIEBAIEpTVmFsdWUgKkFzc2lnblJlc29s
dmVOb2RlOjpldmFsdWF0ZShFeGUKICAgSlNPYmplY3QgKmJhc2U7CiAgIGRvIHsgCiAgICAgYmFz
ZSA9ICppdGVyOwotICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwg
c2xvdCkpCisgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90
KSkgeworICAgICAgYmFzZSA9ICppdGVyOwogICAgICAgZ290byBmb3VuZDsKKyAgICB9CiAKICAg
ICArK2l0ZXI7CiAgIH0gd2hpbGUgKGl0ZXIgIT0gZW5kKTsKQEAgLTM5OTcsNiArNDAwMyw3IEBA
IEpTVmFsdWUqIFdpdGhOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXgKICAgS0pTX0NIRUNLRVhD
RVBUSU9OCiAgIEpTT2JqZWN0ICpvID0gdi0+dG9PYmplY3QoZXhlYyk7CiAgIEtKU19DSEVDS0VY
Q0VQVElPTgorICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9u
KGV4ZWMpOwogICBleGVjLT5wdXNoU2NvcGUobyk7CiAgIEpTVmFsdWUqIHZhbHVlID0gc3RhdGVt
ZW50LT5leGVjdXRlKGV4ZWMpOwogICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDE5NSw2ICs0MjAy
LDcgQEAgSlNWYWx1ZSogVHJ5Tm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZQogICBpZiAoY2F0
Y2hCbG9jayAmJiBleGVjLT5jb21wbGV0aW9uVHlwZSgpID09IFRocm93KSB7CiAgICAgSlNPYmpl
Y3QqIG9iaiA9IG5ldyBKU09iamVjdDsKICAgICBvYmotPnB1dChleGVjLCBleGNlcHRpb25JZGVu
dCwgcmVzdWx0LCBEb250RGVsZXRlKTsKKyAgICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkt
PnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICAgIGV4ZWMtPnB1c2hTY29wZShvYmopOwogICAg
IHJlc3VsdCA9IGNhdGNoQmxvY2stPmV4ZWN1dGUoZXhlYyk7CiAgICAgZXhlYy0+cG9wU2NvcGUo
KTsKQEAgLTQzNTcsNiArNDM2NSw5IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6cHJvY2Vzc0Rl
Y2xhcmF0aW8KICAgICAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYg
KG1fZnVuY3Rpb25TdGFjay5zaXplKCkgIT0gMCkKKyAgICAgIGV4ZWMtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CisKICAgICBMb2NhbFN0b3JhZ2UmIGxv
Y2FsU3RvcmFnZSA9IGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCktPmxvY2FsU3RvcmFnZSgpOwogICAg
IAogICAgIC8vIFdlIGNhbid0IGp1c3QgcmVzaXplIGxvY2FsU3RvcmFnZSBoZXJlIGJlY2F1c2Ug
dGhhdCB3b3VsZCB0ZW1wb3JhcmlseQpAQCAtNDU2OSw2ICs0NTgwLDggQEAgdm9pZCBGdW5jRXhw
ck5vZGU6OmFkZFBhcmFtcygpCiAKIEpTVmFsdWUgKkZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlICpleGVjKQogeworICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZB
Y3RpdmF0aW9uKGV4ZWMpOworICAKICAgYm9vbCBuYW1lZCA9ICFpZGVudC5pc051bGwoKTsKICAg
SlNPYmplY3QgKmZ1bmN0aW9uU2NvcGVPYmplY3QgPSAwOwogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5o
CShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgwLDE4ICs1ODAsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmdldE93blByb3BlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0KLS8vIEZJWE1FOiBQdXQgdGhp
cyBmdW5jdGlvbiBpbiBhIHNlcGFyYXRlIGZpbGUgbmFtZWQgc29tZXRoaW5nIGxpa2Ugc2NvcGVf
Y2hhaW5fbWFyay5oIC0tIGNhbid0IHB1dCBpdCBpbiBzY29wZV9jaGFpbi5oIHNpbmNlIGl0IGRl
cGVuZHMgb24gSlNPYmplY3QuCi0KLWlubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmsoKQotewot
ICAgIGZvciAoU2NvcGVDaGFpbk5vZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKLSAg
ICAgICAgSlNPYmplY3QgKm8gPSBuLT5vYmplY3Q7Ci0gICAgICAgIGlmICghby0+bWFya2VkKCkp
Ci0gICAgICAgICAgICBvLT5tYXJrKCk7Ci0gICAgfQotfQotCiBpbmxpbmUgdm9pZCBTY29wZUNo
YWluOjpyZWxlYXNlKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5
IGRlcmVmKCksCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uaAkocmV2aXNpb24gMjkwNzkp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
ODAsNiArODAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgdm9pZCBjbGVhcigpIHsgZGVy
ZWYoKTsgX25vZGUgPSAwOyB9CiAgICAgICAgIHZvaWQgcHVzaChKU09iamVjdCAqKTsKICAgICAg
ICAgdm9pZCBwdXNoKGNvbnN0IFNjb3BlQ2hhaW4gJik7CisgICAgICAgIHZvaWQgc2V0KEpTT2Jq
ZWN0Kik7CiAgICAgICAgIHZvaWQgcG9wKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIG1hcmso
KTsKQEAgLTEyOSw2ICsxMzAsMTIgQEAgaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cHVzaChKU09i
amVjdCAqbwogICAgIF9ub2RlID0gbmV3IFNjb3BlQ2hhaW5Ob2RlKF9ub2RlLCBvKTsKIH0KIAor
aW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6c2V0KEpTT2JqZWN0KiBvKQoreworICAgIEFTU0VSVChv
KTsKKyAgICBfbm9kZS0+b2JqZWN0ID0gbzsKK30KKwogaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6
cG9wKCkKIHsKICAgICBTY29wZUNoYWluTm9kZSAqb2xkTm9kZSA9IF9ub2RlOwpAQCAtMTQzLDcg
KzE1MCw3IEBAIGlubGluZSB2b2lkIFNjb3BlQ2hhaW46OnBvcCgpCiAgICAgICAgIGRlbGV0ZSBv
bGROb2RlOwogICAgIH0KIH0KLQorICAKIH0gLy8gbmFtZXNwYWNlIEtKUwogCiAjZW5kaWYgLy8g
S0pTX1NDT1BFX0NIQUlOX0gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9t
YXJrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluX21hcmsu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9tYXJrLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBsaWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUg
SW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgInNjb3BlX2NoYWluLmgiCisjaW5jbHVkZSAi
QWN0aXZhdGlvbkltcC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorCituYW1lc3BhY2UgS0pTIHsK
KworICBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKKyAgeworICAgIGZvciAoU2NvcGVD
aGFpbk5vZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKKyAgICAgIEpTT2JqZWN0ICpv
ID0gbi0+b2JqZWN0OworICAgICAgaWYgKChvLT5pc0FjdGl2YXRpb25PYmplY3QoKSAmJiBzdGF0
aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obyktPmlzT25TdGFjaygpKSB8fCAhby0+bWFya2VkKCkp
CisgICAgICAgIG8tPm1hcmsoKTsKKyAgICB9CisgIH0KKworfSAvLyBuYW1lc3BhY2UgS0pTCklu
ZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uSW1wLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvQWN0aXZhdGlvbkltcC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvQWN0aXZhdGlvbklt
cC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
QWN0aXZhdGlvbkltcC5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18292</attachid>
            <date>2008-01-05 18:26:15 -0800</date>
            <delta_ts>2008-01-05 19:15:19 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>26752</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNp
bmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKICNpbmNsdWRlIDxranMvSlNHbG9iYWxPYmplY3Qu
aD4KKyNpbmNsdWRlIDxranMvaW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNv
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9OUF9q
c29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJu
cHJ1bnRpbWVfcHJpdi5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgorI2luY2x1ZGUgInVzdHJpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVz
aW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwpAQCAtMTk3LDcgKzE5OCw3IEBAIGJvb2wgX05Q
Tl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUFMKICAgICAgICAgdW5zaWduZWQgaW50IFVU
RjE2TGVuZ3RoOwogICAgICAgICBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMsICZzY3JpcHRTdHJp
bmcsICZVVEYxNkxlbmd0aCk7IC8vIHJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBtZW1vcnkK
ICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7
Ci0gICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5nKCksIDAsIFVT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNjcmlwdFN0cmluZyksIFVURjE2
TGVuZ3RoKSk7CisgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpl
dmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5n
KCksIDAsIFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBLSlM6OlVDaGFyKj4oc2NyaXB0
U3RyaW5nKSwgVVRGMTZMZW5ndGgpKTsKICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0
aW9uLmNvbXBsVHlwZSgpOwogICAgICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgImFycmF5X29iamVjdC5o
IgorI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9u
IDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9tZXRob2Qu
aCIKIAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgog
I2luY2x1ZGUgImZ1bmN0aW9uX29iamVjdC5oIgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJmdW5jdGlvbi5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJv
YmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBLSlMgewogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQWN0aXZhdGlvbkltcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9BY3RpdmF0aW9uSW1wLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvQWN0aXZhdGlvbkltcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBA
QAorLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBLSlNfQUNUSVZBVElPTklNUF9ICisjZGVmaW5lIEtKU19BQ1RJVkFUSU9OSU1QX0gKKwor
I2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNs
dWRlICJFeGVjU3RhdGUuaCIKKworI2RlZmluZSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFIDMy
CisKK25hbWVzcGFjZSBLSlMgeworCisgIGNsYXNzIFN0YWNrQWN0aXZhdGlvbjsKKyAgY2xhc3Mg
RnVuY3Rpb25JbXA7CisgIGNsYXNzIEFyZ3VtZW50czsKKworICBjbGFzcyBBY3RpdmF0aW9uSW1w
IDogcHVibGljIEpTVmFyaWFibGVPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBTdGFja0FjdGl2
YXRpb247CisgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsT2JqZWN0OworICBwcml2YXRlOgorICAg
IHVzaW5nIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3REYXRhOworCisgICAgc3Ry
dWN0IEFjdGl2YXRpb25JbXBEYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFi
bGVPYmplY3REYXRhIHsKKyAgICAgICAgQWN0aXZhdGlvbkltcERhdGEoKSA6IG9uU3RhY2sodHJ1
ZSkgeyB9CisgICAgICAgIEFjdGl2YXRpb25JbXBEYXRhKGNvbnN0IEFjdGl2YXRpb25JbXBEYXRh
Jik7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjOworICAgICAgICBGdW5jdGlvbkltcCogZnVu
Y3Rpb247CisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzT2JqZWN0OworICAgICAgICAKKyAg
ICAgICAgYm9vbCBvblN0YWNrOworICAgIH07CisKKyAgcHVibGljOgorICAgIEFjdGl2YXRpb25J
bXAoKSB7IH0KKyAgICBBY3RpdmF0aW9uSW1wKFN0YWNrQWN0aXZhdGlvbiogb2xkU3RhY2tFbnRy
eSk7CisKKyAgICB2aXJ0dWFsIH5BY3RpdmF0aW9uSW1wKCkKKyAgICB7CisgICAgICBpZiAoIWQo
KS0+b25TdGFjaykKKyAgICAgICAgZGVsZXRlIGQoKTsKKyAgICB9CisKKyAgICB2b2lkIGluaXQo
RXhlY1N0YXRlKiBleGVjKTsKKworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1
YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKworICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0aW9uT2JqZWN0KCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIGJvb2wgaXNPblN0YWNrKCkgeyByZXR1cm4gZCgpLT5v
blN0YWNrOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CisgICAgc3RhdGljIEpTVmFsdWUqIGFyZ3VtZW50
c0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpOworICAgIHZvaWQgY3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNT
dGF0ZSopOworICAgIEFjdGl2YXRpb25JbXBEYXRhKiBkKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
QWN0aXZhdGlvbkltcERhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQorICB9OworCisgIHN0
cnVjdCBTdGFja0FjdGl2YXRpb24geworICAgIFN0YWNrQWN0aXZhdGlvbigpIHsgYWN0aXZhdGlv
blN0b3JhZ2UuSlNWYXJpYWJsZU9iamVjdDo6ZCA9ICZhY3RpdmF0aW9uRGF0YVN0b3JhZ2U7IH0K
KyAgICBTdGFja0FjdGl2YXRpb24oY29uc3QgU3RhY2tBY3RpdmF0aW9uJik7CisgICAgCisgICAg
flN0YWNrQWN0aXZhdGlvbigpIHsgfSAKKyAgICAKKyAgICBBY3RpdmF0aW9uSW1wIGFjdGl2YXRp
b25TdG9yYWdlOworICAgIEFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBEYXRhIGFjdGl2YXRp
b25EYXRhU3RvcmFnZTsKKyAgfTsKKworICBzdHJ1Y3QgQWN0aXZhdGlvblN0YWNrTm9kZSB7Cisg
ICAgQWN0aXZhdGlvblN0YWNrTm9kZSogcHJldjsKKyAgICBTdGFja0FjdGl2YXRpb24gZGF0YVtL
SlNfQUNUSVZBVElPTl9TVEFDS19TSVpFXTsKKyAgfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2Vu
ZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsMTAgQEAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKIAogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1ZGUgImZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzY29wZV9jaGFpbl9tYXJrLmgiCiAK
IG5hbWVzcGFjZSBLSlMgewogCkBAIC0xMDUsMTYgKzEwNywxOCBAQCBFeGVjU3RhdGU6OkV4ZWNT
dGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgLCBtX3N3aXRjaERlcHRoKDApIAogICAgICwg
bV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiB7Ci0gICAgQWN0aXZhdGlvbkltcCogYWN0aXZhdGlv
biA9IG5ldyBBY3RpdmF0aW9uSW1wKHRoaXMpOwotICAgIG1fYWN0aXZhdGlvbiA9IGFjdGl2YXRp
b247Ci0gICAgbV9sb2NhbFN0b3JhZ2UgPSAmYWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCk7Ci0g
ICAgbV92YXJpYWJsZU9iamVjdCA9IGFjdGl2YXRpb247Ci0gICAgbV9zY29wZUNoYWluLnB1c2go
YWN0aXZhdGlvbik7CisgICAgbV9hY3RpdmF0aW9uID0gZ2xvYmFsT2JqZWN0LT5wdXNoQWN0aXZh
dGlvbih0aGlzKTsKKyAgICBtX2xvY2FsU3RvcmFnZSA9ICZtX2FjdGl2YXRpb24tPmxvY2FsU3Rv
cmFnZSgpOworICAgIG1fdmFyaWFibGVPYmplY3QgPSBtX2FjdGl2YXRpb247CisgICAgbV9zY29w
ZUNoYWluLnB1c2gobV9hY3RpdmF0aW9uKTsKICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRF
eGVjKHRoaXMpOwogfQogCiBFeGVjU3RhdGU6On5FeGVjU3RhdGUoKQogeworICAgIGlmIChtX2Nv
ZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obV9h
Y3RpdmF0aW9uKS0+aXNPblN0YWNrKCkpCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5wb3BBY3Rp
dmF0aW9uKCk7CisgICAgCiAgICAgbV9nbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFeGVjKG1fc2F2
ZWRFeGVjKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMjkwNzkp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb247IH0KICAgICAgICAgCiAgICAgICAgIGNvbnN0
IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW47IH0K
KyAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluVG9wKEpTT2JqZWN0KiBvKSB7IG1fc2NvcGVDaGFp
bi5zZXQobyk7IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxl
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZU9iamVjdDsgfQogICAgICAgICB2b2lk
IHNldFZhcmlhYmxlT2JqZWN0KEpTVmFyaWFibGVPYmplY3QqIHYpIHsgbV92YXJpYWJsZU9iamVj
dCA9IHY7IH0KQEAgLTg3LDYgKzg4LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBFeGVj
U3RhdGUqIHNhdmVkRXhlYygpIHsgcmV0dXJuIG1fc2F2ZWRFeGVjOyB9CiAgICAgICAgIAogICAg
ICAgICBBY3RpdmF0aW9uSW1wKiBhY3RpdmF0aW9uT2JqZWN0KCkgeyByZXR1cm4gbV9hY3RpdmF0
aW9uOyB9CisgICAgICAgIHZvaWQgc2V0QWN0aXZhdGlvbk9iamVjdChBY3RpdmF0aW9uSW1wKiBh
KSB7IG1fYWN0aXZhdGlvbiA9IGE7IH0KICAgICAgICAgQ29kZVR5cGUgY29kZVR5cGUoKSB7IHJl
dHVybiBtX2NvZGVUeXBlOyB9CiAgICAgICAgIFNjb3BlTm9kZSogc2NvcGVOb2RlKCkgeyByZXR1
cm4gbV9zY29wZU5vZGU7IH0KICAgICAgICAgRnVuY3Rpb25JbXAqIGZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvbjsgfQpAQCAtMTEyLDYgKzExNCw3IEBAIG5hbWVzcGFjZSBLSlMg
IHsKICAgICAgICAgY29uc3QgTGlzdCYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4gKm1fZW1w
dHlMaXN0OyB9CiAKICAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2UoKSB7IHJldHVy
biAqbV9sb2NhbFN0b3JhZ2U7IH0KKyAgICAgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2UoTG9jYWxT
dG9yYWdlKiBzKSB7IG1fbG9jYWxTdG9yYWdlID0gczsgfQogCiAgICAgICAgIC8vIFRoZXNlIGFy
ZSBvbmx5IHZhbGlkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgZXhlY3V0ZSgpLgogICAgICAgICBDb21w
bFR5cGUgY29tcGxldGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBsZXRpb25UeXBlOyB9
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI5MDc5
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKICNpbmNs
dWRlICJTYXZlZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1
ZGUgImFycmF5X29iamVjdC5oIgogI2luY2x1ZGUgImJvb2xfb2JqZWN0LmgiCiAjaW5jbHVkZSAi
ZGF0ZV9vYmplY3QuaCIKQEAgLTIwMCw2ICsyMDEsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldChKU1ZhbHVlKiBwcm90CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSAmZCgpLT5nbG9iYWxF
eGVjOwogCisgICAgZCgpLT5hY3RpdmF0aW9ucyA9IG5ldyBBY3RpdmF0aW9uU3RhY2tOb2RlOwor
ICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50ID0gMDsKKwogICAgIC8vIFByb3RvdHlwZXMKICAgICBk
KCktPmZ1bmN0aW9uUHJvdG90eXBlID0gbmV3IEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMpOwogICAg
IGQoKS0+b2JqZWN0UHJvdG90eXBlID0gbmV3IE9iamVjdFByb3RvdHlwZShleGVjLCBkKCktPmZ1
bmN0aW9uUHJvdG90eXBlKTsKQEAgLTQ5NCw0ICs0OTgsNTMgQEAgRXhlY1N0YXRlKiBKU0dsb2Jh
bE9iamVjdDo6Z2xvYmFsRXhlYygpCiAgICAgcmV0dXJuICZkKCktPmdsb2JhbEV4ZWM7CiB9CiAK
K0FjdGl2YXRpb25JbXAqIEpTR2xvYmFsT2JqZWN0OjpwdXNoQWN0aXZhdGlvbihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgIGlmIChkKCktPmFjdGl2YXRpb25Db3VudCA9PSBLSlNfQUNUSVZBVElPTl9T
VEFDS19TSVpFKSB7CisgICAgQWN0aXZhdGlvblN0YWNrTm9kZSogbmV3Tm9kZSA9IG5ldyBBY3Rp
dmF0aW9uU3RhY2tOb2RlOworICAgIG5ld05vZGUtPnByZXYgPSBkKCktPmFjdGl2YXRpb25zOwor
ICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBuZXdOb2RlOworICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50
ID0gMDsKKyAgfQorICAKKyAgU3RhY2tBY3RpdmF0aW9uKiBzdGFja0VudHJ5ID0gJmQoKS0+YWN0
aXZhdGlvbnMtPmRhdGFbZCgpLT5hY3RpdmF0aW9uQ291bnQrK107CisgIHN0YWNrRW50cnktPmFj
dGl2YXRpb25TdG9yYWdlLmluaXQoZXhlYyk7CisgIAorICByZXR1cm4gJihzdGFja0VudHJ5LT5h
Y3RpdmF0aW9uU3RvcmFnZSk7Cit9CisKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnBvcEFjdGl2YXRp
b24oKQoreworICBpZiAoIWQoKS0+YWN0aXZhdGlvbkNvdW50KSB7CisgICAgQWN0aXZhdGlvblN0
YWNrTm9kZSogcHJldiA9IGQoKS0+YWN0aXZhdGlvbnMtPnByZXY7CisgICAgZGVsZXRlIGQoKS0+
YWN0aXZhdGlvbnM7CisgICAgZCgpLT5hY3RpdmF0aW9ucyA9IHByZXY7CisgICAgZCgpLT5hY3Rp
dmF0aW9uQ291bnQgPSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFOworICB9CisgIAorICBkKCkt
PmFjdGl2YXRpb25Db3VudC0tOworICBkKCktPmFjdGl2YXRpb25zLT5kYXRhW2QoKS0+YWN0aXZh
dGlvbkNvdW50XS5hY3RpdmF0aW9uRGF0YVN0b3JhZ2UubG9jYWxTdG9yYWdlLnNocmluaygwKTsK
K30KKwordm9pZCBKU0dsb2JhbE9iamVjdDo6dGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBl
eGVjKQoreworICBpZiAoZXhlYy0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgc3RhdGlj
X2Nhc3Q8QWN0aXZhdGlvbkltcCo+KGV4ZWMtPmFjdGl2YXRpb25PYmplY3QoKSktPmlzT25TdGFj
aygpKSB7CisgICAgaWYgKCFkKCktPmFjdGl2YXRpb25Db3VudCkgeworICAgICAgQWN0aXZhdGlv
blN0YWNrTm9kZSogcHJldiA9IGQoKS0+YWN0aXZhdGlvbnMtPnByZXY7CisgICAgICBkZWxldGUg
ZCgpLT5hY3RpdmF0aW9uczsKKyAgICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBwcmV2OworICAgICAg
ZCgpLT5hY3RpdmF0aW9uQ291bnQgPSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFOworICAgIH0K
KworICAgIEFjdGl2YXRpb25JbXAqIG5ld0FjdGl2YXRpb24gPSBuZXcgQWN0aXZhdGlvbkltcCgm
ZCgpLT5hY3RpdmF0aW9ucy0+ZGF0YVtkKCktPmFjdGl2YXRpb25Db3VudCAtIDFdKTsKKworICAg
IHBvcEFjdGl2YXRpb24oKTsKKworICAgIGV4ZWMtPnNldEFjdGl2YXRpb25PYmplY3QobmV3QWN0
aXZhdGlvbik7CisgICAgZXhlYy0+c2V0VmFyaWFibGVPYmplY3QobmV3QWN0aXZhdGlvbik7Cisg
ICAgZXhlYy0+c2V0TG9jYWxTdG9yYWdlKCYobmV3QWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCkp
KTsKKyAgICBleGVjLT5zZXRTY29wZUNoYWluVG9wKG5ld0FjdGl2YXRpb24pOworICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKKyAg
ICBjbGFzcyBBY3RpdmF0aW9uSW1wOworICAgIGNsYXNzIEFjdGl2YXRpb25TdGFja05vZGU7CiAg
ICAgY2xhc3MgQXJyYXlPYmplY3RJbXA7CiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGU7CiAgICAg
Y2xhc3MgQm9vbGVhbk9iamVjdEltcDsKQEAgLTEyOCw2ICsxMzAsOSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBVUklFcnJvclByb3RvdHlwZTsK
IAogICAgICAgICAgICAgU3ltYm9sVGFibGUgaW5saW5lU3ltYm9sVGFibGU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIGFjdGl2YXRpb25zOworICAgICAg
ICAgICAgaW50IGFjdGl2YXRpb25Db3VudDsKICAgICAgICAgfTsKIAogICAgIHB1YmxpYzoKQEAg
LTIyNiw2ICsyMzEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRJbnRlcnJ1cHRTY3JpcHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAg
dmlydHVhbCBib29sIGFsbG93c0FjY2Vzc0Zyb20oY29uc3QgSlNHbG9iYWxPYmplY3QqKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICBBY3RpdmF0aW9uSW1wKiBwdXNo
QWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpOworICAgICAgICB2b2lkIHBvcEFjdGl2YXRpb24o
KTsKKyAgICAgICAgdm9pZCB0ZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0KCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9K
U1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTYgKzU2LDMwIEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlaXIgb3duIHNp
emUgKHNpbmNlIHRoZXJlJ3MgYSBoYXJkIGxpbWl0IG9uIHRoZQogICAgICAgICAvLyBzaXplIG9m
IGEgSlNDZWxsKS4KICAgICAgICAgc3RydWN0IEpTVmFyaWFibGVPYmplY3REYXRhIHsKKyAgICAg
ICAgICAgIEpTVmFyaWFibGVPYmplY3REYXRhKCkgeyB9CisgICAgICAgIAogICAgICAgICAgICAg
SlNWYXJpYWJsZU9iamVjdERhdGEoU3ltYm9sVGFibGUqIHMpCiAgICAgICAgICAgICAgICAgOiBz
eW1ib2xUYWJsZShzKSAvLyBTdWJjbGFzcyBvd25zIHRoaXMgcG9pbnRlci4KICAgICAgICAgICAg
IHsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgSlNWYXJpYWJsZU9iamVjdERhdGEoY29u
c3QgSlNWYXJpYWJsZU9iamVjdERhdGEmIG9sZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgbG9jYWxTdG9yYWdlLnJlc2VydmVDYXBhY2l0eShvbGQubG9jYWxTdG9yYWdlLnNpemUoKSk7
CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3IgKExvY2FsU3RvcmFnZTo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG9sZC5sb2NhbFN0b3JhZ2UuYmVnaW4oKTsgaXRlciAhPSBvbGQubG9j
YWxTdG9yYWdlLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmFw
cGVuZCgqaXRlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIHN5bWJvbFRhYmxl
ID0gb2xkLnN5bWJvbFRhYmxlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBMb2NhbFN0
b3JhZ2UgbG9jYWxTdG9yYWdlOyAvLyBTdG9yYWdlIGZvciB2YXJpYWJsZXMgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZTsgLy8gTWFwcyBu
YW1lIC0+IGluZGV4IGluIGxvY2FsU3RvcmFnZS4KIAogICAgICAgICB9OwogCisgICAgICAgIEpT
VmFyaWFibGVPYmplY3QoKSB7IH0KKwogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KEpTVmFyaWFi
bGVPYmplY3REYXRhKiBkYXRhKQogICAgICAgICAgICAgOiBkKGRhdGEpIC8vIFN1YmNsYXNzIG93
bnMgdGhpcyBwb2ludGVyLgogICAgICAgICB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgImZ1bmN0aW9uLmgiCiAKKyNpbmNsdWRlICJBY3RpdmF0aW9uSW1wLmgiCiAjaW5jbHVkZSAi
RXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJQYXJz
ZXIuaCIKQEAgLTg2LDggKzg3LDExIEBAIEpTVmFsdWUqIEZ1bmN0aW9uSW1wOjphcmd1bWVudHNH
ZXR0ZXIoRXgKICAgRnVuY3Rpb25JbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxGdW5jdGlvbklt
cCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgIEV4ZWNTdGF0ZSogZSA9IGV4ZWM7CiAgIHdoaWxlIChl
KSB7Ci0gICAgaWYgKGUtPmZ1bmN0aW9uKCkgPT0gdGhpc09iaikKKyAgICBpZiAoZS0+ZnVuY3Rp
b24oKSA9PSB0aGlzT2JqKSB7CisgICAgICBlLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJP
ZmZBY3RpdmF0aW9uKGUpOwogICAgICAgcmV0dXJuIGUtPmFjdGl2YXRpb25PYmplY3QoKS0+Z2V0
KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgfQorICAgIAogICAgIGUgPSBlLT5jYWxsaW5nRXhl
Y1N0YXRlKCk7CiAgIH0KICAgcmV0dXJuIGpzTnVsbCgpOwpAQCAtMzQwLDYgKzM0NCwyMCBAQCBi
b29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlCiAKIGNvbnN0IENsYXNzSW5m
byBBY3RpdmF0aW9uSW1wOjppbmZvID0geyAiQWN0aXZhdGlvbiIsIDAsIDAgfTsKIAorQWN0aXZh
dGlvbkltcDo6QWN0aXZhdGlvbkltcChTdGFja0FjdGl2YXRpb24qIG9sZFN0YWNrRW50cnkpCit7
CisgIEpTVmFyaWFibGVPYmplY3Q6OmQgPSBuZXcgQWN0aXZhdGlvbkltcERhdGEob2xkU3RhY2tF
bnRyeS0+YWN0aXZhdGlvbkRhdGFTdG9yYWdlKTsKK30KKyAgCit2b2lkIEFjdGl2YXRpb25JbXA6
OmluaXQoRXhlY1N0YXRlKiBleGVjKQoreworICBkKCktPnN5bWJvbFRhYmxlID0gJmV4ZWMtPmZ1
bmN0aW9uKCktPmJvZHktPnN5bWJvbFRhYmxlKCk7CisgIGQoKS0+ZXhlYyA9IGV4ZWM7CisgIGQo
KS0+ZnVuY3Rpb24gPSBleGVjLT5mdW5jdGlvbigpOworICBkKCktPmFyZ3VtZW50c09iamVjdCA9
IDA7CisgIGQoKS0+b25TdGFjayA9IHRydWU7Cit9CisgIAogSlNWYWx1ZSogQWN0aXZhdGlvbklt
cDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBBY3RpdmF0aW9uSW1wKiB0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7CkBA
IC0zNjcsOCArMzg1LDIwIEBAIGJvb2wgQWN0aXZhdGlvbkltcDo6Z2V0T3duUHJvcGVydHlTbG90
KEUKIAogICAgIC8vIE9ubHkgcmV0dXJuIHRoZSBidWlsdC1pbiBhcmd1bWVudHMgb2JqZWN0IGlm
IGl0IHdhc24ndCBvdmVycmlkZGVuIGFib3ZlLgogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgeworICAgICAgICBFeGVjU3RhdGUqIGUgPSBl
eGVjOworICAgICAgICB3aGlsZSAoZSkgeworICAgICAgICAgICAgaWYgKGUtPmZ1bmN0aW9uKCkg
PT0gZCgpLT5mdW5jdGlvbikgeworICAgICAgICAgICAgICAgIGUtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZSk7CisgICAgICAgICAgICAgICAgQWN0aXZhdGlvbklt
cCogbmV3QWN0aXZhdGlvbiA9IGUtPmFjdGl2YXRpb25PYmplY3QoKTsKKyAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbShuZXdBY3RpdmF0aW9uLCBuZXdBY3RpdmF0aW9uLT5nZXRBcmd1bWVu
dHNHZXR0ZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGUgPSBlLT5jYWxsaW5nRXhlY1N0YXRlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGdldEFyZ3VtZW50c0dldHRlcigp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgCiAg
ICAgfQogCiAgICAgLy8gV2UgZG9uJ3QgY2FsbCB0aHJvdWdoIHRvIEpTT2JqZWN0IGJlY2F1c2Ug
dGhlcmUncyBubyB3YXkgdG8gZ2l2ZSBhbiAKQEAgLTQwMCwxMyArNDMwLDIzIEBAIHZvaWQgQWN0
aXZhdGlvbkltcDo6cHV0KEV4ZWNTdGF0ZSosIGNvbnMKIAogdm9pZCBBY3RpdmF0aW9uSW1wOjpt
YXJrKCkKIHsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrKCk7CisgIGlmICghaXNPblN0YWNr
KCkpCisgICAgSlNPYmplY3Q6Om1hcmsoKTsKICAgICAKLSAgICBpZiAoIWQoKS0+ZnVuY3Rpb24t
Pm1hcmtlZCgpKQotICAgICAgICBkKCktPmZ1bmN0aW9uLT5tYXJrKCk7Ci0KLSAgICBpZiAoZCgp
LT5hcmd1bWVudHNPYmplY3QgJiYgIWQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrZWQoKSkKLSAg
ICAgICAgZCgpLT5hcmd1bWVudHNPYmplY3QtPm1hcmsoKTsKKyAgc2l6ZV90IHNpemUgPSBkKCkt
PmxvY2FsU3RvcmFnZS5zaXplKCk7CisgIAorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgIEpTVmFsdWUqIHZhbHVlID0gZCgpLT5sb2NhbFN0b3JhZ2VbaV0udmFsdWU7
CisgICAgCisgICAgaWYgKCF2YWx1ZS0+bWFya2VkKCkpCisgICAgICB2YWx1ZS0+bWFyaygpOwor
ICB9CisgIAorICBpZiAoIWQoKS0+ZnVuY3Rpb24tPm1hcmtlZCgpKQorICAgIGQoKS0+ZnVuY3Rp
b24tPm1hcmsoKTsKKyAgCisgIGlmIChkKCktPmFyZ3VtZW50c09iamVjdCAmJiAhZCgpLT5hcmd1
bWVudHNPYmplY3QtPm1hcmtlZCgpKQorICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrKCk7
CiB9CiAKIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0
ZSogZXhlYykKQEAgLTQxNyw2ICs0NTcsMTUgQEAgdm9pZCBBY3RpdmF0aW9uSW1wOjpjcmVhdGVB
cmd1bWVudHNPYmplYwogICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0ID0gbmV3IEFyZ3VtZW50cyhl
eGVjLCBkKCktPmV4ZWMtPmZ1bmN0aW9uKCksICpkKCktPmV4ZWMtPmFyZ3VtZW50cygpLCB0aGlz
KTsKIH0KIAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcERhdGE6OkFjdGl2YXRpb25JbXBE
YXRhKGNvbnN0IEFjdGl2YXRpb25JbXBEYXRhJiBvbGQpCisgIDogSlNWYXJpYWJsZU9iamVjdERh
dGEob2xkKQoreworICBleGVjID0gb2xkLmV4ZWM7CisgIGZ1bmN0aW9uID0gb2xkLmZ1bmN0aW9u
OworICBhcmd1bWVudHNPYmplY3QgPSBvbGQuYXJndW1lbnRzT2JqZWN0OworICBvblN0YWNrID0g
ZmFsc2U7Cit9CisgIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbEZ1
bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC02OTYsNiArNzQ1
LDkgQEAgSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAgICAgICBi
b29sIHN3aXRjaEdsb2JhbCA9IHRoaXNPYmogJiYgdGhpc09iaiAhPSBleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCkgJiYgdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKTsKIAogICAgICAgICAvLyBl
bnRlciBhIG5ldyBleGVjdXRpb24gY29udGV4dAorICAgICAgICBpZiAoIXN3aXRjaEdsb2JhbCkK
KyAgICAgICAgICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9u
KGV4ZWMpOworICAgICAgICAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09iaikgOiBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGds
b2JhbE9iamVjdCwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMpOwogICAgICAgICAgIApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgIGNsYXNzIEFjdGl2YXRpb25JbXA7CiAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiAgIGNs
YXNzIEZ1bmN0aW9uUHJvdG90eXBlOworICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIAogICBjbGFz
cyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGljIEpTT2JqZWN0IHsKICAgcHVibGljOgpAQCAt
MTM2LDU0ICsxMzcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBBY3RpdmF0aW9uSW1wKiBfYWN0
aXZhdGlvbk9iamVjdDsKICAgICBtdXRhYmxlIEluZGV4VG9OYW1lTWFwIGluZGV4VG9OYW1lTWFw
OwogICB9OwotCi0gIGNsYXNzIEFjdGl2YXRpb25JbXAgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVj
dCB7Ci0gIHByaXZhdGU6Ci0gICAgdXNpbmcgSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9i
amVjdERhdGE7Ci0KLSAgICBzdHJ1Y3QgQWN0aXZhdGlvbkltcERhdGEgOiBwdWJsaWMgSlNWYXJp
YWJsZU9iamVjdERhdGEgewotICAgICAgICBBY3RpdmF0aW9uSW1wRGF0YShFeGVjU3RhdGUqIGUp
Ci0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZlLT5mdW5jdGlvbigpLT5ib2R5
LT5zeW1ib2xUYWJsZSgpKQotICAgICAgICAgICAgLCBleGVjKGUpCi0gICAgICAgICAgICAsIGZ1
bmN0aW9uKGUtPmZ1bmN0aW9uKCkpIC8vIFN0b3JlIHRoaXMgcG9pbnRlciBmb3IgbWFya2luZywg
dG8ga2VlcCBvdXIgc3ltYm9sIHRhYmxlIC8gc2NvcGUgYWxpdmUgYWZ0ZXIgZXhlYyBoYXMgZ29u
ZSBvdXQgb2Ygc2NvcGUuCi0gICAgICAgICAgICAsIGFyZ3VtZW50c09iamVjdCgwKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7Ci0gICAgICAgIEZ1bmN0
aW9uSW1wKiBmdW5jdGlvbjsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHNPYmplY3Q7Ci0g
ICAgfTsKLQotICBwdWJsaWM6Ci0gICAgQWN0aXZhdGlvbkltcChFeGVjU3RhdGUqIGV4ZWMpCi0g
ICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChuZXcgQWN0aXZhdGlvbkltcERhdGEoZXhlYykpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkFjdGl2YXRpb25JbXAoKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlIGQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdmlydHVhbCBib29sIGRl
bGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7
Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgbWFyaygpOwotCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGlvbk9iamVjdCgp
IHsgcmV0dXJuIHRydWU7IH0KLQotICBwcml2YXRlOgotICAgIHN0YXRpYyBQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSog
YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmpl
Y3QoRXhlY1N0YXRlKik7Ci0gICAgQWN0aXZhdGlvbkltcERhdGEqIGQoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxBY3RpdmF0aW9uSW1wRGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9Ci0gIH07
Ci0KKyAgCiAgIGNsYXNzIEdsb2JhbEZ1bmNJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbklt
cCB7CiAgIHB1YmxpYzoKICAgICBHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJv
dG90eXBlKiwgaW50IGksIGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L25vZGVzLmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg1LDYgKzEyODUsNyBAQCBKU1ZhbHVlICpQb3N0SW5j
UmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwogICAg
IGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAg
ICAgYmFzZSA9ICppdGVyOwogICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVj
LCBiYXNlLCBtX2lkZW50KS0+dG9KU051bWJlcihleGVjKTsKICAgICAgICAgYmFzZS0+cHV0KGV4
ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwogICAgICAgICBy
ZXR1cm4gdjsKQEAgLTEzNDIsNiArMTM0Myw3IEBAIEpTVmFsdWUgKlBvc3REZWNSZXNvbHZlTm9k
ZTo6ZXZhbHVhdGUoRXgKICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgICBiYXNlID0g
Kml0ZXI7CiAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1f
aWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwogICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVu
dCwganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7CiAgICAgICAgIHJldHVybiB2OwpA
QCAtMTc1NSw2ICsxNzU3LDcgQEAgSlNWYWx1ZSAqUHJlSW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRl
KEV4ZQogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAgIGJhc2UgPSAqaXRlcjsKICAg
ICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAK
ICAgICAgICAgZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsKQEAgLTE4MDIsNiArMTgwNSw3
IEBAIEpTVmFsdWUgKlByZURlY1Jlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUKICAgZG8geyAKICAg
ICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lk
ZW50LCBzbG90KSkgeworICAgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICAgIEpTVmFsdWUgKnYg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwogCiAgICAgICAgIGRvdWJsZSBu
ID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBAIC0zMjI4LDggKzMyMzIsMTAgQEAgSlNWYWx1ZSAqUmVh
ZE1vZGlmeVJlc29sdmVOb2RlOjpldmFsdWF0ZQogICBKU09iamVjdCAqYmFzZTsKICAgZG8geyAK
ICAgICBiYXNlID0gKml0ZXI7Ci0gICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBt
X2lkZW50LCBzbG90KSkKKyAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRl
bnQsIHNsb3QpKSB7CisgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICBnb3RvIGZvdW5kOworICAg
IH0KIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtMzI2NSw4ICsz
MjcxLDEwIEBAIEpTVmFsdWUgKkFzc2lnblJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUKICAgSlNP
YmplY3QgKmJhc2U7CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChiYXNlLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCisgICAgaWYgKGJhc2UtPmdldFBy
b3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgYmFzZSA9ICppdGVyOwog
ICAgICAgZ290byBmb3VuZDsKKyAgICB9CiAKICAgICArK2l0ZXI7CiAgIH0gd2hpbGUgKGl0ZXIg
IT0gZW5kKTsKQEAgLTM5OTcsNiArNDAwNSw3IEBAIEpTVmFsdWUqIFdpdGhOb2RlOjpleGVjdXRl
KEV4ZWNTdGF0ZSAqZXgKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAgIEpTT2JqZWN0ICpvID0gdi0+
dG9PYmplY3QoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgorICBleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICBleGVjLT5wdXNoU2NvcGUo
byk7CiAgIEpTVmFsdWUqIHZhbHVlID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwogICBleGVj
LT5wb3BTY29wZSgpOwpAQCAtNDE5NSw2ICs0MjA0LDcgQEAgSlNWYWx1ZSogVHJ5Tm9kZTo6ZXhl
Y3V0ZShFeGVjU3RhdGUgKmV4ZQogICBpZiAoY2F0Y2hCbG9jayAmJiBleGVjLT5jb21wbGV0aW9u
VHlwZSgpID09IFRocm93KSB7CiAgICAgSlNPYmplY3QqIG9iaiA9IG5ldyBKU09iamVjdDsKICAg
ICBvYmotPnB1dChleGVjLCBleGNlcHRpb25JZGVudCwgcmVzdWx0LCBEb250RGVsZXRlKTsKKyAg
ICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwog
ICAgIGV4ZWMtPnB1c2hTY29wZShvYmopOwogICAgIHJlc3VsdCA9IGNhdGNoQmxvY2stPmV4ZWN1
dGUoZXhlYyk7CiAgICAgZXhlYy0+cG9wU2NvcGUoKTsKQEAgLTQzNTcsNiArNDM2Nyw5IEBAIHZv
aWQgRnVuY3Rpb25Cb2R5Tm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW8KICAgICAgICAgbV9pbml0aWFs
aXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKG1fZnVuY3Rpb25TdGFjay5zaXplKCkgIT0g
MCkKKyAgICAgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24o
ZXhlYyk7CisKICAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSA9IGV4ZWMtPnZhcmlhYmxl
T2JqZWN0KCktPmxvY2FsU3RvcmFnZSgpOwogICAgIAogICAgIC8vIFdlIGNhbid0IGp1c3QgcmVz
aXplIGxvY2FsU3RvcmFnZSBoZXJlIGJlY2F1c2UgdGhhdCB3b3VsZCB0ZW1wb3JhcmlseQpAQCAt
NDU2OSw2ICs0NTgyLDggQEAgdm9pZCBGdW5jRXhwck5vZGU6OmFkZFBhcmFtcygpCiAKIEpTVmFs
dWUgKkZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogeworICBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOworICAKICAgYm9v
bCBuYW1lZCA9ICFpZGVudC5pc051bGwoKTsKICAgSlNPYmplY3QgKmZ1bmN0aW9uU2NvcGVPYmpl
Y3QgPSAwOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDE4ICs1ODAsNiBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi0KLS8vIEZJWE1FOiBQdXQgdGhpcyBmdW5jdGlvbiBpbiBhIHNlcGFyYXRlIGZp
bGUgbmFtZWQgc29tZXRoaW5nIGxpa2Ugc2NvcGVfY2hhaW5fbWFyay5oIC0tIGNhbid0IHB1dCBp
dCBpbiBzY29wZV9jaGFpbi5oIHNpbmNlIGl0IGRlcGVuZHMgb24gSlNPYmplY3QuCi0KLWlubGlu
ZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmsoKQotewotICAgIGZvciAoU2NvcGVDaGFpbk5vZGUgKm4g
PSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKLSAgICAgICAgSlNPYmplY3QgKm8gPSBuLT5vYmpl
Y3Q7Ci0gICAgICAgIGlmICghby0+bWFya2VkKCkpCi0gICAgICAgICAgICBvLT5tYXJrKCk7Ci0g
ICAgfQotfQotCiBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjpyZWxlYXNlKCkKIHsKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5IGRlcmVmKCksCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvc2NvcGVfY2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
c2NvcGVfY2hhaW4uaAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc2Nv
cGVfY2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgdm9pZCBjbGVhcigpIHsgZGVyZWYoKTsgX25vZGUgPSAwOyB9CiAgICAgICAg
IHZvaWQgcHVzaChKU09iamVjdCAqKTsKICAgICAgICAgdm9pZCBwdXNoKGNvbnN0IFNjb3BlQ2hh
aW4gJik7CisgICAgICAgIHZvaWQgc2V0KEpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcG9wKCk7
CiAgICAgICAgIAogICAgICAgICB2b2lkIG1hcmsoKTsKQEAgLTEyOSw2ICsxMzAsMTIgQEAgaW5s
aW5lIHZvaWQgU2NvcGVDaGFpbjo6cHVzaChKU09iamVjdCAqbwogICAgIF9ub2RlID0gbmV3IFNj
b3BlQ2hhaW5Ob2RlKF9ub2RlLCBvKTsKIH0KIAoraW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6c2V0
KEpTT2JqZWN0KiBvKQoreworICAgIEFTU0VSVChvKTsKKyAgICBfbm9kZS0+b2JqZWN0ID0gbzsK
K30KKwogaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cG9wKCkKIHsKICAgICBTY29wZUNoYWluTm9k
ZSAqb2xkTm9kZSA9IF9ub2RlOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWlu
X21hcmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW5fbWFy
ay5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluX21hcmsu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBs
ZSBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAic2NvcGVfY2hhaW4uaCIKKyNpbmNsdWRl
ICJBY3RpdmF0aW9uSW1wLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisKK25hbWVzcGFjZSBLSlMg
eworCisgIGlubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmsoKQorICB7CisgICAgZm9yIChTY29w
ZUNoYWluTm9kZSAqbiA9IF9ub2RlOyBuOyBuID0gbi0+bmV4dCkgeworICAgICAgSlNPYmplY3Qg
Km8gPSBuLT5vYmplY3Q7CisgICAgICBpZiAoKG8tPmlzQWN0aXZhdGlvbk9iamVjdCgpICYmIHN0
YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihvKS0+aXNPblN0YWNrKCkpIHx8ICFvLT5tYXJrZWQo
KSkKKyAgICAgICAgby0+bWFyaygpOworICAgIH0KKyAgfQorCit9IC8vIG5hbWVzcGFjZSBLSlMK
SW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL0FjdGl2YXRpb25JbXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uSW1wLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9u
SW1wLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BY3RpdmF0aW9uSW1wLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18293</attachid>
            <date>2008-01-05 19:15:19 -0800</date>
            <delta_ts>2008-01-06 18:44:15 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>26849</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNp
bmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKICNpbmNsdWRlIDxranMvSlNHbG9iYWxPYmplY3Qu
aD4KKyNpbmNsdWRlIDxranMvaW50ZXJwcmV0ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBfanNv
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL05QX2pzb2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9OUF9q
c29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJu
cHJ1bnRpbWVfcHJpdi5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgorI2luY2x1ZGUgInVzdHJpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIHVz
aW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwpAQCAtMTk3LDcgKzE5OCw3IEBAIGJvb2wgX05Q
Tl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUFMKICAgICAgICAgdW5zaWduZWQgaW50IFVU
RjE2TGVuZ3RoOwogICAgICAgICBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMsICZzY3JpcHRTdHJp
bmcsICZVVEYxNkxlbmd0aCk7IC8vIHJlcXVpcmVzIGZyZWUoKSBvZiByZXR1cm5lZCBtZW1vcnkK
ICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPnN0YXJ0VGltZW91dENoZWNrKCk7
Ci0gICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpldmFsdWF0ZShy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5nKCksIDAsIFVT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHNjcmlwdFN0cmluZyksIFVURjE2
TGVuZ3RoKSk7CisgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVycHJldGVyOjpl
dmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBVU3RyaW5n
KCksIDAsIFVTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBLSlM6OlVDaGFyKj4oc2NyaXB0
U3RyaW5nKSwgVVRGMTZMZW5ndGgpKTsKICAgICAgICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPnN0b3BUaW1lb3V0Q2hlY2soKTsKICAgICAgICAgQ29tcGxUeXBlIHR5cGUgPSBjb21wbGV0
aW9uLmNvbXBsVHlwZSgpOwogICAgICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgImFycmF5X29iamVjdC5o
IgorI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfbWV0aG9kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAJKHJldmlzaW9u
IDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAicnVudGltZV9tZXRob2Qu
aCIKIAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgImludGVycHJldGVyLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgog
I2luY2x1ZGUgImZ1bmN0aW9uX29iamVjdC5oIgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvcnVudGltZV9tZXRob2QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lX21ldGhvZC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2Jp
bmRpbmdzL3J1bnRpbWVfbWV0aG9kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJmdW5jdGlvbi5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJv
YmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBLSlMgewogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQWN0aXZhdGlvbkltcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9BY3RpdmF0aW9uSW1wLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvQWN0aXZhdGlvbkltcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBA
QAorLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBPcmxvdmljaAorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBLSlNfQUNUSVZBVElPTklNUF9ICisjZGVmaW5lIEtKU19BQ1RJVkFUSU9OSU1QX0gKKwor
I2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNs
dWRlICJFeGVjU3RhdGUuaCIKKworI2RlZmluZSBLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFIDMy
CisKK25hbWVzcGFjZSBLSlMgeworCisgICAgY2xhc3MgU3RhY2tBY3RpdmF0aW9uOworICAgIGNs
YXNzIEZ1bmN0aW9uSW1wOworICAgIGNsYXNzIEFyZ3VtZW50czsKKworICAgIGNsYXNzIEFjdGl2
YXRpb25JbXAgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7CisgICAgICAgIGZyaWVuZCBjbGFz
cyBTdGFja0FjdGl2YXRpb247CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsK
KyAgICBwcml2YXRlOgorICAgICAgICB1c2luZyBKU1ZhcmlhYmxlT2JqZWN0OjpKU1ZhcmlhYmxl
T2JqZWN0RGF0YTsKKworICAgICAgICBzdHJ1Y3QgQWN0aXZhdGlvbkltcERhdGEgOiBwdWJsaWMg
SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGEgeworICAgICAgICAgICAgQWN0
aXZhdGlvbkltcERhdGEoKSA6IG9uU3RhY2sodHJ1ZSkgeyB9CisgICAgICAgICAgICBBY3RpdmF0
aW9uSW1wRGF0YShjb25zdCBBY3RpdmF0aW9uSW1wRGF0YSYpOworCisgICAgICAgICAgICBFeGVj
U3RhdGUqIGV4ZWM7CisgICAgICAgICAgICBGdW5jdGlvbkltcCogZnVuY3Rpb247CisgICAgICAg
ICAgICBBcmd1bWVudHMqIGFyZ3VtZW50c09iamVjdDsKKyAgICAgICAgCisgICAgICAgICAgICBi
b29sIG9uU3RhY2s7CisgICAgICAgIH07CisKKyAgICBwdWJsaWM6CisgICAgICAgIEFjdGl2YXRp
b25JbXAoKSB7IH0KKyAgICAgICAgQWN0aXZhdGlvbkltcChTdGFja0FjdGl2YXRpb24qIG9sZFN0
YWNrRW50cnkpOworCisgICAgICAgIHZpcnR1YWwgfkFjdGl2YXRpb25JbXAoKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIWQoKS0+b25TdGFjaykKKyAgICAgICAgICAgICAgICBkZWxldGUg
ZCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSogZXhlYyk7CisK
KyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1
ZSwgaW50IGF0dHIgPSBOb25lKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKworICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFyaygpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRpb25PYmpl
Y3QoKSB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgICAgIGJvb2wgaXNPblN0YWNrKCkgeyBy
ZXR1cm4gZCgpLT5vblN0YWNrOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgUHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICAgICAgdm9pZCBj
cmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKik7CisgICAgICAgIEFjdGl2YXRpb25JbXBE
YXRhKiBkKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcERhdGEqPihKU1Zhcmlh
YmxlT2JqZWN0OjpkKTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU3RhY2tBY3RpdmF0aW9uIHsK
KyAgICAgICAgU3RhY2tBY3RpdmF0aW9uKCkgeyBhY3RpdmF0aW9uU3RvcmFnZS5KU1ZhcmlhYmxl
T2JqZWN0OjpkID0gJmFjdGl2YXRpb25EYXRhU3RvcmFnZTsgfQorICAgICAgICBTdGFja0FjdGl2
YXRpb24oY29uc3QgU3RhY2tBY3RpdmF0aW9uJik7CisgICAgICAKKyAgICAgICAgflN0YWNrQWN0
aXZhdGlvbigpIHsgfSAKKyAgICAgIAorICAgICAgICBBY3RpdmF0aW9uSW1wIGFjdGl2YXRpb25T
dG9yYWdlOworICAgICAgICBBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wRGF0YSBhY3RpdmF0
aW9uRGF0YVN0b3JhZ2U7CisgICAgfTsKKworICAgIHN0cnVjdCBBY3RpdmF0aW9uU3RhY2tOb2Rl
IHsKKyAgICAgICAgQWN0aXZhdGlvblN0YWNrTm9kZSogcHJldjsKKyAgICAgICAgU3RhY2tBY3Rp
dmF0aW9uIGRhdGFbS0pTX0FDVElWQVRJT05fU1RBQ0tfU0laRV07CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkocmV2aXNp
b24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsMTAgQEAKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKIAogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1
ZGUgImZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzY29wZV9j
aGFpbl9tYXJrLmgiCiAKIG5hbWVzcGFjZSBLSlMgewogCkBAIC0xMDUsMTYgKzEwNywxOCBAQCBF
eGVjU3RhdGU6OkV4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvCiAgICAgLCBtX3N3aXRjaERl
cHRoKDApIAogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiB7Ci0gICAgQWN0aXZhdGlv
bkltcCogYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9uSW1wKHRoaXMpOwotICAgIG1fYWN0aXZh
dGlvbiA9IGFjdGl2YXRpb247Ci0gICAgbV9sb2NhbFN0b3JhZ2UgPSAmYWN0aXZhdGlvbi0+bG9j
YWxTdG9yYWdlKCk7Ci0gICAgbV92YXJpYWJsZU9iamVjdCA9IGFjdGl2YXRpb247Ci0gICAgbV9z
Y29wZUNoYWluLnB1c2goYWN0aXZhdGlvbik7CisgICAgbV9hY3RpdmF0aW9uID0gZ2xvYmFsT2Jq
ZWN0LT5wdXNoQWN0aXZhdGlvbih0aGlzKTsKKyAgICBtX2xvY2FsU3RvcmFnZSA9ICZtX2FjdGl2
YXRpb24tPmxvY2FsU3RvcmFnZSgpOworICAgIG1fdmFyaWFibGVPYmplY3QgPSBtX2FjdGl2YXRp
b247CisgICAgbV9zY29wZUNoYWluLnB1c2gobV9hY3RpdmF0aW9uKTsKICAgICBnbG9iYWxPYmpl
Y3QtPnNldEN1cnJlbnRFeGVjKHRoaXMpOwogfQogCiBFeGVjU3RhdGU6On5FeGVjU3RhdGUoKQog
eworICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxBY3Rp
dmF0aW9uSW1wKj4obV9hY3RpdmF0aW9uKS0+aXNPblN0YWNrKCkpCisgICAgICAgIG1fZ2xvYmFs
T2JqZWN0LT5wb3BBY3RpdmF0aW9uKCk7CisgICAgCiAgICAgbV9nbG9iYWxPYmplY3QtPnNldEN1
cnJlbnRFeGVjKG1fc2F2ZWRFeGVjKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0V4
ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAko
cmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBib29s
IGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb247IH0KICAgICAgICAg
CiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBt
X3Njb3BlQ2hhaW47IH0KKyAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluVG9wKEpTT2JqZWN0KiBv
KSB7IG1fc2NvcGVDaGFpbi5zZXQobyk7IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFyaWFibGVP
YmplY3QqIHZhcmlhYmxlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZU9iamVjdDsg
fQogICAgICAgICB2b2lkIHNldFZhcmlhYmxlT2JqZWN0KEpTVmFyaWFibGVPYmplY3QqIHYpIHsg
bV92YXJpYWJsZU9iamVjdCA9IHY7IH0KQEAgLTg3LDYgKzg4LDcgQEAgbmFtZXNwYWNlIEtKUyAg
ewogICAgICAgICBFeGVjU3RhdGUqIHNhdmVkRXhlYygpIHsgcmV0dXJuIG1fc2F2ZWRFeGVjOyB9
CiAgICAgICAgIAogICAgICAgICBBY3RpdmF0aW9uSW1wKiBhY3RpdmF0aW9uT2JqZWN0KCkgeyBy
ZXR1cm4gbV9hY3RpdmF0aW9uOyB9CisgICAgICAgIHZvaWQgc2V0QWN0aXZhdGlvbk9iamVjdChB
Y3RpdmF0aW9uSW1wKiBhKSB7IG1fYWN0aXZhdGlvbiA9IGE7IH0KICAgICAgICAgQ29kZVR5cGUg
Y29kZVR5cGUoKSB7IHJldHVybiBtX2NvZGVUeXBlOyB9CiAgICAgICAgIFNjb3BlTm9kZSogc2Nv
cGVOb2RlKCkgeyByZXR1cm4gbV9zY29wZU5vZGU7IH0KICAgICAgICAgRnVuY3Rpb25JbXAqIGZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQpAQCAtMTEyLDYgKzExNCw3IEBA
IG5hbWVzcGFjZSBLSlMgIHsKICAgICAgICAgY29uc3QgTGlzdCYgZW1wdHlMaXN0KCkgY29uc3Qg
eyByZXR1cm4gKm1fZW1wdHlMaXN0OyB9CiAKICAgICAgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0
b3JhZ2UoKSB7IHJldHVybiAqbV9sb2NhbFN0b3JhZ2U7IH0KKyAgICAgICAgdm9pZCBzZXRMb2Nh
bFN0b3JhZ2UoTG9jYWxTdG9yYWdlKiBzKSB7IG1fbG9jYWxTdG9yYWdlID0gczsgfQogCiAgICAg
ICAgIC8vIFRoZXNlIGFyZSBvbmx5IHZhbGlkIHJpZ2h0IGFmdGVyIGNhbGxpbmcgZXhlY3V0ZSgp
LgogICAgICAgICBDb21wbFR5cGUgY29tcGxldGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBsZXRpb25UeXBlOyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAKICNpbmNsdWRlICJTYXZlZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiQWN0aXZhdGlv
bkltcC5oIgogI2luY2x1ZGUgImFycmF5X29iamVjdC5oIgogI2luY2x1ZGUgImJvb2xfb2JqZWN0
LmgiCiAjaW5jbHVkZSAiZGF0ZV9vYmplY3QuaCIKQEAgLTIwMCw2ICsyMDEsOSBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSAmZCgpLT5nbG9iYWxFeGVjOwogCisgICAgZCgpLT5hY3RpdmF0aW9ucyA9IG5ldyBBY3RpdmF0
aW9uU3RhY2tOb2RlOworICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50ID0gMDsKKwogICAgIC8vIFBy
b3RvdHlwZXMKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlID0gbmV3IEZ1bmN0aW9uUHJvdG90
eXBlKGV4ZWMpOwogICAgIGQoKS0+b2JqZWN0UHJvdG90eXBlID0gbmV3IE9iamVjdFByb3RvdHlw
ZShleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKQEAgLTQ5NCw0ICs0OTgsNTMgQEAgRXhl
Y1N0YXRlKiBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpCiAgICAgcmV0dXJuICZkKCktPmds
b2JhbEV4ZWM7CiB9CiAKK0FjdGl2YXRpb25JbXAqIEpTR2xvYmFsT2JqZWN0OjpwdXNoQWN0aXZh
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGQoKS0+YWN0aXZhdGlvbkNvdW50ID09
IEtKU19BQ1RJVkFUSU9OX1NUQUNLX1NJWkUpIHsKKyAgICAgICAgQWN0aXZhdGlvblN0YWNrTm9k
ZSogbmV3Tm9kZSA9IG5ldyBBY3RpdmF0aW9uU3RhY2tOb2RlOworICAgICAgICBuZXdOb2RlLT5w
cmV2ID0gZCgpLT5hY3RpdmF0aW9uczsKKyAgICAgICAgZCgpLT5hY3RpdmF0aW9ucyA9IG5ld05v
ZGU7CisgICAgICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50ID0gMDsKKyAgICAgIH0KKyAgICAKKyAg
ICBTdGFja0FjdGl2YXRpb24qIHN0YWNrRW50cnkgPSAmZCgpLT5hY3RpdmF0aW9ucy0+ZGF0YVtk
KCktPmFjdGl2YXRpb25Db3VudCsrXTsKKyAgICBzdGFja0VudHJ5LT5hY3RpdmF0aW9uU3RvcmFn
ZS5pbml0KGV4ZWMpOworICAgIAorICAgIHJldHVybiAmKHN0YWNrRW50cnktPmFjdGl2YXRpb25T
dG9yYWdlKTsKK30KKwordm9pZCBKU0dsb2JhbE9iamVjdDo6cG9wQWN0aXZhdGlvbigpCit7Cisg
ICAgaWYgKCFkKCktPmFjdGl2YXRpb25Db3VudCkgeworICAgICAgICBBY3RpdmF0aW9uU3RhY2tO
b2RlKiBwcmV2ID0gZCgpLT5hY3RpdmF0aW9ucy0+cHJldjsKKyAgICAgICAgZGVsZXRlIGQoKS0+
YWN0aXZhdGlvbnM7CisgICAgICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBwcmV2OworICAgICAgICBk
KCktPmFjdGl2YXRpb25Db3VudCA9IEtKU19BQ1RJVkFUSU9OX1NUQUNLX1NJWkU7CisgICAgfQor
ICAKKyAgICBkKCktPmFjdGl2YXRpb25Db3VudC0tOworICAgIGQoKS0+YWN0aXZhdGlvbnMtPmRh
dGFbZCgpLT5hY3RpdmF0aW9uQ291bnRdLmFjdGl2YXRpb25EYXRhU3RvcmFnZS5sb2NhbFN0b3Jh
Z2Uuc2hyaW5rKDApOworfQorCit2b2lkIEpTR2xvYmFsT2JqZWN0Ojp0ZWFyT2ZmQWN0aXZhdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlICYmIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihleGVjLT5hY3RpdmF0aW9uT2Jq
ZWN0KCkpLT5pc09uU3RhY2soKSkgeworICAgICAgICBpZiAoIWQoKS0+YWN0aXZhdGlvbkNvdW50
KSB7CisgICAgICAgICAgICBBY3RpdmF0aW9uU3RhY2tOb2RlKiBwcmV2ID0gZCgpLT5hY3RpdmF0
aW9ucy0+cHJldjsKKyAgICAgICAgICAgIGRlbGV0ZSBkKCktPmFjdGl2YXRpb25zOworICAgICAg
ICAgICAgZCgpLT5hY3RpdmF0aW9ucyA9IHByZXY7CisgICAgICAgICAgICBkKCktPmFjdGl2YXRp
b25Db3VudCA9IEtKU19BQ1RJVkFUSU9OX1NUQUNLX1NJWkU7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFjdGl2YXRpb25JbXAqIG5ld0FjdGl2YXRpb24gPSBuZXcgQWN0aXZhdGlvbklt
cCgmZCgpLT5hY3RpdmF0aW9ucy0+ZGF0YVtkKCktPmFjdGl2YXRpb25Db3VudCAtIDFdKTsKKyAg
ICAgICAgCisgICAgICAgIHBvcEFjdGl2YXRpb24oKTsKKyAgICAgICAgCisgICAgICAgIGV4ZWMt
PnNldEFjdGl2YXRpb25PYmplY3QobmV3QWN0aXZhdGlvbik7CisgICAgICAgIGV4ZWMtPnNldFZh
cmlhYmxlT2JqZWN0KG5ld0FjdGl2YXRpb24pOworICAgICAgICBleGVjLT5zZXRMb2NhbFN0b3Jh
Z2UoJihuZXdBY3RpdmF0aW9uLT5sb2NhbFN0b3JhZ2UoKSkpOworICAgICAgICBleGVjLT5zZXRT
Y29wZUNoYWluVG9wKG5ld0FjdGl2YXRpb24pOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2Ug
S0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjkwNzkp
CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsOCBAQAogCiBuYW1lc3BhY2UgS0pTIHsKIAorICAgIGNsYXNzIEFjdGl2YXRp
b25JbXA7CisgICAgY2xhc3MgQWN0aXZhdGlvblN0YWNrTm9kZTsKICAgICBjbGFzcyBBcnJheU9i
amVjdEltcDsKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZTsKICAgICBjbGFzcyBCb29sZWFuT2Jq
ZWN0SW1wOwpAQCAtMTI4LDYgKzEzMCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAgICAg
TmF0aXZlRXJyb3JQcm90b3R5cGUqIFVSSUVycm9yUHJvdG90eXBlOwogCiAgICAgICAgICAgICBT
eW1ib2xUYWJsZSBpbmxpbmVTeW1ib2xUYWJsZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QWN0aXZhdGlvblN0YWNrTm9kZSogYWN0aXZhdGlvbnM7CisgICAgICAgICAgICBpbnQgYWN0aXZh
dGlvbkNvdW50OwogICAgICAgICB9OwogCiAgICAgcHVibGljOgpAQCAtMjI2LDYgKzIzMSwxMCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdFNj
cmlwdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzQWNjZXNzRnJvbShjb25zdCBKU0dsb2JhbE9iamVjdCopIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKyAgICAgICAgCisgICAgICAgIEFjdGl2YXRpb25JbXAqIHB1c2hBY3RpdmF0aW9uKEV4ZWNT
dGF0ZSogZXhlYyk7CisgICAgICAgIHZvaWQgcG9wQWN0aXZhdGlvbigpOworICAgICAgICB2b2lk
IHRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYyk7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIGluaXQoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmplY3Qu
aAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYXJpYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxNiArNTYsMzAgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgIC8vIHdpdGhvdXQgaW5jcmVhc2luZyB0aGVpciBvd24gc2l6ZSAoc2luY2UgdGhlcmUn
cyBhIGhhcmQgbGltaXQgb24gdGhlCiAgICAgICAgIC8vIHNpemUgb2YgYSBKU0NlbGwpLgogICAg
ICAgICBzdHJ1Y3QgSlNWYXJpYWJsZU9iamVjdERhdGEgeworICAgICAgICAgICAgSlNWYXJpYWJs
ZU9iamVjdERhdGEoKSB7IH0KKyAgICAgICAgCiAgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0
RGF0YShTeW1ib2xUYWJsZSogcykKICAgICAgICAgICAgICAgICA6IHN5bWJvbFRhYmxlKHMpIC8v
IFN1YmNsYXNzIG93bnMgdGhpcyBwb2ludGVyLgogICAgICAgICAgICAgewogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0RGF0YShjb25zdCBKU1ZhcmlhYmxlT2Jq
ZWN0RGF0YSYgb2xkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFn
ZS5yZXNlcnZlQ2FwYWNpdHkob2xkLmxvY2FsU3RvcmFnZS5zaXplKCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGZvciAoTG9jYWxTdG9yYWdlOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gb2xkLmxvY2FsU3RvcmFnZS5iZWdpbigpOyBpdGVyICE9IG9sZC5sb2NhbFN0b3JhZ2Uu
ZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmFwcGVuZCgq
aXRlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUgPSBv
bGQuc3ltYm9sVGFibGU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIExvY2FsU3RvcmFn
ZSBsb2NhbFN0b3JhZ2U7IC8vIFN0b3JhZ2UgZm9yIHZhcmlhYmxlcyBpbiB0aGUgc3ltYm9sIHRh
YmxlLgogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlOyAvLyBNYXBzIG5hbWUg
LT4gaW5kZXggaW4gbG9jYWxTdG9yYWdlLgogCiAgICAgICAgIH07CiAKKyAgICAgICAgSlNWYXJp
YWJsZU9iamVjdCgpIHsgfQorCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QoSlNWYXJpYWJsZU9i
amVjdERhdGEqIGRhdGEpCiAgICAgICAgICAgICA6IGQoZGF0YSkgLy8gU3ViY2xhc3Mgb3ducyB0
aGlzIHBvaW50ZXIuCiAgICAgICAgIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
ZnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgIkFjdGl2YXRpb25JbXAuaCIKICNpbmNsdWRlICJFeGVj
U3RhdGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlBhcnNlci5o
IgpAQCAtODYsOCArODcsMTEgQEAgSlNWYWx1ZSogRnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dldHRl
cihFeAogICBGdW5jdGlvbkltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4o
c2xvdC5zbG90QmFzZSgpKTsKICAgRXhlY1N0YXRlKiBlID0gZXhlYzsKICAgd2hpbGUgKGUpIHsK
LSAgICBpZiAoZS0+ZnVuY3Rpb24oKSA9PSB0aGlzT2JqKQorICAgIGlmIChlLT5mdW5jdGlvbigp
ID09IHRoaXNPYmopIHsKKyAgICAgIGUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFj
dGl2YXRpb24oZSk7CiAgICAgICByZXR1cm4gZS0+YWN0aXZhdGlvbk9iamVjdCgpLT5nZXQoZXhl
YywgcHJvcGVydHlOYW1lKTsKKyAgICB9CisgICAgCiAgICAgZSA9IGUtPmNhbGxpbmdFeGVjU3Rh
dGUoKTsKICAgfQogICByZXR1cm4ganNOdWxsKCk7CkBAIC0zNDAsNiArMzQ0LDIwIEBAIGJvb2wg
QXJndW1lbnRzOjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUKIAogY29uc3QgQ2xhc3NJbmZvIEFj
dGl2YXRpb25JbXA6OmluZm8gPSB7ICJBY3RpdmF0aW9uIiwgMCwgMCB9OwogCitBY3RpdmF0aW9u
SW1wOjpBY3RpdmF0aW9uSW1wKFN0YWNrQWN0aXZhdGlvbiogb2xkU3RhY2tFbnRyeSkKK3sKKyAg
SlNWYXJpYWJsZU9iamVjdDo6ZCA9IG5ldyBBY3RpdmF0aW9uSW1wRGF0YShvbGRTdGFja0VudHJ5
LT5hY3RpdmF0aW9uRGF0YVN0b3JhZ2UpOworfQorICAKK3ZvaWQgQWN0aXZhdGlvbkltcDo6aW5p
dChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZCgpLT5zeW1ib2xUYWJsZSA9ICZleGVjLT5mdW5j
dGlvbigpLT5ib2R5LT5zeW1ib2xUYWJsZSgpOworICAgIGQoKS0+ZXhlYyA9IGV4ZWM7CisgICAg
ZCgpLT5mdW5jdGlvbiA9IGV4ZWMtPmZ1bmN0aW9uKCk7CisgICAgZCgpLT5hcmd1bWVudHNPYmpl
Y3QgPSAwOworICAgIGQoKS0+b25TdGFjayA9IHRydWU7Cit9CisgIAogSlNWYWx1ZSogQWN0aXZh
dGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBBY3RpdmF0aW9u
SW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KHNsb3Quc2xvdEJhc2Uo
KSk7CkBAIC0zNjcsNiArMzg1LDE4IEBAIGJvb2wgQWN0aXZhdGlvbkltcDo6Z2V0T3duUHJvcGVy
dHlTbG90KEUKIAogICAgIC8vIE9ubHkgcmV0dXJuIHRoZSBidWlsdC1pbiBhcmd1bWVudHMgb2Jq
ZWN0IGlmIGl0IHdhc24ndCBvdmVycmlkZGVuIGFib3ZlLgogICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgeworICAgICAgICBFeGVjU3RhdGUq
IGUgPSBleGVjOworICAgICAgICB3aGlsZSAoZSkgeworICAgICAgICAgICAgaWYgKGUtPmZ1bmN0
aW9uKCkgPT0gZCgpLT5mdW5jdGlvbikgeworICAgICAgICAgICAgICAgIGUtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZSk7CisgICAgICAgICAgICAgICAgQWN0aXZh
dGlvbkltcCogbmV3QWN0aXZhdGlvbiA9IGUtPmFjdGl2YXRpb25PYmplY3QoKTsKKyAgICAgICAg
ICAgICAgICBzbG90LnNldEN1c3RvbShuZXdBY3RpdmF0aW9uLCBuZXdBY3RpdmF0aW9uLT5nZXRB
cmd1bWVudHNHZXR0ZXIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGUgPSBlLT5jYWxsaW5nRXhlY1N0YXRlKCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGdldEFyZ3VtZW50c0dl
dHRlcigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDAwLDExICs0MzAsMjEg
QEAgdm9pZCBBY3RpdmF0aW9uSW1wOjpwdXQoRXhlY1N0YXRlKiwgY29ucwogCiB2b2lkIEFjdGl2
YXRpb25JbXA6Om1hcmsoKQogewotICAgIEpTVmFyaWFibGVPYmplY3Q6Om1hcmsoKTsKKyAgICBp
ZiAoIWlzT25TdGFjaygpKQorICAgICAgICBKU09iamVjdDo6bWFyaygpOworICAgIAorICAgIHNp
emVfdCBzaXplID0gZCgpLT5sb2NhbFN0b3JhZ2Uuc2l6ZSgpOworICAgIAorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gZCgp
LT5sb2NhbFN0b3JhZ2VbaV0udmFsdWU7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbHVlLT5t
YXJrZWQoKSkKKyAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7CisgICAgfQogICAgIAogICAgIGlm
ICghZCgpLT5mdW5jdGlvbi0+bWFya2VkKCkpCiAgICAgICAgIGQoKS0+ZnVuY3Rpb24tPm1hcmso
KTsKLQorICAgIAogICAgIGlmIChkKCktPmFyZ3VtZW50c09iamVjdCAmJiAhZCgpLT5hcmd1bWVu
dHNPYmplY3QtPm1hcmtlZCgpKQogICAgICAgICBkKCktPmFyZ3VtZW50c09iamVjdC0+bWFyaygp
OwogfQpAQCAtNDE3LDYgKzQ1NywxNSBAQCB2b2lkIEFjdGl2YXRpb25JbXA6OmNyZWF0ZUFyZ3Vt
ZW50c09iamVjCiAgICAgZCgpLT5hcmd1bWVudHNPYmplY3QgPSBuZXcgQXJndW1lbnRzKGV4ZWMs
IGQoKS0+ZXhlYy0+ZnVuY3Rpb24oKSwgKmQoKS0+ZXhlYy0+YXJndW1lbnRzKCksIHRoaXMpOwog
fQogCitBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wRGF0YTo6QWN0aXZhdGlvbkltcERhdGEo
Y29uc3QgQWN0aXZhdGlvbkltcERhdGEmIG9sZCkKKyAgOiBKU1ZhcmlhYmxlT2JqZWN0RGF0YShv
bGQpCit7CisgICAgZXhlYyA9IG9sZC5leGVjOworICAgIGZ1bmN0aW9uID0gb2xkLmZ1bmN0aW9u
OworICAgIGFyZ3VtZW50c09iamVjdCA9IG9sZC5hcmd1bWVudHNPYmplY3Q7CisgICAgb25TdGFj
ayA9IGZhbHNlOworfQorICAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9i
YWxGdW5jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIApAQCAtNjk2LDYg
Kzc0NSw5IEBAIEpTVmFsdWUqIEdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKEUKICAgICAg
ICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYmIHRoaXNPYmogIT0gZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpICYmIHRoaXNPYmotPmlzR2xvYmFsT2JqZWN0KCk7CiAKICAgICAgICAg
Ly8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQKKyAgICAgICAgaWYgKCFzd2l0Y2hHbG9i
YWwpCisgICAgICAgICAgICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3Rp
dmF0aW9uKGV4ZWMpOworICAgICAgICAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09i
aikgOiBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIEV4ZWNTdGF0ZSBuZXdF
eGVjKGdsb2JhbE9iamVjdCwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMpOwogICAgICAgICAgIApJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgIGNsYXNzIEFjdGl2YXRpb25JbXA7CiAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7
CiAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOworICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIAog
ICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGljIEpTT2JqZWN0IHsKICAgcHVibGlj
OgpAQCAtMTM2LDU0ICsxMzcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBBY3RpdmF0aW9uSW1w
KiBfYWN0aXZhdGlvbk9iamVjdDsKICAgICBtdXRhYmxlIEluZGV4VG9OYW1lTWFwIGluZGV4VG9O
YW1lTWFwOwogICB9OwotCi0gIGNsYXNzIEFjdGl2YXRpb25JbXAgOiBwdWJsaWMgSlNWYXJpYWJs
ZU9iamVjdCB7Ci0gIHByaXZhdGU6Ci0gICAgdXNpbmcgSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJp
YWJsZU9iamVjdERhdGE7Ci0KLSAgICBzdHJ1Y3QgQWN0aXZhdGlvbkltcERhdGEgOiBwdWJsaWMg
SlNWYXJpYWJsZU9iamVjdERhdGEgewotICAgICAgICBBY3RpdmF0aW9uSW1wRGF0YShFeGVjU3Rh
dGUqIGUpCi0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZlLT5mdW5jdGlvbigp
LT5ib2R5LT5zeW1ib2xUYWJsZSgpKQotICAgICAgICAgICAgLCBleGVjKGUpCi0gICAgICAgICAg
ICAsIGZ1bmN0aW9uKGUtPmZ1bmN0aW9uKCkpIC8vIFN0b3JlIHRoaXMgcG9pbnRlciBmb3IgbWFy
a2luZywgdG8ga2VlcCBvdXIgc3ltYm9sIHRhYmxlIC8gc2NvcGUgYWxpdmUgYWZ0ZXIgZXhlYyBo
YXMgZ29uZSBvdXQgb2Ygc2NvcGUuCi0gICAgICAgICAgICAsIGFyZ3VtZW50c09iamVjdCgwKQot
ICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7Ci0gICAgICAg
IEZ1bmN0aW9uSW1wKiBmdW5jdGlvbjsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHNPYmpl
Y3Q7Ci0gICAgfTsKLQotICBwdWJsaWM6Ci0gICAgQWN0aXZhdGlvbkltcChFeGVjU3RhdGUqIGV4
ZWMpCi0gICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChuZXcgQWN0aXZhdGlvbkltcERhdGEoZXhl
YykpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkFjdGl2YXRpb25JbXAoKQotICAgIHsK
LSAgICAgICAgZGVsZXRlIGQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdmlydHVhbCBi
b29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgbWFyaygpOwotCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGlvbk9i
amVjdCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICBwcml2YXRlOgotICAgIHN0YXRpYyBQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSogYXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCk7Ci0gICAgdm9pZCBjcmVhdGVBcmd1bWVu
dHNPYmplY3QoRXhlY1N0YXRlKik7Ci0gICAgQWN0aXZhdGlvbkltcERhdGEqIGQoKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wRGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9
Ci0gIH07Ci0KKyAgCiAgIGNsYXNzIEdsb2JhbEZ1bmNJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbkltcCB7CiAgIHB1YmxpYzoKICAgICBHbG9iYWxGdW5jSW1wKEV4ZWNTdGF0ZSosIEZ1bmN0
aW9uUHJvdG90eXBlKiwgaW50IGksIGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL25vZGVzLmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
bm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg1LDYgKzEyODUsNyBAQCBKU1ZhbHVlICpQ
b3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVy
OwogICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsK
KyAgICAgICAgYmFzZSA9ICppdGVyOwogICAgICAgICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1
ZShleGVjLCBiYXNlLCBtX2lkZW50KS0+dG9KU051bWJlcihleGVjKTsKICAgICAgICAgYmFzZS0+
cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSkpOwogICAg
ICAgICByZXR1cm4gdjsKQEAgLTEzNDIsNiArMTM0Myw3IEBAIEpTVmFsdWUgKlBvc3REZWNSZXNv
bHZlTm9kZTo6ZXZhbHVhdGUoRXgKICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYg
KGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgICBi
YXNlID0gKml0ZXI7CiAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJh
c2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwogICAgICAgICBiYXNlLT5wdXQoZXhlYywg
bV9pZGVudCwganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7CiAgICAgICAgIHJldHVy
biB2OwpAQCAtMTc1NSw2ICsxNzU3LDcgQEAgSlNWYWx1ZSAqUHJlSW5jUmVzb2x2ZU5vZGU6OmV2
YWx1YXRlKEV4ZQogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBpZiAoYmFzZS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAgIGJhc2UgPSAqaXRl
cjsKICAgICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVu
dCk7CiAKICAgICAgICAgZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsKQEAgLTE4MDIsNiAr
MTgwNSw3IEBAIEpTVmFsdWUgKlByZURlY1Jlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUKICAgZG8g
eyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVj
LCBtX2lkZW50LCBzbG90KSkgeworICAgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICAgIEpTVmFs
dWUgKnYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpOwogCiAgICAgICAgIGRv
dWJsZSBuID0gdi0+dG9OdW1iZXIoZXhlYyk7CkBAIC0zMjI4LDggKzMyMzIsMTAgQEAgSlNWYWx1
ZSAqUmVhZE1vZGlmeVJlc29sdmVOb2RlOjpldmFsdWF0ZQogICBKU09iamVjdCAqYmFzZTsKICAg
ZG8geyAKICAgICBiYXNlID0gKml0ZXI7Ci0gICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkKKyAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMs
IG1faWRlbnQsIHNsb3QpKSB7CisgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICBnb3RvIGZvdW5k
OworICAgIH0KIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtMzI2
NSw4ICszMjcxLDEwIEBAIEpTVmFsdWUgKkFzc2lnblJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUK
ICAgSlNPYmplY3QgKmJhc2U7CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChi
YXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCisgICAgaWYgKGJhc2Ut
PmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgYmFzZSA9ICpp
dGVyOwogICAgICAgZ290byBmb3VuZDsKKyAgICB9CiAKICAgICArK2l0ZXI7CiAgIH0gd2hpbGUg
KGl0ZXIgIT0gZW5kKTsKQEAgLTM5OTcsNiArNDAwNSw3IEBAIEpTVmFsdWUqIFdpdGhOb2RlOjpl
eGVjdXRlKEV4ZWNTdGF0ZSAqZXgKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAgIEpTT2JqZWN0ICpv
ID0gdi0+dG9PYmplY3QoZXhlYyk7CiAgIEtKU19DSEVDS0VYQ0VQVElPTgorICBleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwogICBleGVjLT5wdXNo
U2NvcGUobyk7CiAgIEpTVmFsdWUqIHZhbHVlID0gc3RhdGVtZW50LT5leGVjdXRlKGV4ZWMpOwog
ICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDE5NSw2ICs0MjA0LDcgQEAgSlNWYWx1ZSogVHJ5Tm9k
ZTo6ZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZQogICBpZiAoY2F0Y2hCbG9jayAmJiBleGVjLT5jb21w
bGV0aW9uVHlwZSgpID09IFRocm93KSB7CiAgICAgSlNPYmplY3QqIG9iaiA9IG5ldyBKU09iamVj
dDsKICAgICBvYmotPnB1dChleGVjLCBleGNlcHRpb25JZGVudCwgcmVzdWx0LCBEb250RGVsZXRl
KTsKKyAgICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4
ZWMpOwogICAgIGV4ZWMtPnB1c2hTY29wZShvYmopOwogICAgIHJlc3VsdCA9IGNhdGNoQmxvY2st
PmV4ZWN1dGUoZXhlYyk7CiAgICAgZXhlYy0+cG9wU2NvcGUoKTsKQEAgLTQzNTcsNiArNDM2Nyw5
IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW8KICAgICAgICAgbV9p
bml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaWYgKG1fZnVuY3Rpb25TdGFjay5zaXpl
KCkgIT0gMCkKKyAgICAgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2
YXRpb24oZXhlYyk7CisKICAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSA9IGV4ZWMtPnZh
cmlhYmxlT2JqZWN0KCktPmxvY2FsU3RvcmFnZSgpOwogICAgIAogICAgIC8vIFdlIGNhbid0IGp1
c3QgcmVzaXplIGxvY2FsU3RvcmFnZSBoZXJlIGJlY2F1c2UgdGhhdCB3b3VsZCB0ZW1wb3Jhcmls
eQpAQCAtNDU2OSw2ICs0NTgyLDggQEAgdm9pZCBGdW5jRXhwck5vZGU6OmFkZFBhcmFtcygpCiAK
IEpTVmFsdWUgKkZ1bmNFeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKQogeworICBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOworICAK
ICAgYm9vbCBuYW1lZCA9ICFpZGVudC5pc051bGwoKTsKICAgSlNPYmplY3QgKmZ1bmN0aW9uU2Nv
cGVPYmplY3QgPSAwOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCShyZXZpc2lvbiAyOTA3OSkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDE4ICs1
ODAsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi0KLS8vIEZJWE1FOiBQdXQgdGhpcyBmdW5jdGlvbiBpbiBhIHNlcGFy
YXRlIGZpbGUgbmFtZWQgc29tZXRoaW5nIGxpa2Ugc2NvcGVfY2hhaW5fbWFyay5oIC0tIGNhbid0
IHB1dCBpdCBpbiBzY29wZV9jaGFpbi5oIHNpbmNlIGl0IGRlcGVuZHMgb24gSlNPYmplY3QuCi0K
LWlubGluZSB2b2lkIFNjb3BlQ2hhaW46Om1hcmsoKQotewotICAgIGZvciAoU2NvcGVDaGFpbk5v
ZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKLSAgICAgICAgSlNPYmplY3QgKm8gPSBu
LT5vYmplY3Q7Ci0gICAgICAgIGlmICghby0+bWFya2VkKCkpCi0gICAgICAgICAgICBvLT5tYXJr
KCk7Ci0gICAgfQotfQotCiBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjpyZWxlYXNlKCkKIHsKICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5IGRlcmVmKCksCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvc2NvcGVfY2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvc2NvcGVfY2hhaW4uaAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvc2NvcGVfY2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICAgICAgdm9pZCBjbGVhcigpIHsgZGVyZWYoKTsgX25vZGUgPSAwOyB9CiAg
ICAgICAgIHZvaWQgcHVzaChKU09iamVjdCAqKTsKICAgICAgICAgdm9pZCBwdXNoKGNvbnN0IFNj
b3BlQ2hhaW4gJik7CisgICAgICAgIHZvaWQgc2V0KEpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQg
cG9wKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIG1hcmsoKTsKQEAgLTEyOSw2ICsxMzAsMTIg
QEAgaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cHVzaChKU09iamVjdCAqbwogICAgIF9ub2RlID0g
bmV3IFNjb3BlQ2hhaW5Ob2RlKF9ub2RlLCBvKTsKIH0KIAoraW5saW5lIHZvaWQgU2NvcGVDaGFp
bjo6c2V0KEpTT2JqZWN0KiBvKQoreworICAgIEFTU0VSVChvKTsKKyAgICBfbm9kZS0+b2JqZWN0
ID0gbzsKK30KKwogaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cG9wKCkKIHsKICAgICBTY29wZUNo
YWluTm9kZSAqb2xkTm9kZSA9IF9ub2RlOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Njb3Bl
X2NoYWluX21hcmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hh
aW5fbWFyay5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWlu
X21hcmsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NiBBcHBsZSBJbmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAic2NvcGVfY2hhaW4uaCIKKyNp
bmNsdWRlICJBY3RpdmF0aW9uSW1wLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBLSlMgeworCisgICAgaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6bWFyaygpCisgICAgeworICAg
ICAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlICpuID0gX25vZGU7IG47IG4gPSBuLT5uZXh0KSB7Cisg
ICAgICAgICAgICBKU09iamVjdCAqbyA9IG4tPm9iamVjdDsKKyAgICAgICAgICAgIGlmICgoby0+
aXNBY3RpdmF0aW9uT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KG8pLT5p
c09uU3RhY2soKSkgfHwgIW8tPm1hcmtlZCgpKQorICAgICAgICAgICAgICAgIG8tPm1hcmsoKTsK
KyAgICAgICAgfQorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBXZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uSW1wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvQWN0aXZhdGlvbkltcC5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvQWN0aXZhdGlvbkltcC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQWN0aXZhdGlvbkltcC5o
Pgo=
</data>
<flag name="review"
          id="7973"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18307</attachid>
            <date>2008-01-06 18:44:15 -0800</date>
            <delta_ts>2008-01-08 07:09:28 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>32386</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MjE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMDgtMDEtMDYgIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3B0aW1pemVkIEFjdGl2YXRpb25JbXAgYWxsb2Nh
dGlvbiwgc28gdGhhdCBhY3RpdmF0aW9uIHJlY29yZHMgYXJlIG5vdworICAgICAgICBmaXJzdCBh
bGxvY2F0ZWQgb24gYW4gZXhwbGljaXRseSBtYW5hZ2VkIHN0YWNrIGFuZCBvbmx5IGhlYXAgYWxs
b2NhdGVkCisgICAgICAgIHdoZW4gbmVjZXNzYXJ5LiBSb3VnaGx5IGEgNSUgaW1wcm92ZW1lbnQg
b24gU3VuU3BpZGVyLCBhbmQgYSBsYXJnZXIKKyAgICAgICAgaW1wcm92ZW1lbnQgb24gYmVuY2ht
YXJrcyB0aGF0IHVzZSBtb3JlIGZ1bmN0aW9uIGNhbGxzLgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBranMvQWN0aXZhdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRhdGE6
OkFjdGl2YXRpb25EYXRhKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6QWN0aXZhdGlv
bkltcCk6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OmNsYXNzSW5mbyk6CisgICAgICAg
IChLSlM6OkFjdGl2YXRpb25JbXA6OmlzQWN0aXZhdGlvbk9iamVjdCk6CisgICAgICAgIChLSlM6
OkFjdGl2YXRpb25JbXA6OmlzT25TdGFjayk6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6
OmQpOgorICAgICAgICAoS0pTOjpTdGFja0FjdGl2YXRpb246OlN0YWNrQWN0aXZhdGlvbik6Cisg
ICAgICAgICoga2pzL0V4ZWNTdGF0ZS5jcHA6CisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6RXhl
Y1N0YXRlKToKKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjp+RXhlY1N0YXRlKToKKyAgICAgICAg
KiBranMvRXhlY1N0YXRlLmg6CisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6cmVwbGFjZVNjb3Bl
Q2hhaW5Ub3ApOgorICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OnNldEFjdGl2YXRpb25PYmplY3Qp
OgorICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OnNldExvY2FsU3RvcmFnZSk6CisgICAgICAgICog
a2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnJl
c2V0KToKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnB1c2hBY3RpdmF0aW9uKToKKyAg
ICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OmNoZWNrQWN0aXZhdGlvbkNvdW50KToKKyAgICAg
ICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnBvcEFjdGl2YXRpb25IZWxwZXIpOgorICAgICAgICAo
S0pTOjpKU0dsb2JhbE9iamVjdDo6cG9wQWN0aXZhdGlvbik6CisgICAgICAgIChLSlM6OkpTR2xv
YmFsT2JqZWN0Ojp0ZWFyT2ZmQWN0aXZhdGlvbik6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICoga2pzL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEtKUzo6
SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGE6OkpTVmFyaWFibGVPYmplY3RE
YXRhKToKKyAgICAgICAgKEtKUzo6SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdCk6
CisgICAgICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6
OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OkFjdGl2YXRp
b25JbXApOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1wOjp+QWN0aXZhdGlvbkltcCk6Cisg
ICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OmluaXQpOgorICAgICAgICAoS0pTOjpBY3RpdmF0
aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1w
OjptYXJrSGVscGVyKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6bWFyayk6CisgICAg
ICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25EYXRhOjpBY3RpdmF0aW9uRGF0YSk6
CisgICAgICAgIChLSlM6Okdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAg
KiBranMvZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAoS0pT
OjpQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UG9zdERlY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlByZUluY1Jlc29sdmVOb2RlOjpl
dmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlByZURlY1Jlc29sdmVOb2RlOjpldmFsdWF0ZSk6Cisg
ICAgICAgIChLSlM6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAo
S0pTOjpBc3NpZ25SZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpXaXRoTm9k
ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChLSlM6OlRyeU5vZGU6OmV4ZWN1dGUpOgorICAgICAgICAo
S0pTOjpGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEtK
Uzo6RnVuY0V4cHJOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL29iamVjdC5oOgorICAg
ICAgICAqIGtqcy9zY29wZV9jaGFpbi5oOgorICAgICAgICAoS0pTOjpTY29wZUNoYWluOjpyZXBs
YWNlKToKKyAgICAgICAgKiBranMvc2NvcGVfY2hhaW5fbWFyay5oOiBBZGRlZC4KKyAgICAgICAg
KEtKUzo6U2NvcGVDaGFpbjo6bWFyayk6CisKIDIwMDgtMDEtMDYgIE5pa29sYXMgWmltbWVybWFu
biAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4uCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTU4
LDYgKzU1OCw4IEBACiAJCTcwNzNCRTNEMDU4MTI5MUUwMDVFRTJDOSAvKiBydW50aW1lX2FycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHJ1
bnRpbWVfYXJyYXkuaDsgcGF0aCA9IGJpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MEIxNkEyNjA1NjlBMTA5MDBEQjc1
NkQgLyogcnVudGltZV9vYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gcnVudGltZV9vYmplY3QuY3BwOyBwYXRoID0gYmluZGlu
Z3MvcnVudGltZV9vYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IH07CiAJCTcwQjE2QTI3MDU2OUExMDkwMERCNzU2RCAvKiBydW50aW1lX29iamVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBydW50aW1l
X29iamVjdC5oOyBwYXRoID0gYmluZGluZ3MvcnVudGltZV9vYmplY3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OworCQk3RTJDNkM5NTBEMzFDNkFCMDAyRDQ0RTIg
LyogQWN0aXZhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBY3RpdmF0
aW9uLmg7IHBhdGggPSBranMvQWN0aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogc2NvcGVfY2hhaW5fbWFyay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzY29wZV9jaGFpbl9tYXJrLmg7IHBhdGggPSBr
anMvc2NvcGVfY2hhaW5fbWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEFC
RjFERTA3MEI2MjhDMDBBM0FDMDUgLyogbnBydW50aW1lX2ltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBucHJ1bnRpbWVfaW1wbC5oOyBwYXRo
ID0gYmluZGluZ3MvbnBydW50aW1lX2ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQk5MzAzRjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93blB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzAzRjU2OTA5OTExOTAwMDBBRDcxQjggLyogTm9uY29weWFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uY29weWFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyNCw2ICs3MjYsOCBAQAogCQkwODY3RDY5MUZFODQwMjhG
QzAyQUFDMDcgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBzY29wZV9jaGFp
bl9tYXJrLmggKi8sCisJCQkJN0UyQzZDOTUwRDMxQzZBQjAwMkQ0NEUyIC8qIEFjdGl2YXRpb24u
aCAqLywKIAkJCQk5MzdCNjNDQzA5RTc2NkQyMDBBNjcxREQgLyogRGVyaXZlZFNvdXJjZXMubWFr
ZSAqLywKIAkJCQkxNEI4RUNBNjBBNTY1Mzk4MDA2MkJFNTQgLyogSmF2YVNjcmlwdENvcmUuZXhw
ICovLAogCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZp
eC5oICovLApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmlj
aCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBP
cmxvdmljaAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBBY3RpdmF0aW9uX2gKKyNkZWZpbmUgQWN0
aXZhdGlvbl9oCisKKyNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAib2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisKK25hbWVzcGFjZSBLSlMgeworCisgICAg
Y2xhc3MgQXJndW1lbnRzOworICAgIGNsYXNzIEZ1bmN0aW9uSW1wOworICAgIGNsYXNzIFN0YWNr
QWN0aXZhdGlvbjsKKworICAgIGNsYXNzIEFjdGl2YXRpb25JbXAgOiBwdWJsaWMgSlNWYXJpYWJs
ZU9iamVjdCB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIFN0YWNrQWN0aXZhdGlvbjsKKyAgICBwcml2YXRlOgorICAgICAgICBzdHJ1
Y3QgQWN0aXZhdGlvbkRhdGEgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9i
amVjdERhdGEgeworICAgICAgICAgICAgQWN0aXZhdGlvbkRhdGEoKSA6IG9uU3RhY2sodHJ1ZSkg
eyB9CisgICAgICAgICAgICBBY3RpdmF0aW9uRGF0YShjb25zdCBBY3RpdmF0aW9uRGF0YSYpOwor
CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7CisgICAgICAgICAgICBGdW5jdGlvbkltcCog
ZnVuY3Rpb247CisgICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50c09iamVjdDsKKyAgICAg
ICAgCisgICAgICAgICAgICBib29sIG9uU3RhY2s7CisgICAgICAgIH07CisKKyAgICBwdWJsaWM6
CisgICAgICAgIEFjdGl2YXRpb25JbXAoKSB7IH0KKyAgICAgICAgQWN0aXZhdGlvbkltcChTdGFj
a0FjdGl2YXRpb24qKTsKKworICAgICAgICB2aXJ0dWFsIH5BY3RpdmF0aW9uSW1wKCk7CisKKyAg
ICAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSogZXhlYyk7CisKKyAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIEpTVmFsdWUqLCBpbnQgYXR0ciA9IE5vbmUpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lKTsKKworICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAgIHZvaWQgbWFya0hlbHBl
cigpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRpb25PYmplY3QoKSB7IHJldHVy
biB0cnVlOyB9CisgICAgCisgICAgICAgIGJvb2wgaXNPblN0YWNrKCkgeyByZXR1cm4gZCgpLT5v
blN0YWNrOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVl
KiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKKyAgICAgICAgdm9pZCBjcmVhdGVBcmd1bWVu
dHNPYmplY3QoRXhlY1N0YXRlKik7CisgICAgICAgIEFjdGl2YXRpb25EYXRhKiBkKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkRhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQor
ICAgIH07CisKKyAgICBjb25zdCBzaXplX3QgYWN0aXZhdGlvblN0YWNrU2l6ZSA9IDMyOworCisg
ICAgc3RydWN0IFN0YWNrQWN0aXZhdGlvbiB7CisgICAgICAgIFN0YWNrQWN0aXZhdGlvbigpIHsg
YWN0aXZhdGlvblN0b3JhZ2UuSlNWYXJpYWJsZU9iamVjdDo6ZCA9ICZhY3RpdmF0aW9uRGF0YVN0
b3JhZ2U7IH0KKyAgICAgICAgU3RhY2tBY3RpdmF0aW9uKGNvbnN0IFN0YWNrQWN0aXZhdGlvbiYp
OworICAgICAgCisgICAgICAgIEFjdGl2YXRpb25JbXAgYWN0aXZhdGlvblN0b3JhZ2U7CisgICAg
ICAgIEFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25EYXRhIGFjdGl2YXRpb25EYXRhU3RvcmFnZTsK
KyAgICB9OworCisgICAgc3RydWN0IEFjdGl2YXRpb25TdGFja05vZGUgeworICAgICAgICBBY3Rp
dmF0aW9uU3RhY2tOb2RlKiBwcmV2OworICAgICAgICBTdGFja0FjdGl2YXRpb24gZGF0YVthY3Rp
dmF0aW9uU3RhY2tTaXplXTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBA
QAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIK
KyNpbmNsdWRlICJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInNjb3BlX2NoYWluX21hcmsuaCIKIAogbmFtZXNwYWNl
IEtKUyB7CiAKQEAgLTEwNSw3ICsxMDcsNyBAQCBFeGVjU3RhdGU6OkV4ZWNTdGF0ZShKU0dsb2Jh
bE9iamVjdCogZ2xvCiAgICAgLCBtX3N3aXRjaERlcHRoKDApIAogICAgICwgbV9jb2RlVHlwZShG
dW5jdGlvbkNvZGUpCiB7Ci0gICAgQWN0aXZhdGlvbkltcCogYWN0aXZhdGlvbiA9IG5ldyBBY3Rp
dmF0aW9uSW1wKHRoaXMpOworICAgIEFjdGl2YXRpb25JbXAqIGFjdGl2YXRpb24gPSBnbG9iYWxP
YmplY3QtPnB1c2hBY3RpdmF0aW9uKHRoaXMpOwogICAgIG1fYWN0aXZhdGlvbiA9IGFjdGl2YXRp
b247CiAgICAgbV9sb2NhbFN0b3JhZ2UgPSAmYWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCk7CiAg
ICAgbV92YXJpYWJsZU9iamVjdCA9IGFjdGl2YXRpb247CkBAIC0xMTUsNiArMTE3LDkgQEAgRXhl
Y1N0YXRlOjpFeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsbwogCiBFeGVjU3RhdGU6On5FeGVj
U3RhdGUoKQogeworICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNf
Y2FzdDxBY3RpdmF0aW9uSW1wKj4obV9hY3RpdmF0aW9uKS0+aXNPblN0YWNrKCkpCisgICAgICAg
IG1fZ2xvYmFsT2JqZWN0LT5wb3BBY3RpdmF0aW9uKCk7CisgICAgCiAgICAgbV9nbG9iYWxPYmpl
Y3QtPnNldEN1cnJlbnRFeGVjKG1fc2F2ZWRFeGVjKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVj
U3RhdGUuaAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAg
ICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV9leGNlcHRpb247IH0K
ICAgICAgICAgCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4oKSBjb25zdCB7
IHJldHVybiBtX3Njb3BlQ2hhaW47IH0KKyAgICAgICAgdm9pZCByZXBsYWNlU2NvcGVDaGFpblRv
cChKU09iamVjdCogbykgeyBtX3Njb3BlQ2hhaW4ucmVwbGFjZShvKTsgfQogICAgICAgICAKICAg
ICAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhYmxlT2JqZWN0OyB9CiAgICAgICAgIHZvaWQgc2V0VmFyaWFibGVPYmplY3QoSlNWYXJp
YWJsZU9iamVjdCogdikgeyBtX3ZhcmlhYmxlT2JqZWN0ID0gdjsgfQpAQCAtODcsNiArODgsNyBA
QCBuYW1lc3BhY2UgS0pTICB7CiAgICAgICAgIEV4ZWNTdGF0ZSogc2F2ZWRFeGVjKCkgeyByZXR1
cm4gbV9zYXZlZEV4ZWM7IH0KICAgICAgICAgCiAgICAgICAgIEFjdGl2YXRpb25JbXAqIGFjdGl2
YXRpb25PYmplY3QoKSB7IHJldHVybiBtX2FjdGl2YXRpb247IH0KKyAgICAgICAgdm9pZCBzZXRB
Y3RpdmF0aW9uT2JqZWN0KEFjdGl2YXRpb25JbXAqIGEpIHsgbV9hY3RpdmF0aW9uID0gYTsgfQog
ICAgICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KICAgICAg
ICAgU2NvcGVOb2RlKiBzY29wZU5vZGUoKSB7IHJldHVybiBtX3Njb3BlTm9kZTsgfQogICAgICAg
ICBGdW5jdGlvbkltcCogZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CkBA
IC0xMTIsNiArMTE0LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBjb25zdCBMaXN0JiBl
bXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqbV9lbXB0eUxpc3Q7IH0KIAogICAgICAgICBMb2Nh
bFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSgpIHsgcmV0dXJuICptX2xvY2FsU3RvcmFnZTsgfQorICAg
ICAgICB2b2lkIHNldExvY2FsU3RvcmFnZShMb2NhbFN0b3JhZ2UqIHMpIHsgbV9sb2NhbFN0b3Jh
Z2UgPSBzOyB9CiAKICAgICAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdmFsaWQgcmlnaHQgYWZ0ZXIg
Y2FsbGluZyBleGVjdXRlKCkuCiAgICAgICAgIENvbXBsVHlwZSBjb21wbGV0aW9uVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29tcGxldGlvblR5cGU7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tq
cy9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
SlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5j
YSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMzAsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAKLSNpbmNsdWRl
ICJTYXZlZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgImFy
cmF5X29iamVjdC5oIgogI2luY2x1ZGUgImJvb2xfb2JqZWN0LmgiCiAjaW5jbHVkZSAiZGF0ZV9v
YmplY3QuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJudW1iZXJfb2JqZWN0LmgiCiAj
aW5jbHVkZSAib2JqZWN0X29iamVjdC5oIgogI2luY2x1ZGUgInJlZ2V4cF9vYmplY3QuaCIKKyNp
bmNsdWRlICJTYXZlZEJ1aWx0aW5zLmgiCiAjaW5jbHVkZSAic3RyaW5nX29iamVjdC5oIgogCiAj
aWYgSEFWRShTWVNfVElNRV9IKQpAQCAtMjAwLDYgKzIwMiw5IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9ICZkKCktPmds
b2JhbEV4ZWM7CiAKKyAgICBkKCktPmFjdGl2YXRpb25zID0gbmV3IEFjdGl2YXRpb25TdGFja05v
ZGU7CisgICAgZCgpLT5hY3RpdmF0aW9uQ291bnQgPSAwOworCiAgICAgLy8gUHJvdG90eXBlcwog
ICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcgRnVuY3Rpb25Qcm90b3R5cGUoZXhlYyk7
CiAgICAgZCgpLT5vYmplY3RQcm90b3R5cGUgPSBuZXcgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwpAQCAtNDk0LDQgKzQ5OSw1NiBAQCBFeGVjU3RhdGUqIEpT
R2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKICAgICByZXR1cm4gJmQoKS0+Z2xvYmFsRXhlYzsK
IH0KIAorQWN0aXZhdGlvbkltcCogSlNHbG9iYWxPYmplY3Q6OnB1c2hBY3RpdmF0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZCgpLT5hY3RpdmF0aW9uQ291bnQgPT0gYWN0aXZhdGlv
blN0YWNrU2l6ZSkgeworICAgICAgICBBY3RpdmF0aW9uU3RhY2tOb2RlKiBuZXdOb2RlID0gbmV3
IEFjdGl2YXRpb25TdGFja05vZGU7CisgICAgICAgIG5ld05vZGUtPnByZXYgPSBkKCktPmFjdGl2
YXRpb25zOworICAgICAgICBkKCktPmFjdGl2YXRpb25zID0gbmV3Tm9kZTsKKyAgICAgICAgZCgp
LT5hY3RpdmF0aW9uQ291bnQgPSAwOworICAgICAgfQorICAgIAorICAgIFN0YWNrQWN0aXZhdGlv
biogc3RhY2tFbnRyeSA9ICZkKCktPmFjdGl2YXRpb25zLT5kYXRhW2QoKS0+YWN0aXZhdGlvbkNv
dW50KytdOworICAgIHN0YWNrRW50cnktPmFjdGl2YXRpb25TdG9yYWdlLmluaXQoZXhlYyk7Cisg
ICAgCisgICAgcmV0dXJuICYoc3RhY2tFbnRyeS0+YWN0aXZhdGlvblN0b3JhZ2UpOworfQorCitp
bmxpbmUgdm9pZCBKU0dsb2JhbE9iamVjdDo6Y2hlY2tBY3RpdmF0aW9uQ291bnQoKQoreworICAg
IGlmICghZCgpLT5hY3RpdmF0aW9uQ291bnQpIHsKKyAgICAgICAgQWN0aXZhdGlvblN0YWNrTm9k
ZSogcHJldiA9IGQoKS0+YWN0aXZhdGlvbnMtPnByZXY7CisgICAgICAgIGRlbGV0ZSBkKCktPmFj
dGl2YXRpb25zOworICAgICAgICBkKCktPmFjdGl2YXRpb25zID0gcHJldjsKKyAgICAgICAgZCgp
LT5hY3RpdmF0aW9uQ291bnQgPSBhY3RpdmF0aW9uU3RhY2tTaXplOworICAgIH0KK30KKworaW5s
aW5lIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnBvcEFjdGl2YXRpb25IZWxwZXIoKQoreworICAgIGQo
KS0+YWN0aXZhdGlvbnMtPmRhdGFbLS1kKCktPmFjdGl2YXRpb25Db3VudF0uYWN0aXZhdGlvbkRh
dGFTdG9yYWdlLmxvY2FsU3RvcmFnZS5zaHJpbmsoMCk7ICAgIAorfQorCit2b2lkIEpTR2xvYmFs
T2JqZWN0Ojpwb3BBY3RpdmF0aW9uKCkKK3sKKyAgICBjaGVja0FjdGl2YXRpb25Db3VudCgpOwor
ICAgIHBvcEFjdGl2YXRpb25IZWxwZXIoKTsKK30KKwordm9pZCBKU0dsb2JhbE9iamVjdDo6dGVh
ck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5jb2RlVHlw
ZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+
YWN0aXZhdGlvbk9iamVjdCgpKS0+aXNPblN0YWNrKCkpIHsKKyAgICAgICAgY2hlY2tBY3RpdmF0
aW9uQ291bnQoKTsKKyAgICAgICAgCisgICAgICAgIEFjdGl2YXRpb25JbXAqIG5ld0FjdGl2YXRp
b24gPSBuZXcgQWN0aXZhdGlvbkltcCgmZCgpLT5hY3RpdmF0aW9ucy0+ZGF0YVtkKCktPmFjdGl2
YXRpb25Db3VudCAtIDFdKTsKKyAgICAgICAgCisgICAgICAgIHBvcEFjdGl2YXRpb25IZWxwZXIo
KTsKKyAgICAgICAgCisgICAgICAgIGV4ZWMtPnNldEFjdGl2YXRpb25PYmplY3QobmV3QWN0aXZh
dGlvbik7CisgICAgICAgIGV4ZWMtPnNldFZhcmlhYmxlT2JqZWN0KG5ld0FjdGl2YXRpb24pOwor
ICAgICAgICBleGVjLT5zZXRMb2NhbFN0b3JhZ2UoJihuZXdBY3RpdmF0aW9uLT5sb2NhbFN0b3Jh
Z2UoKSkpOworICAgICAgICBleGVjLT5yZXBsYWNlU2NvcGVDaGFpblRvcChuZXdBY3RpdmF0aW9u
KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pT
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogbmFtZXNw
YWNlIEtKUyB7CiAKKyAgICBjbGFzcyBBY3RpdmF0aW9uSW1wOworICAgIGNsYXNzIEFjdGl2YXRp
b25TdGFja05vZGU7CiAgICAgY2xhc3MgQXJyYXlPYmplY3RJbXA7CiAgICAgY2xhc3MgQXJyYXlQ
cm90b3R5cGU7CiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdEltcDsKQEAgLTEyOCw2ICsxMzAsOSBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBVUklF
cnJvclByb3RvdHlwZTsKIAogICAgICAgICAgICAgU3ltYm9sVGFibGUgaW5saW5lU3ltYm9sVGFi
bGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIGFjdGl2
YXRpb25zOworICAgICAgICAgICAgc2l6ZV90IGFjdGl2YXRpb25Db3VudDsKICAgICAgICAgfTsK
IAogICAgIHB1YmxpYzoKQEAgLTIyNiw2ICsyMzEsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2Vzc0Zyb20oY29uc3QgSlNH
bG9iYWxPYmplY3QqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICBB
Y3RpdmF0aW9uSW1wKiBwdXNoQWN0aXZhdGlvbihFeGVjU3RhdGUqKTsKKyAgICAgICAgdm9pZCBw
b3BBY3RpdmF0aW9uKCk7CisgICAgICAgIHZvaWQgdGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRl
Kik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXQoKTsKQEAgLTIzNSw2ICsyNDQs
OSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgYm9vbCBjaGVja1RpbWVvdXQoKTsKICAgICAg
ICAgdm9pZCByZXNldFRpbWVvdXRDaGVjaygpOwogCisgICAgICAgIHZvaWQgY2hlY2tBY3RpdmF0
aW9uQ291bnQoKTsKKyAgICAgICAgdm9pZCBwb3BBY3RpdmF0aW9uSGVscGVyKCk7CisKICAgICAg
ICAgc3RhdGljIEpTR2xvYmFsT2JqZWN0KiBzX2hlYWQ7CiAgICAgfTsKIApJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2
LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIC8vIHdpdGhvdXQgaW5jcmVhc2luZyB0aGVp
ciBvd24gc2l6ZSAoc2luY2UgdGhlcmUncyBhIGhhcmQgbGltaXQgb24gdGhlCiAgICAgICAgIC8v
IHNpemUgb2YgYSBKU0NlbGwpLgogICAgICAgICBzdHJ1Y3QgSlNWYXJpYWJsZU9iamVjdERhdGEg
eworICAgICAgICAgICAgSlNWYXJpYWJsZU9iamVjdERhdGEoKSB7IH0KKyAgICAgICAgCiAgICAg
ICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0RGF0YShTeW1ib2xUYWJsZSogcykKICAgICAgICAgICAg
ICAgICA6IHN5bWJvbFRhYmxlKHMpIC8vIFN1YmNsYXNzIG93bnMgdGhpcyBwb2ludGVyLgogICAg
ICAgICAgICAgewpAQCAtNjYsNiArNjgsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB9
OwogCisgICAgICAgIEpTVmFyaWFibGVPYmplY3QoKSB7IH0KKwogICAgICAgICBKU1ZhcmlhYmxl
T2JqZWN0KEpTVmFyaWFibGVPYmplY3REYXRhKiBkYXRhKQogICAgICAgICAgICAgOiBkKGRhdGEp
IC8vIFN1YmNsYXNzIG93bnMgdGhpcyBwb2ludGVyLgogICAgICAgICB7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgImZ1bmN0aW9uLmgiCiAKKyNpbmNsdWRlICJBY3RpdmF0aW9uLmgi
CiAjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJQYXJzZXIuaCIKQEAgLTg0LDEyICs4NSwxMyBAQCBKU1ZhbHVlKiBGdW5jdGlvbklt
cDo6Y2FsbEFzRnVuY3Rpb24oRXhlCiBKU1ZhbHVlKiBGdW5jdGlvbkltcDo6YXJndW1lbnRzR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgRnVuY3Rpb25JbXAqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCo+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gIEV4ZWNT
dGF0ZSogZSA9IGV4ZWM7Ci0gIHdoaWxlIChlKSB7Ci0gICAgaWYgKGUtPmZ1bmN0aW9uKCkgPT0g
dGhpc09iaikKKyAgCisgIGZvciAoRXhlY1N0YXRlKiBlID0gZXhlYzsgZTsgZSA9IGUtPmNhbGxp
bmdFeGVjU3RhdGUoKSkKKyAgICBpZiAoZS0+ZnVuY3Rpb24oKSA9PSB0aGlzT2JqKSB7CisgICAg
ICBlLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGUpOwogICAgICAg
cmV0dXJuIGUtPmFjdGl2YXRpb25PYmplY3QoKS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgZSA9IGUtPmNhbGxpbmdFeGVjU3RhdGUoKTsKLSAgfQorICAgIH0KKyAgCiAgIHJldHVybiBq
c051bGwoKTsKIH0KIApAQCAtMzQwLDYgKzM0MiwyNiBAQCBib29sIEFyZ3VtZW50czo6ZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlCiAKIGNvbnN0IENsYXNzSW5mbyBBY3RpdmF0aW9uSW1wOjppbmZv
ID0geyAiQWN0aXZhdGlvbiIsIDAsIDAgfTsKIAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbklt
cChTdGFja0FjdGl2YXRpb24qIG9sZFN0YWNrRW50cnkpCit7CisgICAgSlNWYXJpYWJsZU9iamVj
dDo6ZCA9IG5ldyBBY3RpdmF0aW9uRGF0YShvbGRTdGFja0VudHJ5LT5hY3RpdmF0aW9uRGF0YVN0
b3JhZ2UpOworfQorCitBY3RpdmF0aW9uSW1wOjp+QWN0aXZhdGlvbkltcCgpCit7CisgICAgaWYg
KCFkKCktPm9uU3RhY2spCisgICAgICAgIGRlbGV0ZSBkKCk7Cit9CisKK3ZvaWQgQWN0aXZhdGlv
bkltcDo6aW5pdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZCgpLT5zeW1ib2xUYWJsZSA9ICZl
eGVjLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJsZSgpOworICAgIGQoKS0+ZXhlYyA9IGV4
ZWM7CisgICAgZCgpLT5mdW5jdGlvbiA9IGV4ZWMtPmZ1bmN0aW9uKCk7CisgICAgZCgpLT5hcmd1
bWVudHNPYmplY3QgPSAwOworICAgIGQoKS0+b25TdGFjayA9IHRydWU7Cit9CisgIAogSlNWYWx1
ZSogQWN0aXZhdGlvbkltcDo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBB
Y3RpdmF0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KHNsb3Qu
c2xvdEJhc2UoKSk7CkBAIC0zNjcsNiArMzg5LDE0IEBAIGJvb2wgQWN0aXZhdGlvbkltcDo6Z2V0
T3duUHJvcGVydHlTbG90KEUKIAogICAgIC8vIE9ubHkgcmV0dXJuIHRoZSBidWlsdC1pbiBhcmd1
bWVudHMgb2JqZWN0IGlmIGl0IHdhc24ndCBvdmVycmlkZGVuIGFib3ZlLgogICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgeworICAgICAgICBm
b3IgKEV4ZWNTdGF0ZSogZSA9IGV4ZWM7IGU7IGUgPSBlLT5jYWxsaW5nRXhlY1N0YXRlKCkpCisg
ICAgICAgICAgICBpZiAoZS0+ZnVuY3Rpb24oKSA9PSBkKCktPmZ1bmN0aW9uKSB7CisgICAgICAg
ICAgICAgICAgZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihlKTsK
KyAgICAgICAgICAgICAgICBBY3RpdmF0aW9uSW1wKiBuZXdBY3RpdmF0aW9uID0gZS0+YWN0aXZh
dGlvbk9iamVjdCgpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKG5ld0FjdGl2YXRp
b24sIG5ld0FjdGl2YXRpb24tPmdldEFyZ3VtZW50c0dldHRlcigpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXMsIGdldEFyZ3VtZW50c0dldHRlcigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMzk4LDE1ICs0MjgsMjkgQEAgdm9pZCBBY3RpdmF0aW9uSW1wOjpwdXQoRXhl
Y1N0YXRlKiwgY29ucwogICAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAo
YXR0ciA9PSBOb25lIHx8IGF0dHIgPT0gRG9udERlbGV0ZSkpOwogfQogCi12b2lkIEFjdGl2YXRp
b25JbXA6Om1hcmsoKQordm9pZCBBY3RpdmF0aW9uSW1wOjptYXJrSGVscGVyKCkKIHsKLSAgICBK
U1ZhcmlhYmxlT2JqZWN0OjptYXJrKCk7CisgICAgTG9jYWxTdG9yYWdlJiBsb2NhbFN0b3JhZ2Ug
PSBkKCktPmxvY2FsU3RvcmFnZTsKKyAgICBzaXplX3Qgc2l6ZSA9IGxvY2FsU3RvcmFnZS5zaXpl
KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgSlNWYWx1ZSogdmFsdWUgPSBsb2NhbFN0b3JhZ2VbaV0udmFsdWU7CisgICAgICAgIAorICAg
ICAgICBpZiAoIXZhbHVlLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIHZhbHVlLT5tYXJrKCk7Cisg
ICAgfQogICAgIAogICAgIGlmICghZCgpLT5mdW5jdGlvbi0+bWFya2VkKCkpCiAgICAgICAgIGQo
KS0+ZnVuY3Rpb24tPm1hcmsoKTsKLQorICAgIAogICAgIGlmIChkKCktPmFyZ3VtZW50c09iamVj
dCAmJiAhZCgpLT5hcmd1bWVudHNPYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBkKCktPmFyZ3Vt
ZW50c09iamVjdC0+bWFyaygpOworICAgICAgICBkKCktPmFyZ3VtZW50c09iamVjdC0+bWFyaygp
OyAgICAKK30KKwordm9pZCBBY3RpdmF0aW9uSW1wOjptYXJrKCkKK3sKKyAgICBKU09iamVjdDo6
bWFyaygpOworICAgIG1hcmtIZWxwZXIoKTsKIH0KIAogdm9pZCBBY3RpdmF0aW9uSW1wOjpjcmVh
dGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQpAQCAtNDE3LDYgKzQ2MSwxNSBAQCB2
b2lkIEFjdGl2YXRpb25JbXA6OmNyZWF0ZUFyZ3VtZW50c09iamVjCiAgICAgZCgpLT5hcmd1bWVu
dHNPYmplY3QgPSBuZXcgQXJndW1lbnRzKGV4ZWMsIGQoKS0+ZXhlYy0+ZnVuY3Rpb24oKSwgKmQo
KS0+ZXhlYy0+YXJndW1lbnRzKCksIHRoaXMpOwogfQogCitBY3RpdmF0aW9uSW1wOjpBY3RpdmF0
aW9uRGF0YTo6QWN0aXZhdGlvbkRhdGEoY29uc3QgQWN0aXZhdGlvbkRhdGEmIG9sZCkKKyAgOiBK
U1ZhcmlhYmxlT2JqZWN0RGF0YShvbGQpCit7CisgICAgZXhlYyA9IG9sZC5leGVjOworICAgIGZ1
bmN0aW9uID0gb2xkLmZ1bmN0aW9uOworICAgIGFyZ3VtZW50c09iamVjdCA9IG9sZC5hcmd1bWVu
dHNPYmplY3Q7CisgICAgb25TdGFjayA9IGZhbHNlOworfQorICAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxGdW5jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIApAQCAtNjk2LDYgKzc0OSw5IEBAIEpTVmFsdWUqIEdsb2JhbEZ1bmNJbXA6OmNh
bGxBc0Z1bmN0aW9uKEUKICAgICAgICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYmIHRo
aXNPYmogIT0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpICYmIHRoaXNPYmotPmlzR2xvYmFs
T2JqZWN0KCk7CiAKICAgICAgICAgLy8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQKKyAg
ICAgICAgaWYgKCFzd2l0Y2hHbG9iYWwpCisgICAgICAgICAgICBleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOworICAgICAgICAKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0PEpT
R2xvYmFsT2JqZWN0Kj4odGhpc09iaikgOiBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAg
ICAgICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgZXZhbE5vZGUuZ2V0KCksIGV4
ZWMpOwogICAgICAgICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDI5MDc5
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEFjdGl2YXRpb25JbXA7CiAgIGNs
YXNzIEZ1bmN0aW9uQm9keU5vZGU7CiAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOworICBjbGFz
cyBKU0dsb2JhbE9iamVjdDsKIAogICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGlj
IEpTT2JqZWN0IHsKICAgcHVibGljOgpAQCAtMTM3LDUzICsxMzgsNiBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICBtdXRhYmxlIEluZGV4VG9OYW1lTWFwIGluZGV4VG9OYW1lTWFwOwogICB9OwogCi0g
IGNsYXNzIEFjdGl2YXRpb25JbXAgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7Ci0gIHByaXZh
dGU6Ci0gICAgdXNpbmcgSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGE7Ci0K
LSAgICBzdHJ1Y3QgQWN0aXZhdGlvbkltcERhdGEgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdERh
dGEgewotICAgICAgICBBY3RpdmF0aW9uSW1wRGF0YShFeGVjU3RhdGUqIGUpCi0gICAgICAgICAg
ICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZlLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJs
ZSgpKQotICAgICAgICAgICAgLCBleGVjKGUpCi0gICAgICAgICAgICAsIGZ1bmN0aW9uKGUtPmZ1
bmN0aW9uKCkpIC8vIFN0b3JlIHRoaXMgcG9pbnRlciBmb3IgbWFya2luZywgdG8ga2VlcCBvdXIg
c3ltYm9sIHRhYmxlIC8gc2NvcGUgYWxpdmUgYWZ0ZXIgZXhlYyBoYXMgZ29uZSBvdXQgb2Ygc2Nv
cGUuCi0gICAgICAgICAgICAsIGFyZ3VtZW50c09iamVjdCgwKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7Ci0gICAgICAgIEZ1bmN0aW9uSW1wKiBmdW5j
dGlvbjsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHNPYmplY3Q7Ci0gICAgfTsKLQotICBw
dWJsaWM6Ci0gICAgQWN0aXZhdGlvbkltcChFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogSlNW
YXJpYWJsZU9iamVjdChuZXcgQWN0aXZhdGlvbkltcERhdGEoZXhlYykpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgfkFjdGl2YXRpb25JbXAoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIGQo
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSog
dmFsdWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0KLSAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
LSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFy
aygpOwotCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGlvbk9iamVjdCgpIHsgcmV0dXJuIHRy
dWU7IH0KLQotICBwcml2YXRlOgotICAgIHN0YXRpYyBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
YyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCk7Ci0gICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRl
Kik7Ci0gICAgQWN0aXZhdGlvbkltcERhdGEqIGQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY3Rp
dmF0aW9uSW1wRGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9Ci0gIH07Ci0KICAgY2xhc3Mg
R2xvYmFsRnVuY0ltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgcHVibGljOgog
ICAgIEdsb2JhbEZ1bmNJbXAoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBpbnQgaSwg
aW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25v
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZp
c2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyODUsNiArMTI4NSwxMiBAQCBKU1ZhbHVlICpQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2
YWx1YXRlKEV4CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwogICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAgICAgLy8gSWYgbV9pZGVu
dCBpcyAnYXJndW1lbnRzJywgdGhlIGJhc2UtPmdldFByb3BlcnR5U2xvdCgpIG1heSBjYXVzZSAK
KyAgICAgICAgLy8gYmFzZSAod2hpY2ggbXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2gg
dGhpcyBjYXNlKSB0byBiZSB0b3JuCisgICAgICAgIC8vIG9mZiBmcm9tIHRoZSBhY3RpdmF0aW9u
IHN0YWNrLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gZ2V0IGl0IGFnYWluCisgICAgICAgIC8v
IGZyb20gdGhlIFNjb3BlQ2hhaW5JdGVyYXRvci4KKworICAgICAgICBiYXNlID0gKml0ZXI7CiAg
ICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpLT50
b0pTTnVtYmVyKGV4ZWMpOwogICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1i
ZXIodi0+dG9OdW1iZXIoZXhlYykgKyAxKSk7CiAgICAgICAgIHJldHVybiB2OwpAQCAtMTM0Miw2
ICsxMzQ4LDEyIEBAIEpTVmFsdWUgKlBvc3REZWNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXgKICAg
ZG8geyAKICAgICBiYXNlID0gKml0ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChl
eGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgICAvLyBJZiBtX2lkZW50IGlzICdhcmd1bWVu
dHMnLCB0aGUgYmFzZS0+Z2V0UHJvcGVydHlTbG90KCkgbWF5IGNhdXNlIAorICAgICAgICAvLyBi
YXNlICh3aGljaCBtdXN0IGJlIGFuIEFjdGl2YXRpb25JbXAgaW4gc3VjaCB0aGlzIGNhc2UpIHRv
IGJlIHRvcm4KKyAgICAgICAgLy8gb2ZmIGZyb20gdGhlIGFjdGl2YXRpb24gc3RhY2ssIGluIHdo
aWNoIGNhc2Ugd2UgbmVlZCB0byBnZXQgaXQgYWdhaW4KKyAgICAgICAgLy8gZnJvbSB0aGUgU2Nv
cGVDaGFpbkl0ZXJhdG9yLgorICAgICAgICAKKyAgICAgICAgYmFzZSA9ICppdGVyOwogICAgICAg
ICBKU1ZhbHVlKiB2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KS0+dG9KU051
bWJlcihleGVjKTsKICAgICAgICAgYmFzZS0+cHV0KGV4ZWMsIG1faWRlbnQsIGpzTnVtYmVyKHYt
PnRvTnVtYmVyKGV4ZWMpIC0gMSkpOwogICAgICAgICByZXR1cm4gdjsKQEAgLTE3NTUsNiArMTc2
NywxMiBAQCBKU1ZhbHVlICpQcmVJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlCiAgIGRvIHsg
CiAgICAgYmFzZSA9ICppdGVyOwogICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
bV9pZGVudCwgc2xvdCkpIHsKKyAgICAgICAgLy8gSWYgbV9pZGVudCBpcyAnYXJndW1lbnRzJywg
dGhlIGJhc2UtPmdldFByb3BlcnR5U2xvdCgpIG1heSBjYXVzZSAKKyAgICAgICAgLy8gYmFzZSAo
d2hpY2ggbXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2ggdGhpcyBjYXNlKSB0byBiZSB0
b3JuCisgICAgICAgIC8vIG9mZiBmcm9tIHRoZSBhY3RpdmF0aW9uIHN0YWNrLCBpbiB3aGljaCBj
YXNlIHdlIG5lZWQgdG8gZ2V0IGl0IGFnYWluCisgICAgICAgIC8vIGZyb20gdGhlIFNjb3BlQ2hh
aW5JdGVyYXRvci4KKyAgICAgICAgCisgICAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgICAgSlNW
YWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAKICAgICAgICAg
ZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsKQEAgLTE4MDIsNiArMTgyMCwxMiBAQCBKU1Zh
bHVlICpQcmVEZWNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlCiAgIGRvIHsgCiAgICAgYmFzZSA9
ICppdGVyOwogICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xv
dCkpIHsKKyAgICAgICAgLy8gSWYgbV9pZGVudCBpcyAnYXJndW1lbnRzJywgdGhlIGJhc2UtPmdl
dFByb3BlcnR5U2xvdCgpIG1heSBjYXVzZSAKKyAgICAgICAgLy8gYmFzZSAod2hpY2ggbXVzdCBi
ZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2ggdGhpcyBjYXNlKSB0byBiZSB0b3JuCisgICAgICAg
IC8vIG9mZiBmcm9tIHRoZSBhY3RpdmF0aW9uIHN0YWNrLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQg
dG8gZ2V0IGl0IGFnYWluCisgICAgICAgIC8vIGZyb20gdGhlIFNjb3BlQ2hhaW5JdGVyYXRvci4K
KyAgICAgICAgCisgICAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgICAgSlNWYWx1ZSAqdiA9IHNs
b3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAKICAgICAgICAgZG91YmxlIG4gPSB2
LT50b051bWJlcihleGVjKTsKQEAgLTMyMjgsOCArMzI1MiwxNSBAQCBKU1ZhbHVlICpSZWFkTW9k
aWZ5UmVzb2x2ZU5vZGU6OmV2YWx1YXRlCiAgIEpTT2JqZWN0ICpiYXNlOwogICBkbyB7IAogICAg
IGJhc2UgPSAqaXRlcjsKLSAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRl
bnQsIHNsb3QpKQorICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwg
c2xvdCkpIHsKKyAgICAgIC8vIElmIG1faWRlbnQgaXMgJ2FyZ3VtZW50cycsIHRoZSBiYXNlLT5n
ZXRQcm9wZXJ0eVNsb3QoKSBtYXkgY2F1c2UgCisgICAgICAvLyBiYXNlICh3aGljaCBtdXN0IGJl
IGFuIEFjdGl2YXRpb25JbXAgaW4gc3VjaCB0aGlzIGNhc2UpIHRvIGJlIHRvcm4KKyAgICAgIC8v
IG9mZiBmcm9tIHRoZSBhY3RpdmF0aW9uIHN0YWNrLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8g
Z2V0IGl0IGFnYWluCisgICAgICAvLyBmcm9tIHRoZSBTY29wZUNoYWluSXRlcmF0b3IuCisgICAg
ICAKKyAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgIGdvdG8gZm91bmQ7CisgICAgfQogCiAgICAg
KytpdGVyOwogICB9IHdoaWxlIChpdGVyICE9IGVuZCk7CkBAIC0zMjY1LDggKzMyOTYsMTUgQEAg
SlNWYWx1ZSAqQXNzaWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZQogICBKU09iamVjdCAqYmFz
ZTsKICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7Ci0gICAgaWYgKGJhc2UtPmdldFByb3BlcnR5
U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkKKyAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAvLyBJZiBtX2lkZW50IGlzICdhcmd1bWVu
dHMnLCB0aGUgYmFzZS0+Z2V0UHJvcGVydHlTbG90KCkgbWF5IGNhdXNlIAorICAgICAgLy8gYmFz
ZSAod2hpY2ggbXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2ggdGhpcyBjYXNlKSB0byBi
ZSB0b3JuCisgICAgICAvLyBvZmYgZnJvbSB0aGUgYWN0aXZhdGlvbiBzdGFjaywgaW4gd2hpY2gg
Y2FzZSB3ZSBuZWVkIHRvIGdldCBpdCBhZ2FpbgorICAgICAgLy8gZnJvbSB0aGUgU2NvcGVDaGFp
bkl0ZXJhdG9yLgorICAgICAgCisgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICBnb3RvIGZvdW5k
OworICAgIH0KIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtMzk5
Nyw2ICs0MDM1LDcgQEAgSlNWYWx1ZSogV2l0aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlICpleAog
ICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgSlNPYmplY3QgKm8gPSB2LT50b09iamVjdChleGVjKTsK
ICAgS0pTX0NIRUNLRVhDRVBUSU9OCisgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVh
ck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgIGV4ZWMtPnB1c2hTY29wZShvKTsKICAgSlNWYWx1ZSog
dmFsdWUgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgIGV4ZWMtPnBvcFNjb3BlKCk7CkBA
IC00MTk1LDYgKzQyMzQsNyBAQCBKU1ZhbHVlKiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAq
ZXhlCiAgIGlmIChjYXRjaEJsb2NrICYmIGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cp
IHsKICAgICBKU09iamVjdCogb2JqID0gbmV3IEpTT2JqZWN0OwogICAgIG9iai0+cHV0KGV4ZWMs
IGV4Y2VwdGlvbklkZW50LCByZXN1bHQsIERvbnREZWxldGUpOworICAgIGV4ZWMtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgICAgZXhlYy0+cHVzaFNj
b3BlKG9iaik7CiAgICAgcmVzdWx0ID0gY2F0Y2hCbG9jay0+ZXhlY3V0ZShleGVjKTsKICAgICBl
eGVjLT5wb3BTY29wZSgpOwpAQCAtNDM1Nyw2ICs0Mzk3LDkgQEAgdm9pZCBGdW5jdGlvbkJvZHlO
b2RlOjpwcm9jZXNzRGVjbGFyYXRpbwogICAgICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKICAg
ICB9CiAKKyAgICBpZiAobV9mdW5jdGlvblN0YWNrLnNpemUoKSAhPSAwKQorICAgICAgZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKKwogICAgIExv
Y2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKS0+bG9jYWxT
dG9yYWdlKCk7CiAgICAgCiAgICAgLy8gV2UgY2FuJ3QganVzdCByZXNpemUgbG9jYWxTdG9yYWdl
IGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIHRlbXBvcmFyaWx5CkBAIC00NTY5LDYgKzQ2MTIsOCBA
QCB2b2lkIEZ1bmNFeHByTm9kZTo6YWRkUGFyYW1zKCkKIAogSlNWYWx1ZSAqRnVuY0V4cHJOb2Rl
OjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CisgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CisgIAogICBib29sIG5hbWVkID0gIWlkZW50
LmlzTnVsbCgpOwogICBKU09iamVjdCAqZnVuY3Rpb25TY29wZU9iamVjdCA9IDA7CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvb2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsMTggKzU4MCw2IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLQotLy8g
RklYTUU6IFB1dCB0aGlzIGZ1bmN0aW9uIGluIGEgc2VwYXJhdGUgZmlsZSBuYW1lZCBzb21ldGhp
bmcgbGlrZSBzY29wZV9jaGFpbl9tYXJrLmggLS0gY2FuJ3QgcHV0IGl0IGluIHNjb3BlX2NoYWlu
Lmggc2luY2UgaXQgZGVwZW5kcyBvbiBKU09iamVjdC4KLQotaW5saW5lIHZvaWQgU2NvcGVDaGFp
bjo6bWFyaygpCi17Ci0gICAgZm9yIChTY29wZUNoYWluTm9kZSAqbiA9IF9ub2RlOyBuOyBuID0g
bi0+bmV4dCkgewotICAgICAgICBKU09iamVjdCAqbyA9IG4tPm9iamVjdDsKLSAgICAgICAgaWYg
KCFvLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIG8tPm1hcmsoKTsKLSAgICB9Ci19Ci0KIGlubGlu
ZSB2b2lkIFNjb3BlQ2hhaW46OnJlbGVhc2UoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMg
b25seSBjYWxsZWQgYnkgZGVyZWYoKSwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9j
aGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oCShy
ZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2b2lk
IGNsZWFyKCkgeyBkZXJlZigpOyBfbm9kZSA9IDA7IH0KICAgICAgICAgdm9pZCBwdXNoKEpTT2Jq
ZWN0ICopOwogICAgICAgICB2b2lkIHB1c2goY29uc3QgU2NvcGVDaGFpbiAmKTsKKyAgICAgICAg
dm9pZCByZXBsYWNlKEpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcG9wKCk7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIG1hcmsoKTsKQEAgLTEyOSw2ICsxMzAsMTIgQEAgaW5saW5lIHZvaWQgU2Nv
cGVDaGFpbjo6cHVzaChKU09iamVjdCAqbwogICAgIF9ub2RlID0gbmV3IFNjb3BlQ2hhaW5Ob2Rl
KF9ub2RlLCBvKTsKIH0KIAoraW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cmVwbGFjZShKU09iamVj
dCogbykKK3sKKyAgICBBU1NFUlQobyk7CisgICAgX25vZGUtPm9iamVjdCA9IG87Cit9CisKIGlu
bGluZSB2b2lkIFNjb3BlQ2hhaW46OnBvcCgpCiB7CiAgICAgU2NvcGVDaGFpbk5vZGUgKm9sZE5v
ZGUgPSBfbm9kZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9tYXJrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluX21hcmsuaAkocmV2
aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9tYXJrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
IEFwcGxlIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJzY29wZV9jaGFpbi5oIgorI2lu
Y2x1ZGUgIkFjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKworbmFtZXNwYWNlIEtK
UyB7CisKKyAgICBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKKyAgICB7CisgICAgICAg
IGZvciAoU2NvcGVDaGFpbk5vZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsKKyAgICAg
ICAgICAgIEpTT2JqZWN0ICpvID0gbi0+b2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBBbiBBY3RpdmF0aW9uSW1wIHRoYXQgaXMgb24gdGhlIGFjdGl2YXRpb24gc3RhY2sgY2Fu
J3QgaGF2ZSB0aGUKKyAgICAgICAgICAgIC8vIEpTb2JqZWN0OjptYXJrKCkgbWV0aG9kIGNhbGxl
ZCBvbiBpdCwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW4KKyAgICAgICAgICAgIC8vIGVudHJ5
IGluIGEgR0MgbWFyayBiaXRtYXAsIHNvIHdlIGNoZWNrIGhlcmUgd2hldGhlciBpdCBpcyBvbiB0
aGUKKyAgICAgICAgICAgIC8vIHN0YWNrIGFuZCBkaXJlY3RseSBjYWxsIHRoZSBwb3J0aW9uIG9m
IHRoZSBtYXJraW5nIGNvZGUgdGhhdCBpcworICAgICAgICAgICAgLy8gc3RpbGwgcmVsZXZhbnQu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvLT5pc0FjdGl2YXRpb25PYmplY3QoKSAm
JiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obyktPmlzT25TdGFjaygpKQorICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihvKS0+bWFya0hlbHBlcigpOworICAg
ICAgICAgICAgZWxzZSBpZiAoIW8tPm1hcmtlZCgpKQorICAgICAgICAgICAgICAgIG8tPm1hcmso
KTsKKyAgICAgICAgfQorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBXZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjky
MTYpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDA4LTAxLTA2ICBDYW1lcm9uIFp3YXJpY2ggIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEg
bmV3IGZvcndhcmRpbmcgaGVhZGVyLCBiZWNhdXNlIEFjdGl2YXRpb24uaCBoYXMgYmVlbiBzZXBh
cmF0ZWQKKyAgICAgICAgZnJvbSBmdW5jdGlvbi5oCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVh
ZGVycy9ranMvQWN0aXZhdGlvbi5oOiBBZGRlZC4KKwogMjAwOC0wMS0wNiAgTmlrb2xhcyBaaW1t
ZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ci4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL0FjdGl2YXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BY3Rp
dmF0aW9uLmg+Cg==
</data>
<flag name="review"
          id="7984"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18327</attachid>
            <date>2008-01-08 07:09:28 -0800</date>
            <delta_ts>2008-01-08 22:04:26 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>24115</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9BY3RpdmF0aW9uSW1wLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb25JbXAuaAkocmV2aXNpb24gMCkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9BY3RpdmF0aW9uSW1wLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2
IEBACisvLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisvKgorICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNh
KQorICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIEtKU19BQ1RJVkFUSU9OSU1QX0gKKyNkZWZpbmUgS0pTX0FDVElWQVRJT05JTVBfSAor
CisjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2lu
Y2x1ZGUgIkV4ZWNTdGF0ZS5oIgorCisjZGVmaW5lIEtKU19BQ1RJVkFUSU9OX1NUQUNLX1NJWkUg
MzIKKworbmFtZXNwYWNlIEtKUyB7CisKKyAgICBjbGFzcyBTdGFja0FjdGl2YXRpb247CisgICAg
Y2xhc3MgRnVuY3Rpb25JbXA7CisgICAgY2xhc3MgQXJndW1lbnRzOworCisgICAgY2xhc3MgQWN0
aXZhdGlvbkltcCA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIFN0YWNrQWN0aXZhdGlvbjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OworICAgIHByaXZhdGU6CisgICAgICAgIHVzaW5nIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFi
bGVPYmplY3REYXRhOworCisgICAgICAgIHN0cnVjdCBBY3RpdmF0aW9uSW1wRGF0YSA6IHB1Ymxp
YyBKU1ZhcmlhYmxlT2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0RGF0YSB7CisgICAgICAgICAgICBB
Y3RpdmF0aW9uSW1wRGF0YSgpIDogb25TdGFjayh0cnVlKSB7IH0KKyAgICAgICAgICAgIEFjdGl2
YXRpb25JbXBEYXRhKGNvbnN0IEFjdGl2YXRpb25JbXBEYXRhJik7CisKKyAgICAgICAgICAgIEV4
ZWNTdGF0ZSogZXhlYzsKKyAgICAgICAgICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbjsKKyAgICAg
ICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzT2JqZWN0OworICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgb25TdGFjazsKKyAgICAgICAgfTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgQWN0aXZh
dGlvbkltcCgpIHsgfQorICAgICAgICBBY3RpdmF0aW9uSW1wKFN0YWNrQWN0aXZhdGlvbiogb2xk
U3RhY2tFbnRyeSk7CisKKyAgICAgICAgdmlydHVhbCB+QWN0aXZhdGlvbkltcCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghZCgpLT5vblN0YWNrKQorICAgICAgICAgICAgICAgIGRlbGV0
ZSBkKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGluaXQoRXhlY1N0YXRlKiBleGVjKTsK
KworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1
dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZh
bHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKworICAgICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBtYXJrKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGlvbk9i
amVjdCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICAgICAgYm9vbCBpc09uU3RhY2soKSB7
IHJldHVybiBkKCktPm9uU3RhY2s7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKKyAgICAgICAg
c3RhdGljIEpTVmFsdWUqIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpOworICAgICAgICB2b2lk
IGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqKTsKKyAgICAgICAgQWN0aXZhdGlvbklt
cERhdGEqIGQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wRGF0YSo+KEpTVmFy
aWFibGVPYmplY3Q6OmQpOyB9CisgICAgfTsKKworICAgIHN0cnVjdCBTdGFja0FjdGl2YXRpb24g
eworICAgICAgICBTdGFja0FjdGl2YXRpb24oKSB7IGFjdGl2YXRpb25TdG9yYWdlLkpTVmFyaWFi
bGVPYmplY3Q6OmQgPSAmYWN0aXZhdGlvbkRhdGFTdG9yYWdlOyB9CisgICAgICAgIFN0YWNrQWN0
aXZhdGlvbihjb25zdCBTdGFja0FjdGl2YXRpb24mKTsKKyAgICAgIAorICAgICAgICB+U3RhY2tB
Y3RpdmF0aW9uKCkgeyB9IAorICAgICAgCisgICAgICAgIEFjdGl2YXRpb25JbXAgYWN0aXZhdGlv
blN0b3JhZ2U7CisgICAgICAgIEFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBEYXRhIGFjdGl2
YXRpb25EYXRhU3RvcmFnZTsKKyAgICB9OworCisgICAgc3RydWN0IEFjdGl2YXRpb25TdGFja05v
ZGUgeworICAgICAgICBBY3RpdmF0aW9uU3RhY2tOb2RlKiBwcmV2OworICAgICAgICBTdGFja0Fj
dGl2YXRpb24gZGF0YVtLSlNfQUNUSVZBVElPTl9TVEFDS19TSVpFXTsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZp
c2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgogCiAjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJBY3RpdmF0aW9uSW1wLmgiCiAjaW5j
bHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInNjb3Bl
X2NoYWluX21hcmsuaCIKIAogbmFtZXNwYWNlIEtKUyB7CiAKQEAgLTEwNSwxNiArMTA3LDE4IEBA
IEV4ZWNTdGF0ZTo6RXhlY1N0YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG8KICAgICAsIG1fc3dpdGNo
RGVwdGgoMCkgCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKIHsKLSAgICBBY3RpdmF0
aW9uSW1wKiBhY3RpdmF0aW9uID0gbmV3IEFjdGl2YXRpb25JbXAodGhpcyk7Ci0gICAgbV9hY3Rp
dmF0aW9uID0gYWN0aXZhdGlvbjsKLSAgICBtX2xvY2FsU3RvcmFnZSA9ICZhY3RpdmF0aW9uLT5s
b2NhbFN0b3JhZ2UoKTsKLSAgICBtX3ZhcmlhYmxlT2JqZWN0ID0gYWN0aXZhdGlvbjsKLSAgICBt
X3Njb3BlQ2hhaW4ucHVzaChhY3RpdmF0aW9uKTsKKyAgICBtX2FjdGl2YXRpb24gPSBnbG9iYWxP
YmplY3QtPnB1c2hBY3RpdmF0aW9uKHRoaXMpOworICAgIG1fbG9jYWxTdG9yYWdlID0gJm1fYWN0
aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCk7CisgICAgbV92YXJpYWJsZU9iamVjdCA9IG1fYWN0aXZh
dGlvbjsKKyAgICBtX3Njb3BlQ2hhaW4ucHVzaChtX2FjdGl2YXRpb24pOwogICAgIGdsb2JhbE9i
amVjdC0+c2V0Q3VycmVudEV4ZWModGhpcyk7CiB9CiAKIEV4ZWNTdGF0ZTo6fkV4ZWNTdGF0ZSgp
CiB7CisgICAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYmIHN0YXRpY19jYXN0PEFj
dGl2YXRpb25JbXAqPihtX2FjdGl2YXRpb24pLT5pc09uU3RhY2soKSkKKyAgICAgICAgbV9nbG9i
YWxPYmplY3QtPnBvcEFjdGl2YXRpb24oKTsKKyAgICAKICAgICBtX2dsb2JhbE9iamVjdC0+c2V0
Q3VycmVudEV4ZWMobV9zYXZlZEV4ZWMpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
RXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5o
CShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBuYW1lc3BhY2UgS0pTICB7CiAgICAgICAgIGJv
b2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISFtX2V4Y2VwdGlvbjsgfQogICAgICAg
ICAKICAgICAgICAgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVDaGFpbjsgfQorICAgICAgICB2b2lkIHNldFNjb3BlQ2hhaW5Ub3AoSlNPYmplY3Qq
IG8pIHsgbV9zY29wZUNoYWluLnNldChvKTsgfQogICAgICAgICAKICAgICAgICAgSlNWYXJpYWJs
ZU9iamVjdCogdmFyaWFibGVPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlT2JqZWN0
OyB9CiAgICAgICAgIHZvaWQgc2V0VmFyaWFibGVPYmplY3QoSlNWYXJpYWJsZU9iamVjdCogdikg
eyBtX3ZhcmlhYmxlT2JqZWN0ID0gdjsgfQpAQCAtODcsNiArODgsNyBAQCBuYW1lc3BhY2UgS0pT
ICB7CiAgICAgICAgIEV4ZWNTdGF0ZSogc2F2ZWRFeGVjKCkgeyByZXR1cm4gbV9zYXZlZEV4ZWM7
IH0KICAgICAgICAgCiAgICAgICAgIEFjdGl2YXRpb25JbXAqIGFjdGl2YXRpb25PYmplY3QoKSB7
IHJldHVybiBtX2FjdGl2YXRpb247IH0KKyAgICAgICAgdm9pZCBzZXRBY3RpdmF0aW9uT2JqZWN0
KEFjdGl2YXRpb25JbXAqIGEpIHsgbV9hY3RpdmF0aW9uID0gYTsgfQogICAgICAgICBDb2RlVHlw
ZSBjb2RlVHlwZSgpIHsgcmV0dXJuIG1fY29kZVR5cGU7IH0KICAgICAgICAgU2NvcGVOb2RlKiBz
Y29wZU5vZGUoKSB7IHJldHVybiBtX3Njb3BlTm9kZTsgfQogICAgICAgICBGdW5jdGlvbkltcCog
ZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CkBAIC0xMTIsNiArMTE0LDcg
QEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAgICBjb25zdCBMaXN0JiBlbXB0eUxpc3QoKSBjb25z
dCB7IHJldHVybiAqbV9lbXB0eUxpc3Q7IH0KIAogICAgICAgICBMb2NhbFN0b3JhZ2UmIGxvY2Fs
U3RvcmFnZSgpIHsgcmV0dXJuICptX2xvY2FsU3RvcmFnZTsgfQorICAgICAgICB2b2lkIHNldExv
Y2FsU3RvcmFnZShMb2NhbFN0b3JhZ2UqIHMpIHsgbV9sb2NhbFN0b3JhZ2UgPSBzOyB9CiAKICAg
ICAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdmFsaWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBleGVjdXRl
KCkuCiAgICAgICAgIENvbXBsVHlwZSBjb21wbGV0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29tcGxldGlvblR5cGU7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNw
cAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKIAogI2luY2x1ZGUgIlNhdmVkQnVpbHRpbnMuaCIKKyNpbmNsdWRlICJBY3RpdmF0
aW9uSW1wLmgiCiAjaW5jbHVkZSAiYXJyYXlfb2JqZWN0LmgiCiAjaW5jbHVkZSAiYm9vbF9vYmpl
Y3QuaCIKICNpbmNsdWRlICJkYXRlX29iamVjdC5oIgpAQCAtMjAwLDYgKzIwMSw5IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9ICZkKCktPmdsb2JhbEV4ZWM7CiAKKyAgICBkKCktPmFjdGl2YXRpb25zID0gbmV3IEFjdGl2
YXRpb25TdGFja05vZGU7CisgICAgZCgpLT5hY3RpdmF0aW9uQ291bnQgPSAwOworCiAgICAgLy8g
UHJvdG90eXBlcwogICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcgRnVuY3Rpb25Qcm90
b3R5cGUoZXhlYyk7CiAgICAgZCgpLT5vYmplY3RQcm90b3R5cGUgPSBuZXcgT2JqZWN0UHJvdG90
eXBlKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwpAQCAtNDk0LDQgKzQ5OCw1MyBAQCBF
eGVjU3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKICAgICByZXR1cm4gJmQoKS0+
Z2xvYmFsRXhlYzsKIH0KIAorQWN0aXZhdGlvbkltcCogSlNHbG9iYWxPYmplY3Q6OnB1c2hBY3Rp
dmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZCgpLT5hY3RpdmF0aW9uQ291bnQg
PT0gS0pTX0FDVElWQVRJT05fU1RBQ0tfU0laRSkgeworICAgICAgICBBY3RpdmF0aW9uU3RhY2tO
b2RlKiBuZXdOb2RlID0gbmV3IEFjdGl2YXRpb25TdGFja05vZGU7CisgICAgICAgIG5ld05vZGUt
PnByZXYgPSBkKCktPmFjdGl2YXRpb25zOworICAgICAgICBkKCktPmFjdGl2YXRpb25zID0gbmV3
Tm9kZTsKKyAgICAgICAgZCgpLT5hY3RpdmF0aW9uQ291bnQgPSAwOworICAgICAgfQorICAgIAor
ICAgIFN0YWNrQWN0aXZhdGlvbiogc3RhY2tFbnRyeSA9ICZkKCktPmFjdGl2YXRpb25zLT5kYXRh
W2QoKS0+YWN0aXZhdGlvbkNvdW50KytdOworICAgIHN0YWNrRW50cnktPmFjdGl2YXRpb25TdG9y
YWdlLmluaXQoZXhlYyk7CisgICAgCisgICAgcmV0dXJuICYoc3RhY2tFbnRyeS0+YWN0aXZhdGlv
blN0b3JhZ2UpOworfQorCit2b2lkIEpTR2xvYmFsT2JqZWN0Ojpwb3BBY3RpdmF0aW9uKCkKK3sK
KyAgICBpZiAoIWQoKS0+YWN0aXZhdGlvbkNvdW50KSB7CisgICAgICAgIEFjdGl2YXRpb25TdGFj
a05vZGUqIHByZXYgPSBkKCktPmFjdGl2YXRpb25zLT5wcmV2OworICAgICAgICBkZWxldGUgZCgp
LT5hY3RpdmF0aW9uczsKKyAgICAgICAgZCgpLT5hY3RpdmF0aW9ucyA9IHByZXY7CisgICAgICAg
IGQoKS0+YWN0aXZhdGlvbkNvdW50ID0gS0pTX0FDVElWQVRJT05fU1RBQ0tfU0laRTsKKyAgICB9
CisgIAorICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50LS07CisgICAgZCgpLT5hY3RpdmF0aW9ucy0+
ZGF0YVtkKCktPmFjdGl2YXRpb25Db3VudF0uYWN0aXZhdGlvbkRhdGFTdG9yYWdlLmxvY2FsU3Rv
cmFnZS5zaHJpbmsoMCk7Cit9CisKK3ZvaWQgSlNHbG9iYWxPYmplY3Q6OnRlYXJPZmZBY3RpdmF0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUgJiYgc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KGV4ZWMtPmFjdGl2YXRpb25P
YmplY3QoKSktPmlzT25TdGFjaygpKSB7CisgICAgICAgIGlmICghZCgpLT5hY3RpdmF0aW9uQ291
bnQpIHsKKyAgICAgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIHByZXYgPSBkKCktPmFjdGl2
YXRpb25zLT5wcmV2OworICAgICAgICAgICAgZGVsZXRlIGQoKS0+YWN0aXZhdGlvbnM7CisgICAg
ICAgICAgICBkKCktPmFjdGl2YXRpb25zID0gcHJldjsKKyAgICAgICAgICAgIGQoKS0+YWN0aXZh
dGlvbkNvdW50ID0gS0pTX0FDVElWQVRJT05fU1RBQ0tfU0laRTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQWN0aXZhdGlvbkltcCogbmV3QWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9u
SW1wKCZkKCktPmFjdGl2YXRpb25zLT5kYXRhW2QoKS0+YWN0aXZhdGlvbkNvdW50IC0gMV0pOwor
ICAgICAgICAKKyAgICAgICAgcG9wQWN0aXZhdGlvbigpOworICAgICAgICAKKyAgICAgICAgZXhl
Yy0+c2V0QWN0aXZhdGlvbk9iamVjdChuZXdBY3RpdmF0aW9uKTsKKyAgICAgICAgZXhlYy0+c2V0
VmFyaWFibGVPYmplY3QobmV3QWN0aXZhdGlvbik7CisgICAgICAgIGV4ZWMtPnNldExvY2FsU3Rv
cmFnZSgmKG5ld0FjdGl2YXRpb24tPmxvY2FsU3RvcmFnZSgpKSk7CisgICAgICAgIGV4ZWMtPnNl
dFNjb3BlQ2hhaW5Ub3AobmV3QWN0aXZhdGlvbik7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFj
ZSBLSlMKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyOTA3
OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCisgICAgY2xhc3MgQWN0aXZh
dGlvbkltcDsKKyAgICBjbGFzcyBBY3RpdmF0aW9uU3RhY2tOb2RlOwogICAgIGNsYXNzIEFycmF5
T2JqZWN0SW1wOwogICAgIGNsYXNzIEFycmF5UHJvdG90eXBlOwogICAgIGNsYXNzIEJvb2xlYW5P
YmplY3RJbXA7CkBAIC0xMjgsNiArMTMwLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAg
ICBOYXRpdmVFcnJvclByb3RvdHlwZSogVVJJRXJyb3JQcm90b3R5cGU7CiAKICAgICAgICAgICAg
IFN5bWJvbFRhYmxlIGlubGluZVN5bWJvbFRhYmxlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBBY3RpdmF0aW9uU3RhY2tOb2RlKiBhY3RpdmF0aW9uczsKKyAgICAgICAgICAgIGludCBhY3Rp
dmF0aW9uQ291bnQ7CiAgICAgICAgIH07CiAKICAgICBwdWJsaWM6CkBAIC0yMjYsNiArMjMxLDEw
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0
U2NyaXB0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NBY2Nlc3NGcm9tKGNvbnN0IEpTR2xvYmFsT2JqZWN0KikgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgICAgICAKKyAgICAgICAgQWN0aXZhdGlvbkltcCogcHVzaEFjdGl2YXRpb24oRXhl
Y1N0YXRlKiBleGVjKTsKKyAgICAgICAgdm9pZCBwb3BBY3RpdmF0aW9uKCk7CisgICAgICAgIHZv
aWQgdGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgaW5pdCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTVmFyaWFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYXJpYWJsZU9iamVj
dC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE2ICs1NiwzMCBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZWlyIG93biBzaXplIChzaW5jZSB0aGVy
ZSdzIGEgaGFyZCBsaW1pdCBvbiB0aGUKICAgICAgICAgLy8gc2l6ZSBvZiBhIEpTQ2VsbCkuCiAg
ICAgICAgIHN0cnVjdCBKU1ZhcmlhYmxlT2JqZWN0RGF0YSB7CisgICAgICAgICAgICBKU1Zhcmlh
YmxlT2JqZWN0RGF0YSgpIHsgfQorICAgICAgICAKICAgICAgICAgICAgIEpTVmFyaWFibGVPYmpl
Y3REYXRhKFN5bWJvbFRhYmxlKiBzKQogICAgICAgICAgICAgICAgIDogc3ltYm9sVGFibGUocykg
Ly8gU3ViY2xhc3Mgb3ducyB0aGlzIHBvaW50ZXIuCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIEpTVmFyaWFibGVPYmplY3REYXRhKGNvbnN0IEpTVmFyaWFibGVP
YmplY3REYXRhJiBvbGQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9jYWxTdG9y
YWdlLnJlc2VydmVDYXBhY2l0eShvbGQubG9jYWxTdG9yYWdlLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChMb2NhbFN0b3JhZ2U6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBvbGQubG9jYWxTdG9yYWdlLmJlZ2luKCk7IGl0ZXIgIT0gb2xkLmxvY2FsU3RvcmFn
ZS5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuYXBwZW5k
KCppdGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9
IG9sZC5zeW1ib2xUYWJsZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgTG9jYWxTdG9y
YWdlIGxvY2FsU3RvcmFnZTsgLy8gU3RvcmFnZSBmb3IgdmFyaWFibGVzIGluIHRoZSBzeW1ib2wg
dGFibGUuCiAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGU7IC8vIE1hcHMgbmFt
ZSAtPiBpbmRleCBpbiBsb2NhbFN0b3JhZ2UuCiAKICAgICAgICAgfTsKIAorICAgICAgICBKU1Zh
cmlhYmxlT2JqZWN0KCkgeyB9CisKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdChKU1ZhcmlhYmxl
T2JqZWN0RGF0YSogZGF0YSkKICAgICAgICAgICAgIDogZChkYXRhKSAvLyBTdWJjbGFzcyBvd25z
IHRoaXMgcG9pbnRlci4KICAgICAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJmdW5jdGlvbi5oIgogCisjaW5jbHVkZSAiQWN0aXZhdGlvbkltcC5oIgogI2luY2x1ZGUgIkV4
ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCkBAIC04Niw4ICs4NywxMSBAQCBKU1ZhbHVlKiBGdW5jdGlvbkltcDo6YXJndW1lbnRzR2V0
dGVyKEV4CiAgIEZ1bmN0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25JbXAq
PihzbG90LnNsb3RCYXNlKCkpOwogICBFeGVjU3RhdGUqIGUgPSBleGVjOwogICB3aGlsZSAoZSkg
ewotICAgIGlmIChlLT5mdW5jdGlvbigpID09IHRoaXNPYmopCisgICAgaWYgKGUtPmZ1bmN0aW9u
KCkgPT0gdGhpc09iaikgeworICAgICAgZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2Zm
QWN0aXZhdGlvbihlKTsKICAgICAgIHJldHVybiBlLT5hY3RpdmF0aW9uT2JqZWN0KCktPmdldChl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAgICAKICAgICBlID0gZS0+Y2FsbGluZ0V4ZWNT
dGF0ZSgpOwogICB9CiAgIHJldHVybiBqc051bGwoKTsKQEAgLTM0MCw2ICszNDQsMjAgQEAgYm9v
bCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZQogCiBjb25zdCBDbGFzc0luZm8g
QWN0aXZhdGlvbkltcDo6aW5mbyA9IHsgIkFjdGl2YXRpb24iLCAwLCAwIH07CiAKK0FjdGl2YXRp
b25JbXA6OkFjdGl2YXRpb25JbXAoU3RhY2tBY3RpdmF0aW9uKiBvbGRTdGFja0VudHJ5KQorewor
ICBKU1ZhcmlhYmxlT2JqZWN0OjpkID0gbmV3IEFjdGl2YXRpb25JbXBEYXRhKG9sZFN0YWNrRW50
cnktPmFjdGl2YXRpb25EYXRhU3RvcmFnZSk7Cit9CisgIAordm9pZCBBY3RpdmF0aW9uSW1wOjpp
bml0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBkKCktPnN5bWJvbFRhYmxlID0gJmV4ZWMtPmZ1
bmN0aW9uKCktPmJvZHktPnN5bWJvbFRhYmxlKCk7CisgICAgZCgpLT5leGVjID0gZXhlYzsKKyAg
ICBkKCktPmZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKKyAgICBkKCktPmFyZ3VtZW50c09i
amVjdCA9IDA7CisgICAgZCgpLT5vblN0YWNrID0gdHJ1ZTsKK30KKyAgCiBKU1ZhbHVlKiBBY3Rp
dmF0aW9uSW1wOjphcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgIEFjdGl2YXRp
b25JbXAqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oc2xvdC5zbG90QmFz
ZSgpKTsKQEAgLTM2Nyw2ICszODUsMTggQEAgYm9vbCBBY3RpdmF0aW9uSW1wOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoRQogCiAgICAgLy8gT25seSByZXR1cm4gdGhlIGJ1aWx0LWluIGFyZ3VtZW50cyBv
YmplY3QgaWYgaXQgd2Fzbid0IG92ZXJyaWRkZW4gYWJvdmUuCiAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CisgICAgICAgIEV4ZWNTdGF0
ZSogZSA9IGV4ZWM7CisgICAgICAgIHdoaWxlIChlKSB7CisgICAgICAgICAgICBpZiAoZS0+ZnVu
Y3Rpb24oKSA9PSBkKCktPmZ1bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgZS0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihlKTsKKyAgICAgICAgICAgICAgICBBY3Rp
dmF0aW9uSW1wKiBuZXdBY3RpdmF0aW9uID0gZS0+YWN0aXZhdGlvbk9iamVjdCgpOworICAgICAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKG5ld0FjdGl2YXRpb24sIG5ld0FjdGl2YXRpb24tPmdl
dEFyZ3VtZW50c0dldHRlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZSA9IGUtPmNhbGxpbmdFeGVjU3RhdGUoKTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgZ2V0QXJndW1lbnRz
R2V0dGVyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00MDAsMTEgKzQzMCwy
MSBAQCB2b2lkIEFjdGl2YXRpb25JbXA6OnB1dChFeGVjU3RhdGUqLCBjb25zCiAKIHZvaWQgQWN0
aXZhdGlvbkltcDo6bWFyaygpCiB7Ci0gICAgSlNWYXJpYWJsZU9iamVjdDo6bWFyaygpOworICAg
IGlmICghaXNPblN0YWNrKCkpCisgICAgICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgCisgICAg
c2l6ZV90IHNpemUgPSBkKCktPmxvY2FsU3RvcmFnZS5zaXplKCk7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBk
KCktPmxvY2FsU3RvcmFnZVtpXS52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsdWUt
Pm1hcmtlZCgpKQorICAgICAgICAgICAgdmFsdWUtPm1hcmsoKTsKKyAgICB9CiAgICAgCiAgICAg
aWYgKCFkKCktPmZ1bmN0aW9uLT5tYXJrZWQoKSkKICAgICAgICAgZCgpLT5mdW5jdGlvbi0+bWFy
aygpOwotCisgICAgCiAgICAgaWYgKGQoKS0+YXJndW1lbnRzT2JqZWN0ICYmICFkKCktPmFyZ3Vt
ZW50c09iamVjdC0+bWFya2VkKCkpCiAgICAgICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJr
KCk7CiB9CkBAIC00MTcsNiArNDU3LDE1IEBAIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJn
dW1lbnRzT2JqZWMKICAgICBkKCktPmFyZ3VtZW50c09iamVjdCA9IG5ldyBBcmd1bWVudHMoZXhl
YywgZCgpLT5leGVjLT5mdW5jdGlvbigpLCAqZCgpLT5leGVjLT5hcmd1bWVudHMoKSwgdGhpcyk7
CiB9CiAKK0FjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25JbXBEYXRhOjpBY3RpdmF0aW9uSW1wRGF0
YShjb25zdCBBY3RpdmF0aW9uSW1wRGF0YSYgb2xkKQorICA6IEpTVmFyaWFibGVPYmplY3REYXRh
KG9sZCkKK3sKKyAgICBleGVjID0gb2xkLmV4ZWM7CisgICAgZnVuY3Rpb24gPSBvbGQuZnVuY3Rp
b247CisgICAgYXJndW1lbnRzT2JqZWN0ID0gb2xkLmFyZ3VtZW50c09iamVjdDsKKyAgICBvblN0
YWNrID0gZmFsc2U7Cit9CisgIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEds
b2JhbEZ1bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC02OTYs
NiArNzQ1LDkgQEAgSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAg
ICAgICBib29sIHN3aXRjaEdsb2JhbCA9IHRoaXNPYmogJiYgdGhpc09iaiAhPSBleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCkgJiYgdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKTsKIAogICAgICAg
ICAvLyBlbnRlciBhIG5ldyBleGVjdXRpb24gY29udGV4dAorICAgICAgICBpZiAoIXN3aXRjaEds
b2JhbCkKKyAgICAgICAgICAgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFj
dGl2YXRpb24oZXhlYyk7CisgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3dpdGNoR2xvYmFsID8gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlz
T2JqKSA6IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKICAgICAgICAgRXhlY1N0YXRlIG5l
d0V4ZWMoZ2xvYmFsT2JqZWN0LCBldmFsTm9kZS5nZXQoKSwgZXhlYyk7CiAgICAgICAgICAgCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uaAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvZnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9k
ZTsKICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CisgIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owog
CiAgIGNsYXNzIEludGVybmFsRnVuY3Rpb25JbXAgOiBwdWJsaWMgSlNPYmplY3QgewogICBwdWJs
aWM6CkBAIC0xMzYsNTQgKzEzNyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEFjdGl2YXRpb25J
bXAqIF9hY3RpdmF0aW9uT2JqZWN0OwogICAgIG11dGFibGUgSW5kZXhUb05hbWVNYXAgaW5kZXhU
b05hbWVNYXA7CiAgIH07Ci0KLSAgY2xhc3MgQWN0aXZhdGlvbkltcCA6IHB1YmxpYyBKU1Zhcmlh
YmxlT2JqZWN0IHsKLSAgcHJpdmF0ZToKLSAgICB1c2luZyBKU1ZhcmlhYmxlT2JqZWN0OjpKU1Zh
cmlhYmxlT2JqZWN0RGF0YTsKLQotICAgIHN0cnVjdCBBY3RpdmF0aW9uSW1wRGF0YSA6IHB1Ymxp
YyBKU1ZhcmlhYmxlT2JqZWN0RGF0YSB7Ci0gICAgICAgIEFjdGl2YXRpb25JbXBEYXRhKEV4ZWNT
dGF0ZSogZSkKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERhdGEoJmUtPmZ1bmN0aW9u
KCktPmJvZHktPnN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICAsIGV4ZWMoZSkKLSAgICAgICAg
ICAgICwgZnVuY3Rpb24oZS0+ZnVuY3Rpb24oKSkgLy8gU3RvcmUgdGhpcyBwb2ludGVyIGZvciBt
YXJraW5nLCB0byBrZWVwIG91ciBzeW1ib2wgdGFibGUgLyBzY29wZSBhbGl2ZSBhZnRlciBleGVj
IGhhcyBnb25lIG91dCBvZiBzY29wZS4KLSAgICAgICAgICAgICwgYXJndW1lbnRzT2JqZWN0KDAp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYzsKLSAgICAg
ICAgRnVuY3Rpb25JbXAqIGZ1bmN0aW9uOwotICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50c09i
amVjdDsKLSAgICB9OwotCi0gIHB1YmxpYzoKLSAgICBBY3RpdmF0aW9uSW1wKEV4ZWNTdGF0ZSog
ZXhlYykKLSAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KG5ldyBBY3RpdmF0aW9uSW1wRGF0YShl
eGVjKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QWN0aXZhdGlvbkltcCgpCi0gICAg
ewotICAgICAgICBkZWxldGUgZCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLQot
ICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0aW9u
T2JqZWN0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIHByaXZhdGU6Ci0gICAgc3RhdGljIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dldHRlcigpOwotICAgIHN0YXRpYyBK
U1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAgICB2b2lkIGNyZWF0ZUFyZ3Vt
ZW50c09iamVjdChFeGVjU3RhdGUqKTsKLSAgICBBY3RpdmF0aW9uSW1wRGF0YSogZCgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXBEYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7
IH0KLSAgfTsKLQorICAKICAgY2xhc3MgR2xvYmFsRnVuY0ltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAgIEdsb2JhbEZ1bmNJbXAoRXhlY1N0YXRlKiwgRnVu
Y3Rpb25Qcm90b3R5cGUqLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tq
cy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODUsNiArMTI4NSw3IEBAIEpTVmFsdWUg
KlBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXgKICAgZG8geyAKICAgICBiYXNlID0gKml0
ZXI7CiAgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkg
eworICAgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZh
bHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwogICAgICAgICBiYXNl
LT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgKyAxKSk7CiAg
ICAgICAgIHJldHVybiB2OwpAQCAtMTM0Miw2ICsxMzQzLDcgQEAgSlNWYWx1ZSAqUG9zdERlY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZShFeAogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBp
ZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAg
IGJhc2UgPSAqaXRlcjsKICAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywg
YmFzZSwgbV9pZGVudCktPnRvSlNOdW1iZXIoZXhlYyk7CiAgICAgICAgIGJhc2UtPnB1dChleGVj
LCBtX2lkZW50LCBqc051bWJlcih2LT50b051bWJlcihleGVjKSAtIDEpKTsKICAgICAgICAgcmV0
dXJuIHY7CkBAIC0xNzU1LDYgKzE3NTcsNyBAQCBKU1ZhbHVlICpQcmVJbmNSZXNvbHZlTm9kZTo6
ZXZhbHVhdGUoRXhlCiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwogICAgIGlmIChiYXNlLT5n
ZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAgICAgYmFzZSA9ICpp
dGVyOwogICAgICAgICBKU1ZhbHVlICp2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lk
ZW50KTsKIAogICAgICAgICBkb3VibGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtMTgwMiw2
ICsxODA1LDcgQEAgSlNWYWx1ZSAqUHJlRGVjUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZQogICBk
byB7IAogICAgIGJhc2UgPSAqaXRlcjsKICAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgICAgSlNW
YWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCk7CiAKICAgICAgICAg
ZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsKQEAgLTMyMjgsOCArMzIzMiwxMCBAQCBKU1Zh
bHVlICpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmV2YWx1YXRlCiAgIEpTT2JqZWN0ICpiYXNlOwog
ICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKLSAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIG1faWRlbnQsIHNsb3QpKQorICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAgIGJhc2UgPSAqaXRlcjsKICAgICAgIGdvdG8gZm91
bmQ7CisgICAgfQogCiAgICAgKytpdGVyOwogICB9IHdoaWxlIChpdGVyICE9IGVuZCk7CkBAIC0z
MjY1LDggKzMyNzEsMTAgQEAgSlNWYWx1ZSAqQXNzaWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4
ZQogICBKU09iamVjdCAqYmFzZTsKICAgZG8geyAKICAgICBiYXNlID0gKml0ZXI7Ci0gICAgaWYg
KGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkKKyAgICBpZiAoYmFz
ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICBiYXNlID0g
Kml0ZXI7CiAgICAgICBnb3RvIGZvdW5kOworICAgIH0KIAogICAgICsraXRlcjsKICAgfSB3aGls
ZSAoaXRlciAhPSBlbmQpOwpAQCAtMzk5Nyw2ICs0MDA1LDcgQEAgSlNWYWx1ZSogV2l0aE5vZGU6
OmV4ZWN1dGUoRXhlY1N0YXRlICpleAogICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgSlNPYmplY3Qg
Km8gPSB2LT50b09iamVjdChleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCisgIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgIGV4ZWMtPnB1
c2hTY29wZShvKTsKICAgSlNWYWx1ZSogdmFsdWUgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7
CiAgIGV4ZWMtPnBvcFNjb3BlKCk7CkBAIC00MTk1LDYgKzQyMDQsNyBAQCBKU1ZhbHVlKiBUcnlO
b2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlCiAgIGlmIChjYXRjaEJsb2NrICYmIGV4ZWMtPmNv
bXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKICAgICBKU09iamVjdCogb2JqID0gbmV3IEpTT2Jq
ZWN0OwogICAgIG9iai0+cHV0KGV4ZWMsIGV4Y2VwdGlvbklkZW50LCByZXN1bHQsIERvbnREZWxl
dGUpOworICAgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24o
ZXhlYyk7CiAgICAgZXhlYy0+cHVzaFNjb3BlKG9iaik7CiAgICAgcmVzdWx0ID0gY2F0Y2hCbG9j
ay0+ZXhlY3V0ZShleGVjKTsKICAgICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDM1Nyw2ICs0MzY3
LDkgQEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpbwogICAgICAgICBt
X2luaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAobV9mdW5jdGlvblN0YWNrLnNp
emUoKSAhPSAwKQorICAgICAgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0
aXZhdGlvbihleGVjKTsKKwogICAgIExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlID0gZXhlYy0+
dmFyaWFibGVPYmplY3QoKS0+bG9jYWxTdG9yYWdlKCk7CiAgICAgCiAgICAgLy8gV2UgY2FuJ3Qg
anVzdCByZXNpemUgbG9jYWxTdG9yYWdlIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIHRlbXBvcmFy
aWx5CkBAIC00NTY5LDYgKzQ1ODIsOCBAQCB2b2lkIEZ1bmNFeHByTm9kZTo6YWRkUGFyYW1zKCkK
IAogSlNWYWx1ZSAqRnVuY0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7Cisg
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7Cisg
IAogICBib29sIG5hbWVkID0gIWlkZW50LmlzTnVsbCgpOwogICBKU09iamVjdCAqZnVuY3Rpb25T
Y29wZU9iamVjdCA9IDA7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsMTgg
KzU4MCw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLQotLy8gRklYTUU6IFB1dCB0aGlzIGZ1bmN0aW9uIGluIGEgc2Vw
YXJhdGUgZmlsZSBuYW1lZCBzb21ldGhpbmcgbGlrZSBzY29wZV9jaGFpbl9tYXJrLmggLS0gY2Fu
J3QgcHV0IGl0IGluIHNjb3BlX2NoYWluLmggc2luY2UgaXQgZGVwZW5kcyBvbiBKU09iamVjdC4K
LQotaW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6bWFyaygpCi17Ci0gICAgZm9yIChTY29wZUNoYWlu
Tm9kZSAqbiA9IF9ub2RlOyBuOyBuID0gbi0+bmV4dCkgewotICAgICAgICBKU09iamVjdCAqbyA9
IG4tPm9iamVjdDsKLSAgICAgICAgaWYgKCFvLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIG8tPm1h
cmsoKTsKLSAgICB9Ci19Ci0KIGlubGluZSB2b2lkIFNjb3BlQ2hhaW46OnJlbGVhc2UoKQogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgYnkgZGVyZWYoKSwKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9zY29wZV9jaGFpbi5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9zY29wZV9jaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICB2b2lkIGNsZWFyKCkgeyBkZXJlZigpOyBfbm9kZSA9IDA7IH0K
ICAgICAgICAgdm9pZCBwdXNoKEpTT2JqZWN0ICopOwogICAgICAgICB2b2lkIHB1c2goY29uc3Qg
U2NvcGVDaGFpbiAmKTsKKyAgICAgICAgdm9pZCBzZXQoSlNPYmplY3QqKTsKICAgICAgICAgdm9p
ZCBwb3AoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgbWFyaygpOwpAQCAtMTI5LDYgKzEzMCwx
MiBAQCBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjpwdXNoKEpTT2JqZWN0ICpvCiAgICAgX25vZGUg
PSBuZXcgU2NvcGVDaGFpbk5vZGUoX25vZGUsIG8pOwogfQogCitpbmxpbmUgdm9pZCBTY29wZUNo
YWluOjpzZXQoSlNPYmplY3QqIG8pCit7CisgICAgQVNTRVJUKG8pOworICAgIF9ub2RlLT5vYmpl
Y3QgPSBvOworfQorCiBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjpwb3AoKQogewogICAgIFNjb3Bl
Q2hhaW5Ob2RlICpvbGROb2RlID0gX25vZGU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc2Nv
cGVfY2hhaW5fbWFyay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9j
aGFpbl9tYXJrLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc2NvcGVfY2hh
aW5fbWFyay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2IEFwcGxlIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJzY29wZV9jaGFpbi5oIgor
I2luY2x1ZGUgIkFjdGl2YXRpb25JbXAuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKworbmFtZXNw
YWNlIEtKUyB7CisKKyAgICBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKKyAgICB7Cisg
ICAgICAgIGZvciAoU2NvcGVDaGFpbk5vZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsK
KyAgICAgICAgICAgIEpTT2JqZWN0ICpvID0gbi0+b2JqZWN0OworICAgICAgICAgICAgaWYgKChv
LT5pc0FjdGl2YXRpb25PYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obykt
PmlzT25TdGFjaygpKSB8fCAhby0+bWFya2VkKCkpCisgICAgICAgICAgICAgICAgby0+bWFyaygp
OworICAgICAgICB9CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IFdlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMva2pzL0FjdGl2YXRpb25JbXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uSW1wLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uSW1wLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BY3RpdmF0aW9uSW1w
Lmg+Cg==
</data>
<flag name="review"
          id="7996"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18344</attachid>
            <date>2008-01-08 22:04:26 -0800</date>
            <delta_ts>2008-01-09 00:51:31 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>35427</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MjE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMDgtMDEtMDYgIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3B0aW1pemVkIEFjdGl2YXRpb25JbXAgYWxsb2Nh
dGlvbiwgc28gdGhhdCBhY3RpdmF0aW9uIHJlY29yZHMgYXJlIG5vdworICAgICAgICBmaXJzdCBh
bGxvY2F0ZWQgb24gYW4gZXhwbGljaXRseSBtYW5hZ2VkIHN0YWNrIGFuZCBvbmx5IGhlYXAgYWxs
b2NhdGVkCisgICAgICAgIHdoZW4gbmVjZXNzYXJ5LiBSb3VnaGx5IGEgNSUgaW1wcm92ZW1lbnQg
b24gU3VuU3BpZGVyLCBhbmQgYSBsYXJnZXIKKyAgICAgICAgaW1wcm92ZW1lbnQgb24gYmVuY2ht
YXJrcyB0aGF0IHVzZSBtb3JlIGZ1bmN0aW9uIGNhbGxzLgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBranMvQWN0aXZhdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRhdGE6
OkFjdGl2YXRpb25EYXRhKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6QWN0aXZhdGlv
bkltcCk6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OmNsYXNzSW5mbyk6CisgICAgICAg
IChLSlM6OkFjdGl2YXRpb25JbXA6OmlzQWN0aXZhdGlvbk9iamVjdCk6CisgICAgICAgIChLSlM6
OkFjdGl2YXRpb25JbXA6OmlzT25TdGFjayk6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6
OmQpOgorICAgICAgICAoS0pTOjpTdGFja0FjdGl2YXRpb246OlN0YWNrQWN0aXZhdGlvbik6Cisg
ICAgICAgICoga2pzL0V4ZWNTdGF0ZS5jcHA6CisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6RXhl
Y1N0YXRlKToKKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjp+RXhlY1N0YXRlKToKKyAgICAgICAg
KiBranMvRXhlY1N0YXRlLmg6CisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6cmVwbGFjZVNjb3Bl
Q2hhaW5Ub3ApOgorICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OnNldEFjdGl2YXRpb25PYmplY3Qp
OgorICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OnNldExvY2FsU3RvcmFnZSk6CisgICAgICAgICog
a2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnJl
c2V0KToKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnB1c2hBY3RpdmF0aW9uKToKKyAg
ICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OmNoZWNrQWN0aXZhdGlvbkNvdW50KToKKyAgICAg
ICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnBvcEFjdGl2YXRpb25IZWxwZXIpOgorICAgICAgICAo
S0pTOjpKU0dsb2JhbE9iamVjdDo6cG9wQWN0aXZhdGlvbik6CisgICAgICAgIChLSlM6OkpTR2xv
YmFsT2JqZWN0Ojp0ZWFyT2ZmQWN0aXZhdGlvbik6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICoga2pzL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEtKUzo6
SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGE6OkpTVmFyaWFibGVPYmplY3RE
YXRhKToKKyAgICAgICAgKEtKUzo6SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdCk6
CisgICAgICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6
OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OkFjdGl2YXRp
b25JbXApOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1wOjp+QWN0aXZhdGlvbkltcCk6Cisg
ICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OmluaXQpOgorICAgICAgICAoS0pTOjpBY3RpdmF0
aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1w
OjptYXJrSGVscGVyKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6bWFyayk6CisgICAg
ICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25EYXRhOjpBY3RpdmF0aW9uRGF0YSk6
CisgICAgICAgIChLSlM6Okdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAg
KiBranMvZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAoS0pT
OjpQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UG9zdERlY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlByZUluY1Jlc29sdmVOb2RlOjpl
dmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlByZURlY1Jlc29sdmVOb2RlOjpldmFsdWF0ZSk6Cisg
ICAgICAgIChLSlM6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAo
S0pTOjpBc3NpZ25SZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpXaXRoTm9k
ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChLSlM6OlRyeU5vZGU6OmV4ZWN1dGUpOgorICAgICAgICAo
S0pTOjpGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEtK
Uzo6RnVuY0V4cHJOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL29iamVjdC5oOgorICAg
ICAgICAqIGtqcy9zY29wZV9jaGFpbi5oOgorICAgICAgICAoS0pTOjpTY29wZUNoYWluOjpyZXBs
YWNlKToKKyAgICAgICAgKiBranMvc2NvcGVfY2hhaW5fbWFyay5oOiBBZGRlZC4KKyAgICAgICAg
KEtKUzo6U2NvcGVDaGFpbjo6bWFyayk6CisKIDIwMDgtMDEtMDYgIE5pa29sYXMgWmltbWVybWFu
biAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4uCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTU4
LDYgKzU1OCw4IEBACiAJCTcwNzNCRTNEMDU4MTI5MUUwMDVFRTJDOSAvKiBydW50aW1lX2FycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHJ1
bnRpbWVfYXJyYXkuaDsgcGF0aCA9IGJpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MEIxNkEyNjA1NjlBMTA5MDBEQjc1
NkQgLyogcnVudGltZV9vYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gcnVudGltZV9vYmplY3QuY3BwOyBwYXRoID0gYmluZGlu
Z3MvcnVudGltZV9vYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IH07CiAJCTcwQjE2QTI3MDU2OUExMDkwMERCNzU2RCAvKiBydW50aW1lX29iamVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBydW50aW1l
X29iamVjdC5oOyBwYXRoID0gYmluZGluZ3MvcnVudGltZV9vYmplY3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OworCQk3RTJDNkM5NTBEMzFDNkFCMDAyRDQ0RTIg
LyogQWN0aXZhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBY3RpdmF0
aW9uLmg7IHBhdGggPSBranMvQWN0aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogc2NvcGVfY2hhaW5fbWFyay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzY29wZV9jaGFpbl9tYXJrLmg7IHBhdGggPSBr
anMvc2NvcGVfY2hhaW5fbWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEFC
RjFERTA3MEI2MjhDMDBBM0FDMDUgLyogbnBydW50aW1lX2ltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBucHJ1bnRpbWVfaW1wbC5oOyBwYXRo
ID0gYmluZGluZ3MvbnBydW50aW1lX2ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQk5MzAzRjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93blB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzAzRjU2OTA5OTExOTAwMDBBRDcxQjggLyogTm9uY29weWFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uY29weWFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyNCw2ICs3MjYsOCBAQAogCQkwODY3RDY5MUZFODQwMjhG
QzAyQUFDMDcgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBzY29wZV9jaGFp
bl9tYXJrLmggKi8sCisJCQkJN0UyQzZDOTUwRDMxQzZBQjAwMkQ0NEUyIC8qIEFjdGl2YXRpb24u
aCAqLywKIAkJCQk5MzdCNjNDQzA5RTc2NkQyMDBBNjcxREQgLyogRGVyaXZlZFNvdXJjZXMubWFr
ZSAqLywKIAkJCQkxNEI4RUNBNjBBNTY1Mzk4MDA2MkJFNTQgLyogSmF2YVNjcmlwdENvcmUuZXhw
ICovLAogCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZp
eC5oICovLApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJp
Y2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3Mg
T3Jsb3ZpY2gKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQWN0aXZhdGlvbl9oCisjZGVmaW5lIEFj
dGl2YXRpb25faAorCisjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIm9i
amVjdC5oIgorI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgorCituYW1lc3BhY2UgS0pTIHsKKworICAg
IGNsYXNzIEFyZ3VtZW50czsKKyAgICBjbGFzcyBGdW5jdGlvbkltcDsKKyAgICBjbGFzcyBTdGFj
a0FjdGl2YXRpb247CisKKyAgICBjbGFzcyBBY3RpdmF0aW9uSW1wIDogcHVibGljIEpTVmFyaWFi
bGVPYmplY3QgeworICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBTdGFja0FjdGl2YXRpb247CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3Ry
dWN0IEFjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVP
YmplY3REYXRhIHsKKyAgICAgICAgICAgIEFjdGl2YXRpb25EYXRhKCkgOiBpc09uU3RhY2sodHJ1
ZSksIGxlZnRSZWxpYyhmYWxzZSkgeyB9CisgICAgICAgICAgICBBY3RpdmF0aW9uRGF0YShjb25z
dCBBY3RpdmF0aW9uRGF0YSYpOworCisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7CisgICAg
ICAgICAgICBGdW5jdGlvbkltcCogZnVuY3Rpb247CisgICAgICAgICAgICBBcmd1bWVudHMqIGFy
Z3VtZW50c09iamVjdDsKKyAgICAgICAgCisgICAgICAgICAgICBib29sIGlzT25TdGFjayA6IDE7
CisgICAgICAgICAgICBib29sIGxlZnRSZWxpYyA6IDE7CisgICAgICAgIH07CisKKyAgICBwdWJs
aWM6CisgICAgICAgIEFjdGl2YXRpb25JbXAoKSB7IH0KKyAgICAgICAgQWN0aXZhdGlvbkltcChj
b25zdCBBY3RpdmF0aW9uRGF0YSYsIGJvb2wpOworCisgICAgICAgIHZpcnR1YWwgfkFjdGl2YXRp
b25JbXAoKTsKKworICAgICAgICB2b2lkIGluaXQoRXhlY1N0YXRlKiBleGVjKTsKKworICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNWYWx1ZSosIGludCBhdHRyID0gTm9uZSk7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpOworCisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CisKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKKyAgICAgICAg
dm9pZCBtYXJrQ2hpbGRyZW4oKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmF0aW9u
T2JqZWN0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgICAgICBib29sIGlzT25TdGFjaygp
IGNvbnN0IHsgcmV0dXJuIGQoKS0+aXNPblN0YWNrOyB9CisgICAgICAgIGJvb2wgbmVlZHNQb3Ao
KSBjb25zdCB7IHJldHVybiAoZCgpLT5pc09uU3RhY2sgfHwgZCgpLT5sZWZ0UmVsaWMpOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMg
Z2V0QXJndW1lbnRzR2V0dGVyKCk7CisgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KTsKKyAgICAgICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhl
Y1N0YXRlKik7CisgICAgICAgIEFjdGl2YXRpb25EYXRhKiBkKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8QWN0aXZhdGlvbkRhdGEqPihKU1ZhcmlhYmxlT2JqZWN0OjpkKTsgfQorICAgIH07
CisKKyAgICBjb25zdCBzaXplX3QgYWN0aXZhdGlvblN0YWNrU2l6ZSA9IDMyOworCisgICAgc3Ry
dWN0IFN0YWNrQWN0aXZhdGlvbiB7CisgICAgICAgIFN0YWNrQWN0aXZhdGlvbigpIHsgYWN0aXZh
dGlvblN0b3JhZ2UuSlNWYXJpYWJsZU9iamVjdDo6ZCA9ICZhY3RpdmF0aW9uRGF0YVN0b3JhZ2U7
IH0KKyAgICAgICAgU3RhY2tBY3RpdmF0aW9uKGNvbnN0IFN0YWNrQWN0aXZhdGlvbiYpOworICAg
ICAgCisgICAgICAgIEFjdGl2YXRpb25JbXAgYWN0aXZhdGlvblN0b3JhZ2U7CisgICAgICAgIEFj
dGl2YXRpb25JbXA6OkFjdGl2YXRpb25EYXRhIGFjdGl2YXRpb25EYXRhU3RvcmFnZTsKKyAgICB9
OworCisgICAgc3RydWN0IEFjdGl2YXRpb25TdGFja05vZGUgeworICAgICAgICBBY3RpdmF0aW9u
U3RhY2tOb2RlKiBwcmV2OworICAgICAgICBTdGFja0FjdGl2YXRpb24gZGF0YVthY3RpdmF0aW9u
U3RhY2tTaXplXTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBAQAogI2lu
Y2x1ZGUgIkV4ZWNTdGF0ZS5oIgogCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJpbnRl
cm5hbC5oIgorI2luY2x1ZGUgInNjb3BlX2NoYWluX21hcmsuaCIKIAogbmFtZXNwYWNlIEtKUyB7
CiAKQEAgLTEwNSw3ICsxMDcsNyBAQCBFeGVjU3RhdGU6OkV4ZWNTdGF0ZShKU0dsb2JhbE9iamVj
dCogZ2xvCiAgICAgLCBtX3N3aXRjaERlcHRoKDApIAogICAgICwgbV9jb2RlVHlwZShGdW5jdGlv
bkNvZGUpCiB7Ci0gICAgQWN0aXZhdGlvbkltcCogYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9u
SW1wKHRoaXMpOworICAgIEFjdGl2YXRpb25JbXAqIGFjdGl2YXRpb24gPSBnbG9iYWxPYmplY3Qt
PnB1c2hBY3RpdmF0aW9uKHRoaXMpOwogICAgIG1fYWN0aXZhdGlvbiA9IGFjdGl2YXRpb247CiAg
ICAgbV9sb2NhbFN0b3JhZ2UgPSAmYWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCk7CiAgICAgbV92
YXJpYWJsZU9iamVjdCA9IGFjdGl2YXRpb247CkBAIC0xMTUsNiArMTE3LDkgQEAgRXhlY1N0YXRl
OjpFeGVjU3RhdGUoSlNHbG9iYWxPYmplY3QqIGdsbwogCiBFeGVjU3RhdGU6On5FeGVjU3RhdGUo
KQogeworICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBzdGF0aWNfY2FzdDxB
Y3RpdmF0aW9uSW1wKj4obV9hY3RpdmF0aW9uKS0+bmVlZHNQb3AoKSkKKyAgICAgICAgbV9nbG9i
YWxPYmplY3QtPnBvcEFjdGl2YXRpb24oKTsKKyAgICAKICAgICBtX2dsb2JhbE9iamVjdC0+c2V0
Q3VycmVudEV4ZWMobV9zYXZlZEV4ZWMpOwogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMv
RXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5o
CShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBuYW1lc3BhY2UgS0pTICB7CiAgICAgICAgIGJv
b2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISFtX2V4Y2VwdGlvbjsgfQogICAgICAg
ICAKICAgICAgICAgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGVDaGFpbjsgfQorICAgICAgICB2b2lkIHJlcGxhY2VTY29wZUNoYWluVG9wKEpTT2Jq
ZWN0KiBvKSB7IG1fc2NvcGVDaGFpbi5yZXBsYWNlKG8pOyB9CiAgICAgICAgIAogICAgICAgICBK
U1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFi
bGVPYmplY3Q7IH0KICAgICAgICAgdm9pZCBzZXRWYXJpYWJsZU9iamVjdChKU1ZhcmlhYmxlT2Jq
ZWN0KiB2KSB7IG1fdmFyaWFibGVPYmplY3QgPSB2OyB9CkBAIC04Nyw2ICs4OCw3IEBAIG5hbWVz
cGFjZSBLSlMgIHsKICAgICAgICAgRXhlY1N0YXRlKiBzYXZlZEV4ZWMoKSB7IHJldHVybiBtX3Nh
dmVkRXhlYzsgfQogICAgICAgICAKICAgICAgICAgQWN0aXZhdGlvbkltcCogYWN0aXZhdGlvbk9i
amVjdCgpIHsgcmV0dXJuIG1fYWN0aXZhdGlvbjsgfQorICAgICAgICB2b2lkIHNldEFjdGl2YXRp
b25PYmplY3QoQWN0aXZhdGlvbkltcCogYSkgeyBtX2FjdGl2YXRpb24gPSBhOyB9CiAgICAgICAg
IENvZGVUeXBlIGNvZGVUeXBlKCkgeyByZXR1cm4gbV9jb2RlVHlwZTsgfQogICAgICAgICBTY29w
ZU5vZGUqIHNjb3BlTm9kZSgpIHsgcmV0dXJuIG1fc2NvcGVOb2RlOyB9CiAgICAgICAgIEZ1bmN0
aW9uSW1wKiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KQEAgLTExMiw2
ICsxMTQsNyBAQCBuYW1lc3BhY2UgS0pTICB7CiAgICAgICAgIGNvbnN0IExpc3QmIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICptX2VtcHR5TGlzdDsgfQogCiAgICAgICAgIExvY2FsU3RvcmFn
ZSYgbG9jYWxTdG9yYWdlKCkgeyByZXR1cm4gKm1fbG9jYWxTdG9yYWdlOyB9CisgICAgICAgIHZv
aWQgc2V0TG9jYWxTdG9yYWdlKExvY2FsU3RvcmFnZSogcykgeyBtX2xvY2FsU3RvcmFnZSA9IHM7
IH0KIAogICAgICAgICAvLyBUaGVzZSBhcmUgb25seSB2YWxpZCByaWdodCBhZnRlciBjYWxsaW5n
IGV4ZWN1dGUoKS4KICAgICAgICAgQ29tcGxUeXBlIGNvbXBsZXRpb25UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21wbGV0aW9uVHlwZTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICszMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAotI2luY2x1ZGUgIlNhdmVk
QnVpbHRpbnMuaCIKKyNpbmNsdWRlICJBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiYXJyYXlfb2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiYm9vbF9vYmplY3QuaCIKICNpbmNsdWRlICJkYXRlX29iamVjdC5o
IgpAQCAtNDAsNiArNDEsNyBAQAogI2luY2x1ZGUgIm51bWJlcl9vYmplY3QuaCIKICNpbmNsdWRl
ICJvYmplY3Rfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVnZXhwX29iamVjdC5oIgorI2luY2x1ZGUg
IlNhdmVkQnVpbHRpbnMuaCIKICNpbmNsdWRlICJzdHJpbmdfb2JqZWN0LmgiCiAKICNpZiBIQVZF
KFNZU19USU1FX0gpCkBAIC0yMDAsNiArMjAyLDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXQoSlNWYWx1ZSogcHJvdAogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gJmQoKS0+Z2xvYmFsRXhl
YzsKIAorICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBuZXcgQWN0aXZhdGlvblN0YWNrTm9kZTsKKyAg
ICBkKCktPmFjdGl2YXRpb25Db3VudCA9IDA7CisKICAgICAvLyBQcm90b3R5cGVzCiAgICAgZCgp
LT5mdW5jdGlvblByb3RvdHlwZSA9IG5ldyBGdW5jdGlvblByb3RvdHlwZShleGVjKTsKICAgICBk
KCktPm9iamVjdFByb3RvdHlwZSA9IG5ldyBPYmplY3RQcm90b3R5cGUoZXhlYywgZCgpLT5mdW5j
dGlvblByb3RvdHlwZSk7CkBAIC00OTQsNCArNDk5LDU1IEBAIEV4ZWNTdGF0ZSogSlNHbG9iYWxP
YmplY3Q6Omdsb2JhbEV4ZWMoKQogICAgIHJldHVybiAmZCgpLT5nbG9iYWxFeGVjOwogfQogCitB
Y3RpdmF0aW9uSW1wKiBKU0dsb2JhbE9iamVjdDo6cHVzaEFjdGl2YXRpb24oRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIGlmIChkKCktPmFjdGl2YXRpb25Db3VudCA9PSBhY3RpdmF0aW9uU3RhY2tT
aXplKSB7CisgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIG5ld05vZGUgPSBuZXcgQWN0aXZh
dGlvblN0YWNrTm9kZTsKKyAgICAgICAgbmV3Tm9kZS0+cHJldiA9IGQoKS0+YWN0aXZhdGlvbnM7
CisgICAgICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBuZXdOb2RlOworICAgICAgICBkKCktPmFjdGl2
YXRpb25Db3VudCA9IDA7CisgICAgICB9CisgICAgCisgICAgU3RhY2tBY3RpdmF0aW9uKiBzdGFj
a0VudHJ5ID0gJmQoKS0+YWN0aXZhdGlvbnMtPmRhdGFbZCgpLT5hY3RpdmF0aW9uQ291bnQrK107
CisgICAgc3RhY2tFbnRyeS0+YWN0aXZhdGlvblN0b3JhZ2UuaW5pdChleGVjKTsKKyAgICAKKyAg
ICByZXR1cm4gJihzdGFja0VudHJ5LT5hY3RpdmF0aW9uU3RvcmFnZSk7Cit9CisKK2lubGluZSB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpjaGVja0FjdGl2YXRpb25Db3VudCgpCit7CisgICAgaWYgKCFk
KCktPmFjdGl2YXRpb25Db3VudCkgeworICAgICAgICBBY3RpdmF0aW9uU3RhY2tOb2RlKiBwcmV2
ID0gZCgpLT5hY3RpdmF0aW9ucy0+cHJldjsKKyAgICAgICAgZGVsZXRlIGQoKS0+YWN0aXZhdGlv
bnM7CisgICAgICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBwcmV2OworICAgICAgICBkKCktPmFjdGl2
YXRpb25Db3VudCA9IGFjdGl2YXRpb25TdGFja1NpemU7CisgICAgfQorfQorCit2b2lkIEpTR2xv
YmFsT2JqZWN0Ojpwb3BBY3RpdmF0aW9uKCkKK3sKKyAgICBjaGVja0FjdGl2YXRpb25Db3VudCgp
OworICAgIGQoKS0+YWN0aXZhdGlvbnMtPmRhdGFbLS1kKCktPmFjdGl2YXRpb25Db3VudF0uYWN0
aXZhdGlvbkRhdGFTdG9yYWdlLmxvY2FsU3RvcmFnZS5zaHJpbmsoMCk7ICAgIAorfQorCit2b2lk
IEpTR2xvYmFsT2JqZWN0Ojp0ZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wg
bGVhdmVSZWxpYykKK3sKKyAgICBpZiAoZXhlYy0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUg
JiYgc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KGV4ZWMtPmFjdGl2YXRpb25PYmplY3QoKSkt
PmlzT25TdGFjaygpKSB7CisgICAgICAgIEFjdGl2YXRpb25JbXAqIG9sZEFjdGl2YXRpb24gPSBz
dGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4oZXhlYy0+YWN0aXZhdGlvbk9iamVjdCgpKTsKKyAg
ICAgICAgQWN0aXZhdGlvbkltcCogbmV3QWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9uSW1wKCpv
bGRBY3RpdmF0aW9uLT5kKCksIGxlYXZlUmVsaWMpOworICAgICAgICAKKyAgICAgICAgaWYgKCFs
ZWF2ZVJlbGljKSB7CisgICAgICAgICAgICBjaGVja0FjdGl2YXRpb25Db3VudCgpOworICAgICAg
ICAgICAgZCgpLT5hY3RpdmF0aW9uQ291bnQtLTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgb2xkQWN0aXZhdGlvbi0+ZCgpLT5sb2NhbFN0b3JhZ2Uuc2hyaW5rKDApOworICAgICAgICAK
KyAgICAgICAgZXhlYy0+c2V0QWN0aXZhdGlvbk9iamVjdChuZXdBY3RpdmF0aW9uKTsKKyAgICAg
ICAgZXhlYy0+c2V0VmFyaWFibGVPYmplY3QobmV3QWN0aXZhdGlvbik7CisgICAgICAgIGV4ZWMt
PnNldExvY2FsU3RvcmFnZSgmKG5ld0FjdGl2YXRpb24tPmxvY2FsU3RvcmFnZSgpKSk7CisgICAg
ICAgIGV4ZWMtPnJlcGxhY2VTY29wZUNoYWluVG9wKG5ld0FjdGl2YXRpb24pOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogCiBuYW1lc3BhY2UgS0pTIHsKIAor
ICAgIGNsYXNzIEFjdGl2YXRpb25JbXA7CisgICAgY2xhc3MgQWN0aXZhdGlvblN0YWNrTm9kZTsK
ICAgICBjbGFzcyBBcnJheU9iamVjdEltcDsKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZTsKICAg
ICBjbGFzcyBCb29sZWFuT2JqZWN0SW1wOwpAQCAtMTI4LDYgKzEzMCw5IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIFVSSUVycm9yUHJvdG90eXBl
OwogCiAgICAgICAgICAgICBTeW1ib2xUYWJsZSBpbmxpbmVTeW1ib2xUYWJsZTsKKworICAgICAg
ICAgICAgQWN0aXZhdGlvblN0YWNrTm9kZSogYWN0aXZhdGlvbnM7CisgICAgICAgICAgICBzaXpl
X3QgYWN0aXZhdGlvbkNvdW50OwogICAgICAgICB9OwogCiAgICAgcHVibGljOgpAQCAtMjI3LDYg
KzIzMiwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dz
QWNjZXNzRnJvbShjb25zdCBKU0dsb2JhbE9iamVjdCopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAorICAgICAgICBBY3RpdmF0aW9uSW1wKiBwdXNoQWN0aXZhdGlvbihFeGVjU3RhdGUqKTsKKyAg
ICAgICAgdm9pZCBwb3BBY3RpdmF0aW9uKCk7CisgICAgICAgIHZvaWQgdGVhck9mZkFjdGl2YXRp
b24oRXhlY1N0YXRlKiwgYm9vbCBtYXJrQXNSZWxpYyA9IGZhbHNlKTsKKwogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgaW5pdCgpOwogICAgICAgICAKQEAgLTIzNSw2ICsyNDQsOCBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICAgICAgYm9vbCBjaGVja1RpbWVvdXQoKTsKICAgICAgICAgdm9pZCBy
ZXNldFRpbWVvdXRDaGVjaygpOwogCisgICAgICAgIHZvaWQgY2hlY2tBY3RpdmF0aW9uQ291bnQo
KTsKKwogICAgICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIHNfaGVhZDsKICAgICB9OwogCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgLy8gd2l0aG91dCBpbmNy
ZWFzaW5nIHRoZWlyIG93biBzaXplIChzaW5jZSB0aGVyZSdzIGEgaGFyZCBsaW1pdCBvbiB0aGUK
ICAgICAgICAgLy8gc2l6ZSBvZiBhIEpTQ2VsbCkuCiAgICAgICAgIHN0cnVjdCBKU1ZhcmlhYmxl
T2JqZWN0RGF0YSB7CisgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0RGF0YSgpIHsgfQorICAg
ICAgICAKICAgICAgICAgICAgIEpTVmFyaWFibGVPYmplY3REYXRhKFN5bWJvbFRhYmxlKiBzKQog
ICAgICAgICAgICAgICAgIDogc3ltYm9sVGFibGUocykgLy8gU3ViY2xhc3Mgb3ducyB0aGlzIHBv
aW50ZXIuCiAgICAgICAgICAgICB7CkBAIC02Niw2ICs2OCw4IEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgICAgICAgIH07CiAKKyAgICAgICAgSlNWYXJpYWJsZU9iamVjdCgpIHsgfQorCiAgICAgICAg
IEpTVmFyaWFibGVPYmplY3QoSlNWYXJpYWJsZU9iamVjdERhdGEqIGRhdGEpCiAgICAgICAgICAg
ICA6IGQoZGF0YSkgLy8gU3ViY2xhc3Mgb3ducyB0aGlzIHBvaW50ZXIuCiAgICAgICAgIHsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKIAorI2luY2x1ZGUgIkFj
dGl2YXRpb24uaCIKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgpAQCAtODQsMTIgKzg1LDEzIEBAIEpTVmFsdWUq
IEZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihFeGUKIEpTVmFsdWUqIEZ1bmN0aW9uSW1wOjph
cmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICBGdW5jdGlv
bkltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uSW1wKj4oc2xvdC5zbG90QmFzZSgp
KTsKLSAgRXhlY1N0YXRlKiBlID0gZXhlYzsKLSAgd2hpbGUgKGUpIHsKLSAgICBpZiAoZS0+ZnVu
Y3Rpb24oKSA9PSB0aGlzT2JqKQorICAKKyAgZm9yIChFeGVjU3RhdGUqIGUgPSBleGVjOyBlOyBl
ID0gZS0+Y2FsbGluZ0V4ZWNTdGF0ZSgpKQorICAgIGlmIChlLT5mdW5jdGlvbigpID09IHRoaXNP
YmopIHsKKyAgICAgIGUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24o
ZSwgZSA9PSBleGVjKTsKICAgICAgIHJldHVybiBlLT5hY3RpdmF0aW9uT2JqZWN0KCktPmdldChl
eGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGUgPSBlLT5jYWxsaW5nRXhlY1N0YXRlKCk7Ci0gIH0K
KyAgICB9CisgIAogICByZXR1cm4ganNOdWxsKCk7CiB9CiAKQEAgLTM0MCw2ICszNDIsMjYgQEAg
Ym9vbCBBcmd1bWVudHM6OmRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZQogCiBjb25zdCBDbGFzc0lu
Zm8gQWN0aXZhdGlvbkltcDo6aW5mbyA9IHsgIkFjdGl2YXRpb24iLCAwLCAwIH07CiAKK0FjdGl2
YXRpb25JbXA6OkFjdGl2YXRpb25JbXAoY29uc3QgQWN0aXZhdGlvbkRhdGEmIG9sZERhdGEsIGJv
b2wgbGVhdmVSZWxpYykKK3sKKyAgICBKU1ZhcmlhYmxlT2JqZWN0OjpkID0gbmV3IEFjdGl2YXRp
b25EYXRhKG9sZERhdGEpOworICAgIGQoKS0+bGVmdFJlbGljID0gbGVhdmVSZWxpYzsKK30KKwor
QWN0aXZhdGlvbkltcDo6fkFjdGl2YXRpb25JbXAoKQoreworICAgIGlmICghZCgpLT5pc09uU3Rh
Y2spCisgICAgICAgIGRlbGV0ZSBkKCk7Cit9CisKK3ZvaWQgQWN0aXZhdGlvbkltcDo6aW5pdChF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZCgpLT5zeW1ib2xUYWJsZSA9ICZleGVjLT5mdW5jdGlv
bigpLT5ib2R5LT5zeW1ib2xUYWJsZSgpOworICAgIGQoKS0+ZXhlYyA9IGV4ZWM7CisgICAgZCgp
LT5mdW5jdGlvbiA9IGV4ZWMtPmZ1bmN0aW9uKCk7CisgICAgZCgpLT5hcmd1bWVudHNPYmplY3Qg
PSAwOworfQorICAKIEpTVmFsdWUqIEFjdGl2YXRpb25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKIHsKICAgQWN0aXZhdGlvbkltcCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEFj
dGl2YXRpb25JbXAqPihzbG90LnNsb3RCYXNlKCkpOwpAQCAtMzY3LDYgKzM4OSwxNCBAQCBib29s
IEFjdGl2YXRpb25JbXA6OmdldE93blByb3BlcnR5U2xvdChFCiAKICAgICAvLyBPbmx5IHJldHVy
biB0aGUgYnVpbHQtaW4gYXJndW1lbnRzIG9iamVjdCBpZiBpdCB3YXNuJ3Qgb3ZlcnJpZGRlbiBh
Ym92ZS4KICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMpIHsKKyAgICAgICAgZm9yIChFeGVjU3RhdGUqIGUgPSBleGVjOyBlOyBlID0gZS0+Y2Fs
bGluZ0V4ZWNTdGF0ZSgpKQorICAgICAgICAgICAgaWYgKGUtPmZ1bmN0aW9uKCkgPT0gZCgpLT5m
dW5jdGlvbikgeworICAgICAgICAgICAgICAgIGUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVh
ck9mZkFjdGl2YXRpb24oZSwgZSA9PSBleGVjKTsKKyAgICAgICAgICAgICAgICBBY3RpdmF0aW9u
SW1wKiBuZXdBY3RpdmF0aW9uID0gZS0+YWN0aXZhdGlvbk9iamVjdCgpOworICAgICAgICAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKG5ld0FjdGl2YXRpb24sIG5ld0FjdGl2YXRpb24tPmdldEFyZ3Vt
ZW50c0dldHRlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGdldEFyZ3VtZW50c0dl
dHRlcigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzk4LDE1ICs0MjgsMjkg
QEAgdm9pZCBBY3RpdmF0aW9uSW1wOjpwdXQoRXhlY1N0YXRlKiwgY29ucwogICAgIF9wcm9wLnB1
dChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAoYXR0ciA9PSBOb25lIHx8IGF0dHIgPT0gRG9u
dERlbGV0ZSkpOwogfQogCi12b2lkIEFjdGl2YXRpb25JbXA6Om1hcmsoKQordm9pZCBBY3RpdmF0
aW9uSW1wOjptYXJrQ2hpbGRyZW4oKQogewotICAgIEpTVmFyaWFibGVPYmplY3Q6Om1hcmsoKTsK
KyAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSA9IGQoKS0+bG9jYWxTdG9yYWdlOworICAg
IHNpemVfdCBzaXplID0gbG9jYWxTdG9yYWdlLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IGxvY2Fs
U3RvcmFnZVtpXS52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsdWUtPm1hcmtlZCgp
KQorICAgICAgICAgICAgdmFsdWUtPm1hcmsoKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFkKCkt
PmZ1bmN0aW9uLT5tYXJrZWQoKSkKICAgICAgICAgZCgpLT5mdW5jdGlvbi0+bWFyaygpOwotCisg
ICAgCiAgICAgaWYgKGQoKS0+YXJndW1lbnRzT2JqZWN0ICYmICFkKCktPmFyZ3VtZW50c09iamVj
dC0+bWFya2VkKCkpCi0gICAgICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrKCk7CisgICAg
ICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrKCk7ICAgIAorfQorCit2b2lkIEFjdGl2YXRp
b25JbXA6Om1hcmsoKQoreworICAgIEpTT2JqZWN0OjptYXJrKCk7CisgICAgbWFya0NoaWxkcmVu
KCk7CiB9CiAKIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTQxNyw2ICs0NjEsMTUgQEAgdm9pZCBBY3RpdmF0aW9uSW1wOjpjcmVh
dGVBcmd1bWVudHNPYmplYwogICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0ID0gbmV3IEFyZ3VtZW50
cyhleGVjLCBkKCktPmV4ZWMtPmZ1bmN0aW9uKCksICpkKCktPmV4ZWMtPmFyZ3VtZW50cygpLCB0
aGlzKTsKIH0KIAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRhdGE6OkFjdGl2YXRpb25EYXRh
KGNvbnN0IEFjdGl2YXRpb25EYXRhJiBvbGQpCisgICAgOiBKU1ZhcmlhYmxlT2JqZWN0RGF0YShv
bGQpCisgICAgLCBleGVjKG9sZC5leGVjKQorICAgICwgZnVuY3Rpb24ob2xkLmZ1bmN0aW9uKQor
ICAgICwgYXJndW1lbnRzT2JqZWN0KG9sZC5hcmd1bWVudHNPYmplY3QpCisgICAgLCBpc09uU3Rh
Y2soZmFsc2UpCit7Cit9CisgIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEds
b2JhbEZ1bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCkBAIC02OTYs
NiArNzQ5LDkgQEAgSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rpb24oRQogICAg
ICAgICBib29sIHN3aXRjaEdsb2JhbCA9IHRoaXNPYmogJiYgdGhpc09iaiAhPSBleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCkgJiYgdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKTsKIAogICAgICAg
ICAvLyBlbnRlciBhIG5ldyBleGVjdXRpb24gY29udGV4dAorICAgICAgICBpZiAoIXN3aXRjaEds
b2JhbCkKKyAgICAgICAgICAgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFj
dGl2YXRpb24oZXhlYyk7CisgICAgICAgIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3dpdGNoR2xvYmFsID8gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlz
T2JqKSA6IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKTsKICAgICAgICAgRXhlY1N0YXRlIG5l
d0V4ZWMoZ2xvYmFsT2JqZWN0LCBldmFsTm9kZS5nZXQoKSwgZXhlYyk7CiAgICAgICAgICAgCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvZnVuY3Rpb24uaAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvZnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgY2xhc3MgQWN0aXZhdGlvbkltcDsKICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9k
ZTsKICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CisgIGNsYXNzIEpTR2xvYmFsT2JqZWN0Owog
CiAgIGNsYXNzIEludGVybmFsRnVuY3Rpb25JbXAgOiBwdWJsaWMgSlNPYmplY3QgewogICBwdWJs
aWM6CkBAIC0xMzcsNTMgKzEzOCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIG11dGFibGUgSW5k
ZXhUb05hbWVNYXAgaW5kZXhUb05hbWVNYXA7CiAgIH07CiAKLSAgY2xhc3MgQWN0aXZhdGlvbklt
cCA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKLSAgcHJpdmF0ZToKLSAgICB1c2luZyBKU1Zh
cmlhYmxlT2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0RGF0YTsKLQotICAgIHN0cnVjdCBBY3RpdmF0
aW9uSW1wRGF0YSA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0RGF0YSB7Ci0gICAgICAgIEFjdGl2
YXRpb25JbXBEYXRhKEV4ZWNTdGF0ZSogZSkKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVj
dERhdGEoJmUtPmZ1bmN0aW9uKCktPmJvZHktPnN5bWJvbFRhYmxlKCkpCi0gICAgICAgICAgICAs
IGV4ZWMoZSkKLSAgICAgICAgICAgICwgZnVuY3Rpb24oZS0+ZnVuY3Rpb24oKSkgLy8gU3RvcmUg
dGhpcyBwb2ludGVyIGZvciBtYXJraW5nLCB0byBrZWVwIG91ciBzeW1ib2wgdGFibGUgLyBzY29w
ZSBhbGl2ZSBhZnRlciBleGVjIGhhcyBnb25lIG91dCBvZiBzY29wZS4KLSAgICAgICAgICAgICwg
YXJndW1lbnRzT2JqZWN0KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEV4ZWNT
dGF0ZSogZXhlYzsKLSAgICAgICAgRnVuY3Rpb25JbXAqIGZ1bmN0aW9uOwotICAgICAgICBBcmd1
bWVudHMqIGFyZ3VtZW50c09iamVjdDsKLSAgICB9OwotCi0gIHB1YmxpYzoKLSAgICBBY3RpdmF0
aW9uSW1wKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KG5ldyBB
Y3RpdmF0aW9uSW1wRGF0YShleGVjKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QWN0
aXZhdGlvbkltcCgpCi0gICAgewotICAgICAgICBkZWxldGUgZCgpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgaW50IGF0dHIgPSBO
b25lKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gaW5mbzsKLQotICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmF0aW9uT2JqZWN0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gIHByaXZhdGU6
Ci0gICAgc3RhdGljIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldEFyZ3VtZW50c0dldHRl
cigpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KTsKLSAg
ICB2b2lkIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqKTsKLSAgICBBY3RpdmF0aW9u
SW1wRGF0YSogZCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXBEYXRhKj4oSlNW
YXJpYWJsZU9iamVjdDo6ZCk7IH0KLSAgfTsKLQogICBjbGFzcyBHbG9iYWxGdW5jSW1wIDogcHVi
bGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICBwdWJsaWM6CiAgICAgR2xvYmFsRnVuY0ltcChF
eGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVu
dGlmaWVyJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2
YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4MSwxMCArMTI4
MSwxNCBAQCBKU1ZhbHVlICpQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4CiAgIEFTU0VS
VChpdGVyICE9IGVuZCk7CiAKICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIEpTT2JqZWN0ICpiYXNl
OwogICBkbyB7IAotICAgIGJhc2UgPSAqaXRlcjsKLSAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgaWYgKCgqaXRlciktPmdldFByb3BlcnR5
U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgICAvLyBJZiBtX2lkZW50IGlzICdh
cmd1bWVudHMnLCB0aGUgZ2V0UHJvcGVydHlTbG90KCkgY2FsbCBtYXkgY2F1c2UgCisgICAgICAg
IC8vIGJhc2UgKHdoaWNoIG11c3QgYmUgYW4gQWN0aXZhdGlvbkltcCBpbiBzdWNoIHRoaXMgY2Fz
ZSkgdG8gYmUgdG9ybgorICAgICAgICAvLyBvZmYgZnJvbSB0aGUgYWN0aXZhdGlvbiBzdGFjaywg
aW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGdldCBpdCBhZ2FpbgorICAgICAgICAvLyBmcm9tIHRo
ZSBTY29wZUNoYWluSXRlcmF0b3IuCisKKyAgICAgICAgSlNPYmplY3QqIGJhc2UgPSAqaXRlcjsK
ICAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVudCkt
PnRvSlNOdW1iZXIoZXhlYyk7CiAgICAgICAgIGJhc2UtPnB1dChleGVjLCBtX2lkZW50LCBqc051
bWJlcih2LT50b051bWJlcihleGVjKSArIDEpKTsKICAgICAgICAgcmV0dXJuIHY7CkBAIC0xMzM4
LDEwICsxMzQyLDE0IEBAIEpTVmFsdWUgKlBvc3REZWNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXgK
ICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKIAogICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgSlNPYmpl
Y3QgKmJhc2U7CiAgIGRvIHsgCi0gICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICBpZiAoKCppdGVyKS0+Z2V0
UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAgIC8vIElmIG1faWRl
bnQgaXMgJ2FyZ3VtZW50cycsIHRoZSBnZXRQcm9wZXJ0eVNsb3QoKSBjYWxsIG1heSBjYXVzZSAK
KyAgICAgICAgLy8gYmFzZSAod2hpY2ggbXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2gg
dGhpcyBjYXNlKSB0byBiZSB0b3JuCisgICAgICAgIC8vIG9mZiBmcm9tIHRoZSBhY3RpdmF0aW9u
IHN0YWNrLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gZ2V0IGl0IGFnYWluCisgICAgICAgIC8v
IGZyb20gdGhlIFNjb3BlQ2hhaW5JdGVyYXRvci4KKyAgICAgICAgCisgICAgICAgIEpTT2JqZWN0
KiBiYXNlID0gKml0ZXI7CiAgICAgICAgIEpTVmFsdWUqIHYgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGJhc2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwogICAgICAgICBiYXNlLT5wdXQoZXhl
YywgbV9pZGVudCwganNOdW1iZXIodi0+dG9OdW1iZXIoZXhlYykgLSAxKSk7CiAgICAgICAgIHJl
dHVybiB2OwpAQCAtMTc1MSwxMCArMTc1OSwxNCBAQCBKU1ZhbHVlICpQcmVJbmNSZXNvbHZlTm9k
ZTo6ZXZhbHVhdGUoRXhlCiAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAKICAgUHJvcGVydHlTbG90
IHNsb3Q7Ci0gIEpTT2JqZWN0ICpiYXNlOwogICBkbyB7IAotICAgIGJhc2UgPSAqaXRlcjsKLSAg
ICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAg
aWYgKCgqaXRlciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAg
ICAgICAvLyBJZiBtX2lkZW50IGlzICdhcmd1bWVudHMnLCB0aGUgZ2V0UHJvcGVydHlTbG90KCkg
Y2FsbCBtYXkgY2F1c2UgCisgICAgICAgIC8vIGJhc2UgKHdoaWNoIG11c3QgYmUgYW4gQWN0aXZh
dGlvbkltcCBpbiBzdWNoIHRoaXMgY2FzZSkgdG8gYmUgdG9ybgorICAgICAgICAvLyBvZmYgZnJv
bSB0aGUgYWN0aXZhdGlvbiBzdGFjaywgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGdldCBpdCBh
Z2FpbgorICAgICAgICAvLyBmcm9tIHRoZSBTY29wZUNoYWluSXRlcmF0b3IuCisgICAgICAgIAor
ICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwogICAgICAgICBKU1ZhbHVlICp2ID0gc2xv
dC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBkb3VibGUgbiA9IHYt
PnRvTnVtYmVyKGV4ZWMpOwpAQCAtMTc5OCwxMCArMTgxMCwxNCBAQCBKU1ZhbHVlICpQcmVEZWNS
ZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlCiAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAKICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gIEpTT2JqZWN0ICpiYXNlOwogICBkbyB7IAotICAgIGJhc2UgPSAq
aXRlcjsKLSAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3Qp
KSB7CisgICAgaWYgKCgqaXRlciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90
KSkgeworICAgICAgICAvLyBJZiBtX2lkZW50IGlzICdhcmd1bWVudHMnLCB0aGUgZ2V0UHJvcGVy
dHlTbG90KCkgY2FsbCBtYXkgY2F1c2UgCisgICAgICAgIC8vIGJhc2UgKHdoaWNoIG11c3QgYmUg
YW4gQWN0aXZhdGlvbkltcCBpbiBzdWNoIHRoaXMgY2FzZSkgdG8gYmUgdG9ybgorICAgICAgICAv
LyBvZmYgZnJvbSB0aGUgYWN0aXZhdGlvbiBzdGFjaywgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRv
IGdldCBpdCBhZ2FpbgorICAgICAgICAvLyBmcm9tIHRoZSBTY29wZUNoYWluSXRlcmF0b3IuCisg
ICAgICAgIAorICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwogICAgICAgICBKU1ZhbHVl
ICp2ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBkb3Vi
bGUgbiA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtMzIyOCw4ICszMjQ0LDE1IEBAIEpTVmFsdWUg
KlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZhbHVhdGUKICAgSlNPYmplY3QgKmJhc2U7CiAgIGRv
IHsgCiAgICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChiYXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgbV9pZGVudCwgc2xvdCkpCisgICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBt
X2lkZW50LCBzbG90KSkgeworICAgICAgLy8gSWYgbV9pZGVudCBpcyAnYXJndW1lbnRzJywgdGhl
IGdldFByb3BlcnR5U2xvdCgpIGNhbGwgbWF5IGNhdXNlIAorICAgICAgLy8gYmFzZSAod2hpY2gg
bXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2ggdGhpcyBjYXNlKSB0byBiZSB0b3JuCisg
ICAgICAvLyBvZmYgZnJvbSB0aGUgYWN0aXZhdGlvbiBzdGFjaywgaW4gd2hpY2ggY2FzZSB3ZSBu
ZWVkIHRvIGdldCBpdCBhZ2FpbgorICAgICAgLy8gZnJvbSB0aGUgU2NvcGVDaGFpbkl0ZXJhdG9y
LgorICAgICAgCisgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICBnb3RvIGZvdW5kOworICAgIH0K
IAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpAQCAtMzI2NSw4ICszMjg4
LDE1IEBAIEpTVmFsdWUgKkFzc2lnblJlc29sdmVOb2RlOjpldmFsdWF0ZShFeGUKICAgSlNPYmpl
Y3QgKmJhc2U7CiAgIGRvIHsgCiAgICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpCisgICAgaWYgKGJhc2UtPmdldFByb3Bl
cnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgICAgLy8gSWYgbV9pZGVudCBpcyAn
YXJndW1lbnRzJywgdGhlIGdldFByb3BlcnR5U2xvdCgpIGNhbGwgbWF5IGNhdXNlIAorICAgICAg
Ly8gYmFzZSAod2hpY2ggbXVzdCBiZSBhbiBBY3RpdmF0aW9uSW1wIGluIHN1Y2ggdGhpcyBjYXNl
KSB0byBiZSB0b3JuCisgICAgICAvLyBvZmYgZnJvbSB0aGUgYWN0aXZhdGlvbiBzdGFjaywgaW4g
d2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGdldCBpdCBhZ2FpbgorICAgICAgLy8gZnJvbSB0aGUgU2Nv
cGVDaGFpbkl0ZXJhdG9yLgorICAgICAgCisgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICBnb3Rv
IGZvdW5kOworICAgIH0KIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpA
QCAtMzk5Nyw2ICs0MDI3LDcgQEAgSlNWYWx1ZSogV2l0aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRl
ICpleAogICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgSlNPYmplY3QgKm8gPSB2LT50b09iamVjdChl
eGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCisgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3Qo
KS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgIGV4ZWMtPnB1c2hTY29wZShvKTsKICAgSlNW
YWx1ZSogdmFsdWUgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgIGV4ZWMtPnBvcFNjb3Bl
KCk7CkBAIC00MTk1LDYgKzQyMjYsNyBAQCBKU1ZhbHVlKiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNT
dGF0ZSAqZXhlCiAgIGlmIChjYXRjaEJsb2NrICYmIGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0g
VGhyb3cpIHsKICAgICBKU09iamVjdCogb2JqID0gbmV3IEpTT2JqZWN0OwogICAgIG9iai0+cHV0
KGV4ZWMsIGV4Y2VwdGlvbklkZW50LCByZXN1bHQsIERvbnREZWxldGUpOworICAgIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgICAgZXhlYy0+
cHVzaFNjb3BlKG9iaik7CiAgICAgcmVzdWx0ID0gY2F0Y2hCbG9jay0+ZXhlY3V0ZShleGVjKTsK
ICAgICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDM1Nyw2ICs0Mzg5LDkgQEAgdm9pZCBGdW5jdGlv
bkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpbwogICAgICAgICBtX2luaXRpYWxpemVkID0gdHJ1
ZTsKICAgICB9CiAKKyAgICBpZiAobV9mdW5jdGlvblN0YWNrLnNpemUoKSAhPSAwKQorICAgICAg
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKKwog
ICAgIExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKS0+
bG9jYWxTdG9yYWdlKCk7CiAgICAgCiAgICAgLy8gV2UgY2FuJ3QganVzdCByZXNpemUgbG9jYWxT
dG9yYWdlIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIHRlbXBvcmFyaWx5CkBAIC00NTY5LDYgKzQ2
MDQsOCBAQCB2b2lkIEZ1bmNFeHByTm9kZTo6YWRkUGFyYW1zKCkKIAogSlNWYWx1ZSAqRnVuY0V4
cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CisgIGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CisgIAogICBib29sIG5hbWVkID0g
IWlkZW50LmlzTnVsbCgpOwogICBKU09iamVjdCAqZnVuY3Rpb25TY29wZU9iamVjdCA9IDA7CiAK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsMTggKzU4MCw2IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LQotLy8gRklYTUU6IFB1dCB0aGlzIGZ1bmN0aW9uIGluIGEgc2VwYXJhdGUgZmlsZSBuYW1lZCBz
b21ldGhpbmcgbGlrZSBzY29wZV9jaGFpbl9tYXJrLmggLS0gY2FuJ3QgcHV0IGl0IGluIHNjb3Bl
X2NoYWluLmggc2luY2UgaXQgZGVwZW5kcyBvbiBKU09iamVjdC4KLQotaW5saW5lIHZvaWQgU2Nv
cGVDaGFpbjo6bWFyaygpCi17Ci0gICAgZm9yIChTY29wZUNoYWluTm9kZSAqbiA9IF9ub2RlOyBu
OyBuID0gbi0+bmV4dCkgewotICAgICAgICBKU09iamVjdCAqbyA9IG4tPm9iamVjdDsKLSAgICAg
ICAgaWYgKCFvLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIG8tPm1hcmsoKTsKLSAgICB9Ci19Ci0K
IGlubGluZSB2b2lkIFNjb3BlQ2hhaW46OnJlbGVhc2UoKQogewogICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgb25seSBjYWxsZWQgYnkgZGVyZWYoKSwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9z
Y29wZV9jaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFp
bi5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB2b2lkIGNsZWFyKCkgeyBkZXJlZigpOyBfbm9kZSA9IDA7IH0KICAgICAgICAgdm9pZCBwdXNo
KEpTT2JqZWN0ICopOwogICAgICAgICB2b2lkIHB1c2goY29uc3QgU2NvcGVDaGFpbiAmKTsKKyAg
ICAgICAgdm9pZCByZXBsYWNlKEpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcG9wKCk7CiAgICAg
ICAgIAogICAgICAgICB2b2lkIG1hcmsoKTsKQEAgLTEyOSw2ICsxMzAsMTIgQEAgaW5saW5lIHZv
aWQgU2NvcGVDaGFpbjo6cHVzaChKU09iamVjdCAqbwogICAgIF9ub2RlID0gbmV3IFNjb3BlQ2hh
aW5Ob2RlKF9ub2RlLCBvKTsKIH0KIAoraW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cmVwbGFjZShK
U09iamVjdCogbykKK3sKKyAgICBBU1NFUlQobyk7CisgICAgX25vZGUtPm9iamVjdCA9IG87Cit9
CisKIGlubGluZSB2b2lkIFNjb3BlQ2hhaW46OnBvcCgpCiB7CiAgICAgU2NvcGVDaGFpbk5vZGUg
Km9sZE5vZGUgPSBfbm9kZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9t
YXJrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluX21hcmsu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9tYXJrLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA2IEFwcGxlIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJzY29wZV9jaGFpbi5o
IgorI2luY2x1ZGUgIkFjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKworbmFtZXNw
YWNlIEtKUyB7CisKKyAgICBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKKyAgICB7Cisg
ICAgICAgIGZvciAoU2NvcGVDaGFpbk5vZGUgKm4gPSBfbm9kZTsgbjsgbiA9IG4tPm5leHQpIHsK
KyAgICAgICAgICAgIEpTT2JqZWN0ICpvID0gbi0+b2JqZWN0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBBbiBBY3RpdmF0aW9uSW1wIHRoYXQgaXMgb24gdGhlIGFjdGl2YXRpb24gc3Rh
Y2sgY2FuJ3QgaGF2ZSB0aGUKKyAgICAgICAgICAgIC8vIEpTb2JqZWN0OjptYXJrKCkgbWV0aG9k
IGNhbGxlZCBvbiBpdCwgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW4KKyAgICAgICAgICAgIC8v
IGVudHJ5IGluIGEgR0MgbWFyayBiaXRtYXAsIHNvIHdlIGNoZWNrIGhlcmUgd2hldGhlciBpdCBp
cyBvbiB0aGUKKyAgICAgICAgICAgIC8vIHN0YWNrIGFuZCBkaXJlY3RseSBjYWxsIHRoZSBwb3J0
aW9uIG9mIHRoZSBtYXJraW5nIGNvZGUgdGhhdCBpcworICAgICAgICAgICAgLy8gc3RpbGwgcmVs
ZXZhbnQuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvLT5pc0FjdGl2YXRpb25PYmpl
Y3QoKSAmJiBzdGF0aWNfY2FzdDxBY3RpdmF0aW9uSW1wKj4obyktPmlzT25TdGFjaygpKQorICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihvKS0+bWFya0NoaWxkcmVu
KCk7CisgICAgICAgICAgICBlbHNlIGlmICghby0+bWFya2VkKCkpCisgICAgICAgICAgICAgICAg
by0+bWFyaygpOworICAgICAgICB9CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6
IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyOTIxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMDgtMDEtMDYgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJs
b28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYSBuZXcgZm9yd2FyZGluZyBoZWFkZXIsIGJlY2F1c2UgQWN0aXZhdGlvbi5oIGhhcyBi
ZWVuIHNlcGFyYXRlZAorICAgICAgICBmcm9tIGZ1bmN0aW9uLmgKKworICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL2tqcy9BY3RpdmF0aW9uLmg6IEFkZGVkLgorCiAyMDA4LTAxLTA2ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyLgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMvQWN0aXZhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL0FjdGl2YXRp
b24uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMva2pzL0FjdGl2
YXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0FjdGl2YXRpb24uaD4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5Mjk1KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgtMDEtMDgg
IENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IGNhc2UgdGhh
dCBjYW1lIHVwIHdoZW4gZGV2ZWxvcGluZyB0aGUgQWN0aXZhdGlvbkltcCB0ZWFyLW9mZi4KKwor
ICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL3ZhcmRlY2wtcHJlc2VydmUtYXJndW1lbnRzLmpz
OgorICAgICAgICAqIGZhc3QvanMvdmFyZGVjbC1wcmVzZXJ2ZS1hcmd1bWVudHMtZXhwZWN0ZWQu
dHh0OgorCiAyMDA4LTAxLTA3ICBBbGljZSBMaXUgIDxhbGljZS5saXVAYXBwbGUuY29tPgogCiAg
ICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pz
L3ZhcmRlY2wtcHJlc2VydmUtYXJndW1lbnRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3ZhcmRlY2wtcHJlc2VydmUtYXJndW1lbnRzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMjkwNzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3ZhcmRlY2wtcHJlc2Vy
dmUtYXJndW1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBA
QCBQQVNTIGFyZ3VtZW50c0xlbmd0aE92ZXJyaWRlSW5uZXJCbG9jazMoCiBQQVNTICdvYmplY3Qn
IGlzICdvYmplY3QnCiBQQVNTIDcgaXMgNwogUEFTUyBhcmd1bWVudHNMZW5ndGhPdmVycmlkZUlu
bmVyQmxvY2szKCdhJywnYicpIGlzIDIKK1BBU1MgYXJndW1lbnRzVGVhck9mZjEoKSBpcyAyCiBQ
QVNTIHR5cGVvZiB1bmRlZmluZWQgaXMgJ3VuZGVmaW5lZCcKIFBBU1MgJ3VuZGVmaW5lZCcgaXMg
J3VuZGVmaW5lZCcKIFBBU1MgdHlwZW9mIGFyZ3VtZW50cyBpcyAnb2JqZWN0JwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvdmFyZGVjbC1wcmVzZXJ2ZS1hcmd1bWVudHMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvdmFyZGVjbC1wcmVz
ZXJ2ZS1hcmd1bWVudHMuanMJKHJldmlzaW9uIDI5MDc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZXNvdXJjZXMvdmFyZGVjbC1wcmVzZXJ2ZS1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTExMSw2ICsxMTEsMjQgQEAgZnVuY3Rpb24gYXJndW1lbnRzTGVuZ3RoT3ZlcnJpZGVJbm5l
ckJsbwogICByZXR1cm4gYXJnc2xlbjsKIH0KIAorZnVuY3Rpb24gYXJndW1lbnRzVGVhck9mZjEo
KQoreworICAgIHJldHVybiBhcmd1bWVudHNUZWFyT2ZmMigyKTsKK30KKworZnVuY3Rpb24gYXJn
dW1lbnRzVGVhck9mZjIoYikKK3sKKyAgICB2YXIgdiA9IGI7CisgICAgdmFyIHcgPSBhcmd1bWVu
dHNUZWFyT2ZmMS5hcmd1bWVudHM7CisgICAgYXJndW1lbnRzVGVhck9mZjMoMyk7CisgICAgcmV0
dXJuIHY7Cit9CisKK2Z1bmN0aW9uIGFyZ3VtZW50c1RlYXJPZmYzKGMpCit7CisgICAgdmFyIHYg
PSBjOworfQorCiBzaG91bGRCZSgiYXJndW1lbnRzTGVuZ3RoKCkiLCAiMCIpOwogc2hvdWxkQmUo
ImFyZ3VtZW50c0xlbmd0aCgxKSIsICIxIik7CiBzaG91bGRCZSgiYXJndW1lbnRzTGVuZ3RoKCdh
JywnYicpIiwgIjIiKTsKQEAgLTE0Miw2ICsxNjAsOCBAQCBzaG91bGRCZSgiYXJndW1lbnRzTGVu
Z3RoT3ZlcnJpZGVJbm5lckJsCiBzaG91bGRCZSgiYXJndW1lbnRzTGVuZ3RoT3ZlcnJpZGVJbm5l
ckJsb2NrMygxKSIsICIxIik7CiBzaG91bGRCZSgiYXJndW1lbnRzTGVuZ3RoT3ZlcnJpZGVJbm5l
ckJsb2NrMygnYScsJ2InKSIsICIyIik7CiAKK3Nob3VsZEJlKCJhcmd1bWVudHNUZWFyT2ZmMSgp
IiwgIjIiKTsKKwogLy8gdGhpcyB0ZXN0cyB0aGF0IGJlaGF2aW91ciBzaG91bGQgcGVyc2lzdHMg
Zm9yCiAvLyB0aGUgcHJvZ3JhbSBzb3VyY2UgZWxlbWVudHMgYWxzbwogc2hvdWxkQmUoInR5cGVv
ZiB1bmRlZmluZWQiLCAiJ3VuZGVmaW5lZCciKTsK
</data>
<flag name="review"
          id="8007"
          type_id="1"
          status="-"
          setter="zwarich"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18346</attachid>
            <date>2008-01-09 00:51:31 -0800</date>
            <delta_ts>2008-01-11 16:11:36 -0800</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>activation.patch</filename>
            <type>text/plain</type>
            <size>34124</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5MjE2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMDgtMDEtMDYgIENhbWVyb24g
WndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3B0aW1pemVkIEFjdGl2YXRpb25JbXAgYWxsb2Nh
dGlvbiwgc28gdGhhdCBhY3RpdmF0aW9uIHJlY29yZHMgYXJlIG5vdworICAgICAgICBmaXJzdCBh
bGxvY2F0ZWQgb24gYW4gZXhwbGljaXRseSBtYW5hZ2VkIHN0YWNrIGFuZCBvbmx5IGhlYXAgYWxs
b2NhdGVkCisgICAgICAgIHdoZW4gbmVjZXNzYXJ5LiBSb3VnaGx5IGEgNSUgaW1wcm92ZW1lbnQg
b24gU3VuU3BpZGVyLCBhbmQgYSBsYXJnZXIKKyAgICAgICAgaW1wcm92ZW1lbnQgb24gYmVuY2ht
YXJrcyB0aGF0IHVzZSBtb3JlIGZ1bmN0aW9uIGNhbGxzLgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBranMvQWN0aXZhdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRhdGE6
OkFjdGl2YXRpb25EYXRhKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6QWN0aXZhdGlv
bkltcCk6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OmNsYXNzSW5mbyk6CisgICAgICAg
IChLSlM6OkFjdGl2YXRpb25JbXA6OmlzQWN0aXZhdGlvbk9iamVjdCk6CisgICAgICAgIChLSlM6
OkFjdGl2YXRpb25JbXA6OmlzT25TdGFjayk6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6
OmQpOgorICAgICAgICAoS0pTOjpTdGFja0FjdGl2YXRpb246OlN0YWNrQWN0aXZhdGlvbik6Cisg
ICAgICAgICoga2pzL0V4ZWNTdGF0ZS5jcHA6CisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6RXhl
Y1N0YXRlKToKKyAgICAgICAgKEtKUzo6RXhlY1N0YXRlOjp+RXhlY1N0YXRlKToKKyAgICAgICAg
KiBranMvRXhlY1N0YXRlLmg6CisgICAgICAgIChLSlM6OkV4ZWNTdGF0ZTo6cmVwbGFjZVNjb3Bl
Q2hhaW5Ub3ApOgorICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OnNldEFjdGl2YXRpb25PYmplY3Qp
OgorICAgICAgICAoS0pTOjpFeGVjU3RhdGU6OnNldExvY2FsU3RvcmFnZSk6CisgICAgICAgICog
a2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnJl
c2V0KToKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnB1c2hBY3RpdmF0aW9uKToKKyAg
ICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OmNoZWNrQWN0aXZhdGlvbkNvdW50KToKKyAgICAg
ICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnBvcEFjdGl2YXRpb25IZWxwZXIpOgorICAgICAgICAo
S0pTOjpKU0dsb2JhbE9iamVjdDo6cG9wQWN0aXZhdGlvbik6CisgICAgICAgIChLSlM6OkpTR2xv
YmFsT2JqZWN0Ojp0ZWFyT2ZmQWN0aXZhdGlvbik6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICoga2pzL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEtKUzo6
SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGE6OkpTVmFyaWFibGVPYmplY3RE
YXRhKToKKyAgICAgICAgKEtKUzo6SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdCk6
CisgICAgICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25JbXA6
OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OkFjdGl2YXRp
b25JbXApOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1wOjp+QWN0aXZhdGlvbkltcCk6Cisg
ICAgICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OmluaXQpOgorICAgICAgICAoS0pTOjpBY3RpdmF0
aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1w
OjptYXJrSGVscGVyKToKKyAgICAgICAgKEtKUzo6QWN0aXZhdGlvbkltcDo6bWFyayk6CisgICAg
ICAgIChLSlM6OkFjdGl2YXRpb25JbXA6OkFjdGl2YXRpb25EYXRhOjpBY3RpdmF0aW9uRGF0YSk6
CisgICAgICAgIChLSlM6Okdsb2JhbEZ1bmNJbXA6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAg
KiBranMvZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAoS0pT
OjpQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKEtKUzo6UG9zdERlY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlByZUluY1Jlc29sdmVOb2RlOjpl
dmFsdWF0ZSk6CisgICAgICAgIChLSlM6OlByZURlY1Jlc29sdmVOb2RlOjpldmFsdWF0ZSk6Cisg
ICAgICAgIChLSlM6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAo
S0pTOjpBc3NpZ25SZXNvbHZlTm9kZTo6ZXZhbHVhdGUpOgorICAgICAgICAoS0pTOjpXaXRoTm9k
ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChLSlM6OlRyeU5vZGU6OmV4ZWN1dGUpOgorICAgICAgICAo
S0pTOjpGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEtK
Uzo6RnVuY0V4cHJOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgICoga2pzL29iamVjdC5oOgorICAg
ICAgICAqIGtqcy9zY29wZV9jaGFpbi5oOgorICAgICAgICAoS0pTOjpTY29wZUNoYWluOjpyZXBs
YWNlKToKKyAgICAgICAgKiBranMvc2NvcGVfY2hhaW5fbWFyay5oOiBBZGRlZC4KKyAgICAgICAg
KEtKUzo6U2NvcGVDaGFpbjo6bWFyayk6CisKIDIwMDgtMDEtMDYgIE5pa29sYXMgWmltbWVybWFu
biAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4uCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTU4
LDYgKzU1OCw4IEBACiAJCTcwNzNCRTNEMDU4MTI5MUUwMDVFRTJDOSAvKiBydW50aW1lX2FycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHJ1
bnRpbWVfYXJyYXkuaDsgcGF0aCA9IGJpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MEIxNkEyNjA1NjlBMTA5MDBEQjc1
NkQgLyogcnVudGltZV9vYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gcnVudGltZV9vYmplY3QuY3BwOyBwYXRoID0gYmluZGlu
Z3MvcnVudGltZV9vYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IH07CiAJCTcwQjE2QTI3MDU2OUExMDkwMERCNzU2RCAvKiBydW50aW1lX29iamVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBydW50aW1l
X29iamVjdC5oOyBwYXRoID0gYmluZGluZ3MvcnVudGltZV9vYmplY3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OworCQk3RTJDNkM5NTBEMzFDNkFCMDAyRDQ0RTIg
LyogQWN0aXZhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBY3RpdmF0
aW9uLmg7IHBhdGggPSBranMvQWN0aXZhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3RTJDNkM5ODBEMzFDNkI2MDAyRDQ0RTIgLyogc2NvcGVfY2hhaW5fbWFyay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzY29wZV9jaGFpbl9tYXJrLmg7IHBhdGggPSBr
anMvc2NvcGVfY2hhaW5fbWFyay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEFC
RjFERTA3MEI2MjhDMDBBM0FDMDUgLyogbnBydW50aW1lX2ltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBucHJ1bnRpbWVfaW1wbC5oOyBwYXRo
ID0gYmluZGluZ3MvbnBydW50aW1lX2ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQk5MzAzRjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93blB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzAzRjU2OTA5OTExOTAwMDBBRDcxQjggLyogTm9uY29weWFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9uY29weWFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyNCw2ICs3MjYsOCBAQAogCQkwODY3RDY5MUZFODQwMjhG
QzAyQUFDMDcgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTdFMkM2Qzk4MEQzMUM2QjYwMDJENDRFMiAvKiBzY29wZV9jaGFp
bl9tYXJrLmggKi8sCisJCQkJN0UyQzZDOTUwRDMxQzZBQjAwMkQ0NEUyIC8qIEFjdGl2YXRpb24u
aCAqLywKIAkJCQk5MzdCNjNDQzA5RTc2NkQyMDBBNjcxREQgLyogRGVyaXZlZFNvdXJjZXMubWFr
ZSAqLywKIAkJCQkxNEI4RUNBNjBBNTY1Mzk4MDA2MkJFNTQgLyogSmF2YVNjcmlwdENvcmUuZXhw
ICovLAogCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZp
eC5oICovLApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgSmF2
YVNjcmlwdENvcmUva2pzL0FjdGl2YXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJp
Y2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3Mg
T3Jsb3ZpY2gKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQWN0aXZhdGlvbl9oCisjZGVmaW5lIEFj
dGl2YXRpb25faAorCisjaW5jbHVkZSAiRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiSlNWYXJpYWJs
ZU9iamVjdC5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorCituYW1lc3BhY2UgS0pTIHsKKworICAg
IGNsYXNzIEFyZ3VtZW50czsKKyAgICBjbGFzcyBGdW5jdGlvbkltcDsKKyAgICBjbGFzcyBTdGFj
a0FjdGl2YXRpb247CisKKyAgICBjbGFzcyBBY3RpdmF0aW9uSW1wIDogcHVibGljIEpTVmFyaWFi
bGVPYmplY3QgeworICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisgICAgICAg
IGZyaWVuZCBjbGFzcyBTdGFja0FjdGl2YXRpb247CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3Ry
dWN0IEFjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3REYXRhIHsKKyAgICAg
ICAgICAgIEFjdGl2YXRpb25EYXRhKCkgOiBpc09uU3RhY2sodHJ1ZSksIGxlZnRSZWxpYyhmYWxz
ZSkgeyB9CisgICAgICAgICAgICBBY3RpdmF0aW9uRGF0YShjb25zdCBBY3RpdmF0aW9uRGF0YSYp
OworCisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7CisgICAgICAgICAgICBGdW5jdGlvbklt
cCogZnVuY3Rpb247CisgICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50c09iamVjdDsKKwor
ICAgICAgICAgICAgYm9vbCBpc09uU3RhY2sgOiAxOworICAgICAgICAgICAgYm9vbCBsZWZ0UmVs
aWMgOiAxOworICAgICAgICB9OworCisgICAgcHVibGljOgorICAgICAgICBBY3RpdmF0aW9uSW1w
KCkgeyB9CisgICAgICAgIEFjdGl2YXRpb25JbXAoY29uc3QgQWN0aXZhdGlvbkRhdGEmLCBib29s
KTsKKworICAgICAgICB2aXJ0dWFsIH5BY3RpdmF0aW9uSW1wKCk7CisKKyAgICAgICAgdm9pZCBp
bml0KEV4ZWNTdGF0ZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVl
KiwgaW50IGF0dHIgPSBOb25lKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKworICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFyaygpOworICAgICAgICB2b2lkIG1hcmtDaGlsZHJlbigpOworCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0FjdGl2YXRpb25PYmplY3QoKSB7IHJldHVybiB0cnVlOyB9CisgICAg
CisgICAgICAgIGJvb2wgaXNPblN0YWNrKCkgY29uc3QgeyByZXR1cm4gZCgpLT5pc09uU3RhY2s7
IH0KKyAgICAgICAgYm9vbCBuZWVkc1BvcCgpIGNvbnN0IHsgcmV0dXJuIGQoKS0+aXNPblN0YWNr
IHx8IGQoKS0+bGVmdFJlbGljOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgUHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0QXJndW1lbnRzR2V0dGVyKCk7CisgICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHZvaWQgY3JlYXRl
QXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSopOworICAgICAgICBBY3RpdmF0aW9uRGF0YSogZCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFjdGl2YXRpb25EYXRhKj4oSlNWYXJpYWJsZU9i
amVjdDo6ZCk7IH0KKyAgICB9OworCisgICAgY29uc3Qgc2l6ZV90IGFjdGl2YXRpb25TdGFja05v
ZGVTaXplID0gMzI7CisKKyAgICBzdHJ1Y3QgU3RhY2tBY3RpdmF0aW9uIHsKKyAgICAgICAgU3Rh
Y2tBY3RpdmF0aW9uKCkgeyBhY3RpdmF0aW9uU3RvcmFnZS5KU1ZhcmlhYmxlT2JqZWN0OjpkID0g
JmFjdGl2YXRpb25EYXRhU3RvcmFnZTsgfQorICAgICAgICBTdGFja0FjdGl2YXRpb24oY29uc3Qg
U3RhY2tBY3RpdmF0aW9uJik7CisgICAgICAKKyAgICAgICAgQWN0aXZhdGlvbkltcCBhY3RpdmF0
aW9uU3RvcmFnZTsKKyAgICAgICAgQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRhdGEgYWN0aXZh
dGlvbkRhdGFTdG9yYWdlOworICAgIH07CisKKyAgICBzdHJ1Y3QgQWN0aXZhdGlvblN0YWNrTm9k
ZSB7CisgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIHByZXY7CisgICAgICAgIFN0YWNrQWN0
aXZhdGlvbiBkYXRhW2FjdGl2YXRpb25TdGFja05vZGVTaXplXTsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCShyZXZpc2lv
biAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw5ICsyNSwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV4
ZWNTdGF0ZS5oIgogCisjaW5jbHVkZSAiQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgor
I2luY2x1ZGUgInNjb3BlX2NoYWluX21hcmsuaCIKIAogbmFtZXNwYWNlIEtKUyB7CiAKQEAgLTEw
NSw3ICsxMDcsNyBAQCBFeGVjU3RhdGU6OkV4ZWNTdGF0ZShKU0dsb2JhbE9iamVjdCogZ2xvCiAg
ICAgLCBtX3N3aXRjaERlcHRoKDApIAogICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpCiB7
Ci0gICAgQWN0aXZhdGlvbkltcCogYWN0aXZhdGlvbiA9IG5ldyBBY3RpdmF0aW9uSW1wKHRoaXMp
OworICAgIEFjdGl2YXRpb25JbXAqIGFjdGl2YXRpb24gPSBnbG9iYWxPYmplY3QtPnB1c2hBY3Rp
dmF0aW9uKHRoaXMpOwogICAgIG1fYWN0aXZhdGlvbiA9IGFjdGl2YXRpb247CiAgICAgbV9sb2Nh
bFN0b3JhZ2UgPSAmYWN0aXZhdGlvbi0+bG9jYWxTdG9yYWdlKCk7CiAgICAgbV92YXJpYWJsZU9i
amVjdCA9IGFjdGl2YXRpb247CkBAIC0xMTUsNiArMTE3LDkgQEAgRXhlY1N0YXRlOjpFeGVjU3Rh
dGUoSlNHbG9iYWxPYmplY3QqIGdsbwogCiBFeGVjU3RhdGU6On5FeGVjU3RhdGUoKQogeworICAg
IGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBtX2FjdGl2YXRpb24tPm5lZWRzUG9w
KCkpCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5wb3BBY3RpdmF0aW9uKCk7CisgICAgCiAgICAg
bV9nbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFeGVjKG1fc2F2ZWRFeGVjKTsKIH0KIApJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0V4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9FeGVjU3RhdGUuaAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgbmFtZXNwYWNl
IEtKUyAgewogICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhbV9l
eGNlcHRpb247IH0KICAgICAgICAgCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hh
aW4oKSBjb25zdCB7IHJldHVybiBtX3Njb3BlQ2hhaW47IH0KKyAgICAgICAgdm9pZCByZXBsYWNl
U2NvcGVDaGFpblRvcChKU09iamVjdCogbykgeyBtX3Njb3BlQ2hhaW4ucmVwbGFjZVRvcChvKTsg
fQogICAgICAgICAKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX3ZhcmlhYmxlT2JqZWN0OyB9CiAgICAgICAgIHZvaWQgc2V0VmFyaWFi
bGVPYmplY3QoSlNWYXJpYWJsZU9iamVjdCogdikgeyBtX3ZhcmlhYmxlT2JqZWN0ID0gdjsgfQpA
QCAtODcsNiArODgsNyBAQCBuYW1lc3BhY2UgS0pTICB7CiAgICAgICAgIEV4ZWNTdGF0ZSogc2F2
ZWRFeGVjKCkgeyByZXR1cm4gbV9zYXZlZEV4ZWM7IH0KICAgICAgICAgCiAgICAgICAgIEFjdGl2
YXRpb25JbXAqIGFjdGl2YXRpb25PYmplY3QoKSB7IHJldHVybiBtX2FjdGl2YXRpb247IH0KKyAg
ICAgICAgdm9pZCBzZXRBY3RpdmF0aW9uT2JqZWN0KEFjdGl2YXRpb25JbXAqIGEpIHsgbV9hY3Rp
dmF0aW9uID0gYTsgfQogICAgICAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIHsgcmV0dXJuIG1fY29k
ZVR5cGU7IH0KICAgICAgICAgU2NvcGVOb2RlKiBzY29wZU5vZGUoKSB7IHJldHVybiBtX3Njb3Bl
Tm9kZTsgfQogICAgICAgICBGdW5jdGlvbkltcCogZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2Z1bmN0aW9uOyB9CkBAIC0xMTIsNiArMTE0LDcgQEAgbmFtZXNwYWNlIEtKUyAgewogICAgICAg
ICBjb25zdCBMaXN0JiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqbV9lbXB0eUxpc3Q7IH0K
IAogICAgICAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSgpIHsgcmV0dXJuICptX2xvY2Fs
U3RvcmFnZTsgfQorICAgICAgICB2b2lkIHNldExvY2FsU3RvcmFnZShMb2NhbFN0b3JhZ2UqIHMp
IHsgbV9sb2NhbFN0b3JhZ2UgPSBzOyB9CiAKICAgICAgICAgLy8gVGhlc2UgYXJlIG9ubHkgdmFs
aWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBleGVjdXRlKCkuCiAgICAgICAgIENvbXBsVHlwZSBjb21w
bGV0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGxldGlvblR5cGU7IH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjkwNzkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCAoY3d6d2Fy
aWNoQHV3YXRlcmxvby5jYSkKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjks
NyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCiAKLSNpbmNsdWRlICJTYXZlZEJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiQWN0aXZhdGlvbi5o
IgogI2luY2x1ZGUgImFycmF5X29iamVjdC5oIgogI2luY2x1ZGUgImJvb2xfb2JqZWN0LmgiCiAj
aW5jbHVkZSAiZGF0ZV9vYmplY3QuaCIKQEAgLTQwLDYgKzQxLDcgQEAKICNpbmNsdWRlICJudW1i
ZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAib2JqZWN0X29iamVjdC5oIgogI2luY2x1ZGUgInJlZ2V4
cF9vYmplY3QuaCIKKyNpbmNsdWRlICJTYXZlZEJ1aWx0aW5zLmgiCiAjaW5jbHVkZSAic3RyaW5n
X29iamVjdC5oIgogCiAjaWYgSEFWRShTWVNfVElNRV9IKQpAQCAtMjAwLDYgKzIwMiw5IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9ICZkKCktPmdsb2JhbEV4ZWM7CiAKKyAgICBkKCktPmFjdGl2YXRpb25zID0gbmV3IEFj
dGl2YXRpb25TdGFja05vZGU7CisgICAgZCgpLT5hY3RpdmF0aW9uQ291bnQgPSAwOworCiAgICAg
Ly8gUHJvdG90eXBlcwogICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcgRnVuY3Rpb25Q
cm90b3R5cGUoZXhlYyk7CiAgICAgZCgpLT5vYmplY3RQcm90b3R5cGUgPSBuZXcgT2JqZWN0UHJv
dG90eXBlKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwpAQCAtNDk0LDQgKzQ5OSw1NSBA
QCBFeGVjU3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKICAgICByZXR1cm4gJmQo
KS0+Z2xvYmFsRXhlYzsKIH0KIAorQWN0aXZhdGlvbkltcCogSlNHbG9iYWxPYmplY3Q6OnB1c2hB
Y3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZCgpLT5hY3RpdmF0aW9uQ291
bnQgPT0gYWN0aXZhdGlvblN0YWNrTm9kZVNpemUpIHsKKyAgICAgICAgQWN0aXZhdGlvblN0YWNr
Tm9kZSogbmV3Tm9kZSA9IG5ldyBBY3RpdmF0aW9uU3RhY2tOb2RlOworICAgICAgICBuZXdOb2Rl
LT5wcmV2ID0gZCgpLT5hY3RpdmF0aW9uczsKKyAgICAgICAgZCgpLT5hY3RpdmF0aW9ucyA9IG5l
d05vZGU7CisgICAgICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50ID0gMDsKKyAgICB9CisgICAgCisg
ICAgU3RhY2tBY3RpdmF0aW9uKiBzdGFja0VudHJ5ID0gJmQoKS0+YWN0aXZhdGlvbnMtPmRhdGFb
ZCgpLT5hY3RpdmF0aW9uQ291bnQrK107CisgICAgc3RhY2tFbnRyeS0+YWN0aXZhdGlvblN0b3Jh
Z2UuaW5pdChleGVjKTsKKyAgICAKKyAgICByZXR1cm4gJihzdGFja0VudHJ5LT5hY3RpdmF0aW9u
U3RvcmFnZSk7Cit9CisKK2lubGluZSB2b2lkIEpTR2xvYmFsT2JqZWN0OjpjaGVja0FjdGl2YXRp
b25Db3VudCgpCit7CisgICAgaWYgKCFkKCktPmFjdGl2YXRpb25Db3VudCkgeworICAgICAgICBB
Y3RpdmF0aW9uU3RhY2tOb2RlKiBwcmV2ID0gZCgpLT5hY3RpdmF0aW9ucy0+cHJldjsKKyAgICAg
ICAgZGVsZXRlIGQoKS0+YWN0aXZhdGlvbnM7CisgICAgICAgIGQoKS0+YWN0aXZhdGlvbnMgPSBw
cmV2OworICAgICAgICBkKCktPmFjdGl2YXRpb25Db3VudCA9IGFjdGl2YXRpb25TdGFja05vZGVT
aXplOworICAgIH0KK30KKwordm9pZCBKU0dsb2JhbE9iamVjdDo6cG9wQWN0aXZhdGlvbigpCit7
CisgICAgY2hlY2tBY3RpdmF0aW9uQ291bnQoKTsKKyAgICBkKCktPmFjdGl2YXRpb25zLT5kYXRh
Wy0tZCgpLT5hY3RpdmF0aW9uQ291bnRdLmFjdGl2YXRpb25EYXRhU3RvcmFnZS5sb2NhbFN0b3Jh
Z2Uuc2hyaW5rKDApOyAgICAKK30KKwordm9pZCBKU0dsb2JhbE9iamVjdDo6dGVhck9mZkFjdGl2
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBib29sIGxlYXZlUmVsaWMpCit7CisgICAgaWYgKGV4ZWMt
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAq
PihleGVjLT5hY3RpdmF0aW9uT2JqZWN0KCkpLT5pc09uU3RhY2soKSkgeworICAgICAgICBBY3Rp
dmF0aW9uSW1wKiBvbGRBY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KGV4
ZWMtPmFjdGl2YXRpb25PYmplY3QoKSk7CisgICAgICAgIEFjdGl2YXRpb25JbXAqIG5ld0FjdGl2
YXRpb24gPSBuZXcgQWN0aXZhdGlvbkltcCgqb2xkQWN0aXZhdGlvbi0+ZCgpLCBsZWF2ZVJlbGlj
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghbGVhdmVSZWxpYykgeworICAgICAgICAgICAgY2hl
Y2tBY3RpdmF0aW9uQ291bnQoKTsKKyAgICAgICAgICAgIGQoKS0+YWN0aXZhdGlvbkNvdW50LS07
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9sZEFjdGl2YXRpb24tPmQoKS0+bG9jYWxT
dG9yYWdlLnNocmluaygwKTsKKyAgICAgICAgCisgICAgICAgIGV4ZWMtPnNldEFjdGl2YXRpb25P
YmplY3QobmV3QWN0aXZhdGlvbik7CisgICAgICAgIGV4ZWMtPnNldFZhcmlhYmxlT2JqZWN0KG5l
d0FjdGl2YXRpb24pOworICAgICAgICBleGVjLT5zZXRMb2NhbFN0b3JhZ2UoJihuZXdBY3RpdmF0
aW9uLT5sb2NhbFN0b3JhZ2UoKSkpOworICAgICAgICBleGVjLT5yZXBsYWNlU2NvcGVDaGFpblRv
cChuZXdBY3RpdmF0aW9uKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNj
cmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDggQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKKyAgICBjbGFzcyBBY3RpdmF0aW9uSW1wOworICAg
IGNsYXNzIEFjdGl2YXRpb25TdGFja05vZGU7CiAgICAgY2xhc3MgQXJyYXlPYmplY3RJbXA7CiAg
ICAgY2xhc3MgQXJyYXlQcm90b3R5cGU7CiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdEltcDsKQEAg
LTEyOCw2ICsxMzAsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIE5hdGl2ZUVycm9y
UHJvdG90eXBlKiBVUklFcnJvclByb3RvdHlwZTsKIAogICAgICAgICAgICAgU3ltYm9sVGFibGUg
aW5saW5lU3ltYm9sVGFibGU7CisKKyAgICAgICAgICAgIEFjdGl2YXRpb25TdGFja05vZGUqIGFj
dGl2YXRpb25zOworICAgICAgICAgICAgc2l6ZV90IGFjdGl2YXRpb25Db3VudDsKICAgICAgICAg
fTsKIAogICAgIHB1YmxpYzoKQEAgLTIyNyw2ICsyMzIsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIGFsbG93c0FjY2Vzc0Zyb20oY29uc3QgSlNHbG9iYWxPYmpl
Y3QqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICAgICAgQWN0aXZhdGlvbkltcCogcHVz
aEFjdGl2YXRpb24oRXhlY1N0YXRlKik7CisgICAgICAgIHZvaWQgcG9wQWN0aXZhdGlvbigpOwor
ICAgICAgICB2b2lkIHRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSosIGJvb2wgbWFya0FzUmVs
aWMgPSBmYWxzZSk7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGluaXQoKTsKICAgICAg
ICAgCkBAIC0yMzUsNiArMjQ0LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIGJvb2wgY2hl
Y2tUaW1lb3V0KCk7CiAgICAgICAgIHZvaWQgcmVzZXRUaW1lb3V0Q2hlY2soKTsKIAorICAgICAg
ICB2b2lkIGNoZWNrQWN0aXZhdGlvbkNvdW50KCk7CisKICAgICAgICAgc3RhdGljIEpTR2xvYmFs
T2JqZWN0KiBzX2hlYWQ7CiAgICAgfTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTVmFy
aWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNWYXJpYWJs
ZU9iamVjdC5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU1Zhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDggQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICAgIC8vIHdpdGhvdXQgaW5jcmVhc2luZyB0aGVpciBvd24gc2l6ZSAoc2luY2Ug
dGhlcmUncyBhIGhhcmQgbGltaXQgb24gdGhlCiAgICAgICAgIC8vIHNpemUgb2YgYSBKU0NlbGwp
LgogICAgICAgICBzdHJ1Y3QgSlNWYXJpYWJsZU9iamVjdERhdGEgeworICAgICAgICAgICAgSlNW
YXJpYWJsZU9iamVjdERhdGEoKSB7IH0KKwogICAgICAgICAgICAgSlNWYXJpYWJsZU9iamVjdERh
dGEoU3ltYm9sVGFibGUqIHMpCiAgICAgICAgICAgICAgICAgOiBzeW1ib2xUYWJsZShzKSAvLyBT
dWJjbGFzcyBvd25zIHRoaXMgcG9pbnRlci4KICAgICAgICAgICAgIHsKQEAgLTY2LDYgKzY4LDgg
QEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgfTsKIAorICAgICAgICBKU1ZhcmlhYmxlT2Jq
ZWN0KCkgeyB9CisKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdChKU1ZhcmlhYmxlT2JqZWN0RGF0
YSogZGF0YSkKICAgICAgICAgICAgIDogZChkYXRhKSAvLyBTdWJjbGFzcyBvd25zIHRoaXMgcG9p
bnRlci4KICAgICAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAy
OTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJmdW5jdGlv
bi5oIgogCisjaW5jbHVkZSAiQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWNTdGF0ZS5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCkBAIC04NCwx
MiArODUsMTMgQEAgSlNWYWx1ZSogRnVuY3Rpb25JbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZQogSlNW
YWx1ZSogRnVuY3Rpb25JbXA6OmFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7CiAgIEZ1bmN0aW9uSW1wKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25J
bXAqPihzbG90LnNsb3RCYXNlKCkpOwotICBFeGVjU3RhdGUqIGUgPSBleGVjOwotICB3aGlsZSAo
ZSkgewotICAgIGlmIChlLT5mdW5jdGlvbigpID09IHRoaXNPYmopCisgIAorICBmb3IgKEV4ZWNT
dGF0ZSogZSA9IGV4ZWM7IGU7IGUgPSBlLT5jYWxsaW5nRXhlY1N0YXRlKCkpCisgICAgaWYgKGUt
PmZ1bmN0aW9uKCkgPT0gdGhpc09iaikgeworICAgICAgZS0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT50ZWFyT2ZmQWN0aXZhdGlvbihlLCBlID09IGV4ZWMpOwogICAgICAgcmV0dXJuIGUtPmFjdGl2
YXRpb25PYmplY3QoKS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgZSA9IGUtPmNhbGxp
bmdFeGVjU3RhdGUoKTsKLSAgfQorICAgIH0KKyAgCiAgIHJldHVybiBqc051bGwoKTsKIH0KIApA
QCAtMzQwLDYgKzM0MiwyNiBAQCBib29sIEFyZ3VtZW50czo6ZGVsZXRlUHJvcGVydHkoRXhlY1N0
YXRlCiAKIGNvbnN0IENsYXNzSW5mbyBBY3RpdmF0aW9uSW1wOjppbmZvID0geyAiQWN0aXZhdGlv
biIsIDAsIDAgfTsKIAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkltcChjb25zdCBBY3RpdmF0
aW9uRGF0YSYgb2xkRGF0YSwgYm9vbCBsZWF2ZVJlbGljKQoreworICAgIEpTVmFyaWFibGVPYmpl
Y3Q6OmQgPSBuZXcgQWN0aXZhdGlvbkRhdGEob2xkRGF0YSk7CisgICAgZCgpLT5sZWZ0UmVsaWMg
PSBsZWF2ZVJlbGljOworfQorCitBY3RpdmF0aW9uSW1wOjp+QWN0aXZhdGlvbkltcCgpCit7Cisg
ICAgaWYgKCFkKCktPmlzT25TdGFjaykKKyAgICAgICAgZGVsZXRlIGQoKTsKK30KKwordm9pZCBB
Y3RpdmF0aW9uSW1wOjppbml0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBkKCktPnN5bWJvbFRh
YmxlID0gJmV4ZWMtPmZ1bmN0aW9uKCktPmJvZHktPnN5bWJvbFRhYmxlKCk7CisgICAgZCgpLT5l
eGVjID0gZXhlYzsKKyAgICBkKCktPmZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKKyAgICBk
KCktPmFyZ3VtZW50c09iamVjdCA9IDA7Cit9CisKIEpTVmFsdWUqIEFjdGl2YXRpb25JbXA6OmFy
Z3VtZW50c0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgQWN0aXZhdGlvbkltcCogdGhpc09i
aiA9IHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihzbG90LnNsb3RCYXNlKCkpOwpAQCAtMzY3
LDYgKzM4OSwxNCBAQCBib29sIEFjdGl2YXRpb25JbXA6OmdldE93blByb3BlcnR5U2xvdChFCiAK
ICAgICAvLyBPbmx5IHJldHVybiB0aGUgYnVpbHQtaW4gYXJndW1lbnRzIG9iamVjdCBpZiBpdCB3
YXNuJ3Qgb3ZlcnJpZGRlbiBhYm92ZS4KICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpIHsKKyAgICAgICAgZm9yIChFeGVjU3RhdGUqIGUgPSBl
eGVjOyBlOyBlID0gZS0+Y2FsbGluZ0V4ZWNTdGF0ZSgpKQorICAgICAgICAgICAgaWYgKGUtPmZ1
bmN0aW9uKCkgPT0gZCgpLT5mdW5jdGlvbikgeworICAgICAgICAgICAgICAgIGUtPmR5bmFtaWNH
bG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZSwgZSA9PSBleGVjKTsKKyAgICAgICAg
ICAgICAgICBBY3RpdmF0aW9uSW1wKiBuZXdBY3RpdmF0aW9uID0gZS0+YWN0aXZhdGlvbk9iamVj
dCgpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKG5ld0FjdGl2YXRpb24sIG5ld0Fj
dGl2YXRpb24tPmdldEFyZ3VtZW50c0dldHRlcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXMsIGdldEFyZ3VtZW50c0dldHRlcigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzk4LDE1ICs0MjgsMjkgQEAgdm9pZCBBY3RpdmF0aW9uSW1wOjpwdXQoRXhlY1N0YXRlKiwg
Y29ucwogICAgIF9wcm9wLnB1dChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAoYXR0ciA9PSBO
b25lIHx8IGF0dHIgPT0gRG9udERlbGV0ZSkpOwogfQogCi12b2lkIEFjdGl2YXRpb25JbXA6Om1h
cmsoKQordm9pZCBBY3RpdmF0aW9uSW1wOjptYXJrQ2hpbGRyZW4oKQogewotICAgIEpTVmFyaWFi
bGVPYmplY3Q6Om1hcmsoKTsKKyAgICBMb2NhbFN0b3JhZ2UmIGxvY2FsU3RvcmFnZSA9IGQoKS0+
bG9jYWxTdG9yYWdlOworICAgIHNpemVfdCBzaXplID0gbG9jYWxTdG9yYWdlLnNpemUoKTsKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBKU1Zh
bHVlKiB2YWx1ZSA9IGxvY2FsU3RvcmFnZVtpXS52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghdmFsdWUtPm1hcmtlZCgpKQorICAgICAgICAgICAgdmFsdWUtPm1hcmsoKTsKKyAgICB9CiAg
ICAgCiAgICAgaWYgKCFkKCktPmZ1bmN0aW9uLT5tYXJrZWQoKSkKICAgICAgICAgZCgpLT5mdW5j
dGlvbi0+bWFyaygpOwotCisgICAgCiAgICAgaWYgKGQoKS0+YXJndW1lbnRzT2JqZWN0ICYmICFk
KCktPmFyZ3VtZW50c09iamVjdC0+bWFya2VkKCkpCi0gICAgICAgIGQoKS0+YXJndW1lbnRzT2Jq
ZWN0LT5tYXJrKCk7CisgICAgICAgIGQoKS0+YXJndW1lbnRzT2JqZWN0LT5tYXJrKCk7ICAgIAor
fQorCit2b2lkIEFjdGl2YXRpb25JbXA6Om1hcmsoKQoreworICAgIEpTT2JqZWN0OjptYXJrKCk7
CisgICAgbWFya0NoaWxkcmVuKCk7CiB9CiAKIHZvaWQgQWN0aXZhdGlvbkltcDo6Y3JlYXRlQXJn
dW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTQxNyw2ICs0NjEsMTUgQEAgdm9pZCBB
Y3RpdmF0aW9uSW1wOjpjcmVhdGVBcmd1bWVudHNPYmplYwogICAgIGQoKS0+YXJndW1lbnRzT2Jq
ZWN0ID0gbmV3IEFyZ3VtZW50cyhleGVjLCBkKCktPmV4ZWMtPmZ1bmN0aW9uKCksICpkKCktPmV4
ZWMtPmFyZ3VtZW50cygpLCB0aGlzKTsKIH0KIAorQWN0aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRh
dGE6OkFjdGl2YXRpb25EYXRhKGNvbnN0IEFjdGl2YXRpb25EYXRhJiBvbGQpCisgICAgOiBKU1Zh
cmlhYmxlT2JqZWN0RGF0YShvbGQpCisgICAgLCBleGVjKG9sZC5leGVjKQorICAgICwgZnVuY3Rp
b24ob2xkLmZ1bmN0aW9uKQorICAgICwgYXJndW1lbnRzT2JqZWN0KG9sZC5hcmd1bWVudHNPYmpl
Y3QpCisgICAgLCBpc09uU3RhY2soZmFsc2UpCit7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBHbG9iYWxGdW5jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIApAQCAtNjk2LDYgKzc0OSw5IEBAIEpTVmFsdWUqIEdsb2JhbEZ1bmNJbXA6OmNhbGxB
c0Z1bmN0aW9uKEUKICAgICAgICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYmIHRoaXNP
YmogIT0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpICYmIHRoaXNPYmotPmlzR2xvYmFsT2Jq
ZWN0KCk7CiAKICAgICAgICAgLy8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQKKyAgICAg
ICAgaWYgKCFzd2l0Y2hHbG9iYWwpCisgICAgICAgICAgICBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOworICAgICAgICAKICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0PEpTR2xv
YmFsT2JqZWN0Kj4odGhpc09iaikgOiBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAg
ICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMp
OwogICAgICAgICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDI5MDc5KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEFjdGl2YXRpb25JbXA7CiAgIGNsYXNz
IEZ1bmN0aW9uQm9keU5vZGU7CiAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOworICBjbGFzcyBK
U0dsb2JhbE9iamVjdDsKIAogICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uSW1wIDogcHVibGljIEpT
T2JqZWN0IHsKICAgcHVibGljOgpAQCAtMTM3LDUzICsxMzgsNiBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBtdXRhYmxlIEluZGV4VG9OYW1lTWFwIGluZGV4VG9OYW1lTWFwOwogICB9OwogCi0gIGNs
YXNzIEFjdGl2YXRpb25JbXAgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7Ci0gIHByaXZhdGU6
Ci0gICAgdXNpbmcgSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGE7Ci0KLSAg
ICBzdHJ1Y3QgQWN0aXZhdGlvbkltcERhdGEgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdERhdGEg
ewotICAgICAgICBBY3RpdmF0aW9uSW1wRGF0YShFeGVjU3RhdGUqIGUpCi0gICAgICAgICAgICA6
IEpTVmFyaWFibGVPYmplY3REYXRhKCZlLT5mdW5jdGlvbigpLT5ib2R5LT5zeW1ib2xUYWJsZSgp
KQotICAgICAgICAgICAgLCBleGVjKGUpCi0gICAgICAgICAgICAsIGZ1bmN0aW9uKGUtPmZ1bmN0
aW9uKCkpIC8vIFN0b3JlIHRoaXMgcG9pbnRlciBmb3IgbWFya2luZywgdG8ga2VlcCBvdXIgc3lt
Ym9sIHRhYmxlIC8gc2NvcGUgYWxpdmUgYWZ0ZXIgZXhlYyBoYXMgZ29uZSBvdXQgb2Ygc2NvcGUu
Ci0gICAgICAgICAgICAsIGFyZ3VtZW50c09iamVjdCgwKQotICAgICAgICB7Ci0gICAgICAgIH0K
LQotICAgICAgICBFeGVjU3RhdGUqIGV4ZWM7Ci0gICAgICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlv
bjsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHNPYmplY3Q7Ci0gICAgfTsKLQotICBwdWJs
aWM6Ci0gICAgQWN0aXZhdGlvbkltcChFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogSlNWYXJp
YWJsZU9iamVjdChuZXcgQWN0aXZhdGlvbkltcERhdGEoZXhlYykpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgfkFjdGl2YXRpb25JbXAoKQotICAgIHsKLSAgICAgICAgZGVsZXRlIGQoKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFs
dWUsIGludCBhdHRyID0gTm9uZSk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Ci0KLSAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
OwotCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGlvbk9iamVjdCgpIHsgcmV0dXJuIHRydWU7
IH0KLQotICBwcml2YXRlOgotICAgIHN0YXRpYyBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBn
ZXRBcmd1bWVudHNHZXR0ZXIoKTsKLSAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1lbnRzR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCk7Ci0gICAgdm9pZCBjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKik7
Ci0gICAgQWN0aXZhdGlvbkltcERhdGEqIGQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxBY3RpdmF0
aW9uSW1wRGF0YSo+KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9Ci0gIH07Ci0KICAgY2xhc3MgR2xv
YmFsRnVuY0ltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAg
IEdsb2JhbEZ1bmNJbXAoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBpbnQgaSwgaW50
IGxlbiwgY29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25vZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZpc2lv
biAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyODEsMTAgKzEyODEsMTEgQEAgSlNWYWx1ZSAqUG9zdEluY1Jlc29sdmVOb2RlOjpldmFs
dWF0ZShFeAogICBBU1NFUlQoaXRlciAhPSBlbmQpOwogCiAgIFByb3BlcnR5U2xvdCBzbG90Owot
ICBKU09iamVjdCAqYmFzZTsKICAgZG8geyAKLSAgICBiYXNlID0gKml0ZXI7Ci0gICAgaWYgKGJh
c2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50LCBzbG90KSkgeworICAgIGlmICgoKml0
ZXIpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAgICAgLy8g
U2VlIHRoZSBjb21tZW50IGluIFBvc3RJbmNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoKS4KKyAgICAg
ICAgCisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gKml0ZXI7CiAgICAgICAgIEpTVmFsdWUqIHYg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGJhc2UsIG1faWRlbnQpLT50b0pTTnVtYmVyKGV4ZWMpOwog
ICAgICAgICBiYXNlLT5wdXQoZXhlYywgbV9pZGVudCwganNOdW1iZXIodi0+dG9OdW1iZXIoZXhl
YykgKyAxKSk7CiAgICAgICAgIHJldHVybiB2OwpAQCAtMTMzOCwxMCArMTMzOSwxMSBAQCBKU1Zh
bHVlICpQb3N0RGVjUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4CiAgIEFTU0VSVChpdGVyICE9IGVu
ZCk7CiAKICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIEpTT2JqZWN0ICpiYXNlOwogICBkbyB7IAot
ICAgIGJhc2UgPSAqaXRlcjsKLSAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1f
aWRlbnQsIHNsb3QpKSB7CisgICAgaWYgKCgqaXRlciktPmdldFByb3BlcnR5U2xvdChleGVjLCBt
X2lkZW50LCBzbG90KSkgeworICAgICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jl
c29sdmVOb2RlOjpldmFsdWF0ZSgpLgorICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGJhc2Ug
PSAqaXRlcjsKICAgICAgICAgSlNWYWx1ZSogdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwg
bV9pZGVudCktPnRvSlNOdW1iZXIoZXhlYyk7CiAgICAgICAgIGJhc2UtPnB1dChleGVjLCBtX2lk
ZW50LCBqc051bWJlcih2LT50b051bWJlcihleGVjKSAtIDEpKTsKICAgICAgICAgcmV0dXJuIHY7
CkBAIC0xNzUxLDEwICsxNzUzLDExIEBAIEpTVmFsdWUgKlByZUluY1Jlc29sdmVOb2RlOjpldmFs
dWF0ZShFeGUKICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKIAogICBQcm9wZXJ0eVNsb3Qgc2xvdDsK
LSAgSlNPYmplY3QgKmJhc2U7CiAgIGRvIHsgCi0gICAgYmFzZSA9ICppdGVyOwotICAgIGlmIChi
YXNlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICBpZiAoKCpp
dGVyKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKSB7CisgICAgICAgIC8v
IFNlZSB0aGUgY29tbWVudCBpbiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKCkuCisgICAg
ICAgIAorICAgICAgICBKU09iamVjdCogYmFzZSA9ICppdGVyOwogICAgICAgICBKU1ZhbHVlICp2
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBiYXNlLCBtX2lkZW50KTsKIAogICAgICAgICBkb3VibGUg
biA9IHYtPnRvTnVtYmVyKGV4ZWMpOwpAQCAtMTc5OCwxMCArMTgwMSwxMSBAQCBKU1ZhbHVlICpQ
cmVEZWNSZXNvbHZlTm9kZTo6ZXZhbHVhdGUoRXhlCiAgIEFTU0VSVChpdGVyICE9IGVuZCk7CiAK
ICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gIEpTT2JqZWN0ICpiYXNlOwogICBkbyB7IAotICAgIGJh
c2UgPSAqaXRlcjsKLSAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQs
IHNsb3QpKSB7CisgICAgaWYgKCgqaXRlciktPmdldFByb3BlcnR5U2xvdChleGVjLCBtX2lkZW50
LCBzbG90KSkgeworICAgICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jlc29sdmVO
b2RlOjpldmFsdWF0ZSgpLgorICAgICAgICAKKyAgICAgICAgSlNPYmplY3QqIGJhc2UgPSAqaXRl
cjsKICAgICAgICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgYmFzZSwgbV9pZGVu
dCk7CiAKICAgICAgICAgZG91YmxlIG4gPSB2LT50b051bWJlcihleGVjKTsKQEAgLTMyMjgsOCAr
MzIzMiwxMiBAQCBKU1ZhbHVlICpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmV2YWx1YXRlCiAgIEpT
T2JqZWN0ICpiYXNlOwogICBkbyB7IAogICAgIGJhc2UgPSAqaXRlcjsKLSAgICBpZiAoYmFzZS0+
Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRlbnQsIHNsb3QpKQorICAgIGlmIChiYXNlLT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgbV9pZGVudCwgc2xvdCkpIHsKKyAgICAgIC8vIFNlZSB0aGUgY29t
bWVudCBpbiBQb3N0SW5jUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKCkuCisgICAgICAKKyAgICAgIGJh
c2UgPSAqaXRlcjsKICAgICAgIGdvdG8gZm91bmQ7CisgICAgfQogCiAgICAgKytpdGVyOwogICB9
IHdoaWxlIChpdGVyICE9IGVuZCk7CkBAIC0zMjY1LDggKzMyNzMsMTIgQEAgSlNWYWx1ZSAqQXNz
aWduUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZQogICBKU09iamVjdCAqYmFzZTsKICAgZG8geyAK
ICAgICBiYXNlID0gKml0ZXI7Ci0gICAgaWYgKGJhc2UtPmdldFByb3BlcnR5U2xvdChleGVjLCBt
X2lkZW50LCBzbG90KSkKKyAgICBpZiAoYmFzZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG1faWRl
bnQsIHNsb3QpKSB7CisgICAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gUG9zdEluY1Jlc29sdmVO
b2RlOjpldmFsdWF0ZSgpLgorICAgICAgCisgICAgICBiYXNlID0gKml0ZXI7CiAgICAgICBnb3Rv
IGZvdW5kOworICAgIH0KIAogICAgICsraXRlcjsKICAgfSB3aGlsZSAoaXRlciAhPSBlbmQpOwpA
QCAtMzk5Nyw2ICs0MDA5LDcgQEAgSlNWYWx1ZSogV2l0aE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRl
ICpleAogICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgSlNPYmplY3QgKm8gPSB2LT50b09iamVjdChl
eGVjKTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCisgIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3Qo
KS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgIGV4ZWMtPnB1c2hTY29wZShvKTsKICAgSlNW
YWx1ZSogdmFsdWUgPSBzdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgIGV4ZWMtPnBvcFNjb3Bl
KCk7CkBAIC00MTk1LDYgKzQyMDgsNyBAQCBKU1ZhbHVlKiBUcnlOb2RlOjpleGVjdXRlKEV4ZWNT
dGF0ZSAqZXhlCiAgIGlmIChjYXRjaEJsb2NrICYmIGV4ZWMtPmNvbXBsZXRpb25UeXBlKCkgPT0g
VGhyb3cpIHsKICAgICBKU09iamVjdCogb2JqID0gbmV3IEpTT2JqZWN0OwogICAgIG9iai0+cHV0
KGV4ZWMsIGV4Y2VwdGlvbklkZW50LCByZXN1bHQsIERvbnREZWxldGUpOworICAgIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CiAgICAgZXhlYy0+
cHVzaFNjb3BlKG9iaik7CiAgICAgcmVzdWx0ID0gY2F0Y2hCbG9jay0+ZXhlY3V0ZShleGVjKTsK
ICAgICBleGVjLT5wb3BTY29wZSgpOwpAQCAtNDM1Nyw2ICs0MzcxLDkgQEAgdm9pZCBGdW5jdGlv
bkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpbwogICAgICAgICBtX2luaXRpYWxpemVkID0gdHJ1
ZTsKICAgICB9CiAKKyAgICBpZiAobV9mdW5jdGlvblN0YWNrLnNpemUoKSAhPSAwKQorICAgICAg
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2ZmQWN0aXZhdGlvbihleGVjKTsKKwog
ICAgIExvY2FsU3RvcmFnZSYgbG9jYWxTdG9yYWdlID0gZXhlYy0+dmFyaWFibGVPYmplY3QoKS0+
bG9jYWxTdG9yYWdlKCk7CiAgICAgCiAgICAgLy8gV2UgY2FuJ3QganVzdCByZXNpemUgbG9jYWxT
dG9yYWdlIGhlcmUgYmVjYXVzZSB0aGF0IHdvdWxkIHRlbXBvcmFyaWx5CkBAIC00NTY5LDYgKzQ1
ODYsOCBAQCB2b2lkIEZ1bmNFeHByTm9kZTo6YWRkUGFyYW1zKCkKIAogSlNWYWx1ZSAqRnVuY0V4
cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpCiB7CisgIGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+dGVhck9mZkFjdGl2YXRpb24oZXhlYyk7CisgIAogICBib29sIG5hbWVkID0g
IWlkZW50LmlzTnVsbCgpOwogICBKU09iamVjdCAqZnVuY3Rpb25TY29wZU9iamVjdCA9IDA7CiAK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0LmgJKHJldmlzaW9uIDI5MDc5KQorKysgSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsMTggKzU4MCw2IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LQotLy8gRklYTUU6IFB1dCB0aGlzIGZ1bmN0aW9uIGluIGEgc2VwYXJhdGUgZmlsZSBuYW1lZCBz
b21ldGhpbmcgbGlrZSBzY29wZV9jaGFpbl9tYXJrLmggLS0gY2FuJ3QgcHV0IGl0IGluIHNjb3Bl
X2NoYWluLmggc2luY2UgaXQgZGVwZW5kcyBvbiBKU09iamVjdC4KLQotaW5saW5lIHZvaWQgU2Nv
cGVDaGFpbjo6bWFyaygpCi17Ci0gICAgZm9yIChTY29wZUNoYWluTm9kZSAqbiA9IF9ub2RlOyBu
OyBuID0gbi0+bmV4dCkgewotICAgICAgICBKU09iamVjdCAqbyA9IG4tPm9iamVjdDsKLSAgICAg
ICAgaWYgKCFvLT5tYXJrZWQoKSkKLSAgICAgICAgICAgIG8tPm1hcmsoKTsKLSAgICB9Ci19Ci0K
IGlubGluZSB2b2lkIFNjb3BlQ2hhaW46OnJlbGVhc2UoKQogewogICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgb25seSBjYWxsZWQgYnkgZGVyZWYoKSwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9z
Y29wZV9jaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFp
bi5oCShyZXZpc2lvbiAyOTA3OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB2b2lkIGNsZWFyKCkgeyBkZXJlZigpOyBfbm9kZSA9IDA7IH0KICAgICAgICAgdm9pZCBwdXNo
KEpTT2JqZWN0ICopOwogICAgICAgICB2b2lkIHB1c2goY29uc3QgU2NvcGVDaGFpbiAmKTsKKyAg
ICAgICAgdm9pZCByZXBsYWNlVG9wKEpTT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgcG9wKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIG1hcmsoKTsKQEAgLTEyOSw2ICsxMzAsMTIgQEAgaW5saW5l
IHZvaWQgU2NvcGVDaGFpbjo6cHVzaChKU09iamVjdCAqbwogICAgIF9ub2RlID0gbmV3IFNjb3Bl
Q2hhaW5Ob2RlKF9ub2RlLCBvKTsKIH0KIAoraW5saW5lIHZvaWQgU2NvcGVDaGFpbjo6cmVwbGFj
ZVRvcChKU09iamVjdCogbykKK3sKKyAgICBBU1NFUlQobyk7CisgICAgX25vZGUtPm9iamVjdCA9
IG87Cit9CisKIGlubGluZSB2b2lkIFNjb3BlQ2hhaW46OnBvcCgpCiB7CiAgICAgU2NvcGVDaGFp
bk5vZGUgKm9sZE5vZGUgPSBfbm9kZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9j
aGFpbl9tYXJrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWlu
X21hcmsuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zY29wZV9jaGFpbl9t
YXJrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2IEFwcGxlIEluYy4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJzY29wZV9j
aGFpbi5oIgorI2luY2x1ZGUgIkFjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKwor
bmFtZXNwYWNlIEtKUyB7CisKKyAgICBpbmxpbmUgdm9pZCBTY29wZUNoYWluOjptYXJrKCkKKyAg
ICB7CisgICAgICAgIGZvciAoU2NvcGVDaGFpbk5vZGUqIG4gPSBfbm9kZTsgbjsgbiA9IG4tPm5l
eHQpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvID0gbi0+b2JqZWN0OworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBBbiBBY3RpdmF0aW9uSW1wIHRoYXQgaXMgb24gdGhlIGFjdGl2YXRp
b24gc3RhY2sgY2FuJ3QgaGF2ZSB0aGUKKyAgICAgICAgICAgIC8vIEpTT2JqZWN0OjptYXJrZWQo
KSBtZXRob2QgY2FsbGVkIG9uIGl0LCBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbgorICAgICAg
ICAgICAgLy8gZW50cnkgaW4gYSBHQyBtYXJrIGJpdG1hcCwgc28gd2UgY2hlY2sgaGVyZSB3aGV0
aGVyIGl0IGlzIG9uIHRoZQorICAgICAgICAgICAgLy8gc3RhY2sgYW5kIGRpcmVjdGx5IGNhbGwg
dGhlIHBvcnRpb24gb2YgdGhlIG1hcmtpbmcgY29kZSB0aGF0IGlzCisgICAgICAgICAgICAvLyBz
dGlsbCByZWxldmFudC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG8tPmlzQWN0aXZh
dGlvbk9iamVjdCgpICYmIHN0YXRpY19jYXN0PEFjdGl2YXRpb25JbXAqPihvKS0+aXNPblN0YWNr
KCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCo+KG8pLT5tYXJr
Q2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFvLT5tYXJrZWQoKSkKKyAgICAgICAg
ICAgICAgICBvLT5tYXJrKCk7CisgICAgICAgIH0KKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIEtK
UwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI5MjE2KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAwOC0wMS0wNiAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNo
QHV3YXRlcmxvby5jYT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBhIG5ldyBmb3J3YXJkaW5nIGhlYWRlciwgYmVjYXVzZSBBY3RpdmF0aW9u
LmggaGFzIGJlZW4gc2VwYXJhdGVkCisgICAgICAgIGZyb20gZnVuY3Rpb24uaAorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMva2pzL0FjdGl2YXRpb24uaDogQWRkZWQuCisKIDIwMDgtMDEt
MDYgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBPbGl2ZXIuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2tqcy9B
Y3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ranMv
QWN0aXZhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9r
anMvQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvQWN0aXZhdGlvbi5oPgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjkyOTUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAw
OC0wMS0wOCAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHRlc3Qg
Y2FzZSB0aGF0IGNhbWUgdXAgd2hlbiBkZXZlbG9waW5nIHRoZSBBY3RpdmF0aW9uSW1wIHRlYXIt
b2ZmLgorCisgICAgICAgICogZmFzdC9qcy9yZXNvdXJjZXMvdmFyZGVjbC1wcmVzZXJ2ZS1hcmd1
bWVudHMuanM6CisgICAgICAgICogZmFzdC9qcy92YXJkZWNsLXByZXNlcnZlLWFyZ3VtZW50cy1l
eHBlY3RlZC50eHQ6CisKIDIwMDgtMDEtMDcgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5j
b20+CiAKICAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvanMvdmFyZGVjbC1wcmVzZXJ2ZS1hcmd1bWVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvdmFyZGVjbC1wcmVzZXJ2ZS1hcmd1bWVudHMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAyOTA3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvdmFyZGVj
bC1wcmVzZXJ2ZS1hcmd1bWVudHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2
ICs1OSw3IEBAIFBBU1MgYXJndW1lbnRzTGVuZ3RoT3ZlcnJpZGVJbm5lckJsb2NrMygKIFBBU1Mg
J29iamVjdCcgaXMgJ29iamVjdCcKIFBBU1MgNyBpcyA3CiBQQVNTIGFyZ3VtZW50c0xlbmd0aE92
ZXJyaWRlSW5uZXJCbG9jazMoJ2EnLCdiJykgaXMgMgorUEFTUyBhcmd1bWVudHNUZWFyT2ZmMSgp
IGlzIDIKIFBBU1MgdHlwZW9mIHVuZGVmaW5lZCBpcyAndW5kZWZpbmVkJwogUEFTUyAndW5kZWZp
bmVkJyBpcyAndW5kZWZpbmVkJwogUEFTUyB0eXBlb2YgYXJndW1lbnRzIGlzICdvYmplY3QnCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy92YXJkZWNsLXByZXNlcnZlLWFyZ3Vt
ZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy92YXJk
ZWNsLXByZXNlcnZlLWFyZ3VtZW50cy5qcwkocmV2aXNpb24gMjkwNzkpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3Jlc291cmNlcy92YXJkZWNsLXByZXNlcnZlLWFyZ3VtZW50cy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDYgKzExMSwyNCBAQCBmdW5jdGlvbiBhcmd1bWVudHNMZW5ndGhPdmVy
cmlkZUlubmVyQmxvCiAgIHJldHVybiBhcmdzbGVuOwogfQogCitmdW5jdGlvbiBhcmd1bWVudHNU
ZWFyT2ZmMSgpCit7CisgICAgcmV0dXJuIGFyZ3VtZW50c1RlYXJPZmYyKDIpOworfQorCitmdW5j
dGlvbiBhcmd1bWVudHNUZWFyT2ZmMihiKQoreworICAgIHZhciB2ID0gYjsKKyAgICB2YXIgdyA9
IGFyZ3VtZW50c1RlYXJPZmYxLmFyZ3VtZW50czsKKyAgICBhcmd1bWVudHNUZWFyT2ZmMygzKTsK
KyAgICByZXR1cm4gdjsKK30KKworZnVuY3Rpb24gYXJndW1lbnRzVGVhck9mZjMoYykKK3sKKyAg
ICB2YXIgdiA9IGM7Cit9CisKIHNob3VsZEJlKCJhcmd1bWVudHNMZW5ndGgoKSIsICIwIik7CiBz
aG91bGRCZSgiYXJndW1lbnRzTGVuZ3RoKDEpIiwgIjEiKTsKIHNob3VsZEJlKCJhcmd1bWVudHNM
ZW5ndGgoJ2EnLCdiJykiLCAiMiIpOwpAQCAtMTQyLDYgKzE2MCw4IEBAIHNob3VsZEJlKCJhcmd1
bWVudHNMZW5ndGhPdmVycmlkZUlubmVyQmwKIHNob3VsZEJlKCJhcmd1bWVudHNMZW5ndGhPdmVy
cmlkZUlubmVyQmxvY2szKDEpIiwgIjEiKTsKIHNob3VsZEJlKCJhcmd1bWVudHNMZW5ndGhPdmVy
cmlkZUlubmVyQmxvY2szKCdhJywnYicpIiwgIjIiKTsKIAorc2hvdWxkQmUoImFyZ3VtZW50c1Rl
YXJPZmYxKCkiLCAiMiIpOworCiAvLyB0aGlzIHRlc3RzIHRoYXQgYmVoYXZpb3VyIHNob3VsZCBw
ZXJzaXN0cyBmb3IKIC8vIHRoZSBwcm9ncmFtIHNvdXJjZSBlbGVtZW50cyBhbHNvCiBzaG91bGRC
ZSgidHlwZW9mIHVuZGVmaW5lZCIsICIndW5kZWZpbmVkJyIpOwo=
</data>
<flag name="review"
          id="8008"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>