<?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>52622</bug_id>
          
          <creation_ts>2011-01-18 05:35:23 -0800</creation_ts>
          <short_desc>Cache function offsets to speed up javascript parsing</short_desc>
          <delta_ts>2011-01-24 22:06:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>52814</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ggaren</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>335778</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-18 05:35:23 -0800</bug_when>
    <thetext>WebCore memory cache could be used to save javascript function offsets. This could avoid quite a bit of work when reparsing the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335781</commentid>
    <comment_count>1</comment_count>
      <attachid>79268</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-18 05:37:23 -0800</bug_when>
    <thetext>Created attachment 79268
experimental patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335861</commentid>
    <comment_count>2</comment_count>
      <attachid>79268</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-01-18 09:23:40 -0800</bug_when>
    <thetext>Comment on attachment 79268
experimental patch

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

&gt; Source/JavaScriptCore/parser/JSParser.cpp:121
&gt; +    struct CachedFunctionInfo : public SourceProvider::CachedSourceInfo {
&gt; +        CachedFunctionInfo(JSToken closeBraceToken)
&gt; +            : closeBraceToken(closeBraceToken) 
&gt; +        {
&gt; +        }
&gt; +        unsigned approximateByteSize() const
&gt; +        {
&gt; +            static const unsigned assummedAverageIdentifierSize = 20;
&gt; +            unsigned size = sizeof(*this);
&gt; +            size += declaredVariables.size() * assummedAverageIdentifierSize;
&gt; +            size += usedVariables.size() * assummedAverageIdentifierSize;
&gt; +            size += closedVariables.size() * assummedAverageIdentifierSize;
&gt; +            size += writtenVariables.size() * assummedAverageIdentifierSize;
&gt; +            return size;
&gt; +        }
&gt; +
&gt; +        JSToken closeBraceToken;
&gt; +        bool usesEval;
&gt; +        Vector&lt;RefPtr&lt;StringImpl&gt; &gt; declaredVariables;
&gt; +        Vector&lt;RefPtr&lt;StringImpl&gt; &gt; usedVariables;
&gt; +        Vector&lt;RefPtr&lt;StringImpl&gt; &gt; closedVariables;
&gt; +        Vector&lt;RefPtr&lt;StringImpl&gt; &gt; writtenVariables;
&gt; +    };

The cached info doesn&apos;t need to store a functions declared or closed variables.  All it should need to store is the used and written free variables which is basically usedVariables - declaredVariables and writtenVariables - declaredVariables.

Rather than storing the entirety of the close brace token you should be able to simply store the start character and line number.

&gt; Source/JavaScriptCore/parser/JSParser.cpp:1326
&gt; +    if (CachedFunctionInfo* cachedInfo = findCachedFunctionInfo(openBracePos)) {
&gt; +        // If we know about this function already, we can use the cached info and skip the parser to the end of the function.
&gt; +        body = context.createFunctionBody(strictMode());
&gt; +
&gt; +        functionScope-&gt;restoreFunctionInfo(cachedInfo);
&gt; +        failIfFalse(popScope(functionScope, TreeBuilder::NeedsFreeVariableInfo));
&gt; +
&gt; +        m_token = cachedInfo-&gt;closeBraceToken;
&gt; +        m_lexer-&gt;setOffsetAfterCloseBraceToken(m_token);
&gt; +        closeBracePos = m_token.m_info.startOffset;
&gt; +
&gt; +        next();
&gt; +        return true;
&gt; +    }

The ability to use the cache is should be determined by the type of treebuilder being used -- something like  TreeBuilder::CanUseFunctionCache will be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336207</commentid>
    <comment_count>3</comment_count>
      <attachid>79355</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-18 16:47:21 -0800</bug_when>
    <thetext>Created attachment 79355
patch for review

Function cache size seems to be around 10% of the source size on average.

Loading wsj.com the patch avoids parsing ~0.5M characters worth of js on the first load and ~1.5M when revisiting the site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336211</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 16:49:52 -0800</bug_when>
    <thetext>Attachment 79355 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/parser/SourceProvider.h:60:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336409</commentid>
    <comment_count>5</comment_count>
      <attachid>79405</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-19 02:23:45 -0800</bug_when>
    <thetext>Created attachment 79405
better size calculation and stylistic improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336410</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 02:26:51 -0800</bug_when>
    <thetext>Attachment 79405 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/parser/SourceProvider.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/loader/cache/CachedScript.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336430</commentid>
    <comment_count>7</comment_count>
      <attachid>79410</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-19 04:52:26 -0800</bug_when>
    <thetext>Created attachment 79410
use shrinkToFit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336431</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 04:54:19 -0800</bug_when>
    <thetext>Attachment 79410 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/parser/SourceProvider.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/loader/cache/CachedScript.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336729</commentid>
    <comment_count>9</comment_count>
      <attachid>79410</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-01-19 12:51:26 -0800</bug_when>
    <thetext>Comment on attachment 79410
use shrinkToFit

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

r- due to comments

&gt; Source/JavaScriptCore/parser/Lexer.h:88
&gt; +            ASSERT(token.m_type == CLOSEBRACE);
&gt; +            m_lineNumber = token.m_info.line;
&gt; +            setOffset(token.m_info.endOffset);
&gt; +            if (UNLIKELY(m_code == m_codeEnd))
&gt; +                m_current = -1;
&gt; +            m_delimited = true;
&gt; +            m_lastToken = CLOSEBRACE;

this should be a call to setOffset, although you&apos;ll need to transfer 
if (UNLIKELY(m_code == m_codeEnd))
     m_current = -1;

To setOffset as well.

&gt; Source/JavaScriptCore/parser/SourceProvider.h:76
&gt; +

I think we really want SourceProviderCache to hang off of SourceProvider itself.  It will allow it to be devirtualised sensibly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336884</commentid>
    <comment_count>10</comment_count>
      <attachid>79506</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-19 15:44:46 -0800</bug_when>
    <thetext>Created attachment 79506
fixes based on oliver&apos;s comments

- create a cache for all SourceProviders, not just those connected to WebCore cache
- use setOffset/setLineNumber to restore lexer state</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336892</commentid>
    <comment_count>11</comment_count>
      <attachid>79506</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-01-19 16:00:36 -0800</bug_when>
    <thetext>Comment on attachment 79506
fixes based on oliver&apos;s comments

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336905</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-01-19 16:14:57 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339493</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-24 22:06:58 -0800</bug_when>
    <thetext>This is leaky: bug 53061.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79268</attachid>
            <date>2011-01-18 05:37:23 -0800</date>
            <delta_ts>2011-01-18 16:47:21 -0800</delta_ts>
            <desc>experimental patch</desc>
            <filename>function-cache-7.patch</filename>
            <type>text/plain</type>
            <size>12158</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuY3BwCShyZXZpc2lv
biA3NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAjaW5j
bHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZUluZm8uaCIKICNpbmNsdWRlICJB
U1RCdWlsZGVyLmgiCisjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVk
ZSA8dXRpbGl0eT4KQEAgLTk0LDYgKzk1LDMwIEBAIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0lt
cGwqIG1faWRlbnQ7CiAgICAgICAgIGJvb2wgbV9pc0xvb3A7CiAgICAgfTsKKyAgICAKKyAgICBz
dHJ1Y3QgQ2FjaGVkRnVuY3Rpb25JbmZvIDogcHVibGljIFNvdXJjZVByb3ZpZGVyOjpDYWNoZWRT
b3VyY2VJbmZvIHsKKyAgICAgICAgQ2FjaGVkRnVuY3Rpb25JbmZvKEpTVG9rZW4gY2xvc2VCcmFj
ZVRva2VuKQorICAgICAgICAgICAgOiBjbG9zZUJyYWNlVG9rZW4oY2xvc2VCcmFjZVRva2VuKSAK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGFwcHJveGltYXRlQnl0ZVNp
emUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
YXNzdW1tZWRBdmVyYWdlSWRlbnRpZmllclNpemUgPSAyMDsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNpemUgPSBzaXplb2YoKnRoaXMpOworICAgICAgICAgICAgc2l6ZSArPSBkZWNsYXJlZFZhcmlh
Ymxlcy5zaXplKCkgKiBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgICAg
IHNpemUgKz0gdXNlZFZhcmlhYmxlcy5zaXplKCkgKiBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVy
U2l6ZTsKKyAgICAgICAgICAgIHNpemUgKz0gY2xvc2VkVmFyaWFibGVzLnNpemUoKSAqIGFzc3Vt
bWVkQXZlcmFnZUlkZW50aWZpZXJTaXplOworICAgICAgICAgICAgc2l6ZSArPSB3cml0dGVuVmFy
aWFibGVzLnNpemUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXplOworICAgICAgICAg
ICAgcmV0dXJuIHNpemU7CisgICAgICAgIH0KKworICAgICAgICBKU1Rva2VuIGNsb3NlQnJhY2VU
b2tlbjsKKyAgICAgICAgYm9vbCB1c2VzRXZhbDsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxTdHJp
bmdJbXBsPiA+IGRlY2xhcmVkVmFyaWFibGVzOworICAgICAgICBWZWN0b3I8UmVmUHRyPFN0cmlu
Z0ltcGw+ID4gdXNlZFZhcmlhYmxlczsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBs
PiA+IGNsb3NlZFZhcmlhYmxlczsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPiA+
IHdyaXR0ZW5WYXJpYWJsZXM7CisgICAgfTsKIAogICAgIHZvaWQgbmV4dChMZXhlcjo6TGV4VHlw
ZSBsZXhUeXBlID0gTGV4ZXI6OklkZW50aWZ5UmVzZXJ2ZWRXb3JkcykKICAgICB7CkBAIC00MTcs
NiArNDQyLDMzIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgc3RyaWN0TW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaWN0TW9kZTsgfQogICAgICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkU3RyaWN0TW9kZTsgfQogICAgICAgICBib29sIHNoYWRv
d3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NBcmd1bWVudHM7IH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGNvcHlUb0lkZW50aWZpZXJTZXQoY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHJpbmdJbXBsPiA+JiB2ZWN0b3IsIElkZW50aWZpZXJTZXQmIHNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgICAg
IHNldC5hZGQodmVjdG9yW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2F2ZUZ1bmN0
aW9uSW5mbyhDYWNoZWRGdW5jdGlvbkluZm8qIGluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChtX2lzRnVuY3Rpb24pOworICAgICAgICAgICAgaW5mby0+dXNlc0V2YWwgPSBtX3Vz
ZXNFdmFsOworICAgICAgICAgICAgY29weVRvVmVjdG9yKG1fZGVjbGFyZWRWYXJpYWJsZXMsIGlu
Zm8tPmRlY2xhcmVkVmFyaWFibGVzKTsKKyAgICAgICAgICAgIGNvcHlUb1ZlY3RvcihtX3VzZWRW
YXJpYWJsZXMsIGluZm8tPnVzZWRWYXJpYWJsZXMpOworICAgICAgICAgICAgY29weVRvVmVjdG9y
KG1fY2xvc2VkVmFyaWFibGVzLCBpbmZvLT5jbG9zZWRWYXJpYWJsZXMpOworICAgICAgICAgICAg
Y29weVRvVmVjdG9yKG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxlcyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVzdG9yZUZ1bmN0aW9uSW5mbyhj
b25zdCBDYWNoZWRGdW5jdGlvbkluZm8qIGluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2lzRnVuY3Rpb24pOworICAgICAgICAgICAgbV91c2VzRXZhbCA9IGluZm8tPnVzZXNF
dmFsOworICAgICAgICAgICAgY29weVRvSWRlbnRpZmllclNldChpbmZvLT5kZWNsYXJlZFZhcmlh
YmxlcywgbV9kZWNsYXJlZFZhcmlhYmxlcyk7CisgICAgICAgICAgICBjb3B5VG9JZGVudGlmaWVy
U2V0KGluZm8tPnVzZWRWYXJpYWJsZXMsIG1fdXNlZFZhcmlhYmxlcyk7CisgICAgICAgICAgICBj
b3B5VG9JZGVudGlmaWVyU2V0KGluZm8tPmNsb3NlZFZhcmlhYmxlcywgbV9jbG9zZWRWYXJpYWJs
ZXMpOworICAgICAgICAgICAgY29weVRvSWRlbnRpZmllclNldChpbmZvLT53cml0dGVuVmFyaWFi
bGVzLCBtX3dyaXR0ZW5WYXJpYWJsZXMpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKQEAgLTU0Myw2ICs1OTUsMTkgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICBTY29wZVN0YWNrIG1fc2NvcGVTdGFjazsKKworICAgIENhY2hl
ZEZ1bmN0aW9uSW5mbyogZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQgb3BlbkJyYWNlUG9zKSAK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3NvdXJjZUluZm9DYWNoZSA/IHN0YXRpY19jYXN0PENh
Y2hlZEZ1bmN0aW9uSW5mbyo+KG1fc291cmNlSW5mb0NhY2hlLT5nZXQob3BlbkJyYWNlUG9zKSkg
OiAwOworICAgIH0KKyAgICB2b2lkIGFkZENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQgb3BlbkJyYWNl
UG9zLCBQYXNzT3duUHRyPENhY2hlZEZ1bmN0aW9uSW5mbz4gaW5mbykgCisgICAgeworICAgICAg
ICBBU1NFUlQobV9zb3VyY2VJbmZvQ2FjaGUpOworICAgICAgICBtX3NvdXJjZUluZm9DYWNoZS0+
bV9ieXRlU2l6ZSArPSBpbmZvLT5hcHByb3hpbWF0ZUJ5dGVTaXplKCk7CisgICAgICAgIG1fc291
cmNlSW5mb0NhY2hlLT5hZGQob3BlbkJyYWNlUG9zLCBpbmZvLmxlYWtQdHIoKSk7CisgICAgfQor
CisgICAgU291cmNlUHJvdmlkZXI6OlNvdXJjZUluZm9DYWNoZSogbV9zb3VyY2VJbmZvQ2FjaGU7
CiB9OwogCiBjb25zdCBjaGFyKiBqc1BhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVu
Y3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVz
cywgSlNQYXJzZXJNb2RlIHBhcnNlck1vZGUsIGNvbnN0IFNvdXJjZUNvZGUqIHNvdXJjZSkKQEAg
LTU2Niw2ICs2MzEsNyBAQCBKU1BhcnNlcjo6SlNQYXJzZXIoTGV4ZXIqIGxleGVyLCBKU0dsb2Jh
CiAgICAgLCBtX3N0YXRlbWVudERlcHRoKDApCiAgICAgLCBtX25vblRyaXZpYWxFeHByZXNzaW9u
Q291bnQoMCkKICAgICAsIG1fbGFzdElkZW50aWZpZXIoMCkKKyAgICAsIG1fc291cmNlSW5mb0Nh
Y2hlKG1fbGV4ZXItPnNvdXJjZVByb3ZpZGVyKCktPnNvdXJjZUluZm9DYWNoZSgpKQogewogICAg
IFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7CiAgICAgaWYgKGlzRnVuY3Rpb24pCkBAIC01
ODIsNiArNjQ4LDcgQEAgSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhlciwgSlNHbG9iYQog
CiBjb25zdCBjaGFyKiBKU1BhcnNlcjo6cGFyc2VQcm9ncmFtKCkKIHsKKyAgICB1bnNpZ25lZCBv
bGRTb3VyY2VJbmZvQ2FjaGVTaXplID0gbV9zb3VyY2VJbmZvQ2FjaGUgPyBtX3NvdXJjZUluZm9D
YWNoZS0+bV9ieXRlU2l6ZSA6IDA7CiAgICAgQVNUQnVpbGRlciBjb250ZXh0KG1fZ2xvYmFsRGF0
YSwgbV9sZXhlcik7CiAgICAgaWYgKG1fbGV4ZXItPmlzUmVwYXJzaW5nKCkpCiAgICAgICAgIG1f
c3RhdGVtZW50RGVwdGgtLTsKQEAgLTU5Niw2ICs2NjMsMTAgQEAgY29uc3QgY2hhciogSlNQYXJz
ZXI6OnBhcnNlUHJvZ3JhbSgpCiAgICAgICAgIGZlYXR1cmVzIHw9IFN0cmljdE1vZGVGZWF0dXJl
OwogICAgIGlmIChzY29wZS0+c2hhZG93c0FyZ3VtZW50cygpKQogICAgICAgICBmZWF0dXJlcyB8
PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKKyAgICAKKyAgICB1bnNpZ25lZCBzb3VyY2VJbmZv
Q2FjaGVTaXplID0gbV9zb3VyY2VJbmZvQ2FjaGUgPyBtX3NvdXJjZUluZm9DYWNoZS0+bV9ieXRl
U2l6ZSA6IDA7CisgICAgaWYgKHNvdXJjZUluZm9DYWNoZVNpemUgIT0gb2xkU291cmNlSW5mb0Nh
Y2hlU2l6ZSkKKyAgICAgICAgbV9sZXhlci0+c291cmNlUHJvdmlkZXIoKS0+c291cmNlSW5mb0Nh
Y2hlU2l6ZUNoYW5nZWQoc291cmNlSW5mb0NhY2hlU2l6ZSAtIG9sZFNvdXJjZUluZm9DYWNoZVNp
emUpOwogCiAgICAgbV9nbG9iYWxEYXRhLT5wYXJzZXItPmRpZEZpbmlzaFBhcnNpbmcoc291cmNl
RWxlbWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0
aW9ucygpLCBmZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxl
cyk7CkBAIC0xMjM4LDYgKzEzMDksMjIgQEAgdGVtcGxhdGUgPEpTUGFyc2VyOjpGdW5jdGlvblJl
cXVpcmVtZW50cwogCiAgICAgb3BlbkJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFsdWU7
CiAgICAgYm9keVN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworCisgICAgaWYgKENhY2hlZEZ1bmN0
aW9uSW5mbyogY2FjaGVkSW5mbyA9IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8ob3BlbkJyYWNlUG9z
KSkgeworICAgICAgICAvLyBJZiB3ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwg
d2UgY2FuIHVzZSB0aGUgY2FjaGVkIGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5k
IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25C
b2R5KHN0cmljdE1vZGUoKSk7CisKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZ1bmN0
aW9uSW5mbyhjYWNoZWRJbmZvKTsKKyAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rp
b25TY29wZSwgVHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykpOworCisgICAgICAg
IG1fdG9rZW4gPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlVG9rZW47CisgICAgICAgIG1fbGV4ZXIt
PnNldE9mZnNldEFmdGVyQ2xvc2VCcmFjZVRva2VuKG1fdG9rZW4pOworICAgICAgICBjbG9zZUJy
YWNlUG9zID0gbV90b2tlbi5tX2luZm8uc3RhcnRPZmZzZXQ7CisKKyAgICAgICAgbmV4dCgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBuZXh0KCk7CiAKICAgICBib2R5ID0g
cGFyc2VGdW5jdGlvbkJvZHkoY29udGV4dCk7CkBAIC0xMjQ2LDkgKzEzMzMsMjQgQEAgdGVtcGxh
dGUgPEpTUGFyc2VyOjpGdW5jdGlvblJlcXVpcmVtZW50cwogICAgICAgICBmYWlsSWZUcnVlKG1f
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzID09ICpuYW1lKTsKICAgICAgICAg
ZmFpbElmVHJ1ZShtX2dsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmV2YWwgPT0gKm5hbWUpOwog
ICAgIH0KKyAgICBjbG9zZUJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFsdWU7CisgICAg
CisgICAgLy8gQ2FjaGUgdGhlIHRva2VuaXplciBzdGF0ZSBhbmQgdGhlIGZ1bmN0aW9uIHNjb3Bl
IHRoZSBmaXJzdCB0aW1lIHRoZSBmdW5jdGlvbiBpcyBwYXJzZWQuCisgICAgLy8gQW55IGZ1dHVy
ZSByZXBhcnNpbmcgY2FuIHRoZW4gc2tpcCB0aGUgZnVuY3Rpb24uCisgICAgc3RhdGljIGNvbnN0
IGludCBtaW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlID0gMTI4OworICAgIE93blB0cjxDYWNo
ZWRGdW5jdGlvbkluZm8+IG5ld0luZm87CisgICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gY2xvc2VC
cmFjZVBvcyAtIG9wZW5CcmFjZVBvczsKKyAgICBpZiAobV9zb3VyY2VJbmZvQ2FjaGUgJiYgZnVu
Y3Rpb25MZW5ndGggPiBtaW5pbXVtRnVuY3Rpb25MZW5ndGhUb0NhY2hlKSB7CisgICAgICAgIG5l
d0luZm8gPSBhZG9wdFB0cihuZXcgQ2FjaGVkRnVuY3Rpb25JbmZvKG1fdG9rZW4pKTsKKyAgICAg
ICAgZnVuY3Rpb25TY29wZS0+c2F2ZUZ1bmN0aW9uSW5mbyhuZXdJbmZvLmdldCgpKTsKKyAgICB9
CisgICAgCiAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJlZUJ1aWxk
ZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykpOwogICAgIG1hdGNoT3JGYWlsKENMT1NFQlJBQ0Up
OwotICAgIGNsb3NlQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKKworICAgIGlm
IChuZXdJbmZvKQorICAgICAgICBhZGRDYWNoZWRGdW5jdGlvbkluZm8ob3BlbkJyYWNlUG9zLCBu
ZXdJbmZvLnJlbGVhc2UoKSk7CisKICAgICBuZXh0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA3NjAxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NzUsNiArNzUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2J1ZmZlcjE2LnJl
c2l6ZSgwKTsKICAgICAgICAgfQogCisgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92
aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CisKKyAgICAgICAg
dm9pZCBzZXRPZmZzZXRBZnRlckNsb3NlQnJhY2VUb2tlbihKU1Rva2VuIHRva2VuKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQodG9rZW4ubV90eXBlID09IENMT1NFQlJBQ0UpOworICAg
ICAgICAgICAgbV9saW5lTnVtYmVyID0gdG9rZW4ubV9pbmZvLmxpbmU7CisgICAgICAgICAgICBz
ZXRPZmZzZXQodG9rZW4ubV9pbmZvLmVuZE9mZnNldCk7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkobV9jb2RlID09IG1fY29kZUVuZCkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50ID0gLTE7
CisgICAgICAgICAgICBtX2RlbGltaXRlZCA9IHRydWU7CisgICAgICAgICAgICBtX2xhc3RUb2tl
biA9IENMT1NFQlJBQ0U7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MCArMzAsMTEgQEAKICNkZWZpbmUgU291cmNlUHJvdmlkZXJfaAogCiAjaW5jbHVkZSAiVVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7Ci0KICAg
ICBjbGFzcyBTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNvdXJjZVByb3ZpZGVy
PiB7CiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VQcm92aWRlcihjb25zdCBVU3RyaW5nJiB1
cmwpCkBAIC01Myw2ICs1NCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWxpZGF0ZWQ7IH0KICAgICAgICAgdm9pZCBzZXRWYWxp
ZCgpIHsgbV92YWxpZGF0ZWQgPSB0cnVlOyB9CiAKKyAgICAgICAgc3RydWN0IENhY2hlZFNvdXJj
ZUluZm8ge307CisgICAgICAgIGNsYXNzIFNvdXJjZUluZm9DYWNoZSA6IHB1YmxpYyBIYXNoTWFw
PGludCwgQ2FjaGVkU291cmNlSW5mbyo+CisgICAgICAgIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgU291cmNlSW5mb0NhY2hlKCkgOiBtX2J5dGVTaXplKDApIHt9CisgICAgICAgICAg
ICB+U291cmNlSW5mb0NhY2hlKCkgeyBkZWxldGVBbGxWYWx1ZXMoKnRoaXMpOyB9CisgICAgICAg
ICAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgICAgICB9OworICAgICAgICB2aXJ0dWFsIFNv
dXJjZUluZm9DYWNoZSogc291cmNlSW5mb0NhY2hlKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgc291cmNlSW5mb0NhY2hlU2l6ZUNoYW5nZWQoaW50IGRlbHRhKSB7
IFVOVVNFRF9QQVJBTShkZWx0YSk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFVTdHJpbmcg
bV91cmw7CiAgICAgICAgIGJvb2wgbV92YWxpZGF0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJl
dmlzaW9uIDc2MDExKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9jYWNo
ZWRTY3JpcHQtPnNjcmlwdCgpLmxlbmd0aCgpOyB9CiAgICAgICAgIGNvbnN0IFN0cmluZyYgc291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpOyB9CiAKKyAgICAg
ICAgdmlydHVhbCBKU0M6OlNvdXJjZVByb3ZpZGVyOjpTb3VyY2VJbmZvQ2FjaGUqIHNvdXJjZUlu
Zm9DYWNoZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NhY2hlZFNj
cmlwdC0+c291cmNlSW5mb0NhY2hlKCk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IHNvdXJjZUluZm9DYWNoZVNpemVDaGFuZ2VkKGludCBkZWx0YSkgCisgICAgICAgIHsgCisgICAg
ICAgICAgICBtX2NhY2hlZFNjcmlwdC0+c291cmNlSW5mb0NhY2hlU2l6ZUNoYW5nZWQoZGVsdGEp
OworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBDYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlcihDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKICAgICAgICAgICAgIDogU2NyaXB0
U291cmNlUHJvdmlkZXIoc3RyaW5nVG9VU3RyaW5nKGNhY2hlZFNjcmlwdC0+dXJsKCkpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlz
aW9uIDc2MDExKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsMTIgQEAgdm9pZCBDYWNoZWRTY3JpcHQ6
OmVycm9yKENhY2hlZFJlc291cmNlOgogdm9pZCBDYWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVk
RGF0YSgpCiB7CiAgICAgbV9zY3JpcHQgPSBTdHJpbmcoKTsKLSAgICBzZXREZWNvZGVkU2l6ZSgw
KTsKKyAgICB1bnNpZ25lZCBleHRyYVNpemUgPSAwOworI2lmIFVTRShKU0MpCisgICAgLy8gRklY
TUU6IFNvdXJjZUluZm9DYWNoZSBzaG91bGQgYmUgd2lwZWQgb3V0IHRvbyBidXQgbm90IHRoaXMg
ZWFzaWx5LgorICAgIGV4dHJhU2l6ZSA9IG1fc291cmNlSW5mb0NhY2hlLm1fYnl0ZVNpemU7Cisj
ZWxpZgorICAgIHNldERlY29kZWRTaXplKGV4dHJhU2l6ZSk7CiAgICAgaWYgKCFNZW1vcnlDYWNo
ZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYmIGlzU2FmZVRvTWFr
ZVB1cmdlYWJsZSgpKQogICAgICAgICBtYWtlUHVyZ2VhYmxlKHRydWUpOwogfQpAQCAtMTIwLDUg
KzEyNSwxMCBAQCB2b2lkIENhY2hlZFNjcmlwdDo6ZGVjb2RlZERhdGFEZWxldGlvblRpCiB7CiAg
ICAgZGVzdHJveURlY29kZWREYXRhKCk7CiB9Ci0KKyNpZiBVU0UoSlNDKQordm9pZCBDYWNoZWRT
Y3JpcHQ6OnNvdXJjZUluZm9DYWNoZVNpemVDaGFuZ2VkKGludCBkZWx0YSkKK3sKKyAgICBzZXRE
ZWNvZGVkU2l6ZShkZWNvZGVkU2l6ZSgpICsgZGVsdGEpOworfQorI2VuZGlmCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2Ny
aXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNj
cmlwdC5oCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHBhcnNl
ci9Tb3VyY2VQcm92aWRlci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTEsNyArNTMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YSgpOwotCisjaWYgVVNFKEpTQykgICAgICAgIAorICAgICAgICAvLyBBbGxvd3Mg
SlNDIHRvIGNhY2hlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZS4KKyAg
ICAgICAgSlNDOjpTb3VyY2VQcm92aWRlcjo6U291cmNlSW5mb0NhY2hlKiBzb3VyY2VJbmZvQ2Fj
aGUoKSB7IHJldHVybiAmbV9zb3VyY2VJbmZvQ2FjaGU7IH0KKyAgICAgICAgdm9pZCBzb3VyY2VJ
bmZvQ2FjaGVTaXplQ2hhbmdlZChpbnQgZGVsdGEpOworI2VuZGlmCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRTY3Jp
cHQ+Kik7CiAgICAgICAgIHZpcnR1YWwgUHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gUHVyZ2VMYXN0OyB9CkBAIC01OSw2ICs2NSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU3RyaW5nIG1fc2NyaXB0OwogICAgICAgICBSZWZQdHI8VGV4dFJlc291
cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwogICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVj
b2RlZERhdGFEZWxldGlvblRpbWVyOworI2lmIFVTRShKU0MpICAgICAgICAKKyAgICAgICAgSlND
OjpTb3VyY2VQcm92aWRlcjo6U291cmNlSW5mb0NhY2hlIG1fc291cmNlSW5mb0NhY2hlOworI2Vu
ZGlmCiAgICAgfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79355</attachid>
            <date>2011-01-18 16:47:21 -0800</date>
            <delta_ts>2011-01-19 02:23:45 -0800</delta_ts>
            <desc>patch for review</desc>
            <filename>function-cache-8.patch</filename>
            <type>text/plain</type>
            <size>16958</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzYwNzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTEtMDEtMTggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIGZ1bmN0aW9uIG9m
