<?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>22477</bug_id>
          
          <creation_ts>2008-11-24 19:54:39 -0800</creation_ts>
          <short_desc>Simplify task registration and event handler construction in WML</short_desc>
          <delta_ts>2008-11-25 17:15:14 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>100131</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-24 19:54:39 -0800</bug_when>
    <thetext>A WMLTaskElement checks wheter it&apos;s parent is an &lt;anchor&gt;/&lt;do&gt;/&lt;onevent&gt; element, and calls registerTask(this) on the parent.
Add a isWMLTaskElement() function to WMLElement, making it possible to cast to WMLTaskElement directly.

Add WMLEventHandlingElement class, inheriting from WMLElement, to serve as common base WMLTemplate/Option/CardElement, centralizing the eventHandler() / createEventHandlerIfNeeded() implementation. Add a isWMLEventHandlingElement() function to WMLElement, so WMLOnEventElement can create event handlers, without knowing wheter it&apos;s a &lt;template&gt;/&lt;option&gt; or &lt;card&gt; element.

Add complete &lt;onevent&gt; support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100134</commentid>
    <comment_count>1</comment_count>
      <attachid>25469</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-24 19:56:52 -0800</bug_when>
    <thetext>Created attachment 25469
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100338</commentid>
    <comment_count>2</comment_count>
      <attachid>25469</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-25 16:54:54 -0800</bug_when>
    <thetext>Comment on attachment 25469
Initial patch

&gt;              // Force frame loader to load the URL with fragment identifier
&gt; -            if (FrameLoader* loader = page-&gt;mainFrame() ? page-&gt;mainFrame()-&gt;loader() : 0)
&gt; -                loader-&gt;setForceReloadWmlDeck(true);
&gt; +            if (Frame* frame = pageState-&gt;page()-&gt;mainFrame())
&gt; +                if (FrameLoader* loader = frame-&gt;loader())
&gt; +                    loader-&gt;setForceReloadWmlDeck(true);
The outer if needs braces.

&gt;  private:
&gt; -    void setVisibility(bool isVisible);
&gt; +    bool isVisible() const { return m_isVisible; }
&gt; +    void setVisibility(bool isVisible) { m_isVisible = isVisible; }
I think this would be better as setVisible(bool).

