<?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>19865</bug_id>
          
          <creation_ts>2008-07-03 02:20:53 -0700</creation_ts>
          <short_desc>Sampling tool.</short_desc>
          <delta_ts>2008-07-23 15:41:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>85047</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-03 02:20:53 -0700</bug_when>
    <thetext>Add a sampling tool to the VM to count time in opcodes and within functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85048</commentid>
    <comment_count>1</comment_count>
      <attachid>22062</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-03 02:22:06 -0700</bug_when>
    <thetext>Created attachment 22062
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85053</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-03 04:44:40 -0700</bug_when>
    <thetext>A strawman question - cannot such information be obtained non-intrusively with dtrace dynamic probes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85055</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-03 05:09:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; A strawman question - cannot such information be obtained non-intrusively with
&gt; dtrace dynamic probes?

That&apos;s a good question – and one I should probably look into more, since I don&apos;t know dtrace that well.

Dumping bytecode may be more tricky using dtrace – (I don&apos;t know if dtrace can be used to trigger insertion of a call to a function within the process being traced) – though I guess it probably could extract sourcefile name &amp; line#, and bytecode could likely be dumped from a separate run.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85058</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-07-03 05:45:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; A strawman question - cannot such information be obtained non-intrusively with
&gt; dtrace dynamic probes?

Certainly not on platforms that don&apos;t have dtrace, such as Windows.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85064</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-03 06:27:11 -0700</bug_when>
    <thetext>&gt; Certainly not on platforms that don&apos;t have dtrace, such as Windows.

Which is also an interesting question – I have no idea whether Windows would be happy or not with my use of pthread.h!

My copy of XP just arrived today, and I think there is a threading abstraction in WTF? – I&apos;ll take a look at making sure this is Windows friendly.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85172</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-04 03:07:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Certainly not on platforms that don&apos;t have dtrace, such as Windows.

That&apos;s of course true, but since this information is not platform-dependent, it might be sufficient to have Mac-only tools for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85300</commentid>
    <comment_count>7</comment_count>
      <attachid>22062</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-06 19:46:46 -0700</bug_when>
    <thetext>Comment on attachment 22062
patch

Looks good!

There&apos;s a tab in the ChangeLog, so the patch can&apos;t be landed as-is.

I think the various OpcodeSampling functions should be defined as empty inlines when opcode sampling is off. That way we don&apos;t have to wrap every single call in a separate #if.

Any globals that are not used in the header don&apos;t really need to be static data members -- they can just be normal globals with internal linkage. This will allow more changes without changing the header. This includes opcodeCounts, 

     if (jsValues.size() &amp;&amp; (exec != 0)) {

In WebKit coding style this would just be &quot;&amp;&amp; exec&quot; without the != 0.

    #pragma unused(samplingLogger)

We don&apos;t use bare #pragma unused directives. We need to wrap that in a macro of some sort; maybe UNUSED_PARAM? But also, I don&apos;t understand the point of putting this particular into a local variable and then marking it unused. Why do we need the local variable?

    struct CodeBlockSample_t {

We do not use the &quot;_t&quot; suffix in classes defined in the WebKit project.

    typedef WTF::HashMap&lt;uint64_t, CodeBlockSample_t *&gt; CodeBlockSampleMap_t;

No space before the &quot;*&quot; in WebKit coding style.

    void* OpcodeSampling::sampledVPC = (void*)-1;

If you absolutely must use a special value here, please use reinterpret_cast rather than a C-style cast.

     CodeBlockSample_t* leftValue = *(CodeBlockSample_t**)left;
     CodeBlockSample_t* rightValue = *(CodeBlockSample_t**)right;

These should be const* and should use static_cast rather than C-style cast.

     if (leftValue-&gt;totalCount &lt; rightValue-&gt;totalCount)
         return 1;
     else if (leftValue-&gt;totalCount &gt; rightValue-&gt;totalCount)
         return -1;
     else
         return 0;

We don&apos;t do else after return in the WebKit coding style.

     // calcualtion shouldn&apos;t overflow provided length is less that 90,000 or so!

Typo: &quot;calcualtion&quot;.

    uint64_t fletcheresqueChecksum32(uint32_t *input, int length)

This should be marked static so it gets internal linkage. Also the &quot;*&quot; should be next to the type. And since this reads the input, it should be const uint32_t. Also, we normally just use unsigned for this sort of thing except in very unusual situations. The specific-sized variants aren&apos;t helpful since the code already relies on int being 32-bits.

    usleep(1000000 / DUMP_OPCODE_SAMPLING);

This technique seems economical but unnecessarily subtle. Could the frequency just be a separate macro instead?

    if (vPC != (void *)-1) {

The use of the magic value here would be better if it was a named constant.

    if (size &gt; 4096) {
        printf(&quot;Skipping CodeBlock: #%016llx (looks malformed)\n&quot;, hash);
    }
    else {

    if (codeOffset &lt; blockSample-&gt;size) {
        blockSample-&gt;vpcCounts[codeOffset]++;
    }

In WebKit coding style we don&apos;t put braces around single line if statement bodies. We also put the else on the same line as the closing brace.

    ptrdiff_t codeOffset = ((ptrdiff_t)(OpcodeSampling::sampledVPC) - (ptrdiff_t)(codeBlock-&gt;instructions.begin()))/sizeof(void*);

We use the C++ casts rather than the C-style casts.

    static const char* nonOpcodeSamplingNames[OpcodeSampling::numSamplingIDs - numOpcodeIDs] = {

This ought to have a const after the * too, since the array entries are const, not just the characters.

    inline const char* samplingNames(int index)

This should be marked static so it gets internal linkage.

         typedef enum {
             // all opcode ids are also valid sample ids.
             sampling_next = (op_end + 1), // This should come first.
             sampling_nativeCall,
             sampling_unknown // sampling_no_end MUST come at the end of the list.
         } SamplingID;

Normally you&apos;d just say enum SamplingID rather than typedef enum ... SamplingID.

    static void *sampledVPC;

Use &quot;void*&quot; instead of &quot;void *&quot;.

    static CodeBlock *sampledCodeBlock;

Use &quot;CodeBlock*&quot; instead of &quot;CodeBlock *&quot;.

I&apos;m going to say review- since there are some simple small things that could easily be done to make this match more of normal WebKit style, but I think it&apos;s almost suitable to land as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85301</commentid>
    <comment_count>8</comment_count>
      <attachid>22062</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-06 19:47:03 -0700</bug_when>
    <thetext>Comment on attachment 22062
patch

Oops, forgot. Marking review-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85547</commentid>
    <comment_count>9</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-09 10:54:00 -0700</bug_when>
    <thetext>Darin,

Thank you for the review – and the thorough comments.  Switching coding conventions can be tricky, but I really hoped I&apos;d done a better job than that – so I do apologize for leaving so many issues to be identified.

I&apos;m about to put up a new patch, which I hope should fix all the style bugs (as well as resolving the problem with using the tool within Safari).  I am going to have to take at least one more swing at this, since there are a couple of new design issues I need resolve before a final patch will be ready.

cheers,
G.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85551</commentid>
    <comment_count>10</comment_count>
      <attachid>22186</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-09 11:30:33 -0700</bug_when>
    <thetext>Created attachment 22186
[BROKEN] New implementation. (8% regression)

This patch gets the tool working in Safari, but degrades performance due to a leak – for Program/EvalCodeBlocks the CodeBlock destructor is being called, so code blocks are not removed from the globalObject&apos;s array.  Issues to resolve:


(1) Calling the correct destructors on CodeBlocks, with the CodeBlocks being ref-counted - possible solutions:

i) Add a virtual destructor to CodeBlock, so the correct destructor is called, or achieve similar effect (e.g. could check codeType in a non-virtual ~CodeBlock, and static_cast to ProgramCodeBlock to remove self from the globalObject.

ii) Don&apos;t inherit RefCounted at the CodeBlock level - i.e. make ProgramCodeBlock, EvalCodeBlock and a new FunctionCodeBlock multiple inherit from both CodeBlock and RefCounted.

iii) Flatten the inheritance hierarchy, remove Program/EvalCodeBlock, give CodeBlock a globalObject pointer (null in the case of function code).


(2) Machine::isOpcode / Machine:: getOpcode / Machine:: getOpcodeID have been made static, so that I can dump CodeBlock objects after execution.  Firstly, does this sound sensible?

* if so, I will need find an appropriate place to create and destroy the map (currently being leaked) – Machine::Machine and Machine::~Machine will presumably not be suitable – assuming that multiple machines may exist concurrently.

* if not, I guess I need dump the codeblocks no later than the machine is destroyed, so associate one OpcodeSampling object with each Machine, and dump opcodes with the corresponding machine is destructed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85665</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-07-10 15:01:47 -0700</bug_when>
    <thetext>&gt; (1) Calling the correct destructors on CodeBlocks, with the CodeBlocks being
&gt; ref-counted - possible solutions:
&gt; 
&gt; i) Add a virtual destructor to CodeBlock, so the correct destructor is called,
&gt; or achieve similar effect (e.g. could check codeType in a non-virtual
&gt; ~CodeBlock, and static_cast to ProgramCodeBlock to remove self from the
&gt; globalObject.
&gt; 
&gt; ii) Don&apos;t inherit RefCounted at the CodeBlock level - i.e. make
&gt; ProgramCodeBlock, EvalCodeBlock and a new FunctionCodeBlock multiple inherit
&gt; from both CodeBlock and RefCounted.
&gt; 
&gt; iii) Flatten the inheritance hierarchy, remove Program/EvalCodeBlock, give
&gt; CodeBlock a globalObject pointer (null in the case of function code).

We usually solve this issue with the RefCounted class by using virtual destructors. For example, the parse tree uses virtual destructors, as does the DOM in WebCore. So, that&apos;s probably the best solution along this path.

That said, I have to apologize for leading you a little astray here! I think there&apos;s a better solution, and I should have been more clear about it before.

A CodeBlock is the lazily generated portion of a ScopeNode. Therefore, the ScopeNode owns the CodeBlock. (There are three kinds of ScopeNode -- ProgramNode, EvalNode, and FunctionBodyNode -- corresponding to the three kinds of top-level code in JavaScript.) It&apos;s probably easiest to work within this model by hashing ScopeNodes, which are already refcounted, instead of CodeBlocks. (Each points to the other, so this is easy enough to do.)

Does that seem reasonable?

&gt; (2) Machine::isOpcode / Machine:: getOpcode / Machine:: getOpcodeID have been
&gt; made static, so that I can dump CodeBlock objects after execution.  Firstly,
&gt; does this sound sensible?
&gt; 
&gt; * if so, I will need find an appropriate place to create and destroy the map
&gt; (currently being leaked) – Machine::Machine and Machine::~Machine will
&gt; presumably not be suitable – assuming that multiple machines may exist
&gt; concurrently.
&gt; 
&gt; * if not, I guess I need dump the codeblocks no later than the machine is
&gt; destroyed, so associate one OpcodeSampling object with each Machine, and dump
&gt; opcodes with the corresponding machine is destructed.

Harumph. This is a little challenging.

I agree that the duplicate data structures are not ideal. Multiple machines are rare, though, and the data structures are small. My main concern is getting your code to work :).

My goal in tying the table to the machine was to make the machine a gateway to the table, which guaranteed that the table was appropriately initialized before being used. My secondary goal, I guess, was to give the table a clear lifetime.

I see two ways to solve this problem. One way is to use a shared table like you have. The appropriate startup hook would be initializeThreadingOnce(). There&apos;s no need for a shutdown hook. (BTW, in our coding style, &quot;m_&quot; stands for member and &quot;s_&quot; stands for &quot;static&quot;, so you would want to change m_ to s_ when doing this.) It&apos;s a little less elegant to rely on initializeThreadingOnce(), but that ship sailed long ago :).

Another way to solve this problem is to use an explicit hook for dumping sampled data, which provides an ExecState to dump with, instead of relying on an implicit destructor. I see two advantages to this solution: (1) You get a better dump and your code becomes simpler, since you can provide a real ExecState when dumping; (2) The machine&apos;s opcode tables, being non-global, are faster to access. (There&apos;s a substantial penalty for accessing globals in 32bit Mach-O frameworks.)

For example, in JavaScriptCore&apos;s Shell.cpp, jscmain could invoke the sampling dumper after execution. That would cover command-line SunSpider. In WebCore, with sampling enabled, maybe we would dump whenever the last webpage closed, or something like that.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86742</commentid>
    <comment_count>12</comment_count>
      <attachid>22454</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-23 10:14:26 -0700</bug_when>
    <thetext>Created attachment 22454
New, cleaned-up implementation - no known bugs, no regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86743</commentid>
    <comment_count>13</comment_count>
      <attachid>22455</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-23 10:16:38 -0700</bug_when>
    <thetext>Created attachment 22455
(sunspider results)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86782</commentid>
    <comment_count>14</comment_count>
      <attachid>22454</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-07-23 15:01:03 -0700</bug_when>
    <thetext>Comment on attachment 22454
New, cleaned-up implementation - no known bugs, no regressions.

This patch looks much improved. I have some minor comments, but I think you can land the patch as-is, and address these comments in a separate patch.

MACHINE_SAMPLING_callingNativeFunction:

We&apos;ve decided to use the word &quot;host&quot; rather than native to indicate functions built into the library.

I think you only added this call to op_call. You need to add it to op_construct, too.

I&apos;m worried about what happens if somebody adds an opcode but forgets to update the opcodeNames array. One way to prevent this would be to have a function with a switch statement, instead of an array. That way, the compiler would warn if not all the opcodes were covered by the switch. Another solution would be to ASSERT somewhere that the number of elements in the array was equal to the number of opcodes.

+            for (ScopeSampleRecordMap::iterator iter = m_scopeSampleMap-&gt;begin(); iter != m_scopeSampleMap-&gt;end(); ++iter)
+                delete iter-&gt;second;

There&apos;s a helper function for this: deleteAllValues.

+            delete m_scopeSampleMap;

There&apos;s a helper template for this: OwnPtr.

+ SAMPLING_TOOL_ENABLED

We have a specific style of macros -- USE, HAVE, etc. -- for #defines like this. I think &quot;ENABLE(SAMPLING_TOOL)&quot; would be most appropriate in this case. You can read more about these macros in wtf/Platform.h.

ScopeSampleRecord and SamplingTool should get their own files. Generally, we try to put each class in its own file.

+            ScopeSampleRecord* record = m_scopeSampleMap-&gt;get(codeBlock-&gt;ownerNode);
+            if (record)

You can move the declaration and assignment for &quot;record&quot; into the &quot;if()&quot;. This has the benefit of reducing the number of lines of code, and guaranteeing that you cannot use the pointer if it is null (because it&apos;s only in scope if it is not null).

+    const LineCountInfo *leftLineCount = reinterpret_cast&lt;const LineCountInfo *&gt;(left);

Lines like this should put the &quot;*&quot; next to the type name, not one space away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86788</commentid>
    <comment_count>15</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-07-23 15:41:22 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/JavaScriptCore.exp
Sending        JavaScriptCore/VM/Machine.cpp
Sending        JavaScriptCore/VM/Machine.h
Sending        JavaScriptCore/VM/Opcode.cpp
Sending        JavaScriptCore/VM/Opcode.h
Sending        JavaScriptCore/kjs/Shell.cpp
Sending        JavaScriptCore/kjs/nodes.cpp
Transmitting file data ........
Committed revision 35305.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22062</attachid>
            <date>2008-07-03 02:22:06 -0700</date>
            <delta_ts>2008-07-23 10:14:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_Opcodes_blocksampling.txt</filename>
            <type>text/plain</type>
            <size>19291</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzQ2NTUpCisrKyBXZWJLaXQv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMDgtMDctMDMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFNhbXBsaW5nIHRvb2wgdG8gYW5hbHl6ZSBjb3N0IG9mIGluc3RydWN0aW9uIGV4