ZnNldHMgdG8gc3BlZWQgdXAgamF2YXNjcmlwdCBwYXJzaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyMgorICAgICAgICAKKyAgICAgICAgVXNl
IG1lbW9yeSBjYWNoZSB0byBzYXZlIGZ1bmN0aW9uIG9mZnNldHMgYW5kIHNvbWUgb3RoZXIgaW5m
by4KKyAgICAgICAgVGhpcyBhdm9pZHMgcXVpdGUgYSBiaXQgb2Ygd29yayB3aGVuIHJlcGFyc2lu
ZyB0aGUgc291cmNlLgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAg
KiBwYXJzZXIvSlNQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6Q2FjaGVkRnVu
Y3Rpb25JbmZvOjpDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6
Q2FjaGVkRnVuY3Rpb25JbmZvOjphcHByb3hpbWF0ZUJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6
SlNQYXJzZXI6OlNjb3BlOjpzYXZlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNQYXJz
ZXI6OlNjb3BlOjpyZXN0b3JlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNQYXJzZXI6
OmZpbmRDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6YWRkQ2Fj
aGVkRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNQYXJzZXI6OkpTUGFyc2VyKToKKyAg
ICAgICAgKEpTQzo6SlNQYXJzZXI6OnBhcnNlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkpTUGFy
c2VyOjpwYXJzZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAg
ICAgIChKU0M6OkxleGVyOjpzb3VyY2VQcm92aWRlcik6CisgICAgICAgIChKU0M6OkxleGVyOjpz
ZXRPZmZzZXRBZnRlckNsb3NlQnJhY2VUb2tlbik6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVBy
b3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpTb3VyY2VJbmZvQ2FjaGU6
OlNvdXJjZUluZm9DYWNoZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyOjpTb3VyY2VJ
bmZvQ2FjaGU6On5Tb3VyY2VJbmZvQ2FjaGUpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRl
cjo6c291cmNlSW5mb0NhY2hlKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6OnNvdXJj
ZUluZm9DYWNoZVNpemVDaGFuZ2VkKToKKyAgICAgICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5o
OgorCiAyMDExLTAxLTE4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsx
MDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBDYW5Vc2VGdW5jdGlvbkNhY2hlID0gdHJ1ZTsKIAog
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShpbnQgdG9rZW4sIHN0ZDo6cGFpcjxF
eHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSos
IEJpbmFyeU9wSW5mbz4pOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9k
ZShFeHByZXNzaW9uTm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBp
bnQgZGl2b3QsIGludCBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5jcHAJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9KU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJOb2Rl
SW5mby5oIgogI2luY2x1ZGUgIkFTVEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VQcm92aWRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRo
cmVhZERhdGEuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtOTQsNiArOTUsMzkgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RyaW5nSW1wbCogbV9pZGVudDsKICAgICAgICAgYm9vbCBtX2lzTG9vcDsK
ICAgICB9OworICAgIAorICAgIHN0cnVjdCBDYWNoZWRGdW5jdGlvbkluZm8gOiBwdWJsaWMgU291
cmNlUHJvdmlkZXI6OkNhY2hlZFNvdXJjZUluZm8geworICAgICAgICBDYWNoZWRGdW5jdGlvbklu
Zm8oaW50IGNsb3NlQnJhY2VMaW5lLCBpbnQgY2xvc2VCcmFjZVBvcykKKyAgICAgICAgICAgIDog
Y2xvc2VCcmFjZUxpbmUoY2xvc2VCcmFjZUxpbmUpIAorICAgICAgICAgICAgLCBjbG9zZUJyYWNl
UG9zKGNsb3NlQnJhY2VQb3MpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25l
ZCBhcHByb3hpbWF0ZUJ5dGVTaXplKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
VGhlIGlkZW50aWZpZXJzIGFyZSB1bmlxdWVkIHN0cmluZ3Mgc28gbW9zdCBsaWtlbHkgdGhlcmUg
YXJlIGZldyBuYW1lcyB0aGF0IGFjdHVhbGx5IHVzZSBhbnkgYWRkaXRpb25hbCBtZW1vcnkuCisg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYXNzdW1tZWRBdmVyYWdlSWRlbnRpZmll
clNpemUgPSBzaXplb2YoUmVmUHRyPFN0cmluZ0ltcGw+KSArIDI7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaXplID0gc2l6ZW9mKCp0aGlzKTsKKyAgICAgICAgICAgIHNpemUgKz0gdXNlZFZhcmlh
Ymxlcy5zaXplKCkgKiBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZTsKKyAgICAgICAgICAg
IHNpemUgKz0gd3JpdHRlblZhcmlhYmxlcy5zaXplKCkgKiBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlm
aWVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBzaXplOworICAgICAgICB9CisgICAgICAgIEpT
VG9rZW4gY2xvc2VCcmFjZVRva2VuKCkgY29uc3QgCisgICAgICAgIHsKKyAgICAgICAgICAgIEpT
VG9rZW4gdG9rZW47CisgICAgICAgICAgICB0b2tlbi5tX3R5cGUgPSBDTE9TRUJSQUNFOworICAg
ICAgICAgICAgdG9rZW4ubV9kYXRhLmludFZhbHVlID0gY2xvc2VCcmFjZVBvczsKKyAgICAgICAg
ICAgIHRva2VuLm1faW5mby5zdGFydE9mZnNldCA9IGNsb3NlQnJhY2VQb3M7CisgICAgICAgICAg
ICB0b2tlbi5tX2luZm8uZW5kT2Zmc2V0ID0gY2xvc2VCcmFjZVBvcyArIDE7CisgICAgICAgICAg
ICB0b2tlbi5tX2luZm8ubGluZSA9IGNsb3NlQnJhY2VMaW5lOyAKKyAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBjbG9zZUJyYWNlTGluZTsKKyAgICAg
ICAgaW50IGNsb3NlQnJhY2VQb3M7CisgICAgICAgIGJvb2wgdXNlc0V2YWw7CisgICAgICAgIFZl
Y3RvcjxSZWZQdHI8U3RyaW5nSW1wbD4gPiB1c2VkVmFyaWFibGVzOworICAgICAgICBWZWN0b3I8
UmVmUHRyPFN0cmluZ0ltcGw+ID4gd3JpdHRlblZhcmlhYmxlczsKKyAgICB9OwogCiAgICAgdm9p
ZCBuZXh0KExleGVyOjpMZXhUeXBlIGxleFR5cGUgPSBMZXhlcjo6SWRlbnRpZnlSZXNlcnZlZFdv
cmRzKQogICAgIHsKQEAgLTQxOCw2ICs0NTIsMzggQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBp
c1ZhbGlkU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0K
ICAgICAgICAgYm9vbCBzaGFkb3dzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dz
QXJndW1lbnRzOyB9CiAKKyAgICAgICAgdm9pZCBzYXZlRnVuY3Rpb25JbmZvKENhY2hlZEZ1bmN0
aW9uSW5mbyogaW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1faXNGdW5jdGlv
bik7CisgICAgICAgICAgICBpbmZvLT51c2VzRXZhbCA9IG1fdXNlc0V2YWw7CisgICAgICAgICAg
ICBpbmZvLT51c2VkVmFyaWFibGVzLnJlc2VydmVDYXBhY2l0eShtX3VzZWRWYXJpYWJsZXMuc2l6
ZSgpKTsKKyAgICAgICAgICAgIGluZm8tPndyaXR0ZW5WYXJpYWJsZXMucmVzZXJ2ZUNhcGFjaXR5
KG1fd3JpdHRlblZhcmlhYmxlcy5zaXplKCkpOworICAgICAgICAgICAgSWRlbnRpZmllclNldDo6
aXRlcmF0b3IgZW5kID0gbV91c2VkVmFyaWFibGVzLmVuZCgpOworICAgICAgICAgICAgZm9yIChJ
ZGVudGlmaWVyU2V0OjppdGVyYXRvciBpdCA9IG1fdXNlZFZhcmlhYmxlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kZWNsYXJlZFZhcmlhYmxlcy5j
b250YWlucygqaXQpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBpbmZvLT51c2VkVmFyaWFibGVzLmFwcGVuZCgqaXQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZW5kID0gbV93cml0dGVuVmFyaWFibGVzLmVuZCgpOworICAgICAgICAgICAgZm9y
IChJZGVudGlmaWVyU2V0OjppdGVyYXRvciBpdCA9IG1fd3JpdHRlblZhcmlhYmxlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kZWNsYXJlZFZhcmlh
Ymxlcy5jb250YWlucygqaXQpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBpbmZvLT53cml0dGVuVmFyaWFibGVzLmFwcGVuZCgqaXQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXN0b3JlRnVuY3Rpb25JbmZvKGNvbnN0
IENhY2hlZEZ1bmN0aW9uSW5mbyogaW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KG1faXNGdW5jdGlvbik7CisgICAgICAgICAgICBtX3VzZXNFdmFsID0gaW5mby0+dXNlc0V2YWw7
CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5mby0+dXNlZFZhcmlhYmxlcy5zaXplKCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIG1fdXNlZFZhcmlhYmxlcy5hZGQoaW5mby0+dXNlZFZhcmlhYmxlc1tpXSk7Cisg
ICAgICAgICAgICBzaXplID0gaW5mby0+d3JpdHRlblZhcmlhYmxlcy5zaXplKCk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgICAg
IG1fd3JpdHRlblZhcmlhYmxlcy5hZGQoaW5mby0+d3JpdHRlblZhcmlhYmxlc1tpXSk7CisgICAg
ICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OwogICAgICAgICBib29sIG1fc2hhZG93c0FyZ3VtZW50cyA6IDE7CkBAIC01NDMsNiArNjA5LDE5
IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU2NvcGVTdGFjayBtX3Njb3BlU3RhY2s7CisKKyAg
ICBDYWNoZWRGdW5jdGlvbkluZm8qIGZpbmRDYWNoZWRGdW5jdGlvbkluZm8oaW50IG9wZW5CcmFj
ZVBvcykgCisgICAgeworICAgICAgICByZXR1cm4gbV9zb3VyY2VJbmZvQ2FjaGUgPyBzdGF0aWNf
Y2FzdDxDYWNoZWRGdW5jdGlvbkluZm8qPihtX3NvdXJjZUluZm9DYWNoZS0+Z2V0KG9wZW5CcmFj
ZVBvcykpIDogMDsKKyAgICB9CisgICAgdm9pZCBhZGRDYWNoZWRGdW5jdGlvbkluZm8oaW50IG9w
ZW5CcmFjZVBvcywgUGFzc093blB0cjxDYWNoZWRGdW5jdGlvbkluZm8+IGluZm8pIAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fc291cmNlSW5mb0NhY2hlKTsKKyAgICAgICAgbV9zb3VyY2VJbmZv
Q2FjaGUtPm1fYnl0ZVNpemUgKz0gaW5mby0+YXBwcm94aW1hdGVCeXRlU2l6ZSgpOworICAgICAg
ICBtX3NvdXJjZUluZm9DYWNoZS0+YWRkKG9wZW5CcmFjZVBvcywgaW5mby5sZWFrUHRyKCkpOwor
ICAgIH0KKworICAgIFNvdXJjZVByb3ZpZGVyOjpTb3VyY2VJbmZvQ2FjaGUqIG1fc291cmNlSW5m
b0NhY2hlOwogfTsKIAogY29uc3QgY2hhcioganNQYXJzZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0
cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBjb25zdCBTb3VyY2VDb2RlKiBzb3Vy
Y2UpCkBAIC01NjYsNiArNjQ1LDcgQEAgSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhlciwg
SlNHbG9iYQogICAgICwgbV9zdGF0ZW1lbnREZXB0aCgwKQogICAgICwgbV9ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50KDApCiAgICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCisgICAgLCBtX3NvdXJj
ZUluZm9DYWNoZShtX2xleGVyLT5zb3VyY2VQcm92aWRlcigpLT5zb3VyY2VJbmZvQ2FjaGUoKSkK
IHsKICAgICBTY29wZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwogICAgIGlmIChpc0Z1bmN0aW9u
KQpAQCAtNTgyLDYgKzY2Miw3IEBAIEpTUGFyc2VyOjpKU1BhcnNlcihMZXhlciogbGV4ZXIsIEpT
R2xvYmEKIAogY29uc3QgY2hhciogSlNQYXJzZXI6OnBhcnNlUHJvZ3JhbSgpCiB7CisgICAgdW5z
aWduZWQgb2xkU291cmNlSW5mb0NhY2hlU2l6ZSA9IG1fc291cmNlSW5mb0NhY2hlID8gbV9zb3Vy
Y2VJbmZvQ2FjaGUtPm1fYnl0ZVNpemUgOiAwOwogICAgIEFTVEJ1aWxkZXIgY29udGV4dChtX2ds
b2JhbERhdGEsIG1fbGV4ZXIpOwogICAgIGlmIChtX2xleGVyLT5pc1JlcGFyc2luZygpKQogICAg
ICAgICBtX3N0YXRlbWVudERlcHRoLS07CkBAIC01OTYsNiArNjc3LDEwIEBAIGNvbnN0IGNoYXIq
IEpTUGFyc2VyOjpwYXJzZVByb2dyYW0oKQogICAgICAgICBmZWF0dXJlcyB8PSBTdHJpY3RNb2Rl
RmVhdHVyZTsKICAgICBpZiAoc2NvcGUtPnNoYWRvd3NBcmd1bWVudHMoKSkKICAgICAgICAgZmVh
dHVyZXMgfD0gU2hhZG93c0FyZ3VtZW50c0ZlYXR1cmU7CisgICAgCisgICAgdW5zaWduZWQgc291
cmNlSW5mb0NhY2hlU2l6ZSA9IG1fc291cmNlSW5mb0NhY2hlID8gbV9zb3VyY2VJbmZvQ2FjaGUt
Pm1fYnl0ZVNpemUgOiAwOworICAgIGlmIChzb3VyY2VJbmZvQ2FjaGVTaXplICE9IG9sZFNvdXJj
ZUluZm9DYWNoZVNpemUpCisgICAgICAgIG1fbGV4ZXItPnNvdXJjZVByb3ZpZGVyKCktPnNvdXJj
ZUluZm9DYWNoZVNpemVDaGFuZ2VkKHNvdXJjZUluZm9DYWNoZVNpemUgLSBvbGRTb3VyY2VJbmZv
Q2FjaGVTaXplKTsKIAogICAgIG1fZ2xvYmFsRGF0YS0+cGFyc2VyLT5kaWRGaW5pc2hQYXJzaW5n
KHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0LnZhckRlY2xhcmF0aW9ucygpLCBjb250ZXh0LmZ1bmNE
ZWNsYXJhdGlvbnMoKSwgZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9sYXN0TGluZSwgY29udGV4dC5udW1Db25zdGFudHMoKSwgY2FwdHVyZWRW
YXJpYWJsZXMpOwpAQCAtMTIzOCw2ICsxMzIzLDIyIEBAIHRlbXBsYXRlIDxKU1BhcnNlcjo6RnVu
Y3Rpb25SZXF1aXJlbWVudHMKIAogICAgIG9wZW5CcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmlu
dFZhbHVlOwogICAgIGJvZHlTdGFydExpbmUgPSB0b2tlbkxpbmUoKTsKKworICAgIGlmIChDYWNo
ZWRGdW5jdGlvbkluZm8qIGNhY2hlZEluZm8gPSBUcmVlQnVpbGRlcjo6Q2FuVXNlRnVuY3Rpb25D
YWNoZSA/IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8ob3BlbkJyYWNlUG9zKSA6IDApIHsKKyAgICAg
ICAgLy8gSWYgd2Uga25vdyBhYm91dCB0aGlzIGZ1bmN0aW9uIGFscmVhZHksIHdlIGNhbiB1c2Ug
dGhlIGNhY2hlZCBpbmZvIGFuZCBza2lwIHRoZSBwYXJzZXIgdG8gdGhlIGVuZCBvZiB0aGUgZnVu
Y3Rpb24uCisgICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0ZUZ1bmN0aW9uQm9keShzdHJpY3RN
b2RlKCkpOworCisgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJlc3RvcmVGdW5jdGlvbkluZm8oY2Fj
aGVkSW5mbyk7CisgICAgICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRy
ZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsKKworICAgICAgICBjbG9zZUJyYWNl
UG9zID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVBvczsKKyAgICAgICAgbV90b2tlbiA9IGNhY2hl
ZEluZm8tPmNsb3NlQnJhY2VUb2tlbigpOworICAgICAgICBtX2xleGVyLT5zZXRPZmZzZXRBZnRl
ckNsb3NlQnJhY2VUb2tlbihtX3Rva2VuKTsKKworICAgICAgICBuZXh0KCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKwogICAgIG5leHQoKTsKIAogICAgIGJvZHkgPSBwYXJzZUZ1bmN0
aW9uQm9keShjb250ZXh0KTsKQEAgLTEyNDYsOSArMTM0NywyNCBAQCB0ZW1wbGF0ZSA8SlNQYXJz
ZXI6OkZ1bmN0aW9uUmVxdWlyZW1lbnRzCiAgICAgICAgIGZhaWxJZlRydWUobV9nbG9iYWxEYXRh
LT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm5hbWUpOwogICAgICAgICBmYWlsSWZUcnVl
KG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9PSAqbmFtZSk7CiAgICAgfQorICAg
IGNsb3NlQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRWYWx1ZTsKKyAgICAKKyAgICAvLyBD
YWNoZSB0aGUgdG9rZW5pemVyIHN0YXRlIGFuZCB0aGUgZnVuY3Rpb24gc2NvcGUgdGhlIGZpcnN0
IHRpbWUgdGhlIGZ1bmN0aW9uIGlzIHBhcnNlZC4KKyAgICAvLyBBbnkgZnV0dXJlIHJlcGFyc2lu
ZyBjYW4gdGhlbiBza2lwIHRoZSBmdW5jdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmlt
dW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUgPSA2NDsKKyAgICBPd25QdHI8Q2FjaGVkRnVuY3Rpb25J
bmZvPiBuZXdJbmZvOworICAgIGludCBmdW5jdGlvbkxlbmd0aCA9IGNsb3NlQnJhY2VQb3MgLSBv
cGVuQnJhY2VQb3M7CisgICAgaWYgKFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNhY2hlICYm
IG1fc291cmNlSW5mb0NhY2hlICYmIGZ1bmN0aW9uTGVuZ3RoID4gbWluaW11bUZ1bmN0aW9uTGVu
Z3RoVG9DYWNoZSkgeworICAgICAgICBuZXdJbmZvID0gYWRvcHRQdHIobmV3IENhY2hlZEZ1bmN0
aW9uSW5mbyhtX3Rva2VuLm1faW5mby5saW5lLCBjbG9zZUJyYWNlUG9zKSk7CisgICAgICAgIGZ1
bmN0aW9uU2NvcGUtPnNhdmVGdW5jdGlvbkluZm8obmV3SW5mby5nZXQoKSk7CisgICAgfQorICAg
IAogICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpO
ZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsKICAgICBtYXRjaE9yRmFpbChDTE9TRUJSQUNFKTsKLSAg
ICBjbG9zZUJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFsdWU7CisKKyAgICBpZiAoVHJl
ZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUgJiYgbmV3SW5mbykKKyAgICAgICAgYWRkQ2Fj
aGVkRnVuY3Rpb25JbmZvKG9wZW5CcmFjZVBvcywgbmV3SW5mby5yZWxlYXNlKCkpOworCiAgICAg
bmV4dCgpOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTGV4ZXIuaAkocmV2aXNpb24gNzYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CiAgICAgICAgIH0KIAorICAg
ICAgICBTb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZS0+cHJvdmlkZXIoKTsgfQorCisgICAgICAgIHZvaWQgc2V0T2Zmc2V0QWZ0ZXJDbG9zZUJy
YWNlVG9rZW4oSlNUb2tlbiB0b2tlbikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHRv
a2VuLm1fdHlwZSA9PSBDTE9TRUJSQUNFKTsKKyAgICAgICAgICAgIG1fbGluZU51bWJlciA9IHRv
a2VuLm1faW5mby5saW5lOworICAgICAgICAgICAgc2V0T2Zmc2V0KHRva2VuLm1faW5mby5lbmRP
ZmZzZXQpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fY29kZSA9PSBtX2NvZGVFbmQpKQor
ICAgICAgICAgICAgICAgIG1fY3VycmVudCA9IC0xOworICAgICAgICAgICAgbV9kZWxpbWl0ZWQg
PSB0cnVlOworICAgICAgICAgICAgbV9sYXN0VG9rZW4gPSBDTE9TRUJSQUNFOworICAgICAgICB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShy
ZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogI2RlZmluZSBTb3VyY2VQ
cm92aWRlcl9oCiAKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJh
bS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTMsNiArNTUsMTcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRhdGVkOyB9
CiAgICAgICAgIHZvaWQgc2V0VmFsaWQoKSB7IG1fdmFsaWRhdGVkID0gdHJ1ZTsgfQogCisgICAg
ICAgIHN0cnVjdCBDYWNoZWRTb3VyY2VJbmZvIHt9OworICAgICAgICBjbGFzcyBTb3VyY2VJbmZv
Q2FjaGUgOiBwdWJsaWMgSGFzaE1hcDxpbnQsIENhY2hlZFNvdXJjZUluZm8qPgorICAgICAgICB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFNvdXJjZUluZm9DYWNoZSgpIDogbV9ieXRl
U2l6ZSgwKSB7fQorICAgICAgICAgICAgflNvdXJjZUluZm9DYWNoZSgpIHsgZGVsZXRlQWxsVmFs
dWVzKCp0aGlzKTsgfQorICAgICAgICAgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICAgICAg
fTsKKyAgICAgICAgdmlydHVhbCBTb3VyY2VJbmZvQ2FjaGUqIHNvdXJjZUluZm9DYWNoZSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUluZm9DYWNoZVNp
emVDaGFuZ2VkKGludCBkZWx0YSkgeyBVTlVTRURfUEFSQU0oZGVsdGEpOyB9CisKICAgICBwcml2
YXRlOgogICAgICAgICBVU3RyaW5nIG1fdXJsOwogICAgICAgICBib29sIG1fdmFsaWRhdGVkOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJl
dmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVj
a2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25z
dCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBi
b29sIENhblVzZUZ1bmN0aW9uQ2FjaGUgPSB0cnVlOwogCiAgICAgaW50IGNyZWF0ZVNvdXJjZUVs
ZW1lbnRzKCkgeyByZXR1cm4gMTsgfQogICAgIEV4cHJlc3Npb25UeXBlIG1ha2VGdW5jdGlvbkNh
bGxOb2RlKGludCwgaW50LCBpbnQsIGludCwgaW50KSB7IHJldHVybiBDYWxsRXhwcjsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gNzYwNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMS0wMS0xOCAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2FjaGUgZnVuY3Rpb24gb2Zmc2V0cyB0byBzcGVlZCB1cCBqYXZhc2Ny
aXB0IHBhcnNpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyNjIyCisgICAgICAgIAorICAgICAgICBVc2UgbWVtb3J5IGNhY2hlIHRvIHNhdmUgZnVu
Y3Rpb24gb2Zmc2V0cyBhbmQgc29tZSBvdGhlciBpbmZvLgorICAgICAgICBUaGlzIGF2b2lkcyBx
dWl0ZSBhIGJpdCBvZiB3b3JrIHdoZW4gcmVwYXJzaW5nIHRoZSBzb3VyY2UuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXI6OnNvdXJjZUluZm9DYWNoZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlcjo6c291cmNlSW5mb0NhY2hl
U2l6ZUNoYW5nZWQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0OjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0Ojpzb3VyY2VJbmZvQ2FjaGVTaXplQ2hhbmdlZCk6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FjaGVkU2NyaXB0Ojpzb3VyY2VJbmZvQ2FjaGUpOgorCiAyMDExLTAxLTE4ICBWaWN0b3Jp
YSBLaXJzdCAgPHZya0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0
aCBSdXNzZWxsLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
aW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKS5sZW5n
dGgoKTsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkU2NyaXB0LT5zY3JpcHQoKTsgfQogCisgICAgICAgIHZpcnR1YWwgSlNDOjpTb3VyY2VQ
cm92aWRlcjo6U291cmNlSW5mb0NhY2hlKiBzb3VyY2VJbmZvQ2FjaGUoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNvdXJjZUluZm9DYWNoZSgp
OworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VJbmZvQ2FjaGVTaXplQ2hh
bmdlZChpbnQgZGVsdGEpIAorICAgICAgICB7IAorICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQt
PnNvdXJjZUluZm9DYWNoZVNpemVDaGFuZ2VkKGRlbHRhKTsKKyAgICAgICAgfQorCiAgICAgcHJp
dmF0ZToKICAgICAgICAgQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIoQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCiAgICAgICAgICAgICA6IFNjcmlwdFNvdXJjZVByb3ZpZGVyKHN0cmluZ1Rv
VVN0cmluZyhjYWNoZWRTY3JpcHQtPnVybCgpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNyArMTExLDEyIEBAIHZvaWQgQ2FjaGVkU2NyaXB0OjplcnJvcihDYWNoZWRSZXNvdXJjZToK
IHZvaWQgQ2FjaGVkU2NyaXB0OjpkZXN0cm95RGVjb2RlZERhdGEoKQogewogICAgIG1fc2NyaXB0
ID0gU3RyaW5nKCk7Ci0gICAgc2V0RGVjb2RlZFNpemUoMCk7CisgICAgdW5zaWduZWQgZXh0cmFT
aXplID0gMDsKKyNpZiBVU0UoSlNDKQorICAgIC8vIEZJWE1FOiBTb3VyY2VJbmZvQ2FjaGUgc2hv
dWxkIGJlIHdpcGVkIG91dCB0b28gYnV0IG5vdCB0aGlzIGVhc2lseS4KKyAgICBleHRyYVNpemUg
PSBtX3NvdXJjZUluZm9DYWNoZS0+bV9ieXRlU2l6ZTsKKyNlbmRpZgorICAgIHNldERlY29kZWRT
aXplKGV4dHJhU2l6ZSk7CiAgICAgaWYgKCFNZW1vcnlDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNl
UHVyZ2VhYmxlT25FdmljdGlvbigpICYmIGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpKQogICAgICAg
ICBtYWtlUHVyZ2VhYmxlKHRydWUpOwogfQpAQCAtMTIxLDQgKzEyNiwxOCBAQCB2b2lkIENhY2hl
ZFNjcmlwdDo6ZGVjb2RlZERhdGFEZWxldGlvblRpCiAgICAgZGVzdHJveURlY29kZWREYXRhKCk7
CiB9CiAKKyNpZiBVU0UoSlNDKQorSlNDOjpTb3VyY2VQcm92aWRlcjo6U291cmNlSW5mb0NhY2hl
KiBDYWNoZWRTY3JpcHQ6OnNvdXJjZUluZm9DYWNoZSgpIGNvbnN0Cit7ICAgCisgICAgaWYgKCFt
X3NvdXJjZUluZm9DYWNoZSkgCisgICAgICAgIG1fc291cmNlSW5mb0NhY2hlID0gYWRvcHRQdHIo
bmV3IEpTQzo6U291cmNlUHJvdmlkZXI6OlNvdXJjZUluZm9DYWNoZSk7IAorICAgIHJldHVybiBt
X3NvdXJjZUluZm9DYWNoZS5nZXQoKTsgCit9CisKK3ZvaWQgQ2FjaGVkU2NyaXB0Ojpzb3VyY2VJ
bmZvQ2FjaGVTaXplQ2hhbmdlZChpbnQgZGVsdGEpCit7CisgICAgc2V0RGVjb2RlZFNpemUoZGVj
b2RlZFNpemUoKSArIGRlbHRhKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCShyZXZp
c2lvbiA3NjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAKKyNpZiBVU0UoSlNDKSAgCisjaW5jbHVkZSA8
cGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CkBAIC01MSw3ICs1NSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCk7Ci0KKyNpZiBVU0UoSlNDKSAgICAgICAg
CisgICAgICAgIC8vIEFsbG93cyBKU0MgdG8gY2FjaGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgc291cmNlLgorICAgICAgICBKU0M6OlNvdXJjZVByb3ZpZGVyOjpTb3VyY2VJbmZv
Q2FjaGUqIHNvdXJjZUluZm9DYWNoZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNvdXJjZUluZm9D
YWNoZVNpemVDaGFuZ2VkKGludCBkZWx0YSk7CisjZW5kaWYKICAgICBwcml2YXRlOgogICAgICAg
ICB2b2lkIGRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVyPENhY2hlZFNjcmlwdD4q
KTsKICAgICAgICAgdmlydHVhbCBQdXJnZVByaW9yaXR5IHB1cmdlUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiBQdXJnZUxhc3Q7IH0KQEAgLTU5LDYgKzY3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBTdHJpbmcgbV9zY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VE
ZWNvZGVyPiBtX2RlY29kZXI7CiAgICAgICAgIFRpbWVyPENhY2hlZFNjcmlwdD4gbV9kZWNvZGVk
RGF0YURlbGV0aW9uVGltZXI7CisjaWYgVVNFKEpTQykgICAgICAgIAorICAgICAgICBtdXRhYmxl
IE93blB0cjxKU0M6OlNvdXJjZVByb3ZpZGVyOjpTb3VyY2VJbmZvQ2FjaGU+IG1fc291cmNlSW5m
b0NhY2hlOworI2VuZGlmCiAgICAgfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79405</attachid>
            <date>2011-01-19 02:23:45 -0800</date>
            <delta_ts>2011-01-19 04:52:26 -0800</delta_ts>
            <desc>better size calculation and stylistic improvements</desc>
            <filename>function-cache-9.patch</filename>
            <type>text/plain</type>
            <size>17465</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzYxMDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDEtMTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIGZ1bmN0aW9uIG9m