&gt; +void WMLOnEventElement::parseMappedAttribute(MappedAttribute* attr)
&gt; +{
&gt; +    if (attr-&gt;name() == HTMLNames::typeAttr) {
&gt; +        const AtomicString&amp; value = attr-&gt;value();
&gt; +        if (containsVariableReference(value)) {
&gt; +            // FIXME: error reporting
&gt; +            // WMLHelper::tokenizer()-&gt;reportError(InvalidVariableReferenceError);
I don&apos;t think this commented out code adds much. If this is just about alerting the user, please use the InspectorController hanging off the Page.

&gt; +    RefPtr&lt;WMLIntrinsicEvent&gt; event = WMLIntrinsicEvent::createWithTask(task);
&gt; +    eventHandlingElement-&gt;eventHandler()-&gt;registerIntrinsicEvent(m_type, event);
You can use event.releaseRef() to avoid some churn here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100339</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-25 17:07:50 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 25469 [review])
&gt; &gt;              // Force frame loader to load the URL with fragment identifier
&gt; &gt; -            if (FrameLoader* loader = page-&gt;mainFrame() ? page-&gt;mainFrame()-&gt;loader() : 0)
&gt; &gt; -                loader-&gt;setForceReloadWmlDeck(true);
&gt; &gt; +            if (Frame* frame = pageState-&gt;page()-&gt;mainFrame())
&gt; &gt; +                if (FrameLoader* loader = frame-&gt;loader())
&gt; &gt; +                    loader-&gt;setForceReloadWmlDeck(true);
&gt; The outer if needs braces.
Fixed,
 
&gt; &gt;  private:
&gt; &gt; -    void setVisibility(bool isVisible);
&gt; &gt; +    bool isVisible() const { return m_isVisible; }
&gt; &gt; +    void setVisibility(bool isVisible) { m_isVisible = isVisible; }
&gt; I think this would be better as setVisible(bool).
Ok, I&apos;ll rename.
 
&gt; &gt; +void WMLOnEventElement::parseMappedAttribute(MappedAttribute* attr)
&gt; &gt; +{
&gt; &gt; +    if (attr-&gt;name() == HTMLNames::typeAttr) {
&gt; &gt; +        const AtomicString&amp; value = attr-&gt;value();
&gt; &gt; +        if (containsVariableReference(value)) {
&gt; &gt; +            // FIXME: error reporting
&gt; &gt; +            // WMLHelper::tokenizer()-&gt;reportError(InvalidVariableReferenceError);
&gt; I don&apos;t think this commented out code adds much. If this is just about alerting
&gt; the user, please use the InspectorController hanging off the Page.
I&apos;d like to keep it, as most other classes also contain these statements. It could also say &quot;// FIXME: Report &apos;InvalidVariableReferenceError&apos;&quot;, it&apos;s just to remind me of adding error support :-)
 
&gt; &gt; +    RefPtr&lt;WMLIntrinsicEvent&gt; event = WMLIntrinsicEvent::createWithTask(task);
&gt; &gt; +    eventHandlingElement-&gt;eventHandler()-&gt;registerIntrinsicEvent(m_type, event);
&gt; You can use event.releaseRef() to avoid some churn here.
Fixed.

Going to land soon, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100344</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-25 17:15:14 -0800</bug_when>
    <thetext>Landed in r38773.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25469</attachid>
            <date>2008-11-24 19:56:52 -0800</date>
            <delta_ts>2008-11-25 16:54:54 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>AddOnEvent.diff</filename>
            <type>text/plain</type>
            <size>27550</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODc0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDgtMTEtMjQgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMu
emltbWVybWFubkB0b3JjaG1vYmlsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRml4ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjQ3NworCisgICAgICAgIEEgV01MVGFza0VsZW1lbnQgY2hlY2tzIHdoZXRl
ciBpdCdzIHBhcmVudCBpcyBhbiA8YW5jaG9yPi88ZG8+LzxvbmV2ZW50PiBlbGVtZW50LCBhbmQg
Y2FsbHMgcmVnaXN0ZXJUYXNrKHRoaXMpIG9uIHRoZSBwYXJlbnQuCisgICAgICAgIEFkZCBhIGlz
V01MVGFza0VsZW1lbnQoKSBmdW5jdGlvbiB0byBXTUxFbGVtZW50LCBtYWtpbmcgaXQgcG9zc2li
bGUgdG8gY2FzdCB0byBXTUxUYXNrRWxlbWVudCBkaXJlY3RseS4KKworICAgICAgICBBZGQgV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQgY2xhc3MsIGluaGVyaXRpbmcgZnJvbSBXTUxFbGVtZW50LCB0
byBzZXJ2ZSBhcyBjb21tb24gYmFzZSBXTUxUZW1wbGF0ZS9PcHRpb24vQ2FyZEVsZW1lbnQsCisg
ICAgICAgIGNlbnRyYWxpemluZyB0aGUgZXZlbnRIYW5kbGVyKCkgLyBjcmVhdGVFdmVudEhhbmRs
ZXJJZk5lZWRlZCgpIGltcGxlbWVudGF0aW9uLiBBZGQgYSBpc1dNTEV2ZW50SGFuZGxpbmdFbGVt
ZW50KCkKKyAgICAgICAgZnVuY3Rpb24gdG8gV01MRWxlbWVudCwgc28gV01MT25FdmVudEVsZW1l
bnQgY2FuIGNyZWF0ZSBldmVudCBoYW5kbGVycywgd2l0aG91dCBrbm93aW5nIHdoZXRlciBpdCdz
IGEKKyAgICAgICAgPHRlbXBsYXRlPi88b3B0aW9uPiBvciA8Y2FyZD4gZWxlbWVudC4KKworICAg
ICAgICBBZGQgY29tcGxldGUgPG9uZXZlbnQ+IHN1cHBvcnQuCisKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd21sL1dNTENhcmRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTENhcmRFbGVtZW50OjpXTUxDYXJkRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXTUxDYXJkRWxlbWVudDo6c2V0QWN0aXZlQ2FyZEluRG9jdW1l
bnQpOgorICAgICAgICAqIHdtbC9XTUxDYXJkRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
V01MQ2FyZEVsZW1lbnQ6OmlzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxDYXJkRWxl
bWVudDo6c2V0VmlzaWJpbGl0eSk6CisgICAgICAgICogd21sL1dNTEVsZW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldNTEVsZW1lbnQ6OmlzV01MVGFza0VsZW1lbnQpOgorICAgICAgICAqIHdt
bC9XTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V01MRXZlbnRIYW5kbGluZ0VsZW1lbnQ6OldNTEV2ZW50SGFuZGxpbmdFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldNTEV2ZW50SGFuZGxpbmdFbGVtZW50OjpjcmVhdGVFdmVudEhhbmRsZXJJ
Zk5lZWRlZCk6CisgICAgICAgICogd21sL1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6V01MRXZlbnRIYW5kbGluZ0VsZW1lbnQ6OmlzV01MRXZlbnRI
YW5kbGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01MRXZlbnRIYW5kbGluZ0VsZW1l
bnQ6OmV2ZW50SGFuZGxlcik6CisgICAgICAgICogd21sL1dNTE9uRXZlbnRFbGVtZW50LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXTUxPbkV2ZW50RWxlbWVudDo6V01MT25FdmVudEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01MT25FdmVudEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldNTE9uRXZlbnRFbGVtZW50OjpyZWdpc3Rl
clRhc2spOgorICAgICAgICAqIHdtbC9XTUxPbkV2ZW50RWxlbWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKiB3bWwvV01MU2V0dmFyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxTZXR2
YXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXTUxT
ZXR2YXJFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogd21sL1dNTFRh
Z05hbWVzLmluOgorICAgICAgICAqIHdtbC9XTUxUYXNrRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXTUxUYXNrRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAq
IHdtbC9XTUxUYXNrRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6V01MVGFza0VsZW1lbnQ6
OmlzV01MVGFza0VsZW1lbnQpOgorCiAyMDA4LTExLTI0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxu
aWtvbGFzLnppbW1lcm1hbm5AdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMzg3MzUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDE2IEBACiAJCTA4MEFFQzgy
MEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0UwRUQ4NzA4QjAwREY0Q0NFIC8q
IFdNTEludHJpbnNpY0V2ZW50LmggKi87IH07CiAJCTA4MEFFQzgzMEVEODcwOEIwMERGNENDRSAv
KiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJp
bnNpY0V2ZW50SGFuZGxlci5jcHAgKi87IH07CiAJCTA4MEFFQzg0MEVEODcwOEIwMERGNENDRSAv
KiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEFFQzgwMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIuaCAqLzsgfTsKKwkJMDgxOEFFRTIwRURCODZCQzAwNjQ3QjY2IC8qIFdN
TEV2ZW50SGFuZGxpbmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4MThBRUUwMEVEQjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRs
aW5nRWxlbWVudC5jcHAgKi87IH07CisJCTA4MThBRUUzMEVEQjg2QkMwMDY0N0I2NiAvKiBXTUxF
dmVudEhhbmRsaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgxOEFFRTEwRURCODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdF
bGVtZW50LmggKi87IH07CiAJCTA4MjAzQTlGMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4MjAzQTlEMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLzsgfTsK
IAkJMDgyMDNBQTAwRUQ4QzM1MzAwQjhCNjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MjAzQTlFMEVEOEMzNTMw
MEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi87IH07CiAJCTA4Mzk0NzZDMEVDRTRCRDYw
MDAyNzM1MCAvKiBXTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZCODRCMDBFQ0UzNzMzMDBEQzA2NEUgLyogV01MRWxl
bWVudEZhY3RvcnkuY3BwICovOyB9OwogCQkwODM5NDc2RDBFQ0U0QkQ2MDAwMjczNTAgLyogV01M
RWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4RkI4NEIxMEVDRTM3MzMwMERDMDY0RSAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICov
OyB9OwogCQkwODREQkFBMTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NERCQTlEMEVEMzlE
MzUwMDM4QzIyNiAvKiBXTUxWYXJpYWJsZXMuY3BwICovOyB9OwogCQkwODREQkFBMjBFRDM5RDM2
MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODREQkE5RTBFRDM5RDM2MDAzOEMyMjYgLyogV01MVmFyaWFibGVz
LmggKi87IH07CisJCTA4NzQ0QkFBMEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODc0
NEJBOTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICovOyB9OworCQkw
ODc0NEJBRTBFREI3RDkyMDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzQ0QkFEMEVEQjdEOTIwMDRD
OUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5oICovOyB9OwogCQkwODgwN0I3NjBFRDcwOUFCMDAz
RjY5NzUgLyogV01MR29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4ODA3QjZBMEVENzA5QUIwMDNGNjk3NSAvKiBXTUxHb0VsZW1lbnQu
Y3BwICovOyB9OwogCQkwODgwN0I3NzBFRDcwOUFCMDAzRjY5NzUgLyogV01MR29FbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODgwN0I2QjBF
RDcwOUFCMDAzRjY5NzUgLyogV01MR29FbGVtZW50LmggKi87IH07CiAJCTA4ODA3QjdDMEVENzA5
QUIwMDNGNjk3NSAvKiBXTUxQcmV2RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODgwN0I3MDBFRDcwOUFCMDAzRjY5NzUgLyogV01MUHJl
dkVsZW1lbnQuY3BwICovOyB9OwpAQCAtNDgwNCwxMCArNDgwOCwxNCBAQAogCQkwODBBRUM3RTBF
RDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MSW50cmluc2ljRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDgwQUVDN0YwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFu
ZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODBBRUM4
MDBFRDg3MDhCMDBERjRDQ0UgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODE4QUVFMDBFREI4NkJDMDA2NDdCNjYgLyogV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwODE4QUVFMTBFREI4NkJDMDA2NDdCNjYgLyogV01MRXZlbnRIYW5kbGluZ0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRXZlbnRIYW5kbGluZ0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgyMDNBOUQwRUQ4QzM1MzAw
QjhCNjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV01MQWNjZXNzRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4MjAzQTlFMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEFjY2Vzc0VsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0REJBOUQwRUQzOUQzNTAwMzhDMjI2IC8qIFdNTFZh
cmlhYmxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxWYXJp
YWJsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODREQkE5RTBFRDM5RDM2
MDAzOEMyMjYgLyogV01MVmFyaWFibGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdNTFZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODc0NEJB
OTBFREI3RDg2MDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT25FdmVudEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwODc0NEJBRDBFREI3RDkyMDA0QzlFNjMgLyogV01MT25FdmVu
dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MT25FdmVudEVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg4MDdCNkEwRUQ3MDlBQjAw
M0Y2OTc1IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXTUxHb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODgwN0I2QjBFRDcwOUFCMDAzRjY5NzUgLyogV01MR29FbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEdvRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODgwN0I3MDBFRDcwOUFCMDAzRjY5NzUgLyogV01MUHJldkVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MUHJldkVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ5OSwxMiArOTUwNywxNiBAQAogCQkJCTRD
NkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oICovLAogCQkJCTRDNkI5OTI1
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCAqLywKIAkJCQk0QzZCOTkyNjBFNTJF
MzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5oICovLAorCQkJCTA4MThBRUUwMEVEQjg2QkMwMDY0
N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHAgKi8sCisJCQkJMDgxOEFFRTEwRURC
ODZCQzAwNjQ3QjY2IC8qIFdNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmggKi8sCiAJCQkJMDg4MDdC
NkEwRUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8sCiAJCQkJMDg4MDdCNkIw
RUQ3MDlBQjAwM0Y2OTc1IC8qIFdNTEdvRWxlbWVudC5oICovLAogCQkJCTA4MEFFQzdEMEVEODcw
OEEwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudC5jcHAgKi8sCiAJCQkJMDgwQUVDN0UwRUQ4
NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmggKi8sCiAJCQkJMDgwQUVDN0YwRUQ4
NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8sCiAJCQkJMDgw
QUVDODAwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovLAor
CQkJCTA4NzQ0QkE5MEVEQjdEODYwMDRDOUU2MyAvKiBXTUxPbkV2ZW50RWxlbWVudC5jcHAgKi8s
CisJCQkJMDg3NDRCQUQwRURCN0Q5MjAwNEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmggKi8s
CiAJCQkJMDg5M0U0NjUwRUNCNjhGNDAwQTI4NTYzIC8qIFdNTFBhZ2VTdGF0ZS5jcHAgKi8sCiAJ
CQkJMDg5M0U0NjYwRUNCNjhGNDAwQTI4NTYzIC8qIFdNTFBhZ2VTdGF0ZS5oICovLAogCQkJCTRD
NkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8sCkBAIC0xNjM5OSw2
ICsxNjQxMSw4IEBACiAJCQkJMDgwQUVDODQwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgyMDNBQTAwRUQ4QzM1MzAwQjhC
NjFBIC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNENDMTBBMEVE
QjIyMzkwMEE2NThGMiAvKiBTY3JpcHRTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
ODc0NEJBRTBFREI3RDkyMDA0QzlFNjMgLyogV01MT25FdmVudEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTA4MThBRUUzMEVEQjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODMzMiw2ICsxODM0Niw4IEBACiAJCQkJMDgwQUVD
ODEwRUQ4NzA4QjAwREY0Q0NFIC8qIFdNTEludHJpbnNpY0V2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA4MEFFQzgzMEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgyMDNBOUYwRUQ4QzM1MzAwQjhCNjFBIC8qIFdN
TEFjY2Vzc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDg3NDRCQUEwRURCN0Q4NjAw
NEM5RTYzIC8qIFdNTE9uRXZlbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4MThB
RUUyMEVEQjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4NzM2KQorKysg
V2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOCAr
MjQsMTggQEAKICNpZiBFTkFCTEUoV01MKQogI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCiAK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIldNTERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiV01MUGFnZVN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV01MQ2FyZEVsZW1l
bnQ6OldNTENhcmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCi0gICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICA6IFdNTEV2ZW50SGFu
ZGxpbmdFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQogewog
fQpAQCAtNTYsOCArNTYsOCBAQCBSZW5kZXJPYmplY3QqIFdNTENhcmRFbGVtZW50OjpjcmVhdGVS
ZW5kCiAKIFdNTENhcmRFbGVtZW50KiBXTUxDYXJkRWxlbWVudDo6c2V0QWN0aXZlQ2FyZEluRG9j
dW1lbnQoRG9jdW1lbnQqIGRvYywgY29uc3QgS1VSTCYgdGFyZ2V0VXJsKQogewotICAgIFBhZ2Uq
IHBhZ2UgPSBkb2MgPyBkb2MtPnBhZ2UoKSA6IDA7Ci0gICAgaWYgKCFwYWdlKQorICAgIFdNTFBh
Z2VTdGF0ZSogcGFnZVN0YXRlID0gd21sUGFnZVN0YXRlRm9yRG9jdW1lbnQoZG9jKTsKKyAgICBp
ZiAoIXBhZ2VTdGF0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8Tm9kZUxpc3Q+
IG5vZGVMaXN0ID0gZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FyZCIpOwpAQCAtNjksOCAr
NjksMTYgQEAgV01MQ2FyZEVsZW1lbnQqIFdNTENhcmRFbGVtZW50OjpzZXRBY3RpdgogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIEhpZGUgYWxsIGNhcmRzIGluIGRvY3VtZW50Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBzdGF0aWNfY2FzdDxX
TUxDYXJkRWxlbWVudCo+KG5vZGVMaXN0LT5pdGVtKGkpKS0+c2V0VmlzaWJpbGl0eShmYWxzZSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIFdN
TENhcmRFbGVtZW50KiBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihub2RlTGlz
dC0+aXRlbShpKSk7CisKKyAgICAgICAgLy8gT25seSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBj
YXJkIHN0eWxlIGlmIHRoZSBjYXJkIHdhcyB2aXNpYmxlCisgICAgICAgIC8vIGJlZm9yZSBvdGhl
cndoaXNlIHdlIGhhdmUgbm8gYXNzb2NpYXRlZCBSZW5kZXJPYmplY3QgYW55d2F5CisgICAgICAg
IGlmIChjYXJkLT5pc1Zpc2libGUoKSkKKyAgICAgICAgICAgIGNhcmQtPnNldENoYW5nZWQoKTsK
KworICAgICAgICBjYXJkLT5zZXRWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICB9CiAKICAgICAvLyBG
aWd1cmUgb3V0IHRoZSBuZXcgdGFyZ2V0IGNhcmQKICAgICBXTUxDYXJkRWxlbWVudCogYWN0aXZl
Q2FyZCA9IDA7CkBAIC04NSw4ICs5Myw5IEBAIFdNTENhcmRFbGVtZW50KiBXTUxDYXJkRWxlbWVu
dDo6c2V0QWN0aXYKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgLy8g
Rm9yY2UgZnJhbWUgbG9hZGVyIHRvIGxvYWQgdGhlIFVSTCB3aXRoIGZyYWdtZW50IGlkZW50aWZp
ZXIKLSAgICAgICAgICAgIGlmIChGcmFtZUxvYWRlciogbG9hZGVyID0gcGFnZS0+bWFpbkZyYW1l
KCkgPyBwYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCkgOiAwKQotICAgICAgICAgICAgICAgIGxv
YWRlci0+c2V0Rm9yY2VSZWxvYWRXbWxEZWNrKHRydWUpOworICAgICAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IHBhZ2VTdGF0ZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKKyAgICAgICAgICAgICAg
ICBpZiAoRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgbG9hZGVyLT5zZXRGb3JjZVJlbG9hZFdtbERlY2sodHJ1ZSk7CiAKICAgICAgICAg
ICAgIGFjdGl2ZUNhcmQgPSBjYXJkOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NywyMiArMTA2
LDE3IEBAIFdNTENhcmRFbGVtZW50KiBXTUxDYXJkRWxlbWVudDo6c2V0QWN0aXYKICAgICBpZiAo
IWFjdGl2ZUNhcmQpCiAgICAgICAgIGFjdGl2ZUNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxl
bWVudCo+KG5vZGVMaXN0LT5pdGVtKDApKTsKIAorICAgIGFjdGl2ZUNhcmQtPnNldENoYW5nZWQo
KTsKICAgICBhY3RpdmVDYXJkLT5zZXRWaXNpYmlsaXR5KHRydWUpOwogCiAgICAgLy8gVXBkYXRl
IHRoZSBkb2N1bWVudCB0aXRsZQogICAgIGRvYy0+c2V0VGl0bGUoYWN0aXZlQ2FyZC0+dGl0bGUo
KSk7CiAKICAgICAvLyBTZXQgdGhlIGFjdGl2ZSBhY3RpdmVDYXJkIGluIHRoZSBXTUwgcGFnZSBz
dGF0ZSBvYmplY3QKLSAgICBwYWdlLT53bWxQYWdlU3RhdGUoKS0+c2V0QWN0aXZlQ2FyZChhY3Rp
dmVDYXJkKTsKKyAgICBwYWdlU3RhdGUtPnNldEFjdGl2ZUNhcmQoYWN0aXZlQ2FyZCk7CiAgICAg
cmV0dXJuIGFjdGl2ZUNhcmQ7CiB9CiAKLXZvaWQgV01MQ2FyZEVsZW1lbnQ6OnNldFZpc2liaWxp
dHkoYm9vbCBpc1Zpc2libGUpCi17Ci0gICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Ci0gICAg
c2V0Q2hhbmdlZCgpOwotfQotCiB9CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MQ2Fy
ZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5oCShy
ZXZpc2lvbiAzODczNikKKysrIFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDExICsyMywxMSBAQAogI2RlZmluZSBXTUxDYXJkRWxlbWVudF9oCiAKICNp
ZiBFTkFCTEUoV01MKQotI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFdmVu
dEhhbmRsaW5nRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdNTENh
cmRFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgeworY2xhc3MgV01MQ2FyZEVsZW1lbnQgOiBw
dWJsaWMgV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQgewogcHVibGljOgogICAgIFdNTENhcmRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfldNTENh
cmRFbGVtZW50KCk7CkBAIC0zOSw3ICszOSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV01MQ2Fy
ZEVsZW1lbnQqIHNldEFjdGl2ZUNhcmRJbkRvY3VtZW50KERvY3VtZW50KiwgY29uc3QgS1VSTCYg
dGFyZ2V0VXJsKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldFZpc2liaWxpdHkoYm9vbCBpc1Zp
c2libGUpOworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zpc2libGU7
IH0KKyAgICB2b2lkIHNldFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpIHsgbV9pc1Zpc2libGUg
PSBpc1Zpc2libGU7IH0KIAogICAgIGJvb2wgbV9pc1Zpc2libGU7CiB9OwpJbmRleDogV2ViQ29y
ZS93bWwvV01MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQu
aAkocmV2aXNpb24gMzg3MzUpCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDggQEAgcHVibGljOgogICAgIFdNTEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1dN
TEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1dNTFRhc2tFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxFdmVudEhhbmRsaW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01M
RXZlbnRIYW5kbGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisv
KioKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXTUwpCisjaW5jbHVkZSAiV01MRXZl
bnRIYW5kbGluZ0VsZW1lbnQuaCIKKworI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dN
TEV2ZW50SGFuZGxpbmdFbGVtZW50OjpXTUxFdmVudEhhbmRsaW5nRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogV01MRWxlbWVudCh0YWdO
YW1lLCBkb2MpCit7Cit9CisKK3ZvaWQgV01MRXZlbnRIYW5kbGluZ0VsZW1lbnQ6OmNyZWF0ZUV2
ZW50SGFuZGxlcklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fZXZlbnRIYW5kbGVyKQorICAgICAg
ICBtX2V2ZW50SGFuZGxlci5zZXQobmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcik7Cit9CisK
K30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFdmVudEhhbmRsaW5nRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEV2ZW50SGFuZGxpbmdFbGVtZW50LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MRXZlbnRIYW5kbGluZ0VsZW1l
bnRfaAorI2RlZmluZSBXTUxFdmVudEhhbmRsaW5nRWxlbWVudF9oCisKKyNpZiBFTkFCTEUoV01M
KQorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVudEhh
bmRsZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBXTUxFdmVudEhhbmRsaW5nRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBXTUxFdmVudEhhbmRsaW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCBib29sIGlzV01MRXZlbnRIYW5k
bGluZ0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVy
LmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVFdmVudEhhbmRsZXJJZk5lZWRlZCgpOworCitwcml2
YXRlOgorICAgIE93blB0cjxXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXI+IG1fZXZlbnRIYW5kbGVy
OworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MT25FdmVu
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTE9uRXZlbnRFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTE9uRXZlbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAg
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTE9uRXZlbnRFbGVtZW50LmgiCisKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgi
CisjaW5jbHVkZSAiV01MVmFyaWFibGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxPbkV2ZW50RWxlbWVudDo6V01MT25FdmVudEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6
IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV90eXBlKFdNTEludHJpbnNpY0V2ZW50
VW5rbm93bikKK3sKK30KKwordm9pZCBXTUxPbkV2ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
SFRNTE5hbWVzOjp0eXBlQXR0cikgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
ID0gYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgaWYgKGNvbnRhaW5zVmFyaWFibGVSZWZlcmVuY2Uo
dmFsdWUpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogZXJyb3IgcmVwb3J0aW5nCisgICAgICAg
ICAgICAvLyBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFi
bGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodmFsdWUgPT0gb25lbnRlcmZvcndhcmRBdHRyKQorICAgICAgICAgICAgbV90eXBl
ID0gV01MSW50cmluc2ljRXZlbnRPbkVudGVyRm9yd2FyZDsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUgPT0gb25lbnRlcmJhY2t3YXJkQXR0cikKKyAgICAgICAgICAgIG1fdHlwZSA9IFdNTEludHJp
bnNpY0V2ZW50T25FbnRlckJhY2t3YXJkOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBvbnRp
bWVyQXR0cikKKyAgICAgICAgICAgIG1fdHlwZSA9IFdNTEludHJpbnNpY0V2ZW50T25UaW1lcjsK
KyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gb25waWNrQXR0cikKKyAgICAgICAgICAgIG1fdHlw
ZSA9IFdNTEludHJpbnNpY0V2ZW50T25QaWNrOworICAgIH0gZWxzZQorICAgICAgICBXTUxFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKwordm9pZCBXTUxPbkV2ZW50RWxl
bWVudDo6cmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50KiB0YXNrKQoreworICAgIGlmIChtX3R5
cGUgPT0gV01MSW50cmluc2ljRXZlbnRVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBSZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQgdG8gdGhlIGV2ZW50IGhhbmRsZXIgb2YgdGhlIG93
bmVyIG9mIG9uZXZlbnQgZWxlbWVudCAKKyAgICBOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CisgICAgQVNTRVJUKHBhcmVudCk7CisKKyAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1dN
TEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV01MRWxlbWVudCogcGFyZW50RWxl
bWVudCA9IHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihwYXJlbnQpOworICAgIGlmICghcGFyZW50
RWxlbWVudC0+aXNXTUxFdmVudEhhbmRsaW5nRWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBXTUxFdmVudEhhbmRsaW5nRWxlbWVudCogZXZlbnRIYW5kbGluZ0VsZW1lbnQgPSBzdGF0
aWNfY2FzdDxXTUxFdmVudEhhbmRsaW5nRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpOworICAgIGV2
ZW50SGFuZGxpbmdFbGVtZW50LT5jcmVhdGVFdmVudEhhbmRsZXJJZk5lZWRlZCgpOworCisgICAg
UmVmUHRyPFdNTEludHJpbnNpY0V2ZW50PiBldmVudCA9IFdNTEludHJpbnNpY0V2ZW50OjpjcmVh
dGVXaXRoVGFzayh0YXNrKTsKKyAgICBldmVudEhhbmRsaW5nRWxlbWVudC0+ZXZlbnRIYW5kbGVy
KCktPnJlZ2lzdGVySW50cmluc2ljRXZlbnQobV90eXBlLCBldmVudCk7Cit9CisKK30KKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxPbkV2ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvd21sL1dNTE9uRXZlbnRFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3dtbC9XTUxPbkV2ZW50RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisv
KioKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgV01MT25FdmVudEVsZW1lbnRfaAorI2RlZmluZSBXTUxPbkV2ZW50RWxlbWVudF9o
CisKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXTUxUYXNrRWxlbWVudDsKKworY2xhc3MgV01MT25FdmVudEVsZW1lbnQgOiBwdWJsaWMgV01M
RWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MT25FdmVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKworICAgIHZvaWQgcmVnaXN0ZXJUYXNrKFdN
TFRhc2tFbGVtZW50Kik7CisKK3ByaXZhdGU6CisgICAgV01MSW50cmluc2ljRXZlbnRUeXBlIG1f
dHlwZTsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNl
dHZhckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzODczNSkKKysrIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyMSArMjQsMTIgQEAKICNpZiBFTkFCTEUoV01MKQog
I2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgotI2luY2x1
ZGUgIldNTE5hbWVzLmgiCi0jaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCi0jaW5jbHVkZSAiV01M
UHJldkVsZW1lbnQuaCIKLSNpbmNsdWRlICJXTUxSZWZyZXNoRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTFRhc2tFbGVtZW50LmgiCiAjaW5jbHVkZSAiV01MVmFyaWFibGVzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwotCiBXTUxTZXR2YXJFbGVt
ZW50OjpXTUxTZXR2YXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MpCiAgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKQEAgLTUyLDE0ICs0
MywxNyBAQCB2b2lkIFdNTFNldHZhckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiB7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKSB7CiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICBTdHJpbmcgbmFt
ZTsKIAogICAgICAgICBib29sIGlzVmFsaWQgPSBpc1ZhbGlkVmFyaWFibGVOYW1lKHZhbHVlLCB0
cnVlKTsKICAgICAgICAgaWYgKGlzVmFsaWQpIHsKLSAgICAgICAgICAgIG1fbmFtZSA9IHN1YnN0
aXR1dGVWYXJpYWJsZVJlZmVyZW5jZXModmFsdWUsIGRvY3VtZW50KCkpOwotICAgICAgICAgICAg
aXNWYWxpZCA9IGlzVmFsaWRWYXJpYWJsZU5hbWUobV9uYW1lLCB0cnVlKTsKKyAgICAgICAgICAg
IG5hbWUgPSBzdWJzdGl0dXRlVmFyaWFibGVSZWZlcmVuY2VzKHZhbHVlLCBkb2N1bWVudCgpKTsK
KyAgICAgICAgICAgIGlzVmFsaWQgPSBpc1ZhbGlkVmFyaWFibGVOYW1lKG5hbWUsIHRydWUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFpc1ZhbGlkKSB7CisgICAgICAgIGlmIChpc1ZhbGlk
KQorICAgICAgICAgICAgbV9uYW1lID0gbmFtZTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogRXJyb3IgcmVwb3J0aW5nCiAgICAgICAgICAgICAvLyBXTUxIZWxwZXI6OnRv
a2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVOYW1lRXJyb3IpOwogICAgICAg
ICB9CkBAIC03MywxOSArNjcsMTUgQEAgdm9pZCBXTUxTZXR2YXJFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYgogdm9pZCBXTUxTZXR2YXJFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7
CiAgICAgV01MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICAKLSAgICBOb2Rl
KiBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsKLSAgICBXTUxUYXNrRWxlbWVudCogdGFza0VsZW1l
bnQgPSAwOwotCi0gICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKGdvVGFnKSkKLSAgICAgICAg
dGFza0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihhbmNlc3Rvcik7Ci0gICAg
ZWxzZSBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUocHJldlRhZykpCi0gICAgICAgIHRhc2tFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8V01MUHJldkVsZW1lbnQqPihhbmNlc3Rvcik7Ci0gICAgZWxzZSBp
ZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUocmVmcmVzaFRhZykpCi0gICAgICAgIHRhc2tFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8V01MUmVmcmVzaEVsZW1lbnQqPihhbmNlc3Rvcik7CisgCisgICAgTm9k
ZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOworICAgIEFTU0VSVChwYXJlbnQpOworCisgICAgaWYg
KCFwYXJlbnQgfHwgIXBhcmVudC0+aXNXTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICh0YXNrRWxlbWVudCkKLSAgICAgICAgdGFza0VsZW1lbnQtPnJlZ2lzdGVyVmFyaWFi
bGVTZXR0ZXIodGhpcyk7CisgICAgaWYgKHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihwYXJlbnQp
LT5pc1dNTFRhc2tFbGVtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTFRhc2tFbGVtZW50
Kj4ocGFyZW50KS0+cmVnaXN0ZXJWYXJpYWJsZVNldHRlcih0aGlzKTsKIH0KIAogU3RyaW5nIFdN
TFNldHZhckVsZW1lbnQ6Om5hbWUoKSBjb25zdApJbmRleDogV2ViQ29yZS93bWwvV01MVGFnTmFt
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHJldmlzaW9u
IDM4NzM1KQorKysgV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTgsNiArOCw3IEBAIGFuY2hvcgogYnIgaW50ZXJmYWNlTmFtZT1XTUxCUkVsZW1lbnQKIGNhcmQK
IGdvCitvbmV2ZW50IGludGVyZmFjZU5hbWU9V01MT25FdmVudEVsZW1lbnQKIHAKIHByZXYKIHJl
ZnJlc2gKQEAgLTMzLDcgKzM0LDYgQEAgaW1nIGludGVyZmFjZU5hbWU9V01MSW1hZ2VFbGVtZW50
CiBpbnB1dAogbWV0YQogbm9vcAotb25ldmVudAogb3B0Z3JvdXAKIG9wdGlvbgogcG9zdGZpZWxk
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MVGFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc0MykKKysrIFdlYkNvcmUv
d21sL1dNTFRhc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
CiAjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUgIldNTE5hbWVzLmgiCisj
aW5jbHVkZSAiV01MT25FdmVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIK
ICNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCiAKQEAgLTQ2LDI2ICs0NywyMCBAQCB2b2lk
IFdNTFRhc2tFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVuCiB7CiAgICAgV01MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIAotICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFyZW50
Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAg
IC8qIEZJWE1FCi0gICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoZG9UYWcpKSB7Ci0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlclRhc2so
dGhpcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAqLwotCi0gICAg
ICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoYW5jaG9yVGFnKSkgewotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8V01MQW5jaG9yRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRklYTUUKLSAgICAg
ICAgaWYgKHBhcmVudC0+bG9jYWxOYW1lKCkgPT0gIm9uZXZlbnQiKSB7Ci0gICAgICAgICAgICBi
aW5kSW50cmluc2ljRXZlbnRJbk9uZXZlbnQocGFyZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICovCi0gICAgfQorICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKKyAgICBBU1NFUlQocGFyZW50KTsKKworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQt
PmlzV01MRWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocGFyZW50LT5oYXNU
YWdOYW1lKGFuY2hvclRhZykpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEFuY2hvckVsZW1lbnQq
PihwYXJlbnQpLT5yZWdpc3RlclRhc2sodGhpcyk7CisvKiBGSVhNRQorICAgIGVsc2UgaWYgKHBh
cmVudC0+aGFzVGFnTmFtZShkb1RhZykpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTERvRWxlbWVu
dCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsKKyovCisgICAgZWxzZSBpZiAocGFyZW50
LT5oYXNUYWdOYW1lKG9uZXZlbnRUYWcpKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxPbkV2ZW50
RWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsKIH0KIAogdm9pZCBXTUxUYXNr
RWxlbWVudDo6cmVnaXN0ZXJWYXJpYWJsZVNldHRlcihXTUxTZXR2YXJFbGVtZW50KiBlbGVtZW50
KQpJbmRleDogV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dtbC9XTUxUYXNrRWxlbWVudC5oCShyZXZpc2lvbiAzODc0MykKKysrIFdlYkNvcmUvd21s
L1dNTFRhc2tFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAgcHVibGlj
OgogICAgIFdNTFRhc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50Kik7CiAgICAgdmlydHVhbCB+V01MVGFza0VsZW1lbnQoKTsKIAorICAgIHZpcnR1YWwgYm9v
bCBpc1dNTFRhc2tFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVh
bCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVU
YXNrKEV2ZW50KikgPSAwOwogCg==
</data>
<flag name="review"
          id="11824"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>