<?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>34843</bug_id>
          
          <creation_ts>2010-02-11 08:08:36 -0800</creation_ts>
          <short_desc>[Qt] QtScript should provide QScriptString</short_desc>
          <delta_ts>2010-03-02 13:20:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://qt.nokia.com/doc/4.6/qscriptstring.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31863</blocked>
    
    <blocked>34850</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>189687</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-11 08:08:36 -0800</bug_when>
    <thetext>The QtScript should provide a class which could be used as a handler to &quot;interned&quot; strings in a QScriptEngine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189688</commentid>
    <comment_count>1</comment_count>
      <attachid>48563</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-11 08:11:40 -0800</bug_when>
    <thetext>Created attachment 48563
Fix v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189689</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-11 08:14:43 -0800</bug_when>
    <thetext>Attachment 48563 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/QtScript.pro&quot;: this file is exempt from the style guide.
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:23:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:24:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.cpp&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.cpp&quot;: this file is exempt from the style guide.
Total errors found: 2


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190427</commentid>
    <comment_count>3</comment_count>
      <attachid>48563</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-15 04:14:50 -0800</bug_when>
    <thetext>Comment on attachment 48563
Fix v1


&gt; +bool QScriptString::operator==(const QScriptString&amp; other) const
&gt; +{
&gt; +    return d_ptr == other.d_ptr ? true : *d_ptr == *(other.d_ptr);

I personally find it easier to read the following:

    return d_ptr == other.d_ptr || *d_ptr == *other.d_ptr;


&gt; +class QScriptStringPrivate : public QSharedData {
&gt; +public:
&gt; +    inline QScriptStringPrivate();
&gt; +    inline QScriptStringPrivate(const QString&amp; qtstring);
&gt; +    inline ~QScriptStringPrivate();
&gt; +
&gt; +    static inline QScriptString get(QScriptStringPrivate* d);
&gt; +    static inline QScriptStringPtr get(const QScriptString&amp; p);
&gt; +
&gt; +    inline bool isValid() const;
&gt; +
&gt; +    inline bool operator==(const QScriptStringPrivate&amp; other) const;
&gt; +    inline bool operator!=(const QScriptStringPrivate&amp; other) const;
&gt; +
&gt; +    inline quint32 toArrayIndex(bool* ok = 0) const;
&gt; +
&gt; +    inline QString toString() const;
&gt; +
&gt; +    inline quint64 id() const;
&gt; +
&gt; +private:
&gt; +    JSStringRef m_jsstring;
&gt; +    QString m_qtstring;
&gt; +};

I don&apos;t think we should store a QString here.

If the goal is to speed up toArrayIndex(), then I suggest to either add the functionality to the C API or by implementing it on top without the expensive conversion by for example using JSStringGetCharactersPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190661</commentid>
    <comment_count>4</comment_count>
      <attachid>48803</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-16 04:02:54 -0800</bug_when>
    <thetext>Created attachment 48803
Fix v2

(In reply to comment #3)
&gt; (From update of attachment 48563 [details])
&gt; 
&gt; &gt; +bool QScriptString::operator==(const QScriptString&amp; other) const
&gt; &gt; +{
&gt; &gt; +    return d_ptr == other.d_ptr ? true : *d_ptr == *(other.d_ptr);
&gt; 
&gt; I personally find it easier to read the following:
&gt; 
&gt;     return d_ptr == other.d_ptr || *d_ptr == *other.d_ptr;
Fixed (in both; == and != operators).

&gt; &gt; +class QScriptStringPrivate : public QSharedData {
&gt; &gt; (...)
&gt; &gt; +    JSStringRef m_jsstring;
&gt; &gt; +    QString m_qtstring;
&gt; &gt; +};
&gt; 
&gt; I don&apos;t think we should store a QString here.
&gt; 
&gt; If the goal is to speed up toArrayIndex(), then I suggest to either add the
&gt; functionality to the C API or by implementing it on top without the expensive
&gt; conversion by for example using JSStringGetCharactersPtr.
I replaced the QString by a quint32. In this implementation conversion is needed only once. It is not possible to avoid it without JSC C API changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190662</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-16 04:07:17 -0800</bug_when>
    <thetext>Attachment 48803 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring &quot;JavaScriptCore/qt/api/qscriptconverter_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/QtScript.pro&quot;: this file is exempt from the style guide.
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:23:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:24:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.cpp&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.cpp&quot;: this file is exempt from the style guide.
Total errors found: 2


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191863</commentid>
    <comment_count>6</comment_count>
      <attachid>49065</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-19 04:13:56 -0800</bug_when>
    <thetext>Created attachment 49065
Fix v3

Export macro was added.
toArrayIndex() caching was removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191864</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-19 04:18:46 -0800</bug_when>
    <thetext>Attachment 49065 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring &quot;JavaScriptCore/qt/api/qscriptconverter_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/QtScript.pro&quot;: this file is exempt from the style guide.
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:23:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:24:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.cpp&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.cpp&quot;: this file is exempt from the style guide.
Total errors found: 2 in 12 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>192759</commentid>
    <comment_count>8</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2010-02-22 19:39:35 -0800</bug_when>
    <thetext>Jedrzej, shouldn&apos;t you fix the style error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192813</commentid>
    <comment_count>9</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-23 00:42:11 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Jedrzej, shouldn&apos;t you fix the style error?

I believe that they are false positives. I registered two bugs; 35143 and 35151.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192914</commentid>
    <comment_count>10</comment_count>
      <attachid>49286</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-02-23 06:29:19 -0800</bug_when>
    <thetext>Created attachment 49286
Fix v4

Changelog:
Algorithm was simplified.
Code was moved to the QScriptConverter class (there is high probability that it will be reused from QScriptValue).
New test cases were added.
Fix conversion from float (ex. 0.3 is not a correct index array).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192916</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-23 06:31:24 -0800</bug_when>
    <thetext>Attachment 49286 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring &quot;JavaScriptCore/qt/api/qscriptconverter_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/QtScript.pro&quot;: this file is exempt from the style guide.
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:23:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
JavaScriptCore/qt/tests/qscriptstring/tst_qscriptstring.cpp:24:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.cpp&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptengine.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring_p.h&quot;: this file is exempt from the style guide.
Ignoring &quot;JavaScriptCore/qt/api/qscriptstring.cpp&quot;: this file is exempt from the style guide.
Total errors found: 2 in 12 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>195192</commentid>
    <comment_count>12</comment_count>
      <attachid>49286</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-02 13:20:28 -0800</bug_when>
    <thetext>Comment on attachment 49286
Fix v4

Clearing flags on attachment: 49286

Committed r55426: &lt;http://trac.webkit.org/changeset/55426&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195193</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-02 13:20:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48563</attachid>
            <date>2010-02-11 08:11:40 -0800</date>
            <delta_ts>2010-02-16 04:02:54 -0800</delta_ts>
            <desc>Fix v1</desc>
            <filename>qscriptstringV1.diff</filename>
            <type>text/plain</type>
            <size>21121</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiY2MxY2M4Li45Yjg2MDRjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMTAtMDItMTEgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50
cm9kdWNlIGEgbmV3IGNsYXNzOyBRU2NyaXB0U3RyaW5nLgorCisgICAgICAgIFRoZSBRU2NyaXB0
U3RyaW5nIGNsYXNzIHNob3VsZCBhY3QgYXMgYSBoYW5kbGUgdG8gImludGVybmVkIgorICAgICAg
ICBzdHJpbmdzIGluIGEgUVNjcmlwdEVuZ2luZS4KKworICAgICAgICBbUXRdIFF0U2NyaXB0IHNo
b3VsZCBwcm92aWRlIFFTY3JpcHRTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0ODQzCisKKyAgICAgICAgKiBxdC9hcGkvUXRTY3JpcHQucHJv
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmU6OnRvU3RyaW5nSGFuZGxlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdGVuZ2luZS5o
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmVQcml2YXRlOjp0b1N0cmluZ0hhbmRsZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRz
dHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OlFTY3JpcHRTdHJpbmcp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6flFTY3JpcHRTdHJpbmcpOgorICAgICAgICAoUVNj
cmlwdFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OnRvQXJyYXlJbmRl
eCk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nOjp0b1N0cmluZyk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciBRU3RyaW5nKToKKyAgICAgICAgKHFIYXNoKToKKyAgICAgICAgKiBx
dC9hcGkvcXNjcmlwdHN0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN0
cmluZ19wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OlFTY3JpcHRT
dHJpbmdQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp+UVNjcmlwdFN0
cmluZ1ByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldCk6CisgICAg
ICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0U3Ry
aW5nUHJpdmF0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9BcnJheUluZGV4
KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp0b1N0cmluZyk6CisgICAgICAgIChR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6aWQpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRzdHJp
bmcvcXNjcmlwdHN0cmluZy5wcm86IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRz
dHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0c3RfUVNjcmlwdFN0cmluZyk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
fnRzdF9RU2NyaXB0U3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjp0ZXN0KToK
KyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjpoYXNoKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0b0FycmF5SW5kZXhfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
dG9BcnJheUluZGV4KToKKyAgICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcm86CisKIDIwMTAtMDIt
MTAgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KaW5k
ZXggYzg3ZWFmNC4uMjQ2YTBiYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0
U2NyaXB0LnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCkBAIC0y
MSw2ICsyMSw3IEBAIElOQ0xVREVQQVRIICs9ICQkUFdELy4uLy4uL0FQSQogU09VUkNFUyArPSAg
JCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2lu
ZV9wLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWUuY3BwIFwKKyAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuY3BwIFwKIAogSEVBREVSUyArPSAgJCRQV0QvcXRzY3Jp
cHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXApAQCAtMjgs
NiArMjksOCBAQCBIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5oIFwKICAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHR2YWx1ZS5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1
ZV9wLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGNvbnZlcnRlcl9wLmggXAorICAgICAg
ICAgICAgJCRQV0QvcXNjcmlwdHN0cmluZy5oIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRz
dHJpbmdfcC5oIFwKIAogCiAhc3RhdGljOiBERUZJTkVTICs9IFFUX01BS0VETEwKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcAppbmRleCBmYmViOTAyLi40MTYzNGY0IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCkBAIC04OCw2ICs4OCwxOSBAQCB2
b2lkIFFTY3JpcHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKCkKIH0KIAogLyohCisgIFJldHVybnMg
YSBoYW5kbGUgdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbiBzdHJpbmcsIFxhIHN0ci4KKworICBR
U2NyaXB0U3RyaW5nIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgbG9vayB1cCBwcm9wZXJ0aWVzLCBh
bmQKKyAgY29tcGFyZSBwcm9wZXJ0eSBuYW1lcywgb2Ygc2NyaXB0IG9iamVjdHMuCisKKyAgXHNh
IFFTY3JpcHRWYWx1ZTo6cHJvcGVydHkoKQorKi8KK1FTY3JpcHRTdHJpbmcgUVNjcmlwdEVuZ2lu
ZTo6dG9TdHJpbmdIYW5kbGUoY29uc3QgUVN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBRU2Ny
aXB0U3RyaW5nUHJpdmF0ZTo6Z2V0KGRfcHRyLT50b1N0cmluZ0hhbmRsZShzdHIpKTsKK30KKwor
LyohCiAgIFJldHVybnMgYSBRU2NyaXB0VmFsdWUgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51bGwu
CiAKICAgXHNhIHVuZGVmaW5lZFZhbHVlKCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0ZW5naW5lLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2lu
ZS5oCmluZGV4IGI4YmQ1ZTYuLmJhOWE5YmMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0ZW5naW5lLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRl
bmdpbmUuaApAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBxc2NyaXB0ZW5naW5lX2gKICNkZWZp
bmUgcXNjcmlwdGVuZ2luZV9oCiAKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCiAjaW5jbHVk
ZSA8UXRDb3JlL3FvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KICNp
bmNsdWRlIDxRdENvcmUvcXN0cmluZy5oPgpAQCAtMzgsNiArMzksOCBAQCBwdWJsaWM6CiAgICAg
UVNjcmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFFTdHJpbmcmIHByb2dyYW0sIGNvbnN0IFFTdHJp
bmcmIGZpbGVOYW1lID0gUVN0cmluZygpLCBpbnQgbGluZU51bWJlciA9IDEpOwogICAgIHZvaWQg
Y29sbGVjdEdhcmJhZ2UoKTsKIAorICAgIFFTY3JpcHRTdHJpbmcgdG9TdHJpbmdIYW5kbGUoY29u
c3QgUVN0cmluZyYgc3RyKTsKKwogICAgIFFTY3JpcHRWYWx1ZSBudWxsVmFsdWUoKTsKICAgICBR
U2NyaXB0VmFsdWUgdW5kZWZpbmVkVmFsdWUoKTsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZV9wLmgKaW5kZXggOGUyN2M0Mi4uYzU4M2RhYyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVk
ZSAicXNjcmlwdGNvbnZlcnRlcl9wLmgiCiAjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5oIgorI2lu
Y2x1ZGUgInFzY3JpcHRzdHJpbmdfcC5oIgogI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNo
YXJlZGRhdGEuaD4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGljOgogICAgIGlubGluZSBKU1ZhbHVl
UmVmIG1ha2VKU1ZhbHVlKGJvb2wgbnVtYmVyKSBjb25zdDsKICAgICBpbmxpbmUgSlNWYWx1ZVJl
ZiBtYWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3Q7CiAK
KyAgICBpbmxpbmUgUVNjcmlwdFN0cmluZ1ByaXZhdGUqIHRvU3RyaW5nSGFuZGxlKGNvbnN0IFFT
dHJpbmcmIHN0cikgY29uc3Q7CisKICAgICBpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRl
eHQoKSBjb25zdDsKIHByaXZhdGU6CiAgICAgUVNjcmlwdEVuZ2luZSogcV9wdHI7CkBAIC05MCw2
ICs5MywxMSBAQCBKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1ZShR
U2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgYwogICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChtX2NvbnRleHQpOwogfQogCitRU2NyaXB0U3RyaW5nUHJpdmF0ZSogUVNjcmlw
dEVuZ2luZVByaXZhdGU6OnRvU3RyaW5nSGFuZGxlKGNvbnN0IFFTdHJpbmcmIHN0cikgY29uc3QK
K3sKKyAgICByZXR1cm4gbmV3IFFTY3JpcHRTdHJpbmdQcml2YXRlKHN0cik7Cit9CisKIEpTR2xv
YmFsQ29udGV4dFJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9x
c2NyaXB0c3RyaW5nLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3RyaW5nLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWYyYWNhCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuY3BwCkBAIC0wLDAg
KzEsMTMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nX3AuaCIK
KyNpbmNsdWRlIDxRdENvcmUvcWhhc2guaD4KKworLyohCisgIENvbnN0cnVjdHMgYW4gaW52YWxp
ZCBRU2NyaXB0U3RyaW5nLgorKi8KK1FTY3JpcHRTdHJpbmc6OlFTY3JpcHRTdHJpbmcoKQorICAg
IDogZF9wdHIobmV3IFFTY3JpcHRTdHJpbmdQcml2YXRlKCkpCit7Cit9CisvKiEKKyAgQ29uc3Ry
dWN0cyBhbiBRU2NyaXB0U3RyaW5nIGZyb20gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24KKyAgXGlu
dGVybmFsCisqLworUVNjcmlwdFN0cmluZzo6UVNjcmlwdFN0cmluZyhRU2NyaXB0U3RyaW5nUHJp
dmF0ZSogZCkKKyAgICA6IGRfcHRyKGQpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3
IFFTY3JpcHRTdHJpbmcgdGhhdCBpcyBhIGNvcHkgb2YgXGEgb3RoZXIuCisqLworUVNjcmlwdFN0
cmluZzo6UVNjcmlwdFN0cmluZyhjb25zdCBRU2NyaXB0U3RyaW5nJiBvdGhlcikKK3sKKyAgICBk
X3B0ciA9IG90aGVyLmRfcHRyOworfQorCisvKiEKKyAgRGVzdHJveXMgdGhpcyBRU2NyaXB0U3Ry
aW5nLgorKi8KK1FTY3JpcHRTdHJpbmc6On5RU2NyaXB0U3RyaW5nKCkKK3sKK30KKworLyohCisg
IEFzc2lnbnMgdGhlIFxhIG90aGVyIHZhbHVlIHRvIHRoaXMgUVNjcmlwdFN0cmluZy4KKyovCitR
U2NyaXB0U3RyaW5nJiBRU2NyaXB0U3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFN0cmlu
ZyYgb3RoZXIpCit7CisgICAgZF9wdHIgPSBvdGhlci5kX3B0cjsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0U3RyaW5nIGlzIHZhbGlk
OyBvdGhlcndpc2UKKyAgcmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRTdHJpbmc6Omlz
VmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNWYWxpZCgpOworfQorCisvKiEK
KyAgUmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFN0cmluZyBpcyBlcXVhbCB0byBcYSBvdGhl
cjsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0U3RyaW5nOjpv
cGVyYXRvcj09KGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBkX3B0ciA9PSBvdGhlci5kX3B0ciA/IHRydWUgOiAqZF9wdHIgPT0gKihvdGhlci5kX3B0cik7
Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0U3RyaW5nIGlzIG5vdCBl
cXVhbCB0byBcYSBvdGhlcjsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBR
U2NyaXB0U3RyaW5nOjpvcGVyYXRvciE9KGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiBkX3B0ciAhPSBvdGhlci5kX3B0ciA/IHRydWUgOiAqZF9wdHIgIT0g
KihvdGhlci5kX3B0cik7Cit9CisKKy8qIQorICBBdHRlbXB0cyB0byBjb252ZXJ0IHRoaXMgUVNj
cmlwdFN0cmluZyB0byBhIFF0U2NyaXB0IGFycmF5IGluZGV4LAorICBhbmQgcmV0dXJucyB0aGUg
cmVzdWx0LgorCisgIElmIGEgY29udmVyc2lvbiBlcnJvciBvY2N1cnMsICpcYXtva30gaXMgc2V0
IHRvIGZhbHNlOyBvdGhlcndpc2UKKyAgKlxhe29rfSBpcyBzZXQgdG8gdHJ1ZS4KKyovCitxdWlu
dDMyIFFTY3JpcHRTdHJpbmc6OnRvQXJyYXlJbmRleChib29sKiBvaykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZF9wdHItPnRvQXJyYXlJbmRleChvayk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBz
dHJpbmcgdGhhdCB0aGlzIFFTY3JpcHRTdHJpbmcgcmVwcmVzZW50cywgb3IgYQorICBudWxsIHN0
cmluZyBpZiB0aGlzIFFTY3JpcHRTdHJpbmcgaXMgbm90IHZhbGlkLgorCisgIFxzYSBpc1ZhbGlk
KCkKKyovCitRU3RyaW5nIFFTY3JpcHRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZF9wdHItPnRvU3RyaW5nKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBzdHJpbmcg
dGhhdCB0aGlzIFFTY3JpcHRTdHJpbmcgcmVwcmVzZW50cywgb3IgYQorICBudWxsIHN0cmluZyBp
ZiB0aGlzIFFTY3JpcHRTdHJpbmcgaXMgbm90IHZhbGlkLgorCisgIFxzYSB0b1N0cmluZygpCisq
LworUVNjcmlwdFN0cmluZzo6b3BlcmF0b3IgUVN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGRfcHRyLT50b1N0cmluZygpOworfQorCit1aW50IHFIYXNoKGNvbnN0IFFTY3JpcHRTdHJpbmcm
IGtleSkKK3sKKyAgICByZXR1cm4gcUhhc2goUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldChrZXkp
LT5pZCgpKTsKK30KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3Ry
aW5nLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhM2E2OGYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNjcmlwdHN0cmluZ19oCisjZGVmaW5lIHFzY3JpcHRz
dHJpbmdfaAorCisjaW5jbHVkZSA8UXRDb3JlL3FzaGFyZWRkYXRhLmg+CisjaW5jbHVkZSA8UXRD
b3JlL3FzdHJpbmcuaD4KKworY2xhc3MgUVNjcmlwdFN0cmluZ1ByaXZhdGU7Cit0eXBlZGVmIFFF
eHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50ZXI8UVNjcmlwdFN0cmluZ1ByaXZhdGU+IFFTY3JpcHRT
dHJpbmdQdHI7CisKK2NsYXNzIFFTY3JpcHRTdHJpbmcgeworcHVibGljOgorICAgIFFTY3JpcHRT
dHJpbmcoKTsKKyAgICBRU2NyaXB0U3RyaW5nKGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKTsK
KyAgICB+UVNjcmlwdFN0cmluZygpOworCisgICAgUVNjcmlwdFN0cmluZyYgb3BlcmF0b3I9KGNv
bnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKTsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0Owor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUVNjcmlwdFN0cmluZyYgb3RoZXIpIGNvbnN0Owor
CisgICAgcXVpbnQzMiB0b0FycmF5SW5kZXgoYm9vbCogb2sgPSAwKSBjb25zdDsKKworICAgIFFT
dHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICBvcGVyYXRvciBRU3RyaW5nKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgUVNjcmlwdFN0cmluZyhRU2NyaXB0U3RyaW5nUHJpdmF0ZSogZCk7CisK
KyAgICBRU2NyaXB0U3RyaW5nUHRyIGRfcHRyOworCisgICAgZnJpZW5kIGNsYXNzIFFTY3JpcHRT
dHJpbmdQcml2YXRlOworfTsKKwordWludCBxSGFzaChjb25zdCBRU2NyaXB0U3RyaW5nJiBrZXkp
OworCisjZW5kaWYgLy8gcXNjcmlwdHN0cmluZ19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXNjcmlwdHN0cmluZ19wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlw
dHN0cmluZ19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2NzFkNQot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3RyaW5nX3Au
aApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2NyaXB0
c3RyaW5nX3BfaAorI2RlZmluZSBxc2NyaXB0c3RyaW5nX3BfaAorCisjaW5jbHVkZSAicXNjcmlw
dGNvbnZlcnRlcl9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHN0cmluZy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEu
aD4KKworY2xhc3MgUVNjcmlwdFN0cmluZ1ByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgewor
cHVibGljOgorICAgIGlubGluZSBRU2NyaXB0U3RyaW5nUHJpdmF0ZSgpOworICAgIGlubGluZSBR
U2NyaXB0U3RyaW5nUHJpdmF0ZShjb25zdCBRU3RyaW5nJiBxdHN0cmluZyk7CisgICAgaW5saW5l
IH5RU2NyaXB0U3RyaW5nUHJpdmF0ZSgpOworCisgICAgc3RhdGljIGlubGluZSBRU2NyaXB0U3Ry
aW5nIGdldChRU2NyaXB0U3RyaW5nUHJpdmF0ZSogZCk7CisgICAgc3RhdGljIGlubGluZSBRU2Ny
aXB0U3RyaW5nUHRyIGdldChjb25zdCBRU2NyaXB0U3RyaW5nJiBwKTsKKworICAgIGlubGluZSBi
b29sIGlzVmFsaWQoKSBjb25zdDsKKworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UVNjcmlwdFN0cmluZ1ByaXZhdGUmIG90aGVyKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFFTY3JpcHRTdHJpbmdQcml2YXRlJiBvdGhlcikgY29uc3Q7CisKKyAgICBp
bmxpbmUgcXVpbnQzMiB0b0FycmF5SW5kZXgoYm9vbCogb2sgPSAwKSBjb25zdDsKKworICAgIGlu
bGluZSBRU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgcXVpbnQ2NCBpZCgp
IGNvbnN0OworCitwcml2YXRlOgorICAgIEpTU3RyaW5nUmVmIG1fanNzdHJpbmc7CisgICAgUVN0
cmluZyBtX3F0c3RyaW5nOworfTsKKworCitRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6UVNjcmlwdFN0
cmluZ1ByaXZhdGUoKQorICAgIDogbV9qc3N0cmluZygwKQore30KKworUVNjcmlwdFN0cmluZ1By
aXZhdGU6OlFTY3JpcHRTdHJpbmdQcml2YXRlKGNvbnN0IFFTdHJpbmcmIHF0c3RyaW5nKQorICAg
IDogbV9qc3N0cmluZyhKU1N0cmluZ1JldGFpbihRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhx
dHN0cmluZykpKQorICAgICwgbV9xdHN0cmluZyhxdHN0cmluZykKK3t9CisKK1FTY3JpcHRTdHJp
bmdQcml2YXRlOjp+UVNjcmlwdFN0cmluZ1ByaXZhdGUoKQoreworICAgIGlmIChpc1ZhbGlkKCkp
CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShtX2pzc3RyaW5nKTsKK30KKworUVNjcmlwdFN0cmlu
ZyBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6Z2V0KFFTY3JpcHRTdHJpbmdQcml2YXRlKiBkKQorewor
ICAgIFFfQVNTRVJUKGQpOworICAgIHJldHVybiBRU2NyaXB0U3RyaW5nKGQpOworfQorCitRU2Ny
aXB0U3RyaW5nUHRyIFFTY3JpcHRTdHJpbmdQcml2YXRlOjpnZXQoY29uc3QgUVNjcmlwdFN0cmlu
ZyYgcCkKK3sKKyAgICByZXR1cm4gcC5kX3B0cjsKK30KKworYm9vbCBRU2NyaXB0U3RyaW5nUHJp
dmF0ZTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fanNzdHJpbmc7Cit9CisKK2Jv
b2wgUVNjcmlwdFN0cmluZ1ByaXZhdGU6Om9wZXJhdG9yPT0oY29uc3QgUVNjcmlwdFN0cmluZ1By
aXZhdGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpc1ZhbGlkKCkgJiYgb3RoZXIuaXNW
YWxpZCgpICYmIEpTU3RyaW5nSXNFcXVhbChtX2pzc3RyaW5nLCBvdGhlci5tX2pzc3RyaW5nKTsK
K30KKworYm9vbCBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6b3BlcmF0b3IhPShjb25zdCBRU2NyaXB0
U3RyaW5nUHJpdmF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVmFsaWQoKSAmJiBv
dGhlci5pc1ZhbGlkKCkgJiYgIUpTU3RyaW5nSXNFcXVhbChtX2pzc3RyaW5nLCBvdGhlci5tX2pz
c3RyaW5nKTsKK30KKworcXVpbnQzMiBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9BcnJheUluZGV4
KGJvb2wqIG9rKSBjb25zdAoreworICAgIGJvb2wgb2tvayA9IHRydWU7CisgICAgdWludCByZXN1
bHQ7CisKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgb2tvayA9IGZhbHNlOworICAgIGVs
c2UgeworICAgICAgICBpZiAobV9xdHN0cmluZy5sZW5ndGgoKSA+IDEgJiYgbV9xdHN0cmluZ1sw
XSA9PSAnMCcpCisgICAgICAgICAgICBva29rID0gZmFsc2U7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgcmVzdWx0ID0gbV9xdHN0cmluZy50b1VJbnQoJm9rb2ssIDEwKTsKKyAgICAgICAg
ICAgIGlmIChxdWludDMyKDB4ZmZmZmZmZmYpIDw9IHJlc3VsdCkKKyAgICAgICAgICAgICAgICBv
a29rID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG9rKQorICAgICAgICAqb2sg
PSBva29rOworICAgIHJldHVybiBva29rID8gcmVzdWx0IDogcXVpbnQzMigweGZmZmZmZmZmKTsK
K30KKworUVN0cmluZyBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9TdHJpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3F0c3RyaW5nOworfQorCitxdWludDY0IFFTY3JpcHRTdHJpbmdQcml2YXRl
OjppZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMj4obV9q
c3N0cmluZyk7Cit9CisKKyNlbmRpZiAvLyBxc2NyaXB0c3RyaW5nX3BfaApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHN0cmluZy9xc2NyaXB0c3RyaW5nLnBybyBi
L0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvcXNjcmlwdHN0cmluZy5wcm8K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkOWI3YwotLS0gL2Rldi9udWxs
CisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvcXNjcmlwdHN0cmlu
Zy5wcm8KQEAgLTAsMCArMSw3IEBACitURU1QTEFURSA9IGFwcAorVEFSR0VUID0gdHN0X3FzY3Jp
cHRzdHJpbmcKK1FUICs9IHRlc3RsaWIKK2luY2x1ZGUoLi4vdGVzdHMucHJpKQorCitTT1VSQ0VT
ICs9IHRzdF9xc2NyaXB0c3RyaW5nLmNwcAorCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9x
dC90ZXN0cy9xc2NyaXB0c3RyaW5nL3RzdF9xc2NyaXB0c3RyaW5nLmNwcCBiL0phdmFTY3JpcHRD
b3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTc3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9K
YXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3RyaW5nL3RzdF9xc2NyaXB0c3RyaW5nLmNw
cApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiB0c3RfcXNj
cmlwdHN0cmluZ19oCisjZGVmaW5lIHRzdF9xc2NyaXB0c3RyaW5nX2gKKworI2luY2x1ZGUgInFz
Y3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCisjaW5jbHVkZSA8UXRD
b3JlL3FoYXNoLmg+CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKworY2xhc3MgdHN0X1FTY3Jp
cHRTdHJpbmcgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAg
IHRzdF9RU2NyaXB0U3RyaW5nKCk7CisgICAgdmlydHVhbCB+dHN0X1FTY3JpcHRTdHJpbmcoKTsK
KworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHRlc3QoKTsKKyAgICB2b2lkIGhhc2goKTsKKyAg
ICB2b2lkIHRvQXJyYXlJbmRleF9kYXRhKCk7CisgICAgdm9pZCB0b0FycmF5SW5kZXgoKTsKK307
CisKK3RzdF9RU2NyaXB0U3RyaW5nOjp0c3RfUVNjcmlwdFN0cmluZygpCit7Cit9CisKK3RzdF9R
U2NyaXB0U3RyaW5nOjp+dHN0X1FTY3JpcHRTdHJpbmcoKQoreworfQorCit2b2lkIHRzdF9RU2Ny
aXB0U3RyaW5nOjp0ZXN0KCkKK3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZzsKKyAgICB7CisgICAg
ICAgIFFTY3JpcHRTdHJpbmcgc3RyOworICAgICAgICBRVkVSSUZZKCFzdHIuaXNWYWxpZCgpKTsK
KyAgICAgICAgUVZFUklGWShzdHIgPT0gc3RyKTsKKyAgICAgICAgUVZFUklGWSghKHN0ciAhPSBz
dHIpKTsKKyAgICAgICAgUVZFUklGWShzdHIudG9TdHJpbmcoKS5pc051bGwoKSk7CisKKyAgICAg
ICAgUVNjcmlwdFN0cmluZyBzdHIxKHN0cik7CisgICAgICAgIFFWRVJJRlkoIXN0cjEuaXNWYWxp
ZCgpKTsKKworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0cjIgPSBzdHI7CisgICAgICAgIFFWRVJJ
RlkoIXN0cjIuaXNWYWxpZCgpKTsKKyAgICB9CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCAyOyAr
K3gpIHsKKyAgICAgICAgUVN0cmluZyBjaWFvID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiY2lhbyIp
OworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0ciA9IGVuZy50b1N0cmluZ0hhbmRsZShjaWFvKTsK
KyAgICAgICAgUVZFUklGWShzdHIuaXNWYWxpZCgpKTsKKyAgICAgICAgUVZFUklGWShzdHIgPT0g
c3RyKTsKKyAgICAgICAgUVZFUklGWSghKHN0ciAhPSBzdHIpKTsKKyAgICAgICAgUUNPTVBBUkUo
c3RyLnRvU3RyaW5nKCksIGNpYW8pOworCisgICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyMShzdHIp
OworICAgICAgICBRQ09NUEFSRShzdHIsIHN0cjEpOworCisgICAgICAgIFFTY3JpcHRTdHJpbmcg
c3RyMiA9IHN0cjsKKyAgICAgICAgUUNPTVBBUkUoc3RyLCBzdHIyKTsKKworICAgICAgICBRU2Ny
aXB0U3RyaW5nIHN0cjMgPSBlbmcudG9TdHJpbmdIYW5kbGUoY2lhbyk7CisgICAgICAgIFFWRVJJ
Rlkoc3RyMy5pc1ZhbGlkKCkpOworICAgICAgICBRQ09NUEFSRShzdHIsIHN0cjMpOworCisgICAg
ICAgIGVuZy5jb2xsZWN0R2FyYmFnZSgpOworCisgICAgICAgIFFWRVJJRlkoc3RyLmlzVmFsaWQo
KSk7CisgICAgICAgIFFDT01QQVJFKHN0ci50b1N0cmluZygpLCBjaWFvKTsKKyAgICAgICAgUVZF
UklGWShzdHIxLmlzVmFsaWQoKSk7CisgICAgICAgIFFDT01QQVJFKHN0cjEudG9TdHJpbmcoKSwg
Y2lhbyk7CisgICAgICAgIFFWRVJJRlkoc3RyMi5pc1ZhbGlkKCkpOworICAgICAgICBRQ09NUEFS
RShzdHIyLnRvU3RyaW5nKCksIGNpYW8pOworICAgICAgICBRVkVSSUZZKHN0cjMuaXNWYWxpZCgp
KTsKKyAgICAgICAgUUNPTVBBUkUoc3RyMy50b1N0cmluZygpLCBjaWFvKTsKKyAgICB9CisgICAg
eworICAgICAgICBRU2NyaXB0RW5naW5lKiBlbmcyID0gbmV3IFFTY3JpcHRFbmdpbmU7CisgICAg
ICAgIFFTdHJpbmcgb25lID0gUVN0cmluZzo6ZnJvbUxhdGluMSgib25lIik7CisgICAgICAgIFFT
dHJpbmcgdHdvID0gUVN0cmluZzo6ZnJvbUxhdGluMSgidHdvIik7CisgICAgICAgIFFTY3JpcHRT
dHJpbmcgb25lSW50ZXJuZWQgPSBlbmcyLT50b1N0cmluZ0hhbmRsZShvbmUpOworICAgICAgICBR
Q09NUEFSRShvbmVJbnRlcm5lZC50b1N0cmluZygpLCBvbmUpOworICAgICAgICBRU2NyaXB0U3Ry
aW5nIHR3b0ludGVybmVkID0gZW5nMi0+dG9TdHJpbmdIYW5kbGUodHdvKTsKKyAgICAgICAgUUNP
TVBBUkUodHdvSW50ZXJuZWQudG9TdHJpbmcoKSwgdHdvKTsKKyAgICAgICAgUVZFUklGWShvbmVJ
bnRlcm5lZCAhPSB0d29JbnRlcm5lZCk7CisgICAgICAgIFFWRVJJRlkoIShvbmVJbnRlcm5lZCA9
PSB0d29JbnRlcm5lZCkpOworCisgICAgICAgIGRlbGV0ZSBlbmcyOworICAgIH0KK30KKwordm9p
ZCB0c3RfUVNjcmlwdFN0cmluZzo6aGFzaCgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBlbmdpbmU7
CisgICAgUUhhc2g8UVNjcmlwdFN0cmluZywgaW50PiBzdHJpbmdUb0ludDsKKyAgICBRU2NyaXB0
U3RyaW5nIGZvbyA9IGVuZ2luZS50b1N0cmluZ0hhbmRsZSgiZm9vIik7CisKKyAgICBRU2NyaXB0
U3RyaW5nIGJhciA9IGVuZ2luZS50b1N0cmluZ0hhbmRsZSgiYmFyIik7CisgICAgUVZFUklGWSgh
c3RyaW5nVG9JbnQuY29udGFpbnMoZm9vKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAw
MDAwOyArK2kpCisgICAgICAgIHN0cmluZ1RvSW50Lmluc2VydChmb28sIDEyMyk7CisgICAgUUNP
TVBBUkUoc3RyaW5nVG9JbnQudmFsdWUoZm9vKSwgMTIzKTsKKyAgICBRVkVSSUZZKCFzdHJpbmdU
b0ludC5jb250YWlucyhiYXIpKTsKKyAgICBzdHJpbmdUb0ludC5pbnNlcnQoYmFyLCA0NTYpOwor
ICAgIFFDT01QQVJFKHN0cmluZ1RvSW50LnZhbHVlKGJhciksIDQ1Nik7CisgICAgUUNPTVBBUkUo
c3RyaW5nVG9JbnQudmFsdWUoZm9vKSwgMTIzKTsKK30KKwordm9pZCB0c3RfUVNjcmlwdFN0cmlu
Zzo6dG9BcnJheUluZGV4X2RhdGEoKQoreworICAgIFFUZXN0OjphZGRDb2x1bW48UVN0cmluZz4o
ImlucHV0Iik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29sPigiZXhwZWN0U3VjY2VzcyIpOwor
ICAgIFFUZXN0OjphZGRDb2x1bW48cXVpbnQzMj4oImV4cGVjdGVkSW5kZXgiKTsKKyAgICBRVGVz
dDo6bmV3Um93KCJmb28iKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJmb28iKSA8PCBmYWxzZSA8
PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coImVtcHR5IikgPDwgUVN0
cmluZzo6ZnJvbUxhdGluMSgiIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAg
ICBRVGVzdDo6bmV3Um93KCIwIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMCIpIDw8IHRydWUg
PDwgcXVpbnQzMigwKTsKKyAgICBRVGVzdDo6bmV3Um93KCIwMCIpIDw8IFFTdHJpbmc6OmZyb21M
YXRpbjEoIjAwIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6
bmV3Um93KCIxIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMSIpIDw8IHRydWUgPDwgcXVpbnQz
MigxKTsKKyAgICBRVGVzdDo6bmV3Um93KCIxMjMiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIx
MjMiKSA8PCB0cnVlIDw8IHF1aW50MzIoMTIzKTsKKyAgICBRVGVzdDo6bmV3Um93KCItMSIpIDw8
IFFTdHJpbmc6OmZyb21MYXRpbjEoIi0xIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZm
KTsKKyAgICBRVGVzdDo6bmV3Um93KCIwYSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjBhIikg
PDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCIweDEi
KSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIweDEiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZm
ZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjAxIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgi
MDEiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3co
IjQyOTQ5NjcyOTQiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCI0Mjk0OTY3Mjk0IikgPDwgdHJ1
ZSA8PCBxdWludDMyKDB4ZmZmZmZmZmUpOworICAgIFFUZXN0OjpuZXdSb3coIjQyOTQ5NjcyOTUi
KSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCI0Mjk0OTY3Mjk1IikgPDwgZmFsc2UgPDwgcXVpbnQz
MigweGZmZmZmZmZmKTsKKworfQorCit2b2lkIHRzdF9RU2NyaXB0U3RyaW5nOjp0b0FycmF5SW5k
ZXgoKQoreworICAgIFFGRVRDSChRU3RyaW5nLCBpbnB1dCk7CisgICAgUUZFVENIKGJvb2wsIGV4
cGVjdFN1Y2Nlc3MpOworICAgIFFGRVRDSChxdWludDMyLCBleHBlY3RlZEluZGV4KTsKKyAgICBR
U2NyaXB0RW5naW5lIGVuZ2luZTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IDI7ICsreCkgewor
ICAgICAgICBib29sIGlzQXJyYXlJbmRleDsKKyAgICAgICAgYm9vbCogcHRyID0gKCF4KSA/ICZp
c0FycmF5SW5kZXggOiAoYm9vbCopMDsKKyAgICAgICAgcXVpbnQzMiByZXN1bHQgPSBlbmdpbmUu
dG9TdHJpbmdIYW5kbGUoaW5wdXQpLnRvQXJyYXlJbmRleChwdHIpOworICAgICAgICBpZiAoIXgp
CisgICAgICAgICAgICBRQ09NUEFSRShpc0FycmF5SW5kZXgsIGV4cGVjdFN1Y2Nlc3MpOworICAg
ICAgICBRQ09NUEFSRShyZXN1bHQsIGV4cGVjdGVkSW5kZXgpOworICAgIH0KK30KKworUVRFU1Rf
TUFJTih0c3RfUVNjcmlwdFN0cmluZykKKyNpbmNsdWRlICJ0c3RfcXNjcmlwdHN0cmluZy5tb2Mi
CisKKyNlbmRpZiAvLyB0c3RfcXNjcmlwdHN0cmluZ19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5w
cm8KaW5kZXggNmU1ZWRiMS4uN2MzZjU5MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQv
dGVzdHMvdGVzdHMucHJvCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpA
QCAtMSwzICsxLDQgQEAKIFRFTVBMQVRFID0gc3ViZGlycwogU1VCRElSUyA9ICAgcXNjcmlwdGVu
Z2luZSBcCi0gICAgICAgICAgICBxc2NyaXB0dmFsdWUKKyAgICAgICAgICAgIHFzY3JpcHR2YWx1
ZSBcCisgICAgICAgICAgICBxc2NyaXB0c3RyaW5nCg==
</data>
<flag name="review"
          id="31268"
          type_id="1"
          status="-"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="31269"
          type_id="3"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48803</attachid>
            <date>2010-02-16 04:02:54 -0800</date>
            <delta_ts>2010-02-19 04:13:56 -0800</delta_ts>
            <desc>Fix v2</desc>
            <filename>qssv2.diff</filename>
            <type>text/plain</type>
            <size>22366</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiY2MxY2M4Li45Yjg2MDRjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMTAtMDItMTEgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50
cm9kdWNlIGEgbmV3IGNsYXNzOyBRU2NyaXB0U3RyaW5nLgorCisgICAgICAgIFRoZSBRU2NyaXB0
U3RyaW5nIGNsYXNzIHNob3VsZCBhY3QgYXMgYSBoYW5kbGUgdG8gImludGVybmVkIgorICAgICAg
ICBzdHJpbmdzIGluIGEgUVNjcmlwdEVuZ2luZS4KKworICAgICAgICBbUXRdIFF0U2NyaXB0IHNo
b3VsZCBwcm92aWRlIFFTY3JpcHRTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0ODQzCisKKyAgICAgICAgKiBxdC9hcGkvUXRTY3JpcHQucHJv
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmU6OnRvU3RyaW5nSGFuZGxlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdGVuZ2luZS5o
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmVQcml2YXRlOjp0b1N0cmluZ0hhbmRsZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRz
dHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OlFTY3JpcHRTdHJpbmcp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6flFTY3JpcHRTdHJpbmcpOgorICAgICAgICAoUVNj
cmlwdFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OnRvQXJyYXlJbmRl
eCk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nOjp0b1N0cmluZyk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciBRU3RyaW5nKToKKyAgICAgICAgKHFIYXNoKToKKyAgICAgICAgKiBx
dC9hcGkvcXNjcmlwdHN0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN0
cmluZ19wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OlFTY3JpcHRT
dHJpbmdQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp+UVNjcmlwdFN0
cmluZ1ByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldCk6CisgICAg
ICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0U3Ry
aW5nUHJpdmF0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9BcnJheUluZGV4
KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp0b1N0cmluZyk6CisgICAgICAgIChR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6aWQpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRzdHJp
bmcvcXNjcmlwdHN0cmluZy5wcm86IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRz
dHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0c3RfUVNjcmlwdFN0cmluZyk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
fnRzdF9RU2NyaXB0U3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjp0ZXN0KToK
KyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjpoYXNoKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0b0FycmF5SW5kZXhfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
dG9BcnJheUluZGV4KToKKyAgICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcm86CisKIDIwMTAtMDIt
MTAgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KaW5k
ZXggYzg3ZWFmNC4uMjQ2YTBiYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0
U2NyaXB0LnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCkBAIC0y
MSw2ICsyMSw3IEBAIElOQ0xVREVQQVRIICs9ICQkUFdELy4uLy4uL0FQSQogU09VUkNFUyArPSAg
JCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2lu
ZV9wLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWUuY3BwIFwKKyAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuY3BwIFwKIAogSEVBREVSUyArPSAgJCRQV0QvcXRzY3Jp
cHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXApAQCAtMjgs
NiArMjksOCBAQCBIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5oIFwKICAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHR2YWx1ZS5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1
ZV9wLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGNvbnZlcnRlcl9wLmggXAorICAgICAg
ICAgICAgJCRQV0QvcXNjcmlwdHN0cmluZy5oIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRz
dHJpbmdfcC5oIFwKIAogCiAhc3RhdGljOiBERUZJTkVTICs9IFFUX01BS0VETEwKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaCBiL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaAppbmRleCBjM2NhNDFmLi4yY2Y2NjVk
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGNvbnZlcnRlcl9wLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRjb252ZXJ0ZXJfcC5oCkBAIC0yMSw2
ICsyMSw3IEBACiAjZGVmaW5lIHFzY3JpcHRjb252ZXJ0ZXJfcF9oCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FudW1lcmljLmg+CiAj
aW5jbHVkZSA8UXRDb3JlL3FzdHJpbmcuaD4KIAogLyoKQEAgLTMzLDYgKzM0LDEyIEBACiAqLwog
Y2xhc3MgUVNjcmlwdENvbnZlcnRlciB7CiBwdWJsaWM6CisgICAgc3RhdGljIGRvdWJsZSB0b051
bWJlcihjb25zdCBKU0NoYXIqIHN0ciwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGJv
b2wgb2s7CisgICAgICAgIGRvdWJsZSByZXN1bHQgPSBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgUUNoYXIqPihzdHIpLCBsZW5ndGgpLnRvRG91YmxlKCZvayk7CisgICAgICAgIHJldHVy
biBvayA/IHJlc3VsdCA6IHFTTmFOKCk7CisgICAgfQogICAgIHN0YXRpYyBRU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IEpTU3RyaW5nUmVmIHN0cikKICAgICB7CiAgICAgICAgIHJldHVybiBRU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIo
c3RyKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cikpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuY3BwCmluZGV4IGZiZWI5MDIuLjQxNjM0ZjQgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZS5jcHAKQEAgLTg4LDYgKzg4LDE5IEBAIHZvaWQgUVNjcmlwdEVuZ2lu
ZTo6Y29sbGVjdEdhcmJhZ2UoKQogfQogCiAvKiEKKyAgUmV0dXJucyBhIGhhbmRsZSB0aGF0IHJl
cHJlc2VudHMgdGhlIGdpdmVuIHN0cmluZywgXGEgc3RyLgorCisgIFFTY3JpcHRTdHJpbmcgY2Fu
IGJlIHVzZWQgdG8gcXVpY2tseSBsb29rIHVwIHByb3BlcnRpZXMsIGFuZAorICBjb21wYXJlIHBy
b3BlcnR5IG5hbWVzLCBvZiBzY3JpcHQgb2JqZWN0cy4KKworICBcc2EgUVNjcmlwdFZhbHVlOjpw
cm9wZXJ0eSgpCisqLworUVNjcmlwdFN0cmluZyBRU2NyaXB0RW5naW5lOjp0b1N0cmluZ0hhbmRs
ZShjb25zdCBRU3RyaW5nJiBzdHIpCit7CisgICAgcmV0dXJuIFFTY3JpcHRTdHJpbmdQcml2YXRl
OjpnZXQoZF9wdHItPnRvU3RyaW5nSGFuZGxlKHN0cikpOworfQorCisvKiEKICAgUmV0dXJucyBh
IFFTY3JpcHRWYWx1ZSBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgTnVsbC4KIAogICBcc2EgdW5kZWZp
bmVkVmFsdWUoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdp
bmUuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmgKaW5kZXggYjhiZDVl
Ni4uYmE5YTliYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdp
bmUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oCkBAIC0yMCw2
ICsyMCw3IEBACiAjaWZuZGVmIHFzY3JpcHRlbmdpbmVfaAogI2RlZmluZSBxc2NyaXB0ZW5naW5l
X2gKIAorI2luY2x1ZGUgInFzY3JpcHRzdHJpbmcuaCIKICNpbmNsdWRlIDxRdENvcmUvcW9iamVj
dC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogI2luY2x1ZGUgPFF0Q29yZS9x
c3RyaW5nLmg+CkBAIC0zOCw2ICszOSw4IEBAIHB1YmxpYzoKICAgICBRU2NyaXB0VmFsdWUgZXZh
bHVhdGUoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUgPSBR
U3RyaW5nKCksIGludCBsaW5lTnVtYmVyID0gMSk7CiAgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgp
OwogCisgICAgUVNjcmlwdFN0cmluZyB0b1N0cmluZ0hhbmRsZShjb25zdCBRU3RyaW5nJiBzdHIp
OworCiAgICAgUVNjcmlwdFZhbHVlIG51bGxWYWx1ZSgpOwogICAgIFFTY3JpcHRWYWx1ZSB1bmRl
ZmluZWRWYWx1ZSgpOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
X3AuaAppbmRleCA4ZTI3YzQyLi5jNTgzZGFjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZV9wLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmVfcC5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJxc2NyaXB0Y29udmVy
dGVyX3AuaCIKICNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdHN0
cmluZ19wLmgiCiAjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgpAQCAt
NDcsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgaW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUo
Ym9vbCBudW1iZXIpIGNvbnN0OwogICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKFFT
Y3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKSBjb25zdDsKIAorICAgIGlubGluZSBRU2Ny
aXB0U3RyaW5nUHJpdmF0ZSogdG9TdHJpbmdIYW5kbGUoY29uc3QgUVN0cmluZyYgc3RyKSBjb25z
dDsKKwogICAgIGlubGluZSBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCgpIGNvbnN0OwogcHJp
dmF0ZToKICAgICBRU2NyaXB0RW5naW5lKiBxX3B0cjsKQEAgLTkwLDYgKzkzLDExIEBAIEpTVmFs
dWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVlKFFTY3JpcHRWYWx1ZTo6U3Bl
Y2lhbFZhbHVlIHZhbHVlKSBjCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKG1fY29u
dGV4dCk7CiB9CiAKK1FTY3JpcHRTdHJpbmdQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6
dG9TdHJpbmdIYW5kbGUoY29uc3QgUVN0cmluZyYgc3RyKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgUVNjcmlwdFN0cmluZ1ByaXZhdGUoc3RyKTsKK30KKwogSlNHbG9iYWxDb250ZXh0UmVmIFFT
Y3JpcHRFbmdpbmVQcml2YXRlOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250
ZXh0OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzAzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZy5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRz
dHJpbmcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRzdHJpbmdfcC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9xaGFzaC5oPgorCisvKiEKKyAgQ29uc3RydWN0cyBhbiBpbnZhbGlkIFFTY3JpcHRTdHJpbmcu
CisqLworUVNjcmlwdFN0cmluZzo6UVNjcmlwdFN0cmluZygpCisgICAgOiBkX3B0cihuZXcgUVNj
cmlwdFN0cmluZ1ByaXZhdGUoKSkKK3sKK30KKy8qIQorICBDb25zdHJ1Y3RzIGFuIFFTY3JpcHRT
dHJpbmcgZnJvbSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgorICBcaW50ZXJuYWwKKyovCitRU2Ny
aXB0U3RyaW5nOjpRU2NyaXB0U3RyaW5nKFFTY3JpcHRTdHJpbmdQcml2YXRlKiBkKQorICAgIDog
ZF9wdHIoZCkKK3sKK30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFN0cmluZyB0
aGF0IGlzIGEgY29weSBvZiBcYSBvdGhlci4KKyovCitRU2NyaXB0U3RyaW5nOjpRU2NyaXB0U3Ry
aW5nKGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKQoreworICAgIGRfcHRyID0gb3RoZXIuZF9w
dHI7Cit9CisKKy8qIQorICBEZXN0cm95cyB0aGlzIFFTY3JpcHRTdHJpbmcuCisqLworUVNjcmlw
dFN0cmluZzo6flFTY3JpcHRTdHJpbmcoKQoreworfQorCisvKiEKKyAgQXNzaWducyB0aGUgXGEg
b3RoZXIgdmFsdWUgdG8gdGhpcyBRU2NyaXB0U3RyaW5nLgorKi8KK1FTY3JpcHRTdHJpbmcmIFFT
Y3JpcHRTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBRU2NyaXB0U3RyaW5nJiBvdGhlcikKK3sKKyAg
ICBkX3B0ciA9IG90aGVyLmRfcHRyOworICAgIHJldHVybiAqdGhpczsKK30KKworLyohCisgIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRTdHJpbmcgaXMgdmFsaWQ7IG90aGVyd2lzZQorICBy
ZXR1cm5zIGZhbHNlLgorKi8KK2Jvb2wgUVNjcmlwdFN0cmluZzo6aXNWYWxpZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGRfcHRyLT5pc1ZhbGlkKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUg
aWYgdGhpcyBRU2NyaXB0U3RyaW5nIGlzIGVxdWFsIHRvIFxhIG90aGVyOworICBvdGhlcndpc2Ug
cmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRTdHJpbmc6Om9wZXJhdG9yPT0oY29uc3Qg
UVNjcmlwdFN0cmluZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyID09IG90aGVy
LmRfcHRyIHx8ICpkX3B0ciA9PSAqKG90aGVyLmRfcHRyKTsKK30KKworLyohCisgIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIFFTY3JpcHRTdHJpbmcgaXMgbm90IGVxdWFsIHRvIFxhIG90aGVyOworICBv
dGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRTdHJpbmc6Om9wZXJhdG9y
IT0oY29uc3QgUVNjcmlwdFN0cmluZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRy
ICE9IG90aGVyLmRfcHRyIHx8ICpkX3B0ciAhPSAqKG90aGVyLmRfcHRyKTsKK30KKworLyohCisg
IEF0dGVtcHRzIHRvIGNvbnZlcnQgdGhpcyBRU2NyaXB0U3RyaW5nIHRvIGEgUXRTY3JpcHQgYXJy
YXkgaW5kZXgsCisgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisKKyAgSWYgYSBjb252ZXJzaW9u
IGVycm9yIG9jY3VycywgKlxhe29rfSBpcyBzZXQgdG8gZmFsc2U7IG90aGVyd2lzZQorICAqXGF7
b2t9IGlzIHNldCB0byB0cnVlLgorKi8KK3F1aW50MzIgUVNjcmlwdFN0cmluZzo6dG9BcnJheUlu
ZGV4KGJvb2wqIG9rKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9BcnJheUluZGV4KG9r
KTsKK30KKworLyohCisgIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IHRoaXMgUVNjcmlwdFN0cmlu
ZyByZXByZXNlbnRzLCBvciBhCisgIG51bGwgc3RyaW5nIGlmIHRoaXMgUVNjcmlwdFN0cmluZyBp
cyBub3QgdmFsaWQuCisKKyAgXHNhIGlzVmFsaWQoKQorKi8KK1FTdHJpbmcgUVNjcmlwdFN0cmlu
Zzo6dG9TdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9TdHJpbmcoKTsKK30K
KworLyohCisgIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IHRoaXMgUVNjcmlwdFN0cmluZyByZXBy
ZXNlbnRzLCBvciBhCisgIG51bGwgc3RyaW5nIGlmIHRoaXMgUVNjcmlwdFN0cmluZyBpcyBub3Qg
dmFsaWQuCisKKyAgXHNhIHRvU3RyaW5nKCkKKyovCitRU2NyaXB0U3RyaW5nOjpvcGVyYXRvciBR
U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvU3RyaW5nKCk7Cit9CisKK3Vp
bnQgcUhhc2goY29uc3QgUVNjcmlwdFN0cmluZyYga2V5KQoreworICAgIHJldHVybiBxSGFzaChR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6Z2V0KGtleSktPmlkKCkpOworfQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0c3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEz
YTY4ZgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3Ry
aW5nLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2Ny
aXB0c3RyaW5nX2gKKyNkZWZpbmUgcXNjcmlwdHN0cmluZ19oCisKKyNpbmNsdWRlIDxRdENvcmUv
cXNoYXJlZGRhdGEuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXN0cmluZy5oPgorCitjbGFzcyBRU2Ny
aXB0U3RyaW5nUHJpdmF0ZTsKK3R5cGVkZWYgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxR
U2NyaXB0U3RyaW5nUHJpdmF0ZT4gUVNjcmlwdFN0cmluZ1B0cjsKKworY2xhc3MgUVNjcmlwdFN0
cmluZyB7CitwdWJsaWM6CisgICAgUVNjcmlwdFN0cmluZygpOworICAgIFFTY3JpcHRTdHJpbmco
Y29uc3QgUVNjcmlwdFN0cmluZyYgb3RoZXIpOworICAgIH5RU2NyaXB0U3RyaW5nKCk7CisKKyAg
ICBRU2NyaXB0U3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFN0cmluZyYgb3RoZXIpOwor
CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
UVNjcmlwdFN0cmluZyYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBR
U2NyaXB0U3RyaW5nJiBvdGhlcikgY29uc3Q7CisKKyAgICBxdWludDMyIHRvQXJyYXlJbmRleChi
b29sKiBvayA9IDApIGNvbnN0OworCisgICAgUVN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAg
IG9wZXJhdG9yIFFTdHJpbmcoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBRU2NyaXB0U3RyaW5n
KFFTY3JpcHRTdHJpbmdQcml2YXRlKiBkKTsKKworICAgIFFTY3JpcHRTdHJpbmdQdHIgZF9wdHI7
CisKKyAgICBmcmllbmQgY2xhc3MgUVNjcmlwdFN0cmluZ1ByaXZhdGU7Cit9OworCit1aW50IHFI
YXNoKGNvbnN0IFFTY3JpcHRTdHJpbmcmIGtleSk7CisKKyNlbmRpZiAvLyBxc2NyaXB0c3RyaW5n
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3RyaW5nX3AuaCBi
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3RyaW5nX3AuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zMzFkNDBjCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlw
dENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmdfcC5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIHFzY3JpcHRzdHJpbmdfcF9oCisjZGVmaW5lIHFzY3JpcHRz
dHJpbmdfcF9oCisKKyNpbmNsdWRlICJxc2NyaXB0Y29udmVydGVyX3AuaCIKKyNpbmNsdWRlICJx
c2NyaXB0c3RyaW5nLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgor
I2luY2x1ZGUgPFF0Q29yZS9xbnVtZXJpYy5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0
YS5oPgorCitjbGFzcyBRU2NyaXB0U3RyaW5nUHJpdmF0ZSA6IHB1YmxpYyBRU2hhcmVkRGF0YSB7
CitwdWJsaWM6CisgICAgaW5saW5lIFFTY3JpcHRTdHJpbmdQcml2YXRlKCk7CisgICAgaW5saW5l
IFFTY3JpcHRTdHJpbmdQcml2YXRlKGNvbnN0IFFTdHJpbmcmIHF0c3RyaW5nKTsKKyAgICBpbmxp
bmUgflFTY3JpcHRTdHJpbmdQcml2YXRlKCk7CisKKyAgICBzdGF0aWMgaW5saW5lIFFTY3JpcHRT
dHJpbmcgZ2V0KFFTY3JpcHRTdHJpbmdQcml2YXRlKiBkKTsKKyAgICBzdGF0aWMgaW5saW5lIFFT
Y3JpcHRTdHJpbmdQdHIgZ2V0KGNvbnN0IFFTY3JpcHRTdHJpbmcmIHApOworCisgICAgaW5saW5l
IGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBRU2NyaXB0U3RyaW5nUHJpdmF0ZSYgb3RoZXIpIGNvbnN0OworICAgIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgUVNjcmlwdFN0cmluZ1ByaXZhdGUmIG90aGVyKSBjb25zdDsKKworICAg
IGlubGluZSBxdWludDMyIHRvQXJyYXlJbmRleChib29sKiBvayA9IDApIGNvbnN0OworCisgICAg
aW5saW5lIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIGlubGluZSBxdWludDY0IGlk
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSlNTdHJpbmdSZWYgbV9zdHJpbmc7CisgICAgbXV0
YWJsZSBxdWludDMyIG1faW5kZXg7Cit9OworCisKK1FTY3JpcHRTdHJpbmdQcml2YXRlOjpRU2Ny
aXB0U3RyaW5nUHJpdmF0ZSgpCisgICAgOiBtX3N0cmluZygwKQorICAgICwgbV9pbmRleCgweGZm
ZmZmZmZmKQore30KKworUVNjcmlwdFN0cmluZ1ByaXZhdGU6OlFTY3JpcHRTdHJpbmdQcml2YXRl
KGNvbnN0IFFTdHJpbmcmIHF0c3RyaW5nKQorICAgIDogbV9zdHJpbmcoSlNTdHJpbmdSZXRhaW4o
UVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcocXRzdHJpbmcpKSkKKyAgICAsIG1faW5kZXgoMHhm
ZmZmZmZmZikKK3t9CisKK1FTY3JpcHRTdHJpbmdQcml2YXRlOjp+UVNjcmlwdFN0cmluZ1ByaXZh
dGUoKQoreworICAgIGlmIChpc1ZhbGlkKCkpCisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShtX3N0
cmluZyk7Cit9CisKK1FTY3JpcHRTdHJpbmcgUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldChRU2Ny
aXB0U3RyaW5nUHJpdmF0ZSogZCkKK3sKKyAgICBRX0FTU0VSVChkKTsKKyAgICByZXR1cm4gUVNj
cmlwdFN0cmluZyhkKTsKK30KKworUVNjcmlwdFN0cmluZ1B0ciBRU2NyaXB0U3RyaW5nUHJpdmF0
ZTo6Z2V0KGNvbnN0IFFTY3JpcHRTdHJpbmcmIHApCit7CisgICAgcmV0dXJuIHAuZF9wdHI7Cit9
CisKK2Jvb2wgUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N0cmluZzsKK30KKworYm9vbCBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6b3BlcmF0b3I9
PShjb25zdCBRU2NyaXB0U3RyaW5nUHJpdmF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkgJiYgSlNTdHJpbmdJc0VxdWFsKG1fc3RyaW5n
LCBvdGhlci5tX3N0cmluZyk7Cit9CisKK2Jvb2wgUVNjcmlwdFN0cmluZ1ByaXZhdGU6Om9wZXJh
dG9yIT0oY29uc3QgUVNjcmlwdFN0cmluZ1ByaXZhdGUmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiBpc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpICYmICFKU1N0cmluZ0lzRXF1YWwobV9z
dHJpbmcsIG90aGVyLm1fc3RyaW5nKTsKK30KKworcXVpbnQzMiBRU2NyaXB0U3RyaW5nUHJpdmF0
ZTo6dG9BcnJheUluZGV4KGJvb2wqIG9rKSBjb25zdAoreworICAgIGJvb2wgb2tvayA9IHRydWU7
CisKKyAgICBpZiAobV9pbmRleCA9PSAweGZmZmZmZmZmKSB7CisgICAgICAgIGNvbnN0IEpTQ2hh
ciogc3RyID0gSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKG1fc3RyaW5nKTsKKyAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TGVuZ3RoKG1fc3RyaW5nKTsKKyAgICAgICAgaWYgKHN0
ciAmJiBsZW5ndGggJiYgc3RyWzBdID4gJzAnICYmIHN0clswXSA8PSAnOScpIHsKKyAgICAgICAg
ICAgIGRvdWJsZSBpZHggPSBRU2NyaXB0Q29udmVydGVyOjp0b051bWJlcihzdHIsIGxlbmd0aCk7
CisgICAgICAgICAgICBpZiAoaWR4ID49IDB4ZmZmZmZmZmYgfHwgIXFJc0Zpbml0ZShpZHgpKQor
ICAgICAgICAgICAgICAgIG9rb2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2luZGV4ID0gaWR4OworICAgICAgICB9IGVsc2UgaWYgKHN0ciAmJiBsZW5ndGgg
PT0gMSAmJiBzdHJbMF0gPT0gJzAnKQorICAgICAgICAgICAgbV9pbmRleCA9IDA7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG9rb2sgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAob2spCisg
ICAgICAgICpvayA9IG9rb2s7CisKKyAgICByZXR1cm4gbV9pbmRleDsKK30KKworUVN0cmluZyBR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9TdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBRU2Ny
aXB0Q29udmVydGVyOjp0b1N0cmluZyhtX3N0cmluZyk7Cit9CisKK3F1aW50NjQgUVNjcmlwdFN0
cmluZ1ByaXZhdGU6OmlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxx
dWludDMyPihtX3N0cmluZyk7Cit9CisKKyNlbmRpZiAvLyBxc2NyaXB0c3RyaW5nX3BfaApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHN0cmluZy9xc2NyaXB0c3Ry
aW5nLnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvcXNjcmlwdHN0
cmluZy5wcm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkOWI3YwotLS0g
L2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvcXNj
cmlwdHN0cmluZy5wcm8KQEAgLTAsMCArMSw3IEBACitURU1QTEFURSA9IGFwcAorVEFSR0VUID0g
dHN0X3FzY3JpcHRzdHJpbmcKK1FUICs9IHRlc3RsaWIKK2luY2x1ZGUoLi4vdGVzdHMucHJpKQor
CitTT1VSQ0VTICs9IHRzdF9xc2NyaXB0c3RyaW5nLmNwcAorCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3RyaW5nL3RzdF9xc2NyaXB0c3RyaW5nLmNwcCBiL0ph
dmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZWJlNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3RyaW5nL3RzdF9xc2NyaXB0
c3RyaW5nLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiB0c3RfcXNjcmlwdHN0cmluZ19oCisjZGVmaW5lIHRzdF9xc2NyaXB0c3RyaW5nX2gKKworI2lu
Y2x1ZGUgInFzY3JpcHRlbmdpbmUuaCIKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCisjaW5j
bHVkZSA8UXRDb3JlL3FoYXNoLmg+CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKworY2xhc3Mg
dHN0X1FTY3JpcHRTdHJpbmcgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVi
bGljOgorICAgIHRzdF9RU2NyaXB0U3RyaW5nKCk7CisgICAgdmlydHVhbCB+dHN0X1FTY3JpcHRT
dHJpbmcoKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHRlc3QoKTsKKyAgICB2b2lkIGhh
c2goKTsKKyAgICB2b2lkIHRvQXJyYXlJbmRleF9kYXRhKCk7CisgICAgdm9pZCB0b0FycmF5SW5k
ZXgoKTsKK307CisKK3RzdF9RU2NyaXB0U3RyaW5nOjp0c3RfUVNjcmlwdFN0cmluZygpCit7Cit9
CisKK3RzdF9RU2NyaXB0U3RyaW5nOjp+dHN0X1FTY3JpcHRTdHJpbmcoKQoreworfQorCit2b2lk
IHRzdF9RU2NyaXB0U3RyaW5nOjp0ZXN0KCkKK3sKKyAgICBRU2NyaXB0RW5naW5lIGVuZzsKKyAg
ICB7CisgICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyOworICAgICAgICBRVkVSSUZZKCFzdHIuaXNW
YWxpZCgpKTsKKyAgICAgICAgUVZFUklGWShzdHIgPT0gc3RyKTsKKyAgICAgICAgUVZFUklGWSgh
KHN0ciAhPSBzdHIpKTsKKyAgICAgICAgUVZFUklGWShzdHIudG9TdHJpbmcoKS5pc051bGwoKSk7
CisKKyAgICAgICAgUVNjcmlwdFN0cmluZyBzdHIxKHN0cik7CisgICAgICAgIFFWRVJJRlkoIXN0
cjEuaXNWYWxpZCgpKTsKKworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0cjIgPSBzdHI7CisgICAg
ICAgIFFWRVJJRlkoIXN0cjIuaXNWYWxpZCgpKTsKKworICAgICAgICBRQ09NUEFSRShzdHIudG9B
cnJheUluZGV4KCksIHF1aW50MzIoMHhmZmZmZmZmZikpOworICAgIH0KKyAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDI7ICsreCkgeworICAgICAgICBRU3RyaW5nIGNpYW8gPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKCJjaWFvIik7CisgICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyID0gZW5nLnRvU3RyaW5n
SGFuZGxlKGNpYW8pOworICAgICAgICBRVkVSSUZZKHN0ci5pc1ZhbGlkKCkpOworICAgICAgICBR
VkVSSUZZKHN0ciA9PSBzdHIpOworICAgICAgICBRVkVSSUZZKCEoc3RyICE9IHN0cikpOworICAg
ICAgICBRQ09NUEFSRShzdHIudG9TdHJpbmcoKSwgY2lhbyk7CisKKyAgICAgICAgUVNjcmlwdFN0
cmluZyBzdHIxKHN0cik7CisgICAgICAgIFFDT01QQVJFKHN0ciwgc3RyMSk7CisKKyAgICAgICAg
UVNjcmlwdFN0cmluZyBzdHIyID0gc3RyOworICAgICAgICBRQ09NUEFSRShzdHIsIHN0cjIpOwor
CisgICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyMyA9IGVuZy50b1N0cmluZ0hhbmRsZShjaWFvKTsK
KyAgICAgICAgUVZFUklGWShzdHIzLmlzVmFsaWQoKSk7CisgICAgICAgIFFDT01QQVJFKHN0ciwg
c3RyMyk7CisKKyAgICAgICAgZW5nLmNvbGxlY3RHYXJiYWdlKCk7CisKKyAgICAgICAgUVZFUklG
WShzdHIuaXNWYWxpZCgpKTsKKyAgICAgICAgUUNPTVBBUkUoc3RyLnRvU3RyaW5nKCksIGNpYW8p
OworICAgICAgICBRVkVSSUZZKHN0cjEuaXNWYWxpZCgpKTsKKyAgICAgICAgUUNPTVBBUkUoc3Ry
MS50b1N0cmluZygpLCBjaWFvKTsKKyAgICAgICAgUVZFUklGWShzdHIyLmlzVmFsaWQoKSk7Cisg
ICAgICAgIFFDT01QQVJFKHN0cjIudG9TdHJpbmcoKSwgY2lhbyk7CisgICAgICAgIFFWRVJJRlko
c3RyMy5pc1ZhbGlkKCkpOworICAgICAgICBRQ09NUEFSRShzdHIzLnRvU3RyaW5nKCksIGNpYW8p
OworICAgIH0KKyAgICB7CisgICAgICAgIFFTY3JpcHRFbmdpbmUqIGVuZzIgPSBuZXcgUVNjcmlw
dEVuZ2luZTsKKyAgICAgICAgUVN0cmluZyBvbmUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJvbmUi
KTsKKyAgICAgICAgUVN0cmluZyB0d28gPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJ0d28iKTsKKyAg
ICAgICAgUVNjcmlwdFN0cmluZyBvbmVJbnRlcm5lZCA9IGVuZzItPnRvU3RyaW5nSGFuZGxlKG9u
ZSk7CisgICAgICAgIFFDT01QQVJFKG9uZUludGVybmVkLnRvU3RyaW5nKCksIG9uZSk7CisgICAg
ICAgIFFTY3JpcHRTdHJpbmcgdHdvSW50ZXJuZWQgPSBlbmcyLT50b1N0cmluZ0hhbmRsZSh0d28p
OworICAgICAgICBRQ09NUEFSRSh0d29JbnRlcm5lZC50b1N0cmluZygpLCB0d28pOworICAgICAg
ICBRVkVSSUZZKG9uZUludGVybmVkICE9IHR3b0ludGVybmVkKTsKKyAgICAgICAgUVZFUklGWSgh
KG9uZUludGVybmVkID09IHR3b0ludGVybmVkKSk7CisKKyAgICAgICAgZGVsZXRlIGVuZzI7Cisg
ICAgfQorfQorCit2b2lkIHRzdF9RU2NyaXB0U3RyaW5nOjpoYXNoKCkKK3sKKyAgICBRU2NyaXB0
RW5naW5lIGVuZ2luZTsKKyAgICBRSGFzaDxRU2NyaXB0U3RyaW5nLCBpbnQ+IHN0cmluZ1RvSW50
OworICAgIFFTY3JpcHRTdHJpbmcgZm9vID0gZW5naW5lLnRvU3RyaW5nSGFuZGxlKCJmb28iKTsK
KworICAgIFFTY3JpcHRTdHJpbmcgYmFyID0gZW5naW5lLnRvU3RyaW5nSGFuZGxlKCJiYXIiKTsK
KyAgICBRVkVSSUZZKCFzdHJpbmdUb0ludC5jb250YWlucyhmb28pKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKKyAgICAgICAgc3RyaW5nVG9JbnQuaW5zZXJ0KGZvbywg
MTIzKTsKKyAgICBRQ09NUEFSRShzdHJpbmdUb0ludC52YWx1ZShmb28pLCAxMjMpOworICAgIFFW
RVJJRlkoIXN0cmluZ1RvSW50LmNvbnRhaW5zKGJhcikpOworICAgIHN0cmluZ1RvSW50Lmluc2Vy
dChiYXIsIDQ1Nik7CisgICAgUUNPTVBBUkUoc3RyaW5nVG9JbnQudmFsdWUoYmFyKSwgNDU2KTsK
KyAgICBRQ09NUEFSRShzdHJpbmdUb0ludC52YWx1ZShmb28pLCAxMjMpOworfQorCit2b2lkIHRz
dF9RU2NyaXB0U3RyaW5nOjp0b0FycmF5SW5kZXhfZGF0YSgpCit7CisgICAgUVRlc3Q6OmFkZENv
bHVtbjxRU3RyaW5nPigiaW5wdXQiKTsKKyAgICBRVGVzdDo6YWRkQ29sdW1uPGJvb2w+KCJleHBl
Y3RTdWNjZXNzIik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxxdWludDMyPigiZXhwZWN0ZWRJbmRl
eCIpOworICAgIFFUZXN0OjpuZXdSb3coImZvbyIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoImZv
byIpIDw8IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7CisgICAgUVRlc3Q6Om5ld1Jvdygi
ZW1wdHkiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4
ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjAiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4x
KCIwIikgPDwgdHJ1ZSA8PCBxdWludDMyKDApOworICAgIFFUZXN0OjpuZXdSb3coIjAwIikgPDwg
UVN0cmluZzo6ZnJvbUxhdGluMSgiMDAiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYp
OworICAgIFFUZXN0OjpuZXdSb3coIjEiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIxIikgPDwg
dHJ1ZSA8PCBxdWludDMyKDEpOworICAgIFFUZXN0OjpuZXdSb3coIjEyMyIpIDw8IFFTdHJpbmc6
OmZyb21MYXRpbjEoIjEyMyIpIDw8IHRydWUgPDwgcXVpbnQzMigxMjMpOworICAgIFFUZXN0Ojpu
ZXdSb3coIi0xIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiLTEiKSA8PCBmYWxzZSA8PCBxdWlu
dDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjBhIikgPDwgUVN0cmluZzo6ZnJv
bUxhdGluMSgiMGEiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0
OjpuZXdSb3coIjB4MSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjB4MSIpIDw8IGZhbHNlIDw8
IHF1aW50MzIoMHhmZmZmZmZmZik7CisgICAgUVRlc3Q6Om5ld1JvdygiMDEiKSA8PCBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCIwMSIpIDw8IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7CisgICAg
UVRlc3Q6Om5ld1JvdygiMTAxYSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjEwMWEiKSA8PCBm
YWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjQyOTQ5Njcy
OTQiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCI0Mjk0OTY3Mjk0IikgPDwgdHJ1ZSA8PCBxdWlu
dDMyKDB4ZmZmZmZmZmUpOworICAgIFFUZXN0OjpuZXdSb3coIjQyOTQ5NjcyOTUiKSA8PCBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCI0Mjk0OTY3Mjk1IikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZm
ZmZmKTsKKworfQorCit2b2lkIHRzdF9RU2NyaXB0U3RyaW5nOjp0b0FycmF5SW5kZXgoKQorewor
ICAgIFFGRVRDSChRU3RyaW5nLCBpbnB1dCk7CisgICAgUUZFVENIKGJvb2wsIGV4cGVjdFN1Y2Nl
c3MpOworICAgIFFGRVRDSChxdWludDMyLCBleHBlY3RlZEluZGV4KTsKKyAgICBRU2NyaXB0RW5n
aW5lIGVuZ2luZTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IDI7ICsreCkgeworICAgICAgICBi
b29sIGlzQXJyYXlJbmRleDsKKyAgICAgICAgYm9vbCogcHRyID0gKCF4KSA/ICZpc0FycmF5SW5k
ZXggOiAoYm9vbCopMDsKKyAgICAgICAgcXVpbnQzMiByZXN1bHQgPSBlbmdpbmUudG9TdHJpbmdI
YW5kbGUoaW5wdXQpLnRvQXJyYXlJbmRleChwdHIpOworICAgICAgICBpZiAoIXgpCisgICAgICAg
ICAgICBRQ09NUEFSRShpc0FycmF5SW5kZXgsIGV4cGVjdFN1Y2Nlc3MpOworICAgICAgICBRQ09N
UEFSRShyZXN1bHQsIGV4cGVjdGVkSW5kZXgpOworICAgIH0KK30KKworUVRFU1RfTUFJTih0c3Rf
UVNjcmlwdFN0cmluZykKKyNpbmNsdWRlICJ0c3RfcXNjcmlwdHN0cmluZy5tb2MiCisKKyNlbmRp
ZiAvLyB0c3RfcXNjcmlwdHN0cmluZ19oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC90
ZXN0cy90ZXN0cy5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8KaW5kZXgg
NmU1ZWRiMS4uN2MzZjU5MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVz
dHMucHJvCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwpAQCAtMSwzICsx
LDQgQEAKIFRFTVBMQVRFID0gc3ViZGlycwogU1VCRElSUyA9ICAgcXNjcmlwdGVuZ2luZSBcCi0g
ICAgICAgICAgICBxc2NyaXB0dmFsdWUKKyAgICAgICAgICAgIHFzY3JpcHR2YWx1ZSBcCisgICAg
ICAgICAgICBxc2NyaXB0c3RyaW5nCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49065</attachid>
            <date>2010-02-19 04:13:56 -0800</date>
            <delta_ts>2010-02-23 06:29:19 -0800</delta_ts>
            <desc>Fix v3</desc>
            <filename>qssv3.diff</filename>
            <type>text/plain</type>
            <size>22259</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiY2MxY2M4Li45Yjg2MDRjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMTAtMDItMTEgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50
cm9kdWNlIGEgbmV3IGNsYXNzOyBRU2NyaXB0U3RyaW5nLgorCisgICAgICAgIFRoZSBRU2NyaXB0
U3RyaW5nIGNsYXNzIHNob3VsZCBhY3QgYXMgYSBoYW5kbGUgdG8gImludGVybmVkIgorICAgICAg
ICBzdHJpbmdzIGluIGEgUVNjcmlwdEVuZ2luZS4KKworICAgICAgICBbUXRdIFF0U2NyaXB0IHNo
b3VsZCBwcm92aWRlIFFTY3JpcHRTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0ODQzCisKKyAgICAgICAgKiBxdC9hcGkvUXRTY3JpcHQucHJv
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmU6OnRvU3RyaW5nSGFuZGxlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdGVuZ2luZS5o
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmVQcml2YXRlOjp0b1N0cmluZ0hhbmRsZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRz
dHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OlFTY3JpcHRTdHJpbmcp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6flFTY3JpcHRTdHJpbmcpOgorICAgICAgICAoUVNj
cmlwdFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OnRvQXJyYXlJbmRl
eCk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nOjp0b1N0cmluZyk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciBRU3RyaW5nKToKKyAgICAgICAgKHFIYXNoKToKKyAgICAgICAgKiBx
dC9hcGkvcXNjcmlwdHN0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN0
cmluZ19wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OlFTY3JpcHRT
dHJpbmdQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp+UVNjcmlwdFN0
cmluZ1ByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldCk6CisgICAg
ICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0U3Ry
aW5nUHJpdmF0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9BcnJheUluZGV4
KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp0b1N0cmluZyk6CisgICAgICAgIChR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6aWQpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRzdHJp
bmcvcXNjcmlwdHN0cmluZy5wcm86IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRz
dHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0c3RfUVNjcmlwdFN0cmluZyk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
fnRzdF9RU2NyaXB0U3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjp0ZXN0KToK
KyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjpoYXNoKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0b0FycmF5SW5kZXhfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
dG9BcnJheUluZGV4KToKKyAgICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcm86CisKIDIwMTAtMDIt
MTAgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KaW5k
ZXggYzg3ZWFmNC4uMjQ2YTBiYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0
U2NyaXB0LnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCkBAIC0y
MSw2ICsyMSw3IEBAIElOQ0xVREVQQVRIICs9ICQkUFdELy4uLy4uL0FQSQogU09VUkNFUyArPSAg
JCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2lu
ZV9wLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWUuY3BwIFwKKyAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuY3BwIFwKIAogSEVBREVSUyArPSAgJCRQV0QvcXRzY3Jp
cHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXApAQCAtMjgs
NiArMjksOCBAQCBIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5oIFwKICAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHR2YWx1ZS5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1
ZV9wLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGNvbnZlcnRlcl9wLmggXAorICAgICAg
ICAgICAgJCRQV0QvcXNjcmlwdHN0cmluZy5oIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRz
dHJpbmdfcC5oIFwKIAogCiAhc3RhdGljOiBERUZJTkVTICs9IFFUX01BS0VETEwKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaCBiL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaAppbmRleCBjM2NhNDFmLi4yY2Y2NjVk
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGNvbnZlcnRlcl9wLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRjb252ZXJ0ZXJfcC5oCkBAIC0yMSw2
ICsyMSw3IEBACiAjZGVmaW5lIHFzY3JpcHRjb252ZXJ0ZXJfcF9oCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FudW1lcmljLmg+CiAj
aW5jbHVkZSA8UXRDb3JlL3FzdHJpbmcuaD4KIAogLyoKQEAgLTMzLDYgKzM0LDEyIEBACiAqLwog
Y2xhc3MgUVNjcmlwdENvbnZlcnRlciB7CiBwdWJsaWM6CisgICAgc3RhdGljIGRvdWJsZSB0b051
bWJlcihjb25zdCBKU0NoYXIqIHN0ciwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGJv
b2wgb2s7CisgICAgICAgIGRvdWJsZSByZXN1bHQgPSBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgUUNoYXIqPihzdHIpLCBsZW5ndGgpLnRvRG91YmxlKCZvayk7CisgICAgICAgIHJldHVy
biBvayA/IHJlc3VsdCA6IHFTTmFOKCk7CisgICAgfQogICAgIHN0YXRpYyBRU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IEpTU3RyaW5nUmVmIHN0cikKICAgICB7CiAgICAgICAgIHJldHVybiBRU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIo
c3RyKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cikpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmUuY3BwCmluZGV4IGZiZWI5MDIuLjQxNjM0ZjQgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdGVuZ2luZS5jcHAKQEAgLTg4LDYgKzg4LDE5IEBAIHZvaWQgUVNjcmlwdEVuZ2lu
ZTo6Y29sbGVjdEdhcmJhZ2UoKQogfQogCiAvKiEKKyAgUmV0dXJucyBhIGhhbmRsZSB0aGF0IHJl
cHJlc2VudHMgdGhlIGdpdmVuIHN0cmluZywgXGEgc3RyLgorCisgIFFTY3JpcHRTdHJpbmcgY2Fu
IGJlIHVzZWQgdG8gcXVpY2tseSBsb29rIHVwIHByb3BlcnRpZXMsIGFuZAorICBjb21wYXJlIHBy
b3BlcnR5IG5hbWVzLCBvZiBzY3JpcHQgb2JqZWN0cy4KKworICBcc2EgUVNjcmlwdFZhbHVlOjpw
cm9wZXJ0eSgpCisqLworUVNjcmlwdFN0cmluZyBRU2NyaXB0RW5naW5lOjp0b1N0cmluZ0hhbmRs
ZShjb25zdCBRU3RyaW5nJiBzdHIpCit7CisgICAgcmV0dXJuIFFTY3JpcHRTdHJpbmdQcml2YXRl
OjpnZXQoZF9wdHItPnRvU3RyaW5nSGFuZGxlKHN0cikpOworfQorCisvKiEKICAgUmV0dXJucyBh
IFFTY3JpcHRWYWx1ZSBvZiB0aGUgcHJpbWl0aXZlIHR5cGUgTnVsbC4KIAogICBcc2EgdW5kZWZp
bmVkVmFsdWUoKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdp
bmUuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmgKaW5kZXggYjhiZDVl
Ni4uYmE5YTliYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdp
bmUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5oCkBAIC0yMCw2
ICsyMCw3IEBACiAjaWZuZGVmIHFzY3JpcHRlbmdpbmVfaAogI2RlZmluZSBxc2NyaXB0ZW5naW5l
X2gKIAorI2luY2x1ZGUgInFzY3JpcHRzdHJpbmcuaCIKICNpbmNsdWRlIDxRdENvcmUvcW9iamVj
dC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgogI2luY2x1ZGUgPFF0Q29yZS9x
c3RyaW5nLmg+CkBAIC0zOCw2ICszOSw4IEBAIHB1YmxpYzoKICAgICBRU2NyaXB0VmFsdWUgZXZh
bHVhdGUoY29uc3QgUVN0cmluZyYgcHJvZ3JhbSwgY29uc3QgUVN0cmluZyYgZmlsZU5hbWUgPSBR
U3RyaW5nKCksIGludCBsaW5lTnVtYmVyID0gMSk7CiAgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgp
OwogCisgICAgUVNjcmlwdFN0cmluZyB0b1N0cmluZ0hhbmRsZShjb25zdCBRU3RyaW5nJiBzdHIp
OworCiAgICAgUVNjcmlwdFZhbHVlIG51bGxWYWx1ZSgpOwogICAgIFFTY3JpcHRWYWx1ZSB1bmRl
ZmluZWRWYWx1ZSgpOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lX3AuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5l
X3AuaAppbmRleCA4ZTI3YzQyLi5jNTgzZGFjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9x
dC9hcGkvcXNjcmlwdGVuZ2luZV9wLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3Jp
cHRlbmdpbmVfcC5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJxc2NyaXB0Y29udmVy
dGVyX3AuaCIKICNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdHN0
cmluZ19wLmgiCiAjaW5jbHVkZSAicXNjcmlwdHZhbHVlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgpAQCAt
NDcsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgaW5saW5lIEpTVmFsdWVSZWYgbWFrZUpTVmFsdWUo
Ym9vbCBudW1iZXIpIGNvbnN0OwogICAgIGlubGluZSBKU1ZhbHVlUmVmIG1ha2VKU1ZhbHVlKFFT
Y3JpcHRWYWx1ZTo6U3BlY2lhbFZhbHVlIHZhbHVlKSBjb25zdDsKIAorICAgIGlubGluZSBRU2Ny
aXB0U3RyaW5nUHJpdmF0ZSogdG9TdHJpbmdIYW5kbGUoY29uc3QgUVN0cmluZyYgc3RyKSBjb25z
dDsKKwogICAgIGlubGluZSBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCgpIGNvbnN0OwogcHJp
dmF0ZToKICAgICBRU2NyaXB0RW5naW5lKiBxX3B0cjsKQEAgLTkwLDYgKzkzLDExIEBAIEpTVmFs
dWVSZWYgUVNjcmlwdEVuZ2luZVByaXZhdGU6Om1ha2VKU1ZhbHVlKFFTY3JpcHRWYWx1ZTo6U3Bl
Y2lhbFZhbHVlIHZhbHVlKSBjCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKG1fY29u
dGV4dCk7CiB9CiAKK1FTY3JpcHRTdHJpbmdQcml2YXRlKiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6
dG9TdHJpbmdIYW5kbGUoY29uc3QgUVN0cmluZyYgc3RyKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgUVNjcmlwdFN0cmluZ1ByaXZhdGUoc3RyKTsKK30KKwogSlNHbG9iYWxDb250ZXh0UmVmIFFT
Y3JpcHRFbmdpbmVQcml2YXRlOjpjb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250
ZXh0OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzAzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZy5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRz
dHJpbmcuaCIKKworI2luY2x1ZGUgInFzY3JpcHRzdHJpbmdfcC5oIgorI2luY2x1ZGUgPFF0Q29y
ZS9xaGFzaC5oPgorCisvKiEKKyAgQ29uc3RydWN0cyBhbiBpbnZhbGlkIFFTY3JpcHRTdHJpbmcu
CisqLworUVNjcmlwdFN0cmluZzo6UVNjcmlwdFN0cmluZygpCisgICAgOiBkX3B0cihuZXcgUVNj
cmlwdFN0cmluZ1ByaXZhdGUoKSkKK3sKK30KKy8qIQorICBDb25zdHJ1Y3RzIGFuIFFTY3JpcHRT
dHJpbmcgZnJvbSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgorICBcaW50ZXJuYWwKKyovCitRU2Ny
aXB0U3RyaW5nOjpRU2NyaXB0U3RyaW5nKFFTY3JpcHRTdHJpbmdQcml2YXRlKiBkKQorICAgIDog
ZF9wdHIoZCkKK3sKK30KKworLyohCisgIENvbnN0cnVjdHMgYSBuZXcgUVNjcmlwdFN0cmluZyB0
aGF0IGlzIGEgY29weSBvZiBcYSBvdGhlci4KKyovCitRU2NyaXB0U3RyaW5nOjpRU2NyaXB0U3Ry
aW5nKGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKQoreworICAgIGRfcHRyID0gb3RoZXIuZF9w
dHI7Cit9CisKKy8qIQorICBEZXN0cm95cyB0aGlzIFFTY3JpcHRTdHJpbmcuCisqLworUVNjcmlw
dFN0cmluZzo6flFTY3JpcHRTdHJpbmcoKQoreworfQorCisvKiEKKyAgQXNzaWducyB0aGUgXGEg
b3RoZXIgdmFsdWUgdG8gdGhpcyBRU2NyaXB0U3RyaW5nLgorKi8KK1FTY3JpcHRTdHJpbmcmIFFT
Y3JpcHRTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBRU2NyaXB0U3RyaW5nJiBvdGhlcikKK3sKKyAg
ICBkX3B0ciA9IG90aGVyLmRfcHRyOworICAgIHJldHVybiAqdGhpczsKK30KKworLyohCisgIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIFFTY3JpcHRTdHJpbmcgaXMgdmFsaWQ7IG90aGVyd2lzZQorICBy
ZXR1cm5zIGZhbHNlLgorKi8KK2Jvb2wgUVNjcmlwdFN0cmluZzo6aXNWYWxpZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGRfcHRyLT5pc1ZhbGlkKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRydWUg
aWYgdGhpcyBRU2NyaXB0U3RyaW5nIGlzIGVxdWFsIHRvIFxhIG90aGVyOworICBvdGhlcndpc2Ug
cmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRTdHJpbmc6Om9wZXJhdG9yPT0oY29uc3Qg
UVNjcmlwdFN0cmluZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyID09IG90aGVy
LmRfcHRyIHx8ICpkX3B0ciA9PSAqKG90aGVyLmRfcHRyKTsKK30KKworLyohCisgIFJldHVybnMg
dHJ1ZSBpZiB0aGlzIFFTY3JpcHRTdHJpbmcgaXMgbm90IGVxdWFsIHRvIFxhIG90aGVyOworICBv
dGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRTdHJpbmc6Om9wZXJhdG9y
IT0oY29uc3QgUVNjcmlwdFN0cmluZyYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRy
ICE9IG90aGVyLmRfcHRyIHx8ICpkX3B0ciAhPSAqKG90aGVyLmRfcHRyKTsKK30KKworLyohCisg
IEF0dGVtcHRzIHRvIGNvbnZlcnQgdGhpcyBRU2NyaXB0U3RyaW5nIHRvIGEgUXRTY3JpcHQgYXJy
YXkgaW5kZXgsCisgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCisKKyAgSWYgYSBjb252ZXJzaW9u
IGVycm9yIG9jY3VycywgKlxhe29rfSBpcyBzZXQgdG8gZmFsc2U7IG90aGVyd2lzZQorICAqXGF7
b2t9IGlzIHNldCB0byB0cnVlLgorKi8KK3F1aW50MzIgUVNjcmlwdFN0cmluZzo6dG9BcnJheUlu
ZGV4KGJvb2wqIG9rKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9BcnJheUluZGV4KG9r
KTsKK30KKworLyohCisgIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IHRoaXMgUVNjcmlwdFN0cmlu
ZyByZXByZXNlbnRzLCBvciBhCisgIG51bGwgc3RyaW5nIGlmIHRoaXMgUVNjcmlwdFN0cmluZyBp
cyBub3QgdmFsaWQuCisKKyAgXHNhIGlzVmFsaWQoKQorKi8KK1FTdHJpbmcgUVNjcmlwdFN0cmlu
Zzo6dG9TdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+dG9TdHJpbmcoKTsKK30K
KworLyohCisgIFJldHVybnMgdGhlIHN0cmluZyB0aGF0IHRoaXMgUVNjcmlwdFN0cmluZyByZXBy
ZXNlbnRzLCBvciBhCisgIG51bGwgc3RyaW5nIGlmIHRoaXMgUVNjcmlwdFN0cmluZyBpcyBub3Qg
dmFsaWQuCisKKyAgXHNhIHRvU3RyaW5nKCkKKyovCitRU2NyaXB0U3RyaW5nOjpvcGVyYXRvciBR
U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRvU3RyaW5nKCk7Cit9CisKK3Vp
bnQgcUhhc2goY29uc3QgUVNjcmlwdFN0cmluZyYga2V5KQoreworICAgIHJldHVybiBxSGFzaChR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6Z2V0KGtleSktPmlkKCkpOworfQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuaCBiL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0c3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1
OTNiYwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3Ry
aW5nLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBxc2Ny
aXB0c3RyaW5nX2gKKyNkZWZpbmUgcXNjcmlwdHN0cmluZ19oCisKKyNpbmNsdWRlICJxdHNjcmlw
dGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgorI2luY2x1ZGUgPFF0
Q29yZS9xc3RyaW5nLmg+CisKK2NsYXNzIFFTY3JpcHRTdHJpbmdQcml2YXRlOwordHlwZWRlZiBR
RXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyPFFTY3JpcHRTdHJpbmdQcml2YXRlPiBRU2NyaXB0
U3RyaW5nUHRyOworCitjbGFzcyBRX0pBVkFTQ1JJUFRfRVhQT1JUIFFTY3JpcHRTdHJpbmcgewor
cHVibGljOgorICAgIFFTY3JpcHRTdHJpbmcoKTsKKyAgICBRU2NyaXB0U3RyaW5nKGNvbnN0IFFT
Y3JpcHRTdHJpbmcmIG90aGVyKTsKKyAgICB+UVNjcmlwdFN0cmluZygpOworCisgICAgUVNjcmlw
dFN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKTsKKworICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFFTY3JpcHRT
dHJpbmcmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUVNjcmlwdFN0
cmluZyYgb3RoZXIpIGNvbnN0OworCisgICAgcXVpbnQzMiB0b0FycmF5SW5kZXgoYm9vbCogb2sg
PSAwKSBjb25zdDsKKworICAgIFFTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKyAgICBvcGVyYXRv
ciBRU3RyaW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUVNjcmlwdFN0cmluZyhRU2NyaXB0
U3RyaW5nUHJpdmF0ZSogZCk7CisKKyAgICBRU2NyaXB0U3RyaW5nUHRyIGRfcHRyOworCisgICAg
ZnJpZW5kIGNsYXNzIFFTY3JpcHRTdHJpbmdQcml2YXRlOworfTsKKwordWludCBxSGFzaChjb25z
dCBRU2NyaXB0U3RyaW5nJiBrZXkpOworCisjZW5kaWYgLy8gcXNjcmlwdHN0cmluZ19oCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZ19wLmggYi9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZ19wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWE1MzdjNgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3F0
L2FwaS9xc2NyaXB0c3RyaW5nX3AuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBxc2NyaXB0c3RyaW5nX3BfaAorI2RlZmluZSBxc2NyaXB0c3RyaW5nX3Bf
aAorCisjaW5jbHVkZSAicXNjcmlwdGNvbnZlcnRlcl9wLmgiCisjaW5jbHVkZSAicXNjcmlwdHN0
cmluZy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRl
IDxRdENvcmUvcW51bWVyaWMuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KKwor
Y2xhc3MgUVNjcmlwdFN0cmluZ1ByaXZhdGUgOiBwdWJsaWMgUVNoYXJlZERhdGEgeworcHVibGlj
OgorICAgIGlubGluZSBRU2NyaXB0U3RyaW5nUHJpdmF0ZSgpOworICAgIGlubGluZSBRU2NyaXB0
U3RyaW5nUHJpdmF0ZShjb25zdCBRU3RyaW5nJiBxdHN0cmluZyk7CisgICAgaW5saW5lIH5RU2Ny
aXB0U3RyaW5nUHJpdmF0ZSgpOworCisgICAgc3RhdGljIGlubGluZSBRU2NyaXB0U3RyaW5nIGdl
dChRU2NyaXB0U3RyaW5nUHJpdmF0ZSogZCk7CisgICAgc3RhdGljIGlubGluZSBRU2NyaXB0U3Ry
aW5nUHRyIGdldChjb25zdCBRU2NyaXB0U3RyaW5nJiBwKTsKKworICAgIGlubGluZSBib29sIGlz
VmFsaWQoKSBjb25zdDsKKworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUVNjcmlw
dFN0cmluZ1ByaXZhdGUmIG90aGVyKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFFTY3JpcHRTdHJpbmdQcml2YXRlJiBvdGhlcikgY29uc3Q7CisKKyAgICBpbmxpbmUg
cXVpbnQzMiB0b0FycmF5SW5kZXgoYm9vbCogb2sgPSAwKSBjb25zdDsKKworICAgIGlubGluZSBR
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgcXVpbnQ2NCBpZCgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIEpTU3RyaW5nUmVmIG1fc3RyaW5nOworfTsKKworCitRU2NyaXB0
U3RyaW5nUHJpdmF0ZTo6UVNjcmlwdFN0cmluZ1ByaXZhdGUoKQorICAgIDogbV9zdHJpbmcoMCkK
K3t9CisKK1FTY3JpcHRTdHJpbmdQcml2YXRlOjpRU2NyaXB0U3RyaW5nUHJpdmF0ZShjb25zdCBR
U3RyaW5nJiBxdHN0cmluZykKKyAgICA6IG1fc3RyaW5nKEpTU3RyaW5nUmV0YWluKFFTY3JpcHRD
b252ZXJ0ZXI6OnRvU3RyaW5nKHF0c3RyaW5nKSkpCit7fQorCitRU2NyaXB0U3RyaW5nUHJpdmF0
ZTo6flFTY3JpcHRTdHJpbmdQcml2YXRlKCkKK3sKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAg
ICBKU1N0cmluZ1JlbGVhc2UobV9zdHJpbmcpOworfQorCitRU2NyaXB0U3RyaW5nIFFTY3JpcHRT
dHJpbmdQcml2YXRlOjpnZXQoUVNjcmlwdFN0cmluZ1ByaXZhdGUqIGQpCit7CisgICAgUV9BU1NF
UlQoZCk7CisgICAgcmV0dXJuIFFTY3JpcHRTdHJpbmcoZCk7Cit9CisKK1FTY3JpcHRTdHJpbmdQ
dHIgUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldChjb25zdCBRU2NyaXB0U3RyaW5nJiBwKQorewor
ICAgIHJldHVybiBwLmRfcHRyOworfQorCitib29sIFFTY3JpcHRTdHJpbmdQcml2YXRlOjppc1Zh
bGlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CisKK2Jvb2wgUVNjcmlwdFN0
cmluZ1ByaXZhdGU6Om9wZXJhdG9yPT0oY29uc3QgUVNjcmlwdFN0cmluZ1ByaXZhdGUmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBpc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpICYmIEpT
U3RyaW5nSXNFcXVhbChtX3N0cmluZywgb3RoZXIubV9zdHJpbmcpOworfQorCitib29sIFFTY3Jp
cHRTdHJpbmdQcml2YXRlOjpvcGVyYXRvciE9KGNvbnN0IFFTY3JpcHRTdHJpbmdQcml2YXRlJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSAm
JiAhSlNTdHJpbmdJc0VxdWFsKG1fc3RyaW5nLCBvdGhlci5tX3N0cmluZyk7Cit9CisKK3F1aW50
MzIgUVNjcmlwdFN0cmluZ1ByaXZhdGU6OnRvQXJyYXlJbmRleChib29sKiBvaykgY29uc3QKK3sK
KyAgICBib29sIG9rb2sgPSB0cnVlOworICAgIGRvdWJsZSBpZHggPSAweGZmZmZmZmZmOworCisg
ICAgY29uc3QgSlNDaGFyKiBzdHIgPSBKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIobV9zdHJpbmcp
OworICAgIHNpemVfdCBsZW5ndGggPSBKU1N0cmluZ0dldExlbmd0aChtX3N0cmluZyk7CisgICAg
aWYgKHN0ciAmJiBsZW5ndGggJiYgc3RyWzBdID4gJzAnICYmIHN0clswXSA8PSAnOScpIHsKKyAg
ICAgICAgaWR4ID0gUVNjcmlwdENvbnZlcnRlcjo6dG9OdW1iZXIoc3RyLCBsZW5ndGgpOworICAg
ICAgICBpZiAoaWR4ID49IDB4ZmZmZmZmZmYgfHwgIXFJc0Zpbml0ZShpZHgpKSB7CisgICAgICAg
ICAgICBva29rID0gZmFsc2U7CisgICAgICAgICAgICBpZHggPSAweGZmZmZmZmZmOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChzdHIgJiYgbGVuZ3RoID09IDEgJiYgc3RyWzBdID09ICcwJykK
KyAgICAgICAgaWR4ID0gMDsKKyAgICBlbHNlCisgICAgICAgIG9rb2sgPSBmYWxzZTsKKworICAg
IGlmIChvaykKKyAgICAgICAgKm9rID0gb2tvazsKKworICAgIHJldHVybiBpZHg7Cit9CisKK1FT
dHJpbmcgUVNjcmlwdFN0cmluZ1ByaXZhdGU6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcobV9zdHJpbmcpOworfQorCitxdWludDY0IFFT
Y3JpcHRTdHJpbmdQcml2YXRlOjppZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8cXVpbnQzMj4obV9zdHJpbmcpOworfQorCisjZW5kaWYgLy8gcXNjcmlwdHN0cmluZ19w
X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvcXNj
cmlwdHN0cmluZy5wcm8gYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3RyaW5nL3Fz
Y3JpcHRzdHJpbmcucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDli
N2MKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3Ry
aW5nL3FzY3JpcHRzdHJpbmcucHJvCkBAIC0wLDAgKzEsNyBAQAorVEVNUExBVEUgPSBhcHAKK1RB
UkdFVCA9IHRzdF9xc2NyaXB0c3RyaW5nCitRVCArPSB0ZXN0bGliCitpbmNsdWRlKC4uL3Rlc3Rz
LnByaSkKKworU09VUkNFUyArPSB0c3RfcXNjcmlwdHN0cmluZy5jcHAKKwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHN0cmluZy90c3RfcXNjcmlwdHN0cmluZy5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3RyaW5nL3RzdF9xc2NyaXB0c3Ry
aW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmViZTVkCi0tLSAv
ZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHN0cmluZy90c3Rf
cXNjcmlwdHN0cmluZy5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgdHN0X3FzY3JpcHRzdHJpbmdfaAorI2RlZmluZSB0c3RfcXNjcmlwdHN0cmluZ19o
CisKKyNpbmNsdWRlICJxc2NyaXB0ZW5naW5lLmgiCisjaW5jbHVkZSAicXNjcmlwdHN0cmluZy5o
IgorI2luY2x1ZGUgPFF0Q29yZS9xaGFzaC5oPgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisK
K2NsYXNzIHRzdF9RU2NyaXB0U3RyaW5nIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CisKK3B1YmxpYzoKKyAgICB0c3RfUVNjcmlwdFN0cmluZygpOworICAgIHZpcnR1YWwgfnRzdF9R
U2NyaXB0U3RyaW5nKCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCB0ZXN0KCk7CisgICAg
dm9pZCBoYXNoKCk7CisgICAgdm9pZCB0b0FycmF5SW5kZXhfZGF0YSgpOworICAgIHZvaWQgdG9B
cnJheUluZGV4KCk7Cit9OworCit0c3RfUVNjcmlwdFN0cmluZzo6dHN0X1FTY3JpcHRTdHJpbmco
KQoreworfQorCit0c3RfUVNjcmlwdFN0cmluZzo6fnRzdF9RU2NyaXB0U3RyaW5nKCkKK3sKK30K
Kwordm9pZCB0c3RfUVNjcmlwdFN0cmluZzo6dGVzdCgpCit7CisgICAgUVNjcmlwdEVuZ2luZSBl
bmc7CisgICAgeworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0cjsKKyAgICAgICAgUVZFUklGWSgh
c3RyLmlzVmFsaWQoKSk7CisgICAgICAgIFFWRVJJRlkoc3RyID09IHN0cik7CisgICAgICAgIFFW
RVJJRlkoIShzdHIgIT0gc3RyKSk7CisgICAgICAgIFFWRVJJRlkoc3RyLnRvU3RyaW5nKCkuaXNO
dWxsKCkpOworCisgICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyMShzdHIpOworICAgICAgICBRVkVS
SUZZKCFzdHIxLmlzVmFsaWQoKSk7CisKKyAgICAgICAgUVNjcmlwdFN0cmluZyBzdHIyID0gc3Ry
OworICAgICAgICBRVkVSSUZZKCFzdHIyLmlzVmFsaWQoKSk7CisKKyAgICAgICAgUUNPTVBBUkUo
c3RyLnRvQXJyYXlJbmRleCgpLCBxdWludDMyKDB4ZmZmZmZmZmYpKTsKKyAgICB9CisgICAgZm9y
IChpbnQgeCA9IDA7IHggPCAyOyArK3gpIHsKKyAgICAgICAgUVN0cmluZyBjaWFvID0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiY2lhbyIpOworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0ciA9IGVuZy50
b1N0cmluZ0hhbmRsZShjaWFvKTsKKyAgICAgICAgUVZFUklGWShzdHIuaXNWYWxpZCgpKTsKKyAg
ICAgICAgUVZFUklGWShzdHIgPT0gc3RyKTsKKyAgICAgICAgUVZFUklGWSghKHN0ciAhPSBzdHIp
KTsKKyAgICAgICAgUUNPTVBBUkUoc3RyLnRvU3RyaW5nKCksIGNpYW8pOworCisgICAgICAgIFFT
Y3JpcHRTdHJpbmcgc3RyMShzdHIpOworICAgICAgICBRQ09NUEFSRShzdHIsIHN0cjEpOworCisg
ICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyMiA9IHN0cjsKKyAgICAgICAgUUNPTVBBUkUoc3RyLCBz
dHIyKTsKKworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0cjMgPSBlbmcudG9TdHJpbmdIYW5kbGUo
Y2lhbyk7CisgICAgICAgIFFWRVJJRlkoc3RyMy5pc1ZhbGlkKCkpOworICAgICAgICBRQ09NUEFS
RShzdHIsIHN0cjMpOworCisgICAgICAgIGVuZy5jb2xsZWN0R2FyYmFnZSgpOworCisgICAgICAg
IFFWRVJJRlkoc3RyLmlzVmFsaWQoKSk7CisgICAgICAgIFFDT01QQVJFKHN0ci50b1N0cmluZygp
LCBjaWFvKTsKKyAgICAgICAgUVZFUklGWShzdHIxLmlzVmFsaWQoKSk7CisgICAgICAgIFFDT01Q
QVJFKHN0cjEudG9TdHJpbmcoKSwgY2lhbyk7CisgICAgICAgIFFWRVJJRlkoc3RyMi5pc1ZhbGlk
KCkpOworICAgICAgICBRQ09NUEFSRShzdHIyLnRvU3RyaW5nKCksIGNpYW8pOworICAgICAgICBR
VkVSSUZZKHN0cjMuaXNWYWxpZCgpKTsKKyAgICAgICAgUUNPTVBBUkUoc3RyMy50b1N0cmluZygp
LCBjaWFvKTsKKyAgICB9CisgICAgeworICAgICAgICBRU2NyaXB0RW5naW5lKiBlbmcyID0gbmV3
IFFTY3JpcHRFbmdpbmU7CisgICAgICAgIFFTdHJpbmcgb25lID0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgib25lIik7CisgICAgICAgIFFTdHJpbmcgdHdvID0gUVN0cmluZzo6ZnJvbUxhdGluMSgidHdv
Iik7CisgICAgICAgIFFTY3JpcHRTdHJpbmcgb25lSW50ZXJuZWQgPSBlbmcyLT50b1N0cmluZ0hh
bmRsZShvbmUpOworICAgICAgICBRQ09NUEFSRShvbmVJbnRlcm5lZC50b1N0cmluZygpLCBvbmUp
OworICAgICAgICBRU2NyaXB0U3RyaW5nIHR3b0ludGVybmVkID0gZW5nMi0+dG9TdHJpbmdIYW5k
bGUodHdvKTsKKyAgICAgICAgUUNPTVBBUkUodHdvSW50ZXJuZWQudG9TdHJpbmcoKSwgdHdvKTsK
KyAgICAgICAgUVZFUklGWShvbmVJbnRlcm5lZCAhPSB0d29JbnRlcm5lZCk7CisgICAgICAgIFFW
RVJJRlkoIShvbmVJbnRlcm5lZCA9PSB0d29JbnRlcm5lZCkpOworCisgICAgICAgIGRlbGV0ZSBl
bmcyOworICAgIH0KK30KKwordm9pZCB0c3RfUVNjcmlwdFN0cmluZzo6aGFzaCgpCit7CisgICAg
UVNjcmlwdEVuZ2luZSBlbmdpbmU7CisgICAgUUhhc2g8UVNjcmlwdFN0cmluZywgaW50PiBzdHJp
bmdUb0ludDsKKyAgICBRU2NyaXB0U3RyaW5nIGZvbyA9IGVuZ2luZS50b1N0cmluZ0hhbmRsZSgi
Zm9vIik7CisKKyAgICBRU2NyaXB0U3RyaW5nIGJhciA9IGVuZ2luZS50b1N0cmluZ0hhbmRsZSgi
YmFyIik7CisgICAgUVZFUklGWSghc3RyaW5nVG9JbnQuY29udGFpbnMoZm9vKSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisgICAgICAgIHN0cmluZ1RvSW50Lmluc2Vy
dChmb28sIDEyMyk7CisgICAgUUNPTVBBUkUoc3RyaW5nVG9JbnQudmFsdWUoZm9vKSwgMTIzKTsK
KyAgICBRVkVSSUZZKCFzdHJpbmdUb0ludC5jb250YWlucyhiYXIpKTsKKyAgICBzdHJpbmdUb0lu
dC5pbnNlcnQoYmFyLCA0NTYpOworICAgIFFDT01QQVJFKHN0cmluZ1RvSW50LnZhbHVlKGJhciks
IDQ1Nik7CisgICAgUUNPTVBBUkUoc3RyaW5nVG9JbnQudmFsdWUoZm9vKSwgMTIzKTsKK30KKwor
dm9pZCB0c3RfUVNjcmlwdFN0cmluZzo6dG9BcnJheUluZGV4X2RhdGEoKQoreworICAgIFFUZXN0
OjphZGRDb2x1bW48UVN0cmluZz4oImlucHV0Iik7CisgICAgUVRlc3Q6OmFkZENvbHVtbjxib29s
PigiZXhwZWN0U3VjY2VzcyIpOworICAgIFFUZXN0OjphZGRDb2x1bW48cXVpbnQzMj4oImV4cGVj
dGVkSW5kZXgiKTsKKyAgICBRVGVzdDo6bmV3Um93KCJmb28iKSA8PCBRU3RyaW5nOjpmcm9tTGF0
aW4xKCJmb28iKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0Ojpu
ZXdSb3coImVtcHR5IikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiIikgPDwgZmFsc2UgPDwgcXVp
bnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCIwIikgPDwgUVN0cmluZzo6ZnJv
bUxhdGluMSgiMCIpIDw8IHRydWUgPDwgcXVpbnQzMigwKTsKKyAgICBRVGVzdDo6bmV3Um93KCIw
MCIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjAwIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZm
ZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCIxIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgi
MSIpIDw8IHRydWUgPDwgcXVpbnQzMigxKTsKKyAgICBRVGVzdDo6bmV3Um93KCIxMjMiKSA8PCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCIxMjMiKSA8PCB0cnVlIDw8IHF1aW50MzIoMTIzKTsKKyAgICBR
VGVzdDo6bmV3Um93KCItMSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIi0xIikgPDwgZmFsc2Ug
PDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCIwYSIpIDw8IFFTdHJp
bmc6OmZyb21MYXRpbjEoIjBhIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAg
ICBRVGVzdDo6bmV3Um93KCIweDEiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIweDEiKSA8PCBm
YWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjAxIikgPDwg
UVN0cmluZzo6ZnJvbUxhdGluMSgiMDEiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYp
OworICAgIFFUZXN0OjpuZXdSb3coIjEwMWEiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIxMDFh
IikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCI0
Mjk0OTY3Mjk0IikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiNDI5NDk2NzI5NCIpIDw8IHRydWUg
PDwgcXVpbnQzMigweGZmZmZmZmZlKTsKKyAgICBRVGVzdDo6bmV3Um93KCI0Mjk0OTY3Mjk1Iikg
PDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiNDI5NDk2NzI5NSIpIDw8IGZhbHNlIDw8IHF1aW50MzIo
MHhmZmZmZmZmZik7CisKK30KKwordm9pZCB0c3RfUVNjcmlwdFN0cmluZzo6dG9BcnJheUluZGV4
KCkKK3sKKyAgICBRRkVUQ0goUVN0cmluZywgaW5wdXQpOworICAgIFFGRVRDSChib29sLCBleHBl
Y3RTdWNjZXNzKTsKKyAgICBRRkVUQ0gocXVpbnQzMiwgZXhwZWN0ZWRJbmRleCk7CisgICAgUVNj
cmlwdEVuZ2luZSBlbmdpbmU7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCAyOyArK3gpIHsKKyAg
ICAgICAgYm9vbCBpc0FycmF5SW5kZXg7CisgICAgICAgIGJvb2wqIHB0ciA9ICgheCkgPyAmaXNB
cnJheUluZGV4IDogKGJvb2wqKTA7CisgICAgICAgIHF1aW50MzIgcmVzdWx0ID0gZW5naW5lLnRv
U3RyaW5nSGFuZGxlKGlucHV0KS50b0FycmF5SW5kZXgocHRyKTsKKyAgICAgICAgaWYgKCF4KQor
ICAgICAgICAgICAgUUNPTVBBUkUoaXNBcnJheUluZGV4LCBleHBlY3RTdWNjZXNzKTsKKyAgICAg
ICAgUUNPTVBBUkUocmVzdWx0LCBleHBlY3RlZEluZGV4KTsKKyAgICB9Cit9CisKK1FURVNUX01B
SU4odHN0X1FTY3JpcHRTdHJpbmcpCisjaW5jbHVkZSAidHN0X3FzY3JpcHRzdHJpbmcubW9jIgor
CisjZW5kaWYgLy8gdHN0X3FzY3JpcHRzdHJpbmdfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvcXQvdGVzdHMvdGVzdHMucHJvIGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJv
CmluZGV4IDZlNWVkYjEuLjdjM2Y1OTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L3Rl
c3RzL3Rlc3RzLnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8KQEAg
LTEsMyArMSw0IEBACiBURU1QTEFURSA9IHN1YmRpcnMKIFNVQkRJUlMgPSAgIHFzY3JpcHRlbmdp
bmUgXAotICAgICAgICAgICAgcXNjcmlwdHZhbHVlCisgICAgICAgICAgICBxc2NyaXB0dmFsdWUg
XAorICAgICAgICAgICAgcXNjcmlwdHN0cmluZwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49286</attachid>
            <date>2010-02-23 06:29:19 -0800</date>
            <delta_ts>2010-03-02 13:20:28 -0800</delta_ts>
            <desc>Fix v4</desc>
            <filename>qssv4.diff</filename>
            <type>text/plain</type>
            <size>22584</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBiY2MxY2M4Li45Yjg2MDRjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMTAtMDItMTEgIEplZHJ6ZWogTm93YWNraSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50
cm9kdWNlIGEgbmV3IGNsYXNzOyBRU2NyaXB0U3RyaW5nLgorCisgICAgICAgIFRoZSBRU2NyaXB0
U3RyaW5nIGNsYXNzIHNob3VsZCBhY3QgYXMgYSBoYW5kbGUgdG8gImludGVybmVkIgorICAgICAg
ICBzdHJpbmdzIGluIGEgUVNjcmlwdEVuZ2luZS4KKworICAgICAgICBbUXRdIFF0U2NyaXB0IHNo
b3VsZCBwcm92aWRlIFFTY3JpcHRTdHJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0ODQzCisKKyAgICAgICAgKiBxdC9hcGkvUXRTY3JpcHQucHJv
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmU6OnRvU3RyaW5nSGFuZGxlKToKKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdGVuZ2luZS5o
OgorICAgICAgICAqIHF0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaDoKKyAgICAgICAgKFFTY3JpcHRF
bmdpbmVQcml2YXRlOjp0b1N0cmluZ0hhbmRsZSk6CisgICAgICAgICogcXQvYXBpL3FzY3JpcHRz
dHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OlFTY3JpcHRTdHJpbmcp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6flFTY3JpcHRTdHJpbmcpOgorICAgICAgICAoUVNj
cmlwdFN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OmlzVmFsaWQp
OgorICAgICAgICAoUVNjcmlwdFN0cmluZzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmc6OnRvQXJyYXlJbmRl
eCk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nOjp0b1N0cmluZyk6CisgICAgICAgIChRU2NyaXB0
U3RyaW5nOjpvcGVyYXRvciBRU3RyaW5nKToKKyAgICAgICAgKHFIYXNoKToKKyAgICAgICAgKiBx
dC9hcGkvcXNjcmlwdHN0cmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBxdC9hcGkvcXNjcmlwdHN0
cmluZ19wLmg6IEFkZGVkLgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OlFTY3JpcHRT
dHJpbmdQcml2YXRlKToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp+UVNjcmlwdFN0
cmluZ1ByaXZhdGUpOgorICAgICAgICAoUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldCk6CisgICAg
ICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChRU2NyaXB0U3Ry
aW5nUHJpdmF0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6dG9BcnJheUluZGV4
KToKKyAgICAgICAgKFFTY3JpcHRTdHJpbmdQcml2YXRlOjp0b1N0cmluZyk6CisgICAgICAgIChR
U2NyaXB0U3RyaW5nUHJpdmF0ZTo6aWQpOgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRzdHJp
bmcvcXNjcmlwdHN0cmluZy5wcm86IEFkZGVkLgorICAgICAgICAqIHF0L3Rlc3RzL3FzY3JpcHRz
dHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0c3RfUVNjcmlwdFN0cmluZyk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
fnRzdF9RU2NyaXB0U3RyaW5nKToKKyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjp0ZXN0KToK
KyAgICAgICAgKHRzdF9RU2NyaXB0U3RyaW5nOjpoYXNoKToKKyAgICAgICAgKHRzdF9RU2NyaXB0
U3RyaW5nOjp0b0FycmF5SW5kZXhfZGF0YSk6CisgICAgICAgICh0c3RfUVNjcmlwdFN0cmluZzo6
dG9BcnJheUluZGV4KToKKyAgICAgICAgKiBxdC90ZXN0cy90ZXN0cy5wcm86CisKIDIwMTAtMDIt
MTAgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQv
YXBpL1F0U2NyaXB0LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9RdFNjcmlwdC5wcm8KaW5k
ZXggYzg3ZWFmNC4uMjQ2YTBiYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL1F0
U2NyaXB0LnBybworKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvUXRTY3JpcHQucHJvCkBAIC0y
MSw2ICsyMSw3IEBAIElOQ0xVREVQQVRIICs9ICQkUFdELy4uLy4uL0FQSQogU09VUkNFUyArPSAg
JCRQV0QvcXNjcmlwdGVuZ2luZS5jcHAgXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGVuZ2lu
ZV9wLmNwcCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0dmFsdWUuY3BwIFwKKyAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHRzdHJpbmcuY3BwIFwKIAogSEVBREVSUyArPSAgJCRQV0QvcXRzY3Jp
cHRnbG9iYWwuaCBcCiAgICAgICAgICAgICAkJFBXRC9xc2NyaXB0ZW5naW5lLmggXApAQCAtMjgs
NiArMjksOCBAQCBIRUFERVJTICs9ICAkJFBXRC9xdHNjcmlwdGdsb2JhbC5oIFwKICAgICAgICAg
ICAgICQkUFdEL3FzY3JpcHR2YWx1ZS5oIFwKICAgICAgICAgICAgICQkUFdEL3FzY3JpcHR2YWx1
ZV9wLmggXAogICAgICAgICAgICAgJCRQV0QvcXNjcmlwdGNvbnZlcnRlcl9wLmggXAorICAgICAg
ICAgICAgJCRQV0QvcXNjcmlwdHN0cmluZy5oIFwKKyAgICAgICAgICAgICQkUFdEL3FzY3JpcHRz
dHJpbmdfcC5oIFwKIAogCiAhc3RhdGljOiBERUZJTkVTICs9IFFUX01BS0VETEwKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaCBiL0phdmFTY3Jp
cHRDb3JlL3F0L2FwaS9xc2NyaXB0Y29udmVydGVyX3AuaAppbmRleCBjM2NhNDFmLi44MjFkYzhk
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGNvbnZlcnRlcl9wLmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRjb252ZXJ0ZXJfcC5oCkBAIC0yMSw2
ICsyMSw3IEBACiAjZGVmaW5lIHFzY3JpcHRjb252ZXJ0ZXJfcF9oCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FudW1lcmljLmg+CiAj
aW5jbHVkZSA8UXRDb3JlL3FzdHJpbmcuaD4KIAogLyoKQEAgLTMzLDYgKzM0LDE5IEBACiAqLwog
Y2xhc3MgUVNjcmlwdENvbnZlcnRlciB7CiBwdWJsaWM6CisgICAgc3RhdGljIHF1aW50MzIgdG9B
cnJheUluZGV4KGNvbnN0IEpTU3RyaW5nUmVmIGpzc3RyaW5nKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZXhwb3J0ZWQgYnkgSlNDIEMgQVBJLgorICAg
ICAgICBRU3RyaW5nIHFzdHJpbmcgPSB0b1N0cmluZyhqc3N0cmluZyk7CisKKyAgICAgICAgYm9v
bCBvazsKKyAgICAgICAgcXVpbnQzMiBpZHggPSBxc3RyaW5nLnRvVUludCgmb2spOworICAgICAg
ICBpZiAoIW9rIHx8IHRvU3RyaW5nKGlkeCkgIT0gcXN0cmluZykKKyAgICAgICAgICAgIGlkeCA9
IDB4ZmZmZmZmZmY7CisKKyAgICAgICAgcmV0dXJuIGlkeDsKKyAgICB9CisKICAgICBzdGF0aWMg
UVN0cmluZyB0b1N0cmluZyhjb25zdCBKU1N0cmluZ1JlZiBzdHIpCiAgICAgewogICAgICAgICBy
ZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oSlNTdHJpbmdHZXRD
aGFyYWN0ZXJzUHRyKHN0cikpLCBKU1N0cmluZ0dldExlbmd0aChzdHIpKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcAppbmRleCBmYmViOTAyLi40MTYzNGY0IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAKKysrIGIvSmF2YVNj
cmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmUuY3BwCkBAIC04OCw2ICs4OCwxOSBAQCB2b2lk
IFFTY3JpcHRFbmdpbmU6OmNvbGxlY3RHYXJiYWdlKCkKIH0KIAogLyohCisgIFJldHVybnMgYSBo
YW5kbGUgdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbiBzdHJpbmcsIFxhIHN0ci4KKworICBRU2Ny
aXB0U3RyaW5nIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgbG9vayB1cCBwcm9wZXJ0aWVzLCBhbmQK
KyAgY29tcGFyZSBwcm9wZXJ0eSBuYW1lcywgb2Ygc2NyaXB0IG9iamVjdHMuCisKKyAgXHNhIFFT
Y3JpcHRWYWx1ZTo6cHJvcGVydHkoKQorKi8KK1FTY3JpcHRTdHJpbmcgUVNjcmlwdEVuZ2luZTo6
dG9TdHJpbmdIYW5kbGUoY29uc3QgUVN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBRU2NyaXB0
U3RyaW5nUHJpdmF0ZTo6Z2V0KGRfcHRyLT50b1N0cmluZ0hhbmRsZShzdHIpKTsKK30KKworLyoh
CiAgIFJldHVybnMgYSBRU2NyaXB0VmFsdWUgb2YgdGhlIHByaW1pdGl2ZSB0eXBlIE51bGwuCiAK
ICAgXHNhIHVuZGVmaW5lZFZhbHVlKCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5o
CmluZGV4IGI4YmQ1ZTYuLmJhOWE5YmMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3F0L2Fw
aS9xc2NyaXB0ZW5naW5lLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdp
bmUuaApAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBxc2NyaXB0ZW5naW5lX2gKICNkZWZpbmUg
cXNjcmlwdGVuZ2luZV9oCiAKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nLmgiCiAjaW5jbHVkZSA8
UXRDb3JlL3FvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4KICNpbmNs
dWRlIDxRdENvcmUvcXN0cmluZy5oPgpAQCAtMzgsNiArMzksOCBAQCBwdWJsaWM6CiAgICAgUVNj
cmlwdFZhbHVlIGV2YWx1YXRlKGNvbnN0IFFTdHJpbmcmIHByb2dyYW0sIGNvbnN0IFFTdHJpbmcm
IGZpbGVOYW1lID0gUVN0cmluZygpLCBpbnQgbGluZU51bWJlciA9IDEpOwogICAgIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKIAorICAgIFFTY3JpcHRTdHJpbmcgdG9TdHJpbmdIYW5kbGUoY29uc3Qg
UVN0cmluZyYgc3RyKTsKKwogICAgIFFTY3JpcHRWYWx1ZSBudWxsVmFsdWUoKTsKICAgICBRU2Ny
aXB0VmFsdWUgdW5kZWZpbmVkVmFsdWUoKTsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkv
cXNjcmlwdGVuZ2luZV9wLmgKaW5kZXggOGUyN2M0Mi4uYzU4M2RhYyAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRlbmdpbmVfcC5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3F0L2FwaS9xc2NyaXB0ZW5naW5lX3AuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAi
cXNjcmlwdGNvbnZlcnRlcl9wLmgiCiAjaW5jbHVkZSAicXNjcmlwdGVuZ2luZS5oIgorI2luY2x1
ZGUgInFzY3JpcHRzdHJpbmdfcC5oIgogI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDxRdENvcmUvcXNoYXJl
ZGRhdGEuaD4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGljOgogICAgIGlubGluZSBKU1ZhbHVlUmVm
IG1ha2VKU1ZhbHVlKGJvb2wgbnVtYmVyKSBjb25zdDsKICAgICBpbmxpbmUgSlNWYWx1ZVJlZiBt
YWtlSlNWYWx1ZShRU2NyaXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgY29uc3Q7CiAKKyAg
ICBpbmxpbmUgUVNjcmlwdFN0cmluZ1ByaXZhdGUqIHRvU3RyaW5nSGFuZGxlKGNvbnN0IFFTdHJp
bmcmIHN0cikgY29uc3Q7CisKICAgICBpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQo
KSBjb25zdDsKIHByaXZhdGU6CiAgICAgUVNjcmlwdEVuZ2luZSogcV9wdHI7CkBAIC05MCw2ICs5
MywxMSBAQCBKU1ZhbHVlUmVmIFFTY3JpcHRFbmdpbmVQcml2YXRlOjptYWtlSlNWYWx1ZShRU2Ny
aXB0VmFsdWU6OlNwZWNpYWxWYWx1ZSB2YWx1ZSkgYwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChtX2NvbnRleHQpOwogfQogCitRU2NyaXB0U3RyaW5nUHJpdmF0ZSogUVNjcmlwdEVu
Z2luZVByaXZhdGU6OnRvU3RyaW5nSGFuZGxlKGNvbnN0IFFTdHJpbmcmIHN0cikgY29uc3QKK3sK
KyAgICByZXR1cm4gbmV3IFFTY3JpcHRTdHJpbmdQcml2YXRlKHN0cik7Cit9CisKIEpTR2xvYmFs
Q29udGV4dFJlZiBRU2NyaXB0RW5naW5lUHJpdmF0ZTo6Y29udGV4dCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2Ny
aXB0c3RyaW5nLmNwcCBiL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3RyaW5nLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2MwM2M1Ci0tLSAvZGV2L251bGwK
KysrIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmcuY3BwCkBAIC0wLDAgKzEs
MTMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJxc2NyaXB0c3RyaW5nLmgiCisKKyNpbmNsdWRlICJxc2NyaXB0c3RyaW5nX3AuaCIKKyNp
bmNsdWRlIDxRdENvcmUvcWhhc2guaD4KKworLyohCisgIENvbnN0cnVjdHMgYW4gaW52YWxpZCBR
U2NyaXB0U3RyaW5nLgorKi8KK1FTY3JpcHRTdHJpbmc6OlFTY3JpcHRTdHJpbmcoKQorICAgIDog
ZF9wdHIobmV3IFFTY3JpcHRTdHJpbmdQcml2YXRlKCkpCit7Cit9CisvKiEKKyAgQ29uc3RydWN0
cyBhbiBRU2NyaXB0U3RyaW5nIGZyb20gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24KKyAgXGludGVy
bmFsCisqLworUVNjcmlwdFN0cmluZzo6UVNjcmlwdFN0cmluZyhRU2NyaXB0U3RyaW5nUHJpdmF0
ZSogZCkKKyAgICA6IGRfcHRyKGQpCit7Cit9CisKKy8qIQorICBDb25zdHJ1Y3RzIGEgbmV3IFFT
Y3JpcHRTdHJpbmcgdGhhdCBpcyBhIGNvcHkgb2YgXGEgb3RoZXIuCisqLworUVNjcmlwdFN0cmlu
Zzo6UVNjcmlwdFN0cmluZyhjb25zdCBRU2NyaXB0U3RyaW5nJiBvdGhlcikKK3sKKyAgICBkX3B0
ciA9IG90aGVyLmRfcHRyOworfQorCisvKiEKKyAgRGVzdHJveXMgdGhpcyBRU2NyaXB0U3RyaW5n
LgorKi8KK1FTY3JpcHRTdHJpbmc6On5RU2NyaXB0U3RyaW5nKCkKK3sKK30KKworLyohCisgIEFz
c2lnbnMgdGhlIFxhIG90aGVyIHZhbHVlIHRvIHRoaXMgUVNjcmlwdFN0cmluZy4KKyovCitRU2Ny
aXB0U3RyaW5nJiBRU2NyaXB0U3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgUVNjcmlwdFN0cmluZyYg
b3RoZXIpCit7CisgICAgZF9wdHIgPSBvdGhlci5kX3B0cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKKy8qIQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0U3RyaW5nIGlzIHZhbGlkOyBv
dGhlcndpc2UKKyAgcmV0dXJucyBmYWxzZS4KKyovCitib29sIFFTY3JpcHRTdHJpbmc6OmlzVmFs
aWQoKSBjb25zdAoreworICAgIHJldHVybiBkX3B0ci0+aXNWYWxpZCgpOworfQorCisvKiEKKyAg
UmV0dXJucyB0cnVlIGlmIHRoaXMgUVNjcmlwdFN0cmluZyBpcyBlcXVhbCB0byBcYSBvdGhlcjsK
KyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0U3RyaW5nOjpvcGVy
YXRvcj09KGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBk
X3B0ciA9PSBvdGhlci5kX3B0ciB8fCAqZF9wdHIgPT0gKihvdGhlci5kX3B0cik7Cit9CisKKy8q
IQorICBSZXR1cm5zIHRydWUgaWYgdGhpcyBRU2NyaXB0U3RyaW5nIGlzIG5vdCBlcXVhbCB0byBc
YSBvdGhlcjsKKyAgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisqLworYm9vbCBRU2NyaXB0U3Ry
aW5nOjpvcGVyYXRvciE9KGNvbnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBkX3B0ciAhPSBvdGhlci5kX3B0ciB8fCAqZF9wdHIgIT0gKihvdGhlci5kX3B0cik7
Cit9CisKKy8qIQorICBBdHRlbXB0cyB0byBjb252ZXJ0IHRoaXMgUVNjcmlwdFN0cmluZyB0byBh
IFF0U2NyaXB0IGFycmF5IGluZGV4LAorICBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgorCisgIElm
IGEgY29udmVyc2lvbiBlcnJvciBvY2N1cnMsICpcYXtva30gaXMgc2V0IHRvIGZhbHNlOyBvdGhl
cndpc2UKKyAgKlxhe29rfSBpcyBzZXQgdG8gdHJ1ZS4KKyovCitxdWludDMyIFFTY3JpcHRTdHJp
bmc6OnRvQXJyYXlJbmRleChib29sKiBvaykgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRv
QXJyYXlJbmRleChvayk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCB0aGlz
IFFTY3JpcHRTdHJpbmcgcmVwcmVzZW50cywgb3IgYQorICBudWxsIHN0cmluZyBpZiB0aGlzIFFT
Y3JpcHRTdHJpbmcgaXMgbm90IHZhbGlkLgorCisgIFxzYSBpc1ZhbGlkKCkKKyovCitRU3RyaW5n
IFFTY3JpcHRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZF9wdHItPnRv
U3RyaW5nKCk7Cit9CisKKy8qIQorICBSZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCB0aGlzIFFTY3Jp
cHRTdHJpbmcgcmVwcmVzZW50cywgb3IgYQorICBudWxsIHN0cmluZyBpZiB0aGlzIFFTY3JpcHRT
dHJpbmcgaXMgbm90IHZhbGlkLgorCisgIFxzYSB0b1N0cmluZygpCisqLworUVNjcmlwdFN0cmlu
Zzo6b3BlcmF0b3IgUVN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRfcHRyLT50b1N0cmlu
ZygpOworfQorCit1aW50IHFIYXNoKGNvbnN0IFFTY3JpcHRTdHJpbmcmIGtleSkKK3sKKyAgICBy
ZXR1cm4gcUhhc2goUVNjcmlwdFN0cmluZ1ByaXZhdGU6OmdldChrZXkpLT5pZCgpKTsKK30KZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L2FwaS9xc2NyaXB0c3RyaW5nLmggYi9KYXZhU2Ny
aXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjE2NTkzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9h
cGkvcXNjcmlwdHN0cmluZy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgcXNjcmlwdHN0cmluZ19oCisjZGVmaW5lIHFzY3JpcHRzdHJpbmdfaAorCisjaW5j
bHVkZSAicXRzY3JpcHRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZGRhdGEuaD4K
KyNpbmNsdWRlIDxRdENvcmUvcXN0cmluZy5oPgorCitjbGFzcyBRU2NyaXB0U3RyaW5nUHJpdmF0
ZTsKK3R5cGVkZWYgUUV4cGxpY2l0bHlTaGFyZWREYXRhUG9pbnRlcjxRU2NyaXB0U3RyaW5nUHJp
dmF0ZT4gUVNjcmlwdFN0cmluZ1B0cjsKKworY2xhc3MgUV9KQVZBU0NSSVBUX0VYUE9SVCBRU2Ny
aXB0U3RyaW5nIHsKK3B1YmxpYzoKKyAgICBRU2NyaXB0U3RyaW5nKCk7CisgICAgUVNjcmlwdFN0
cmluZyhjb25zdCBRU2NyaXB0U3RyaW5nJiBvdGhlcik7CisgICAgflFTY3JpcHRTdHJpbmcoKTsK
KworICAgIFFTY3JpcHRTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBRU2NyaXB0U3RyaW5nJiBvdGhl
cik7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBRU2NyaXB0U3RyaW5nJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFFTY3JpcHRTdHJpbmcmIG90aGVyKSBjb25zdDsKKworICAgIHF1aW50MzIgdG9BcnJheUlu
ZGV4KGJvb2wqIG9rID0gMCkgY29uc3Q7CisKKyAgICBRU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7
CisgICAgb3BlcmF0b3IgUVN0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFFTY3JpcHRT
dHJpbmcoUVNjcmlwdFN0cmluZ1ByaXZhdGUqIGQpOworCisgICAgUVNjcmlwdFN0cmluZ1B0ciBk
X3B0cjsKKworICAgIGZyaWVuZCBjbGFzcyBRU2NyaXB0U3RyaW5nUHJpdmF0ZTsKK307CisKK3Vp
bnQgcUhhc2goY29uc3QgUVNjcmlwdFN0cmluZyYga2V5KTsKKworI2VuZGlmIC8vIHFzY3JpcHRz
dHJpbmdfaApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmdf
cC5oIGIvSmF2YVNjcmlwdENvcmUvcXQvYXBpL3FzY3JpcHRzdHJpbmdfcC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZmQxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZh
U2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHN0cmluZ19wLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgcXNjcmlwdHN0cmluZ19wX2gKKyNkZWZpbmUgcXNj
cmlwdHN0cmluZ19wX2gKKworI2luY2x1ZGUgInFzY3JpcHRjb252ZXJ0ZXJfcC5oIgorI2luY2x1
ZGUgInFzY3JpcHRzdHJpbmcuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FudW1lcmljLmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzaGFy
ZWRkYXRhLmg+CisKK2NsYXNzIFFTY3JpcHRTdHJpbmdQcml2YXRlIDogcHVibGljIFFTaGFyZWRE
YXRhIHsKK3B1YmxpYzoKKyAgICBpbmxpbmUgUVNjcmlwdFN0cmluZ1ByaXZhdGUoKTsKKyAgICBp
bmxpbmUgUVNjcmlwdFN0cmluZ1ByaXZhdGUoY29uc3QgUVN0cmluZyYgcXRzdHJpbmcpOworICAg
IGlubGluZSB+UVNjcmlwdFN0cmluZ1ByaXZhdGUoKTsKKworICAgIHN0YXRpYyBpbmxpbmUgUVNj
cmlwdFN0cmluZyBnZXQoUVNjcmlwdFN0cmluZ1ByaXZhdGUqIGQpOworICAgIHN0YXRpYyBpbmxp
bmUgUVNjcmlwdFN0cmluZ1B0ciBnZXQoY29uc3QgUVNjcmlwdFN0cmluZyYgcCk7CisKKyAgICBp
bmxpbmUgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFFTY3JpcHRTdHJpbmdQcml2YXRlJiBvdGhlcikgY29uc3Q7CisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBRU2NyaXB0U3RyaW5nUHJpdmF0ZSYgb3RoZXIpIGNvbnN0Owor
CisgICAgaW5saW5lIHF1aW50MzIgdG9BcnJheUluZGV4KGJvb2wqIG9rID0gMCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUVN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgaW5saW5lIHF1aW50
NjQgaWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBKU1N0cmluZ1JlZiBtX3N0cmluZzsKK307
CisKKworUVNjcmlwdFN0cmluZ1ByaXZhdGU6OlFTY3JpcHRTdHJpbmdQcml2YXRlKCkKKyAgICA6
IG1fc3RyaW5nKDApCit7fQorCitRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6UVNjcmlwdFN0cmluZ1By
aXZhdGUoY29uc3QgUVN0cmluZyYgcXRzdHJpbmcpCisgICAgOiBtX3N0cmluZyhKU1N0cmluZ1Jl
dGFpbihRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhxdHN0cmluZykpKQore30KKworUVNjcmlw
dFN0cmluZ1ByaXZhdGU6On5RU2NyaXB0U3RyaW5nUHJpdmF0ZSgpCit7CisgICAgaWYgKGlzVmFs
aWQoKSkKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKG1fc3RyaW5nKTsKK30KKworUVNjcmlwdFN0
cmluZyBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6Z2V0KFFTY3JpcHRTdHJpbmdQcml2YXRlKiBkKQor
eworICAgIFFfQVNTRVJUKGQpOworICAgIHJldHVybiBRU2NyaXB0U3RyaW5nKGQpOworfQorCitR
U2NyaXB0U3RyaW5nUHRyIFFTY3JpcHRTdHJpbmdQcml2YXRlOjpnZXQoY29uc3QgUVNjcmlwdFN0
cmluZyYgcCkKK3sKKyAgICByZXR1cm4gcC5kX3B0cjsKK30KKworYm9vbCBRU2NyaXB0U3RyaW5n
UHJpdmF0ZTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RyaW5nOworfQorCiti
b29sIFFTY3JpcHRTdHJpbmdQcml2YXRlOjpvcGVyYXRvcj09KGNvbnN0IFFTY3JpcHRTdHJpbmdQ
cml2YXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXNWYWxpZCgpICYmIG90aGVyLmlz
VmFsaWQoKSAmJiBKU1N0cmluZ0lzRXF1YWwobV9zdHJpbmcsIG90aGVyLm1fc3RyaW5nKTsKK30K
KworYm9vbCBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6b3BlcmF0b3IhPShjb25zdCBRU2NyaXB0U3Ry
aW5nUHJpdmF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzVmFsaWQoKSAmJiBvdGhl
ci5pc1ZhbGlkKCkgJiYgIUpTU3RyaW5nSXNFcXVhbChtX3N0cmluZywgb3RoZXIubV9zdHJpbmcp
OworfQorCitxdWludDMyIFFTY3JpcHRTdHJpbmdQcml2YXRlOjp0b0FycmF5SW5kZXgoYm9vbCog
b2spIGNvbnN0Cit7CisgICAgcXVpbnQzMiBpZHggPSBRU2NyaXB0Q29udmVydGVyOjp0b0FycmF5
SW5kZXgobV9zdHJpbmcpOworICAgIGlmIChvaykKKyAgICAgICAgKm9rID0gKGlkeCAhPSAweGZm
ZmZmZmZmKTsKKyAgICByZXR1cm4gaWR4OworfQorCitRU3RyaW5nIFFTY3JpcHRTdHJpbmdQcml2
YXRlOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFTY3JpcHRDb252ZXJ0ZXI6OnRv
U3RyaW5nKG1fc3RyaW5nKTsKK30KKworcXVpbnQ2NCBRU2NyaXB0U3RyaW5nUHJpdmF0ZTo6aWQo
KSBjb25zdAoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHF1aW50MzI+KG1fc3RyaW5n
KTsKK30KKworI2VuZGlmIC8vIHFzY3JpcHRzdHJpbmdfcF9oCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9xdC90ZXN0cy9xc2NyaXB0c3RyaW5nL3FzY3JpcHRzdHJpbmcucHJvIGIvSmF2YVNj
cmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHN0cmluZy9xc2NyaXB0c3RyaW5nLnBybwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQ5YjdjCi0tLSAvZGV2L251bGwKKysrIGIv
SmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvcXNjcmlwdHN0cmluZy9xc2NyaXB0c3RyaW5nLnBybwpA
QCAtMCwwICsxLDcgQEAKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSB0c3RfcXNjcmlwdHN0cmlu
ZworUVQgKz0gdGVzdGxpYgoraW5jbHVkZSguLi90ZXN0cy5wcmkpCisKK1NPVVJDRVMgKz0gdHN0
X3FzY3JpcHRzdHJpbmcuY3BwCisKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3Rz
L3FzY3JpcHRzdHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwIGIvSmF2YVNjcmlwdENvcmUvcXQv
dGVzdHMvcXNjcmlwdHN0cmluZy90c3RfcXNjcmlwdHN0cmluZy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzMTgzNQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3F0L3Rlc3RzL3FzY3JpcHRzdHJpbmcvdHN0X3FzY3JpcHRzdHJpbmcuY3BwCkBAIC0w
LDAgKzEsMTc1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIHRzdF9xc2NyaXB0c3Ry
aW5nX2gKKyNkZWZpbmUgdHN0X3FzY3JpcHRzdHJpbmdfaAorCisjaW5jbHVkZSAicXNjcmlwdGVu
Z2luZS5oIgorI2luY2x1ZGUgInFzY3JpcHRzdHJpbmcuaCIKKyNpbmNsdWRlIDxRdENvcmUvcWhh
c2guaD4KKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitjbGFzcyB0c3RfUVNjcmlwdFN0cmlu
ZyA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgdHN0X1FT
Y3JpcHRTdHJpbmcoKTsKKyAgICB2aXJ0dWFsIH50c3RfUVNjcmlwdFN0cmluZygpOworCitwcml2
YXRlIHNsb3RzOgorICAgIHZvaWQgdGVzdCgpOworICAgIHZvaWQgaGFzaCgpOworICAgIHZvaWQg
dG9BcnJheUluZGV4X2RhdGEoKTsKKyAgICB2b2lkIHRvQXJyYXlJbmRleCgpOworfTsKKwordHN0
X1FTY3JpcHRTdHJpbmc6OnRzdF9RU2NyaXB0U3RyaW5nKCkKK3sKK30KKwordHN0X1FTY3JpcHRT
dHJpbmc6On50c3RfUVNjcmlwdFN0cmluZygpCit7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRTdHJp
bmc6OnRlc3QoKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5nOworICAgIHsKKyAgICAgICAgUVNj
cmlwdFN0cmluZyBzdHI7CisgICAgICAgIFFWRVJJRlkoIXN0ci5pc1ZhbGlkKCkpOworICAgICAg
ICBRVkVSSUZZKHN0ciA9PSBzdHIpOworICAgICAgICBRVkVSSUZZKCEoc3RyICE9IHN0cikpOwor
ICAgICAgICBRVkVSSUZZKHN0ci50b1N0cmluZygpLmlzTnVsbCgpKTsKKworICAgICAgICBRU2Ny
aXB0U3RyaW5nIHN0cjEoc3RyKTsKKyAgICAgICAgUVZFUklGWSghc3RyMS5pc1ZhbGlkKCkpOwor
CisgICAgICAgIFFTY3JpcHRTdHJpbmcgc3RyMiA9IHN0cjsKKyAgICAgICAgUVZFUklGWSghc3Ry
Mi5pc1ZhbGlkKCkpOworCisgICAgICAgIFFDT01QQVJFKHN0ci50b0FycmF5SW5kZXgoKSwgcXVp
bnQzMigweGZmZmZmZmZmKSk7CisgICAgfQorICAgIGZvciAoaW50IHggPSAwOyB4IDwgMjsgKyt4
KSB7CisgICAgICAgIFFTdHJpbmcgY2lhbyA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImNpYW8iKTsK
KyAgICAgICAgUVNjcmlwdFN0cmluZyBzdHIgPSBlbmcudG9TdHJpbmdIYW5kbGUoY2lhbyk7Cisg
ICAgICAgIFFWRVJJRlkoc3RyLmlzVmFsaWQoKSk7CisgICAgICAgIFFWRVJJRlkoc3RyID09IHN0
cik7CisgICAgICAgIFFWRVJJRlkoIShzdHIgIT0gc3RyKSk7CisgICAgICAgIFFDT01QQVJFKHN0
ci50b1N0cmluZygpLCBjaWFvKTsKKworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0cjEoc3RyKTsK
KyAgICAgICAgUUNPTVBBUkUoc3RyLCBzdHIxKTsKKworICAgICAgICBRU2NyaXB0U3RyaW5nIHN0
cjIgPSBzdHI7CisgICAgICAgIFFDT01QQVJFKHN0ciwgc3RyMik7CisKKyAgICAgICAgUVNjcmlw
dFN0cmluZyBzdHIzID0gZW5nLnRvU3RyaW5nSGFuZGxlKGNpYW8pOworICAgICAgICBRVkVSSUZZ
KHN0cjMuaXNWYWxpZCgpKTsKKyAgICAgICAgUUNPTVBBUkUoc3RyLCBzdHIzKTsKKworICAgICAg
ICBlbmcuY29sbGVjdEdhcmJhZ2UoKTsKKworICAgICAgICBRVkVSSUZZKHN0ci5pc1ZhbGlkKCkp
OworICAgICAgICBRQ09NUEFSRShzdHIudG9TdHJpbmcoKSwgY2lhbyk7CisgICAgICAgIFFWRVJJ
Rlkoc3RyMS5pc1ZhbGlkKCkpOworICAgICAgICBRQ09NUEFSRShzdHIxLnRvU3RyaW5nKCksIGNp
YW8pOworICAgICAgICBRVkVSSUZZKHN0cjIuaXNWYWxpZCgpKTsKKyAgICAgICAgUUNPTVBBUkUo
c3RyMi50b1N0cmluZygpLCBjaWFvKTsKKyAgICAgICAgUVZFUklGWShzdHIzLmlzVmFsaWQoKSk7
CisgICAgICAgIFFDT01QQVJFKHN0cjMudG9TdHJpbmcoKSwgY2lhbyk7CisgICAgfQorICAgIHsK
KyAgICAgICAgUVNjcmlwdEVuZ2luZSogZW5nMiA9IG5ldyBRU2NyaXB0RW5naW5lOworICAgICAg
ICBRU3RyaW5nIG9uZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIm9uZSIpOworICAgICAgICBRU3Ry
aW5nIHR3byA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInR3byIpOworICAgICAgICBRU2NyaXB0U3Ry
aW5nIG9uZUludGVybmVkID0gZW5nMi0+dG9TdHJpbmdIYW5kbGUob25lKTsKKyAgICAgICAgUUNP
TVBBUkUob25lSW50ZXJuZWQudG9TdHJpbmcoKSwgb25lKTsKKyAgICAgICAgUVNjcmlwdFN0cmlu
ZyB0d29JbnRlcm5lZCA9IGVuZzItPnRvU3RyaW5nSGFuZGxlKHR3byk7CisgICAgICAgIFFDT01Q
QVJFKHR3b0ludGVybmVkLnRvU3RyaW5nKCksIHR3byk7CisgICAgICAgIFFWRVJJRlkob25lSW50
ZXJuZWQgIT0gdHdvSW50ZXJuZWQpOworICAgICAgICBRVkVSSUZZKCEob25lSW50ZXJuZWQgPT0g
dHdvSW50ZXJuZWQpKTsKKworICAgICAgICBkZWxldGUgZW5nMjsKKyAgICB9Cit9CisKK3ZvaWQg
dHN0X1FTY3JpcHRTdHJpbmc6Omhhc2goKQoreworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5lOwor
ICAgIFFIYXNoPFFTY3JpcHRTdHJpbmcsIGludD4gc3RyaW5nVG9JbnQ7CisgICAgUVNjcmlwdFN0
cmluZyBmb28gPSBlbmdpbmUudG9TdHJpbmdIYW5kbGUoImZvbyIpOworCisgICAgUVNjcmlwdFN0
cmluZyBiYXIgPSBlbmdpbmUudG9TdHJpbmdIYW5kbGUoImJhciIpOworICAgIFFWRVJJRlkoIXN0
cmluZ1RvSW50LmNvbnRhaW5zKGZvbykpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAw
MDsgKytpKQorICAgICAgICBzdHJpbmdUb0ludC5pbnNlcnQoZm9vLCAxMjMpOworICAgIFFDT01Q
QVJFKHN0cmluZ1RvSW50LnZhbHVlKGZvbyksIDEyMyk7CisgICAgUVZFUklGWSghc3RyaW5nVG9J
bnQuY29udGFpbnMoYmFyKSk7CisgICAgc3RyaW5nVG9JbnQuaW5zZXJ0KGJhciwgNDU2KTsKKyAg
ICBRQ09NUEFSRShzdHJpbmdUb0ludC52YWx1ZShiYXIpLCA0NTYpOworICAgIFFDT01QQVJFKHN0
cmluZ1RvSW50LnZhbHVlKGZvbyksIDEyMyk7Cit9CisKK3ZvaWQgdHN0X1FTY3JpcHRTdHJpbmc6
OnRvQXJyYXlJbmRleF9kYXRhKCkKK3sKKyAgICBRVGVzdDo6YWRkQ29sdW1uPFFTdHJpbmc+KCJp
bnB1dCIpOworICAgIFFUZXN0OjphZGRDb2x1bW48Ym9vbD4oImV4cGVjdFN1Y2Nlc3MiKTsKKyAg
ICBRVGVzdDo6YWRkQ29sdW1uPHF1aW50MzI+KCJleHBlY3RlZEluZGV4Iik7CisgICAgUVRlc3Q6
Om5ld1JvdygiZm9vIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiZm9vIikgPDwgZmFsc2UgPDwg
cXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCJlbXB0eSIpIDw8IFFTdHJp
bmc6OmZyb21MYXRpbjEoIiIpIDw8IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7CisgICAg
UVRlc3Q6Om5ld1JvdygiMCIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjAiKSA8PCB0cnVlIDw8
IHF1aW50MzIoMCk7CisgICAgUVRlc3Q6Om5ld1JvdygiMDAiKSA8PCBRU3RyaW5nOjpmcm9tTGF0
aW4xKCIwMCIpIDw8IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7CisgICAgUVRlc3Q6Om5l
d1JvdygiMSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjEiKSA8PCB0cnVlIDw8IHF1aW50MzIo
MSk7CisgICAgUVRlc3Q6Om5ld1JvdygiMTIzIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMTIz
IikgPDwgdHJ1ZSA8PCBxdWludDMyKDEyMyk7CisgICAgUVRlc3Q6Om5ld1JvdygiLTEiKSA8PCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCItMSIpIDw8IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7
CisgICAgUVRlc3Q6Om5ld1JvdygiMGEiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIwYSIpIDw8
IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7CisgICAgUVRlc3Q6Om5ld1JvdygiMHgxIikg
PDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMHgxIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZm
ZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCIwMSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjAx
IikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6bmV3Um93KCIx
MDFhIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMTAxYSIpIDw8IGZhbHNlIDw8IHF1aW50MzIo
MHhmZmZmZmZmZik7CisgICAgUVRlc3Q6Om5ld1JvdygiNDI5NDk2NzI5NCIpIDw8IFFTdHJpbmc6
OmZyb21MYXRpbjEoIjQyOTQ5NjcyOTQiKSA8PCB0cnVlIDw8IHF1aW50MzIoMHhmZmZmZmZmZSk7
CisgICAgUVRlc3Q6Om5ld1JvdygiNDI5NDk2NzI5NSIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEo
IjQyOTQ5NjcyOTUiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0
OjpuZXdSb3coIjExMTExMTExMTExIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiMTExMTExMTEx
MTEiKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3co
IjAuMCIpIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoIjAuMCIpIDw8IGZhbHNlIDw8IHF1aW50MzIo
MHhmZmZmZmZmZik7CisgICAgUVRlc3Q6Om5ld1JvdygiMS4wIikgPDwgUVN0cmluZzo6ZnJvbUxh
dGluMSgiMS4wIikgPDwgZmFsc2UgPDwgcXVpbnQzMigweGZmZmZmZmZmKTsKKyAgICBRVGVzdDo6
bmV3Um93KCIxLjUiKSA8PCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIxLjUiKSA8PCBmYWxzZSA8PCBx
dWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjEuIikgPDwgUVN0cmluZzo6
ZnJvbUxhdGluMSgiMS4iKSA8PCBmYWxzZSA8PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFU
ZXN0OjpuZXdSb3coIi4xIikgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgiLjEiKSA8PCBmYWxzZSA8
PCBxdWludDMyKDB4ZmZmZmZmZmYpOworICAgIFFUZXN0OjpuZXdSb3coIjFlMCIpIDw8IFFTdHJp
bmc6OmZyb21MYXRpbjEoIjFlMCIpIDw8IGZhbHNlIDw8IHF1aW50MzIoMHhmZmZmZmZmZik7Cit9
CisKK3ZvaWQgdHN0X1FTY3JpcHRTdHJpbmc6OnRvQXJyYXlJbmRleCgpCit7CisgICAgUUZFVENI
KFFTdHJpbmcsIGlucHV0KTsKKyAgICBRRkVUQ0goYm9vbCwgZXhwZWN0U3VjY2Vzcyk7CisgICAg
UUZFVENIKHF1aW50MzIsIGV4cGVjdGVkSW5kZXgpOworICAgIFFTY3JpcHRFbmdpbmUgZW5naW5l
OworICAgIGZvciAoaW50IHggPSAwOyB4IDwgMjsgKyt4KSB7CisgICAgICAgIGJvb2wgaXNBcnJh
eUluZGV4OworICAgICAgICBib29sKiBwdHIgPSAoIXgpID8gJmlzQXJyYXlJbmRleCA6IChib29s
KikwOworICAgICAgICBxdWludDMyIHJlc3VsdCA9IGVuZ2luZS50b1N0cmluZ0hhbmRsZShpbnB1
dCkudG9BcnJheUluZGV4KHB0cik7CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIFFDT01Q
QVJFKGlzQXJyYXlJbmRleCwgZXhwZWN0U3VjY2Vzcyk7CisgICAgICAgIFFDT01QQVJFKHJlc3Vs
dCwgZXhwZWN0ZWRJbmRleCk7CisgICAgfQorfQorCitRVEVTVF9NQUlOKHRzdF9RU2NyaXB0U3Ry
aW5nKQorI2luY2x1ZGUgInRzdF9xc2NyaXB0c3RyaW5nLm1vYyIKKworI2VuZGlmIC8vIHRzdF9x
c2NyaXB0c3RyaW5nX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3Rz
LnBybyBiL0phdmFTY3JpcHRDb3JlL3F0L3Rlc3RzL3Rlc3RzLnBybwppbmRleCA2ZTVlZGIxLi43
YzNmNTkwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9xdC90ZXN0cy90ZXN0cy5wcm8KKysr
IGIvSmF2YVNjcmlwdENvcmUvcXQvdGVzdHMvdGVzdHMucHJvCkBAIC0xLDMgKzEsNCBAQAogVEVN
UExBVEUgPSBzdWJkaXJzCiBTVUJESVJTID0gICBxc2NyaXB0ZW5naW5lIFwKLSAgICAgICAgICAg
IHFzY3JpcHR2YWx1ZQorICAgICAgICAgICAgcXNjcmlwdHZhbHVlIFwKKyAgICAgICAgICAgIHFz
Y3JpcHRzdHJpbmcK
</data>

          </attachment>
      

    </bug>

</bugzilla>