ZnNldHMgdG8gc3BlZWQgdXAgamF2YXNjcmlwdCBwYXJzaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyMgorICAgICAgICAKKyAgICAgICAgVXNl
IG1lbW9yeSBjYWNoZSB0byBzYXZlIGZ1bmN0aW9uIG9mZnNldHMgYW5kIHNvbWUgb3RoZXIgaW5m
by4KKyAgICAgICAgVGhpcyBhdm9pZHMgcXVpdGUgYSBiaXQgb2Ygd29yayB3aGVuIHJlcGFyc2lu
ZyB0aGUgc291cmNlLgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAg
KiBwYXJzZXIvSlNQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6Q2FjaGVkRnVu
Y3Rpb25JbmZvOjpDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6
Q2FjaGVkRnVuY3Rpb25JbmZvOjphcHByb3hpbWF0ZUJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6
SlNQYXJzZXI6OkNhY2hlZEZ1bmN0aW9uSW5mbzo6Y2xvc2VCcmFjZVRva2VuKToKKyAgICAgICAg
KEpTQzo6SlNQYXJzZXI6OlNjb3BlOjpzYXZlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6
SlNQYXJzZXI6OlNjb3BlOjpyZXN0b3JlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNQ
YXJzZXI6OmZpbmRDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6
SlNQYXJzZXIpOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6cGFyc2VQcm9ncmFtKToKKyAgICAg
ICAgKEpTQzo6SlNQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKiBwYXJzZXIv
TGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAg
KEpTQzo6TGV4ZXI6OnNldE9mZnNldEFmdGVyQ2xvc2VCcmFjZVRva2VuKToKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJDYWNo
ZTo6U291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyQ2Fj
aGU6On5Tb3VyY2VQcm92aWRlckNhY2hlKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJD
YWNoZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlOjphZGQp
OgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlOjpnZXQpOgorICAgICAgICAoSlND
OjpTb3VyY2VQcm92aWRlcjo6Y2FjaGUpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6
Y2FjaGVTaXplQ2hhbmdlZCk6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKwog
MjAxMS0wMS0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc2MDc4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsx
MDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBDYW5Vc2VGdW5jdGlvbkNhY2hlID0gdHJ1ZTsKIAog
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShpbnQgdG9rZW4sIHN0ZDo6cGFpcjxF
eHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSos
IEJpbmFyeU9wSW5mbz4pOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9k
ZShFeHByZXNzaW9uTm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBp
bnQgZGl2b3QsIGludCBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5jcHAJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9KU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJOb2Rl
SW5mby5oIgogI2luY2x1ZGUgIkFTVEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VQcm92aWRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRo
cmVhZERhdGEuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtOTQsNiArOTUsMzkgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RyaW5nSW1wbCogbV9pZGVudDsKICAgICAgICAgYm9vbCBtX2lzTG9vcDsK
ICAgICB9OworICAgIAorICAgIHN0cnVjdCBDYWNoZWRGdW5jdGlvbkluZm8gOiBwdWJsaWMgU291
cmNlUHJvdmlkZXJDYWNoZTo6SXRlbSB7CisgICAgICAgIENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQg
Y2xvc2VCcmFjZUxpbmUsIGludCBjbG9zZUJyYWNlUG9zKQorICAgICAgICAgICAgOiBjbG9zZUJy
YWNlTGluZShjbG9zZUJyYWNlTGluZSkgCisgICAgICAgICAgICAsIGNsb3NlQnJhY2VQb3MoY2xv
c2VCcmFjZVBvcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGFwcHJv
eGltYXRlQnl0ZVNpemUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgaWRl
bnRpZmllcnMgYXJlIHVuaXF1ZWQgc3RyaW5ncyBzbyBtb3N0IGxpa2VseSB0aGVyZSBhcmUgZmV3
IG5hbWVzIHRoYXQgYWN0dWFsbHkgdXNlIGFueSBhZGRpdGlvbmFsIG1lbW9yeS4KKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZSA9
IHNpemVvZihSZWZQdHI8U3RyaW5nSW1wbD4pICsgMjsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNp
emUgPSBzaXplb2YoKnRoaXMpOworICAgICAgICAgICAgc2l6ZSArPSB1c2VkVmFyaWFibGVzLnNp
emUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXplOworICAgICAgICAgICAgc2l6ZSAr
PSB3cml0dGVuVmFyaWFibGVzLnNpemUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXpl
OworICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIH0KKyAgICAgICAgSlNUb2tlbiBj
bG9zZUJyYWNlVG9rZW4oKSBjb25zdCAKKyAgICAgICAgeworICAgICAgICAgICAgSlNUb2tlbiB0
b2tlbjsKKyAgICAgICAgICAgIHRva2VuLm1fdHlwZSA9IENMT1NFQlJBQ0U7CisgICAgICAgICAg
ICB0b2tlbi5tX2RhdGEuaW50VmFsdWUgPSBjbG9zZUJyYWNlUG9zOworICAgICAgICAgICAgdG9r
ZW4ubV9pbmZvLnN0YXJ0T2Zmc2V0ID0gY2xvc2VCcmFjZVBvczsKKyAgICAgICAgICAgIHRva2Vu
Lm1faW5mby5lbmRPZmZzZXQgPSBjbG9zZUJyYWNlUG9zICsgMTsKKyAgICAgICAgICAgIHRva2Vu
Lm1faW5mby5saW5lID0gY2xvc2VCcmFjZUxpbmU7IAorICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OworICAgICAgICB9CisKKyAgICAgICAgaW50IGNsb3NlQnJhY2VMaW5lOworICAgICAgICBpbnQg
Y2xvc2VCcmFjZVBvczsKKyAgICAgICAgYm9vbCB1c2VzRXZhbDsKKyAgICAgICAgVmVjdG9yPFJl
ZlB0cjxTdHJpbmdJbXBsPiA+IHVzZWRWYXJpYWJsZXM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8
U3RyaW5nSW1wbD4gPiB3cml0dGVuVmFyaWFibGVzOworICAgIH07CiAKICAgICB2b2lkIG5leHQo
TGV4ZXI6OkxleFR5cGUgbGV4VHlwZSA9IExleGVyOjpJZGVudGlmeVJlc2VydmVkV29yZHMpCiAg
ICAgewpAQCAtNDE4LDYgKzQ1MiwzOCBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzVmFsaWRT
dHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkU3RyaWN0TW9kZTsgfQogICAgICAg
ICBib29sIHNoYWRvd3NBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd3NBcmd1bWVu
dHM7IH0KIAorICAgICAgICB2b2lkIHNhdmVGdW5jdGlvbkluZm8oQ2FjaGVkRnVuY3Rpb25JbmZv
KiBpbmZvKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9pc0Z1bmN0aW9uKTsKKyAg
ICAgICAgICAgIGluZm8tPnVzZXNFdmFsID0gbV91c2VzRXZhbDsKKyAgICAgICAgICAgIGluZm8t
PnVzZWRWYXJpYWJsZXMucmVzZXJ2ZUNhcGFjaXR5KG1fdXNlZFZhcmlhYmxlcy5zaXplKCkpOwor
ICAgICAgICAgICAgaW5mby0+d3JpdHRlblZhcmlhYmxlcy5yZXNlcnZlQ2FwYWNpdHkobV93cml0
dGVuVmFyaWFibGVzLnNpemUoKSk7CisgICAgICAgICAgICBJZGVudGlmaWVyU2V0OjppdGVyYXRv
ciBlbmQgPSBtX3VzZWRWYXJpYWJsZXMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKElkZW50aWZp
ZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gbV91c2VkVmFyaWFibGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtX2RlY2xhcmVkVmFyaWFibGVzLmNvbnRhaW5z
KCppdCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlu
Zm8tPnVzZWRWYXJpYWJsZXMuYXBwZW5kKCppdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbmQgPSBtX3dyaXR0ZW5WYXJpYWJsZXMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKElkZW50
aWZpZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gbV93cml0dGVuVmFyaWFibGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlmIChtX2RlY2xhcmVkVmFyaWFibGVzLmNv
bnRhaW5zKCppdCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIGluZm8tPndyaXR0ZW5WYXJpYWJsZXMuYXBwZW5kKCppdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHJlc3RvcmVGdW5jdGlvbkluZm8oY29uc3QgQ2FjaGVk
RnVuY3Rpb25JbmZvKiBpbmZvKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9pc0Z1
bmN0aW9uKTsKKyAgICAgICAgICAgIG1fdXNlc0V2YWwgPSBpbmZvLT51c2VzRXZhbDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNpemUgPSBpbmZvLT51c2VkVmFyaWFibGVzLnNpemUoKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAg
ICAgbV91c2VkVmFyaWFibGVzLmFkZChpbmZvLT51c2VkVmFyaWFibGVzW2ldKTsKKyAgICAgICAg
ICAgIHNpemUgPSBpbmZvLT53cml0dGVuVmFyaWFibGVzLnNpemUoKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgbV93cml0
dGVuVmFyaWFibGVzLmFkZChpbmZvLT53cml0dGVuVmFyaWFibGVzW2ldKTsKKyAgICAgICAgfQor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAg
ICAgIGJvb2wgbV9zaGFkb3dzQXJndW1lbnRzIDogMTsKQEAgLTU0Myw2ICs2MDksMTMgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICBTY29wZVN0YWNrIG1fc2NvcGVTdGFjazsKKworICAgIGNvbnN0
IENhY2hlZEZ1bmN0aW9uSW5mbyogZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQgb3BlbkJyYWNl
UG9zKSAKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Z1bmN0aW9uQ2FjaGUgPyBzdGF0aWNfY2Fz
dDxjb25zdCBDYWNoZWRGdW5jdGlvbkluZm8qPihtX2Z1bmN0aW9uQ2FjaGUtPmdldChvcGVuQnJh
Y2VQb3MpKSA6IDA7CisgICAgfQorCisgICAgU291cmNlUHJvdmlkZXJDYWNoZSogbV9mdW5jdGlv
bkNhY2hlOwogfTsKIAogY29uc3QgY2hhcioganNQYXJzZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgSlNQYXJzZXJTdHJpY3RuZXNzIHN0
cmljdG5lc3MsIEpTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBjb25zdCBTb3VyY2VDb2RlKiBzb3Vy
Y2UpCkBAIC01NjYsNiArNjM5LDcgQEAgSlNQYXJzZXI6OkpTUGFyc2VyKExleGVyKiBsZXhlciwg
SlNHbG9iYQogICAgICwgbV9zdGF0ZW1lbnREZXB0aCgwKQogICAgICwgbV9ub25Ucml2aWFsRXhw
cmVzc2lvbkNvdW50KDApCiAgICAgLCBtX2xhc3RJZGVudGlmaWVyKDApCisgICAgLCBtX2Z1bmN0
aW9uQ2FjaGUobV9sZXhlci0+c291cmNlUHJvdmlkZXIoKS0+Y2FjaGUoKSkKIHsKICAgICBTY29w
ZVJlZiBzY29wZSA9IHB1c2hTY29wZSgpOwogICAgIGlmIChpc0Z1bmN0aW9uKQpAQCAtNTgyLDYg
KzY1Niw3IEBAIEpTUGFyc2VyOjpKU1BhcnNlcihMZXhlciogbGV4ZXIsIEpTR2xvYmEKIAogY29u
c3QgY2hhciogSlNQYXJzZXI6OnBhcnNlUHJvZ3JhbSgpCiB7CisgICAgdW5zaWduZWQgb2xkRnVu
Y3Rpb25DYWNoZVNpemUgPSBtX2Z1bmN0aW9uQ2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmJ5dGVT
aXplKCkgOiAwOwogICAgIEFTVEJ1aWxkZXIgY29udGV4dChtX2dsb2JhbERhdGEsIG1fbGV4ZXIp
OwogICAgIGlmIChtX2xleGVyLT5pc1JlcGFyc2luZygpKQogICAgICAgICBtX3N0YXRlbWVudERl
cHRoLS07CkBAIC01OTYsNiArNjcxLDEwIEBAIGNvbnN0IGNoYXIqIEpTUGFyc2VyOjpwYXJzZVBy
b2dyYW0oKQogICAgICAgICBmZWF0dXJlcyB8PSBTdHJpY3RNb2RlRmVhdHVyZTsKICAgICBpZiAo
c2NvcGUtPnNoYWRvd3NBcmd1bWVudHMoKSkKICAgICAgICAgZmVhdHVyZXMgfD0gU2hhZG93c0Fy
Z3VtZW50c0ZlYXR1cmU7CisgICAgCisgICAgdW5zaWduZWQgZnVuY3Rpb25DYWNoZVNpemUgPSBt
X2Z1bmN0aW9uQ2FjaGUgPyBtX2Z1bmN0aW9uQ2FjaGUtPmJ5dGVTaXplKCkgOiAwOworICAgIGlm
IChmdW5jdGlvbkNhY2hlU2l6ZSAhPSBvbGRGdW5jdGlvbkNhY2hlU2l6ZSkKKyAgICAgICAgbV9s
ZXhlci0+c291cmNlUHJvdmlkZXIoKS0+Y2FjaGVTaXplQ2hhbmdlZChmdW5jdGlvbkNhY2hlU2l6
ZSAtIG9sZEZ1bmN0aW9uQ2FjaGVTaXplKTsKIAogICAgIG1fZ2xvYmFsRGF0YS0+cGFyc2VyLT5k
aWRGaW5pc2hQYXJzaW5nKHNvdXJjZUVsZW1lbnRzLCBjb250ZXh0LnZhckRlY2xhcmF0aW9ucygp
LCBjb250ZXh0LmZ1bmNEZWNsYXJhdGlvbnMoKSwgZmVhdHVyZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYXN0TGluZSwgY29udGV4dC5udW1Db25zdGFu
dHMoKSwgY2FwdHVyZWRWYXJpYWJsZXMpOwpAQCAtMTIzOCw2ICsxMzE3LDIyIEBAIHRlbXBsYXRl
IDxKU1BhcnNlcjo6RnVuY3Rpb25SZXF1aXJlbWVudHMKIAogICAgIG9wZW5CcmFjZVBvcyA9IG1f
dG9rZW4ubV9kYXRhLmludFZhbHVlOwogICAgIGJvZHlTdGFydExpbmUgPSB0b2tlbkxpbmUoKTsK
KworICAgIGlmIChjb25zdCBDYWNoZWRGdW5jdGlvbkluZm8qIGNhY2hlZEluZm8gPSBUcmVlQnVp
bGRlcjo6Q2FuVXNlRnVuY3Rpb25DYWNoZSA/IGZpbmRDYWNoZWRGdW5jdGlvbkluZm8ob3BlbkJy
YWNlUG9zKSA6IDApIHsKKyAgICAgICAgLy8gSWYgd2Uga25vdyBhYm91dCB0aGlzIGZ1bmN0aW9u
IGFscmVhZHksIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCBpbmZvIGFuZCBza2lwIHRoZSBwYXJzZXIg
dG8gdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uCisgICAgICAgIGJvZHkgPSBjb250ZXh0LmNyZWF0
ZUZ1bmN0aW9uQm9keShzdHJpY3RNb2RlKCkpOworCisgICAgICAgIGZ1bmN0aW9uU2NvcGUtPnJl
c3RvcmVGdW5jdGlvbkluZm8oY2FjaGVkSW5mbyk7CisgICAgICAgIGZhaWxJZkZhbHNlKHBvcFNj
b3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0ZyZWVWYXJpYWJsZUluZm8pKTsK
KworICAgICAgICBjbG9zZUJyYWNlUG9zID0gY2FjaGVkSW5mby0+Y2xvc2VCcmFjZVBvczsKKyAg
ICAgICAgbV90b2tlbiA9IGNhY2hlZEluZm8tPmNsb3NlQnJhY2VUb2tlbigpOworICAgICAgICBt
X2xleGVyLT5zZXRPZmZzZXRBZnRlckNsb3NlQnJhY2VUb2tlbihtX3Rva2VuKTsKKworICAgICAg
ICBuZXh0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIG5leHQoKTsKIAog
ICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uQm9keShjb250ZXh0KTsKQEAgLTEyNDYsOSArMTM0MSwy
NCBAQCB0ZW1wbGF0ZSA8SlNQYXJzZXI6OkZ1bmN0aW9uUmVxdWlyZW1lbnRzCiAgICAgICAgIGZh
aWxJZlRydWUobV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKm5hbWUp
OwogICAgICAgICBmYWlsSWZUcnVlKG1fZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+ZXZhbCA9
PSAqbmFtZSk7CiAgICAgfQorICAgIGNsb3NlQnJhY2VQb3MgPSBtX3Rva2VuLm1fZGF0YS5pbnRW
YWx1ZTsKKyAgICAKKyAgICAvLyBDYWNoZSB0aGUgdG9rZW5pemVyIHN0YXRlIGFuZCB0aGUgZnVu
Y3Rpb24gc2NvcGUgdGhlIGZpcnN0IHRpbWUgdGhlIGZ1bmN0aW9uIGlzIHBhcnNlZC4KKyAgICAv
LyBBbnkgZnV0dXJlIHJlcGFyc2luZyBjYW4gdGhlbiBza2lwIHRoZSBmdW5jdGlvbi4KKyAgICBz
dGF0aWMgY29uc3QgaW50IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUgPSA2NDsKKyAgICBP
d25QdHI8Q2FjaGVkRnVuY3Rpb25JbmZvPiBuZXdJbmZvOworICAgIGludCBmdW5jdGlvbkxlbmd0
aCA9IGNsb3NlQnJhY2VQb3MgLSBvcGVuQnJhY2VQb3M7CisgICAgaWYgKFRyZWVCdWlsZGVyOjpD
YW5Vc2VGdW5jdGlvbkNhY2hlICYmIG1fZnVuY3Rpb25DYWNoZSAmJiBmdW5jdGlvbkxlbmd0aCA+
IG1pbmltdW1GdW5jdGlvbkxlbmd0aFRvQ2FjaGUpIHsKKyAgICAgICAgbmV3SW5mbyA9IGFkb3B0
UHRyKG5ldyBDYWNoZWRGdW5jdGlvbkluZm8obV90b2tlbi5tX2luZm8ubGluZSwgY2xvc2VCcmFj
ZVBvcykpOworICAgICAgICBmdW5jdGlvblNjb3BlLT5zYXZlRnVuY3Rpb25JbmZvKG5ld0luZm8u
Z2V0KCkpOworICAgIH0KKyAgICAKICAgICBmYWlsSWZGYWxzZShwb3BTY29wZShmdW5jdGlvblNj
b3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKSk7CiAgICAgbWF0Y2hPckZh
aWwoQ0xPU0VCUkFDRSk7Ci0gICAgY2xvc2VCcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmludFZh
bHVlOworCisgICAgaWYgKG5ld0luZm8pCisgICAgICAgIG1fZnVuY3Rpb25DYWNoZS0+YWRkKG9w
ZW5CcmFjZVBvcywgbmV3SW5mby5yZWxlYXNlKCksIG5ld0luZm8tPmFwcHJveGltYXRlQnl0ZVNp
emUoKSk7CisKICAgICBuZXh0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKICAg
ICAgICAgfQogCisgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlLT5wcm92aWRlcigpOyB9CisKKyAgICAgICAgdm9pZCBzZXRPZmZz
ZXRBZnRlckNsb3NlQnJhY2VUb2tlbihKU1Rva2VuIHRva2VuKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQodG9rZW4ubV90eXBlID09IENMT1NFQlJBQ0UpOworICAgICAgICAgICAgbV9s
aW5lTnVtYmVyID0gdG9rZW4ubV9pbmZvLmxpbmU7CisgICAgICAgICAgICBzZXRPZmZzZXQodG9r
ZW4ubV9pbmZvLmVuZE9mZnNldCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9jb2RlID09
IG1fY29kZUVuZCkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50ID0gLTE7CisgICAgICAgICAg
ICBtX2RlbGltaXRlZCA9IHRydWU7CisgICAgICAgICAgICBtX2xhc3RUb2tlbiA9IENMT1NFQlJB
Q0U7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0ds
b2JhbERhdGE7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJj
ZVByb3ZpZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Tb3VyY2VQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMjggQEAK
ICNkZWZpbmUgU291cmNlUHJvdmlkZXJfaAogCiAjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIFNvdXJjZVByb3ZpZGVyQ2FjaGUgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RydWN0IEl0ZW0ge307CisKKyAgICAgICAgU291cmNlUHJvdmlkZXJDYWNo
ZSgpIDogbV9jb250ZW50Qnl0ZVNpemUoMCkge30KKyAgICAgICAgflNvdXJjZVByb3ZpZGVyQ2Fj
aGUoKSB7IGRlbGV0ZUFsbFZhbHVlcyhtX21hcCk7IH0KKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50Qnl0ZVNpemUgKyBzaXplb2Yo
KnRoaXMpICsgbV9tYXAuY2FwYWNpdHkoKSAqIHNpemVvZihJdGVtKik7IH0gCisgICAgICAgIHZv
aWQgYWRkKGludCBzb3VyY2VQb3NpdGlvbiwgUGFzc093blB0cjxJdGVtPiBpdGVtLCB1bnNpZ25l
ZCBzaXplKSB7IG1fbWFwLmFkZChzb3VyY2VQb3NpdGlvbiwgaXRlbS5sZWFrUHRyKCkpOyBtX2Nv
bnRlbnRCeXRlU2l6ZSArPSBzaXplOyB9CisgICAgICAgIGNvbnN0IEl0ZW0qIGdldChpbnQgc291
cmNlUG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmdldChzb3VyY2VQb3NpdGlvbik7IH0K
KyAgICBwcml2YXRlOgorICAgICAgICBIYXNoTWFwPGludCwgSXRlbSo+IG1fbWFwOworICAgICAg
ICB1bnNpZ25lZCBtX2NvbnRlbnRCeXRlU2l6ZTsKKyAgICB9OworCiAgICAgY2xhc3MgU291cmNl
UHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTb3VyY2VQcm92aWRlcj4gewogICAgIHB1Ymxp
YzoKICAgICAgICAgU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgdXJsKQpAQCAtNTMsNiAr
NzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWxpZGF0ZWQ7IH0KICAgICAgICAgdm9pZCBzZXRWYWxpZCgpIHsgbV92YWxpZGF0
ZWQgPSB0cnVlOyB9CiAKKyAgICAgICAgdmlydHVhbCBTb3VyY2VQcm92aWRlckNhY2hlKiBjYWNo
ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGNhY2hlU2l6ZUNo
YW5nZWQoaW50IGRlbHRhKSB7IFVOVVNFRF9QQVJBTShkZWx0YSk7IH0KKwogICAgIHByaXZhdGU6
CiAgICAgICAgIFVTdHJpbmcgbV91cmw7CiAgICAgICAgIGJvb2wgbV92YWxpZGF0ZWQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNp
b24gNzYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICAKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBDcmVhdGVzQVNUID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IGJv
b2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
Q2FuVXNlRnVuY3Rpb25DYWNoZSA9IHRydWU7CiAKICAgICBpbnQgY3JlYXRlU291cmNlRWxlbWVu
dHMoKSB7IHJldHVybiAxOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5v
ZGUoaW50LCBpbnQsIGludCwgaW50LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3NjEwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTAxLTE5ICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDYWNoZSBmdW5jdGlvbiBvZmZzZXRzIHRvIHNwZWVkIHVwIGphdmFzY3JpcHQg
cGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTI2MjIKKyAgICAgICAgCisgICAgICAgIFVzZSBtZW1vcnkgY2FjaGUgdG8gc2F2ZSBmdW5jdGlv
biBvZmZzZXRzIGFuZCBzb21lIG90aGVyIGluZm8uCisgICAgICAgIFRoaXMgYXZvaWRzIHF1aXRl
IGEgYml0IG9mIHdvcmsgd2hlbiByZXBhcnNpbmcgdGhlIHNvdXJjZS4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlcjo6Y2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXI6OmNhY2hlU2l6ZUNoYW5nZWQpOgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
U2NyaXB0OjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2Ny
aXB0Ojpzb3VyY2VQcm92aWRlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlw
dDo6c291cmNlUHJvdmlkZXJDYWNoZVNpemVDaGFuZ2VkKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkU2NyaXB0Lmg6CisKIDIwMTEtMDEtMTkgIExldmkgV2VpbnRyYXViICA8bGV2aXdA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmxlbmd0aCgpOyB9CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlw
dCgpOyB9CiAKKyAgICAgICAgdmlydHVhbCBKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGUqIGNhY2hl
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5z
b3VyY2VQcm92aWRlckNhY2hlKCk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGNh
Y2hlU2l6ZUNoYW5nZWQoaW50IGRlbHRhKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5zb3VyY2VQcm92aWRlckNhY2hlU2l6ZUNoYW5nZWQoZGVsdGEpOworICAgICAg
ICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlcihD
YWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKICAgICAgICAgICAgIDogU2NyaXB0U291cmNlUHJv
dmlkZXIoc3RyaW5nVG9VU3RyaW5nKGNhY2hlZFNjcmlwdC0+dXJsKCkpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAJKHJldmlzaW9uIDc2MDEx
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIFVTRShKU0MpICAKKyNpbmNsdWRl
IDxwYXJzZXIvU291cmNlUHJvdmlkZXIuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIENhY2hlZFNjcmlwdDo6Q2FjaGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpCkBAIC0xMTEsNyArMTE1LDEyIEBAIHZvaWQgQ2FjaGVkU2NyaXB0Ojpl
cnJvcihDYWNoZWRSZXNvdXJjZToKIHZvaWQgQ2FjaGVkU2NyaXB0OjpkZXN0cm95RGVjb2RlZERh
dGEoKQogewogICAgIG1fc2NyaXB0ID0gU3RyaW5nKCk7Ci0gICAgc2V0RGVjb2RlZFNpemUoMCk7
CisgICAgdW5zaWduZWQgZXh0cmFTaXplID0gMDsKKyNpZiBVU0UoSlNDKQorICAgIC8vIEZJWE1F
OiBTb3VyY2VJbmZvQ2FjaGUgc2hvdWxkIGJlIHdpcGVkIG91dCB0b28gYnV0IG5vdCB0aGlzIGVh
c2lseS4KKyAgICBleHRyYVNpemUgPSBtX3NvdXJjZVByb3ZpZGVyQ2FjaGUgPyBtX3NvdXJjZVBy
b3ZpZGVyQ2FjaGUtPmJ5dGVTaXplKCkgOiAwOworI2VuZGlmCisgICAgc2V0RGVjb2RlZFNpemUo
ZXh0cmFTaXplKTsKICAgICBpZiAoIU1lbW9yeUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJn
ZWFibGVPbkV2aWN0aW9uKCkgJiYgaXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkpCiAgICAgICAgIG1h
a2VQdXJnZWFibGUodHJ1ZSk7CiB9CkBAIC0xMjEsNCArMTMwLDE4IEBAIHZvaWQgQ2FjaGVkU2Ny
aXB0OjpkZWNvZGVkRGF0YURlbGV0aW9uVGkKICAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKIH0K
IAorI2lmIFVTRShKU0MpCitKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGUqIENhY2hlZFNjcmlwdDo6
c291cmNlUHJvdmlkZXJDYWNoZSgpIGNvbnN0Cit7ICAgCisgICAgaWYgKCFtX3NvdXJjZVByb3Zp
ZGVyQ2FjaGUpIAorICAgICAgICBtX3NvdXJjZVByb3ZpZGVyQ2FjaGUgPSBhZG9wdFB0cihuZXcg
SlNDOjpTb3VyY2VQcm92aWRlckNhY2hlKTsgCisgICAgcmV0dXJuIG1fc291cmNlUHJvdmlkZXJD
YWNoZS5nZXQoKTsgCit9CisKK3ZvaWQgQ2FjaGVkU2NyaXB0Ojpzb3VyY2VQcm92aWRlckNhY2hl
U2l6ZUNoYW5nZWQoaW50IGRlbHRhKQoreworICAgIHNldERlY29kZWRTaXplKGRlY29kZWRTaXpl
KCkgKyBkZWx0YSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaAkocmV2aXNpb24gNzYw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDEyIEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogCisjaWYgVVNFKEpTQykKK25hbWVzcGFjZSBKU0MgeworICAg
IGNsYXNzIFNvdXJjZVByb3ZpZGVyQ2FjaGU7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CkBAIC01MSw3ICs1NywxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKCk7Ci0KKyNpZiBVU0UoSlNDKSAg
ICAgICAgCisgICAgICAgIC8vIEFsbG93cyBKU0MgdG8gY2FjaGUgYWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgc291cmNlLgorICAgICAgICBKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGUq
IHNvdXJjZVByb3ZpZGVyQ2FjaGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzb3VyY2VQcm92aWRl
ckNhY2hlU2l6ZUNoYW5nZWQoaW50IGRlbHRhKTsKKyNlbmRpZgogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQoVGltZXI8Q2FjaGVkU2NyaXB0
PiopOwogICAgICAgICB2aXJ0dWFsIFB1cmdlUHJpb3JpdHkgcHVyZ2VQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIFB1cmdlTGFzdDsgfQpAQCAtNTksNiArNjksOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFN0cmluZyBtX3NjcmlwdDsKICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJj
ZURlY29kZXI+IG1fZGVjb2RlcjsKICAgICAgICAgVGltZXI8Q2FjaGVkU2NyaXB0PiBtX2RlY29k
ZWREYXRhRGVsZXRpb25UaW1lcjsKKyNpZiBVU0UoSlNDKSAgICAgICAgCisgICAgICAgIG11dGFi
bGUgT3duUHRyPEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZT4gbV9zb3VyY2VQcm92aWRlckNhY2hl
OworI2VuZGlmCiAgICAgfTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79410</attachid>
            <date>2011-01-19 04:52:26 -0800</date>
            <delta_ts>2011-01-19 15:44:46 -0800</delta_ts>
            <desc>use shrinkToFit</desc>
            <filename>function-cache-10.patch</filename>
            <type>text/plain</type>
            <size>17386</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzYxMDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDEtMTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIGZ1bmN0aW9uIG9m