ZWN1dGlvbiBhbmQKKyAgICAgICAgaWRlbnRpZnkgaG90IHJlZ2lvbnMgb2YgSlMgY29kZS4gIFN3
aXRjaGVzIERVTVBfT1BDT0RFX1NBTVBMSU5HCisgICAgICAgIGFuZCBEVU1QX0JMT0NLX1NBTVBM
SU5HIGluIE9wY29kZS5oIGVuYWJsZSB0aGUgdG9vbHMuCisKKyAgICAgICAgRFVNUF9CTE9DS19T
QU1QTElORyBpcyBub3QgZnVsbHkgc3RhYmxlIHVzZWQgd2l0aGluIFNhZmFyaSwKKwlCdXQgaXMg
dXNlZnVsIHJ1biBpbiBKYXZhU2NyaXB0Q29yZS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFZNL0NvZGVCbG9jay5jcHA6IEFsbG93IGR1bXAoKSBv
biBDb2RlQmxvY2sgd2l0aG91dCBhIHZhbGlkIEV4ZWNTdGF0ZS4KKyAgICAgICAgKiBWTS9NYWNo
aW5lLmNwcDogQWRkZWQgaG9va3MgZm9yIHNhbXBsaW5nIHRvb2wuCisgICAgICAgICogVk0vT3Bj
b2RlLmNwcDogQWRkZWQgdG9vbCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKiBWTS9PcGNvZGUu
aDogQWRkZWQgdG9vbCBpbnRlcmZhY2UuCisKIDIwMDgtMDYtMTcgIFRpbW90aHkgSGF0Y2hlciAg
PHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGEgdHlwZSB0byBEZWJ1Z2dlckNh
bGxGcmFtZSBzbyB0aGUgdW5kZXIgaW50ZXJmYWNlIGNhbgpJbmRleDogV2ViS2l0L0phdmFTY3Jp
cHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0phdmFTY3JpcHRD
b3JlL1ZNL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM0NjU1KQorKysgV2ViS2l0L0phdmFTY3Jp
cHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNyBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvCiAgICAgICAgIH0gd2hp
bGUgKGkgIT0gaWRlbnRpZmllcnMuc2l6ZSgpKTsKICAgICB9CiAKLSAgICBpZiAoanNWYWx1ZXMu
c2l6ZSgpKSB7CisgICAgaWYgKGpzVmFsdWVzLnNpemUoKSAmJiAoZXhlYyAhPSAwKSkgewogICAg
ICAgICBwcmludGYoIlxuQ29uc3RhbnRzOlxuIik7CiAgICAgICAgIHNpemVfdCBpID0gMDsKICAg
ICAgICAgZG8gewpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNT
dGF0ZSogZXhlYywgY28KICAgICAgICAgY2FzZSBvcF9sb2FkOiB7CiAgICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBsb2FkXHRcdCAlcywgJXNcdFx0XG4i
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCBjb25zdGFudE5hbWUoZXhlYywg
azAsIGpzVmFsdWVzW2swXSkuY19zdHIoKSk7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGxv
YWRcdFx0ICVzLCAlc1x0XHRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCks
IGV4ZWMgPyBjb25zdGFudE5hbWUoZXhlYywgazAsIGpzVmFsdWVzW2swXSkuY19zdHIoKSA6ICI/
Pz8iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbmV3
X29iamVjdDogewpAQCAtNTYyLDcgKzU2Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNT
dGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IGVycm9yVHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRd
IG5ld19lcnJvclx0ICVzLCAlZCwgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNf
c3RyKCksIGVycm9yVHlwZSwgY29uc3RhbnROYW1lKGV4ZWMsIGswLCBqc1ZhbHVlc1trMF0pLmNf
c3RyKCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBuZXdfZXJyb3JcdCAlcywgJWQsICVz
XG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCBlcnJvclR5cGUsIGV4ZWMg
PyBjb25zdGFudE5hbWUoZXhlYywgazAsIGpzVmFsdWVzW2swXSkuY19zdHIoKSA6ICI/Pz8iKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfanNyOiB7Cklu
ZGV4OiBXZWJLaXQvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNDY1NSkKKysr
IFdlYktpdC9KYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjczLDcgKzY3MywxMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBw
CiAgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShleGVjLCBwcm9ncmFtTm9kZS0+c291
cmNlVVJMKCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSk7CiAKICAgICBtX3JlZW50cnlEZXB0aCsr
OworI2lmIERVTVBfT1BDT0RFX1NBTVBMSU5HCisgICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5nZVNh
bXBsaW5nUmVnaW9uKGNvZGVCbG9jayk7CisjZW5kaWYKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBw
cml2YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVjLCByZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hh
aW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKKyNpZiBEVU1QX09QQ09ERV9TQU1QTElORworICAg
IE9wY29kZVNhbXBsaW5nOjpjaGFuZ2VTYW1wbGluZ1JlZ2lvbigwKTsKKyNlbmRpZgogICAgIG1f
cmVlbnRyeURlcHRoLS07CiAKICAgICByZWdpc3RlckZpbGVTdGFjay0+cG9wR2xvYmFsUmVnaXN0
ZXJGaWxlKCk7CkBAIC03MzQsNyArNzQwLDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUo
RnVuY3Rpb25Cb2R5Tm8KICAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGV4ZWMsIGZ1
bmN0aW9uKTsKIAogICAgIG1fcmVlbnRyeURlcHRoKys7CisjaWYgRFVNUF9PUENPREVfU0FNUExJ
TkcKKyAgICBPcGNvZGVTYW1wbGluZzo6Y2hhbmdlU2FtcGxpbmdSZWdpb24obmV3Q29kZUJsb2Nr
KTsKKyNlbmRpZgogICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwg
Jm5ld0V4ZWMsIHJlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbiwgbmV3Q29kZUJsb2NrLCBleGNl
cHRpb24pOworI2lmIERVTVBfT1BDT0RFX1NBTVBMSU5HCisgICAgT3Bjb2RlU2FtcGxpbmc6OmNo
YW5nZVNhbXBsaW5nUmVnaW9uKDApOworI2VuZGlmCiAgICAgbV9yZWVudHJ5RGVwdGgtLTsKIAog
ICAgIHJlZ2lzdGVyRmlsZS0+c2hyaW5rKG9sZFNpemUpOwpAQCAtNzk3LDcgKzgwOSwxMyBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAgICAgICAgICgqcHJvZmls
ZXIpLT53aWxsRXhlY3V0ZShleGVjLCBldmFsTm9kZS0+c291cmNlVVJMKCksIGV2YWxOb2RlLT5s
aW5lTm8oKSk7CiAKICAgICBtX3JlZW50cnlEZXB0aCsrOworI2lmIERVTVBfT1BDT0RFX1NBTVBM
SU5HCisgICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5nZVNhbXBsaW5nUmVnaW9uKGNvZGVCbG9jayk7
CisjZW5kaWYKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZu
ZXdFeGVjLCByZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9u
KTsKKyNpZiBEVU1QX09QQ09ERV9TQU1QTElORworICAgIE9wY29kZVNhbXBsaW5nOjpjaGFuZ2VT
YW1wbGluZ1JlZ2lvbigwKTsKKyNlbmRpZgogICAgIG1fcmVlbnRyeURlcHRoLS07CiAKICAgICBy
ZWdpc3RlckZpbGUtPnNocmluayhvbGRTaXplKTsKQEAgLTg3MCw2ICs4ODgsMTEgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgIC8vIE9uZS10aW1lIGluaXRp
YWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0byBwdXQgdGhpcyBjb2Rl
CiAgICAgLy8gaGVyZSBiZWNhdXNlIG91ciBsYWJlbHMgYXJlIG9ubHkgaW4gc2NvcGUgaW5zaWRl
IHRoaXMgZnVuY3Rpb24uCiAgICAgaWYgKGZsYWcgPT0gSW5pdGlhbGl6ZUFuZFJldHVybikgewor
I2lmIERVTVBfT1BDT0RFX1NBTVBMSU5HCisgICAgICAgIE9wY29kZVNhbXBsaW5nKiBzYW1wbGlu
Z0xvZ2dlciA9IE9wY29kZVNhbXBsaW5nOjppbml0T3Bjb2RlU2FtcGxpbmcoKTsKKyNwcmFnbWEg
dW51c2VkKHNhbXBsaW5nTG9nZ2VyKQorI2VuZGlmCisKICAgICAgICAgI2lmIEhBVkUoQ09NUFVU
RURfR09UTykKICAgICAgICAgICAgICNkZWZpbmUgQUREX09QQ09ERShpZCkgbV9vcGNvZGVUYWJs
ZVtpZF0gPSAmJmlkOwogICAgICAgICAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9JRChBRERfT1BD
T0RFKTsKQEAgLTkwNywyMCArOTMwLDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGkKICNlbmRpZgogCiAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQotICAgICNkZWZp
bmUgTkVYVF9PUENPREUgZ290byAqdlBDLT51Lm9wY29kZQotI2lmIERVTVBfT1BDT0RFX1NUQVRT
Ci0gICAgI2RlZmluZSBCRUdJTl9PUENPREUob3Bjb2RlKSBvcGNvZGU6IE9wY29kZVN0YXRzOjpy
ZWNvcmRJbnN0cnVjdGlvbihvcGNvZGUpOwotI2Vsc2UKLSAgICAjZGVmaW5lIEJFR0lOX09QQ09E
RShvcGNvZGUpIG9wY29kZToKLSNlbmRpZgorICAgICNkZWZpbmUgTkVYVF9PUENPREUgTkVYVF9P
UENPREVfSU5TVFJVTUVOVEFUSU9OIGdvdG8gKnZQQy0+dS5vcGNvZGUKKyAgICAjZGVmaW5lIEJF
R0lOX09QQ09ERShvcGNvZGUpIG9wY29kZTogT1BDT0RFX0lOU1RSVU1FTlRBVElPTihvcGNvZGUs
IHZQQykKICAgICBORVhUX09QQ09ERTsKICNlbHNlCi0gICAgI2RlZmluZSBORVhUX09QQ09ERSBj
b250aW51ZQotI2lmIERVTVBfT1BDT0RFX1NUQVRTCi0gICAgI2RlZmluZSBCRUdJTl9PUENPREUo
b3Bjb2RlKSBjYXNlIG9wY29kZTogT3Bjb2RlU3RhdHM6OnJlY29yZEluc3RydWN0aW9uKG9wY29k
ZSk7Ci0jZWxzZQotICAgICNkZWZpbmUgQkVHSU5fT1BDT0RFKG9wY29kZSkgY2FzZSBvcGNvZGU6
Ci0jZW5kaWYKKyAgICAjZGVmaW5lIE5FWFRfT1BDT0RFIE5FWFRfT1BDT0RFX0lOU1RSVU1FTlRB
VElPTiBjb250aW51ZQorICAgICNkZWZpbmUgQkVHSU5fT1BDT0RFKG9wY29kZSkgY2FzZSBvcGNv
ZGU6IE9QQ09ERV9JTlNUUlVNRU5UQVRJT04ob3Bjb2RlLCB2UEMpCiAgICAgd2hpbGUgKDEpIC8v
IGl0ZXJhdG9yIGxvb3AgYmVnaW5zCiAgICAgc3dpdGNoICh2UEMtPnUub3Bjb2RlKQogI2VuZGlm
CkBAIC0yMDk0LDYgKzIxMDksOSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAgICAgICAgICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAgICAgICAgY29k
ZUJsb2NrID0gbmV3Q29kZUJsb2NrOworI2lmIERVTVBfT1BDT0RFX1NBTVBMSU5HCisgICAgICAg
ICAgICBPcGNvZGVTYW1wbGluZzo6Y2hhbmdlU2FtcGxpbmdSZWdpb24oY29kZUJsb2NrKTsKKyNl
bmRpZgogICAgICAgICAgICAgZXhlYy0+bV9jYWxsRnJhbWVPZmZzZXQgPSBjYWxsRnJhbWVPZmZz
ZXQ7CiAgICAgICAgICAgICBzZXRTY29wZUNoYWluKGV4ZWMsIHNjb3BlQ2hhaW4sIHNjb3BlQ2hh
aW5Gb3JDYWxsKGZ1bmN0aW9uQm9keU5vZGUsIGNvZGVCbG9jaywgY2FsbERhdGFTY29wZUNoYWlu
LCByZWdpc3RlckJhc2UsIHIpKTsKICAgICAgICAgICAgIGsgPSBjb2RlQmxvY2stPmpzVmFsdWVz
LmRhdGEoKTsKQEAgLTIxMTYsMTAgKzIxMzQsMTggQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogCiAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MocmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKioqPihyZWdpc3RlckJhc2UpLCByZWdpc3Rlck9mZnNldCArIGZpcnN0QXJn
ICsgMSwgYXJnQ291bnQgLSAxKTsKIAorI2lmIERVTVBfT1BDT0RFX1NBTVBMSU5HCisgICAgICAg
ICAgICBPcGNvZGVTYW1wbGluZzo6c2V0U2FtcGxpbmcoT3Bjb2RlU2FtcGxpbmc6OnNhbXBsaW5n
X25hdGl2ZUNhbGwpOworI2VuZGlmCisKICAgICAgICAgICAgIHJlZ2lzdGVyRmlsZS0+c2V0U2Fm
ZUZvclJlZW50cnkodHJ1ZSk7CiAgICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHRoaXNPYmosIGFy
Z3MpOwogICAgICAgICAgICAgcmVnaXN0ZXJGaWxlLT5zZXRTYWZlRm9yUmVlbnRyeShmYWxzZSk7
CiAKKyNpZiBEVU1QX09QQ09ERV9TQU1QTElORworICAgICAgICAgICAgT3Bjb2RlU2FtcGxpbmc6
OnNldFNhbXBsaW5nKChPcGNvZGVTYW1wbGluZzo6U2FtcGxpbmdJRClvcF9jYWxsKTsKKyNlbmRp
ZgorCiAgICAgICAgICAgICByID0gKCpyZWdpc3RlckJhc2UpICsgcmVnaXN0ZXJPZmZzZXQ7CiAg
ICAgICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmV0dXJuVmFsdWU7CiAKQEAgLTIxNzEsOSAr
MjE5NywxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgIH0KIAogICAgICAgICBjb2RlQmxvY2sgPSBjYWxsRnJhbWVbQ2FsbGVyQ29kZUJsb2NrXS51
LmNvZGVCbG9jazsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2spCisjaWYgRFVNUF9PUENPREVfU0FN
UExJTkcKKyAgICAgICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5nZVNhbXBsaW5nUmVnaW9uKGNvZGVC
bG9jayk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFjb2RlQmxvY2spIHsKICAgICAgICAgICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKLQorICAgICAgICB9CiAgICAgICAgIGsgPSBjb2RlQmxvY2stPmpz
VmFsdWVzLmRhdGEoKTsKICAgICAgICAgdlBDID0gY2FsbEZyYW1lW1JldHVyblZQQ10udS52UEM7
CiAgICAgICAgIHNldFNjb3BlQ2hhaW4oZXhlYywgc2NvcGVDaGFpbiwgY2FsbEZyYW1lW0NhbGxl
clNjb3BlQ2hhaW5dLnUuc2NvcGVDaGFpbik7CkBAIC0yMjM3LDYgKzIyNjYsOSBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgZ290byB2
bV90aHJvdzsKIAogICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrOworI2lmIERV
TVBfT1BDT0RFX1NBTVBMSU5HCisgICAgICAgICAgICBPcGNvZGVTYW1wbGluZzo6Y2hhbmdlU2Ft
cGxpbmdSZWdpb24oY29kZUJsb2NrKTsKKyNlbmRpZgogICAgICAgICAgICAgZXhlYy0+bV9jYWxs
RnJhbWVPZmZzZXQgPSBjYWxsRnJhbWVPZmZzZXQ7CiAgICAgICAgICAgICBzZXRTY29wZUNoYWlu
KGV4ZWMsIHNjb3BlQ2hhaW4sIHNjb3BlQ2hhaW5Gb3JDYWxsKGZ1bmN0aW9uQm9keU5vZGUsIGNv
ZGVCbG9jaywgY2FsbERhdGFTY29wZUNoYWluLCByZWdpc3RlckJhc2UsIHIpKTsKICAgICAgICAg
ICAgIGsgPSBjb2RlQmxvY2stPmpzVmFsdWVzLmRhdGEoKTsKSW5kZXg6IFdlYktpdC9KYXZhU2Ny
aXB0Q29yZS9WTS9PcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9KYXZhU2NyaXB0Q29y
ZS9WTS9PcGNvZGUuY3BwCShyZXZpc2lvbiAzNDY1NSkKKysrIFdlYktpdC9KYXZhU2NyaXB0Q29y
ZS9WTS9PcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTggQEAKIAogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgogCisjaWYgRFVNUF9PUENPREVfU0FNUExJTkcKKyNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEtKUyB7CiAKLSNpZiBEVU1QX09QQ09ERV9TVEFUUwotCi1sb25nIGxvbmcgT3Bj
b2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOwotbG9uZyBsb25nIE9wY29kZVN0
YXRzOjpvcGNvZGVQYWlyQ291bnRzW251bU9wY29kZUlEc11bbnVtT3Bjb2RlSURzXTsKLWludCBP
cGNvZGVTdGF0czo6bGFzdE9wY29kZSA9IC0xOwotCi1zdGF0aWMgT3Bjb2RlU3RhdHMgbG9nZ2Vy
OworI2lmIERVTVBfT1BDT0RFX1NUQVRTIHx8IERVTVBfT1BDT0RFX1NBTVBMSU5HCiAKIHN0YXRp
YyBjb25zdCBjaGFyKiBvcGNvZGVOYW1lc1tdID0gewogICAgICJsb2FkICAgICAgICAiLApAQCAt
MTMyLDYgKzEzMywxNiBAQCBzdGF0aWMgY29uc3QgY2hhciogb3Bjb2RlTmFtZXNbXSA9IHsKICAg
ICAiZW5kICAgICAgICAgIgogfTsKIAorI2VuZGlmCisKKyNpZiBEVU1QX09QQ09ERV9TVEFUUwor
Citsb25nIGxvbmcgT3Bjb2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOworbG9u
ZyBsb25nIE9wY29kZVN0YXRzOjpvcGNvZGVQYWlyQ291bnRzW251bU9wY29kZUlEc11bbnVtT3Bj
b2RlSURzXTsKK2ludCBPcGNvZGVTdGF0czo6bGFzdE9wY29kZSA9IC0xOworCitzdGF0aWMgT3Bj
b2RlU3RhdHMgc3RhdHNMb2dnZXI7CisKIE9wY29kZVN0YXRzOjpPcGNvZGVTdGF0cygpCiB7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1PcGNvZGVJRHM7ICsraSkKQEAgLTI2MSw2ICsyNzIs
MjE2IEBAIHZvaWQgT3Bjb2RlU3RhdHM6OnJlc2V0TGFzdEluc3RydWN0aW9uKCkKICAgICBsYXN0
T3Bjb2RlID0gLTE7CiB9CiAKKyNlbmRpZiAvLyBEVU1QX09QQ09ERV9TVEFUUworCisjaWYgRFVN
UF9PUENPREVfU0FNUExJTkcKKworbG9uZyBsb25nIE9wY29kZVNhbXBsaW5nOjpvcGNvZGVDb3Vu
dHNbbnVtU2FtcGxpbmdJRHNdID0geyAwIH07CitPcGNvZGVTYW1wbGluZzo6U2FtcGxpbmdJRCBP
cGNvZGVTYW1wbGluZzo6c2FtcGxlID0gT3Bjb2RlU2FtcGxpbmc6OnNhbXBsaW5nX3Vua25vd247
Cit2b2lkKiBPcGNvZGVTYW1wbGluZzo6c2FtcGxlZFZQQyA9ICh2b2lkKiktMTsKKworI2lmIERV
TVBfQkxPQ0tfU0FNUExJTkcKK0NvZGVCbG9jayogT3Bjb2RlU2FtcGxpbmc6OnNhbXBsZWRDb2Rl
QmxvY2sgPSAwOworCitzdHJ1Y3QgQ29kZUJsb2NrU2FtcGxlX3QgeworICAgIHVpbnQ2NF90IGhh
c2g7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgaW50IHNpemU7CisgICAgaW50IHRv
dGFsQ291bnQ7CisgICAgaW50IHZwY0NvdW50c1tdOworfTsKK3R5cGVkZWYgV1RGOjpIYXNoTWFw
PHVpbnQ2NF90LCBDb2RlQmxvY2tTYW1wbGVfdCAqPiBDb2RlQmxvY2tTYW1wbGVNYXBfdDsKK3N0
YXRpYyBDb2RlQmxvY2tTYW1wbGVNYXBfdCAqY29kZUJsb2NrU2FtcGxlTWFwOworCitzdGF0aWMg
aW50IGNvbXBhcmVDb2RlQmxvY2tTYW1wbGVzKGNvbnN0IHZvaWQqIGxlZnQsIGNvbnN0IHZvaWQq
IHJpZ2h0KQoreworICAgIENvZGVCbG9ja1NhbXBsZV90KiBsZWZ0VmFsdWUgPSAqKENvZGVCbG9j
a1NhbXBsZV90KiopbGVmdDsKKyAgICBDb2RlQmxvY2tTYW1wbGVfdCogcmlnaHRWYWx1ZSA9ICoo
Q29kZUJsb2NrU2FtcGxlX3QqKilyaWdodDsKKworICAgIGlmIChsZWZ0VmFsdWUtPnRvdGFsQ291
bnQgPCByaWdodFZhbHVlLT50b3RhbENvdW50KQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNl
IGlmIChsZWZ0VmFsdWUtPnRvdGFsQ291bnQgPiByaWdodFZhbHVlLT50b3RhbENvdW50KQorICAg
ICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworLy8gNjRi
aXQgdmVyc2lvbiBvZiBzb21ldGhpbmcgYmFzZWQgb24gdGhlIGZsZXRjaGVyIGFsZ29yaXRobSAt
IHNpbXBsaWZpZWQgc2luY2UKKy8vIGNhbGN1YWx0aW9uIHNob3VsZG4ndCBvdmVyZmxvdyBwcm92
aWRlZCBsZW5ndGggaXMgbGVzcyB0aGF0IDkwLDAwMCBvciBzbyEKK3VpbnQ2NF90IGZsZXRjaGVy
ZXNxdWVDaGVja3N1bTMyKHVpbnQzMl90ICppbnB1dCwgaW50IGxlbmd0aCkKK3sKKyAgICB1bmlv
biBsb25nbG9uZyB7CisgICAgICAgIHVpbnQ2NF90IHZhbHVlOworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgdWludDMyX3QgbG93OworICAgICAgICAgICAgdWludDMyX3QgaGlnaDsKKyAg
ICAgICAgfTsKKyAgICB9OworCisgICAgbG9uZ2xvbmcgYSwgYjsKKyAgICBhLmxvdyAgPSBiLmxv
dyAgPSAtMTsKKyAgICBhLmhpZ2ggPSBiLmhpZ2ggPSAgMDsKKworICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgYS52YWx1ZSArPSBpbnB1
dFtpbmRleF07CisgICAgICAgIGIudmFsdWUgKz0gYS52YWx1ZTsKKyAgICB9CisKKyAgICBsb25n
bG9uZyByZXN1bHQ7CisgICAgcmVzdWx0LmxvdyAgPSBhLmxvdyArIGEuaGlnaDsKKyAgICByZXN1
bHQuaGlnaCA9IGIubG93ICsgYi5oaWdoOworICAgIHJldHVybiByZXN1bHQudmFsdWU7Cit9Cisj
ZW5kaWYKKworT3Bjb2RlU2FtcGxpbmcqIE9wY29kZVNhbXBsaW5nOjppbml0T3Bjb2RlU2FtcGxp
bmcoKQoreworICAgIHN0YXRpYyBPcGNvZGVTYW1wbGluZyBzYW1wbGluZ0xvZ2dlcjsKKyAgICBy
ZXR1cm4gJnNhbXBsaW5nTG9nZ2VyOworfQorCitzdGF0aWMgdm9pZCogc2FtcGxpbmdTdGFydFJv
dXRpbmUodm9pZCAqKQoreworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHVzbGVlcCgxMDAwMDAw
IC8gRFVNUF9PUENPREVfU0FNUExJTkcpOworICAgICAgICBPcGNvZGVTYW1wbGluZzo6b3Bjb2Rl
Q291bnRzW09wY29kZVNhbXBsaW5nOjpzYW1wbGVdKys7CisgICAgICAgIAorI2lmIERVTVBfQkxP
Q0tfU0FNUExJTkcKKyAgICAgICAgQ29kZUJsb2NrICpjb2RlQmxvY2sgPSBPcGNvZGVTYW1wbGlu
Zzo6c2FtcGxlZENvZGVCbG9jazsKKyAgICAgICAgdm9pZCAqdlBDID0gT3Bjb2RlU2FtcGxpbmc6
OnNhbXBsZWRWUEM7CisgICAgICAgIAorICAgICAgICBpZiAoY29kZUJsb2NrICYmIChPcGNvZGVT
YW1wbGluZzo6c2FtcGxlIDw9IE9wY29kZVNhbXBsaW5nOjpzYW1wbGluZ19uZXh0KSkgeworICAg
ICAgICAgICAgSW5zdHJ1Y3Rpb24qIGNvZGUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdp
bigpOworICAgICAgICAgICAgaW50IHNpemUgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXpl
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2ggPSBmbGV0Y2hlcmVz
cXVlQ2hlY2tzdW0zMigodWludDMyX3QgKiljb2RlLCBzaXplKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQ29kZUJsb2NrU2FtcGxlX3QqIGJsb2NrU2FtcGxlID0gY29kZUJsb2NrU2FtcGxl
TWFwLT5nZXQoaGFzaCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghYmxvY2tTYW1w
bGUpIHsKKyAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LnNpemUoKTsKKyAgICAgICAgICAgICAgICBibG9ja1NhbXBsZSA9IChDb2RlQmxvY2tTYW1wbGVf
dCopY2FsbG9jKHNpemVvZihDb2RlQmxvY2tTYW1wbGVfdCkgKyAoc2l6ZW9mKGludCkgKiBzaXpl
KSwgMSk7CisgICAgICAgICAgICAgICAgYmxvY2tTYW1wbGUtPmhhc2ggPSBoYXNoOworICAgICAg
ICAgICAgICAgIGJsb2NrU2FtcGxlLT5jb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgICAgICAg
ICAgICAgYmxvY2tTYW1wbGUtPnNpemUgPSBzaXplOworICAgICAgICAgICAgICAgIGNvZGVCbG9j
a1NhbXBsZU1hcC0+c2V0KGhhc2gsIGJsb2NrU2FtcGxlKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoc2l6ZSA+IDQwOTYpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnRmKCJTa2lwcGluZyBDb2RlQmxvY2s6ICMlMDE2bGx4IChsb29rcyBtYWxmb3JtZWQpXG4iLCBo
YXNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHByaW50ZigiRHVtcGluZyBDb2RlQmxvY2s6ICMlMDE2bGx4XG4iLCBoYXNo
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIHNvdXJjZSBmaWxlIFwiJXNcIiwgbGlu
ZW5vICVkXG4iLCBjb2RlQmxvY2stPm93bmVyTm9kZS0+c291cmNlVVJMKCkuVVRGOFN0cmluZygp
LmNfc3RyKCksIGNvZGVCbG9jay0+bGluZU51bWJlckZvclZQQyhjb2RlKSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcCgwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsb2NrU2FtcGxlLT50b3RhbENvdW50
Kys7CisKKyAgICAgICAgICAgIGlmICh2UEMgIT0gKHZvaWQgKiktMSkgeworICAgICAgICAgICAg
ICAgIHB0cmRpZmZfdCBjb2RlT2Zmc2V0ID0gKChwdHJkaWZmX3QpKE9wY29kZVNhbXBsaW5nOjpz
YW1wbGVkVlBDKSAtIChwdHJkaWZmX3QpKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkp
KS9zaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAgIGlmIChjb2RlT2Zmc2V0IDwgYmxvY2tT
YW1wbGUtPnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tTYW1wbGUtPnZwY0NvdW50
c1tjb2RlT2Zmc2V0XSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiAwOworfQorCitPcGNvZGVTYW1wbGluZzo6
T3Bjb2RlU2FtcGxpbmcoKQoreworI2lmIERVTVBfQkxPQ0tfU0FNUExJTkcKKyAgICBjb2RlQmxv
Y2tTYW1wbGVNYXAgPSBuZXcgQ29kZUJsb2NrU2FtcGxlTWFwX3QoKTsKKyNlbmRpZgorICAgIAor
ICAgIHB0aHJlYWRfdCB0aHJlYWQ7CisgICAgcHRocmVhZF9jcmVhdGUoJnRocmVhZCwgMCwgc2Ft
cGxpbmdTdGFydFJvdXRpbmUsIDApOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVPcGNvZGVJbmRp
Y2VzU2FtcGxpbmcoY29uc3Qgdm9pZCogbGVmdCwgY29uc3Qgdm9pZCogcmlnaHQpCit7CisgICAg
bG9uZyBsb25nIGxlZnRWYWx1ZSA9IE9wY29kZVNhbXBsaW5nOjpvcGNvZGVDb3VudHNbKihpbnQq
KWxlZnRdOworICAgIGxvbmcgbG9uZyByaWdodFZhbHVlID0gT3Bjb2RlU2FtcGxpbmc6Om9wY29k
ZUNvdW50c1sqKGludCopcmlnaHRdOworCisgICAgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUp
CisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UgaWYgKGxlZnRWYWx1ZSA+IHJpZ2h0VmFsdWUp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgY29uc3QgY2hhciogbm9uT3Bjb2RlU2FtcGxpbmdOYW1lc1tPcGNvZGVTYW1wbGluZzo6
bnVtU2FtcGxpbmdJRHMgLSBudW1PcGNvZGVJRHNdID0geworICAgICJORVhUX1ZQQyAgICAiLAor
ICAgICJOQVRJVkVfQ0FMTCAiLAorICAgICJVTktOT1dOICAgICAiCit9OworCitpbmxpbmUgY29u
c3QgY2hhciogc2FtcGxpbmdOYW1lcyhpbnQgaW5kZXgpCit7CisgICAgcmV0dXJuIChpbmRleCA8
IG51bU9wY29kZUlEcykgPyBvcGNvZGVOYW1lc1tpbmRleF0gOiBub25PcGNvZGVTYW1wbGluZ05h
bWVzW2luZGV4IC0gbnVtT3Bjb2RlSURzXTsKK30KKworT3Bjb2RlU2FtcGxpbmc6On5PcGNvZGVT
YW1wbGluZygpCit7CisgICAgbG9uZyBsb25nIHRvdGFsS25vd25TYW1wbGVzID0gMDsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNhbXBsaW5nX3Vua25vd247ICsraSkKKyAgICAgICAgdG90YWxL
bm93blNhbXBsZXMgKz0gb3Bjb2RlQ291bnRzW2ldOworICAgIGxvbmcgbG9uZyB1bmtub3duU2Ft
cGxlcyA9IG9wY29kZUNvdW50c1tzYW1wbGluZ191bmtub3duXTsKKyAgICBsb25nIGxvbmcgdG90
YWxTYW1wbGVzID0gdG90YWxLbm93blNhbXBsZXMgKyB1bmtub3duU2FtcGxlczsKKworICAgIGZw
cmludGYoc3Rkb3V0LCAiXG5PcGNvZGUgc2FtcGxpbmcgcmVzdWx0c1xuXG4iKTsgCisgICAgCisg
ICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBzYW1wbGVzIHdpdGhpbiBWTSBleGVjdXRpb246ICAl
bGxkXG4iLCB0b3RhbEtub3duU2FtcGxlcyk7CisgICAgZnByaW50ZihzdGRvdXQsICJUb3RhbCBz
YW1wbGVzIG91dHNpZGUgVk0gZXhlY3V0aW9uOiAlbGxkXG5cbiIsIHVua25vd25TYW1wbGVzKTsK
KworICAgIGZwcmludGYoc3Rkb3V0LCAiVk0gZXhlY3V0aW9uIGNhdGVnb3JpZXMgaW4gb3JkZXI6
XG5cbiIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtU2FtcGxpbmdJRHM7ICsraSkgewor
ICAgICAgICBsb25nIGxvbmcgY291bnQgPSBvcGNvZGVDb3VudHNbaV07CisgICAgICAgIGZwcmlu
dGYoc3Rkb3V0LCAiJXM6XHQlNmxsZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgc2FtcGxpbmdOYW1l
cyhpKSwgY291bnQsICgoZG91YmxlKWNvdW50ICogMTAwKS90b3RhbEtub3duU2FtcGxlcywgKChk
b3VibGUpY291bnQgKiAxMDApL3RvdGFsU2FtcGxlcyk7ICAgIAorICAgIH0KKyAgICBmcHJpbnRm
KHN0ZG91dCwgIlxuIik7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlZNIGV4ZWN1dGlvbiBjYXRl
Z29yaWVzIGJ5IHNhbXBsZSBjb3VudDpcblxuIik7CisgICAgaW50IHNvcnRlZEluZGljZXNbc2Ft
cGxpbmdfdW5rbm93bl07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzYW1wbGluZ191bmtub3du
OyArK2kpCisgICAgICAgIHNvcnRlZEluZGljZXNbaV0gPSBpOworICAgIG1lcmdlc29ydChzb3J0
ZWRJbmRpY2VzLCBzYW1wbGluZ191bmtub3duLCBzaXplb2YoaW50KSwgY29tcGFyZU9wY29kZUlu
ZGljZXNTYW1wbGluZyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzYW1wbGluZ191bmtub3du
OyArK2kpIHsKKyAgICAgICAgaW50IGluZGV4ID0gc29ydGVkSW5kaWNlc1tpXTsKKyAgICAgICAg
bG9uZyBsb25nIGNvdW50ID0gb3Bjb2RlQ291bnRzW2luZGV4XTsKKyAgICAgICAgZnByaW50Zihz
dGRvdXQsICIlczpcdCU2bGxkXHQlLjNmJSVcdCglLjNmJSUpXG4iLCBzYW1wbGluZ05hbWVzKGlu
ZGV4KSwgY291bnQsICgoZG91YmxlKWNvdW50ICogMTAwKS90b3RhbEtub3duU2FtcGxlcywgKChk
b3VibGUpY291bnQgKiAxMDApL3RvdGFsU2FtcGxlcyk7ICAgIAorICAgIH0KKyAgICBmcHJpbnRm
KHN0ZG91dCwgIlxuIik7CisKKyNpZiBEVU1QX0JMT0NLX1NBTVBMSU5HCisgICAgaW50IGJsb2Nr
c1NhbXBsZWQgPSBjb2RlQmxvY2tTYW1wbGVNYXAtPnNpemUoKTsKKyAgICBDb2RlQmxvY2tTYW1w
bGVfdCogY29kZUJsb2NrU2FtcGxlc1tibG9ja3NTYW1wbGVkXTsKKyAgICBDb2RlQmxvY2tTYW1w
bGVNYXBfdDo6aXRlcmF0b3IgbWFwSXRlciA9IGNvZGVCbG9ja1NhbXBsZU1hcC0+YmVnaW4oKTsK
KyAgICBmb3IgKGludCBpPTA7IGkgPCBibG9ja3NTYW1wbGVkOyArK2ksICsrbWFwSXRlcikKKyAg
ICAgICAgY29kZUJsb2NrU2FtcGxlc1tpXSA9IG1hcEl0ZXItPnNlY29uZDsKKyAgICBtZXJnZXNv
cnQoY29kZUJsb2NrU2FtcGxlcywgYmxvY2tzU2FtcGxlZCwgc2l6ZW9mKENvZGVCbG9ja1NhbXBs
ZV90KiksIGNvbXBhcmVDb2RlQmxvY2tTYW1wbGVzKTsKKworICAgIGZvciAoaW50IGk9MDsgaSA8
IGJsb2Nrc1NhbXBsZWQ7IGkrKykgeworICAgICAgICBkb3VibGUgcGVyY2VudCA9IChjb2RlQmxv
Y2tTYW1wbGVzW2ldLT50b3RhbENvdW50ICogMTAwLjApL3RvdGFsU2FtcGxlczsKKyAgICAgICAg
aWYgKHBlcmNlbnQgPCAxKSBicmVhazsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJDb2RlQmxv
Y2sgIyUwMTZsbHggc2FtcGxlZCAlZCB0aW1lcy4gKCUuM2YlJSlcbiIsIGNvZGVCbG9ja1NhbXBs
ZXNbaV0tPmhhc2gsIGNvZGVCbG9ja1NhbXBsZXNbaV0tPnRvdGFsQ291bnQsIHBlcmNlbnQpOwor
ICAgICAgICBpZiAoaSA8IDEwKSB7CisgICAgICAgICAgICBmb3IgKGludCBvcCA9IDA7IG9wIDwg
Y29kZUJsb2NrU2FtcGxlc1tpXS0+c2l6ZTsgKytvcCkgeworICAgICAgICAgICAgICAgIGludCBj
b3VudCA9IGNvZGVCbG9ja1NhbXBsZXNbaV0tPnZwY0NvdW50c1tvcF07CisgICAgICAgICAgICAg
ICAgaWYgKGNvdW50KSBwcmludGYoIiAgWyUgNGRdIHNhbXBsZSBjb3VudDogJSA0ZFxuIiwgb3As
IGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgorfQorCisjZW5kaWYgLy8g
RFVNUF9PUENPREVfU0FNUExJTkcKKwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFdlYktp
dC9KYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvSmF2YVNj
cmlwdENvcmUvVk0vT3Bjb2RlLmgJKHJldmlzaW9uIDM0NjU1KQorKysgV2ViS2l0L0phdmFTY3Jp
cHRDb3JlL1ZNL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw5IEBACiAKIG5h
bWVzcGFjZSBLSlMgewogCi0jZGVmaW5lIERVTVBfT1BDT0RFX1NUQVRTIDAKKyNkZWZpbmUgRFVN
UF9PUENPREVfU1RBVFMgICAgMAorI2RlZmluZSBEVU1QX09QQ09ERV9TQU1QTElORyAwIC8vIHNl
dCB0byBzYW1wbGluZyBmcmVxdWVuY3kgKGUuZy4gMTAwMCkKKyNkZWZpbmUgRFVNUF9CTE9DS19T
QU1QTElORyAgMCAvLyBib29sZWFuICgwLzEpLCByZXF1aXJlcyBEVU1QX09QQ09ERV9TQU1QTElO
Ry4KIAogICAgICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX0lEKG1hY3JvKSBcCiAgICAgICAgIG1h
Y3JvKG9wX2xvYWQpIFwKQEAgLTE1Miw4ICsxNTQsNjggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHJlc2V0TGFzdEluc3RydWN0aW9uKCk7CiAgICAgfTsKIAorI2RlZmlu
ZSBEVU1QX09QQ09ERV9TVEFUU19JTlNUUlVNRU5UKG9wY29kZSwgdlBDKSBPcGNvZGVTdGF0czo6
cmVjb3JkSW5zdHJ1Y3Rpb24ob3Bjb2RlKTsKKyNlbHNlCisjZGVmaW5lIERVTVBfT1BDT0RFX1NU
QVRTX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpCisjZW5kaWYgLy8gRFVNUF9PUENPREVfU1RBVFMK
KworI2lmIERVTVBfT1BDT0RFX1NBTVBMSU5HCisKKyAgICBjbGFzcyBDb2RlQmxvY2s7CisKKyAg
ICBzdHJ1Y3QgT3Bjb2RlU2FtcGxpbmcgeworICAgICAgICBPcGNvZGVTYW1wbGluZygpOworICAg
ICAgICB+T3Bjb2RlU2FtcGxpbmcoKTsKKyAgICAgICAgCisgICAgICAgIHR5cGVkZWYgZW51bSB7
CisgICAgICAgICAgICAvLyBhbGwgb3Bjb2RlIGlkcyBhcmUgYWxzbyB2YWxpZCBzYW1wbGUgaWRz
LgorICAgICAgICAgICAgc2FtcGxpbmdfbmV4dCA9IChvcF9lbmQgKyAxKSwgLy8gVGhpcyBzaG91
bGQgY29tZSBmaXJzdC4KKyAgICAgICAgICAgIHNhbXBsaW5nX25hdGl2ZUNhbGwsCisgICAgICAg
ICAgICBzYW1wbGluZ191bmtub3duIC8vIHNhbXBsaW5nX25vX2VuZCBNVVNUIGNvbWUgYXQgdGhl
IGVuZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgfSBTYW1wbGluZ0lEOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG51bVNhbXBsaW5nSURzID0gc2FtcGxpbmdfdW5rbm93biArIDE7CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgbG9uZyBsb25nIG9wY29kZUNvdW50c1tudW1TYW1wbGluZ0lEc107
CisgICAgICAgIHN0YXRpYyBTYW1wbGluZ0lEIHNhbXBsZTsKKyAgICAgICAgc3RhdGljIHZvaWQg
KnNhbXBsZWRWUEM7CisjaWYgRFVNUF9CTE9DS19TQU1QTElORworICAgICAgICBzdGF0aWMgQ29k
ZUJsb2NrICpzYW1wbGVkQ29kZUJsb2NrOwogI2VuZGlmCiAKKyAgICAgICAgc3RhdGljIHZvaWQg
c2V0U2FtcGxpbmcoT3Bjb2RlSUQgb3Bjb2RlLCB2b2lkICp2UEMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNhbXBsZSA9IChTYW1wbGluZ0lEKW9wY29kZTsKKyAgICAgICAgICAgIHNhbXBsZWRW
UEMgPSB2UEM7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBzZXRTYW1wbGluZyhT
YW1wbGluZ0lEIHJlYXNvbikKKyAgICAgICAgeworICAgICAgICAgICAgc2FtcGxlID0gcmVhc29u
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjaGFuZ2VTYW1wbGlu
Z1JlZ2lvbihDb2RlQmxvY2sgKmNvZGVCbG9jaykgeworICAgICAgICAgICAgc2FtcGxlZFZQQyA9
ICh2b2lkICopLTE7CisgICAgICAgICAgICBzYW1wbGUgPSBzYW1wbGluZ191bmtub3duOworI2lm
IERVTVBfQkxPQ0tfU0FNUExJTkcKKyAgICAgICAgICAgIHNhbXBsZWRDb2RlQmxvY2sgPSBjb2Rl
QmxvY2s7CisjZWxzZQorI3ByYWdtYSB1bnVzZWQoY29kZUJsb2NrKQorI2VuZGlmCisgICAgICAg
IH0KKyAgICAKKyAgICAgICAgc3RhdGljIE9wY29kZVNhbXBsaW5nKiBpbml0T3Bjb2RlU2FtcGxp
bmcoKTsKKyAgICB9OworCisjZGVmaW5lIERVTVBfT1BDT0RFX1NBTVBMSU5HX0lOU1RSVU1FTlQo
b3Bjb2RlLCB2UEMpIE9wY29kZVNhbXBsaW5nOjpzZXRTYW1wbGluZyhvcGNvZGUsIHZQQyk7Cisj
ZGVmaW5lIE5FWFRfT1BDT0RFX1NBTVBMSU5HX0lOU1RSVU1FTlQgT3Bjb2RlU2FtcGxpbmc6OnNl
dFNhbXBsaW5nKE9wY29kZVNhbXBsaW5nOjpzYW1wbGluZ19uZXh0KTsKKyNlbHNlCisjZGVmaW5l
IERVTVBfT1BDT0RFX1NBTVBMSU5HX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpCisjZGVmaW5lIE5F
WFRfT1BDT0RFX1NBTVBMSU5HX0lOU1RSVU1FTlQKKyNlbmRpZiAvLyBEVU1QX09QQ09ERV9TQU1Q
TElORworCisjZGVmaW5lIE9QQ09ERV9JTlNUUlVNRU5UQVRJT04ob3Bjb2RlLCB2UEMpIERVTVBf
T1BDT0RFX1NUQVRTX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpIERVTVBfT1BDT0RFX1NBTVBMSU5H
X0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpCisjZGVmaW5lIE5FWFRfT1BDT0RFX0lOU1RSVU1FTlRB
VElPTiBORVhUX09QQ09ERV9TQU1QTElOR19JTlNUUlVNRU5UCisKIH0gLy8gbmFtZXNwYWNlIEtK
UwogCiAjZW5kaWYgLy8gT3Bjb2Rlc19oCg==
</data>
<flag name="review"
          id="9711"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22186</attachid>
            <date>2008-07-09 11:30:33 -0700</date>
            <delta_ts>2008-07-23 10:14:26 -0700</delta_ts>
            <desc>[BROKEN] New implementation. (8% regression)</desc>
            <filename>patch_sample_review.8.txt</filename>
            <type>text/plain</type>
            <size>31477</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzUwMzMpCisrKyBXZWJLaXQv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAK
KzIwMDgtMDctMDkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgor
CisgICAgICAgIFNhbXBsaW5nIHRvb2xzIHRvIGFuYWx5emUgY29zdCBvZiBpbnN0cnVjdGlvbiBl
eGVjdXRpb24gYW5kCisgICAgICAgIGlkZW50aWZ5IGhvdCByZWdpb25zIG9mIEpTIGNvZGUuICBT
d2l0Y2hlcyBEVU1QX09QQ09ERV9TQU1QTElORworICAgICAgICBhbmQgRFVNUF9CTE9DS19TQU1Q
TElORyBpbiBPcGNvZGUuaCBlbmFibGUgdGhlIHRvb2xzLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVk0vQ29kZUJsb2NrLmNwcDogQWxsb3cgZHVt
cCgpIG9mIENvZGVCbG9ja3Mgd2l0aG91dCBhbiBFeGVjU3RhdGUqCisgICAgICAgICogVk0vQ29k
ZUJsb2NrLmg6ICAgTWFrZSBDb2RlQmxvY2tzIHJlZmVyZW5jZSBjb3VudGVkLgorICAgICAgICAq
IFZNL0NvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOiAgIEFkZGVk
IGhvb2tzIGZvciBzYW1wbGluZyB0b29sLgorICAgICAgICAqIFZNL01hY2hpbmUuaDogICAgIE1h
a2UgaXNPcGNvZGUgc3RhdGljLgorICAgICAgICAqIFZNL09wY29kZS5jcHA6ICAgIEFkZGVkIHRv
b2wgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogVk0vT3Bjb2RlLmg6ICAgICAgQWRkZWQgdG9v
bCBpbnRlcmZhY2UuCisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKiBranMvbm9k
ZXMuaDoKKwogMjAwOC0wNy0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6IFdlYktpdC9KYXZhU2NyaXB0
Q29yZS9WTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9KYXZhU2NyaXB0Q29y
ZS9WTS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAzNTAzMykKKysrIFdlYktpdC9KYXZhU2NyaXB0
Q29yZS9WTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTEgKzE0NywxMiBA
QCBzdGF0aWMgdm9pZCBwcmludENvbmRpdGlvbmFsSnVtcChjb25zdCBWCiB2b2lkIENvZGVCbG9j
azo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKKwogICAgIFZl
Y3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RydWN0aW9ucy5lbmQo
KTsKIAogICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gMDsKICAgICBmb3IgKFZlY3RvcjxJ
bnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgaWYgKGV4ZWMtPm1hY2hpbmUoKS0+aXNPcGNvZGUoaXQtPnUub3Bjb2RlKSkKKyAg
ICAgICAgaWYgKE1hY2hpbmU6OmlzT3Bjb2RlKGl0LT51Lm9wY29kZSkpCiAgICAgICAgICAgICAr
K2luc3RydWN0aW9uQ291bnQ7CiAKICAgICBwcmludGYoIiVsdSBpbnN0cnVjdGlvbnM7ICVsdSBi
eXRlcyBhdCAlcDsgJWQgbG9jYWxzICglZCBwYXJhbWV0ZXJzKTsgJWQgdGVtcG9yYXJpZXNcblxu
IiwKQEAgLTE3MSw3ICsxNzIsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4
ZWMpIGNvCiAgICAgICAgIH0gd2hpbGUgKGkgIT0gaWRlbnRpZmllcnMuc2l6ZSgpKTsKICAgICB9
CiAKLSAgICBpZiAoanNWYWx1ZXMuc2l6ZSgpKSB7CisgICAgaWYgKGpzVmFsdWVzLnNpemUoKSAm
JiBleGVjKSB7CiAgICAgICAgIHByaW50ZigiXG5Db25zdGFudHM6XG4iKTsKICAgICAgICAgc2l6
ZV90IGkgPSAwOwogICAgICAgICBkbyB7CkBAIC0yMDQsMTEgKzIwNSwxMSBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvCiB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBi
ZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGl0KSBjb25zdAogewog
ICAgIGludCBsb2NhdGlvbiA9IGl0IC0gYmVnaW47Ci0gICAgc3dpdGNoIChleGVjLT5tYWNoaW5l
KCktPmdldE9wY29kZUlEKGl0LT51Lm9wY29kZSkpIHsKKyAgICBzd2l0Y2ggKE1hY2hpbmU6Omdl
dE9wY29kZUlEKGl0LT51Lm9wY29kZSkpIHsKICAgICAgICAgY2FzZSBvcF9sb2FkOiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBrMCA9
ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBsb2FkXHRcdCAl
cywgJXNcdFx0XG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCBjb25zdGFu
dE5hbWUoZXhlYywgazAsIGpzVmFsdWVzW2swXSkuY19zdHIoKSk7CisgICAgICAgICAgICBwcmlu
dGYoIlslNGRdIGxvYWRcdFx0ICVzLCAlc1x0XHRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUo
cjApLmNfc3RyKCksIGV4ZWMgPyBjb25zdGFudE5hbWUoZXhlYywgazAsIGpzVmFsdWVzW2swXSku
Y19zdHIoKSA6ICI/Pz8iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfbmV3X29iamVjdDogewpAQCAtNTg3LDcgKzU4OCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGVycm9yVHlwZSA9ICgrK2l0KS0+dS5vcGVyYW5k
OwogICAgICAgICAgICAgaW50IGswID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBw
cmludGYoIlslNGRdIG5ld19lcnJvclx0ICVzLCAlZCwgJXNcbiIsIGxvY2F0aW9uLCByZWdpc3Rl
ck5hbWUocjApLmNfc3RyKCksIGVycm9yVHlwZSwgY29uc3RhbnROYW1lKGV4ZWMsIGswLCBqc1Zh
bHVlc1trMF0pLmNfc3RyKCkpOworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBuZXdfZXJyb3Jc
dCAlcywgJWQsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCBlcnJv
clR5cGUsIGV4ZWMgPyBjb25zdGFudE5hbWUoZXhlYywgazAsIGpzVmFsdWVzW2swXSkuY19zdHIo
KSA6ICI/Pz8iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfanNyOiB7CkluZGV4OiBXZWJLaXQvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5oCShyZXZpc2lv
biAzNTAzMykKKysrIFdlYktpdC9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIm5vZGVzLmgiCiAjaW5jbHVkZSAi
dXN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtKUyB7CkBAIC01
NSw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBpbnQgbGluZU51bWJlcjsKICAg
ICB9OwogCi0gICAgc3RydWN0IENvZGVCbG9jayB7CisgICAgc3RydWN0IENvZGVCbG9jayA6IHB1
YmxpYyBSZWZDb3VudGVkPENvZGVCbG9jaz4gewogICAgICAgICBDb2RlQmxvY2soU2NvcGVOb2Rl
KiBvd25lck5vZGVfLCBDb2RlVHlwZSBjb2RlVHlwZV8pCiAgICAgICAgICAgICA6IG93bmVyTm9k
ZShvd25lck5vZGVfKQogICAgICAgICAgICAgLCBudW1UZW1wb3JhcmllcygwKQpJbmRleDogV2Vi
S2l0L0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzUwMzMp
CisrKyBXZWJLaXQvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxNiw3ICs0MTYsNyBAQCBQYXNzUmVmUHRyPExhYmVsSUQ+IENvZGVHZW5lcmF0
b3I6OmVtaXRMCiAKIHZvaWQgQ29kZUdlbmVyYXRvcjo6ZW1pdE9wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCkKIHsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2xvYmFsRGF0YSgpLT5tYWNoaW5l
LT5nZXRPcGNvZGUob3Bjb2RlSUQpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoTWFjaGlu
ZTo6Z2V0T3Bjb2RlKG9wY29kZUlEKSk7CiAgICAgbV9sYXN0T3Bjb2RlSUQgPSBvcGNvZGVJRDsK
IH0KIApJbmRleDogV2ViS2l0L0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9KYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzUw
MzMpCisrKyBXZWJLaXQvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc2LDYgKzc2LDkgQEAgc3RhdGljIGNvbnN0IGludCBwcmVmZXJyZWRTY3JpcHRDaGVj
a1RpbQogI2lmIEhBVkUoQ09NUFVURURfR09UTykKIHN0YXRpYyB2b2lkKiBvcF90aHJvd19lbmRf
aW5kaXJlY3Q7CiBzdGF0aWMgdm9pZCogb3BfY2FsbF9pbmRpcmVjdDsKKworT3Bjb2RlIE1hY2hp
bmU6Om1fb3Bjb2RlVGFibGVbbnVtT3Bjb2RlSURzXTsgLy8gTWFwcyBPcGNvZGVJRCA9PiBPcGNv
ZGUgZm9yIGNvbXBpbGluZworSGFzaE1hcDxPcGNvZGUsIE9wY29kZUlEPiogTWFjaGluZTo6bV9v
cGNvZGVJRFRhYmxlOyAvLyBNYXBzIE9wY29kZSA9PiBPcGNvZGVJRCBmb3IgZGVjb21waWxpbmcK
ICNlbmRpZgogCiAvLyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgc2NvcGUgY2hhaW4gd2l0aGlu
IGEgZ2l2ZW4gY2FsbCBmcmFtZS4KQEAgLTU2OCw3ICs1NzEsNyBAQCBib29sIE1hY2hpbmU6Omlz
T3Bjb2RlKE9wY29kZSBvcGNvZGUpCiAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQogICAgIHJldHVy
biBvcGNvZGUgIT0gSGFzaFRyYWl0czxPcGNvZGU+OjplbXB0eVZhbHVlKCkKICAgICAgICAgJiYg
IUhhc2hUcmFpdHM8T3Bjb2RlPjo6aXNEZWxldGVkVmFsdWUob3Bjb2RlKQotICAgICAgICAmJiBt
X29wY29kZUlEVGFibGUuY29udGFpbnMob3Bjb2RlKTsKKyAgICAgICAgJiYgbV9vcGNvZGVJRFRh
YmxlLT5jb250YWlucyhvcGNvZGUpOwogI2Vsc2UKICAgICByZXR1cm4gb3Bjb2RlID49IDAgJiYg
b3Bjb2RlIDw9IG9wX2VuZDsKICNlbmRpZgpAQCAtNjk5LDkgKzcwMiwxMSBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwCiAgICAgaWYgKCpwcm9maWxlcikKICAgICAg
ICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGV4ZWMsIHByb2dyYW1Ob2RlLT5zb3VyY2VVUkwo
KSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpKTsKIAorICAgIE9wY29kZVNhbXBsaW5nOjpjaGFuZ2VT
YW1wbGluZ1JlZ2lvbihjb2RlQmxvY2spOwogICAgIG1fcmVlbnRyeURlcHRoKys7CiAgICAgSlNW
YWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbmV3RXhlYywgJm1fcmVnaXN0
ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2RlQmxvY2ssIGV4Y2VwdGlvbik7CiAgICAgbV9yZWVu
dHJ5RGVwdGgtLTsKKyAgICBPcGNvZGVTYW1wbGluZzo6Y2hhbmdlU2FtcGxpbmdSZWdpb24oMCk7
CiAKICAgICBpZiAoKnByb2ZpbGVyKSB7CiAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRl
KGV4ZWMsIHByb2dyYW1Ob2RlLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpKTsK
QEAgLTc2MCw5ICs3NjUsMTEgQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJv
ZHlObwogICAgIGlmICgqcHJvZmlsZXIpCiAgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0
ZShleGVjLCBmdW5jdGlvbik7CiAKKyAgICBPcGNvZGVTYW1wbGluZzo6Y2hhbmdlU2FtcGxpbmdS
ZWdpb24obmV3Q29kZUJsb2NrKTsKICAgICBtX3JlZW50cnlEZXB0aCsrOwogICAgIEpTVmFsdWUq
IHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmls
ZSwgciwgc2NvcGVDaGFpbiwgbmV3Q29kZUJsb2NrLCBleGNlcHRpb24pOwogICAgIG1fcmVlbnRy
eURlcHRoLS07CisgICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5nZVNhbXBsaW5nUmVnaW9uKDApOwog
CiAgICAgaWYgKCpwcm9maWxlciAmJiAhbV9yZWVudHJ5RGVwdGgpCiAgICAgICAgICgqcHJvZmls
ZXIpLT5kaWRGaW5pc2hBbGxFeGVjdXRpb24oZXhlYyk7CkBAIC04MjYsOSArODMzLDExIEBAIEpT
VmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWwKICAgICBpZiAoKnByb2ZpbGVy
KQogICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoZXhlYywgZXZhbE5vZGUtPnNvdXJj
ZVVSTCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwogCisgICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5n
ZVNhbXBsaW5nUmVnaW9uKGNvZGVCbG9jayk7CiAgICAgbV9yZWVudHJ5RGVwdGgrKzsKICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVjLCAmbV9yZWdp
c3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKICAgICBtX3Jl
ZW50cnlEZXB0aC0tOworICAgIE9wY29kZVNhbXBsaW5nOjpjaGFuZ2VTYW1wbGluZ1JlZ2lvbigw
KTsKIAogICAgIGlmICgqcHJvZmlsZXIpIHsKICAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1
dGUoZXhlYywgZXZhbE5vZGUtPnNvdXJjZVVSTCgpLCBldmFsTm9kZS0+bGluZU5vKCkpOwpAQCAt
OTU3LDE3ICs5NjYsMjEgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0
aQogICAgIC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4g
V2UgaGF2ZSB0byBwdXQgdGhpcyBjb2RlCiAgICAgLy8gaGVyZSBiZWNhdXNlIG91ciBsYWJlbHMg
YXJlIG9ubHkgaW4gc2NvcGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uCiAgICAgaWYgKGZsYWcgPT0g
SW5pdGlhbGl6ZUFuZFJldHVybikgeworICAgICAgICBPcGNvZGVTYW1wbGluZzo6aW5pdE9wY29k
ZVNhbXBsaW5nKCk7CisKICAgICAgICAgI2lmIEhBVkUoQ09NUFVURURfR09UTykKICAgICAgICAg
ICAgICNkZWZpbmUgQUREX09QQ09ERShpZCkgbV9vcGNvZGVUYWJsZVtpZF0gPSAmJmlkOwogICAg
ICAgICAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9JRChBRERfT1BDT0RFKTsKICAgICAgICAgICAg
ICN1bmRlZiBBRERfT1BDT0RFCi0KLSAgICAgICAgICAgICNkZWZpbmUgQUREX09QQ09ERV9JRChp
ZCkgbV9vcGNvZGVJRFRhYmxlLmFkZCgmJmlkLCBpZCk7CisgICAgICAgICAgICBtX29wY29kZUlE
VGFibGUgPSBuZXcgSGFzaE1hcDxPcGNvZGUsIE9wY29kZUlEPjsKKyAgICAgICAgICAgICNkZWZp
bmUgQUREX09QQ09ERV9JRChpZCkgbV9vcGNvZGVJRFRhYmxlLT5hZGQoJiZpZCwgaWQpOwogICAg
ICAgICAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9JRChBRERfT1BDT0RFX0lEKTsKICAgICAgICAg
ICAgICN1bmRlZiBBRERfT1BDT0RFCi0gICAgICAgICAgICBBU1NFUlQobV9vcGNvZGVJRFRhYmxl
LnNpemUoKSA9PSBudW1PcGNvZGVJRHMpOworICAgICAgICAgICAgQVNTRVJUKG1fb3Bjb2RlSURU
YWJsZS0+c2l6ZSgpID09IG51bU9wY29kZUlEcyk7CisKICAgICAgICAgICAgIG9wX3Rocm93X2Vu
ZF9pbmRpcmVjdCA9ICYmb3BfdGhyb3dfZW5kOwogICAgICAgICAgICAgb3BfY2FsbF9pbmRpcmVj
dCA9ICYmb3BfY2FsbDsKKwogICAgICAgICAjZW5kaWYgLy8gSEFWRShDT01QVVRFRF9HT1RPKQog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMDAxLDIwICsxMDE0LDEyIEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICB9CiAgICAgCiAjaWYgSEFWRShD
T01QVVRFRF9HT1RPKQotICAgICNkZWZpbmUgTkVYVF9PUENPREUgZ290byAqdlBDLT51Lm9wY29k
ZQotI2lmIERVTVBfT1BDT0RFX1NUQVRTCi0gICAgI2RlZmluZSBCRUdJTl9PUENPREUob3Bjb2Rl
KSBvcGNvZGU6IE9wY29kZVN0YXRzOjpyZWNvcmRJbnN0cnVjdGlvbihvcGNvZGUpOwotI2Vsc2UK
LSAgICAjZGVmaW5lIEJFR0lOX09QQ09ERShvcGNvZGUpIG9wY29kZToKLSNlbmRpZgorICAgICNk
ZWZpbmUgTkVYVF9PUENPREUgTkVYVF9PUENPREVfSU5TVFJVTUVOVEFUSU9OIGdvdG8gKnZQQy0+
dS5vcGNvZGUKKyAgICAjZGVmaW5lIEJFR0lOX09QQ09ERShvcGNvZGUpIG9wY29kZTogT1BDT0RF
X0lOU1RSVU1FTlRBVElPTihvcGNvZGUsIHZQQykKICAgICBORVhUX09QQ09ERTsKICNlbHNlCi0g
ICAgI2RlZmluZSBORVhUX09QQ09ERSBjb250aW51ZQotI2lmIERVTVBfT1BDT0RFX1NUQVRTCi0g
ICAgI2RlZmluZSBCRUdJTl9PUENPREUob3Bjb2RlKSBjYXNlIG9wY29kZTogT3Bjb2RlU3RhdHM6
OnJlY29yZEluc3RydWN0aW9uKG9wY29kZSk7Ci0jZWxzZQotICAgICNkZWZpbmUgQkVHSU5fT1BD
T0RFKG9wY29kZSkgY2FzZSBvcGNvZGU6Ci0jZW5kaWYKKyAgICAjZGVmaW5lIE5FWFRfT1BDT0RF
IE5FWFRfT1BDT0RFX0lOU1RSVU1FTlRBVElPTiBjb250aW51ZQorICAgICNkZWZpbmUgQkVHSU5f
T1BDT0RFKG9wY29kZSkgY2FzZSBvcGNvZGU6IE9QQ09ERV9JTlNUUlVNRU5UQVRJT04ob3Bjb2Rl
LCB2UEMpCiAgICAgd2hpbGUgKDEpIC8vIGl0ZXJhdG9yIGxvb3AgYmVnaW5zCiAgICAgc3dpdGNo
ICh2UEMtPnUub3Bjb2RlKQogI2VuZGlmCkBAIC0yMjY0LDYgKzIyNjksNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICAgICAgZ290byB2bV90
aHJvdzsKIAogICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrOworICAgICAgICAg
ICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5nZVNhbXBsaW5nUmVnaW9uKGNvZGVCbG9jayk7CiAgICAg
ICAgICAgICBzZXRTY29wZUNoYWluKGV4ZWMsIHNjb3BlQ2hhaW4sIHNjb3BlQ2hhaW5Gb3JDYWxs
KGV4ZWMsIGZ1bmN0aW9uQm9keU5vZGUsIGNvZGVCbG9jaywgY2FsbERhdGFTY29wZUNoYWluLCBy
KSk7CiAgICAgICAgICAgICBrID0gY29kZUJsb2NrLT5qc1ZhbHVlcy5kYXRhKCk7CiAgICAgICAg
ICAgICB2UEMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwpAQCAtMjI4Miw4ICsy
Mjg4LDEwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RN
YXJrZXIoKSA/IGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpIDogclt0aGlzVmFsXS51LmpzVmFsdWU7
CiAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MocmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKio+KHIp
ICsgZmlyc3RBcmcgKyAxLCBhcmdDb3VudCAtIDEpOwogCisgICAgICAgICAgICBPcGNvZGVTYW1w
bGluZzo6c2V0U2FtcGxpbmcoT3Bjb2RlU2FtcGxpbmc6OnNhbXBsaW5nX25hdGl2ZUNhbGwpOwog
ICAgICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rp
b24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSwgdGhpc1ZhbHVlLCBhcmdzKTsKICAg
ICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICAgICAgT3Bjb2RlU2FtcGxp
bmc6OnNldFNhbXBsaW5nKHN0YXRpY19jYXN0PE9wY29kZVNhbXBsaW5nOjpTYW1wbGluZ0lEPihv
cF9jYWxsKSk7CiAKICAgICAgICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSByZXR1cm5WYWx1ZTsK
IApAQCAtMjMzMSw2ICsyMzM5LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUo
RXhlY3V0aQogICAgICAgICB9CiAKICAgICAgICAgY29kZUJsb2NrID0gY2FsbEZyYW1lW1JlZ2lz
dGVyRmlsZTo6Q2FsbGVyQ29kZUJsb2NrXS51LmNvZGVCbG9jazsKKyAgICAgICAgT3Bjb2RlU2Ft
cGxpbmc6OmNoYW5nZVNhbXBsaW5nUmVnaW9uKGNvZGVCbG9jayk7CiAgICAgICAgIGlmICghY29k
ZUJsb2NrKQogICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogCkBAIC0yMzk1LDYgKzI0
MDQsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
ICAgICAgICAgZ290byB2bV90aHJvdzsKIAogICAgICAgICAgICAgY29kZUJsb2NrID0gbmV3Q29k
ZUJsb2NrOworICAgICAgICAgICAgT3Bjb2RlU2FtcGxpbmc6OmNoYW5nZVNhbXBsaW5nUmVnaW9u
KGNvZGVCbG9jayk7CiAgICAgICAgICAgICBzZXRTY29wZUNoYWluKGV4ZWMsIHNjb3BlQ2hhaW4s
IHNjb3BlQ2hhaW5Gb3JDYWxsKGV4ZWMsIGZ1bmN0aW9uQm9keU5vZGUsIGNvZGVCbG9jaywgY2Fs
bERhdGFTY29wZUNoYWluLCByKSk7CiAgICAgICAgICAgICBrID0gY29kZUJsb2NrLT5qc1ZhbHVl
cy5kYXRhKCk7CiAgICAgICAgICAgICB2UEMgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdp
bigpOwpJbmRleDogV2ViS2l0L0phdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzNTAzMykK
KysrIFdlYktpdC9KYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBSZWdpc3Rl
ckZpbGUmIHJlZ2lzdGVyRmlsZSgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJGaWxlOyB9CiAgICAgICAg
IAotICAgICAgICBPcGNvZGUgZ2V0T3Bjb2RlKE9wY29kZUlEIGlkKQorICAgICAgICBzdGF0aWMg
T3Bjb2RlIGdldE9wY29kZShPcGNvZGVJRCBpZCkKICAgICAgICAgewogICAgICAgICAgICAgI2lm
IEhBVkUoQ09NUFVURURfR09UTykKICAgICAgICAgICAgICAgICByZXR1cm4gbV9vcGNvZGVUYWJs
ZVtpZF07CkBAIC03NSwxNyArNzUsMTcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgICAgICAj
ZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIE9wY29kZUlEIGdldE9wY29kZUlEKE9wY29kZSBv
cGNvZGUpCisgICAgICAgIHN0YXRpYyBPcGNvZGVJRCBnZXRPcGNvZGVJRChPcGNvZGUgb3Bjb2Rl
KQogICAgICAgICB7CiAgICAgICAgICAgICAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQogICAgICAg
ICAgICAgICAgIEFTU0VSVChpc09wY29kZShvcGNvZGUpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9vcGNvZGVJRFRhYmxlLmdldChvcGNvZGUpOworICAgICAgICAgICAgICAgIHJldHVybiBt
X29wY29kZUlEVGFibGUtPmdldChvcGNvZGUpOwogICAgICAgICAgICAgI2Vsc2UKICAgICAgICAg
ICAgICAgICByZXR1cm4gb3Bjb2RlOwogICAgICAgICAgICAgI2VuZGlmCiAgICAgICAgIH0KIAot
ICAgICAgICBib29sIGlzT3Bjb2RlKE9wY29kZSBvcGNvZGUpOworICAgICAgICBzdGF0aWMgYm9v
bCBpc09wY29kZShPcGNvZGUgb3Bjb2RlKTsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUqIGV4
ZWN1dGUoUHJvZ3JhbU5vZGUqLCBFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEpTT2JqZWN0
KiB0aGlzT2JqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAgICAgICAgSlNWYWx1ZSogZXhlY3V0
ZShGdW5jdGlvbkJvZHlOb2RlKiwgRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiosIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBl
eGNlcHRpb24pOwpAQCAtMTU4LDggKzE1OCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICB2
b2lkKiBtX2pzU3RyaW5nVnB0cjsKIAogI2lmIEhBVkUoQ09NUFVURURfR09UTykKLSAgICAgICAg
T3Bjb2RlIG1fb3Bjb2RlVGFibGVbbnVtT3Bjb2RlSURzXTsgLy8gTWFwcyBPcGNvZGVJRCA9PiBP
cGNvZGUgZm9yIGNvbXBpbGluZwotICAgICAgICBIYXNoTWFwPE9wY29kZSwgT3Bjb2RlSUQ+IG1f
b3Bjb2RlSURUYWJsZTsgLy8gTWFwcyBPcGNvZGUgPT4gT3Bjb2RlSUQgZm9yIGRlY29tcGlsaW5n
CisgICAgICAgIHN0YXRpYyBPcGNvZGUgbV9vcGNvZGVUYWJsZVtudW1PcGNvZGVJRHNdOyAvLyBN
YXBzIE9wY29kZUlEID0+IE9wY29kZSBmb3IgY29tcGlsaW5nCisgICAgICAgIHN0YXRpYyBIYXNo
TWFwPE9wY29kZSwgT3Bjb2RlSUQ+KiBtX29wY29kZUlEVGFibGU7IC8vIE1hcHMgT3Bjb2RlID0+
IE9wY29kZUlEIGZvciBkZWNvbXBpbGluZwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogV2ViS2l0
L0phdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0phdmFT
Y3JpcHRDb3JlL1ZNL09wY29kZS5jcHAJKHJldmlzaW9uIDM1MDMzKQorKysgV2ViS2l0L0phdmFT
Y3JpcHRDb3JlL1ZNL09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwOSArMzIsMTIw
IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2lmIERVTVBfU0FNUExJTkdfRlJBTUVXT1JL
CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUg
PHRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBLSlMgewogCi0jaWYgRFVNUF9PUENPREVfU1RBVFMKKyNp
ZiBEVU1QX09QQ09ERV9TVEFUUyB8fCBEVU1QX1NBTVBMSU5HX0ZSQU1FV09SSwogCi1sb25nIGxv
bmcgT3Bjb2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOwotbG9uZyBsb25nIE9w
Y29kZVN0YXRzOjpvcGNvZGVQYWlyQ291bnRzW251bU9wY29kZUlEc11bbnVtT3Bjb2RlSURzXTsK
LWludCBPcGNvZGVTdGF0czo6bGFzdE9wY29kZSA9IC0xOworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IG9wY29kZU5hbWVzW10gPSB7CisgICAgImxvYWQgICAgICAgICAgICAgICAgIiwKKyAgICAi
bmV3X29iamVjdCAgICAgICAgICAiLAorICAgICJuZXdfYXJyYXkgICAgICAgICAgICIsCisgICAg
Im5ld19yZWdleHAgICAgICAgICAgIiwKKyAgICAibW92ICAgICAgICAgICAgICAgICAiLAorICAg
IAorICAgICJub3QgICAgICAgICAgICAgICAgICIsCisgICAgImVxICAgICAgICAgICAgICAgICAg
IiwKKyAgICAibmVxICAgICAgICAgICAgICAgICAiLAorICAgICJzdHJpY3RlcSAgICAgICAgICAg
ICIsCisgICAgIm5zdHJpY3RlcSAgICAgICAgICAgIiwKKyAgICAibGVzcyAgICAgICAgICAgICAg
ICAiLAorICAgICJsZXNzZXEgICAgICAgICAgICAgICIsCisgICAgCisgICAgInByZV9pbmMgICAg
ICAgICAgICAgIiwKKyAgICAicHJlX2RlYyAgICAgICAgICAgICAiLAorICAgICJwb3N0X2luYyAg
ICAgICAgICAgICIsCisgICAgInBvc3RfZGVjICAgICAgICAgICAgIiwKKyAgICAidG9fanNudW1i
ZXIgICAgICAgICAiLAorICAgICJuZWdhdGUgICAgICAgICAgICAgICIsCisgICAgImFkZCAgICAg
ICAgICAgICAgICAgIiwKKyAgICAibXVsICAgICAgICAgICAgICAgICAiLAorICAgICJkaXYgICAg
ICAgICAgICAgICAgICIsCisgICAgIm1vZCAgICAgICAgICAgICAgICAgIiwKKyAgICAic3ViICAg
ICAgICAgICAgICAgICAiLAorICAgIAorICAgICJsc2hpZnQgICAgICAgICAgICAgICIsCisgICAg
InJzaGlmdCAgICAgICAgICAgICAgIiwKKyAgICAidXJzaGlmdCAgICAgICAgICAgICAiLAorICAg
ICJiaXRhbmQgICAgICAgICAgICAgICIsCisgICAgImJpdHhvciAgICAgICAgICAgICAgIiwKKyAg
ICAiYml0b3IgICAgICAgICAgICAgICAiLAorICAgICJiaXRub3QgICAgICAgICAgICAgICIsCisg
ICAgCisgICAgImluc3RhbmNlb2YgICAgICAgICAgIiwKKyAgICAidHlwZW9mICAgICAgICAgICAg
ICAiLAorICAgICJpbiAgICAgICAgICAgICAgICAgICIsCisKKyAgICAicmVzb2x2ZSAgICAgICAg
ICAgICAiLAorICAgICJyZXNvbHZlX3NraXAgICAgICAgICIsCisgICAgImdldF9zY29wZWRfdmFy
ICAgICAgIiwKKyAgICAicHV0X3Njb3BlZF92YXIgICAgICAiLAorICAgICJyZXNvbHZlX2Jhc2Ug
ICAgICAgICIsCisgICAgInJlc29sdmVfd2l0aF9iYXNlICAgIiwKKyAgICAicmVzb2x2ZV9mdW5j
ICAgICAgICAiLAorICAgICJnZXRfYnlfaWQgICAgICAgICAgICIsCisgICAgInB1dF9ieV9pZCAg
ICAgICAgICAgIiwKKyAgICAiZGVsX2J5X2lkICAgICAgICAgICAiLAorICAgICJnZXRfYnlfdmFs
ICAgICAgICAgICIsCisgICAgInB1dF9ieV92YWwgICAgICAgICAgIiwKKyAgICAiZGVsX2J5X3Zh
bCAgICAgICAgICAiLAorICAgICJwdXRfYnlfaW5kZXggICAgICAgICIsCisgICAgInB1dF9nZXR0
ZXIgICAgICAgICAgIiwKKyAgICAicHV0X3NldHRlciAgICAgICAgICAiLAorCisgICAgImptcCAg
ICAgICAgICAgICAgICAgIiwKKyAgICAianRydWUgICAgICAgICAgICAgICAiLAorICAgICJqZmFs
c2UgICAgICAgICAgICAgICIsCisgICAgImpsZXNzICAgICAgICAgICAgICAgIiwKKyAgICAiam5s
ZXNzICAgICAgICAgICAgICAiLAorICAgICJqbXBfc2NvcGVzICAgICAgICAgICIsCisgICAgImxv
b3AgICAgICAgICAgICAgICAgIiwKKyAgICAibG9vcF9pZl90cnVlICAgICAgICAiLAorICAgICJs
b29wX2lmX2xlc3MgICAgICAgICIsCisKKyAgICAibmV3X2Z1bmMgICAgICAgICAgICAiLAorICAg
ICJuZXdfZnVuY19leHAgICAgICAgICIsCisgICAgImNhbGwgICAgICAgICAgICAgICAgIiwKKyAg
ICAiY2FsbF9ldmFsICAgICAgICAgICAiLAorICAgICJyZXQgICAgICAgICAgICAgICAgICIsCisK
KyAgICAiY29uc3RydWN0ICAgICAgICAgICAiLAorCisgICAgImdldF9wbmFtZXMgICAgICAgICAg
IiwKKyAgICAibmV4dF9wbmFtZSAgICAgICAgICAiLAorCisgICAgInB1c2hfc2NvcGUgICAgICAg
ICAgIiwKKyAgICAicG9wX3Njb3BlICAgICAgICAgICAiLAorCisgICAgImNhdGNoICAgICAgICAg
ICAgICAgIiwKKyAgICAidGhyb3cgICAgICAgICAgICAgICAiLAorICAgICJuZXdfZXJyb3IgICAg
ICAgICAgICIsCiAKLXN0YXRpYyBPcGNvZGVTdGF0cyBsb2dnZXI7CisgICAgImpzciAgICAgICAg
ICAgICAgICAgIiwKKyAgICAic3JldCAgICAgICAgICAgICAgICAiLAogCi1zdGF0aWMgY29uc3Qg
Y2hhciogb3Bjb2RlTmFtZXNbXSA9IHsKLSAgICAibG9hZCAgICAgICAgIiwKLSAgICAibmV3X29i
amVjdCAgIiwKLSAgICAibmV3X2FycmF5ICAgIiwKLSAgICAibmV3X3JlZ2V4cCAgIiwKLSAgICAi
bW92ICAgICAgICAgIiwKLSAgICAKLSAgICAibm90ICAgICAgICAgIiwKLSAgICAiZXEgICAgICAg
ICAgIiwKLSAgICAibmVxICAgICAgICAgIiwKLSAgICAic3RyaWN0ZXEgICAgIiwKLSAgICAibnN0
cmljdGVxICAgIiwKLSAgICAibGVzcyAgICAgICAgIiwKLSAgICAibGVzc2VxICAgICAgIiwKLSAg
ICAKLSAgICAicHJlX2luYyAgICAgIiwKLSAgICAicHJlX2RlYyAgICAgIiwKLSAgICAicG9zdF9p
bmMgICAgIiwKLSAgICAicG9zdF9kZWMgICAgIiwKLSAgICAidG9fanNudW1iZXIgIiwKLSAgICAi
bmVnYXRlICAgICAgIiwKLSAgICAiYWRkICAgICAgICAgIiwKLSAgICAibXVsICAgICAgICAgIiwK
LSAgICAiZGl2ICAgICAgICAgIiwKLSAgICAibW9kICAgICAgICAgIiwKLSAgICAic3ViICAgICAg
ICAgIiwKLSAgICAKLSAgICAibHNoaWZ0ICAgICAgIiwKLSAgICAicnNoaWZ0ICAgICAgIiwKLSAg
ICAidXJzaGlmdCAgICAgIiwKLSAgICAiYml0YW5kICAgICAgIiwKLSAgICAiYml0eG9yICAgICAg
IiwKLSAgICAiYml0b3IgICAgICAgIiwKLSAgICAiYml0bm90ICAgICAgIiwKLSAgICAKLSAgICAi
aW5zdGFuY2VvZiAgIiwKLSAgICAidHlwZW9mICAgICAgIiwKLSAgICAiaW4gICAgICAgICAgIiwK
LQotICAgICJyZXNvbHZlICAgICAiLAotICAgICJyZXNvbHZlX3NraXAiLAotICAgICJnZXRfc2Nv
cGVkX3ZhciIsCi0gICAgInB1dF9zY29wZWRfdmFyIiwKLSAgICAicmVzb2x2ZV9iYXNlIiwKLSAg
ICAicmVzb2x2ZV93aXRoX2Jhc2UiLAotICAgICJyZXNvbHZlX2Z1bmMiLAotICAgICJnZXRfYnlf
aWQgICAiLAotICAgICJwdXRfYnlfaWQgICAiLAotICAgICJkZWxfYnlfaWQgICAiLAotICAgICJn
ZXRfYnlfdmFsICAiLAotICAgICJwdXRfYnlfdmFsICAiLAotICAgICJkZWxfYnlfdmFsICAiLAot
ICAgICJwdXRfYnlfaW5kZXgiLAotICAgICJwdXRfZ2V0dGVyICAiLAotICAgICJwdXRfc2V0dGVy
ICAiLAotCi0gICAgImptcCAgICAgICAgICIsCi0gICAgImp0cnVlICAgICAgICIsCi0gICAgImpm
YWxzZSAgICAgICIsCi0gICAgImpsZXNzICAgICAgICIsCi0gICAgImpubGVzcyAgICAgICIsCi0g
ICAgImptcF9zY29wZXMgICIsCi0gICAgImxvb3AgICAgICAgICIsCi0gICAgImxvb3BfaWZfdHJ1
ZSIsCi0gICAgImxvb3BfaWZfbGVzcyIsCi0KLSAgICAibmV3X2Z1bmMgICAgIiwKLSAgICAibmV3
X2Z1bmNfZXhwIiwKLSAgICAiY2FsbCAgICAgICAgIiwKLSAgICAiY2FsbF9ldmFsICAgIiwKLSAg
ICAicmV0ICAgICAgICAgIiwKLQotICAgICJjb25zdHJ1Y3QgICAiLAotCi0gICAgImdldF9wbmFt
ZXMgICIsCi0gICAgIm5leHRfcG5hbWUgICIsCi0KLSAgICAicHVzaF9zY29wZSAgIiwKLSAgICAi
cG9wX3Njb3BlICAgIiwKLQotICAgICJjYXRjaCAgICAgICAiLAotICAgICJ0aHJvdyAgICAgICAi
LAotICAgICJuZXdfZXJyb3IgICAiLAorICAgICJkZWJ1ZyAgICAgICAgICAgICAgICIsCiAKLSAg
ICAianNyICAgICAgICAgIiwKLSAgICAic3JldCAgICAgICAgIiwKKyAgICAiZW5kICAgICAgICAg
ICAgICAgICAiCit9OwogCi0gICAgImRlYnVnICAgICAgICIsCisjZW5kaWYKIAotICAgICJlbmQg
ICAgICAgICAiCi19OworI2lmIERVTVBfT1BDT0RFX1NUQVRTCisKK2xvbmcgbG9uZyBPcGNvZGVT
dGF0czo6b3Bjb2RlQ291bnRzW251bU9wY29kZUlEc107Citsb25nIGxvbmcgT3Bjb2RlU3RhdHM6
Om9wY29kZVBhaXJDb3VudHNbbnVtT3Bjb2RlSURzXVtudW1PcGNvZGVJRHNdOworaW50IE9wY29k
ZVN0YXRzOjpsYXN0T3Bjb2RlID0gLTE7CisKK3N0YXRpYyBPcGNvZGVTdGF0cyBzdGF0c0xvZ2dl
cjsKIAogT3Bjb2RlU3RhdHM6Ok9wY29kZVN0YXRzKCkKIHsKQEAgLTI2NSw2ICsyNzYsMjI2IEBA
IHZvaWQgT3Bjb2RlU3RhdHM6OnJlc2V0TGFzdEluc3RydWN0aW9uKCkKICAgICBsYXN0T3Bjb2Rl
ID0gLTE7CiB9CiAKKyNlbmRpZiAvLyBEVU1QX09QQ09ERV9TVEFUUworCisKKyNpZiBEVU1QX1NB
TVBMSU5HX0ZSQU1FV09SSworCitzdGF0aWMgY29uc3QgaW50IG51bVNhbXBsaW5nSURzID0gT3Bj
b2RlU2FtcGxpbmc6OnNhbXBsaW5nX3Vua25vd24gKyAxOworc3RhdGljIGxvbmcgbG9uZyBvcGNv
ZGVTYW1wbGVDb3VudHNbbnVtU2FtcGxpbmdJRHNdID0geyAwIH07CisKK09wY29kZVNhbXBsaW5n
OjpTYW1wbGluZ0lEIE9wY29kZVNhbXBsaW5nOjpzYW1wbGUgPSBPcGNvZGVTYW1wbGluZzo6c2Ft
cGxpbmdfdW5rbm93bjsKK3ZvaWQqIE9wY29kZVNhbXBsaW5nOjpzYW1wbGVkVlBDID0gMDsKKyNp
ZiBEVU1QX0JMT0NLX1NBTVBMSU5HCitDb2RlQmxvY2sqIE9wY29kZVNhbXBsaW5nOjpzYW1wbGVk
Q29kZUJsb2NrID0gMDsKKworY2xhc3MgQ29kZUJsb2NrU2FtcGxlIHsKKyAgICBSZWZQdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2s7CisgICAgUmVmUHRyPFByb2dyYW1Db2RlQmxvY2s+IGdsb2JhbENv
ZGVCbG9jazsKKyAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gZXZhbENvZGVCbG9jazsKKyAgICBD
b2RlVHlwZSBjb2RlVHlwZTsKKyAgICAKK3B1YmxpYzoKKworICAgIENvZGVCbG9jayogZ2V0Q29k
ZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrXykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29k
ZVR5cGUpIHsKKyAgICAgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgICAgICByZXR1cm4g
Y29kZUJsb2NrLmdldCgpOworCisgICAgICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICAgICAgICAg
IHJldHVybiBnbG9iYWxDb2RlQmxvY2suZ2V0KCk7CisKKyAgICAgICAgY2FzZSBFdmFsQ29kZToK
KyAgICAgICAgICAgIHJldHVybiBldmFsQ29kZUJsb2NrLmdldCgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRDb2RlQmxv
Y2soQ29kZUJsb2NrKiBjb2RlQmxvY2tfKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgoY29kZVR5
cGUgPSBjb2RlQmxvY2tfLT5jb2RlVHlwZSkpIHsKKyAgICAgICAgY2FzZSBGdW5jdGlvbkNvZGU6
CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBjb2RlQmxvY2tfOworCisgICAgICAgIGNhc2UgR2xv
YmFsQ29kZToKKyAgICAgICAgICAgIGdsb2JhbENvZGVCbG9jayA9IHN0YXRpY19jYXN0PFByb2dy
YW1Db2RlQmxvY2sqPihjb2RlQmxvY2tfKTsKKworICAgICAgICBjYXNlIEV2YWxDb2RlOgorICAg
ICAgICAgICAgZXZhbENvZGVCbG9jayA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxvY2sqPihj
b2RlQmxvY2tfKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBjaGFyKiBmdW5jdGlvbk5h
bWU7CisgICAgaW50IGxpbmVOdW07CisgICAgdW5zaWduZWQgc2l6ZTsKKyAgICBpbnQgdG90YWxD
b3VudDsKKyAgICBpbnQgdnBjQ291bnRzW107Cit9OwordHlwZWRlZiBXVEY6Okhhc2hNYXA8Q29k
ZUJsb2NrKiwgQ29kZUJsb2NrU2FtcGxlKj4gQ29kZUJsb2NrU2FtcGxlTWFwOworc3RhdGljIENv
ZGVCbG9ja1NhbXBsZU1hcCogY29kZUJsb2NrU2FtcGxlTWFwOworCitzdGF0aWMgaW50IGNvbXBh
cmVDb2RlQmxvY2tTYW1wbGVzKGNvbnN0IHZvaWQqIGxlZnQsIGNvbnN0IHZvaWQqIHJpZ2h0KQor
eworICAgIGNvbnN0IENvZGVCbG9ja1NhbXBsZSogY29uc3QgbGVmdFZhbHVlID0gKnN0YXRpY19j
YXN0PGNvbnN0IENvZGVCbG9ja1NhbXBsZSogY29uc3QgKj4obGVmdCk7CisgICAgY29uc3QgQ29k
ZUJsb2NrU2FtcGxlKiBjb25zdCByaWdodFZhbHVlID0gKnN0YXRpY19jYXN0PGNvbnN0IENvZGVC
bG9ja1NhbXBsZSogY29uc3QgKj4ocmlnaHQpOworCisgICAgcmV0dXJuIChsZWZ0VmFsdWUtPnRv
dGFsQ291bnQgPCByaWdodFZhbHVlLT50b3RhbENvdW50KSA/IDEgOiAobGVmdFZhbHVlLT50b3Rh
bENvdW50ID4gcmlnaHRWYWx1ZS0+dG90YWxDb3VudCkgPyAtMSA6IDA7Cit9CisjZW5kaWYKKwor
T3Bjb2RlU2FtcGxpbmcqIE9wY29kZVNhbXBsaW5nOjppbml0T3Bjb2RlU2FtcGxpbmcoKQorewor
ICAgIHN0YXRpYyBPcGNvZGVTYW1wbGluZyBzYW1wbGluZ0xvZ2dlcjsKKyAgICByZXR1cm4gJnNh
bXBsaW5nTG9nZ2VyOworfQorCitzdGF0aWMgaW5saW5lIGhlcnR6MnVzKGludCBmcmVxdWVuY3kp
Cit7CisgICAgcmV0dXJuIDEwMDAwMDAgLyBmcmVxdWVuY3k7Cit9CisKK3N0YXRpYyB2b2lkKiBz
YW1wbGluZ1N0YXJ0Um91dGluZSh2b2lkKikKK3sKKyAgICB3aGlsZSAoMSkgeworICAgICAgICAv
LyBEZWZhdWx0IHRvIHNhbXBsaW5nIGF0IDEwMDBoei4KKyAgICAgICAgdXNsZWVwKGhlcnR6MnVz
KDEwMDApKTsKKworICAgICAgICBvcGNvZGVTYW1wbGVDb3VudHNbT3Bjb2RlU2FtcGxpbmc6OnNh
bXBsZV0rKzsKKworI2lmIERVTVBfQkxPQ0tfU0FNUExJTkcKKyAgICAgICAgUmVmUHRyPENvZGVC
bG9jaz4gY29kZUJsb2NrID0gT3Bjb2RlU2FtcGxpbmc6OnNhbXBsZWRDb2RlQmxvY2s7CisgICAg
ICAgIHZvaWQqIHZQQyA9IE9wY29kZVNhbXBsaW5nOjpzYW1wbGVkVlBDOworICAgICAgICAKKyAg
ICAgICAgaWYgKGNvZGVCbG9jayAmJiAoT3Bjb2RlU2FtcGxpbmc6OnNhbXBsZSA8PSBPcGNvZGVT
YW1wbGluZzo6c2FtcGxpbmdfbmV4dCkpIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjb2Rl
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKKyAgICAgICAgICAgIGludCBzaXpl
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBDb2RlQmxvY2tTYW1wbGUqIGJsb2NrU2FtcGxlID0gY29kZUJsb2NrU2FtcGxlTWFwLT5n
ZXQoY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghYmxvY2tTYW1wbGUpIHsKKyAg
ICAgICAgICAgICAgICBibG9ja1NhbXBsZSA9IChDb2RlQmxvY2tTYW1wbGUqKWNhbGxvYygxLCBz
aXplb2YoQ29kZUJsb2NrU2FtcGxlKSArIChzaXplb2YoaW50KSAqIHNpemUpKTsKKyAgICAgICAg
ICAgICAgICBibG9ja1NhbXBsZS0+c2V0Q29kZUJsb2NrKGNvZGVCbG9jay5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgYmxvY2tTYW1wbGUtPmZ1bmN0aW9uTmFtZSA9IHN0cmR1cChjb2RlQmxvY2st
Pm93bmVyTm9kZS0+c291cmNlVVJMKCkuVVRGOFN0cmluZygpLmNfc3RyKCkpOyAvLyBjb3B5IFVT
dHJpbmc/CisgICAgICAgICAgICAgICAgYmxvY2tTYW1wbGUtPmxpbmVOdW0gPSBjb2RlQmxvY2st
PmxpbmVOdW1iZXJGb3JWUEMoY29kZSk7CisgICAgICAgICAgICAgICAgYmxvY2tTYW1wbGUtPnNp
emUgPSBzaXplOworICAgICAgICAgICAgICAgIGNvZGVCbG9ja1NhbXBsZU1hcC0+c2V0KGNvZGVC
bG9jay5nZXQoKSwgYmxvY2tTYW1wbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBibG9ja1NhbXBsZS0+dG90YWxDb3VudCsrOworICAgICAgICAgICAgaWYgKHZQ
QykgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVPZmZzZXQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHZQQykgLSByZWludGVycHJldF9j
YXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSkpIC8gc2l6ZW9m
KEluc3RydWN0aW9uKik7CisgICAgICAgICAgICAgICAgaWYgKGNvZGVPZmZzZXQgPCBibG9ja1Nh
bXBsZS0+c2l6ZSkgLy8gVGhpcyB3b3VsZCBvY2N1ciBpZiBjb2RlQmxvY2sgJiB2UEMgYXJlIG5v
dCBjb25zaXN0ZW50IC0gZS5nLiBzYW1wbGUgbWlkIG9wX2NhbGwvb3BfcmV0LgorICAgICAgICAg
ICAgICAgICAgICBibG9ja1NhbXBsZS0+dnBjQ291bnRzW2NvZGVPZmZzZXRdKys7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworT3Bj
b2RlU2FtcGxpbmc6Ok9wY29kZVNhbXBsaW5nKCkKK3sKKyNpZiBEVU1QX0JMT0NLX1NBTVBMSU5H
CisgICAgY29kZUJsb2NrU2FtcGxlTWFwID0gbmV3IENvZGVCbG9ja1NhbXBsZU1hcCgpOworI2Vu
ZGlmCisgICAgCisgICAgcHRocmVhZF90IHRocmVhZDsKKyAgICBwdGhyZWFkX2NyZWF0ZSgmdGhy
ZWFkLCAwLCBzYW1wbGluZ1N0YXJ0Um91dGluZSwgMCk7Cit9CisKKyNpZiBEVU1QX09QQ09ERV9T
QU1QTElORworc3RhdGljIGludCBjb21wYXJlT3Bjb2RlSW5kaWNlc1NhbXBsaW5nKGNvbnN0IHZv
aWQqIGxlZnQsIGNvbnN0IHZvaWQqIHJpZ2h0KQoreworICAgIGxvbmcgbG9uZyBsZWZ0VmFsdWUg
PSBvcGNvZGVTYW1wbGVDb3VudHNbKihpbnQqKWxlZnRdOworICAgIGxvbmcgbG9uZyByaWdodFZh
bHVlID0gb3Bjb2RlU2FtcGxlQ291bnRzWyooaW50KilyaWdodF07CisKKyAgICByZXR1cm4gKGxl
ZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpID8gMSA6IChsZWZ0VmFsdWUgPiByaWdodFZhbHVlKSA/IC0x
IDogMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IG5vbk9wY29kZVNhbXBsaW5nTmFt
ZXNbbnVtU2FtcGxpbmdJRHMgLSBudW1PcGNvZGVJRHNdID0geworICAgICJORVhUX1ZQQyAgICAg
ICAgICAgICIsCisgICAgIk5BVElWRV9DQUxMICAgICAgICAgIiwKKyAgICAiVU5LTk9XTiAgICAg
ICAgICAgICAiCit9OworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHNhbXBsaW5nTmFtZXMo
aW50IGluZGV4KQoreworICAgIHJldHVybiAoaW5kZXggPCBudW1PcGNvZGVJRHMpID8gb3Bjb2Rl
TmFtZXNbaW5kZXhdIDogbm9uT3Bjb2RlU2FtcGxpbmdOYW1lc1tpbmRleCAtIG51bU9wY29kZUlE
c107Cit9CisjZW5kaWYKKworT3Bjb2RlU2FtcGxpbmc6On5PcGNvZGVTYW1wbGluZygpCit7Cisg
ICAgbG9uZyBsb25nIHRvdGFsS25vd25TYW1wbGVzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNhbXBsaW5nX3Vua25vd247ICsraSkKKyAgICAgICAgdG90YWxLbm93blNhbXBsZXMgKz0g
b3Bjb2RlU2FtcGxlQ291bnRzW2ldOworICAgIGxvbmcgbG9uZyB1bmtub3duU2FtcGxlcyA9IG9w
Y29kZVNhbXBsZUNvdW50c1tzYW1wbGluZ191bmtub3duXTsKKyAgICBsb25nIGxvbmcgdG90YWxT
YW1wbGVzID0gdG90YWxLbm93blNhbXBsZXMgKyB1bmtub3duU2FtcGxlczsKKworI2lmIERVTVBf
T1BDT0RFX1NBTVBMSU5HCisgICAgZnByaW50ZihzdGRvdXQsICJcbk9wY29kZSBzYW1wbGluZyBy
ZXN1bHRzXG5cbiIpOyAKKyAgICAKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlRvdGFsIHNhbXBsZXMg
d2l0aGluIFZNIGV4ZWN1dGlvbjogICVsbGRcbiIsIHRvdGFsS25vd25TYW1wbGVzKTsKKyAgICBm
cHJpbnRmKHN0ZG91dCwgIlRvdGFsIHNhbXBsZXMgb3V0c2lkZSBWTSBleGVjdXRpb246ICVsbGRc
blxuIiwgdW5rbm93blNhbXBsZXMpOworCisgICAgZnByaW50ZihzdGRvdXQsICJWTSBleGVjdXRp
b24gY2F0ZWdvcmllcyBpbiBvcmRlcjpcblxuIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1TYW1wbGluZ0lEczsgKytpKSB7CisgICAgICAgIGxvbmcgbG9uZyBjb3VudCA9IG9wY29kZVNh
bXBsZUNvdW50c1tpXTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIlczpcdCU2bGxkXHQlLjNm
JSVcdCglLjNmJSUpXG4iLCBzYW1wbGluZ05hbWVzKGkpLCBjb3VudCwgKChkb3VibGUpY291bnQg
KiAxMDApL3RvdGFsS25vd25TYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkvdG90YWxTYW1w
bGVzKTsgICAgCisgICAgfQorICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKworICAgIGZwcmlu
dGYoc3Rkb3V0LCAiVk0gZXhlY3V0aW9uIGNhdGVnb3JpZXMgYnkgc2FtcGxlIGNvdW50OlxuXG4i
KTsKKyAgICBpbnQgc29ydGVkSW5kaWNlc1tzYW1wbGluZ191bmtub3duXTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNhbXBsaW5nX3Vua25vd247ICsraSkKKyAgICAgICAgc29ydGVkSW5kaWNl
c1tpXSA9IGk7CisgICAgbWVyZ2Vzb3J0KHNvcnRlZEluZGljZXMsIHNhbXBsaW5nX3Vua25vd24s
IHNpemVvZihpbnQpLCBjb21wYXJlT3Bjb2RlSW5kaWNlc1NhbXBsaW5nKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNhbXBsaW5nX3Vua25vd247ICsraSkgeworICAgICAgICBpbnQgaW5kZXgg
PSBzb3J0ZWRJbmRpY2VzW2ldOworICAgICAgICBsb25nIGxvbmcgY291bnQgPSBvcGNvZGVTYW1w
bGVDb3VudHNbaW5kZXhdOworICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzOlx0JTZsbGRcdCUu
M2YlJVx0KCUuM2YlJSlcbiIsIHNhbXBsaW5nTmFtZXMoaW5kZXgpLCBjb3VudCwgKChkb3VibGUp
Y291bnQgKiAxMDApL3RvdGFsS25vd25TYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkvdG90
YWxTYW1wbGVzKTsgICAgCisgICAgfQorICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKKyNlbmRp
ZgorCisjaWYgRFVNUF9CTE9DS19TQU1QTElORworICAgIGZwcmludGYoc3Rkb3V0LCAiXG5CbG9j
ayBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKKyAgICAKKyAgICBpbnQgYmxvY2tzU2FtcGxlZCA9
IGNvZGVCbG9ja1NhbXBsZU1hcC0+c2l6ZSgpOworICAgIGxvbmcgbG9uZyBibG9ja1NhbXBsZXMg
PSAwOworICAgIENvZGVCbG9ja1NhbXBsZSogY29kZUJsb2NrU2FtcGxlc1tibG9ja3NTYW1wbGVk
XTsKKyAgICBDb2RlQmxvY2tTYW1wbGVNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBjb2RlQmxvY2tT
YW1wbGVNYXAtPmJlZ2luKCk7CisgICAgZm9yIChpbnQgaT0wOyBpIDwgYmxvY2tzU2FtcGxlZDsg
KytpLCArK21hcEl0ZXIpIHsKKyAgICAgICAgY29kZUJsb2NrU2FtcGxlc1tpXSA9IG1hcEl0ZXIt
PnNlY29uZDsKKyAgICAgICAgYmxvY2tTYW1wbGVzICs9IGNvZGVCbG9ja1NhbXBsZXNbaV0tPnRv
dGFsQ291bnQ7CisgICAgfQorICAgIG1lcmdlc29ydChjb2RlQmxvY2tTYW1wbGVzLCBibG9ja3NT
YW1wbGVkLCBzaXplb2YoQ29kZUJsb2NrU2FtcGxlKiksIGNvbXBhcmVDb2RlQmxvY2tTYW1wbGVz
KTsKKworICAgIGZvciAoaW50IGk9MDsgaSA8IGJsb2Nrc1NhbXBsZWQ7IGkrKykgeworICAgICAg
ICBkb3VibGUgdG90YWxQZXJjZW50ID0gKGNvZGVCbG9ja1NhbXBsZXNbaV0tPnRvdGFsQ291bnQg
KiAxMDAuMCkvdG90YWxTYW1wbGVzOworICAgICAgICBkb3VibGUgYmxvY2tQZXJjZW50ID0gKGNv
ZGVCbG9ja1NhbXBsZXNbaV0tPnRvdGFsQ291bnQgKiAxMDAuMCkvYmxvY2tTYW1wbGVzOworCisg
ICAgICAgIGlmIChibG9ja1BlcmNlbnQgPCAxKSBicmVhazsKKyAgICAgICAgZnByaW50ZihzdGRv
dXQsICIjJWQ6ICVzOiVkOiBzYW1wbGVkICVkIHRpbWVzIC0gJS4zZiUlICglLjNmJSUpXG4iLCBp
KzEsIGNvZGVCbG9ja1NhbXBsZXNbaV0tPmZ1bmN0aW9uTmFtZSwgY29kZUJsb2NrU2FtcGxlc1tp
XS0+bGluZU51bSwgY29kZUJsb2NrU2FtcGxlc1tpXS0+dG90YWxDb3VudCwgYmxvY2tQZXJjZW50
LCB0b3RhbFBlcmNlbnQpOworCisgICAgICAgIGlmIChpIDwgMTApIHsKKyAgICAgICAgICAgIGNv
ZGVCbG9ja1NhbXBsZXNbaV0tPmdldENvZGVCbG9jaygpLT5kdW1wKDApOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBvcCA9IDA7IG9wIDwgY29kZUJsb2NrU2FtcGxlc1tpXS0+c2l6ZTsgKytv
cCkgeworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IGNvZGVCbG9ja1NhbXBsZXNbaV0tPnZw
Y0NvdW50c1tvcF07CisgICAgICAgICAgICAgICAgaWYgKGNvdW50KSBwcmludGYoIiAgICBbJSA0
ZF0gaGFzIHNhbXBsZSBjb3VudDogJSA0ZFxuIiwgb3AsIGNvdW50KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaW50
ZigiXG4iKTsKKyAgICAKKyAgICBkZWxldGUgY29kZUJsb2NrU2FtcGxlTWFwOwogI2VuZGlmCit9
CisKKyNlbmRpZiAvLyBEVU1QX1NBTVBMSU5HX0ZSQU1FV09SSworCiAKIH0gLy8gbmFtZXNwYWNl
IFdURgpJbmRleDogV2ViS2l0L0phdmFTY3JpcHRDb3JlL1ZNL09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9KYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAkocmV2aXNpb24gMzUwMzMpCisr
KyBXZWJLaXQvSmF2YVNjcmlwdENvcmUvVk0vT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDkgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLSNkZWZpbmUgRFVNUF9PUENPREVfU1RB
VFMgMAorI2RlZmluZSBEVU1QX09QQ09ERV9TVEFUUyAgICAwCisjZGVmaW5lIERVTVBfT1BDT0RF
X1NBTVBMSU5HIDAKKyNkZWZpbmUgRFVNUF9CTE9DS19TQU1QTElORyAgMAogCiAgICAgI2RlZmlu
ZSBGT1JfRUFDSF9PUENPREVfSUQobWFjcm8pIFwKICAgICAgICAgbWFjcm8ob3BfbG9hZCkgXApA
QCAtMTU2LDggKzE1OCw5MSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgc3RhdGljIHZvaWQg
cmVzZXRMYXN0SW5zdHJ1Y3Rpb24oKTsKICAgICB9OwogCisjZGVmaW5lIERVTVBfT1BDT0RFX1NU
QVRTX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpIE9wY29kZVN0YXRzOjpyZWNvcmRJbnN0cnVjdGlv
bihvcGNvZGUpOworI2Vsc2UKKyNkZWZpbmUgRFVNUF9PUENPREVfU1RBVFNfSU5TVFJVTUVOVChv
cGNvZGUsIHZQQykKKyNlbmRpZiAvLyBEVU1QX09QQ09ERV9TVEFUUworCisKKyNkZWZpbmUgRFVN
UF9TQU1QTElOR19GUkFNRVdPUksgKERVTVBfT1BDT0RFX1NBTVBMSU5HIHx8IERVTVBfQkxPQ0tf
U0FNUExJTkcpCisjaWYgRFVNUF9TQU1QTElOR19GUkFNRVdPUksKKworICAgIGNsYXNzIENvZGVC
bG9jazsKKworICAgIHN0cnVjdCBPcGNvZGVTYW1wbGluZyB7CisgICAgICAgIE9wY29kZVNhbXBs
aW5nKCk7CisgICAgICAgIH5PcGNvZGVTYW1wbGluZygpOworICAgICAgICAKKyAgICAgICAgZW51
bSBTYW1wbGluZ0lEIHsKKyAgICAgICAgICAgIC8vIGFsbCBvcGNvZGUgaWRzIGFyZSBhbHNvIHZh
bGlkIHNhbXBsZSBpZHMuCisgICAgICAgICAgICBzYW1wbGluZ19uZXh0ID0gKG9wX2VuZCArIDEp
LCAvLyBUaGlzIHNob3VsZCBjb21lIGZpcnN0LgorICAgICAgICAgICAgc2FtcGxpbmdfbmF0aXZl
Q2FsbCwKKyAgICAgICAgICAgIHNhbXBsaW5nX3Vua25vd24gLy8gc2FtcGxpbmdfbm9fZW5kIE1V
U1QgY29tZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICAgICAgICB9OworCisgICAgICAgIHN0
YXRpYyBTYW1wbGluZ0lEIHNhbXBsZTsKKyAgICAgICAgc3RhdGljIHZvaWQqIHNhbXBsZWRWUEM7
CisjaWYgRFVNUF9CTE9DS19TQU1QTElORworICAgICAgICBzdGF0aWMgQ29kZUJsb2NrKiBzYW1w
bGVkQ29kZUJsb2NrOwogI2VuZGlmCiAKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0U2FtcGxpbmco
T3Bjb2RlSUQgb3Bjb2RlLCB2b2lkKiB2UEMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNhbXBs
ZSA9IChTYW1wbGluZ0lEKW9wY29kZTsKKyAgICAgICAgICAgIHNhbXBsZWRWUEMgPSB2UEM7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBzZXRTYW1wbGluZyhTYW1wbGluZ0lEIHJl
YXNvbikKKyAgICAgICAgeworICAgICAgICAgICAgc2FtcGxlID0gcmVhc29uOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBjaGFuZ2VTYW1wbGluZ1JlZ2lvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgc2FtcGxlZFZQQyA9IDA7CisgICAgICAg
ICAgICBzYW1wbGUgPSBzYW1wbGluZ191bmtub3duOworI2lmIERVTVBfQkxPQ0tfU0FNUExJTkcK
KyAgICAgICAgICAgIHNhbXBsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisjZWxzZQorI3ByYWdt
YSB1bnVzZWQoY29kZUJsb2NrKQorI2VuZGlmCisgICAgICAgIH0KKyAgICAKKyAgICAgICAgc3Rh
dGljIE9wY29kZVNhbXBsaW5nKiBpbml0T3Bjb2RlU2FtcGxpbmcoKTsKKyAgICB9OworCisjZGVm
aW5lIERVTVBfT1BDT0RFX1NBTVBMSU5HX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpIE9wY29kZVNh
bXBsaW5nOjpzZXRTYW1wbGluZyhvcGNvZGUsIHZQQyk7CisjZGVmaW5lIE5FWFRfT1BDT0RFX1NB
TVBMSU5HX0lOU1RSVU1FTlQgT3Bjb2RlU2FtcGxpbmc6OnNldFNhbXBsaW5nKE9wY29kZVNhbXBs
aW5nOjpzYW1wbGluZ19uZXh0KTsKKworI2Vsc2UgLy8gIURVTVBfU0FNUExJTkdfRlJBTUVXT1JL
CisKKyAgICBjbGFzcyBDb2RlQmxvY2s7CisKKyAgICBzdHJ1Y3QgT3Bjb2RlU2FtcGxpbmcgewor
ICAgICAgICBlbnVtIFNhbXBsaW5nSUQgeworICAgICAgICAgICAgLy8gYWxsIG9wY29kZSBpZHMg
YXJlIGFsc28gdmFsaWQgc2FtcGxlIGlkcy4KKyAgICAgICAgICAgIHNhbXBsaW5nX25leHQgPSAo
b3BfZW5kICsgMSksIC8vIFRoaXMgc2hvdWxkIGNvbWUgZmlyc3QuCisgICAgICAgICAgICBzYW1w
bGluZ19uYXRpdmVDYWxsLAorICAgICAgICAgICAgc2FtcGxpbmdfdW5rbm93biAvLyBzYW1wbGlu
Z19ub19lbmQgTVVTVCBjb21lIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgICAgICAgIH07CisK
KyAgICAgICAgc3RhdGljIGlubGluZSB2b2lkIHNldFNhbXBsaW5nKFNhbXBsaW5nSUQpIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZVNhbXBs
aW5nUmVnaW9uKENvZGVCbG9jayopIHsKKyAgICAgICAgfQorICAgIAorICAgICAgICBzdGF0aWMg
aW5saW5lIHZvaWQgaW5pdE9wY29kZVNhbXBsaW5nKCkgeworICAgICAgICB9CisgICAgfTsKKwor
I2RlZmluZSBEVU1QX09QQ09ERV9TQU1QTElOR19JTlNUUlVNRU5UKG9wY29kZSwgdlBDKQorI2Rl
ZmluZSBORVhUX09QQ09ERV9TQU1QTElOR19JTlNUUlVNRU5UCisKKyNlbmRpZiAvLyBEVU1QX09Q
Q09ERV9TQU1QTElORworCisjZGVmaW5lIE9QQ09ERV9JTlNUUlVNRU5UQVRJT04ob3Bjb2RlLCB2
UEMpIERVTVBfT1BDT0RFX1NUQVRTX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpIERVTVBfT1BDT0RF
X1NBTVBMSU5HX0lOU1RSVU1FTlQob3Bjb2RlLCB2UEMpCisjZGVmaW5lIE5FWFRfT1BDT0RFX0lO
U1RSVU1FTlRBVElPTiBORVhUX09QQ09ERV9TQU1QTElOR19JTlNUUlVNRU5UCisKIH0gLy8gbmFt
ZXNwYWNlIEtKUwogCiAjZW5kaWYgLy8gT3Bjb2Rlc19oCkluZGV4OiBXZWJLaXQvSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvSmF2YVNjcmlwdENvcmUv
a2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzUwMzMpCisrKyBXZWJLaXQvSmF2YVNjcmlwdENvcmUv
a2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwOSw3ICsxNzA5LDcgQEAgdm9pZCBF
dmFsTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5ObwogCiAgICAgU3ltYm9sVGFibGUgc3lt
Ym9sVGFibGU7CiAKLSAgICBtX2NvZGUuc2V0KG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2Jh
bE9iamVjdCkpOworICAgIG1fY29kZSA9IG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGdsb2JhbE9i
amVjdCk7CiAKICAgICBDb2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0aGlzLCBnbG9iYWxPYmplY3Qt
PmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sICZzeW1ib2xUYWJsZSwgbV9jb2RlLmdldCgpKTsKICAg
ICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsKQEAgLTE3NDMsNyArMTc0Myw3IEBAIHZvaWQgRnVuY3Rp
b25Cb2R5Tm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3AKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4o
c2MpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluLmdsb2Jh
bE9iamVjdCgpOwogCi0gICAgbV9jb2RlLnNldChuZXcgQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9u
Q29kZSkpOworICAgIG1fY29kZSA9IG5ldyBDb2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlKTsK
IAogICAgIENvZGVHZW5lcmF0b3IgZ2VuZXJhdG9yKHRoaXMsIGdsb2JhbE9iamVjdC0+ZGVidWdn
ZXIoKSwgc2NvcGVDaGFpbiwgJm1fc3ltYm9sVGFibGUsIG1fY29kZS5nZXQoKSk7CiAgICAgZ2Vu
ZXJhdG9yLmdlbmVyYXRlKCk7CkBAIC0xNzc5LDcgKzE3NzksNyBAQCB2b2lkIFByb2dyYW1Ob2Rl
OjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpCiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjKTsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmpl
Y3QoKTsKICAgICAKLSAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEds
b2JhbENvZGUsIGdsb2JhbE9iamVjdCkpOworICAgIG1fY29kZSA9IG5ldyBQcm9ncmFtQ29kZUJs
b2NrKHRoaXMsIEdsb2JhbENvZGUsIGdsb2JhbE9iamVjdCk7CiAgICAgCiAgICAgQ29kZUdlbmVy
YXRvciBnZW5lcmF0b3IodGhpcywgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWlu
LCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGUuZ2V0KCksIG1fdmFyU3RhY2ss
IG1fZnVuY3Rpb25TdGFjayk7CiAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CkluZGV4OiBXZWJL
aXQvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0phdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzNTAzMykKKysrIFdlYktpdC9KYXZhU2Ny
aXB0Q29yZS9ranMvbm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE2Myw3ICsyMTYzLDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fdmFySW5kZXhlczsgLy8g
U3RvcmFnZSBpbmRleGVzIGJlbG9uZ2luZyB0byB0aGUgbm9kZXMgaW4gbV92YXJTdGFjay4gKFJl
Y29yZGVkIHRvIGF2b2lkIGRvdWJsZSBsb29rdXAuKQogICAgICAgICBWZWN0b3I8c2l6ZV90PiBt
X2Z1bmN0aW9uSW5kZXhlczsgLy8gU3RvcmFnZSBpbmRleGVzIGJlbG9uZ2luZyB0byB0aGUgbm9k
ZXMgaW4gbV9mdW5jdGlvblN0YWNrLiAoUmVjb3JkZWQgdG8gYXZvaWQgZG91YmxlIGxvb2t1cC4p
CiAKLSAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fY29kZTsKKyAgICAgICAgUmVm
UHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fY29kZTsKICAgICB9OwogCiAgICAgY2xhc3MgRXZhbE5v
ZGUgOiBwdWJsaWMgU2NvcGVOb2RlIHsKQEAgLTIxODMsNyArMjE4Myw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICB2b2lkIGdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAotICAgICAgICBPd25QdHI8RXZh
bENvZGVCbG9jaz4gbV9jb2RlOworICAgICAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9jb2Rl
OwogICAgIH07CiAKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlIDogcHVibGljIFNjb3BlTm9k
ZSB7CkBAIC0yMjI0LDcgKzIyMjQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgCiAgICAg
ICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX3BhcmFtZXRlcnM7CiAgICAgICAgIFN5bWJvbFRhYmxl
IG1fc3ltYm9sVGFibGU7Ci0gICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1fY29kZTsKKyAgICAg
ICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2RlOwogICAgICAgICBTb3VyY2VSYW5nZSBtX3NvdXJj
ZTsKICAgICB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22454</attachid>
            <date>2008-07-23 10:14:26 -0700</date>
            <delta_ts>2008-07-23 15:01:03 -0700</delta_ts>
            <desc>New, cleaned-up implementation - no known bugs, no regressions.</desc>
            <filename>patch_squirrelshark.C.txt</filename>
            <type>text/plain</type>
            <size>23408</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM1MjkzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDctMjMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNhbXBsaW5nIHRvb2wgdG8gYW5hbHl6ZSBjb3N0