ZnNldHMgdG8gc3BlZWQgdXAgamF2YXNjcmlwdCBwYXJzaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyMgorICAgICAgICAKKyAgICAgICAgVXNl
IG1lbW9yeSBjYWNoZSB0byBzYXZlIGZ1bmN0aW9uIG9mZnNldHMgYW5kIHNvbWUgb3RoZXIgaW5m
by4KKyAgICAgICAgVGhpcyBhdm9pZHMgcXVpdGUgYSBiaXQgb2Ygd29yayB3aGVuIHJlcGFyc2lu
ZyB0aGUgc291cmNlLgorCisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAg
KiBwYXJzZXIvSlNQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6Q2FjaGVkRnVu
Y3Rpb25JbmZvOjpDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6
Q2FjaGVkRnVuY3Rpb25JbmZvOjphcHByb3hpbWF0ZUJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6
SlNQYXJzZXI6OkNhY2hlZEZ1bmN0aW9uSW5mbzo6Y2xvc2VCcmFjZVRva2VuKToKKyAgICAgICAg
KEpTQzo6SlNQYXJzZXI6OlNjb3BlOjpzYXZlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6
SlNQYXJzZXI6OlNjb3BlOjpyZXN0b3JlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNQ
YXJzZXI6OmZpbmRDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6
SlNQYXJzZXIpOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6cGFyc2VQcm9ncmFtKToKKyAgICAg
ICAgKEpTQzo6SlNQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKiBwYXJzZXIv
TGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAg
KEpTQzo6TGV4ZXI6OnNldE9mZnNldEFmdGVyQ2xvc2VCcmFjZVRva2VuKToKKyAgICAgICAgKiBw
YXJzZXIvU291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJDYWNo
ZTo6U291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6OlNvdXJjZVByb3ZpZGVyQ2Fj
aGU6On5Tb3VyY2VQcm92aWRlckNhY2hlKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXJD
YWNoZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlOjphZGQp
OgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlOjpnZXQpOgorICAgICAgICAoSlND
OjpTb3VyY2VQcm92aWRlcjo6Y2FjaGUpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6
Y2FjaGVTaXplQ2hhbmdlZCk6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKwog
MjAxMS0wMS0xOCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc2MDc4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsx
MDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBDYW5Vc2VGdW5jdGlvbkNhY2hlID0gdHJ1ZTsKIAog
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShpbnQgdG9rZW4sIHN0ZDo6cGFpcjxF
eHByZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSos
IEJpbmFyeU9wSW5mbz4pOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9k
ZShFeHByZXNzaW9uTm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBp
bnQgZGl2b3QsIGludCBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U1BhcnNlci5jcHAJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9KU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEpTQzsKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJOb2Rl
SW5mby5oIgogI2luY2x1ZGUgIkFTVEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VQcm92aWRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRo
cmVhZERhdGEuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtOTQsNiArOTUsMzkgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RyaW5nSW1wbCogbV9pZGVudDsKICAgICAgICAgYm9vbCBtX2lzTG9vcDsK
ICAgICB9OworICAgIAorICAgIHN0cnVjdCBDYWNoZWRGdW5jdGlvbkluZm8gOiBwdWJsaWMgU291
cmNlUHJvdmlkZXJDYWNoZTo6SXRlbSB7CisgICAgICAgIENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQg
Y2xvc2VCcmFjZUxpbmUsIGludCBjbG9zZUJyYWNlUG9zKQorICAgICAgICAgICAgOiBjbG9zZUJy
YWNlTGluZShjbG9zZUJyYWNlTGluZSkgCisgICAgICAgICAgICAsIGNsb3NlQnJhY2VQb3MoY2xv
c2VCcmFjZVBvcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGFwcHJv
eGltYXRlQnl0ZVNpemUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgaWRl
bnRpZmllcnMgYXJlIHVuaXF1ZWQgc3RyaW5ncyBzbyBtb3N0IGxpa2VseSB0aGVyZSBhcmUgZmV3
IG5hbWVzIHRoYXQgYWN0dWFsbHkgdXNlIGFueSBhZGRpdGlvbmFsIG1lbW9yeS4KKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZSA9
IHNpemVvZihSZWZQdHI8U3RyaW5nSW1wbD4pICsgMjsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNp
emUgPSBzaXplb2YoKnRoaXMpOworICAgICAgICAgICAgc2l6ZSArPSB1c2VkVmFyaWFibGVzLnNp
emUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXplOworICAgICAgICAgICAgc2l6ZSAr
PSB3cml0dGVuVmFyaWFibGVzLnNpemUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXpl
OworICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIH0KKyAgICAgICAgSlNUb2tlbiBj
bG9zZUJyYWNlVG9rZW4oKSBjb25zdCAKKyAgICAgICAgeworICAgICAgICAgICAgSlNUb2tlbiB0
b2tlbjsKKyAgICAgICAgICAgIHRva2VuLm1fdHlwZSA9IENMT1NFQlJBQ0U7CisgICAgICAgICAg
ICB0b2tlbi5tX2RhdGEuaW50VmFsdWUgPSBjbG9zZUJyYWNlUG9zOworICAgICAgICAgICAgdG9r
ZW4ubV9pbmZvLnN0YXJ0T2Zmc2V0ID0gY2xvc2VCcmFjZVBvczsKKyAgICAgICAgICAgIHRva2Vu
Lm1faW5mby5lbmRPZmZzZXQgPSBjbG9zZUJyYWNlUG9zICsgMTsKKyAgICAgICAgICAgIHRva2Vu
Lm1faW5mby5saW5lID0gY2xvc2VCcmFjZUxpbmU7IAorICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OworICAgICAgICB9CisKKyAgICAgICAgaW50IGNsb3NlQnJhY2VMaW5lOworICAgICAgICBpbnQg
Y2xvc2VCcmFjZVBvczsKKyAgICAgICAgYm9vbCB1c2VzRXZhbDsKKyAgICAgICAgVmVjdG9yPFJl
ZlB0cjxTdHJpbmdJbXBsPiA+IHVzZWRWYXJpYWJsZXM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8
U3RyaW5nSW1wbD4gPiB3cml0dGVuVmFyaWFibGVzOworICAgIH07CiAKICAgICB2b2lkIG5leHQo
TGV4ZXI6OkxleFR5cGUgbGV4VHlwZSA9IExleGVyOjpJZGVudGlmeVJlc2VydmVkV29yZHMpCiAg
ICAgewpAQCAtNDE3LDYgKzQ1MSwzNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHN0cmljdE1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdE1vZGU7IH0KICAgICAgICAgYm9vbCBpc1ZhbGlk
U3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0KICAgICAg
ICAgYm9vbCBzaGFkb3dzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzQXJndW1l
bnRzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVj
dG9yKGNvbnN0IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBWZWN0b3I8UmVmUHRy
PFN0cmluZ0ltcGw+ID4mIHZlY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgSWRlbnRpZmll
clNldDo6aXRlcmF0b3IgZW5kID0gY2FwdHVyZWRWYXJpYWJsZXMuZW5kKCk7CisgICAgICAgICAg
ICBmb3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gY2FwdHVyZWRWYXJpYWJsZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZGVjbGFyZWRW
YXJpYWJsZXMuY29udGFpbnMoKml0KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgdmVjdG9yLmFwcGVuZCgqaXQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNh
dmVGdW5jdGlvbkluZm8oQ2FjaGVkRnVuY3Rpb25JbmZvKiBpbmZvKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQobV9pc0Z1bmN0aW9uKTsKKyAgICAgICAgICAgIGluZm8tPnVzZXNFdmFs
ID0gbV91c2VzRXZhbDsKKyAgICAgICAgICAgIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9y
KG1fd3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxlcyk7CisgICAgICAgICAg
ICBjb3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3RvcihtX3VzZWRWYXJpYWJsZXMsIGluZm8tPnVz
ZWRWYXJpYWJsZXMpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXN0b3JlRnVuY3Rpb25J
bmZvKGNvbnN0IENhY2hlZEZ1bmN0aW9uSW5mbyogaW5mbykKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1faXNGdW5jdGlvbik7CisgICAgICAgICAgICBtX3VzZXNFdmFsID0gaW5mby0+
dXNlc0V2YWw7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5mby0+dXNlZFZhcmlhYmxl
cy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQorICAgICAgICAgICAgICAgIG1fdXNlZFZhcmlhYmxlcy5hZGQoaW5mby0+dXNlZFZhcmlhYmxl
c1tpXSk7CisgICAgICAgICAgICBzaXplID0gaW5mby0+d3JpdHRlblZhcmlhYmxlcy5zaXplKCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIG1fd3JpdHRlblZhcmlhYmxlcy5hZGQoaW5mby0+d3JpdHRlblZhcmlhYmxlc1tp
XSk7CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwpAQCAtNTQzLDYgKzYwOCwxMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFNj
b3BlU3RhY2sgbV9zY29wZVN0YWNrOworCisgICAgY29uc3QgQ2FjaGVkRnVuY3Rpb25JbmZvKiBm
aW5kQ2FjaGVkRnVuY3Rpb25JbmZvKGludCBvcGVuQnJhY2VQb3MpIAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZnVuY3Rpb25DYWNoZSA/IHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEZ1bmN0aW9u
SW5mbyo+KG1fZnVuY3Rpb25DYWNoZS0+Z2V0KG9wZW5CcmFjZVBvcykpIDogMDsKKyAgICB9CisK
KyAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBtX2Z1bmN0aW9uQ2FjaGU7CiB9OwogCiBjb25zdCBj
aGFyKiBqc1BhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QYXJhbWV0ZXJz
KiBwYXJhbWV0ZXJzLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIGNvbnN0IFNvdXJjZUNvZGUqIHNvdXJjZSkKQEAgLTU2Niw2ICs2MzgsNyBA
QCBKU1BhcnNlcjo6SlNQYXJzZXIoTGV4ZXIqIGxleGVyLCBKU0dsb2JhCiAgICAgLCBtX3N0YXRl
bWVudERlcHRoKDApCiAgICAgLCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQoMCkKICAgICAs
IG1fbGFzdElkZW50aWZpZXIoMCkKKyAgICAsIG1fZnVuY3Rpb25DYWNoZShtX2xleGVyLT5zb3Vy
Y2VQcm92aWRlcigpLT5jYWNoZSgpKQogewogICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3Bl
KCk7CiAgICAgaWYgKGlzRnVuY3Rpb24pCkBAIC01ODIsNiArNjU1LDcgQEAgSlNQYXJzZXI6OkpT
UGFyc2VyKExleGVyKiBsZXhlciwgSlNHbG9iYQogCiBjb25zdCBjaGFyKiBKU1BhcnNlcjo6cGFy
c2VQcm9ncmFtKCkKIHsKKyAgICB1bnNpZ25lZCBvbGRGdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVu
Y3Rpb25DYWNoZSA/IG1fZnVuY3Rpb25DYWNoZS0+Ynl0ZVNpemUoKSA6IDA7CiAgICAgQVNUQnVp
bGRlciBjb250ZXh0KG1fZ2xvYmFsRGF0YSwgbV9sZXhlcik7CiAgICAgaWYgKG1fbGV4ZXItPmlz
UmVwYXJzaW5nKCkpCiAgICAgICAgIG1fc3RhdGVtZW50RGVwdGgtLTsKQEAgLTU5Niw2ICs2NzAs
MTAgQEAgY29uc3QgY2hhciogSlNQYXJzZXI6OnBhcnNlUHJvZ3JhbSgpCiAgICAgICAgIGZlYXR1
cmVzIHw9IFN0cmljdE1vZGVGZWF0dXJlOwogICAgIGlmIChzY29wZS0+c2hhZG93c0FyZ3VtZW50
cygpKQogICAgICAgICBmZWF0dXJlcyB8PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKKyAgICAK
KyAgICB1bnNpZ25lZCBmdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVuY3Rpb25DYWNoZSA/IG1fZnVu
Y3Rpb25DYWNoZS0+Ynl0ZVNpemUoKSA6IDA7CisgICAgaWYgKGZ1bmN0aW9uQ2FjaGVTaXplICE9
IG9sZEZ1bmN0aW9uQ2FjaGVTaXplKQorICAgICAgICBtX2xleGVyLT5zb3VyY2VQcm92aWRlcigp
LT5jYWNoZVNpemVDaGFuZ2VkKGZ1bmN0aW9uQ2FjaGVTaXplIC0gb2xkRnVuY3Rpb25DYWNoZVNp
emUpOwogCiAgICAgbV9nbG9iYWxEYXRhLT5wYXJzZXItPmRpZEZpbmlzaFBhcnNpbmcoc291cmNl
RWxlbWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xhcmF0
aW9ucygpLCBmZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlhYmxl
cyk7CkBAIC0xMjM4LDYgKzEzMTYsMjIgQEAgdGVtcGxhdGUgPEpTUGFyc2VyOjpGdW5jdGlvblJl
cXVpcmVtZW50cwogCiAgICAgb3BlbkJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFsdWU7
CiAgICAgYm9keVN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworCisgICAgaWYgKGNvbnN0IENhY2hl
ZEZ1bmN0aW9uSW5mbyogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlvbkNh
Y2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhvcGVuQnJhY2VQb3MpIDogMCkgeworICAgICAg
ICAvLyBJZiB3ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwgd2UgY2FuIHVzZSB0
aGUgY2FjaGVkIGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5kIG9mIHRoZSBmdW5j
dGlvbi4KKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0cmljdE1v
ZGUoKSk7CisKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZ1bmN0aW9uSW5mbyhjYWNo
ZWRJbmZvKTsKKyAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwgVHJl
ZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykpOworCisgICAgICAgIGNsb3NlQnJhY2VQ
b3MgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlUG9zOworICAgICAgICBtX3Rva2VuID0gY2FjaGVk
SW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7CisgICAgICAgIG1fbGV4ZXItPnNldE9mZnNldEFmdGVy
Q2xvc2VCcmFjZVRva2VuKG1fdG9rZW4pOworCisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCiAgICAgbmV4dCgpOwogCiAgICAgYm9keSA9IHBhcnNlRnVuY3Rp
b25Cb2R5KGNvbnRleHQpOwpAQCAtMTI0Niw5ICsxMzQwLDI0IEBAIHRlbXBsYXRlIDxKU1BhcnNl
cjo6RnVuY3Rpb25SZXF1aXJlbWVudHMKICAgICAgICAgZmFpbElmVHJ1ZShtX2dsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSk7CiAgICAgICAgIGZhaWxJZlRydWUo
bV9nbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpuYW1lKTsKICAgICB9CisgICAg
Y2xvc2VCcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmludFZhbHVlOworICAgIAorICAgIC8vIENh
Y2hlIHRoZSB0b2tlbml6ZXIgc3RhdGUgYW5kIHRoZSBmdW5jdGlvbiBzY29wZSB0aGUgZmlyc3Qg
dGltZSB0aGUgZnVuY3Rpb24gaXMgcGFyc2VkLgorICAgIC8vIEFueSBmdXR1cmUgcmVwYXJzaW5n
IGNhbiB0aGVuIHNraXAgdGhlIGZ1bmN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bUZ1bmN0aW9uTGVuZ3RoVG9DYWNoZSA9IDY0OworICAgIE93blB0cjxDYWNoZWRGdW5jdGlvbklu
Zm8+IG5ld0luZm87CisgICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gY2xvc2VCcmFjZVBvcyAtIG9w
ZW5CcmFjZVBvczsKKyAgICBpZiAoVHJlZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUgJiYg
bV9mdW5jdGlvbkNhY2hlICYmIGZ1bmN0aW9uTGVuZ3RoID4gbWluaW11bUZ1bmN0aW9uTGVuZ3Ro
VG9DYWNoZSkgeworICAgICAgICBuZXdJbmZvID0gYWRvcHRQdHIobmV3IENhY2hlZEZ1bmN0aW9u
SW5mbyhtX3Rva2VuLm1faW5mby5saW5lLCBjbG9zZUJyYWNlUG9zKSk7CisgICAgICAgIGZ1bmN0
aW9uU2NvcGUtPnNhdmVGdW5jdGlvbkluZm8obmV3SW5mby5nZXQoKSk7CisgICAgfQorICAgIAog
ICAgIGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVk
c0ZyZWVWYXJpYWJsZUluZm8pKTsKICAgICBtYXRjaE9yRmFpbChDTE9TRUJSQUNFKTsKLSAgICBj
bG9zZUJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFsdWU7CisKKyAgICBpZiAobmV3SW5m
bykKKyAgICAgICAgbV9mdW5jdGlvbkNhY2hlLT5hZGQob3BlbkJyYWNlUG9zLCBuZXdJbmZvLnJl
bGVhc2UoKSwgbmV3SW5mby0+YXBwcm94aW1hdGVCeXRlU2l6ZSgpKTsKKwogICAgIG5leHQoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVy
LmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwogICAgICAgICB9CiAKKyAgICAgICAgU291
cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPnBy
b3ZpZGVyKCk7IH0KKworICAgICAgICB2b2lkIHNldE9mZnNldEFmdGVyQ2xvc2VCcmFjZVRva2Vu
KEpTVG9rZW4gdG9rZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlbi5tX3R5
cGUgPT0gQ0xPU0VCUkFDRSk7CisgICAgICAgICAgICBtX2xpbmVOdW1iZXIgPSB0b2tlbi5tX2lu
Zm8ubGluZTsKKyAgICAgICAgICAgIHNldE9mZnNldCh0b2tlbi5tX2luZm8uZW5kT2Zmc2V0KTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2NvZGUgPT0gbV9jb2RlRW5kKSkKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnQgPSAtMTsKKyAgICAgICAgICAgIG1fZGVsaW1pdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIG1fbGFzdFRva2VuID0gQ0xPU0VCUkFDRTsKKyAgICAgICAgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24g
NzYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwyOCBAQAogI2RlZmluZSBTb3VyY2VQcm92aWRl
cl9oCiAKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xh
c3MgU291cmNlUHJvdmlkZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBzdHJ1Y3QgSXRl
bSB7fTsKKworICAgICAgICBTb3VyY2VQcm92aWRlckNhY2hlKCkgOiBtX2NvbnRlbnRCeXRlU2l6
ZSgwKSB7fQorICAgICAgICB+U291cmNlUHJvdmlkZXJDYWNoZSgpIHsgZGVsZXRlQWxsVmFsdWVz
KG1fbWFwKTsgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRCeXRlU2l6ZSArIHNpemVvZigqdGhpcykgKyBtX21hcC5jYXBhY2l0
eSgpICogc2l6ZW9mKEl0ZW0qKTsgfSAKKyAgICAgICAgdm9pZCBhZGQoaW50IHNvdXJjZVBvc2l0
aW9uLCBQYXNzT3duUHRyPEl0ZW0+IGl0ZW0sIHVuc2lnbmVkIHNpemUpIHsgbV9tYXAuYWRkKHNv
dXJjZVBvc2l0aW9uLCBpdGVtLmxlYWtQdHIoKSk7IG1fY29udGVudEJ5dGVTaXplICs9IHNpemU7
IH0KKyAgICAgICAgY29uc3QgSXRlbSogZ2V0KGludCBzb3VyY2VQb3NpdGlvbikgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuZ2V0KHNvdXJjZVBvc2l0aW9uKTsgfQorICAgIHByaXZhdGU6CisgICAgICAg
IEhhc2hNYXA8aW50LCBJdGVtKj4gbV9tYXA7CisgICAgICAgIHVuc2lnbmVkIG1fY29udGVudEJ5
dGVTaXplOworICAgIH07CisKICAgICBjbGFzcyBTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNvdXJjZVByb3ZpZGVyPiB7CiAgICAgcHVibGljOgogICAgICAgICBTb3VyY2VQcm92
aWRlcihjb25zdCBVU3RyaW5nJiB1cmwpCkBAIC01Myw2ICs3MSw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRlZDsgfQog
ICAgICAgICB2b2lkIHNldFZhbGlkKCkgeyBtX3ZhbGlkYXRlZCA9IHRydWU7IH0KIAorICAgICAg
ICB2aXJ0dWFsIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGNhY2hlKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTaXplQ2hhbmdlZChpbnQgZGVsdGEpIHsgVU5V
U0VEX1BBUkFNKGRlbHRhKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgVVN0cmluZyBtX3Vy
bDsKICAgICAgICAgYm9vbCBtX3ZhbGlkYXRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTIsNiArMTEyLDcgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBjb25zdCBib29sIENyZWF0
ZXNBU1QgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBOZWVkc0ZyZWVWYXJpYWJsZUlu
Zm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBDYW5Vc2VGdW5jdGlvbkNhY2hlID0g
dHJ1ZTsKIAogICAgIGludCBjcmVhdGVTb3VyY2VFbGVtZW50cygpIHsgcmV0dXJuIDE7IH0KICAg
ICBFeHByZXNzaW9uVHlwZSBtYWtlRnVuY3Rpb25DYWxsTm9kZShpbnQsIGludCwgaW50LCBpbnQs
IGludCkgeyByZXR1cm4gQ2FsbEV4cHI7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTA3
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMTEtMDEtMTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIGZ1bmN0
aW9uIG9mZnNldHMgdG8gc3BlZWQgdXAgamF2YXNjcmlwdCBwYXJzaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyMgorICAgICAgICAKKyAgICAg
ICAgVXNlIG1lbW9yeSBjYWNoZSB0byBzYXZlIGZ1bmN0aW9uIG9mZnNldHMgYW5kIHNvbWUgb3Ro
ZXIgaW5mby4KKyAgICAgICAgVGhpcyBhdm9pZHMgcXVpdGUgYSBiaXQgb2Ygd29yayB3aGVuIHJl
cGFyc2luZyB0aGUgc291cmNlLgorCisgICAgICAgICogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdFNvdXJjZVBy
b3ZpZGVyOjpjYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlcjo6Y2FjaGVTaXplQ2hhbmdlZCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFNj
cmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OnNvdXJjZVByb3ZpZGVyQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0Ojpzb3VyY2VQcm92aWRlckNhY2hl
U2l6ZUNoYW5nZWQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaDoKKwog
MjAxMS0wMS0xOSAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkocmV2aXNpb24g
NzYwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlw
dC0+c2NyaXB0KCkubGVuZ3RoKCk7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KCk7IH0KIAorICAgICAgICB2aXJ0
dWFsIEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZSogY2FjaGUoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNvdXJjZVByb3ZpZGVyQ2FjaGUoKTsK
KyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTaXplQ2hhbmdlZChpbnQgZGVs
dGEpIAorICAgICAgICB7IAorICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPnNvdXJjZVByb3Zp
ZGVyQ2FjaGVTaXplQ2hhbmdlZChkZWx0YSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIENhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyKENhY2hlZFNjcmlwdCogY2FjaGVkU2Ny
aXB0KQogICAgICAgICAgICAgOiBTY3JpcHRTb3VyY2VQcm92aWRlcihzdHJpbmdUb1VTdHJpbmco
Y2FjaGVkU2NyaXB0LT51cmwoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkU2NyaXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNpb24gNzYwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
MTAgQEAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCisjaWYgVVNFKEpTQykgIAorI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VQcm92aWRl
ci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FjaGVkU2NyaXB0OjpDYWNo
ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKQEAgLTEx
MSw3ICsxMTUsMTIgQEAgdm9pZCBDYWNoZWRTY3JpcHQ6OmVycm9yKENhY2hlZFJlc291cmNlOgog
dm9pZCBDYWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCiB7CiAgICAgbV9zY3JpcHQg
PSBTdHJpbmcoKTsKLSAgICBzZXREZWNvZGVkU2l6ZSgwKTsKKyAgICB1bnNpZ25lZCBleHRyYVNp
emUgPSAwOworI2lmIFVTRShKU0MpCisgICAgLy8gRklYTUU6IFNvdXJjZUluZm9DYWNoZSBzaG91
bGQgYmUgd2lwZWQgb3V0IHRvbyBidXQgbm90IHRoaXMgZWFzaWx5LgorICAgIGV4dHJhU2l6ZSA9
IG1fc291cmNlUHJvdmlkZXJDYWNoZSA/IG1fc291cmNlUHJvdmlkZXJDYWNoZS0+Ynl0ZVNpemUo
KSA6IDA7CisjZW5kaWYKKyAgICBzZXREZWNvZGVkU2l6ZShleHRyYVNpemUpOwogICAgIGlmICgh
TWVtb3J5Q2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSAmJiBp
c1NhZmVUb01ha2VQdXJnZWFibGUoKSkKICAgICAgICAgbWFrZVB1cmdlYWJsZSh0cnVlKTsKIH0K
QEAgLTEyMSw0ICsxMzAsMTggQEAgdm9pZCBDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRp
b25UaQogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwogfQogCisjaWYgVVNFKEpTQykKK0pTQzo6
U291cmNlUHJvdmlkZXJDYWNoZSogQ2FjaGVkU2NyaXB0Ojpzb3VyY2VQcm92aWRlckNhY2hlKCkg
Y29uc3QKK3sgICAKKyAgICBpZiAoIW1fc291cmNlUHJvdmlkZXJDYWNoZSkgCisgICAgICAgIG1f
c291cmNlUHJvdmlkZXJDYWNoZSA9IGFkb3B0UHRyKG5ldyBKU0M6OlNvdXJjZVByb3ZpZGVyQ2Fj
aGUpOyAKKyAgICByZXR1cm4gbV9zb3VyY2VQcm92aWRlckNhY2hlLmdldCgpOyAKK30KKwordm9p
ZCBDYWNoZWRTY3JpcHQ6OnNvdXJjZVByb3ZpZGVyQ2FjaGVTaXplQ2hhbmdlZChpbnQgZGVsdGEp
Cit7CisgICAgc2V0RGVjb2RlZFNpemUoZGVjb2RlZFNpemUoKSArIGRlbHRhKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkU2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFNjcmlwdC5oCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
MTIgQEAKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAK
KyNpZiBVU0UoSlNDKQorbmFtZXNwYWNlIEpTQyB7CisgICAgY2xhc3MgU291cmNlUHJvdmlkZXJD
YWNoZTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjsKQEAgLTUxLDcgKzU3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95RGVjb2RlZERhdGEoKTsKLQorI2lmIFVTRShKU0MpICAgICAgICAKKyAgICAgICAgLy8gQWxs
b3dzIEpTQyB0byBjYWNoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2Uu
CisgICAgICAgIEpTQzo6U291cmNlUHJvdmlkZXJDYWNoZSogc291cmNlUHJvdmlkZXJDYWNoZSgp
IGNvbnN0OworICAgICAgICB2b2lkIHNvdXJjZVByb3ZpZGVyQ2FjaGVTaXplQ2hhbmdlZChpbnQg
ZGVsdGEpOworI2VuZGlmCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBkZWNvZGVkRGF0YURl
bGV0aW9uVGltZXJGaXJlZChUaW1lcjxDYWNoZWRTY3JpcHQ+Kik7CiAgICAgICAgIHZpcnR1YWwg
UHVyZ2VQcmlvcml0eSBwdXJnZVByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gUHVyZ2VMYXN0OyB9
CkBAIC01OSw2ICs2OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1f
c2NyaXB0OwogICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwog
ICAgICAgICBUaW1lcjxDYWNoZWRTY3JpcHQ+IG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOwor
I2lmIFVTRShKU0MpICAgICAgICAKKyAgICAgICAgbXV0YWJsZSBPd25QdHI8SlNDOjpTb3VyY2VQ
cm92aWRlckNhY2hlPiBtX3NvdXJjZVByb3ZpZGVyQ2FjaGU7CisjZW5kaWYKICAgICB9OwogfQog
Cg==
</data>
<flag name="review"
          id="70823"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79506</attachid>
            <date>2011-01-19 15:44:46 -0800</date>
            <delta_ts>2011-01-19 16:00:36 -0800</delta_ts>
            <desc>fixes based on oliver&apos;s comments</desc>
            <filename>function-cache-11.patch</filename>
            <type>text/plain</type>
            <size>19332</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzYxNzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAK
KzIwMTEtMDEtMTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIGZ1bmN0aW9uIG9m
ZnNldHMgdG8gc3BlZWQgdXAgamF2YXNjcmlwdCBwYXJzaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyMgorICAgICAgICAKKyAgICAgICAgVXNl
IGNhY2hlIHRvIHNhdmUgZnVuY3Rpb24gb2Zmc2V0cyBhbmQgc29tZSBvdGhlciBpbmZvLgorICAg
ICAgICBUaGlzIGF2b2lkcyBxdWl0ZSBhIGJpdCBvZiB3b3JrIHdoZW4gcmVwYXJzaW5nIHRoZSBz
b3VyY2UuCisKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAqIHBhcnNl
ci9KU1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpDYWNoZWRGdW5jdGlvbklu
Zm86OkNhY2hlZEZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkpTUGFyc2VyOjpDYWNoZWRG
dW5jdGlvbkluZm86OmFwcHJveGltYXRlQnl0ZVNpemUpOgorICAgICAgICAoSlNDOjpKU1BhcnNl
cjo6Q2FjaGVkRnVuY3Rpb25JbmZvOjpjbG9zZUJyYWNlVG9rZW4pOgorICAgICAgICAoSlNDOjpK
U1BhcnNlcjo6U2NvcGU6OmNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKToKKyAgICAgICAg
KEpTQzo6SlNQYXJzZXI6OlNjb3BlOjpzYXZlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6
SlNQYXJzZXI6OlNjb3BlOjpyZXN0b3JlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKEpTQzo6SlNQ
YXJzZXI6OmZpbmRDYWNoZWRGdW5jdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6
SlNQYXJzZXIpOgorICAgICAgICAoSlNDOjpKU1BhcnNlcjo6cGFyc2VQcm9ncmFtKToKKyAgICAg
ICAgKEpTQzo6SlNQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbmZvKToKKyAgICAgICAgKiBwYXJzZXIv
TGV4ZXIuaDoKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNldE9mZnNldCk6CisgICAgICAgIChKU0M6
OkxleGVyOjpzZXRMaW5lTnVtYmVyKToKKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNvdXJjZVByb3Zp
ZGVyKToKKyAgICAgICAgKiBwYXJzZXIvU291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6
U291cmNlUHJvdmlkZXJDYWNoZTo6U291cmNlUHJvdmlkZXJDYWNoZSk6CisgICAgICAgIChKU0M6
OlNvdXJjZVByb3ZpZGVyQ2FjaGU6On5Tb3VyY2VQcm92aWRlckNhY2hlKToKKyAgICAgICAgKEpT
Qzo6U291cmNlUHJvdmlkZXJDYWNoZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpTb3VyY2VQ
cm92aWRlckNhY2hlOjphZGQpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlOjpn
ZXQpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6U291cmNlUHJvdmlkZXIpOgorICAg
ICAgICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6flNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKEpT
Qzo6U291cmNlUHJvdmlkZXI6OmNhY2hlKToKKyAgICAgICAgKEpTQzo6U291cmNlUHJvdmlkZXI6
Om5vdGlmeUNhY2hlU2l6ZUNoYW5nZWQpOgorICAgICAgICAoSlNDOjpTb3VyY2VQcm92aWRlcjo6
Y2FjaGVTaXplQ2hhbmdlZCk6CisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKwog
MjAxMS0wMS0xOSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IHRy
dWU7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBDYW5Vc2VGdW5jdGlvbkNhY2hlID0gdHJ1ZTsKIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBtYWtlQmluYXJ5Tm9kZShpbnQgdG9rZW4sIHN0ZDo6cGFpcjxFeHBy
ZXNzaW9uTm9kZSosIEJpbmFyeU9wSW5mbz4sIHN0ZDo6cGFpcjxFeHByZXNzaW9uTm9kZSosIEJp
bmFyeU9wSW5mbz4pOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlRnVuY3Rpb25DYWxsTm9kZShF
eHByZXNzaW9uTm9kZSogZnVuYywgQXJndW1lbnRzTm9kZSogYXJncywgaW50IHN0YXJ0LCBpbnQg
ZGl2b3QsIGludCBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9KU1Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9KU1Bh
cnNlci5jcHAJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9KU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJOb2RlSW5m
by5oIgogI2luY2x1ZGUgIkFTVEJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVh
ZERhdGEuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtOTQsNiArOTUsMzkgQEAgcHJpdmF0ZToK
ICAgICAgICAgU3RyaW5nSW1wbCogbV9pZGVudDsKICAgICAgICAgYm9vbCBtX2lzTG9vcDsKICAg
ICB9OworICAgIAorICAgIHN0cnVjdCBDYWNoZWRGdW5jdGlvbkluZm8gOiBwdWJsaWMgU291cmNl
UHJvdmlkZXJDYWNoZTo6SXRlbSB7CisgICAgICAgIENhY2hlZEZ1bmN0aW9uSW5mbyhpbnQgY2xv
c2VCcmFjZUxpbmUsIGludCBjbG9zZUJyYWNlUG9zKQorICAgICAgICAgICAgOiBjbG9zZUJyYWNl
TGluZShjbG9zZUJyYWNlTGluZSkgCisgICAgICAgICAgICAsIGNsb3NlQnJhY2VQb3MoY2xvc2VC
cmFjZVBvcykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGFwcHJveGlt
YXRlQnl0ZVNpemUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgaWRlbnRp
ZmllcnMgYXJlIHVuaXF1ZWQgc3RyaW5ncyBzbyBtb3N0IGxpa2VseSB0aGVyZSBhcmUgZmV3IG5h
bWVzIHRoYXQgYWN0dWFsbHkgdXNlIGFueSBhZGRpdGlvbmFsIG1lbW9yeS4KKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhc3N1bW1lZEF2ZXJhZ2VJZGVudGlmaWVyU2l6ZSA9IHNp
emVvZihSZWZQdHI8U3RyaW5nSW1wbD4pICsgMjsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNpemUg
PSBzaXplb2YoKnRoaXMpOworICAgICAgICAgICAgc2l6ZSArPSB1c2VkVmFyaWFibGVzLnNpemUo
KSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXplOworICAgICAgICAgICAgc2l6ZSArPSB3
cml0dGVuVmFyaWFibGVzLnNpemUoKSAqIGFzc3VtbWVkQXZlcmFnZUlkZW50aWZpZXJTaXplOwor
ICAgICAgICAgICAgcmV0dXJuIHNpemU7CisgICAgICAgIH0KKyAgICAgICAgSlNUb2tlbiBjbG9z
ZUJyYWNlVG9rZW4oKSBjb25zdCAKKyAgICAgICAgeworICAgICAgICAgICAgSlNUb2tlbiB0b2tl
bjsKKyAgICAgICAgICAgIHRva2VuLm1fdHlwZSA9IENMT1NFQlJBQ0U7CisgICAgICAgICAgICB0
b2tlbi5tX2RhdGEuaW50VmFsdWUgPSBjbG9zZUJyYWNlUG9zOworICAgICAgICAgICAgdG9rZW4u
bV9pbmZvLnN0YXJ0T2Zmc2V0ID0gY2xvc2VCcmFjZVBvczsKKyAgICAgICAgICAgIHRva2VuLm1f
aW5mby5lbmRPZmZzZXQgPSBjbG9zZUJyYWNlUG9zICsgMTsKKyAgICAgICAgICAgIHRva2VuLm1f
aW5mby5saW5lID0gY2xvc2VCcmFjZUxpbmU7IAorICAgICAgICAgICAgcmV0dXJuIHRva2VuOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IGNsb3NlQnJhY2VMaW5lOworICAgICAgICBpbnQgY2xv
c2VCcmFjZVBvczsKKyAgICAgICAgYm9vbCB1c2VzRXZhbDsKKyAgICAgICAgVmVjdG9yPFJlZlB0
cjxTdHJpbmdJbXBsPiA+IHVzZWRWYXJpYWJsZXM7CisgICAgICAgIFZlY3RvcjxSZWZQdHI8U3Ry
aW5nSW1wbD4gPiB3cml0dGVuVmFyaWFibGVzOworICAgIH07CiAKICAgICB2b2lkIG5leHQoTGV4
ZXI6OkxleFR5cGUgbGV4VHlwZSA9IExleGVyOjpJZGVudGlmeVJlc2VydmVkV29yZHMpCiAgICAg
ewpAQCAtNDE3LDYgKzQ1MSwzNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIHN0cmljdE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX3N0cmljdE1vZGU7IH0KICAgICAgICAgYm9vbCBpc1ZhbGlkU3Ry
aWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZFN0cmljdE1vZGU7IH0KICAgICAgICAg
Ym9vbCBzaGFkb3dzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkb3dzQXJndW1lbnRz
OyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9y
KGNvbnN0IElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBWZWN0b3I8UmVmUHRyPFN0
cmluZ0ltcGw+ID4mIHZlY3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgSWRlbnRpZmllclNl
dDo6aXRlcmF0b3IgZW5kID0gY2FwdHVyZWRWYXJpYWJsZXMuZW5kKCk7CisgICAgICAgICAgICBm
b3IgKElkZW50aWZpZXJTZXQ6Oml0ZXJhdG9yIGl0ID0gY2FwdHVyZWRWYXJpYWJsZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZGVjbGFyZWRWYXJp
YWJsZXMuY29udGFpbnMoKml0KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgdmVjdG9yLmFwcGVuZCgqaXQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdmVjdG9yLnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNhdmVG
dW5jdGlvbkluZm8oQ2FjaGVkRnVuY3Rpb25JbmZvKiBpbmZvKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQobV9pc0Z1bmN0aW9uKTsKKyAgICAgICAgICAgIGluZm8tPnVzZXNFdmFsID0g
bV91c2VzRXZhbDsKKyAgICAgICAgICAgIGNvcHlDYXB0dXJlZFZhcmlhYmxlc1RvVmVjdG9yKG1f
d3JpdHRlblZhcmlhYmxlcywgaW5mby0+d3JpdHRlblZhcmlhYmxlcyk7CisgICAgICAgICAgICBj
b3B5Q2FwdHVyZWRWYXJpYWJsZXNUb1ZlY3RvcihtX3VzZWRWYXJpYWJsZXMsIGluZm8tPnVzZWRW
YXJpYWJsZXMpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXN0b3JlRnVuY3Rpb25JbmZv
KGNvbnN0IENhY2hlZEZ1bmN0aW9uSW5mbyogaW5mbykKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKG1faXNGdW5jdGlvbik7CisgICAgICAgICAgICBtX3VzZXNFdmFsID0gaW5mby0+dXNl
c0V2YWw7CisgICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5mby0+dXNlZFZhcmlhYmxlcy5z
aXplKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICAgICAgICAgIG1fdXNlZFZhcmlhYmxlcy5hZGQoaW5mby0+dXNlZFZhcmlhYmxlc1tp
XSk7CisgICAgICAgICAgICBzaXplID0gaW5mby0+d3JpdHRlblZhcmlhYmxlcy5zaXplKCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAg
ICAgICAgIG1fd3JpdHRlblZhcmlhYmxlcy5hZGQoaW5mby0+d3JpdHRlblZhcmlhYmxlc1tpXSk7
CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9i
YWxEYXRhOwpAQCAtNTQzLDYgKzYwOCwxMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFNjb3Bl
U3RhY2sgbV9zY29wZVN0YWNrOworCisgICAgY29uc3QgQ2FjaGVkRnVuY3Rpb25JbmZvKiBmaW5k
Q2FjaGVkRnVuY3Rpb25JbmZvKGludCBvcGVuQnJhY2VQb3MpIAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZnVuY3Rpb25DYWNoZSA/IHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEZ1bmN0aW9uSW5m
byo+KG1fZnVuY3Rpb25DYWNoZS0+Z2V0KG9wZW5CcmFjZVBvcykpIDogMDsKKyAgICB9CisKKyAg
ICBTb3VyY2VQcm92aWRlckNhY2hlKiBtX2Z1bmN0aW9uQ2FjaGU7CiB9OwogCiBjb25zdCBjaGFy
KiBqc1BhcnNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgSlNQYXJzZXJNb2RlIHBh
cnNlck1vZGUsIGNvbnN0IFNvdXJjZUNvZGUqIHNvdXJjZSkKQEAgLTU2Niw2ICs2MzgsNyBAQCBK
U1BhcnNlcjo6SlNQYXJzZXIoTGV4ZXIqIGxleGVyLCBKU0dsb2JhCiAgICAgLCBtX3N0YXRlbWVu
dERlcHRoKDApCiAgICAgLCBtX25vblRyaXZpYWxFeHByZXNzaW9uQ291bnQoMCkKICAgICAsIG1f
bGFzdElkZW50aWZpZXIoMCkKKyAgICAsIG1fZnVuY3Rpb25DYWNoZShtX2xleGVyLT5zb3VyY2VQ
cm92aWRlcigpLT5jYWNoZSgpKQogewogICAgIFNjb3BlUmVmIHNjb3BlID0gcHVzaFNjb3BlKCk7
CiAgICAgaWYgKGlzRnVuY3Rpb24pCkBAIC01ODIsNiArNjU1LDcgQEAgSlNQYXJzZXI6OkpTUGFy
c2VyKExleGVyKiBsZXhlciwgSlNHbG9iYQogCiBjb25zdCBjaGFyKiBKU1BhcnNlcjo6cGFyc2VQ
cm9ncmFtKCkKIHsKKyAgICB1bnNpZ25lZCBvbGRGdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVuY3Rp
b25DYWNoZSA/IG1fZnVuY3Rpb25DYWNoZS0+Ynl0ZVNpemUoKSA6IDA7CiAgICAgQVNUQnVpbGRl
ciBjb250ZXh0KG1fZ2xvYmFsRGF0YSwgbV9sZXhlcik7CiAgICAgaWYgKG1fbGV4ZXItPmlzUmVw
YXJzaW5nKCkpCiAgICAgICAgIG1fc3RhdGVtZW50RGVwdGgtLTsKQEAgLTU5Niw2ICs2NzAsMTAg
QEAgY29uc3QgY2hhciogSlNQYXJzZXI6OnBhcnNlUHJvZ3JhbSgpCiAgICAgICAgIGZlYXR1cmVz
IHw9IFN0cmljdE1vZGVGZWF0dXJlOwogICAgIGlmIChzY29wZS0+c2hhZG93c0FyZ3VtZW50cygp
KQogICAgICAgICBmZWF0dXJlcyB8PSBTaGFkb3dzQXJndW1lbnRzRmVhdHVyZTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBmdW5jdGlvbkNhY2hlU2l6ZSA9IG1fZnVuY3Rpb25DYWNoZSA/IG1fZnVuY3Rp
b25DYWNoZS0+Ynl0ZVNpemUoKSA6IDA7CisgICAgaWYgKGZ1bmN0aW9uQ2FjaGVTaXplICE9IG9s
ZEZ1bmN0aW9uQ2FjaGVTaXplKQorICAgICAgICBtX2xleGVyLT5zb3VyY2VQcm92aWRlcigpLT5u
b3RpZnlDYWNoZVNpemVDaGFuZ2VkKGZ1bmN0aW9uQ2FjaGVTaXplIC0gb2xkRnVuY3Rpb25DYWNo
ZVNpemUpOwogCiAgICAgbV9nbG9iYWxEYXRhLT5wYXJzZXItPmRpZEZpbmlzaFBhcnNpbmcoc291
cmNlRWxlbWVudHMsIGNvbnRleHQudmFyRGVjbGFyYXRpb25zKCksIGNvbnRleHQuZnVuY0RlY2xh
cmF0aW9ucygpLCBmZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2xhc3RMaW5lLCBjb250ZXh0Lm51bUNvbnN0YW50cygpLCBjYXB0dXJlZFZhcmlh
Ymxlcyk7CkBAIC0xMjM4LDYgKzEzMTYsMjMgQEAgdGVtcGxhdGUgPEpTUGFyc2VyOjpGdW5jdGlv
blJlcXVpcmVtZW50cwogCiAgICAgb3BlbkJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFs
dWU7CiAgICAgYm9keVN0YXJ0TGluZSA9IHRva2VuTGluZSgpOworCisgICAgaWYgKGNvbnN0IENh
Y2hlZEZ1bmN0aW9uSW5mbyogY2FjaGVkSW5mbyA9IFRyZWVCdWlsZGVyOjpDYW5Vc2VGdW5jdGlv
bkNhY2hlID8gZmluZENhY2hlZEZ1bmN0aW9uSW5mbyhvcGVuQnJhY2VQb3MpIDogMCkgeworICAg
ICAgICAvLyBJZiB3ZSBrbm93IGFib3V0IHRoaXMgZnVuY3Rpb24gYWxyZWFkeSwgd2UgY2FuIHVz
ZSB0aGUgY2FjaGVkIGluZm8gYW5kIHNraXAgdGhlIHBhcnNlciB0byB0aGUgZW5kIG9mIHRoZSBm
dW5jdGlvbi4KKyAgICAgICAgYm9keSA9IGNvbnRleHQuY3JlYXRlRnVuY3Rpb25Cb2R5KHN0cmlj
dE1vZGUoKSk7CisKKyAgICAgICAgZnVuY3Rpb25TY29wZS0+cmVzdG9yZUZ1bmN0aW9uSW5mbyhj
YWNoZWRJbmZvKTsKKyAgICAgICAgZmFpbElmRmFsc2UocG9wU2NvcGUoZnVuY3Rpb25TY29wZSwg
VHJlZUJ1aWxkZXI6Ok5lZWRzRnJlZVZhcmlhYmxlSW5mbykpOworCisgICAgICAgIGNsb3NlQnJh
Y2VQb3MgPSBjYWNoZWRJbmZvLT5jbG9zZUJyYWNlUG9zOworICAgICAgICBtX3Rva2VuID0gY2Fj
aGVkSW5mby0+Y2xvc2VCcmFjZVRva2VuKCk7CisgICAgICAgIG1fbGV4ZXItPnNldE9mZnNldCht
X3Rva2VuLm1faW5mby5lbmRPZmZzZXQpOworICAgICAgICBtX2xleGVyLT5zZXRMaW5lTnVtYmVy
KG1fdG9rZW4ubV9pbmZvLmxpbmUpOworCisgICAgICAgIG5leHQoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCiAgICAgbmV4dCgpOwogCiAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25C
b2R5KGNvbnRleHQpOwpAQCAtMTI0Niw5ICsxMzQxLDI0IEBAIHRlbXBsYXRlIDxKU1BhcnNlcjo6
RnVuY3Rpb25SZXF1aXJlbWVudHMKICAgICAgICAgZmFpbElmVHJ1ZShtX2dsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cyA9PSAqbmFtZSk7CiAgICAgICAgIGZhaWxJZlRydWUobV9n
bG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICpuYW1lKTsKICAgICB9CisgICAgY2xv
c2VCcmFjZVBvcyA9IG1fdG9rZW4ubV9kYXRhLmludFZhbHVlOworICAgIAorICAgIC8vIENhY2hl
IHRoZSB0b2tlbml6ZXIgc3RhdGUgYW5kIHRoZSBmdW5jdGlvbiBzY29wZSB0aGUgZmlyc3QgdGlt
ZSB0aGUgZnVuY3Rpb24gaXMgcGFyc2VkLgorICAgIC8vIEFueSBmdXR1cmUgcmVwYXJzaW5nIGNh
biB0aGVuIHNraXAgdGhlIGZ1bmN0aW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bUZ1
bmN0aW9uTGVuZ3RoVG9DYWNoZSA9IDY0OworICAgIE93blB0cjxDYWNoZWRGdW5jdGlvbkluZm8+
IG5ld0luZm87CisgICAgaW50IGZ1bmN0aW9uTGVuZ3RoID0gY2xvc2VCcmFjZVBvcyAtIG9wZW5C
cmFjZVBvczsKKyAgICBpZiAoVHJlZUJ1aWxkZXI6OkNhblVzZUZ1bmN0aW9uQ2FjaGUgJiYgbV9m
dW5jdGlvbkNhY2hlICYmIGZ1bmN0aW9uTGVuZ3RoID4gbWluaW11bUZ1bmN0aW9uTGVuZ3RoVG9D
YWNoZSkgeworICAgICAgICBuZXdJbmZvID0gYWRvcHRQdHIobmV3IENhY2hlZEZ1bmN0aW9uSW5m
byhtX3Rva2VuLm1faW5mby5saW5lLCBjbG9zZUJyYWNlUG9zKSk7CisgICAgICAgIGZ1bmN0aW9u
U2NvcGUtPnNhdmVGdW5jdGlvbkluZm8obmV3SW5mby5nZXQoKSk7CisgICAgfQorICAgIAogICAg
IGZhaWxJZkZhbHNlKHBvcFNjb3BlKGZ1bmN0aW9uU2NvcGUsIFRyZWVCdWlsZGVyOjpOZWVkc0Zy
ZWVWYXJpYWJsZUluZm8pKTsKICAgICBtYXRjaE9yRmFpbChDTE9TRUJSQUNFKTsKLSAgICBjbG9z
ZUJyYWNlUG9zID0gbV90b2tlbi5tX2RhdGEuaW50VmFsdWU7CisKKyAgICBpZiAobmV3SW5mbykK
KyAgICAgICAgbV9mdW5jdGlvbkNhY2hlLT5hZGQob3BlbkJyYWNlUG9zLCBuZXdJbmZvLnJlbGVh
c2UoKSwgbmV3SW5mby0+YXBwcm94aW1hdGVCeXRlU2l6ZSgpKTsKKwogICAgIG5leHQoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgJ
KHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3MywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIG1fY3VycmVudCA9ICptX2NvZGU7CiAgICAgICAgICAgICBtX2J1ZmZlcjgucmVzaXpl
KDApOwogICAgICAgICAgICAgbV9idWZmZXIxNi5yZXNpemUoMCk7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkobV9jb2RlID09IG1fY29kZUVuZCkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50
ID0gLTE7CiAgICAgICAgIH0KKyAgICAgICAgdm9pZCBzZXRMaW5lTnVtYmVyKGludCBsaW5lKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2xpbmVOdW1iZXIgPSBsaW5lOworICAgICAgICB9CisK
KyAgICAgICAgU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UtPnByb3ZpZGVyKCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKU0dsb2JhbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Nv
dXJjZVByb3ZpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Tb3VyY2VQcm92aWRlci5oCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMw
LDQzIEBACiAjZGVmaW5lIFNvdXJjZVByb3ZpZGVyX2gKIAogI2luY2x1ZGUgIlVTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0cnVjdCBJdGVtIHt9OworCisgICAgICAgIFNvdXJjZVByb3Zp
ZGVyQ2FjaGUoKSA6IG1fY29udGVudEJ5dGVTaXplKDApIHt9CisgICAgICAgIH5Tb3VyY2VQcm92
aWRlckNhY2hlKCkgeyBkZWxldGVBbGxWYWx1ZXMobV9tYXApOyB9CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEJ5dGVTaXplICsg
c2l6ZW9mKCp0aGlzKSArIG1fbWFwLmNhcGFjaXR5KCkgKiBzaXplb2YoSXRlbSopOyB9IAorICAg
ICAgICB2b2lkIGFkZChpbnQgc291cmNlUG9zaXRpb24sIFBhc3NPd25QdHI8SXRlbT4gaXRlbSwg
dW5zaWduZWQgc2l6ZSkgeyBtX21hcC5hZGQoc291cmNlUG9zaXRpb24sIGl0ZW0ubGVha1B0cigp
KTsgbV9jb250ZW50Qnl0ZVNpemUgKz0gc2l6ZTsgfQorICAgICAgICBjb25zdCBJdGVtKiBnZXQo
aW50IHNvdXJjZVBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBtX21hcC5nZXQoc291cmNlUG9zaXRp
b24pOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXNoTWFwPGludCwgSXRlbSo+IG1fbWFw
OworICAgICAgICB1bnNpZ25lZCBtX2NvbnRlbnRCeXRlU2l6ZTsKKyAgICB9OworCiAgICAgY2xh
c3MgU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTb3VyY2VQcm92aWRlcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgdXJsKQor
ICAgICAgICBTb3VyY2VQcm92aWRlcihjb25zdCBVU3RyaW5nJiB1cmwsIFNvdXJjZVByb3ZpZGVy
Q2FjaGUqIGNhY2hlID0gMCkKICAgICAgICAgICAgIDogbV91cmwodXJsKQogICAgICAgICAgICAg
LCBtX3ZhbGlkYXRlZChmYWxzZSkKKyAgICAgICAgICAgICwgbV9jYWNoZShjYWNoZSA/IGNhY2hl
IDogbmV3IFNvdXJjZVByb3ZpZGVyQ2FjaGUpCisgICAgICAgICAgICAsIG1fY2FjaGVPd25lZCgh
Y2FjaGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIH5Tb3VyY2VQcm92
aWRlcigpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NhY2hlT3duZWQpCisgICAgICAg
ICAgICAgICAgZGVsZXRlIG1fY2FjaGU7CiAgICAgICAgIH0KLSAgICAgICAgdmlydHVhbCB+U291
cmNlUHJvdmlkZXIoKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgZ2V0UmFuZ2UoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgVUNoYXIq
IGRhdGEoKSBjb25zdCA9IDA7CkBAIC01Myw5ICs3OCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWxpZGF0ZWQ7IH0KICAgICAg
ICAgdm9pZCBzZXRWYWxpZCgpIHsgbV92YWxpZGF0ZWQgPSB0cnVlOyB9CiAKKyAgICAgICAgU291
cmNlUHJvdmlkZXJDYWNoZSogY2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlOyB9CisgICAg
ICAgIHZvaWQgbm90aWZ5Q2FjaGVTaXplQ2hhbmdlZChpbnQgZGVsdGEpIHsgaWYgKCFtX2NhY2hl
T3duZWQpIGNhY2hlU2l6ZUNoYW5nZWQoZGVsdGEpOyB9CisgICAgICAgIAogICAgIHByaXZhdGU6
CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWNoZVNpemVDaGFuZ2VkKGludCBkZWx0YSkgeyBVTlVT
RURfUEFSQU0oZGVsdGEpOyB9CisKICAgICAgICAgVVN0cmluZyBtX3VybDsKICAgICAgICAgYm9v
bCBtX3ZhbGlkYXRlZDsKKyAgICAgICAgU291cmNlUHJvdmlkZXJDYWNoZSogbV9jYWNoZTsKKyAg
ICAgICAgYm9vbCBtX2NhY2hlT3duZWQ7CiAgICAgfTsKIAogICAgIGNsYXNzIFVTdHJpbmdTb3Vy
Y2VQcm92aWRlciA6IHB1YmxpYyBTb3VyY2VQcm92aWRlciB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gNzYwMTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgY29uc3QgYm9v
bCBDcmVhdGVzQVNUID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFy
aWFibGVJbmZvID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgQ2FuVXNlRnVuY3Rpb25D
YWNoZSA9IHRydWU7CiAKICAgICBpbnQgY3JlYXRlU291cmNlRWxlbWVudHMoKSB7IHJldHVybiAx
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgbWFrZUZ1bmN0aW9uQ2FsbE5vZGUoaW50LCBpbnQsIGlu
dCwgaW50LCBpbnQpIHsgcmV0dXJuIENhbGxFeHByOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biA3NjE3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI1IEBACisyMDExLTAxLTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDYWNo
ZSBmdW5jdGlvbiBvZmZzZXRzIHRvIHNwZWVkIHVwIGphdmFzY3JpcHQgcGFyc2luZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI2MjIKKyAgICAgICAg
CisgICAgICAgIFVzZSBjYWNoZSB0byBzYXZlIGZ1bmN0aW9uIG9mZnNldHMgYW5kIHNvbWUgb3Ro
ZXIgaW5mby4KKyAgICAgICAgVGhpcyBhdm9pZHMgcXVpdGUgYSBiaXQgb2Ygd29yayB3aGVuIHJl
cGFyc2luZyB0aGUgc291cmNlLgorCisgICAgICAgICogYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0
U291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdFNvdXJjZVBy
b3ZpZGVyOjpjYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlcjo6Y2FjaGVTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRTY3JpcHRT
b3VyY2VQcm92aWRlcjo6Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdFNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRTb3VyY2VQcm92aWRlcjo6U2NyaXB0U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0
OjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0Ojpz
b3VyY2VQcm92aWRlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6c291
cmNlUHJvdmlkZXJDYWNoZVNpemVDaGFuZ2VkKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkU2NyaXB0Lmg6CisKIDIwMTEtMDEtMTkgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJpdGEuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJj
ZVByb3ZpZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSAr
NDksMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlwdCgpLmxlbmd0aCgpOyB9CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNjcmlw
dCgpOyB9CiAKKyAgICAgICAgdmlydHVhbCBKU0M6OlNvdXJjZVByb3ZpZGVyQ2FjaGUqIGNhY2hl
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5z
b3VyY2VQcm92aWRlckNhY2hlKCk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGNh
Y2hlU2l6ZUNoYW5nZWQoaW50IGRlbHRhKSAKKyAgICAgICAgeyAKKyAgICAgICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5zb3VyY2VQcm92aWRlckNhY2hlU2l6ZUNoYW5nZWQoZGVsdGEpOworICAgICAg
ICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlcihD
YWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKLSAgICAgICAgICAgIDogU2NyaXB0U291cmNlUHJv
dmlkZXIoc3RyaW5nVG9VU3RyaW5nKGNhY2hlZFNjcmlwdC0+dXJsKCkpKQorICAgICAgICAgICAg
OiBTY3JpcHRTb3VyY2VQcm92aWRlcihzdHJpbmdUb1VTdHJpbmcoY2FjaGVkU2NyaXB0LT51cmwo
KSksIGNhY2hlZFNjcmlwdC0+c291cmNlUHJvdmlkZXJDYWNoZSgpKQogICAgICAgICAgICAgLCBt
X2NhY2hlZFNjcmlwdChjYWNoZWRTY3JpcHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fY2Fj
aGVkU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTb3VyY2VQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgJKHJldmlzaW9uIDc2MDExKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlUHJvdmlkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBTY3JpcHRTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBKU0M6OlNvdXJjZVByb3ZpZGVyIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdFNvdXJjZVByb3ZpZGVyKGNvbnN0IEpTQzo6VVN0cmlu
ZyYgdXJsKQotICAgICAgICAgICAgOiBTb3VyY2VQcm92aWRlcih1cmwpCisgICAgICAgIFNjcmlw
dFNvdXJjZVByb3ZpZGVyKGNvbnN0IEpTQzo6VVN0cmluZyYgdXJsLCBKU0M6OlNvdXJjZVByb3Zp
ZGVyQ2FjaGUqIGNhY2hlID0gMCkKKyAgICAgICAgICAgIDogU291cmNlUHJvdmlkZXIodXJsLCBj
YWNoZSkKICAgICAgICAgewogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCShyZXZpc2lvbiA3NjAxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoSlNDKSAgCisjaW5jbHVkZSA8cGFyc2VyL1NvdXJj
ZVByb3ZpZGVyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRTY3Jp
cHQ6OkNhY2hlZFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
KQpAQCAtMTExLDcgKzExNSwxMiBAQCB2b2lkIENhY2hlZFNjcmlwdDo6ZXJyb3IoQ2FjaGVkUmVz
b3VyY2U6CiB2b2lkIENhY2hlZFNjcmlwdDo6ZGVzdHJveURlY29kZWREYXRhKCkKIHsKICAgICBt
X3NjcmlwdCA9IFN0cmluZygpOwotICAgIHNldERlY29kZWRTaXplKDApOworICAgIHVuc2lnbmVk
IGV4dHJhU2l6ZSA9IDA7CisjaWYgVVNFKEpTQykKKyAgICAvLyBGSVhNRTogU291cmNlSW5mb0Nh
Y2hlIHNob3VsZCBiZSB3aXBlZCBvdXQgdG9vIGJ1dCBub3QgdGhpcyBlYXNpbHkuCisgICAgZXh0
cmFTaXplID0gbV9zb3VyY2VQcm92aWRlckNhY2hlID8gbV9zb3VyY2VQcm92aWRlckNhY2hlLT5i
eXRlU2l6ZSgpIDogMDsKKyNlbmRpZgorICAgIHNldERlY29kZWRTaXplKGV4dHJhU2l6ZSk7CiAg
ICAgaWYgKCFNZW1vcnlDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlv
bigpICYmIGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpKQogICAgICAgICBtYWtlUHVyZ2VhYmxlKHRy
dWUpOwogfQpAQCAtMTIxLDQgKzEzMCwxOCBAQCB2b2lkIENhY2hlZFNjcmlwdDo6ZGVjb2RlZERh
dGFEZWxldGlvblRpCiAgICAgZGVzdHJveURlY29kZWREYXRhKCk7CiB9CiAKKyNpZiBVU0UoSlND
KQorSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlKiBDYWNoZWRTY3JpcHQ6OnNvdXJjZVByb3ZpZGVy
Q2FjaGUoKSBjb25zdAoreyAgIAorICAgIGlmICghbV9zb3VyY2VQcm92aWRlckNhY2hlKSAKKyAg
ICAgICAgbV9zb3VyY2VQcm92aWRlckNhY2hlID0gYWRvcHRQdHIobmV3IEpTQzo6U291cmNlUHJv
dmlkZXJDYWNoZSk7IAorICAgIHJldHVybiBtX3NvdXJjZVByb3ZpZGVyQ2FjaGUuZ2V0KCk7IAor
fQorCit2b2lkIENhY2hlZFNjcmlwdDo6c291cmNlUHJvdmlkZXJDYWNoZVNpemVDaGFuZ2VkKGlu
dCBkZWx0YSkKK3sKKyAgICBzZXREZWNvZGVkU2l6ZShkZWNvZGVkU2l6ZSgpICsgZGVsdGEpOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU2NyaXB0LmgJKHJldmlzaW9uIDc2MDExKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSwxMiBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKIAorI2lmIFVTRShKU0MpCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBTb3VyY2VQ
cm92aWRlckNhY2hlOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwpAQCAtNTEsNyArNTcsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotCisjaWYgVVNFKEpTQykgICAgICAgIAorICAgICAg
ICAvLyBBbGxvd3MgSlNDIHRvIGNhY2hlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IHNvdXJjZS4KKyAgICAgICAgSlNDOjpTb3VyY2VQcm92aWRlckNhY2hlKiBzb3VyY2VQcm92aWRl
ckNhY2hlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc291cmNlUHJvdmlkZXJDYWNoZVNpemVDaGFu
Z2VkKGludCBkZWx0YSk7CisjZW5kaWYKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGRlY29k
ZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVyPENhY2hlZFNjcmlwdD4qKTsKICAgICAgICAg
dmlydHVhbCBQdXJnZVByaW9yaXR5IHB1cmdlUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBQdXJn
ZUxhc3Q7IH0KQEAgLTU5LDYgKzY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBT
dHJpbmcgbV9zY3JpcHQ7CiAgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2Rl
Y29kZXI7CiAgICAgICAgIFRpbWVyPENhY2hlZFNjcmlwdD4gbV9kZWNvZGVkRGF0YURlbGV0aW9u
VGltZXI7CisjaWYgVVNFKEpTQykgICAgICAgIAorICAgICAgICBtdXRhYmxlIE93blB0cjxKU0M6
OlNvdXJjZVByb3ZpZGVyQ2FjaGU+IG1fc291cmNlUHJvdmlkZXJDYWNoZTsKKyNlbmRpZgogICAg
IH07CiB9CiAK
</data>
<flag name="review"
          id="70917"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>