IG9mIGluc3RydWN0aW9uIGV4ZWN1dGlvbiBhbmQgaWRlbnRpZnkgaG90IHJlZ2lvbnMgb2YgSlMg
Y29kZS4KKyAgICAgICAgRW5hYmxlIFN3aXRjaGVzIGJ5IHNldHRpbmcgU0FNUExJTkdfVE9PTF9F
TkFCTEVEIGluIE9wY29kZS5oLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBFeHBv
cnQgc3ltYm9scyBmb3IgU2hlbGwuY3BwLgorICAgICAgICAqIFZNL01hY2hpbmUuY3BwOiAgICAg
QWRkZWQgc2FtcGxpbmcgaG9va3MuCisgICAgICAgICogVk0vTWFjaGluZS5oOiAgICAgICBNYWNo
aW5lIGNvbnRhaW5zIGEgcG9pbnRlciB0byBhIHNhbXBsZXIsIHdoZW4gc2FtcGxpbmcuCisgICAg
ICAgICogVk0vT3Bjb2RlLmNwcDogICAgICBUb29sIGltcGxlbWVudGF0aW9uLgorICAgICAgICAq
IFZNL09wY29kZS5oOiAgICAgICAgVG9vbCBkZWNsYXJhdGlvbi4KKyAgICAgICAgKiBranMvU2hl
bGwuY3BwOiAgICAgIEluaXRpYWxpemUgdGhlIHNhbXBsZXIsIGlmIGVuYWJsZWQuCisgICAgICAg
ICoga2pzL25vZGVzLmNwcDogICAgICBBZGRlZCBzYW1wbGluZyBob29rcy4KKwogMjAwOC0wNy0y
MyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZp
c2lvbiAzNTI5MykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIyLDMgKzMyMiw2IEBAIF9fWlRWTjNLSlMxNkpTVmFyaWFibGVPYmplY3RF
CiBfX1pUVk4zS0pTOEpTT2JqZWN0RQogX2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24K
IF9rSlNDbGFzc0RlZmluaXRpb25FbXB0eQorX19aTjNLSlMxMlNhbXBsaW5nVG9vbDRzdG9wRXYK
K19fWk4zS0pTMTJTYW1wbGluZ1Rvb2w1c3RhcnRFagorX19aTjNLSlMxMlNhbXBsaW5nVG9vbDRk
dW1wRVBOU185RXhlY1N0YXRlRQpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM1
MjkzKQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3Myw3ICs0NzMsOCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSogTWFjaGluZTo6Y2FsbEV2YWwo
CiB9CiAKIE1hY2hpbmU6Ok1hY2hpbmUoKQotICAgIDogbV9yZWVudHJ5RGVwdGgoMCkKKyAgICA6
IG1fc2FtcGxlcigwKQorICAgICwgbV9yZWVudHJ5RGVwdGgoMCkKICAgICAsIG1fdGltZW91dFRp
bWUoMCkKICAgICAsIG1fdGltZUF0TGFzdENoZWNrVGltZW91dCgwKQogICAgICwgbV90aW1lRXhl
Y3V0aW5nKDApCkBAIC03MzAsNiArNzMxLDggQEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShQ
cm9ncmFtTm9kZSogcAogICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1h
bCwgJm5ld0V4ZWMsICZtX3JlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbiwgY29kZUJsb2NrLCBl
eGNlcHRpb24pOwogICAgIG1fcmVlbnRyeURlcHRoLS07CiAKKyAgICBNQUNISU5FX1NBTVBMSU5H
X3ByaXZhdGVFeGVjdXRlUmV0dXJuZWQoKTsKKwogICAgIGlmICgqcHJvZmlsZXIpIHsKICAgICAg
ICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoZXhlYywgcHJvZ3JhbU5vZGUtPnNvdXJjZVVSTCgp
LCBwcm9ncmFtTm9kZS0+bGluZU5vKCkpOwogICAgICAgICBpZiAoIW1fcmVlbnRyeURlcHRoKQpA
QCAtNzkxLDYgKzc5NCw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5
Tm8KICAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVj
LCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIG5ld0NvZGVCbG9jaywgZXhjZXB0aW9u
KTsKICAgICBtX3JlZW50cnlEZXB0aC0tOwogCisgICAgTUFDSElORV9TQU1QTElOR19wcml2YXRl
RXhlY3V0ZVJldHVybmVkKCk7CisKICAgICBpZiAoKnByb2ZpbGVyICYmICFtX3JlZW50cnlEZXB0
aCkKICAgICAgICAgKCpwcm9maWxlciktPmRpZEZpbmlzaEFsbEV4ZWN1dGlvbihleGVjKTsKIApA
QCAtODU3LDYgKzg2Miw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2
YWwKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsICZuZXdFeGVj
LCAmbV9yZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsK
ICAgICBtX3JlZW50cnlEZXB0aC0tOwogCisgICAgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhl
Y3V0ZVJldHVybmVkKCk7CisKICAgICBpZiAoKnByb2ZpbGVyKSB7CiAgICAgICAgICgqcHJvZmls
ZXIpLT5kaWRFeGVjdXRlKGV4ZWMsIGV2YWxOb2RlLT5zb3VyY2VVUkwoKSwgZXZhbE5vZGUtPmxp
bmVObygpKTsKICAgICAgICAgaWYgKCFtX3JlZW50cnlEZXB0aCkKQEAgLTEwMjgsNyArMTAzNSw3
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICB9CiAgICAg
CiAjaWYgSEFWRShDT01QVVRFRF9HT1RPKQotICAgICNkZWZpbmUgTkVYVF9PUENPREUgZ290byAq
dlBDLT51Lm9wY29kZQorICAgICNkZWZpbmUgTkVYVF9PUENPREUgTUFDSElORV9TQU1QTElOR19z
YW1wbGUoY29kZUJsb2NrLCB2UEMpOyBnb3RvICp2UEMtPnUub3Bjb2RlCiAjaWYgRFVNUF9PUENP
REVfU1RBVFMKICAgICAjZGVmaW5lIEJFR0lOX09QQ09ERShvcGNvZGUpIG9wY29kZTogT3Bjb2Rl
U3RhdHM6OnJlY29yZEluc3RydWN0aW9uKG9wY29kZSk7CiAjZWxzZQpAQCAtMTAzNiw3ICsxMDQz
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogI2VuZGlmCiAg
ICAgTkVYVF9PUENPREU7CiAjZWxzZQotICAgICNkZWZpbmUgTkVYVF9PUENPREUgY29udGludWUK
KyAgICAjZGVmaW5lIE5FWFRfT1BDT0RFIE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxlKGNvZGVCbG9j
aywgdlBDKTsgY29udGludWUKICNpZiBEVU1QX09QQ09ERV9TVEFUUwogICAgICNkZWZpbmUgQkVH
SU5fT1BDT0RFKG9wY29kZSkgY2FzZSBvcGNvZGU6IE9wY29kZVN0YXRzOjpyZWNvcmRJbnN0cnVj
dGlvbihvcGNvZGUpOwogI2Vsc2UKQEAgLTIyOTEsNiArMjI5OCw4IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1
ZSA9IHRoaXNWYWwgPT0gbWlzc2luZ1RoaXNPYmplY3RNYXJrZXIoKSA/IGV4ZWMtPmdsb2JhbFRo
aXNWYWx1ZSgpIDogclt0aGlzVmFsXS5qc1ZhbHVlKGV4ZWMpOwogICAgICAgICAgICAgQXJnTGlz
dCBhcmdzKHIgKyBmaXJzdEFyZyArIDEsIGFyZ0NvdW50IC0gMSk7CiAKKyAgICAgICAgICAgIE1B
Q0hJTkVfU0FNUExJTkdfY2FsbGluZ05hdGl2ZUZ1bmN0aW9uKCk7CisKICAgICAgICAgICAgIEpT
VmFsdWUqIHJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWMsIHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4odiksIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgICAgICAgICBWTV9D
SEVDS19FWENFUFRJT04oKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAkocmV2aXNpb24gMzUyOTMp
CisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2
ICsxMTksOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgICAgIG1fdGltZW91dFRpbWUgPSAw
OwogICAgICAgICAgICAgbV90aW1lb3V0Q2hlY2tDb3VudCA9IDA7CiAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFNhbXBsaW5nVG9vbCogbV9zYW1wbGVyOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL1ZNL09wY29kZS5jcHAJKHJldmlzaW9uIDM1MjkzKQorKysgSmF2YVNjcmlwdENv
cmUvVk0vT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTExICszMSwzMzUgQEAKICNp
bmNsdWRlICJPcGNvZGUuaCIKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIk1hY2hpbmUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEtKUyB7CiAKLSNpZiBEVU1QX09QQ09ERV9TVEFUUwotCi1sb25nIGxvbmcgT3Bj
b2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOwotbG9uZyBsb25nIE9wY29kZVN0
YXRzOjpvcGNvZGVQYWlyQ291bnRzW251bU9wY29kZUlEc11bbnVtT3Bjb2RlSURzXTsKLWludCBP
cGNvZGVTdGF0czo6bGFzdE9wY29kZSA9IC0xOwotCi1zdGF0aWMgT3Bjb2RlU3RhdHMgbG9nZ2Vy
OworI2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxFRCB8fCBEVU1QX09QQ09ERV9TVEFUUwogCiBzdGF0
aWMgY29uc3QgY2hhciogb3Bjb2RlTmFtZXNbXSA9IHsKLSAgICAibG9hZCAgICAgICAgIiwKLSAg
ICAibmV3X29iamVjdCAgIiwKLSAgICAibmV3X2FycmF5ICAgIiwKLSAgICAibmV3X3JlZ2V4cCAg
IiwKLSAgICAibW92ICAgICAgICAgIiwKLSAgICAKLSAgICAibm90ICAgICAgICAgIiwKLSAgICAi
ZXEgICAgICAgICAgIiwKLSAgICAibmVxICAgICAgICAgIiwKLSAgICAic3RyaWN0ZXEgICAgIiwK
LSAgICAibnN0cmljdGVxICAgIiwKLSAgICAibGVzcyAgICAgICAgIiwKLSAgICAibGVzc2VxICAg
ICAgIiwKLSAgICAKLSAgICAicHJlX2luYyAgICAgIiwKLSAgICAicHJlX2RlYyAgICAgIiwKLSAg
ICAicG9zdF9pbmMgICAgIiwKLSAgICAicG9zdF9kZWMgICAgIiwKLSAgICAidG9fanNudW1iZXIg
IiwKLSAgICAibmVnYXRlICAgICAgIiwKLSAgICAiYWRkICAgICAgICAgIiwKLSAgICAibXVsICAg
ICAgICAgIiwKLSAgICAiZGl2ICAgICAgICAgIiwKLSAgICAibW9kICAgICAgICAgIiwKLSAgICAi
c3ViICAgICAgICAgIiwKLSAgICAKLSAgICAibHNoaWZ0ICAgICAgIiwKLSAgICAicnNoaWZ0ICAg
ICAgIiwKLSAgICAidXJzaGlmdCAgICAgIiwKLSAgICAiYml0YW5kICAgICAgIiwKLSAgICAiYml0
eG9yICAgICAgIiwKLSAgICAiYml0b3IgICAgICAgIiwKLSAgICAiYml0bm90ICAgICAgIiwKLSAg
ICAKLSAgICAiaW5zdGFuY2VvZiAgIiwKLSAgICAidHlwZW9mICAgICAgIiwKLSAgICAiaW4gICAg
ICAgICAgIiwKLQotICAgICJyZXNvbHZlICAgICAiLAotICAgICJyZXNvbHZlX3NraXAiLAotICAg
ICJnZXRfc2NvcGVkX3ZhciIsCi0gICAgInB1dF9zY29wZWRfdmFyIiwKLSAgICAicmVzb2x2ZV9i
YXNlIiwKKyAgICAibG9hZCAgICAgICAgICAgICAiLAorICAgICJuZXdfb2JqZWN0ICAgICAgICIs
CisgICAgIm5ld19hcnJheSAgICAgICAgIiwKKyAgICAibmV3X3JlZ2V4cCAgICAgICAiLAorICAg
ICJtb3YgICAgICAgICAgICAgICIsCisgICAgCisgICAgIm5vdCAgICAgICAgICAgICAgIiwKKyAg
ICAiZXEgICAgICAgICAgICAgICAiLAorICAgICJuZXEgICAgICAgICAgICAgICIsCisgICAgInN0
cmljdGVxICAgICAgICAgIiwKKyAgICAibnN0cmljdGVxICAgICAgICAiLAorICAgICJsZXNzICAg
ICAgICAgICAgICIsCisgICAgImxlc3NlcSAgICAgICAgICAgIiwKKyAgICAKKyAgICAicHJlX2lu
YyAgICAgICAgICAiLAorICAgICJwcmVfZGVjICAgICAgICAgICIsCisgICAgInBvc3RfaW5jICAg
ICAgICAgIiwKKyAgICAicG9zdF9kZWMgICAgICAgICAiLAorICAgICJ0b19qc251bWJlciAgICAg
ICIsCisgICAgIm5lZ2F0ZSAgICAgICAgICAgIiwKKyAgICAiYWRkICAgICAgICAgICAgICAiLAor
ICAgICJtdWwgICAgICAgICAgICAgICIsCisgICAgImRpdiAgICAgICAgICAgICAgIiwKKyAgICAi
bW9kICAgICAgICAgICAgICAiLAorICAgICJzdWIgICAgICAgICAgICAgICIsCisgICAgCisgICAg
ImxzaGlmdCAgICAgICAgICAgIiwKKyAgICAicnNoaWZ0ICAgICAgICAgICAiLAorICAgICJ1cnNo
aWZ0ICAgICAgICAgICIsCisgICAgImJpdGFuZCAgICAgICAgICAgIiwKKyAgICAiYml0eG9yICAg
ICAgICAgICAiLAorICAgICJiaXRvciAgICAgICAgICAgICIsCisgICAgImJpdG5vdCAgICAgICAg
ICAgIiwKKyAgICAKKyAgICAiaW5zdGFuY2VvZiAgICAgICAiLAorICAgICJ0eXBlb2YgICAgICAg
ICAgICIsCisgICAgImluICAgICAgICAgICAgICAgIiwKKworICAgICJyZXNvbHZlICAgICAgICAg
ICIsCisgICAgInJlc29sdmVfc2tpcCAgICAgIiwKKyAgICAiZ2V0X3Njb3BlZF92YXIgICAiLAor
ICAgICJwdXRfc2NvcGVkX3ZhciAgICIsCisgICAgInJlc29sdmVfYmFzZSAgICAgIiwKICAgICAi
cmVzb2x2ZV93aXRoX2Jhc2UiLAotICAgICJyZXNvbHZlX2Z1bmMiLAotICAgICJnZXRfYnlfaWQg
ICAiLAotICAgICJwdXRfYnlfaWQgICAiLAotICAgICJkZWxfYnlfaWQgICAiLAotICAgICJnZXRf
YnlfdmFsICAiLAotICAgICJwdXRfYnlfdmFsICAiLAotICAgICJkZWxfYnlfdmFsICAiLAotICAg
ICJwdXRfYnlfaW5kZXgiLAotICAgICJwdXRfZ2V0dGVyICAiLAotICAgICJwdXRfc2V0dGVyICAi
LAotCi0gICAgImptcCAgICAgICAgICIsCi0gICAgImp0cnVlICAgICAgICIsCi0gICAgImpmYWxz
ZSAgICAgICIsCi0gICAgImpsZXNzICAgICAgICIsCi0gICAgImpubGVzcyAgICAgICIsCi0gICAg
ImptcF9zY29wZXMgICIsCi0gICAgImxvb3AgICAgICAgICIsCi0gICAgImxvb3BfaWZfdHJ1ZSIs
Ci0gICAgImxvb3BfaWZfbGVzcyIsCi0KLSAgICAibmV3X2Z1bmMgICAgIiwKLSAgICAibmV3X2Z1
bmNfZXhwIiwKLSAgICAiY2FsbCAgICAgICAgIiwKLSAgICAiY2FsbF9ldmFsICAgIiwKLSAgICAi
cmV0ICAgICAgICAgIiwKLQotICAgICJjb25zdHJ1Y3QgICAiLAotCi0gICAgImdldF9wbmFtZXMg
ICIsCi0gICAgIm5leHRfcG5hbWUgICIsCi0KLSAgICAicHVzaF9zY29wZSAgIiwKLSAgICAicG9w
X3Njb3BlICAgIiwKLQotICAgICJjYXRjaCAgICAgICAiLAotICAgICJ0aHJvdyAgICAgICAiLAot
ICAgICJuZXdfZXJyb3IgICAiLAorICAgICJyZXNvbHZlX2Z1bmMgICAgICIsCisgICAgImdldF9i
eV9pZCAgICAgICAgIiwKKyAgICAicHV0X2J5X2lkICAgICAgICAiLAorICAgICJkZWxfYnlfaWQg
ICAgICAgICIsCisgICAgImdldF9ieV92YWwgICAgICAgIiwKKyAgICAicHV0X2J5X3ZhbCAgICAg
ICAiLAorICAgICJkZWxfYnlfdmFsICAgICAgICIsCisgICAgInB1dF9ieV9pbmRleCAgICAgIiwK
KyAgICAicHV0X2dldHRlciAgICAgICAiLAorICAgICJwdXRfc2V0dGVyICAgICAgICIsCisKKyAg
ICAiam1wICAgICAgICAgICAgICAiLAorICAgICJqdHJ1ZSAgICAgICAgICAgICIsCisgICAgImpm
YWxzZSAgICAgICAgICAgIiwKKyAgICAiamxlc3MgICAgICAgICAgICAiLAorICAgICJqbmxlc3Mg
ICAgICAgICAgICIsCisgICAgImptcF9zY29wZXMgICAgICAgIiwKKyAgICAibG9vcCAgICAgICAg
ICAgICAiLAorICAgICJsb29wX2lmX3RydWUgICAgICIsCisgICAgImxvb3BfaWZfbGVzcyAgICAg
IiwKKworICAgICJuZXdfZnVuYyAgICAgICAgICIsCisgICAgIm5ld19mdW5jX2V4cCAgICAgIiwK
KyAgICAiY2FsbCAgICAgICAgICAgICAiLAorICAgICJjYWxsX2V2YWwgICAgICAgICIsCisgICAg
InJldCAgICAgICAgICAgICAgIiwKKworICAgICJjb25zdHJ1Y3QgICAgICAgICIsCisKKyAgICAi
Z2V0X3BuYW1lcyAgICAgICAiLAorICAgICJuZXh0X3BuYW1lICAgICAgICIsCisKKyAgICAicHVz
aF9zY29wZSAgICAgICAiLAorICAgICJwb3Bfc2NvcGUgICAgICAgICIsCisKKyAgICAiY2F0Y2gg
ICAgICAgICAgICAiLAorICAgICJ0aHJvdyAgICAgICAgICAgICIsCisgICAgIm5ld19lcnJvciAg
ICAgICAgIiwKKworICAgICJqc3IgICAgICAgICAgICAgICIsCisgICAgInNyZXQgICAgICAgICAg
ICAgIiwKKworICAgICJkZWJ1ZyAgICAgICAgICAgICIsCisKKyAgICAiZW5kICAgICAgICAgICAg
ICAiCit9OworCisjZW5kaWYKKworCit2b2lkIFNjb3BlU2FtcGxlUmVjb3JkOjpzYW1wbGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMpCit7CisgICAgbV90b3RhbENvdW50
Kys7CisKKyAgICBpZiAoIW1fdnBjQ291bnRzKSB7CisgICAgICAgIG1fc2l6ZSA9IGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zLnNpemUoKTsKKyAgICAgICAgbV92cGNDb3VudHMgPSBzdGF0aWNfY2Fz
dDxpbnQqPihjYWxsb2MobV9zaXplLCBzaXplb2YoaW50KSkpOworICAgICAgICBtX2NvZGVCbG9j
ayA9IGNvZGVCbG9jazsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb2RlT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pih2UEMpIC0gcmVpbnRl
cnByZXRfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkpKSAv
IHNpemVvZihJbnN0cnVjdGlvbiopOworICAgIC8vIFRoaXMgY291bGQgb2NjdXIgaWYgY29kZUJs
b2NrICYgdlBDIGFyZSBub3QgY29uc2lzdGVudCAtIGUuZy4gc2FtcGxlIG1pZCBvcF9jYWxsL29w
X3JldC4KKyAgICBpZiAoY29kZU9mZnNldCA8IG1fc2l6ZSkKKyAgICAgICAgbV92cGNDb3VudHNb
Y29kZU9mZnNldF0rKzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBoZXJ0ejJ1cyh1bnNp
Z25lZCBoZXJ0eikKK3sKKyAgICByZXR1cm4gMTAwMDAwMCAvIGhlcnR6OworfQorCit2b2lkIFNh
bXBsaW5nVG9vbDo6cnVuKCkKK3sKKyAgICB3aGlsZSAobV9ydW5uaW5nKSB7CisgICAgICAgIHVz
bGVlcChoZXJ0ejJ1cyhtX2hlcnR6KSk7CisKKyAgICAgICAgbV90b3RhbFNhbXBsZXMrKzsKKwor
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fcmVjb3JkZWRDb2RlQmxvY2s7CisgICAg
ICAgIEluc3RydWN0aW9uKiB2UEMgPSBtX3JlY29yZGVkVlBDOworCisgICAgICAgIGlmIChjb2Rl
QmxvY2sgJiYgdlBDKSB7CisgICAgICAgICAgICBTY29wZVNhbXBsZVJlY29yZCogcmVjb3JkID0g
bV9zY29wZVNhbXBsZU1hcC0+Z2V0KGNvZGVCbG9jay0+b3duZXJOb2RlKTsKKyAgICAgICAgICAg
IGlmIChyZWNvcmQpCisgICAgICAgICAgICAgICAgcmVjb3JkLT5zYW1wbGUoY29kZUJsb2NrLCB2
UEMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkKiBTYW1wbGluZ1Rvb2w6OnRocmVhZFN0
YXJ0RnVuYyh2b2lkKiBzYW1wbGluZ1Rvb2wpCit7CisgICAgcmVpbnRlcnByZXRfY2FzdDxTYW1w
bGluZ1Rvb2wqPihzYW1wbGluZ1Rvb2wpLT5ydW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBTYW1wbGluZ1Rvb2w6Om5vdGlmeU9mU2NvcGUoU2NvcGVOb2RlKiBzY29wZSkKK3sKKyAgICBt
X3Njb3BlU2FtcGxlTWFwLT5zZXQoc2NvcGUsIG5ldyBTY29wZVNhbXBsZVJlY29yZChzY29wZSkp
OworfQorCit2b2lkIFNhbXBsaW5nVG9vbDo6c3RhcnQodW5zaWduZWQgaGVydHopCit7CisgICAg
QVNTRVJUKCFtX3J1bm5pbmcpOworICAgIG1fcnVubmluZyA9IHRydWU7CisgICAgbV9oZXJ0eiA9
IGhlcnR6OworICAgIHB0aHJlYWRfY3JlYXRlKCZtX3NhbXBsaW5nVGhyZWFkLCAwLCB0aHJlYWRT
dGFydEZ1bmMsIHRoaXMpOworfQorCit2b2lkIFNhbXBsaW5nVG9vbDo6c3RvcCgpCit7CisgICAg
QVNTRVJUKG1fcnVubmluZyk7CisgICAgbV9ydW5uaW5nID0gZmFsc2U7CisgICAgcHRocmVhZF9q
b2luKG1fc2FtcGxpbmdUaHJlYWQsIDApOworfQogCi0gICAgImpzciAgICAgICAgICIsCi0gICAg
InNyZXQgICAgICAgICIsCisjaWYgU0FNUExJTkdfVE9PTF9FTkFCTEVECiAKLSAgICAiZGVidWcg
ICAgICAgIiwKK3N0cnVjdCBPcGNvZGVTYW1wbGVJbmZvCit7CisgICAgT3Bjb2RlSUQgb3Bjb2Rl
OworICAgIGxvbmcgbG9uZyBjb3VudDsKK307CiAKLSAgICAiZW5kICAgICAgICAgIgorc3RydWN0
IExpbmVDb3VudEluZm8KK3sKKyAgICB1bnNpZ25lZCBsaW5lOworICAgIHVuc2lnbmVkIGNvdW50
OwogfTsKIAorc3RhdGljIGludCBjb21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKGNvbnN0IHZv
aWQqIGxlZnQsIGNvbnN0IHZvaWQqIHJpZ2h0KQoreworICAgIGNvbnN0IExpbmVDb3VudEluZm8g
KmxlZnRMaW5lQ291bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IExpbmVDb3VudEluZm8gKj4o
bGVmdCk7CisgICAgY29uc3QgTGluZUNvdW50SW5mbyAqcmlnaHRMaW5lQ291bnQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IExpbmVDb3VudEluZm8gKj4ocmlnaHQpOworCisgICAgcmV0dXJuIChs
ZWZ0TGluZUNvdW50LT5saW5lID4gcmlnaHRMaW5lQ291bnQtPmxpbmUpID8gMSA6IChsZWZ0TGlu
ZUNvdW50LT5saW5lIDwgcmlnaHRMaW5lQ291bnQtPmxpbmUpID8gLTEgOiAwOworfQorCitzdGF0
aWMgaW50IGNvbXBhcmVPcGNvZGVJbmRpY2VzU2FtcGxpbmcoY29uc3Qgdm9pZCogbGVmdCwgY29u
c3Qgdm9pZCogcmlnaHQpCit7CisgICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAqbGVmdFNhbXBs
ZUluZm8gPSByZWludGVycHJldF9jYXN0PGNvbnN0IE9wY29kZVNhbXBsZUluZm8gKj4obGVmdCk7
CisgICAgY29uc3QgT3Bjb2RlU2FtcGxlSW5mbyAqcmlnaHRTYW1wbGVJbmZvID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBPcGNvZGVTYW1wbGVJbmZvICo+KHJpZ2h0KTsKKworICAgIHJldHVybiAo
bGVmdFNhbXBsZUluZm8tPmNvdW50IDwgcmlnaHRTYW1wbGVJbmZvLT5jb3VudCkgPyAxIDogKGxl
ZnRTYW1wbGVJbmZvLT5jb3VudCA+IHJpZ2h0U2FtcGxlSW5mby0+Y291bnQpID8gLTEgOiAwOwor
fQorCitzdGF0aWMgaW50IGNvbXBhcmVTY29wZVNhbXBsZVJlY29yZHMoY29uc3Qgdm9pZCogbGVm
dCwgY29uc3Qgdm9pZCogcmlnaHQpCit7CisgICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNv
bnN0IGxlZnRWYWx1ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBTY29wZVNhbXBsZVJlY29yZCogY29u
c3QgKj4obGVmdCk7CisgICAgY29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0IHJpZ2h0VmFs
dWUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgU2NvcGVTYW1wbGVSZWNvcmQqIGNvbnN0ICo+KHJpZ2h0
KTsKKworICAgIHJldHVybiAobGVmdFZhbHVlLT5tX3RvdGFsQ291bnQgPCByaWdodFZhbHVlLT5t
X3RvdGFsQ291bnQpID8gMSA6IChsZWZ0VmFsdWUtPm1fdG90YWxDb3VudCA+IHJpZ2h0VmFsdWUt
Pm1fdG90YWxDb3VudCkgPyAtMSA6IDA7Cit9CisKK3ZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBUaWRpZXMgdXAgU3VuU3BpZGVyIG91dHB1dCBieSBy
ZW1vdmluZyBzaG9ydCBzY3JpcHRzIC0gc3VjaCBhIHNtYWxsIG51bWJlciBvZiBzYW1wbGVzIHdv
dWxkIGxpa2VseSBub3QgYmUgdXNlZnVsIGFueWhvdy4KKyAgICBpZiAobV90b3RhbFNhbXBsZXMg
PCAxMCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vICgxKSBDYWxjdWxhdGUgJ3RvdGFs
Q29kZUJsb2NrU2FtcGxlcycsIGJ1aWxkIGFuZCBzb3J0ICdjb2RlQmxvY2tTYW1wbGVzJyBhcnJh
eS4KKworICAgIGludCBzY29wZUNvdW50ID0gbV9zY29wZVNhbXBsZU1hcC0+c2l6ZSgpOworICAg
IGxvbmcgbG9uZyB0b3RhbENvZGVCbG9ja1NhbXBsZXMgPSAwOworICAgIFNjb3BlU2FtcGxlUmVj
b3JkKiBjb2RlQmxvY2tTYW1wbGVzW3Njb3BlQ291bnRdOworICAgIFNjb3BlU2FtcGxlUmVjb3Jk
TWFwOjppdGVyYXRvciBpdGVyID0gbV9zY29wZVNhbXBsZU1hcC0+YmVnaW4oKTsKKyAgICBmb3Ig
KGludCBpPTA7IGkgPCBzY29wZUNvdW50OyArK2ksICsraXRlcikgeworICAgICAgICBjb2RlQmxv
Y2tTYW1wbGVzW2ldID0gaXRlci0+c2Vjb25kOworICAgICAgICB0b3RhbENvZGVCbG9ja1NhbXBs
ZXMgKz0gY29kZUJsb2NrU2FtcGxlc1tpXS0+bV90b3RhbENvdW50OworICAgIH0KKyAgICBtZXJn
ZXNvcnQoY29kZUJsb2NrU2FtcGxlcywgc2NvcGVDb3VudCwgc2l6ZW9mKFNjb3BlU2FtcGxlUmVj
b3JkKiksIGNvbXBhcmVTY29wZVNhbXBsZVJlY29yZHMpOworCisgICAgLy8gKDIpIFByaW50IGRh
dGEgZnJvbSAnY29kZUJsb2NrU2FtcGxlcycgYXJyYXksIGNhbGN1bGF0ZSAndG90YWxPcGNvZGVT
YW1wbGVzJywgcG9wdWxhdGUgJ29wY29kZVNhbXBsZUNvdW50cycgYXJyYXkuCisKKyAgICBsb25n
IGxvbmcgdG90YWxPcGNvZGVTYW1wbGVzID0gMDsKKyAgICBsb25nIGxvbmcgb3Bjb2RlU2FtcGxl
Q291bnRzW251bU9wY29kZUlEc10gPSB7IDAgfTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAiXG5C
bG9jayBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlRvdGFs
IGJsb2NrcyBzYW1wbGVkICh0b3RhbCBzYW1wbGVzKTogJWxsZCAoJWxsZClcblxuIiwgdG90YWxD
b2RlQmxvY2tTYW1wbGVzLCBtX3RvdGFsU2FtcGxlcyk7CisKKyAgICBmb3IgKGludCBpPTA7IGkg
PCBzY29wZUNvdW50OyBpKyspIHsKKyAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmQgKnJlY29yZCA9
IGNvZGVCbG9ja1NhbXBsZXNbaV07CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gcmVj
b3JkLT5tX2NvZGVCbG9jazsKKworICAgICAgICBkb3VibGUgdG90YWxQZXJjZW50ID0gKHJlY29y
ZC0+bV90b3RhbENvdW50ICogMTAwLjApL21fdG90YWxTYW1wbGVzOworICAgICAgICBkb3VibGUg
YmxvY2tQZXJjZW50ID0gKHJlY29yZC0+bV90b3RhbENvdW50ICogMTAwLjApL3RvdGFsQ29kZUJs
b2NrU2FtcGxlczsKKworICAgICAgICBpZiAoKGJsb2NrUGVyY2VudCA+PSAxKSAmJiBjb2RlQmxv
Y2spIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMuYmVnaW4oKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyVkOiAlczolZDog
c2FtcGxlZCAlZCB0aW1lcyAtICUuM2YlJSAoJS4zZiUlKVxuIiwgaSsxLCByZWNvcmQtPm1fc2Nv
cGUtPnNvdXJjZVVSTCgpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBjb2RlQmxvY2stPmxpbmVOdW1i
ZXJGb3JWUEMoY29kZSksIHJlY29yZC0+bV90b3RhbENvdW50LCBibG9ja1BlcmNlbnQsIHRvdGFs
UGVyY2VudCk7CisgICAgICAgICAgICBpZiAoaSA8IDEwKSB7CisgICAgICAgICAgICAgICAgSGFz
aE1hcDx1bnNpZ25lZCx1bnNpZ25lZD4gbGluZUNvdW50czsKKyAgICAgICAgICAgICAgICBjb2Rl
QmxvY2stPmR1bXAoZXhlYyk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcCA9IDA7
IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNv
dW50ID0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07CisgICAgICAgICAgICAgICAgICAgIGlmIChj
b3VudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgWyUgNGRdIGhhcyBz
YW1wbGUgY291bnQ6ICUgNGRcbiIsIG9wLCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsaW5lID0gY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yVlBDKGNvZGUrb3ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50cy5zZXQobGluZSwgKGxpbmVDb3VudHMu
Y29udGFpbnMobGluZSkgPyBsaW5lQ291bnRzLmdldChsaW5lKSA6IDApICsgY291bnQpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBy
aW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICBpbnQgbGluZXNDb3VudCA9IGxpbmVDb3VudHMu
c2l6ZSgpOworICAgICAgICAgICAgICAgIExpbmVDb3VudEluZm8gbGluZUNvdW50SW5mb1tsaW5l
c0NvdW50XTsKKyAgICAgICAgICAgICAgICBpbnQgbGluZW5vID0gMDsKKyAgICAgICAgICAgICAg
ICBmb3IgKEhhc2hNYXA8dW5zaWduZWQsdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbGluZUNv
dW50cy5iZWdpbigpOyBpdGVyICE9IGxpbmVDb3VudHMuZW5kKCk7ICsraXRlciwgKytsaW5lbm8p
IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmxpbmUgPSBpdGVy
LT5maXJzdDsKKyAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50
ID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtZXJn
ZXNvcnQobGluZUNvdW50SW5mbywgbGluZXNDb3VudCwgc2l6ZW9mKExpbmVDb3VudEluZm8pLCBj
b21wYXJlTGluZUNvdW50SW5mb1NhbXBsaW5nKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxpbmVu
byA9IDA7IGxpbmVubyA8IGxpbmVzQ291bnQ7ICsrbGluZW5vKSB7CisgICAgICAgICAgICAgICAg
ICAgIHByaW50ZigiICAgIExpbmUgIyVkIGhhcyBzYW1wbGUgY291bnQgJWQuXG4iLCBsaW5lQ291
bnRJbmZvW2xpbmVub10ubGluZSwgbGluZUNvdW50SW5mb1tsaW5lbm9dLmNvdW50KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVjb3JkLT5tX3ZwY0NvdW50cyAm
JiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnMgPSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcCA9IDA7IG9wIDwgcmVjb3JkLT5tX3NpemU7ICsrb3ApIHsKKyAgICAgICAgICAgICAgICBP
cGNvZGUgb3Bjb2RlID0gaW5zdHJ1Y3Rpb25zW29wXS51Lm9wY29kZTsKKyAgICAgICAgICAgICAg
ICBpZiAoZXhlYy0+bWFjaGluZSgpLT5pc09wY29kZShvcGNvZGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRvdGFsT3Bjb2RlU2FtcGxlcyArPSByZWNvcmQtPm1fdnBjQ291bnRzW29wXTsKKyAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlU2FtcGxlQ291bnRzW2V4ZWMtPm1hY2hpbmUoKS0+Z2V0
T3Bjb2RlSUQob3Bjb2RlKV0gKz0gcmVjb3JkLT5tX3ZwY0NvdW50c1tvcF07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHByaW50ZigiXG4i
KTsKKworICAgIC8vICgzKSBCdWlsZCBhbmQgc29ydCAnb3Bjb2RlU2FtcGxlSW5mbycgYXJyYXku
CisKKyAgICBPcGNvZGVTYW1wbGVJbmZvIG9wY29kZVNhbXBsZUluZm9bbnVtT3Bjb2RlSURzXTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wY29kZUlEczsgKytpKSB7CisgICAgICAgIG9w
Y29kZVNhbXBsZUluZm9baV0ub3Bjb2RlID0gKE9wY29kZUlEKWk7CisgICAgICAgIG9wY29kZVNh
bXBsZUluZm9baV0uY291bnQgPSBvcGNvZGVTYW1wbGVDb3VudHNbaV07CisgICAgfQorICAgIG1l
cmdlc29ydChvcGNvZGVTYW1wbGVJbmZvLCBudW1PcGNvZGVJRHMsIHNpemVvZihPcGNvZGVTYW1w
bGVJbmZvKSwgY29tcGFyZU9wY29kZUluZGljZXNTYW1wbGluZyk7CisKKyAgICAvLyAoNCkgUHJp
bnQgT3Bjb2RlIHNhbXBsaW5nIHJlc3VsdHMuCisgICAgCisgICAgZnByaW50ZihzdGRvdXQsICJc
bk9wY29kZSBzYW1wbGluZyByZXN1bHRzXG5cbiIpOyAKKyAgICAKKyAgICBmcHJpbnRmKHN0ZG91
dCwgIlRvdGFsIG9wY29kZXMgc2FtcGxlZCAodG90YWwgc2FtcGxlcyk6ICVsbGQgKCVsbGQpXG5c
biIsIHRvdGFsT3Bjb2RlU2FtcGxlcywgbV90b3RhbFNhbXBsZXMpOworICAgIGZwcmludGYoc3Rk
b3V0LCAiT3Bjb2RlcyBpbiBvcmRlcjpcblxuIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1PcGNvZGVJRHM7ICsraSkgeworICAgICAgICBsb25nIGxvbmcgY291bnQgPSBvcGNvZGVTYW1w
bGVDb3VudHNbaV07CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXM6XHQlNmxsZFx0JS4zZiUl
XHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbaV0sIGNvdW50LCAoKGRvdWJsZSljb3VudCAqIDEw
MCkvdG90YWxPcGNvZGVTYW1wbGVzLCAoKGRvdWJsZSljb3VudCAqIDEwMCkvbV90b3RhbFNhbXBs
ZXMpOyAgICAKKyAgICB9CisgICAgZnByaW50ZihzdGRvdXQsICJcbiIpOworICAgIGZwcmludGYo
c3Rkb3V0LCAiT3Bjb2RlcyBieSBzYW1wbGUgY291bnQ6XG5cbiIpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtT3Bjb2RlSURzOyArK2kpIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlID0g
b3Bjb2RlU2FtcGxlSW5mb1tpXS5vcGNvZGU7CisgICAgICAgIGxvbmcgbG9uZyBjb3VudCA9IG9w
Y29kZVNhbXBsZUluZm9baV0uY291bnQ7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJXM6XHQl
NmxsZFx0JS4zZiUlXHQoJS4zZiUlKVxuIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlXSwgY291bnQsICgo
ZG91YmxlKWNvdW50ICogMTAwKS90b3RhbE9wY29kZVNhbXBsZXMsICgoZG91YmxlKWNvdW50ICog
MTAwKS9tX3RvdGFsU2FtcGxlcyk7ICAgIAorICAgIH0KKyAgICBmcHJpbnRmKHN0ZG91dCwgIlxu
Iik7Cit9CisKKyNlbHNlCisKK3ZvaWQgU2FtcGxpbmdUb29sOjpkdW1wKEV4ZWNTdGF0ZSopCit7
Cit9CisKKyNlbmRpZgorCisKKyNpZiBEVU1QX09QQ09ERV9TVEFUUworCitsb25nIGxvbmcgT3Bj
b2RlU3RhdHM6Om9wY29kZUNvdW50c1tudW1PcGNvZGVJRHNdOworbG9uZyBsb25nIE9wY29kZVN0
YXRzOjpvcGNvZGVQYWlyQ291bnRzW251bU9wY29kZUlEc11bbnVtT3Bjb2RlSURzXTsKK2ludCBP
cGNvZGVTdGF0czo6bGFzdE9wY29kZSA9IC0xOworCitzdGF0aWMgT3Bjb2RlU3RhdHMgbG9nZ2Vy
OworCiBPcGNvZGVTdGF0czo6T3Bjb2RlU3RhdHMoKQogewogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtT3Bjb2RlSURzOyArK2kpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAkocmV2aXNpb24gMzUyOTMp
CisrKyBKYXZhU2NyaXB0Q29yZS9WTS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsMTEgQEAKICNkZWZpbmUgT3Bjb2Rlc19oCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBLSlMgewogCisjZGVmaW5l
IFNBTVBMSU5HX1RPT0xfRU5BQkxFRCAwCiAjZGVmaW5lIERVTVBfT1BDT0RFX1NUQVRTIDAKIAog
ICAgICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX0lEKG1hY3JvKSBcCkBAIC0xNDMsNiArMTQ1LDEx
NCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB0eXBlZGVmIE9wY29kZUlEIE9wY29kZTsKICNlbmRp
ZgogCisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIFNjb3BlTm9kZTsKKyAgICBjbGFz
cyBDb2RlQmxvY2s7CisgICAgc3RydWN0IEluc3RydWN0aW9uOworCisgICAgc3RydWN0IFNjb3Bl
U2FtcGxlUmVjb3JkCisgICAgeworICAgICAgICBSZWZQdHI8U2NvcGVOb2RlPiBtX3Njb3BlOwor
ICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgICAgICBpbnQgbV90b3RhbENvdW50
OworICAgICAgICBpbnQqIG1fdnBjQ291bnRzOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7Cisg
ICAgICAgIAorICAgICAgICBTY29wZVNhbXBsZVJlY29yZChTY29wZU5vZGUqIHNjb3BlKQorICAg
ICAgICAgICAgOiBtX3Njb3BlKHNjb3BlKQorICAgICAgICAgICAgLCBtX2NvZGVCbG9jaygwKQor
ICAgICAgICAgICAgLCBtX3RvdGFsQ291bnQoMCkKKyAgICAgICAgICAgICwgbV92cGNDb3VudHMo
MCkKKyAgICAgICAgICAgICwgbV9zaXplKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgflNjb3BlU2FtcGxlUmVjb3JkKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fdnBjQ291bnRzKQorICAgICAgICAgICAgICAgIGZyZWUobV92cGNDb3VudHMpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNhbXBsZShDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSW5zdHJ1Y3Rpb24qIHZQQyk7CisgICAgfTsKKworICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFw
PFNjb3BlTm9kZSosIFNjb3BlU2FtcGxlUmVjb3JkKj4gU2NvcGVTYW1wbGVSZWNvcmRNYXA7CisK
KyAgICBjbGFzcyBTYW1wbGluZ1Rvb2wKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBTYW1w
bGluZ1Rvb2woKQorICAgICAgICAgICAgOiBtX3J1bm5pbmcoZmFsc2UpCisgICAgICAgICAgICAs
IG1fcmVjb3JkZWRDb2RlQmxvY2soMCkKKyAgICAgICAgICAgICwgbV9yZWNvcmRlZFZQQygwKQor
ICAgICAgICAgICAgLCBtX3RvdGFsU2FtcGxlcygwKQorICAgICAgICAgICAgLCBtX3Njb3BlU2Ft
cGxlTWFwKG5ldyBTY29wZVNhbXBsZVJlY29yZE1hcCgpKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICB+U2FtcGxpbmdUb29sKCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChT
Y29wZVNhbXBsZVJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc2NvcGVTYW1wbGVNYXAtPmJl
Z2luKCk7IGl0ZXIgIT0gbV9zY29wZVNhbXBsZU1hcC0+ZW5kKCk7ICsraXRlcikKKyAgICAgICAg
ICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kOworICAgICAgICAgICAgZGVsZXRlIG1fc2NvcGVT
YW1wbGVNYXA7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHN0YXJ0KHVuc2lnbmVkIGhlcnR6
PTEwMDApOworICAgICAgICB2b2lkIHN0b3AoKTsKKyAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0
ZSopOworCisgICAgICAgIHZvaWQgbm90aWZ5T2ZTY29wZShTY29wZU5vZGUqIHNjb3BlKTsKKwor
ICAgICAgICB2b2lkIHNhbXBsZShDb2RlQmxvY2sqIHJlY29yZGVkQ29kZUJsb2NrLCBJbnN0cnVj
dGlvbiogcmVjb3JkZWRWUEMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRDb2Rl
QmxvY2sgPSByZWNvcmRlZENvZGVCbG9jazsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRWUEMgPSBy
ZWNvcmRlZFZQQzsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHJpdmF0ZUV4ZWN1dGVSZXR1
cm5lZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVjb3JkZWRDb2RlQmxvY2sgPSAwOwor
ICAgICAgICAgICAgbV9yZWNvcmRlZFZQQyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgY2FsbGluZ05hdGl2ZUZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9yZWNvcmRlZENvZGVCbG9jayA9IDA7CisgICAgICAgICAgICBtX3JlY29yZGVkVlBDID0gMDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgdm9pZCog
dGhyZWFkU3RhcnRGdW5jKHZvaWQqKTsKKyAgICAgICAgdm9pZCBydW4oKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFNhbXBsaW5nIHRocmVhZCBzdGF0ZS4KKyAgICAgICAgYm9vbCBtX3J1bm5pbmc7
CisgICAgICAgIHVuc2lnbmVkIG1faGVydHo7CisgICAgICAgIHB0aHJlYWRfdCBtX3NhbXBsaW5n
VGhyZWFkOworCisgICAgICAgIC8vIFN0YXRlIHRyYWNrZWQgYnkgdGhlIG1haW4gdGhyZWFkLCB1
c2VkIGJ5IHRoZSBzYW1wbGluZyB0aHJlYWQuCisgICAgICAgIENvZGVCbG9jayogbV9yZWNvcmRl
ZENvZGVCbG9jazsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIG1fcmVjb3JkZWRWUEM7CisKKyAgICAg
ICAgLy8gR2F0aGVyZWQgc2FtcGxlIGRhdGEuCisgICAgICAgIGxvbmcgbG9uZyBtX3RvdGFsU2Ft
cGxlczsKKyAgICAgICAgU2NvcGVTYW1wbGVSZWNvcmRNYXAqIG1fc2NvcGVTYW1wbGVNYXA7Cisg
ICAgfTsKKworLy8gU0NPUEVOT0RFXyAvIE1BQ0hJTkVfIG1hY3JvcyBmb3IgdXNlIGZyb20gd2l0
aGluIG1lbWJlciBtZXRob2RzIG9uIFNjb3BlTm9kZSAvIE1hY2hpbmUgcmVzcGVjdGl2ZWx5Lgor
I2lmIFNBTVBMSU5HX1RPT0xfRU5BQkxFRAorI2RlZmluZSBTQ09QRU5PREVfU0FNUExJTkdfbm90
aWZ5T2ZTY29wZShzYW1wbGVyKSBzYW1wbGVyLT5ub3RpZnlPZlNjb3BlKHRoaXMpCisjZGVmaW5l
IE1BQ0hJTkVfU0FNUExJTkdfc2FtcGxlKGNvZGVCbG9jaywgdlBDKSBtX3NhbXBsZXItPnNhbXBs
ZShjb2RlQmxvY2ssIHZQQykKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0
ZVJldHVybmVkKCkgbV9zYW1wbGVyLT5wcml2YXRlRXhlY3V0ZVJldHVybmVkKCkKKyNkZWZpbmUg
TUFDSElORV9TQU1QTElOR19jYWxsaW5nTmF0aXZlRnVuY3Rpb24oKSBtX3NhbXBsZXItPmNhbGxp
bmdOYXRpdmVGdW5jdGlvbigpCisjZWxzZQorI2RlZmluZSBTQ09QRU5PREVfU0FNUExJTkdfbm90
aWZ5T2ZTY29wZShzYW1wbGVyKQorI2RlZmluZSBNQUNISU5FX1NBTVBMSU5HX3NhbXBsZShjb2Rl
QmxvY2ssIHZQQykKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19wcml2YXRlRXhlY3V0ZVJldHVy
bmVkKCkKKyNkZWZpbmUgTUFDSElORV9TQU1QTElOR19jYWxsaW5nTmF0aXZlRnVuY3Rpb24oKQor
I2VuZGlmCisKKwogI2lmIERVTVBfT1BDT0RFX1NUQVRTCiAKICAgICBzdHJ1Y3QgT3Bjb2RlU3Rh
dHMgewpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL1NoZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvU2hlbGwuY3BwCShyZXZpc2lvbiAzNTI5MykKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9TaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOSw2ICszMzksMTIgQEAg
c3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBpZiAocHJl
dHR5UHJpbnQpCiAgICAgICAgICAgICBwcmV0dHlQcmludFNjcmlwdChnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZmlsZU5hbWUsIHNjcmlwdCk7CiAgICAgICAgIGVsc2UgeworI2lmIFNBTVBM
SU5HX1RPT0xfRU5BQkxFRAorICAgICAgICAgICAgTWFjaGluZSogbWFjaGluZSA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLT5tYWNoaW5lOworICAgICAgICAgICAgbWFjaGluZS0+bV9zYW1w
bGVyID0gbmV3IFNhbXBsaW5nVG9vbCgpOworICAgICAgICAgICAgbWFjaGluZS0+bV9zYW1wbGVy
LT5zdGFydCgpOworI2VuZGlmCisKICAgICAgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9
IEludGVycHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFs
T2JqZWN0LT5nbG9iYWxTY29wZUNoYWluKCksIGZpbGVOYW1lLCAxLCBzY3JpcHQuZGF0YSgpKTsK
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24uY29tcGxUeXBlKCkg
IT0gVGhyb3c7CiAgICAgICAgICAgICBpZiAoZHVtcCkgewpAQCAtMzQ3LDYgKzM1MywxMiBAQCBz
dGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICBwcmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGNvbXBs
ZXRpb24udmFsdWUoKS0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLmFzY2lp
KCkpOwogICAgICAgICAgICAgfQorCisjaWYgU0FNUExJTkdfVE9PTF9FTkFCTEVECisgICAgICAg
ICAgICBtYWNoaW5lLT5tX3NhbXBsZXItPnN0b3AoKTsKKyAgICAgICAgICAgIG1hY2hpbmUtPm1f
c2FtcGxlci0+ZHVtcChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgICAgICAgICBk
ZWxldGUgbWFjaGluZS0+bV9zYW1wbGVyOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIHN1Y2Nlc3M7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM1MjkzKQor
KysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OCw3
ICsxNTQ4LDcgQEAgUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYQogfQog
CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkJvZHlOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gU2NvcGVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFNjb3BlTm9k
ZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU291cmNlRWxlbWVudHMqIGNo
aWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgYm9v
bCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpCiAgICAgOiBCbG9ja05vZGUoZ2xvYmFsRGF0
YSwgY2hpbGRyZW4pCkBAIC0xNTYxLDYgKzE1NjEsOCBAQCBTY29wZU5vZGU6OlNjb3BlTm9kZShK
U0dsb2JhbERhdGEqIGdsb2JhCiAgICAgICAgIG1fdmFyU3RhY2sgPSAqdmFyU3RhY2s7CiAgICAg
aWYgKGZ1bmNTdGFjaykKICAgICAgICAgbV9mdW5jdGlvblN0YWNrID0gKmZ1bmNTdGFjazsKKwor
ICAgIFNDT1BFTk9ERV9TQU1QTElOR19ub3RpZnlPZlNjb3BlKGdsb2JhbERhdGEtPm1hY2hpbmUt
Pm1fc2FtcGxlcik7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9n
cmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=
</data>
<flag name="review"
          id="9904"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22455</attachid>
            <date>2008-07-23 10:16:38 -0700</date>
            <delta_ts>2008-07-23 10:16:38 -0700</delta_ts>
            <desc>(sunspider results)</desc>
            <filename>patch_squirrelshark.C.sunspider.txt</filename>
            <type>text/plain</type>
            <size>5720</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">PT09IEJVSUxESU5HIEFHR1JFR0FURSBUQVJHRVQgRGVyaXZlZCBTb3VyY2VzIFdJVEggQ09ORklH
VVJBVElPTiBSZWxlYXNlID09PQoKQ2hlY2tpbmcgRGVwZW5kZW5jaWVzLi4uCgpQaGFzZVNjcmlw
dEV4ZWN1dGlvbiAiL1VzZXJzL2dhdmluL0Rlc2t0b3AvV29ya2luZy9XZWJLaXQvV2ViS2l0QnVp
bGQvSmF2YVNjcmlwdENvcmUuYnVpbGQvUmVsZWFzZS9EZXJpdmVkIFNvdXJjZXMuYnVpbGQvU2Ny
aXB0LTY1RkIzRjY1MDlEMTFFOTEwMEY0OURFQi5zaCIKICAgIGNkIC9Vc2Vycy9nYXZpbi9EZXNr
dG9wL1dvcmtpbmcvV2ViS2l0L0phdmFTY3JpcHRDb3JlCiAgICAvYmluL3NoIC1jICJcIi9Vc2Vy
cy9nYXZpbi9EZXNrdG9wL1dvcmtpbmcvV2ViS2l0L1dlYktpdEJ1aWxkL0phdmFTY3JpcHRDb3Jl
LmJ1aWxkL1JlbGVhc2UvRGVyaXZlZCBTb3VyY2VzLmJ1aWxkL1NjcmlwdC02NUZCM0Y2NTA5RDEx
RTkxMDBGNDlERUIuc2hcIiIKbWFrZTogTm90aGluZyB0byBiZSBkb25lIGZvciBgYWxsJy4KClBo
YXNlU2NyaXB0RXhlY3V0aW9uICIvVXNlcnMvZ2F2aW4vRGVza3RvcC9Xb3JraW5nL1dlYktpdC9X
ZWJLaXRCdWlsZC9KYXZhU2NyaXB0Q29yZS5idWlsZC9SZWxlYXNlL0Rlcml2ZWQgU291cmNlcy5i
dWlsZC9TY3JpcHQtNUQzNURFRTEwQzdDMTQwQjAwODY0OEIyLnNoIgogICAgY2QgL1VzZXJzL2dh
dmluL0Rlc2t0b3AvV29ya2luZy9XZWJLaXQvSmF2YVNjcmlwdENvcmUKICAgIC9iaW4vc2ggLWMg
IlwiL1VzZXJzL2dhdmluL0Rlc2t0b3AvV29ya2luZy9XZWJLaXQvV2ViS2l0QnVpbGQvSmF2YVNj
cmlwdENvcmUuYnVpbGQvUmVsZWFzZS9EZXJpdmVkIFNvdXJjZXMuYnVpbGQvU2NyaXB0LTVEMzVE
RUUxMEM3QzE0MEIwMDg2NDhCMi5zaFwiIgoKCj09PSBCVUlMRElORyBOQVRJVkUgVEFSR0VUIEph
dmFTY3JpcHRDb3JlIFdJVEggQ09ORklHVVJBVElPTiBSZWxlYXNlID09PQoKQ2hlY2tpbmcgRGVw
ZW5kZW5jaWVzLi4uCgpQaGFzZVNjcmlwdEV4ZWN1dGlvbiAvVXNlcnMvZ2F2aW4vRGVza3RvcC9X
b3JraW5nL1dlYktpdC9XZWJLaXRCdWlsZC9KYXZhU2NyaXB0Q29yZS5idWlsZC9SZWxlYXNlL0ph
dmFTY3JpcHRDb3JlLmJ1aWxkL1NjcmlwdC05MzE5NTg2QjA5RDlGOTFBMDBBNTZGRDQuc2gKICAg
IGNkIC9Vc2Vycy9nYXZpbi9EZXNrdG9wL1dvcmtpbmcvV2ViS2l0L0phdmFTY3JpcHRDb3JlCiAg
ICAvYmluL3NoIC1jIC9Vc2Vycy9nYXZpbi9EZXNrdG9wL1dvcmtpbmcvV2ViS2l0L1dlYktpdEJ1
aWxkL0phdmFTY3JpcHRDb3JlLmJ1aWxkL1JlbGVhc2UvSmF2YVNjcmlwdENvcmUuYnVpbGQvU2Ny
aXB0LTkzMTk1ODZCMDlEOUY5MUEwMEE1NkZENC5zaAoKCj09PSBCVUlMRElORyBOQVRJVkUgVEFS
R0VUIGpzYyBXSVRIIENPTkZJR1VSQVRJT04gUmVsZWFzZSA9PT0KCkNoZWNraW5nIERlcGVuZGVu
Y2llcy4uLgoKUGhhc2VTY3JpcHRFeGVjdXRpb24gL1VzZXJzL2dhdmluL0Rlc2t0b3AvV29ya2lu
Zy9XZWJLaXQvV2ViS2l0QnVpbGQvSmF2YVNjcmlwdENvcmUuYnVpbGQvUmVsZWFzZS9qc2MuYnVp
bGQvU2NyaXB0LTVENUQ4QUJGMEUwRDBCMDMwMEY5QzY5Mi5zaAogICAgY2QgL1VzZXJzL2dhdmlu
L0Rlc2t0b3AvV29ya2luZy9XZWJLaXQvSmF2YVNjcmlwdENvcmUKICAgIC9iaW4vc2ggLWMgL1Vz
ZXJzL2dhdmluL0Rlc2t0b3AvV29ya2luZy9XZWJLaXQvV2ViS2l0QnVpbGQvSmF2YVNjcmlwdENv
cmUuYnVpbGQvUmVsZWFzZS9qc2MuYnVpbGQvU2NyaXB0LTVENUQ4QUJGMEUwRDBCMDMwMEY5QzY5
Mi5zaAoqKiBCVUlMRCBTVUNDRUVERUQgKioKU3RhcnRpbmcgc3Vuc3BpZGVyLWNvbXBhcmUtcmVz
dWx0cyB3aXRoIERZTERfRlJBTUVXT1JLX1BBVEggc2V0IHRvIHBvaW50IHRvIGJ1aWx0IEphdmFT
Y3JpcHRDb3JlIGluIC9Vc2Vycy9nYXZpbi9EZXNrdG9wL1dvcmtpbmcvV2ViS2l0L1dlYktpdEJ1
aWxkL1JlbGVhc2UuCgoKVEVTVCAgICAgICAgICAgICAgICAgICBDT01QQVJJU09OICAgICAgICAg
ICAgRlJPTSAgICAgICAgICAgICAgICAgVE8gICAgICAgICAgICAgREVUQUlMUwoKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KCioqIFRPVEFMICoqOiAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgMjUy
OS45bXMgKy8tIDAuMSUgICAyNTI5LjNtcyArLy0gMC4xJSAKCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CgogIDNkOiAgICAgICAgICAgICAgICAgIDEuMDAzeCBhcyBmYXN0ICAgICAzMjYuNW1zICsvLSAw
LjIlICAgIDMyNS40bXMgKy8tIDAuMiUgICAgIHNpZ25pZmljYW50CiAgICBjdWJlOiAgICAgICAg
ICAgICAgMS4wMDd4IGFzIGZhc3QgICAgIDEwMy43bXMgKy8tIDAuMyUgICAgMTAzLjBtcyArLy0g
MC4wJSAgICAgc2lnbmlmaWNhbnQKICAgIG1vcnBoOiAgICAgICAgICAgICAtICAgICAgICAgICAg
ICAgICAgMTEyLjdtcyArLy0gMC40JSAgICAxMTIuNW1zICsvLSAwLjMlIAogICAgcmF5dHJhY2U6
ICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAxMTAuMW1zICsvLSAwLjIlICAgIDEwOS45bXMg
Ky8tIDAuNCUgCgogIGFjY2VzczogICAgICAgICAgICAgIDEuMDA4eCBhcyBmYXN0ICAgICAzNDIu
MW1zICsvLSAwLjIlICAgIDMzOS41bXMgKy8tIDAuMiUgICAgIHNpZ25pZmljYW50CiAgICBiaW5h
cnktdHJlZXM6ICAgICAgMS4wMTF4IGFzIGZhc3QgICAgICA0Ni44bXMgKy8tIDAuNiUgICAgIDQ2
LjNtcyArLy0gMC43JSAgICAgc2lnbmlmaWNhbnQKICAgIGZhbm5rdWNoOiAgICAgICAgICAxLjAx
MHggYXMgZmFzdCAgICAgIDg3LjZtcyArLy0gMC40JSAgICAgODYuN21zICsvLSAwLjQlICAgICBz
aWduaWZpY2FudAogICAgbmJvZHk6ICAgICAgICAgICAgIDEuMDA3eCBhcyBmYXN0ICAgICAxNjku
OG1zICsvLSAwLjMlICAgIDE2OC43bXMgKy8tIDAuMiUgICAgIHNpZ25pZmljYW50CiAgICBuc2ll
dmU6ICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAzNy45bXMgKy8tIDAuNiUgICAgIDM3
LjhtcyArLy0gMC44JSAKCiAgYml0b3BzOiAgICAgICAgICAgICAgKjEuMDExeCBhcyBzbG93KiAg
IDI1Ny42bXMgKy8tIDAuMiUgICAgMjYwLjVtcyArLy0gMC4zJSAgICAgc2lnbmlmaWNhbnQKICAg
IDNiaXQtYml0cy1pbi1ieXRlOiAqMS4wNjB4IGFzIHNsb3cqICAgIDM4LjVtcyArLy0gMS4wJSAg
ICAgNDAuOG1zICsvLSAxLjQlICAgICBzaWduaWZpY2FudAogICAgYml0cy1pbi1ieXRlOiAgICAg
ID8/ICAgICAgICAgICAgICAgICAgNDcuM21zICsvLSAwLjclICAgICA0Ny42bXMgKy8tIDEuMCUg
ICAgIG5vdCBjb25jbHVzaXZlOiBtaWdodCBiZSAqMS4wMDZ4IGFzIHNsb3cqCiAgICBiaXR3aXNl
LWFuZDogICAgICAgPz8gICAgICAgICAgICAgICAgICA4OC44bXMgKy8tIDAuMyUgICAgIDg4Ljlt
cyArLy0gMC4zJSAgICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAwMXggYXMgc2xvdyoK
ICAgIG5zaWV2ZS1iaXRzOiAgICAgICAqMS4wMDJ4IGFzIHNsb3cqICAgIDgzLjBtcyArLy0gMC4w
JSAgICAgODMuMm1zICsvLSAwLjQlICAgICBzaWduaWZpY2FudAoKICBjb250cm9sZmxvdzogICAg
ICAgICA/PyAgICAgICAgICAgICAgICAgIDI2LjVtcyArLy0gMS40JSAgICAgMjYuN21zICsvLSAx
LjMlICAgICBub3QgY29uY2x1c2l2ZTogbWlnaHQgYmUgKjEuMDA4eCBhcyBzbG93KgogICAgcmVj
dXJzaXZlOiAgICAgICAgID8/ICAgICAgICAgICAgICAgICAgMjYuNW1zICsvLSAxLjQlICAgICAy
Ni43bXMgKy8tIDEuMyUgICAgIG5vdCBjb25jbHVzaXZlOiBtaWdodCBiZSAqMS4wMDh4IGFzIHNs
b3cqCgogIGNyeXB0bzogICAgICAgICAgICAgICoxLjAwN3ggYXMgc2xvdyogICAxNDguMm1zICsv
LSAwLjIlICAgIDE0OS4ybXMgKy8tIDAuMyUgICAgIHNpZ25pZmljYW50CiAgICBhZXM6ICAgICAg
ICAgICAgICAgKjEuMDE3eCBhcyBzbG93KiAgICA0Ni43bXMgKy8tIDAuNyUgICAgIDQ3LjVtcyAr
Ly0gMC44JSAgICAgc2lnbmlmaWNhbnQKICAgIG1kNTogICAgICAgICAgICAgICA/PyAgICAgICAg
ICAgICAgICAgIDUxLjJtcyArLy0gMC42JSAgICAgNTEuNG1zICsvLSAwLjclICAgICBub3QgY29u
Y2x1c2l2ZTogbWlnaHQgYmUgKjEuMDA0eCBhcyBzbG93KgogICAgc2hhMTogICAgICAgICAgICAg
IC0gICAgICAgICAgICAgICAgICAgNTAuM21zICsvLSAwLjclICAgICA1MC4zbXMgKy8tIDAuNyUg
CgogIGRhdGU6ICAgICAgICAgICAgICAgICoxLjAwNXggYXMgc2xvdyogICAyMjkuMm1zICsvLSAw
LjQlICAgIDIzMC40bXMgKy8tIDAuMiUgICAgIHNpZ25pZmljYW50CiAgICBmb3JtYXQtdG9mdGU6
ICAgICAgKjEuMDA5eCBhcyBzbG93KiAgIDEzOC42bXMgKy8tIDAuNCUgICAgMTM5LjhtcyArLy0g
MC4zJSAgICAgc2lnbmlmaWNhbnQKICAgIGZvcm1hdC14cGFyYjogICAgICAtICAgICAgICAgICAg
ICAgICAgIDkwLjZtcyArLy0gMC43JSAgICAgOTAuNm1zICsvLSAwLjQlIAoKICBtYXRoOiAgICAg
ICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgMjcyLjZtcyArLy0gMC4xJSAgICAyNzIuNm1z
ICsvLSAwLjElIAogICAgY29yZGljOiAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgODIu
NW1zICsvLSAwLjUlICAgICA4Mi4ybXMgKy8tIDAuNCUgCiAgICBwYXJ0aWFsLXN1bXM6ICAgICAg
MS4wMDd4IGFzIGZhc3QgICAgIDEzOS4xbXMgKy8tIDAuMiUgICAgMTM4LjFtcyArLy0gMC4zJSAg
ICAgc2lnbmlmaWNhbnQKICAgIHNwZWN0cmFsLW5vcm06ICAgICAqMS4wMjV4IGFzIHNsb3cqICAg
IDUxLjBtcyArLy0gMC4wJSAgICAgNTIuM21zICsvLSAwLjclICAgICBzaWduaWZpY2FudAoKICBy
ZWdleHA6ICAgICAgICAgICAgICAxLjAxMHggYXMgZmFzdCAgICAgMjk4LjJtcyArLy0gMC4yJSAg
ICAyOTUuM21zICsvLSAwLjMlICAgICBzaWduaWZpY2FudAogICAgZG5hOiAgICAgICAgICAgICAg
IDEuMDEweCBhcyBmYXN0ICAgICAyOTguMm1zICsvLSAwLjIlICAgIDI5NS4zbXMgKy8tIDAuMyUg
ICAgIHNpZ25pZmljYW50CgogIHN0cmluZzogICAgICAgICAgICAgID8/ICAgICAgICAgICAgICAg
ICA2MjkuMG1zICsvLSAwLjMlICAgIDYyOS43bXMgKy8tIDAuMyUgICAgIG5vdCBjb25jbHVzaXZl
OiBtaWdodCBiZSAqMS4wMDF4IGFzIHNsb3cqCiAgICBiYXNlNjQ6ICAgICAgICAgICAgPz8gICAg
ICAgICAgICAgICAgICA4NS44bXMgKy8tIDAuNSUgICAgIDg1LjltcyArLy0gMC4zJSAgICAgbm90
IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAwMXggYXMgc2xvdyoKICAgIGZhc3RhOiAgICAgICAg
ICAgICAtICAgICAgICAgICAgICAgICAgMTEyLjltcyArLy0gMC40JSAgICAxMTIuOW1zICsvLSAw
LjYlIAogICAgdGFnY2xvdWQ6ICAgICAgICAgICoxLjAwNHggYXMgc2xvdyogICAxNjEuOG1zICsv
LSAwLjMlICAgIDE2Mi41bXMgKy8tIDAuNSUgICAgIHNpZ25pZmljYW50CiAgICB1bnBhY2stY29k
ZTogICAgICAgLSAgICAgICAgICAgICAgICAgIDE2OC43bXMgKy8tIDAuNiUgICAgMTY4LjNtcyAr
Ly0gMC4zJSAKICAgIHZhbGlkYXRlLWlucHV0OiAgICA/PyAgICAgICAgICAgICAgICAgIDk5Ljht
cyArLy0gMS40JSAgICAxMDAuMW1zICsvLSAxLjQlICAgICBub3QgY29uY2x1c2l2ZTogbWlnaHQg
YmUgKjEuMDAzeCBhcyBzbG93Kgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>