<?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>58953</bug_id>
          
          <creation_ts>2011-04-19 18:12:44 -0700</creation_ts>
          <short_desc>[V8] Use implicit references for V8 listeners on DOM nodes.</short_desc>
          <delta_ts>2011-04-23 13:05:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vitaly Repeshko">vitalyr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388966</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-19 18:12:44 -0700</bug_when>
    <thetext>[V8] Use implicit references for V8 listeners on DOM nodes.

Instead of allocating an auxiliary V8 array referencing V8 listener objects associated with a DOM node and using an extra pointer in every DOM node wrapper, we can register implicit references between nodes and their listeners during GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388984</commentid>
    <comment_count>1</comment_count>
      <attachid>90287</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-19 18:22:42 -0700</bug_when>
    <thetext>Created attachment 90287
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388989</commentid>
    <comment_count>2</comment_count>
      <attachid>90290</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-19 18:37:05 -0700</bug_when>
    <thetext>Created attachment 90290
patch: fixed a typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388990</commentid>
    <comment_count>3</comment_count>
      <attachid>90287</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-19 18:40:10 -0700</bug_when>
    <thetext>Comment on attachment 90287
patch

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

The V8-specific could should be in bindings/v8.  You might need to build some sort of abstraction to make that work, but your patch has it&apos;s dependencies backwards.

&gt; Source/WebCore/bindings/v8/V8AbstractEventListener.h:96
&gt; +        v8::Persistent&lt;v8::Object&gt; getExistingListenerObjectPeristentHandle()

getExistingListenerObjectPeristentHandle =&gt; listener ?

We don&apos;t usually start functions with the word &quot;get&quot;.  Also, we can tell it returns a persistent handle by the return type.

&gt; Source/WebCore/dom/EventListener.h:61
&gt; +#if USE(V8)
&gt; +        virtual bool isV8EventListener() const { return false; }
&gt; +#endif

Frown.

&gt; Source/WebCore/dom/EventTarget.cpp:39
&gt; +#if USE(V8)
&gt; +#include &quot;V8AbstractEventListener.h&quot;
&gt; +#endif

This is a backwards dependency.

&gt; Source/WebCore/dom/EventTarget.cpp:381
&gt; +#if USE(V8)

This code shouldn&apos;t be here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391192</commentid>
    <comment_count>4</comment_count>
      <attachid>90793</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-22 16:10:23 -0700</bug_when>
    <thetext>Created attachment 90793
patch: less nasty dependencies

Won&apos;t compile without bug 59250.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391202</commentid>
    <comment_count>5</comment_count>
      <attachid>90797</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-22 16:17:41 -0700</bug_when>
    <thetext>Created attachment 90797
patch: less nasty dependencies

Removed accidental changes. Still won&apos;t compile without bug 59250.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391249</commentid>
    <comment_count>6</comment_count>
      <attachid>90797</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-22 17:07:00 -0700</bug_when>
    <thetext>Comment on attachment 90797
patch: less nasty dependencies

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

&gt; Source/WebCore/bindings/v8/V8AbstractEventListener.h:94
&gt; +        v8::Persistent&lt;v8::Object&gt; getExistingListenerObjectPersistentHandle()

Please remove &quot;get&quot; prefix.

&gt; Source/WebCore/dom/EventTarget.cpp:394
&gt; +EventListenerIterator::EventListenerIterator() : m_index(0) {}

The { and } should each be on their own line.

&gt; Source/WebCore/dom/EventTarget.cpp:396
&gt; +EventListenerIterator::EventListenerIterator(EventTarget* target) : m_index(0)

&quot;: m_index(0)&quot; should be on its own line and indented four spaces.

&gt; Source/WebCore/dom/EventTarget.cpp:410
&gt; +        EventListenerVector&amp; listeners = *m_mapIterator-&gt;second;
&gt; +        if (m_index &lt; listeners.size())
&gt; +            return listeners[m_index++].listener.get();

We don&apos;t need to reset m_index to zero when we ++m_mapIterator ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391253</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-22 17:10:50 -0700</bug_when>
    <thetext>Attachment 90797 did not build on qt:
Build output: http://queues.webkit.org/results/8486964</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391302</commentid>
    <comment_count>8</comment_count>
      <attachid>90823</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-22 18:20:48 -0700</bug_when>
    <thetext>Created attachment 90823
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391304</commentid>
    <comment_count>9</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-22 18:21:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 90797 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90797&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8AbstractEventListener.h:94
&gt; &gt; +        v8::Persistent&lt;v8::Object&gt; getExistingListenerObjectPersistentHandle()
&gt; 
&gt; Please remove &quot;get&quot; prefix.

Removed.

&gt; &gt; Source/WebCore/dom/EventTarget.cpp:394
&gt; &gt; +EventListenerIterator::EventListenerIterator() : m_index(0) {}
&gt; 
&gt; The { and } should each be on their own line.

Fixed.

&gt; &gt; Source/WebCore/dom/EventTarget.cpp:396
&gt; &gt; +EventListenerIterator::EventListenerIterator(EventTarget* target) : m_index(0)
&gt; 
&gt; &quot;: m_index(0)&quot; should be on its own line and indented four spaces.

Fixed.

&gt; &gt; Source/WebCore/dom/EventTarget.cpp:410
&gt; &gt; +        EventListenerVector&amp; listeners = *m_mapIterator-&gt;second;
&gt; &gt; +        if (m_index &lt; listeners.size())
&gt; &gt; +            return listeners[m_index++].listener.get();
&gt; 
&gt; We don&apos;t need to reset m_index to zero when we ++m_mapIterator ?

Whoops. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391306</commentid>
    <comment_count>10</comment_count>
      <attachid>90823</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-22 18:23:26 -0700</bug_when>
    <thetext>Comment on attachment 90823
patch

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

&gt; Source/WebCore/dom/EventTarget.cpp:394
&gt; +EventListenerIterator::EventListenerIterator() : m_index(0)

Sorry, this initializer needs to be on its own line too.

&gt; Source/WebCore/dom/EventTarget.h:197
&gt; +        EventListener* nextListener();

I would add a comment admonishing folks not to modify the listener list durning iteration because that will cause big problems for this iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391307</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 18:23:46 -0700</bug_when>
    <thetext>Attachment 90797 did not build on chromium:
Build output: http://queues.webkit.org/results/8495650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391310</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-22 18:32:44 -0700</bug_when>
    <thetext>Attachment 90797 did not build on win:
Build output: http://queues.webkit.org/results/8496577</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391435</commentid>
    <comment_count>13</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2011-04-23 00:12:54 -0700</bug_when>
    <thetext>The remaining comments addressed on landing.

	M	Source/WebCore/ChangeLog
	M	Source/WebCore/bindings/scripts/CodeGeneratorV8.pm
	M	Source/WebCore/bindings/v8/V8AbstractEventListener.h
	M	Source/WebCore/bindings/v8/V8GCController.cpp
	M	Source/WebCore/dom/EventTarget.cpp
	M	Source/WebCore/dom/EventTarget.h
Committed r84741</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391474</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-23 13:05:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84741 might have broken Windows XP Debug (Tests)
The following tests are not passing:
http/tests/misc/will-send-request-returns-null-on-redirect.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90287</attachid>
            <date>2011-04-19 18:22:42 -0700</date>
            <delta_ts>2011-04-19 18:40:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>10658</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYjEyYzNkLi44ODJjNGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDQtMTkgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gVXNl
IGltcGxpY2l0IHJlZmVyZW5jZXMgZm9yIFY4IGxpc3RlbmVycyBvbiBET00gbm9kZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk1MworCisgICAg
ICAgIEluc3RlYWQgb2YgYWxsb2NhdGluZyBhbiBhdXhpbGlhcnkgVjggYXJyYXkgcmVmZXJlbmNp
bmcgVjgKKyAgICAgICAgbGlzdGVuZXIgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYSBET00gbm9k
ZSBhbmQgdXNpbmcgYW4gZXh0cmEKKyAgICAgICAgcG9pbnRlciBpbiBldmVyeSBET00gbm9kZSB3
cmFwcGVyLCB3ZSBjYW4gcmVnaXN0ZXIgaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyBiZXR3
ZWVuIG5vZGVzIGFuZCB0aGVpciBsaXN0ZW5lcnMgZHVyaW5nIEdDLiBUaGlzIGFsc28KKyAgICAg
ICAgbWFrZXMgVjggYmluZGlncyBtb3JlIGFsaWduZWQgd2l0aCBKU0MgYmluZGluZ3MuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFN0b3BwZWQgZ2VuZXJh
dGluZyB0aGUKKyAgICAgICAgbGlzdGVuZXIgY2FjaGUgaW50ZXJuYWwgZmllbGQgZm9yIERPTSBu
b2Rlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oOiBF
eHBvc2VkIHRoZSBsaXN0ZXIgaGFuZGxlCisgICAgICAgIHRvIHRoZSBHQy4KKyAgICAgICAgKFdl
YkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppc1Y4RXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5l
ck9iamVjdFBlcmlzdGVudEhhbmRsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwOiBTdGFydGVkIHVzaW5nIGltcGxpY2l0IHJlZmVyZW5jZXMuCisgICAgICAgIChX
ZWJDb3JlOjpHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKiBkb20v
RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcjo6aXNWOEV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6cmVnaXN0ZXJWOEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzU2xv
dyk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6IEV4cG9zZWQgR0MgZnVuY3Rpb25zIHNp
bWlsYXIgdG8gdGhlIG9uZXMgZm9yIEpTQy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
OjpyZWdpc3RlclY4RXZlbnRMaXN0ZW5lclJlZmVyZW5jZXMpOgorCiAyMDExLTA0LTE1ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBDaHJv
bWl1bSBMaW51eCBSZWxlYXNlIGJ1aWxkIGZpeCBkdWUgdG8gdW51c2VkIHZhcmlhYmxlcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0K
aW5kZXggNzQxMjE4OC4uMDBjYmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTQ0MSwxMCArNDQxLDE0IEBAIHN1YiBH
ZXRJbnRlcm5hbEZpZWxkcwogICAgIAogICAgIG15IEBjdXN0b21JbnRlcm5hbEZpZWxkcyA9ICgp
OwogIAotICAgICMgV2UgY2FuJ3QgYXNrIHdoZXRoZXIgYSBwYXJlbnQgdHlwZSBoYXMgYSBnaXZl
biBleHRlbmRlZEF0dHJpYnV0ZSwgc28gc3BlY2lhbC1jYXNlIE5vZGUsIEFic3RyYWN0V29ya2Vy
IGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1Yi10eXBlcy4KKyAgICAjIFdlIGNh
bid0IGFzayB3aGV0aGVyIGEgcGFyZW50IHR5cGUgaGFzIGEgZ2l2ZW4gZXh0ZW5kZWRBdHRyaWJ1
dGUsIHNvIHNwZWNpYWwtY2FzZSBBYnN0cmFjdFdvcmtlciBhbmQgV29ya2VyQ29udGV4dCB0byBp
bmNsdWRlIGFsbCBzdWItdHlwZXMuCisgICAgIyBFdmVudCBsaXN0ZW5lcnMgb24gRE9NIG5vZGVz
IGFyZSBleHBsaWNpdGx5IHN1cHBvcnRlZCBpbiB0aGUgR0MgY29udHJvbGxlci4KICAgICAjIEZJ
WE1FOiBTVkdFbGVtZW50SW5zdGFuY2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgdGhlIEV2ZW50VGFy
Z2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSwgYnV0IGRvZXNuJ3QuCi0gICAgaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In0gfHwgSXNOb2RlU3ViVHlwZSgkZGF0
YU5vZGUpIHx8IElzU3ViVHlwZSgkZGF0YU5vZGUsICJBYnN0cmFjdFdvcmtlciIpIHx8IElzU3Vi
VHlwZSgkZGF0YU5vZGUsICJXb3JrZXJDb250ZXh0IikKLSAgICAgICAgfHwgJG5hbWUgZXEgIlNW
R0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAm
JgorICAgICAgICAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQi
fSB8fAorICAgICAgICAgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIkFic3RyYWN0V29ya2VyIikgfHwK
KyAgICAgICAgIElzU3ViVHlwZSgkZGF0YU5vZGUsICJXb3JrZXJDb250ZXh0IikgfHwKKyAgICAg
ICAgICRuYW1lIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiKSkgewogICAgICAgICBwdXNoKEBjdXN0
b21JbnRlcm5hbEZpZWxkcywgImV2ZW50TGlzdGVuZXJDYWNoZUluZGV4Iik7CiAgICAgfQogCkBA
IC05OTYsNyArMTAwMCw5IEBAIEVORAogICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlIGVxICJFdmVudExpc3RlbmVyIikgewogICAgICAgICAgICAgbXkgJGltcGxTZXR0ZXJG
dW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0ck5hbWUpOwogICAg
ICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCJ9ID0gMTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgdHJhbnNmZXJIaWRkZW5E
ZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIGltcC0+JGF0dHJOYW1lKCksIHZhbHVlLCBWOCR7aW50
ZXJmYWNlTmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAg
aWYgKCFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRl
cigpLCBpbXAtPiRhdHRyTmFtZSgpLCB2YWx1ZSwgVjgke2ludGVyZmFjZU5hbWV9OjpldmVudExp
c3RlbmVyQ2FjaGVJbmRleCk7XG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyQ29udGV4dCIgYW5kICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSBlcSAib25lcnJvciIpIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJW
OEV2ZW50TGlzdGVuZXJMaXN0LmgifSA9IDE7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siVjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyLmgifSA9IDE7CkBAIC0xMDY3LDYgKzEwNzMs
NyBAQCBzdWIgR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlCiBzdWIgR2VuZXJhdGVFdmVudExp
c3RlbmVyQ2FsbGJhY2sKIHsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15
ICRyZXF1aXJlc0hpZGRlbkRlcGVuZGVuY3kgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb25OYW1l
ID0gc2hpZnQ7CiAgICAgbXkgJGxvb2t1cFR5cGUgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikg
PyAiT3JDcmVhdGUiIDogIk9ubHkiOwogICAgIG15ICRwYXNzUmVmUHRySGFuZGxpbmcgPSAoJGZ1
bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiIiA6ICIuZ2V0KCkiOwpAQCAtMTA3OSw3ICsxMDg2LDEz
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0
ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGFyZ3NbMV0sIGZhbHNlLCBM
aXN0ZW5lckZpbmQke2xvb2t1cFR5cGV9KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAg
Vjgke2ltcGxDbGFzc05hbWV9Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKS0+JHtmdW5jdGlvbk5h
bWV9RXZlbnRMaXN0ZW5lcih2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCBs
aXN0ZW5lciR7cGFzc1JlZlB0ckhhbmRsaW5nfSwgYXJnc1syXS0+Qm9vbGVhblZhbHVlKCkpOwor
RU5ECisgICAgaWYgKCRyZXF1aXJlc0hpZGRlbkRlcGVuZGVuY3kpIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgPDxFTkQpOwogICAgICAgICAke2hpZGRlbkRlcGVuZGVuY3lBY3Rp
b259SGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOCR7aW1wbENsYXNz
TmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKK0VORAorICAgIH0KKyAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgfQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiB9CkBAIC0xMTg1LDEwICsxMTk4LDEwIEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJh
Y2sKICAgICAjIGJ1dCB0aGV5IGFyZSBleHRyZW1lbHkgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHZh
cmlvdXMgY2xhc3NlcyB0aGF0IHRha2UgZXZlbnQgbGlzdGVuZXJzLAogICAgICMgc28gd2UgY2Fu
IGdlbmVyYXRlIHRoZW0gYXMgYSAic3BlY2lhbCBjYXNlIi4KICAgICBpZiAoJG5hbWUgZXEgImFk
ZEV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNr
KCRpbXBsQ2xhc3NOYW1lLCAiYWRkIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNh
bGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAiYWRkIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2lmICgkbmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0
ZW5lciIpIHsKLSAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFz
c05hbWUsICJyZW1vdmUiKTsKKyAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2so
JGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSksICJyZW1vdmUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKaW5kZXggNGIzNmZmYi4uNmE4MTcwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oCkBAIC03Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNWOEV2ZW50TGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgbGlzdGVuZXIgb2JqZWN0LCBlaXRoZXIgYSBmdW5jdGlv
biBvciBhbiBvYmplY3QuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRMaXN0ZW5l
ck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgICAgICB7CkBAIC04
OCw2ICs5MCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcobV9saXN0ZW5lcik7CiAgICAgICAgIH0KIAorICAgICAg
ICAvLyBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaGFuZGxlIGZvciBHQy4gUmV0
dXJuZWQKKyAgICAgICAgLy8gdmFsdWUgbWlnaHQgYmUgYSB3ZWFrIGhhbmRsZSBhbmQgc28gbm90
IGd1YXJhbnRlZWQgdG8gc3RheQorICAgICAgICAvLyBhbGl2ZS4KKyAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gZ2V0RXhpc3RpbmdMaXN0ZW5lck9iamVjdFBlcmlzdGVudEhhbmRs
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xpc3RlbmVyOworICAgICAgICB9
CisKICAgICAgICAgYm9vbCBoYXNFeGlzdGluZ0xpc3RlbmVyT2JqZWN0KCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuICFtX2xpc3RlbmVyLklzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAppbmRleCAzMGE5MjhlLi40MjBlZTdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCkBA
IC0zMzAsNiArMzMwLDggQEAgcHVibGljOgogICAgICAgICBpZiAoIWdyb3VwSWQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIG1fZ3JvdXBlci5hcHBlbmQoR3JvdXBlckl0ZW0oZ3JvdXBJ
ZCwgd3JhcHBlcikpOworCisgICAgICAgIG5vZGUtPnJlZ2lzdGVyVjhFdmVudExpc3RlbmVyUmVm
ZXJlbmNlcygqd3JhcHBlcik7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9N
RGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKaW5kZXggMzQ4NzA0Zi4uN2E3
YzZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCkBAIC01Niw2ICs1NiwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrSlNGdW5jdGlvbihK
U0M6Ok1hcmtTdGFjayYpIHsgfQogI2VuZGlmCiAKKyNpZiBVU0UoVjgpCisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1Y4RXZlbnRMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5k
aWYKKwogICAgICAgICBib29sIGlzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gdmlydHVhbGlz
QXR0cmlidXRlKCk7IH0KICAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCmluZGV4IGQ4NGQ2NmIzLi42YjQyMmQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTM0LDcgKzM0LDExIEBACiAKICNp
bmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaWYgVVNFKFY4
KQorI2luY2x1ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCisjZW5kaWYKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV1RGOwogCkBAIC0zNzQsNiArMzc4LDI5IEBAIGNvbnN0IEV2ZW50TGlzdGVuZXJW
ZWN0b3ImIEV2ZW50VGFyZ2V0OjpnZXRFdmVudExpc3RlbmVycyhjb25zdCBBdG9taWNTdHJpbmcm
IGV2CiAgICAgcmV0dXJuICppdC0+c2Vjb25kOwogfQogCisjaWYgVVNFKFY4KQordm9pZCBFdmVu
dFRhcmdldDo6cmVnaXN0ZXJWOEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzU2xvdyh2ODo6T2JqZWN0
KiBwYXJlbnQsIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSkKK3sKKyAgICBBU1NFUlQoZGF0YSk7Cisg
ICAgVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBsaXN0ZW5lcnM7CisgICAgbGlz
dGVuZXJzLnJlc2VydmVDYXBhY2l0eShkYXRhLT5ldmVudExpc3RlbmVyTWFwLnNpemUoKSk7Cisg
ICAgRXZlbnRMaXN0ZW5lck1hcDo6aXRlcmF0b3IgZW5kID0gZGF0YS0+ZXZlbnRMaXN0ZW5lck1h
cC5lbmQoKTsKKyAgICBmb3IgKEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIGl0ID0gZGF0YS0+
ZXZlbnRMaXN0ZW5lck1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRXZl
bnRMaXN0ZW5lclZlY3RvciYgZW50cnkgPSAqaXQtPnNlY29uZDsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBlbnRyeS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFlbnRy
eVtpXS5saXN0ZW5lci0+aXNWOEV2ZW50TGlzdGVuZXIoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKj4oZW50cnlbaV0ubGlzdGVuZXIuZ2V0
KCkpOworICAgICAgICAgICAgaWYgKCFsaXN0ZW5lci0+aGFzRXhpc3RpbmdMaXN0ZW5lck9iamVj
dCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdGVuZXJzLmFw
cGVuZChsaXN0ZW5lci0+Z2V0RXhpc3RpbmdMaXN0ZW5lck9iamVjdFBlcmlzdGVudEhhbmRsZSgp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWxpc3RlbmVycy5pc0VtcHR5KCkpCisgICAg
ICAgIHY4OjpWODo6QWRkSW1wbGljaXRSZWZlcmVuY2VzKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+KHBhcmVudCksIGxpc3RlbmVycy5kYXRhKCksIGxpc3RlbmVycy5zaXplKCkpOworfQorI2Vu
ZGlmCisKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKIHsKICAg
ICBFdmVudFRhcmdldERhdGEqIGQgPSBldmVudFRhcmdldERhdGEoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgKaW5kZXggMzU0NGNlNi4uNjg3NDFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmgKQEAgLTM4LDYgKzM4LDEyIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKKyNpZiBVU0UoVjgpCituYW1lc3BhY2Ug
djggeworY2xhc3MgT2JqZWN0OworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEF1ZGlvQ29udGV4dDsKQEAgLTE3NCw2ICsxODAsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIGludmFsaWRhdGVKU0V2ZW50TGlzdGVuZXJzKEpTQzo6SlNP
YmplY3QqKTsKICNlbmRpZgogCisjaWYgVVNFKFY4KQorICAgICAgICB2b2lkIHJlZ2lzdGVyVjhF
dmVudExpc3RlbmVyUmVmZXJlbmNlcyh2ODo6T2JqZWN0Kik7CisgICAgICAgIHZvaWQgcmVnaXN0
ZXJWOEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzU2xvdyh2ODo6T2JqZWN0KiwgRXZlbnRUYXJnZXRE
YXRhKik7CisjZW5kaWYKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCB+RXZlbnRU
YXJnZXQoKTsKICAgICAgICAgCkBAIC0yMzgsNiArMjQ5LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICB9CiAjZW5kaWYKIAorI2lmIFVTRShWOCkKKyAgICBpbmxpbmUgdm9pZCBFdmVudFRh
cmdldDo6cmVnaXN0ZXJWOEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzKHY4OjpPYmplY3QqIHBhcmVu
dCkKKyAgICB7CisgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZCA9IGV2ZW50VGFyZ2V0RGF0YSgp
OworICAgICAgICBpZiAoIWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlZ2lzdGVy
VjhFdmVudExpc3RlbmVyUmVmZXJlbmNlc1Nsb3cocGFyZW50LCBkKTsKKyAgICB9CisjZW5kaWYK
KwogICAgIGlubGluZSBib29sIEV2ZW50VGFyZ2V0Ojppc0ZpcmluZ0V2ZW50TGlzdGVuZXJzKCkK
ICAgICB7CiAgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZCA9IGV2ZW50VGFyZ2V0RGF0YSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90290</attachid>
            <date>2011-04-19 18:37:05 -0700</date>
            <delta_ts>2011-04-22 16:10:23 -0700</delta_ts>
            <desc>patch: fixed a typo</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>10660</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYjEyYzNkLi44ODJjNGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDQtMTkgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gVXNl
IGltcGxpY2l0IHJlZmVyZW5jZXMgZm9yIFY4IGxpc3RlbmVycyBvbiBET00gbm9kZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk1MworCisgICAg
ICAgIEluc3RlYWQgb2YgYWxsb2NhdGluZyBhbiBhdXhpbGlhcnkgVjggYXJyYXkgcmVmZXJlbmNp
bmcgVjgKKyAgICAgICAgbGlzdGVuZXIgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYSBET00gbm9k
ZSBhbmQgdXNpbmcgYW4gZXh0cmEKKyAgICAgICAgcG9pbnRlciBpbiBldmVyeSBET00gbm9kZSB3
cmFwcGVyLCB3ZSBjYW4gcmVnaXN0ZXIgaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyBiZXR3
ZWVuIG5vZGVzIGFuZCB0aGVpciBsaXN0ZW5lcnMgZHVyaW5nIEdDLiBUaGlzIGFsc28KKyAgICAg
ICAgbWFrZXMgVjggYmluZGlncyBtb3JlIGFsaWduZWQgd2l0aCBKU0MgYmluZGluZ3MuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IFN0b3BwZWQgZ2VuZXJh
dGluZyB0aGUKKyAgICAgICAgbGlzdGVuZXIgY2FjaGUgaW50ZXJuYWwgZmllbGQgZm9yIERPTSBu
b2Rlcy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oOiBF
eHBvc2VkIHRoZSBsaXN0ZXIgaGFuZGxlCisgICAgICAgIHRvIHRoZSBHQy4KKyAgICAgICAgKFdl
YkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppc1Y4RXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5l
ck9iamVjdFBlcmlzdGVudEhhbmRsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwOiBTdGFydGVkIHVzaW5nIGltcGxpY2l0IHJlZmVyZW5jZXMuCisgICAgICAgIChX
ZWJDb3JlOjpHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKiBkb20v
RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lcjo6aXNWOEV2
ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6cmVnaXN0ZXJWOEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzU2xv
dyk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6IEV4cG9zZWQgR0MgZnVuY3Rpb25zIHNp
bWlsYXIgdG8gdGhlIG9uZXMgZm9yIEpTQy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
OjpyZWdpc3RlclY4RXZlbnRMaXN0ZW5lclJlZmVyZW5jZXMpOgorCiAyMDExLTA0LTE1ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBDaHJv
bWl1bSBMaW51eCBSZWxlYXNlIGJ1aWxkIGZpeCBkdWUgdG8gdW51c2VkIHZhcmlhYmxlcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0K
aW5kZXggNzQxMjE4OC4uMDBjYmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTQ0MSwxMCArNDQxLDE0IEBAIHN1YiBH
ZXRJbnRlcm5hbEZpZWxkcwogICAgIAogICAgIG15IEBjdXN0b21JbnRlcm5hbEZpZWxkcyA9ICgp
OwogIAotICAgICMgV2UgY2FuJ3QgYXNrIHdoZXRoZXIgYSBwYXJlbnQgdHlwZSBoYXMgYSBnaXZl
biBleHRlbmRlZEF0dHJpYnV0ZSwgc28gc3BlY2lhbC1jYXNlIE5vZGUsIEFic3RyYWN0V29ya2Vy
IGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1Yi10eXBlcy4KKyAgICAjIFdlIGNh
bid0IGFzayB3aGV0aGVyIGEgcGFyZW50IHR5cGUgaGFzIGEgZ2l2ZW4gZXh0ZW5kZWRBdHRyaWJ1
dGUsIHNvIHNwZWNpYWwtY2FzZSBBYnN0cmFjdFdvcmtlciBhbmQgV29ya2VyQ29udGV4dCB0byBp
bmNsdWRlIGFsbCBzdWItdHlwZXMuCisgICAgIyBFdmVudCBsaXN0ZW5lcnMgb24gRE9NIG5vZGVz
IGFyZSBleHBsaWNpdGx5IHN1cHBvcnRlZCBpbiB0aGUgR0MgY29udHJvbGxlci4KICAgICAjIEZJ
WE1FOiBTVkdFbGVtZW50SW5zdGFuY2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgdGhlIEV2ZW50VGFy
Z2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSwgYnV0IGRvZXNuJ3QuCi0gICAgaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In0gfHwgSXNOb2RlU3ViVHlwZSgkZGF0
YU5vZGUpIHx8IElzU3ViVHlwZSgkZGF0YU5vZGUsICJBYnN0cmFjdFdvcmtlciIpIHx8IElzU3Vi
VHlwZSgkZGF0YU5vZGUsICJXb3JrZXJDb250ZXh0IikKLSAgICAgICAgfHwgJG5hbWUgZXEgIlNW
R0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAm
JgorICAgICAgICAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQi
fSB8fAorICAgICAgICAgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIkFic3RyYWN0V29ya2VyIikgfHwK
KyAgICAgICAgIElzU3ViVHlwZSgkZGF0YU5vZGUsICJXb3JrZXJDb250ZXh0IikgfHwKKyAgICAg
ICAgICRuYW1lIGVxICJTVkdFbGVtZW50SW5zdGFuY2UiKSkgewogICAgICAgICBwdXNoKEBjdXN0
b21JbnRlcm5hbEZpZWxkcywgImV2ZW50TGlzdGVuZXJDYWNoZUluZGV4Iik7CiAgICAgfQogCkBA
IC05OTYsNyArMTAwMCw5IEBAIEVORAogICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlIGVxICJFdmVudExpc3RlbmVyIikgewogICAgICAgICAgICAgbXkgJGltcGxTZXR0ZXJG
dW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0ck5hbWUpOwogICAg
ICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCJ9ID0gMTsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgdHJhbnNmZXJIaWRkZW5E
ZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIGltcC0+JGF0dHJOYW1lKCksIHZhbHVlLCBWOCR7aW50
ZXJmYWNlTmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAg
aWYgKCFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRl
cigpLCBpbXAtPiRhdHRyTmFtZSgpLCB2YWx1ZSwgVjgke2ludGVyZmFjZU5hbWV9OjpldmVudExp
c3RlbmVyQ2FjaGVJbmRleCk7XG4iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBlcSAiV29ya2VyQ29udGV4dCIgYW5kICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSBlcSAib25lcnJvciIpIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJW
OEV2ZW50TGlzdGVuZXJMaXN0LmgifSA9IDE7CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siVjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyLmgifSA9IDE7CkBAIC0xMDY3LDYgKzEwNzMs
NyBAQCBzdWIgR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlCiBzdWIgR2VuZXJhdGVFdmVudExp
c3RlbmVyQ2FsbGJhY2sKIHsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15
ICRyZXF1aXJlc0hpZGRlbkRlcGVuZGVuY3kgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb25OYW1l
ID0gc2hpZnQ7CiAgICAgbXkgJGxvb2t1cFR5cGUgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikg
PyAiT3JDcmVhdGUiIDogIk9ubHkiOwogICAgIG15ICRwYXNzUmVmUHRySGFuZGxpbmcgPSAoJGZ1
bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiIiA6ICIuZ2V0KCkiOwpAQCAtMTA3OSw3ICsxMDg2LDEz
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0
ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxp
c3RlbmVyID0gVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGFyZ3NbMV0sIGZhbHNlLCBM
aXN0ZW5lckZpbmQke2xvb2t1cFR5cGV9KTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAg
Vjgke2ltcGxDbGFzc05hbWV9Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKS0+JHtmdW5jdGlvbk5h
bWV9RXZlbnRMaXN0ZW5lcih2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCBs
aXN0ZW5lciR7cGFzc1JlZlB0ckhhbmRsaW5nfSwgYXJnc1syXS0+Qm9vbGVhblZhbHVlKCkpOwor
RU5ECisgICAgaWYgKCRyZXF1aXJlc0hpZGRlbkRlcGVuZGVuY3kpIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgPDxFTkQpOwogICAgICAgICAke2hpZGRlbkRlcGVuZGVuY3lBY3Rp
b259SGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOCR7aW1wbENsYXNz
TmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKK0VORAorICAgIH0KKyAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgfQogICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CiB9CkBAIC0xMTg1LDEwICsxMTk4LDEwIEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJh
Y2sKICAgICAjIGJ1dCB0aGV5IGFyZSBleHRyZW1lbHkgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHZh
cmlvdXMgY2xhc3NlcyB0aGF0IHRha2UgZXZlbnQgbGlzdGVuZXJzLAogICAgICMgc28gd2UgY2Fu
IGdlbmVyYXRlIHRoZW0gYXMgYSAic3BlY2lhbCBjYXNlIi4KICAgICBpZiAoJG5hbWUgZXEgImFk
ZEV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNr
KCRpbXBsQ2xhc3NOYW1lLCAiYWRkIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNh
bGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAiYWRkIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2lmICgkbmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0
ZW5lciIpIHsKLSAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFz
c05hbWUsICJyZW1vdmUiKTsKKyAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2so
JGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSksICJyZW1vdmUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKaW5kZXggNGIzNmZmYi4uMGRhY2YwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oCkBAIC03Niw2ICs3Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNMYXp5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNWOEV2ZW50TGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisK
ICAgICAgICAgLy8gUmV0dXJucyB0aGUgbGlzdGVuZXIgb2JqZWN0LCBlaXRoZXIgYSBmdW5jdGlv
biBvciBhbiBvYmplY3QuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRMaXN0ZW5l
ck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgICAgICB7CkBAIC04
OCw2ICs5MCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcobV9saXN0ZW5lcik7CiAgICAgICAgIH0KIAorICAgICAg
ICAvLyBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgaGFuZGxlIGZvciBHQy4gUmV0
dXJuZWQKKyAgICAgICAgLy8gdmFsdWUgbWlnaHQgYmUgYSB3ZWFrIGhhbmRsZSBhbmQgc28gbm90
IGd1YXJhbnRlZWQgdG8gc3RheQorICAgICAgICAvLyBhbGl2ZS4KKyAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gZ2V0RXhpc3RpbmdMaXN0ZW5lck9iamVjdFBlcnNpc3RlbnRIYW5k
bGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9saXN0ZW5lcjsKKyAgICAgICAg
fQorCiAgICAgICAgIGJvb2wgaGFzRXhpc3RpbmdMaXN0ZW5lck9iamVjdCgpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiAhbV9saXN0ZW5lci5Jc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggMzBhOTI4ZS4uNDIwZWU3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcApA
QCAtMzMwLDYgKzMzMCw4IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFncm91cElkKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBtX2dyb3VwZXIuYXBwZW5kKEdyb3VwZXJJdGVtKGdyb3Vw
SWQsIHdyYXBwZXIpKTsKKworICAgICAgICBub2RlLT5yZWdpc3RlclY4RXZlbnRMaXN0ZW5lclJl
ZmVyZW5jZXMoKndyYXBwZXIpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERP
TURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCmluZGV4IDM0ODcwNGYuLjdh
N2M2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaApAQCAtNTYsNiArNTYsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0pTRnVuY3Rpb24o
SlNDOjpNYXJrU3RhY2smKSB7IH0KICNlbmRpZgogCisjaWYgVVNFKFY4KQorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNWOEV2ZW50TGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2Vu
ZGlmCisKICAgICAgICAgYm9vbCBpc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIHZpcnR1YWxp
c0F0dHJpYnV0ZSgpOyB9CiAgICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAppbmRleCBkODRkNjZiMy4uZDg3YmU3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0zNCw3ICszNCwxMSBAQAogCiAj
aW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2lmIFVTRShW
OCkKKyNpbmNsdWRlICJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIgorI2VuZGlmCiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdURjsKIApAQCAtMzc0LDYgKzM3OCwyOSBAQCBjb25zdCBFdmVudExpc3RlbmVy
VmVjdG9yJiBFdmVudFRhcmdldDo6Z2V0RXZlbnRMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5n
JiBldgogICAgIHJldHVybiAqaXQtPnNlY29uZDsKIH0KIAorI2lmIFVTRShWOCkKK3ZvaWQgRXZl
bnRUYXJnZXQ6OnJlZ2lzdGVyVjhFdmVudExpc3RlbmVyUmVmZXJlbmNlc1Nsb3codjg6Ok9iamVj
dCogcGFyZW50LCBFdmVudFRhcmdldERhdGEqIGRhdGEpCit7CisgICAgQVNTRVJUKGRhdGEpOwor
ICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gbGlzdGVuZXJzOworICAgIGxp
c3RlbmVycy5yZXNlcnZlQ2FwYWNpdHkoZGF0YS0+ZXZlbnRMaXN0ZW5lck1hcC5zaXplKCkpOwor
ICAgIEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IGRhdGEtPmV2ZW50TGlzdGVuZXJN
YXAuZW5kKCk7CisgICAgZm9yIChFdmVudExpc3RlbmVyTWFwOjppdGVyYXRvciBpdCA9IGRhdGEt
PmV2ZW50TGlzdGVuZXJNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEV2
ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gKml0LT5zZWNvbmQ7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZW50cnkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghZW50
cnlbaV0ubGlzdGVuZXItPmlzVjhFdmVudExpc3RlbmVyKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGVudHJ5W2ldLmxpc3RlbmVyLmdl
dCgpKTsKKyAgICAgICAgICAgIGlmICghbGlzdGVuZXItPmhhc0V4aXN0aW5nTGlzdGVuZXJPYmpl
Y3QoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxpc3RlbmVycy5h
cHBlbmQobGlzdGVuZXItPmdldEV4aXN0aW5nTGlzdGVuZXJPYmplY3RQZXJzaXN0ZW50SGFuZGxl
KCkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghbGlzdGVuZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgdjg6OlY4OjpBZGRJbXBsaWNpdFJlZmVyZW5jZXModjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4ocGFyZW50KSwgbGlzdGVuZXJzLmRhdGEoKSwgbGlzdGVuZXJzLnNpemUoKSk7Cit9Cisj
ZW5kaWYKKwogdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogewog
ICAgIEV2ZW50VGFyZ2V0RGF0YSogZCA9IGV2ZW50VGFyZ2V0RGF0YSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuaAppbmRleCAzNTQ0Y2U2Li42ODc0MWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuaApAQCAtMzgsNiArMzgsMTIgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAorI2lmIFVTRShWOCkKK25hbWVzcGFj
ZSB2OCB7CitjbGFzcyBPYmplY3Q7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgQXVkaW9Db250ZXh0OwpAQCAtMTc0LDYgKzE4MCwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZUpTRXZlbnRMaXN0ZW5lcnMoSlNDOjpK
U09iamVjdCopOwogI2VuZGlmCiAKKyNpZiBVU0UoVjgpCisgICAgICAgIHZvaWQgcmVnaXN0ZXJW
OEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzKHY4OjpPYmplY3QqKTsKKyAgICAgICAgdm9pZCByZWdp
c3RlclY4RXZlbnRMaXN0ZW5lclJlZmVyZW5jZXNTbG93KHY4OjpPYmplY3QqLCBFdmVudFRhcmdl
dERhdGEqKTsKKyNlbmRpZgorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIH5FdmVu
dFRhcmdldCgpOwogICAgICAgICAKQEAgLTIzOCw2ICsyNDksMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIH0KICNlbmRpZgogCisjaWYgVVNFKFY4KQorICAgIGlubGluZSB2b2lkIEV2ZW50
VGFyZ2V0OjpyZWdpc3RlclY4RXZlbnRMaXN0ZW5lclJlZmVyZW5jZXModjg6Ok9iamVjdCogcGFy
ZW50KQorICAgIHsKKyAgICAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRh
KCk7CisgICAgICAgIGlmICghZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVnaXN0
ZXJWOEV2ZW50TGlzdGVuZXJSZWZlcmVuY2VzU2xvdyhwYXJlbnQsIGQpOworICAgIH0KKyNlbmRp
ZgorCiAgICAgaW5saW5lIGJvb2wgRXZlbnRUYXJnZXQ6OmlzRmlyaW5nRXZlbnRMaXN0ZW5lcnMo
KQogICAgIHsKICAgICAgICAgRXZlbnRUYXJnZXREYXRhKiBkID0gZXZlbnRUYXJnZXREYXRhKCk7
Cg==
</data>
<flag name="review"
          id="83027"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90793</attachid>
            <date>2011-04-22 16:10:23 -0700</date>
            <delta_ts>2011-04-22 16:17:41 -0700</delta_ts>
            <desc>patch: less nasty dependencies</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>34264</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5Y2MyMDA2Li5mZmZjYjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTEtMDQtMTkgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gVXNl
IGltcGxpY2l0IHJlZmVyZW5jZXMgZm9yIFY4IGxpc3RlbmVycyBvbiBET00gbm9kZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk1MworCisgICAg
ICAgIEluc3RlYWQgb2YgYWxsb2NhdGluZyBhbiBhdXhpbGlhcnkgVjggYXJyYXkgcmVmZXJlbmNp
bmcgVjgKKyAgICAgICAgbGlzdGVuZXIgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYSBET00gbm9k
ZSBhbmQgdXNpbmcgYW4gZXh0cmEKKyAgICAgICAgcG9pbnRlciBpbiBldmVyeSBET00gbm9kZSB3
cmFwcGVyLCB3ZSBjYW4gcmVnaXN0ZXIgaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyBiZXR3
ZWVuIG5vZGVzIGFuZCB0aGVpciBsaXN0ZW5lcnMgZHVyaW5nIEdDLiBUaGlzIGFsc28KKyAgICAg
ICAgbWFrZXMgVjggYmluZGluZ3MgbW9yZSBhbGlnbmVkIHdpdGggSlNDIGJpbmRpbmdzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBTdG9wcGVkIGdlbmVy
YXRpbmcgdGhlCisgICAgICAgIGxpc3RlbmVyIGNhY2hlIGludGVybmFsIGZpZWxkIGZvciBET00g
bm9kZXMuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaDog
RXhwb3NlZCB0aGUgbGlzdGVyIGhhbmRsZQorICAgICAgICB0byB0aGUgR0MuCisgICAgICAgIChX
ZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5lck9iamVj
dFBlcmlzdGVudEhhbmRsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwOiBTdGFydGVkIHVzaW5nIGltcGxpY2l0IHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3Jl
OjpHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKiBkb20vRXZlbnRU
YXJnZXQuaDogSW1wbGVtZW50ZWQgYW4gaXRlcmF0b3Igb3ZlciBhbGwgbGlzdGVuZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yKToKKworMjAxMS0wNC0yMiAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEph
bWVzIFJvYmluc29uLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIG1pbmltdW0gdGV4dHVy
ZSBzaXplIGZvciBjb21wb3NpdG9yIHRpbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkyMzYKKworICAgICAgICBUaGlzIHdhcyBtaXN0YWtlbmx5
IGNvbW1pdHRlZCBpbiByODM5MTUgYW5kIGNhdXNlcyBiYWQgZmlsdGVyaW5nCisgICAgICAgIG9u
IHZlcnkgc21hbGwgdGV4dHVyZXMuCisKKyAgICAgICAgVGVzdHM6IGNvbXBvc2l0aW5nL2ltYWdl
cy9jb250ZW50LWltYWdlLWNoYW5nZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUaWxlckNocm9taXVtOjpzZXRUaWxlU2l6ZSk6CisKKzIwMTEtMDQtMjIgIEJldGggRGFraW4g
IDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93
aWFrLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
OTIyMworICAgICAgICBSRUdSRVNTSU9OIChyODIxODUpOiBpZnJhbWUgbm90IGRpc3BsYXllZCBh
ZnRlciBuYXZpZ2F0aW9uIGJhY2sgdG8gY2FjaGVkIHBhZ2UKKyAgICAgICAgLWFuZCBjb3JyZXNw
b25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vOTMyMzc2Mz4KKworICAgICAgICBDYWNo
ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIERvY3VtZW50OjpzZXRJblBhZ2VDYWNoZSgpIGluc3Rl
YWQgb2YgCisgICAgICAgIEZyYW1lVmlldzo6cmVzZXRTY3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50
c1NpemUoKSwgYW5kIG9ubHkgY2xlYXIgdGhlIGNvbnRlbnRzIHNpemUgCisgICAgICAgIGZvciB0
aGUgbWFpbkZyYW1lKCkuIFN0aWxsIHJlc2V0U2Nyb2xsYmFycygpIGZvciBvdGhlciBmcmFtZXMs
IHdoaWNoIG1hdGNoZXMgcHJlLQorICAgICAgICByODIxODUgY29kZS4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEluUGFnZUNhY2hl
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnJlc2V0U2Nyb2xsYmFyc0FuZENsZWFyQ29udGVudHNTaXplKToKKwogMjAxMS0wNC0y
MiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCAyMWUyYTBlLi5hOTdhZDExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAt
NDQxLDEwICs0NDEsMTQgQEAgc3ViIEdldEludGVybmFsRmllbGRzCiAgICAgCiAgICAgbXkgQGN1
c3RvbUludGVybmFsRmllbGRzID0gKCk7CiAgCi0gICAgIyBXZSBjYW4ndCBhc2sgd2hldGhlciBh
IHBhcmVudCB0eXBlIGhhcyBhIGdpdmVuIGV4dGVuZGVkQXR0cmlidXRlLCBzbyBzcGVjaWFsLWNh
c2UgTm9kZSwgQWJzdHJhY3RXb3JrZXIgYW5kIFdvcmtlckNvbnRleHQgdG8gaW5jbHVkZSBhbGwg
c3ViLXR5cGVzLgorICAgICMgV2UgY2FuJ3QgYXNrIHdoZXRoZXIgYSBwYXJlbnQgdHlwZSBoYXMg
YSBnaXZlbiBleHRlbmRlZEF0dHJpYnV0ZSwgc28gc3BlY2lhbC1jYXNlIEFic3RyYWN0V29ya2Vy
IGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1Yi10eXBlcy4KKyAgICAjIEV2ZW50
IGxpc3RlbmVycyBvbiBET00gbm9kZXMgYXJlIGV4cGxpY2l0bHkgc3VwcG9ydGVkIGluIHRoZSBH
QyBjb250cm9sbGVyLgogICAgICMgRklYTUU6IFNWR0VsZW1lbnRJbnN0YW5jZSBzaG91bGQgcHJv
YmFibHkgaGF2ZSB0aGUgRXZlbnRUYXJnZXQgZXh0ZW5kZWQgYXR0cmlidXRlLCBidXQgZG9lc24n
dC4KLSAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQi
fSB8fCBJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgfHwgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIkFi
c3RyYWN0V29ya2VyIikgfHwgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldvcmtlckNvbnRleHQiKQot
ICAgICAgICB8fCAkbmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIikgeworICAgIGlmICghSXNO
b2RlU3ViVHlwZSgkZGF0YU5vZGUpICYmCisgICAgICAgICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9IHx8CisgICAgICAgICBJc1N1YlR5cGUoJGRhdGFOb2Rl
LCAiQWJzdHJhY3RXb3JrZXIiKSB8fAorICAgICAgICAgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldv
cmtlckNvbnRleHQiKSB8fAorICAgICAgICAgJG5hbWUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIp
KSB7CiAgICAgICAgIHB1c2goQGN1c3RvbUludGVybmFsRmllbGRzLCAiZXZlbnRMaXN0ZW5lckNh
Y2hlSW5kZXgiKTsKICAgICB9CiAKQEAgLTk5Niw3ICsxMDAwLDkgQEAgRU5ECiAgICAgICAgIGlm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CiAgICAg
ICAgICAgICBteSAkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRhdHRyTmFtZSk7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5oIn0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICB0cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgaW1wLT4kYXR0
ck5hbWUoKSwgdmFsdWUsIFY4JHtpbnRlcmZhY2VOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5k
ZXgpO1xuIik7CisgICAgICAgICAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgdHJhbnNmZXJIaWRk
ZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIGltcC0+JGF0dHJOYW1lKCksIHZhbHVlLCBWOCR7
aW50ZXJmYWNlTmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJDb250ZXh0IiBh
bmQgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJvbmVycm9yIikgewogICAgICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IlY4RXZlbnRMaXN0ZW5lckxpc3QuaCJ9ID0gMTsKICAgICAg
ICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuaCJ9
ID0gMTsKQEAgLTEwNjcsNiArMTA3Myw3IEBAIHN1YiBHZW5lcmF0ZU5ld0Z1bmN0aW9uVGVtcGxh
dGUKIHN1YiBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjawogewogICAgIG15ICRpbXBsQ2xh
c3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJHJlcXVpcmVzSGlkZGVuRGVwZW5kZW5jeSA9IHNoaWZ0
OwogICAgIG15ICRmdW5jdGlvbk5hbWUgPSBzaGlmdDsKICAgICBteSAkbG9va3VwVHlwZSA9ICgk
ZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICJPckNyZWF0ZSIgOiAiT25seSI7CiAgICAgbXkgJHBh
c3NSZWZQdHJIYW5kbGluZyA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICIiIDogIi5nZXQo
KSI7CkBAIC0xMDc5LDcgKzEwODYsMTMgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAk
e2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3UKICAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlz
dGVuZXIoYXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZCR7bG9va3VwVHlwZX0pOwogICAgIGlm
IChsaXN0ZW5lcikgewogICAgICAgICBWOCR7aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpLT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dl
YkNvcmVTdHJpbmcoYXJnc1swXSksIGxpc3RlbmVyJHtwYXNzUmVmUHRySGFuZGxpbmd9LCBhcmdz
WzJdLT5Cb29sZWFuVmFsdWUoKSk7CitFTkQKKyAgICBpZiAoJHJlcXVpcmVzSGlkZGVuRGVwZW5k
ZW5jeSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgICAg
ICR7aGlkZGVuRGVwZW5kZW5jeUFjdGlvbn1IaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCks
IGFyZ3NbMV0sIFY4JHtpbXBsQ2xhc3NOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOwor
RU5ECisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICB9CiAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KQEAgLTExODUsMTAgKzExOTgsMTAgQEAgc3Vi
IEdlbmVyYXRlRnVuY3Rpb25DYWxsYmFjawogICAgICMgYnV0IHRoZXkgYXJlIGV4dHJlbWVseSBj
b25zaXN0ZW50IGFjcm9zcyB0aGUgdmFyaW91cyBjbGFzc2VzIHRoYXQgdGFrZSBldmVudCBsaXN0
ZW5lcnMsCiAgICAgIyBzbyB3ZSBjYW4gZ2VuZXJhdGUgdGhlbSBhcyBhICJzcGVjaWFsIGNhc2Ui
LgogICAgIGlmICgkbmFtZSBlcSAiYWRkRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgR2VuZXJh
dGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICJhZGQiKTsKKyAgICAgICAg
R2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJU
eXBlKCRkYXRhTm9kZSksICJhZGQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzaWYgKCRu
YW1lIGVxICJyZW1vdmVFdmVudExpc3RlbmVyIikgewotICAgICAgICBHZW5lcmF0ZUV2ZW50TGlz
dGVuZXJDYWxsYmFjaygkaW1wbENsYXNzTmFtZSwgInJlbW92ZSIpOworICAgICAgICBHZW5lcmF0
ZUV2ZW50TGlzdGVuZXJDYWxsYmFjaygkaW1wbENsYXNzTmFtZSwgIUlzTm9kZVN1YlR5cGUoJGRh
dGFOb2RlKSwgInJlbW92ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAppbmRl
eCA0YjM2ZmZiLi45YmI4YWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKQEAgLTg4LDYgKzg4LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5l
dyhtX2xpc3RlbmVyKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFByb3ZpZGVzIGFjY2VzcyB0
byB0aGUgdW5kZXJseWluZyBoYW5kbGUgZm9yIEdDLiBSZXR1cm5lZAorICAgICAgICAvLyB2YWx1
ZSBtaWdodCBiZSBhIHdlYWsgaGFuZGxlIGFuZCBzbyBub3QgZ3VhcmFudGVlZCB0byBzdGF5Cisg
ICAgICAgIC8vIGFsaXZlLgorICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXRF
eGlzdGluZ0xpc3RlbmVyT2JqZWN0UGVyc2lzdGVudEhhbmRsZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2xpc3RlbmVyOworICAgICAgICB9CisKICAgICAgICAgYm9vbCBoYXNF
eGlzdGluZ0xpc3RlbmVyT2JqZWN0KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICFt
X2xpc3RlbmVyLklzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0ND
b250cm9sbGVyLmNwcAppbmRleCBhN2QzZThhLi5mZmRkNmFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCkBAIC0zMjYsNiArMzI2LDIxIEBAIGNs
YXNzIEdyb3VwZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3Is
IHB1YmxpYyBET01XcmFwcGVyTWFwCiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlcikKICAgICB7CisgICAgICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygp
KSB7CisgICAgICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGxpc3Rl
bmVyczsKKyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJJdGVyYXRvciBpdGVyYXRvcihub2RlKTsK
KyAgICAgICAgICAgIHdoaWxlIChFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGl0ZXJhdG9yLm5l
eHRMaXN0ZW5lcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLT50eXBlKCkgIT0g
RXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4bGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXY4bGlzdGVuZXItPmhhc0V4aXN0aW5nTGlzdGVuZXJPYmpl
Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbGlz
dGVuZXJzLmFwcGVuZCh2OGxpc3RlbmVyLT5nZXRFeGlzdGluZ0xpc3RlbmVyT2JqZWN0UGVyc2lz
dGVudEhhbmRsZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbGlzdGVuZXJz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNl
cyh3cmFwcGVyLCBsaXN0ZW5lcnMuZGF0YSgpLCBsaXN0ZW5lcnMuc2l6ZSgpKTsKKyAgICAgICAg
fQorCiAgICAgICAgIEdyb3VwSWQgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQobm9kZSk7CiAg
ICAgICAgIGlmICghZ3JvdXBJZCkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDk5OGUzMzMuLjZjMTEyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApA
QCAtMzg3MSw4ICszODcxLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OnNldEluUGFnZUNhY2hlKGJvb2wg
ZmxhZykKICAgICBpZiAoZmxhZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJlcik7
CiAgICAgICAgIG1fc2F2ZWRSZW5kZXJlciA9IHJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChGcmFt
ZVZpZXcqIHYgPSB2aWV3KCkpCi0gICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnNBbmRDbGVh
ckNvbnRlbnRzU2l6ZSgpOworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2ID0gdmlldygpKSB7Cisg
ICAgICAgICAgICB2LT5jYWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAg
aWYgKHBhZ2UoKSAmJiBwYWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgICAg
ICAgICAgdi0+cmVzZXRTY3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMoKTsKKyAgICAgICAg
fQogICAgICAgICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIEFTU0VSVCghcmVuZGVyZXIoKSB8fCByZW5kZXJlcigpID09IG1fc2F2ZWRSZW5kZXJlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAppbmRleCBkODRkNjZiMy4uYTliZWVhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKQEAgLTM5MCw0ICszOTEsMjUgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcnMoKQogICAgIH0KIH0KIAorRXZlbnRMaXN0ZW5lckl0ZXJhdG9yOjpFdmVudExp
c3RlbmVySXRlcmF0b3IoKSA6IG1faW5kZXgoMCkge30KKworRXZlbnRMaXN0ZW5lckl0ZXJhdG9y
OjpFdmVudExpc3RlbmVySXRlcmF0b3IoRXZlbnRUYXJnZXQqIHRhcmdldCkgOiBtX2luZGV4KDAp
Cit7CisgICAgRXZlbnRUYXJnZXREYXRhKiBkYXRhID0gdGFyZ2V0LT5ldmVudFRhcmdldERhdGEo
KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBtX21hcEl0ZXJhdG9yID0g
ZGF0YS0+ZXZlbnRMaXN0ZW5lck1hcC5iZWdpbigpOworICAgIG1fbWFwRW5kID0gZGF0YS0+ZXZl
bnRMaXN0ZW5lck1hcC5lbmQoKTsKK30KKworRXZlbnRMaXN0ZW5lciogRXZlbnRMaXN0ZW5lckl0
ZXJhdG9yOjpuZXh0TGlzdGVuZXIoKQoreworICAgIGZvciAoOyBtX21hcEl0ZXJhdG9yICE9IG1f
bWFwRW5kOyArK21fbWFwSXRlcmF0b3IpIHsKKyAgICAgICAgRXZlbnRMaXN0ZW5lclZlY3RvciYg
bGlzdGVuZXJzID0gKm1fbWFwSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgaWYgKG1faW5kZXgg
PCBsaXN0ZW5lcnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyc1ttX2luZGV4
KytdLmxpc3RlbmVyLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAppbmRleCA4MTkwMmQwLi4zNzRj
M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaApAQCAtMTg1LDYgKzE4NSwyMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkg
PSAwOwogICAgICAgICAKICAgICAgICAgdm9pZCBmaXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqLCBF
dmVudFRhcmdldERhdGEqLCBFdmVudExpc3RlbmVyVmVjdG9yJik7CisKKyAgICAgICAgZnJpZW5k
IGNsYXNzIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjsKKyAgICB9OworCisgICAgY2xhc3MgRXZlbnRM
aXN0ZW5lckl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV2ZW50TGlzdGVuZXJJdGVy
YXRvcigpOworICAgICAgICBFdmVudExpc3RlbmVySXRlcmF0b3IoRXZlbnRUYXJnZXQqKTsKKwor
ICAgICAgICBFdmVudExpc3RlbmVyKiBuZXh0TGlzdGVuZXIoKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIG1fbWFwSXRlcmF0b3I7CisgICAgICAg
IEV2ZW50TGlzdGVuZXJNYXA6Oml0ZXJhdG9yIG1fbWFwRW5kOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OwogICAgIH07CiAKICAgICAvLyBGSVhNRTogVGhlc2UgbWFjcm9zIHNob3VsZCBiZSBz
cGxpdCBpbnRvIHNlcGFyYXRlIERFRklORSBhbmQgREVDTEFSRQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IDg0MjM4YWUuLjhjOGMzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTI1OCwxMCArMjU4LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnJlc2V0U2Nyb2xsYmFycygp
CiAKIHZvaWQgRnJhbWVWaWV3OjpyZXNldFNjcm9sbGJhcnNBbmRDbGVhckNvbnRlbnRzU2l6ZSgp
CiB7Ci0gICAgLy8gU2luY2UgdGhlIGNvbnRlbnRzIHNpemUgaXMgYmVpbmcgY2xlYXJlZCwgdGhl
IHNjcm9sbCBwb3NpdGlvbiB3aWxsIGxvc3QgYXMgYSBjb25zZXF1ZW5jZS4KLSAgICAvLyBDYWNo
ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHNvIGl0IGNhbiBiZSByZXN0b3JlZCBieSB0aGUgcGFnZSBj
YWNoZSBpZiBuZWNlc3NhcnkuIAotICAgIGNhY2hlQ3VycmVudFNjcm9sbFBvc2l0aW9uKCk7Ci0K
ICAgICByZXNldFNjcm9sbGJhcnMoKTsKIAogICAgIHNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKHRy
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKaW5kZXggZjk5NmJkMS4uMTc1YTkw
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUaWxlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC00MCw4ICs0MCw2IEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXN0YXRpYyBpbnQgbWluVGV4dHVyZVNpemUgPSAxNjsK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4g
TGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4ZWxPcHRpb24gYm9yZGVy
KQpAQCAtNzEsMTAgKzY5LDggQEAgR3JhcGhpY3NDb250ZXh0M0QqIExheWVyVGlsZXJDaHJvbWl1
bTo6bGF5ZXJSZW5kZXJlckNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBsYXllclJlbmRlcmVy
KCktPmNvbnRleHQoKTsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnNldFRpbGVTaXpl
KGNvbnN0IEludFNpemUmIHJlcXVlc3RlZFNpemUpCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
c2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBJbnRTaXplIHNpemUobWF4
KG1pblRleHR1cmVTaXplLCByZXF1ZXN0ZWRTaXplLndpZHRoKCkpLCBtYXgobWluVGV4dHVyZVNp
emUsIHJlcXVlc3RlZFNpemUuaGVpZ2h0KCkpKTsKLQogICAgIGlmIChtX3RpbGVTaXplID09IHNp
emUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IGJkNjdlODMuLmVmMWQzMTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wNC0y
MiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgorCisgICAgICAgIEZhY3RvciBMYXlvdXRUZXN0UmVzdWx0c1JlYWRlciBv
dXQgb2YgQ29tbWl0UXVldWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU5MjQ0CisKKyAgICAgICAgVGhpcyBjb2RlIHdpbGwgYmUgc2hhcmVkIHdpdGgg
dGhlIEVXUyB3aGVuIHRoZXkgc3RhcnQgcnVubmluZyB0ZXN0cy4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvdG9vbC9ib3QvbGF5b3V0dGVzdHJlc3VsdHNyZWFkZXIucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvbGF5b3V0dGVzdHJlc3VsdHNyZWFk
ZXJfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9j
b21tYW5kcy9xdWV1ZXMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1h
bmRzL3F1ZXVlc191bml0dGVzdC5weToKKwogMjAxMS0wNC0yMiAgRXJpYyBTZWlkZWwgIDxlcmlj
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2JvdC9sYXlvdXR0ZXN0cmVzdWx0
c3JlYWRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvbGF5b3V0dGVzdHJl
c3VsdHNyZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1NDhk
NQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvbGF5
b3V0dGVzdHJlc3VsdHNyZWFkZXIucHkKQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmlnaHQgKGMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBvcworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQubGF5b3V0dGVzdHJlc3Vs
dHMgaW1wb3J0IExheW91dFRlc3RSZXN1bHRzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZGVwcmVjYXRlZF9sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nCitmcm9tIHdlYmtpdHB5LnRvb2wu
c3RlcHMucnVudGVzdHMgaW1wb3J0IFJ1blRlc3RzCisKKworY2xhc3MgTGF5b3V0VGVzdFJlc3Vs
dHNSZWFkZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG9vbCwgYXJjaGl2ZV9k
aXJlY3RvcnkpOgorICAgICAgICBzZWxmLl90b29sID0gdG9vbAorICAgICAgICBzZWxmLl9hcmNo
aXZlX2RpcmVjdG9yeSA9IGFyY2hpdmVfZGlyZWN0b3J5CisKKyAgICAjIEZJWE1FOiBUaGlzIGV4
aXN0cyBmb3IgbW9ja2luZywgYnV0IHNob3VsZCBpbnN0ZWFkIGJlIG1vY2tlZCB2aWEKKyAgICAj
IHRvb2wuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZS4gIFRoZXkgaGF2ZSBkaWZmZXJlbnQgZXJy
b3IgaGFuZGxpbmcgYXQgdGhlIG1vbWVudC4KKyAgICBkZWYgX3JlYWRfZmlsZV9jb250ZW50cyhz
ZWxmLCBwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wu
ZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShwYXRoKQorICAgICAgICBleGNlcHQgSU9FcnJvciwg
ZTogICMgRmlsZSBkb2VzIG5vdCBleGlzdCBvciBjYW4ndCBiZSByZWFkLgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICMgRklYTUU6IFRoaXMgbG9naWMgc2hvdWxkIG1vdmUgdG8gdGhl
IHBvcnQgb2JqZWN0LgorICAgIGRlZiBfY3JlYXRlX2xheW91dF90ZXN0X3Jlc3VsdHMoc2VsZik6
CisgICAgICAgIHJlc3VsdHNfcGF0aCA9IHNlbGYuX3Rvb2wucG9ydCgpLmxheW91dF90ZXN0c19y
ZXN1bHRzX3BhdGgoKQorICAgICAgICByZXN1bHRzX2h0bWwgPSBzZWxmLl9yZWFkX2ZpbGVfY29u
dGVudHMocmVzdWx0c19wYXRoKQorICAgICAgICBpZiBub3QgcmVzdWx0c19odG1sOgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIExheW91dFRlc3RSZXN1bHRzLnJlc3Vs
dHNfZnJvbV9zdHJpbmcocmVzdWx0c19odG1sKQorCisgICAgZGVmIHJlc3VsdHMoc2VsZik6Cisg
ICAgICAgIHJlc3VsdHMgPSBzZWxmLl9jcmVhdGVfbGF5b3V0X3Rlc3RfcmVzdWx0cygpCisgICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCBub3QgaGF2ZSB0byBzZXQgZmFpbHVyZV9saW1pdF9jb3Vu
dCwgYnV0IHdlCisgICAgICAgICMgZG8gdW50aWwgcnVuLXdlYmtpdC10ZXN0cyBjYW4gYmUgdXBk
YXRlZCBzYXZlIG9mZiB0aGUgdmFsdWUKKyAgICAgICAgIyBvZiAtLWV4aXQtYWZ0ZXItTi1mYWls
dXJlcyBpbiByZXN1bHRzLmh0bWwvcmVzdWx0cy5qc29uLgorICAgICAgICAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODQ4MQorICAgICAgICBpZiByZXN1bHRzOgor
ICAgICAgICAgICAgcmVzdWx0cy5zZXRfZmFpbHVyZV9saW1pdF9jb3VudChSdW5UZXN0cy5OT05f
SU5URVJBQ1RJVkVfRkFJTFVSRV9MSU1JVF9DT1VOVCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMK
KworICAgIGRlZiBfcmVzdWx0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJlc3VsdHNfcGF0
aCA9IHNlbGYuX3Rvb2wucG9ydCgpLmxheW91dF90ZXN0c19yZXN1bHRzX3BhdGgoKQorICAgICAg
ICAjIEZJWE1FOiBUaGlzIGlzIHdyb25nIGluIHR3byB3YXlzOgorICAgICAgICAjIDEuIEl0IGFz
c3VtZXMgdGhhdCByZXN1bHRzLmh0bWwgaXMgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgcmVzdWx0
cyB0cmVlLgorICAgICAgICAjIDIuIFRoaXMgdXNlcyB0aGUgIm9sZCIgcG9ydHMucHkgaW5mcmFz
dHJ1Y3R1cmUgaW5zdGVhZCBvZiB0aGUgbmV3IGxheW91dF90ZXN0cy9wb3J0CisgICAgICAgICMg
d2hpY2ggd2lsbCBub3Qgc3VwcG9ydCBDaHJvbWl1bS4gIEhvd2V2ZXIgdGhlIG5ldyBhcmNoIGRv
ZXNuJ3Qgd29yayB3aXRoIG9sZC1ydW4td2Via2l0LXRlc3RzCisgICAgICAgICMgc28gd2UgaGF2
ZSB0byB1c2UgdGhpcyBmb3Igbm93LgorICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKHJl
c3VsdHNfcGF0aCkKKworICAgIGRlZiBhcmNoaXZlKHNlbGYsIHBhdGNoKToKKyAgICAgICAgcmVz
dWx0c19kaXJlY3RvcnkgPSBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSgpCisgICAgICAgIHJlc3Vs
dHNfbmFtZSwgXyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZXN1bHRzX2Rp
cmVjdG9yeSkpCisgICAgICAgICMgTm90ZTogV2UgbmFtZSB0aGUgemlwIHdpdGggdGhlIGJ1Z19p
ZCBpbnN0ZWFkIG9mIHBhdGNoX2lkIHRvIG1hdGNoIHdvcmtfaXRlbV9sb2dfcGF0aCgpLgorICAg
ICAgICB6aXBfcGF0aCA9IHNlbGYuX3Rvb2wud29ya3NwYWNlLmZpbmRfdW51c2VkX2ZpbGVuYW1l
KHNlbGYuX2FyY2hpdmVfZGlyZWN0b3J5LCAiJXMtJXMiICUgKHBhdGNoLmJ1Z19pZCgpLCByZXN1
bHRzX25hbWUpLCAiemlwIikKKyAgICAgICAgaWYgbm90IHppcF9wYXRoOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgaWYgbm90IHNlbGYuX3Rvb2wuZmlsZXN5c3RlbS5pc2Rpcihy
ZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBsb2coIiVzIGRvZXMgbm90IGV4aXN0LCBu
b3QgYXJjaGl2aW5nLiIgJSByZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIGFyY2hpdmUgPSBzZWxmLl90b29sLndvcmtzcGFjZS5jcmVhdGVfemlwKHpp
cF9wYXRoLCByZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgIyBSZW1vdmUgdGhlIHJlc3VsdHMg
ZGlyZWN0b3J5IHRvIHByZXZlbnQgaHR0cCBsb2dzLCBldGMuIGZyb20gZ2V0dGluZyBodWdlIGJl
dHdlZW4gcnVucy4KKyAgICAgICAgIyBXZSBjb3VsZCBoYXZlIGNyZWF0ZV96aXAgcmVtb3ZlIHRo
ZSBvcmlnaW5hbCwgYnV0IHRoaXMgaXMgbW9yZSBleHBsaWNpdC4KKyAgICAgICAgc2VsZi5fdG9v
bC5maWxlc3lzdGVtLnJtdHJlZShyZXN1bHRzX2RpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIGFy
Y2hpdmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9ib3QvbGF5b3V0
dGVzdHJlc3VsdHNyZWFkZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvYm90L2xheW91dHRlc3RyZXN1bHRzcmVhZGVyX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OTJhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvYm90L2xheW91dHRlc3RyZXN1bHRzcmVhZGVyX3VuaXR0ZXN0
LnB5CkBAIC0wLDAgKzEsNzYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QK
KworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9j
a0ZpbGVTeXN0ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGlt
cG9ydCBPdXRwdXRDYXB0dXJlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQubGF5b3V0dGVzdHJl
c3VsdHMgaW1wb3J0IExheW91dFRlc3RSZXN1bHRzCitmcm9tIHdlYmtpdHB5LnRvb2wuYm90Lmxh
eW91dHRlc3RyZXN1bHRzcmVhZGVyIGltcG9ydCAqCitmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rv
b2wgaW1wb3J0IE1vY2tUb29sCisKKworY2xhc3MgTGF5b3V0VGVzdFJlc3VsdHNSZWFkZXJUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9taXNzaW5nX2xheW91dF90ZXN0X3Jl
c3VsdHMoc2VsZik6CisgICAgICAgIHRvb2wgPSBNb2NrVG9vbCgpCisgICAgICAgIHJlYWRlciA9
IExheW91dFRlc3RSZXN1bHRzUmVhZGVyKHRvb2wsICIvdmFyL2xvZ3MiKQorICAgICAgICByZXN1
bHRzX3BhdGggPSAnL21vY2svcmVzdWx0cy5odG1sJworICAgICAgICB0b29sLmZpbGVzeXN0ZW0g
PSBNb2NrRmlsZVN5c3RlbSh7cmVzdWx0c19wYXRoOiBOb25lfSkKKyAgICAgICAgIyBNYWtlIHN1
cmUgdGhhdCBvdXIgZmlsZXN5c3RlbSBtb2NrIGZ1bmN0aW9ucyBhcyB3ZSBleHBlY3QuCisgICAg
ICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHRvb2wuZmlsZXN5c3RlbS5yZWFkX3RleHRf
ZmlsZSwgcmVzdWx0c19wYXRoKQorICAgICAgICAjIGxheW91dF90ZXN0X3Jlc3VsdHMgc2hvdWxk
bid0IHJhaXNlIGV2ZW4gaWYgdGhlIHJlc3VsdHMuaHRtbCBmaWxlIGlzIG1pc3NpbmcuCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRlci5yZXN1bHRzKCksIE5vbmUpCisKKyAgICBkZWYg
dGVzdF9sYXlvdXRfdGVzdF9yZXN1bHRzKHNlbGYpOgorICAgICAgICByZWFkZXIgPSBMYXlvdXRU
ZXN0UmVzdWx0c1JlYWRlcihNb2NrVG9vbCgpLCAiL3Zhci9sb2dzIikKKyAgICAgICAgcmVhZGVy
Ll9yZWFkX2ZpbGVfY29udGVudHMgPSBsYW1iZGEgcGF0aDogTm9uZQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhyZWFkZXIucmVzdWx0cygpLCBOb25lKQorICAgICAgICByZWFkZXIuX3JlYWRf
ZmlsZV9jb250ZW50cyA9IGxhbWJkYSBwYXRoOiAiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhyZWFkZXIucmVzdWx0cygpLCBOb25lKQorICAgICAgICByZWFkZXIuX2NyZWF0ZV9sYXlvdXRf
dGVzdF9yZXN1bHRzID0gbGFtYmRhOiBMYXlvdXRUZXN0UmVzdWx0cyhbXSkKKyAgICAgICAgcmVz
dWx0cyA9IHJlYWRlci5yZXN1bHRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMocmVz
dWx0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0cy5mYWlsdXJlX2xp
bWl0X2NvdW50KCksIDEwKSAgIyBUaGlzIHZhbHVlIG1hdGNoZXMgUnVuVGVzdHMuTk9OX0lOVEVS
QUNUSVZFX0ZBSUxVUkVfTElNSVRfQ09VTlQKKworICAgIGRlZiB0ZXN0X2FyY2hpdmVfbGFzdF9s
YXlvdXRfdGVzdF9yZXN1bHRzKHNlbGYpOgorICAgICAgICB0b29sID0gTW9ja1Rvb2woKQorICAg
ICAgICByZWFkZXIgPSBMYXlvdXRUZXN0UmVzdWx0c1JlYWRlcih0b29sLCAiL3Zhci9sb2dzIikK
KyAgICAgICAgcGF0Y2ggPSB0b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudCgxMjgpCisgICAgICAg
ICMgU2hvdWxkIGZhaWwgYmVjYXVzZSB0aGUgcmVzdWx0c19kaXJlY3RvcnkgZG9lcyBub3QgZXhp
c3QuCisgICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIvbW9jayBkb2VzIG5vdCBleGlzdCwgbm90
IGFyY2hpdmluZy5cbiIKKyAgICAgICAgYXJjaGl2ZSA9IE91dHB1dENhcHR1cmUoKS5hc3NlcnRf
b3V0cHV0cyhzZWxmLCByZWFkZXIuYXJjaGl2ZSwgW3BhdGNoXSwgZXhwZWN0ZWRfc3RkZXJyPWV4
cGVjdGVkX3N0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLCBOb25lKQor
CisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gIi9tb2NrIgorICAgICAgICAjIFNhbml0eSBj
aGVjayB3aGF0IHdlIGFzc3VtZSBvdXIgbW9jayByZXN1bHRzIGRpcmVjdG9yeSBpcy4KKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIuX3Jlc3VsdHNfZGlyZWN0b3J5KCksIHJlc3VsdHNf
ZGlyZWN0b3J5KQorICAgICAgICB0b29sLmZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnko
cmVzdWx0c19kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0b29sLmZpbGVzeXN0
ZW0uZXhpc3RzKHJlc3VsdHNfZGlyZWN0b3J5KSkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVx
dWFsKHJlYWRlci5hcmNoaXZlKHBhdGNoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZSh0b29sLmZpbGVzeXN0ZW0uZXhpc3RzKHJlc3VsdHNfZGlyZWN0b3J5KSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXMucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzLnB5CmluZGV4IDFlY2M3OGQuLmI1
ZThkMTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWV1ZXMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVl
cy5weQpAQCAtNDAsMTcgKzQwLDE2IEBAIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAK
IGZyb20gd2Via2l0cHkuY29tbW9uLmNvbmZpZy5jb21taXR0ZXJ2YWxpZGF0b3IgaW1wb3J0IENv
bW1pdHRlclZhbGlkYXRvcgogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3ppbGxhIGltcG9y
dCBBdHRhY2htZW50Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQubGF5b3V0dGVzdHJlc3VsdHMg
aW1wb3J0IExheW91dFRlc3RSZXN1bHRzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuc3RhdHVz
c2VydmVyIGltcG9ydCBTdGF0dXNTZXJ2ZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5k
ZXByZWNhdGVkX2xvZ2dpbmcgaW1wb3J0IGVycm9yLCBsb2cKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LnRvb2wu
Ym90LmJvdGluZm8gaW1wb3J0IEJvdEluZm8KIGZyb20gd2Via2l0cHkudG9vbC5ib3QuY29tbWl0
cXVldWV0YXNrIGltcG9ydCBDb21taXRRdWV1ZVRhc2ssIENvbW1pdFF1ZXVlVGFza0RlbGVnYXRl
CiBmcm9tIHdlYmtpdHB5LnRvb2wuYm90LmZlZWRlcnMgaW1wb3J0IENvbW1pdFF1ZXVlRmVlZGVy
LCBFV1NGZWVkZXIKK2Zyb20gd2Via2l0cHkudG9vbC5ib3QubGF5b3V0dGVzdHJlc3VsdHNyZWFk
ZXIgaW1wb3J0IExheW91dFRlc3RSZXN1bHRzUmVhZGVyCiBmcm9tIHdlYmtpdHB5LnRvb2wuYm90
LnF1ZXVlZW5naW5lIGltcG9ydCBRdWV1ZUVuZ2luZSwgUXVldWVFbmdpbmVEZWxlZ2F0ZQogZnJv
bSB3ZWJraXRweS50b29sLmJvdC5mbGFreXRlc3RyZXBvcnRlciBpbXBvcnQgRmxha3lUZXN0UmVw
b3J0ZXIKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5zdGVwc2VxdWVuY2UgaW1wb3J0IFN0
ZXBTZXF1ZW5jZUVycm9ySGFuZGxlcgotZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLnJ1bnRlc3Rz
IGltcG9ydCBSdW5UZXN0cwogZnJvbSB3ZWJraXRweS50b29sLm11bHRpY29tbWFuZHRvb2wgaW1w
b3J0IENvbW1hbmQsIFRyeUFnYWluCiAKIApAQCAtMTY5LDcgKzE2OCw3IEBAIGNsYXNzIEZlZWRl
clF1ZXVlKEFic3RyYWN0UXVldWUpOgogCiAgICAgX3NsZWVwX2R1cmF0aW9uID0gMzAgICMgc2Vj
b25kcwogCi0gICAgIyBBYnN0cmFjdFBhdGNoUXVldWUgbWV0aG9kcworICAgICMgQWJzdHJhY3RR
dWV1ZSBtZXRob2RzCiAKICAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToKICAgICAgICAg
QWJzdHJhY3RRdWV1ZS5iZWdpbl93b3JrX3F1ZXVlKHNlbGYpCkBAIC0yNTEsNiArMjUwLDcgQEAg
Y2xhc3MgQ29tbWl0UXVldWUoQWJzdHJhY3RQYXRjaFF1ZXVlLCBTdGVwU2VxdWVuY2VFcnJvckhh
bmRsZXIsIENvbW1pdFF1ZXVlVGFza0QKICAgICBkZWYgYmVnaW5fd29ya19xdWV1ZShzZWxmKToK
ICAgICAgICAgQWJzdHJhY3RQYXRjaFF1ZXVlLmJlZ2luX3dvcmtfcXVldWUoc2VsZikKICAgICAg
ICAgc2VsZi5jb21taXR0ZXJfdmFsaWRhdG9yID0gQ29tbWl0dGVyVmFsaWRhdG9yKHNlbGYuX3Rv
b2wuYnVncykKKyAgICAgICAgc2VsZi5fbGF5b3V0X3Rlc3RfcmVzdWx0c19yZWFkZXIgPSBMYXlv
dXRUZXN0UmVzdWx0c1JlYWRlcihzZWxmLl90b29sLCBzZWxmLl9sb2dfZGlyZWN0b3J5KCkpCiAK
ICAgICBkZWYgbmV4dF93b3JrX2l0ZW0oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uZXh0
X3BhdGNoKCkKQEAgLTMxMSw1NiArMzExLDExIEBAIGNsYXNzIENvbW1pdFF1ZXVlKEFic3RyYWN0
UGF0Y2hRdWV1ZSwgU3RlcFNlcXVlbmNlRXJyb3JIYW5kbGVyLCBDb21taXRRdWV1ZVRhc2tECiAg
ICAgICAgIGZhaWx1cmVfbG9nID0gc2VsZi5fbG9nX2Zyb21fc2NyaXB0X2Vycm9yX2Zvcl91cGxv
YWQoc2NyaXB0X2Vycm9yKQogICAgICAgICByZXR1cm4gc2VsZi5fdXBkYXRlX3N0YXR1cyhtZXNz
YWdlLCBwYXRjaD1wYXRjaCwgcmVzdWx0c19maWxlPWZhaWx1cmVfbG9nKQogCi0gICAgIyBGSVhN
RTogVGhpcyBleGlzdHMgZm9yIG1vY2tpbmcsIGJ1dCBzaG91bGQgaW5zdGVhZCBiZSBtb2NrZWQg
dmlhCi0gICAgIyB0b29sLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUuICBUaGV5IGhhdmUgZGlm
ZmVyZW50IGVycm9yIGhhbmRsaW5nIGF0IHRoZSBtb21lbnQuCi0gICAgZGVmIF9yZWFkX2ZpbGVf
Y29udGVudHMoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBz
ZWxmLl90b29sLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUocGF0aCkKLSAgICAgICAgZXhjZXB0
IElPRXJyb3IsIGU6ICAjIEZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgY2FuJ3QgYmUgcmVhZC4KLSAg
ICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAjIEZJWE1FOiBUaGlzIGxvZ2ljIHNob3VsZCBt
b3ZlIHRvIHRoZSBwb3J0IG9iamVjdC4KLSAgICBkZWYgX2NyZWF0ZV9sYXlvdXRfdGVzdF9yZXN1
bHRzKHNlbGYpOgotICAgICAgICByZXN1bHRzX3BhdGggPSBzZWxmLl90b29sLnBvcnQoKS5sYXlv
dXRfdGVzdHNfcmVzdWx0c19wYXRoKCkKLSAgICAgICAgcmVzdWx0c19odG1sID0gc2VsZi5fcmVh
ZF9maWxlX2NvbnRlbnRzKHJlc3VsdHNfcGF0aCkKLSAgICAgICAgaWYgbm90IHJlc3VsdHNfaHRt
bDoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBMYXlvdXRUZXN0UmVz
dWx0cy5yZXN1bHRzX2Zyb21fc3RyaW5nKHJlc3VsdHNfaHRtbCkKLQogICAgIGRlZiBsYXlvdXRf
dGVzdF9yZXN1bHRzKHNlbGYpOgotICAgICAgICByZXN1bHRzID0gc2VsZi5fY3JlYXRlX2xheW91
dF90ZXN0X3Jlc3VsdHMoKQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgbm90IGhhdmUgdG8g
c2V0IGZhaWx1cmVfbGltaXRfY291bnQsIGJ1dCB3ZQotICAgICAgICAjIGRvIHVudGlsIHJ1bi13
ZWJraXQtdGVzdHMgY2FuIGJlIHVwZGF0ZWQgc2F2ZSBvZmYgdGhlIHZhbHVlCi0gICAgICAgICMg
b2YgLS1leGl0LWFmdGVyLU4tZmFpbHVyZXMgaW4gcmVzdWx0cy5odG1sL3Jlc3VsdHMuanNvbi4K
LSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0ODEK
LSAgICAgICAgaWYgcmVzdWx0czoKLSAgICAgICAgICAgIHJlc3VsdHMuc2V0X2ZhaWx1cmVfbGlt
aXRfY291bnQoUnVuVGVzdHMuTk9OX0lOVEVSQUNUSVZFX0ZBSUxVUkVfTElNSVRfQ09VTlQpCi0g
ICAgICAgIHJldHVybiByZXN1bHRzCi0KLSAgICBkZWYgX3Jlc3VsdHNfZGlyZWN0b3J5KHNlbGYp
OgotICAgICAgICByZXN1bHRzX3BhdGggPSBzZWxmLl90b29sLnBvcnQoKS5sYXlvdXRfdGVzdHNf
cmVzdWx0c19wYXRoKCkKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyB3cm9uZyBpbiB0d28gd2F5
czoKLSAgICAgICAgIyAxLiBJdCBhc3N1bWVzIHRoYXQgcmVzdWx0cy5odG1sIGlzIGF0IHRoZSB0
b3AgbGV2ZWwgb2YgdGhlIHJlc3VsdHMgdHJlZS4KLSAgICAgICAgIyAyLiBUaGlzIHVzZXMgdGhl
ICJvbGQiIHBvcnRzLnB5IGluZnJhc3RydWN0dXJlIGluc3RlYWQgb2YgdGhlIG5ldyBsYXlvdXRf
dGVzdHMvcG9ydAotICAgICAgICAjIHdoaWNoIHdpbGwgbm90IHN1cHBvcnQgQ2hyb21pdW0uICBI
b3dldmVyIHRoZSBuZXcgYXJjaCBkb2Vzbid0IHdvcmsgd2l0aCBvbGQtcnVuLXdlYmtpdC10ZXN0
cwotICAgICAgICAjIHNvIHdlIGhhdmUgdG8gdXNlIHRoaXMgZm9yIG5vdy4KLSAgICAgICAgcmV0
dXJuIG9zLnBhdGguZGlybmFtZShyZXN1bHRzX3BhdGgpCisgICAgICAgIHJldHVybiBzZWxmLl9s
YXlvdXRfdGVzdF9yZXN1bHRzX3JlYWRlci5yZXN1bHRzKCkKIAogICAgIGRlZiBhcmNoaXZlX2xh
c3RfbGF5b3V0X3Rlc3RfcmVzdWx0cyhzZWxmLCBwYXRjaCk6Ci0gICAgICAgIHJlc3VsdHNfZGly
ZWN0b3J5ID0gc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkoKQotICAgICAgICByZXN1bHRzX25hbWUs
IF8gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocmVzdWx0c19kaXJlY3Rvcnkp
KQotICAgICAgICAjIE5vdGU6IFdlIG5hbWUgdGhlIHppcCB3aXRoIHRoZSBidWdfaWQgaW5zdGVh
ZCBvZiBwYXRjaF9pZCB0byBtYXRjaCB3b3JrX2l0ZW1fbG9nX3BhdGgoKS4KLSAgICAgICAgemlw
X3BhdGggPSBzZWxmLl90b29sLndvcmtzcGFjZS5maW5kX3VudXNlZF9maWxlbmFtZShzZWxmLl9s
b2dfZGlyZWN0b3J5KCksICIlcy0lcyIgJSAocGF0Y2guYnVnX2lkKCksIHJlc3VsdHNfbmFtZSks
ICJ6aXAiKQotICAgICAgICBpZiBub3QgemlwX3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4gTm9u
ZQotICAgICAgICBpZiBub3Qgc2VsZi5fdG9vbC5maWxlc3lzdGVtLmlzZGlyKHJlc3VsdHNfZGly
ZWN0b3J5KToKLSAgICAgICAgICAgIGxvZygiJXMgZG9lcyBub3QgZXhpc3QsIG5vdCBhcmNoaXZp
bmcuIiAlIHJlc3VsdHNfZGlyZWN0b3J5KQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAg
ICAgYXJjaGl2ZSA9IHNlbGYuX3Rvb2wud29ya3NwYWNlLmNyZWF0ZV96aXAoemlwX3BhdGgsIHJl
c3VsdHNfZGlyZWN0b3J5KQotICAgICAgICAjIFJlbW92ZSB0aGUgcmVzdWx0cyBkaXJlY3Rvcnkg
dG8gcHJldmVudCBodHRwIGxvZ3MsIGV0Yy4gZnJvbSBnZXR0aW5nIGh1Z2UgYmV0d2VlbiBydW5z
LgotICAgICAgICAjIFdlIGNvdWxkIGhhdmUgY3JlYXRlX3ppcCByZW1vdmUgdGhlIG9yaWdpbmFs
LCBidXQgdGhpcyBpcyBtb3JlIGV4cGxpY2l0LgotICAgICAgICBzZWxmLl90b29sLmZpbGVzeXN0
ZW0ucm10cmVlKHJlc3VsdHNfZGlyZWN0b3J5KQotICAgICAgICByZXR1cm4gYXJjaGl2ZQorICAg
ICAgICByZXR1cm4gc2VsZi5fbGF5b3V0X3Rlc3RfcmVzdWx0c19yZWFkZXIuYXJjaGl2ZShwYXRj
aCkKIAogICAgIGRlZiByZWZldGNoX3BhdGNoKHNlbGYsIHBhdGNoKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX3Rvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KHBhdGNoLmlkKCkpCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXVlc191bml0dGVzdC5w
eQppbmRleCBmYzFjZTBhLi5hZTA3NjEwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcXVldWVzX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWV1ZXNfdW5pdHRlc3QucHkKQEAgLTMxLDcgKzMxLDYg
QEAgaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbSBp
bXBvcnQgQ2hlY2tvdXROZWVkc1VwZGF0ZQogZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LmJ1Z3pp
bGxhIGltcG9ydCBBdHRhY2htZW50Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5
c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X3Jlc3VsdHMKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCkBAIC00
MCw3ICszOSwyMSBAQCBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuY29tbWFuZHRlc3QgaW1w
b3J0IENvbW1hbmRzVGVzdAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnF1ZXVlcyBpbXBv
cnQgKgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLnF1ZXVlc3Rlc3QgaW1wb3J0IFF1ZXVl
c1Rlc3QKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5zdGVwc2VxdWVuY2UgaW1wb3J0IFN0
ZXBTZXF1ZW5jZQotZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrVG9vbCwg
TW9ja1NDTSwgTW9ja1N0YXR1c1NlcnZlcgorZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGlt
cG9ydCBNb2NrVG9vbCwgTW9ja09wdGlvbnMsIE1vY2tTQ00sIE1vY2tTdGF0dXNTZXJ2ZXIKKwor
CitjbGFzcyBUZXN0Q29tbWl0UXVldWUoQ29tbWl0UXVldWUpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0b29sPU5vbmUpOgorICAgICAgICBDb21taXRRdWV1ZS5fX2luaXRfXyhzZWxmKQorICAg
ICAgICBpZiB0b29sOgorICAgICAgICAgICAgc2VsZi5iaW5kX3RvX3Rvb2wodG9vbCkKKyAgICAg
ICAgc2VsZi5fb3B0aW9ucyA9IE1vY2tPcHRpb25zKGNvbmZpcm09RmFsc2UsIHBhcmVudF9jb21t
YW5kPSJjb21taXQtcXVldWUiKQorCisgICAgZGVmIGJlZ2luX3dvcmtfcXVldWUoc2VsZik6Cisg
ICAgICAgIG91dHB1dF9jYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG91dHB1dF9j
YXB0dXJlLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAgICAgQ29tbWl0UXVldWUuYmVnaW5fd29ya19x
dWV1ZShzZWxmKQorICAgICAgICBvdXRwdXRfY2FwdHVyZS5yZXN0b3JlX291dHB1dCgpCiAKIAog
Y2xhc3MgVGVzdFF1ZXVlKEFic3RyYWN0UGF0Y2hRdWV1ZSk6CkBAIC0xNzEsMTAgKzE4NCwxMCBA
QCBjbGFzcyBBbHdheXNDb21taXRRdWV1ZVRvb2wob2JqZWN0KToKICAgICAgICAgcmV0dXJuIENv
bW1pdFF1ZXVlCiAKIAotY2xhc3MgU2Vjb25kVGhvdWdodHNDb21taXRRdWV1ZShDb21taXRRdWV1
ZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgorY2xhc3MgU2Vjb25kVGhvdWdodHNDb21taXRR
dWV1ZShUZXN0Q29tbWl0UXVldWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b29sPU5vbmUp
OgogICAgICAgICBzZWxmLl9yZWplY3RfcGF0Y2ggPSBGYWxzZQotICAgICAgICBDb21taXRRdWV1
ZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBUZXN0Q29tbWl0UXVldWUuX19pbml0X18oc2VsZiwg
dG9vbCkKIAogICAgIGRlZiBydW5fY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgIyBX
ZSB3YW50IHRvIHJlamVjdCB0aGUgcGF0Y2ggYWZ0ZXIgdGhlIGZpcnN0IHZhbGlkYXRpb24sCkBA
IC0zMjAsOCArMzMzLDggQEAgTU9DSzogcmVsZWFzZV93b3JrX2l0ZW06IGNvbW1pdC1xdWV1ZSAx
MDYKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy50ZXN0LCBGYWxzZSkKIAogICAg
IGRlZiB0ZXN0X21hbnVhbF9yZWplY3RfZHVyaW5nX3Byb2Nlc3Npbmcoc2VsZik6Ci0gICAgICAg
IHF1ZXVlID0gU2Vjb25kVGhvdWdodHNDb21taXRRdWV1ZSgpCi0gICAgICAgIHF1ZXVlLmJpbmRf
dG9fdG9vbChNb2NrVG9vbCgpKQorICAgICAgICBxdWV1ZSA9IFNlY29uZFRob3VnaHRzQ29tbWl0
UXVldWUoTW9ja1Rvb2woKSkKKyAgICAgICAgcXVldWUuYmVnaW5fd29ya19xdWV1ZSgpCiAgICAg
ICAgIHF1ZXVlLl90b29sLmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKCcvbW9jay9yZXN1bHRz
Lmh0bWwnLCAnJykgICMgT3RoZXJ3aXNlIHRoZSBjb21taXQtcXVldWUgd2lsbCBoaXQgYSBLZXlF
cnJvciB0cnlpbmcgdG8gcmVhZCB0aGUgcmVzdWx0cyBmcm9tIHRoZSBNb2NrRmlsZVN5c3RlbS4K
ICAgICAgICAgcXVldWUuX29wdGlvbnMgPSBNb2NrKCkKICAgICAgICAgcXVldWUuX29wdGlvbnMu
cG9ydCA9IE5vbmUKQEAgLTMzNiw4ICszNDksNyBAQCBNT0NLOiByZWxlYXNlX3dvcmtfaXRlbTog
Y29tbWl0LXF1ZXVlIDE5NwogICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMo
c2VsZiwgcXVldWUucHJvY2Vzc193b3JrX2l0ZW0sIFtRdWV1ZXNUZXN0Lm1vY2tfd29ya19pdGVt
XSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIAogICAgIGRlZiB0ZXN0X3JlcG9y
dF9mbGFreV90ZXN0cyhzZWxmKToKLSAgICAgICAgcXVldWUgPSBDb21taXRRdWV1ZSgpCi0gICAg
ICAgIHF1ZXVlLmJpbmRfdG9fdG9vbChNb2NrVG9vbCgpKQorICAgICAgICBxdWV1ZSA9IFRlc3RD
b21taXRRdWV1ZShNb2NrVG9vbCgpKQogICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiIiJNT0NL
IGJ1ZyBjb21tZW50OiBidWdfaWQ9NzYsIGNjPU5vbmUKIC0tLSBCZWdpbiBjb21tZW50IC0tLQog
VGhlIGNvbW1pdC1xdWV1ZSBqdXN0IHNhdyBmb28vYmFyLmh0bWwgZmxha2UgKFRleHQgZGlmZiBt
aXNtYXRjaCkgd2hpbGUgcHJvY2Vzc2luZyBhdHRhY2htZW50IDE5NyBvbiBidWcgNDIuCkBAIC0z
NzgsNTEgKzM5MCw5IEBAIFRoZSBjb21taXQtcXVldWUgaXMgY29udGludWluZyB0byBwcm9jZXNz
IHlvdXIgcGF0Y2guCiAKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNl
bGYsIHF1ZXVlLnJlcG9ydF9mbGFreV90ZXN0cywgW1F1ZXVlc1Rlc3QubW9ja193b3JrX2l0ZW0s
IHRlc3RfcmVzdWx0cywgTW9ja1ppcEZpbGUoKV0sIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9z
dGRlcnIpCiAKLSAgICBkZWYgdGVzdF9taXNzaW5nX2xheW91dF90ZXN0X3Jlc3VsdHMoc2VsZik6
Ci0gICAgICAgIHF1ZXVlID0gQ29tbWl0UXVldWUoKQotICAgICAgICB0b29sID0gTW9ja1Rvb2wo
KQotICAgICAgICByZXN1bHRzX3BhdGggPSAnL21vY2svcmVzdWx0cy5odG1sJwotICAgICAgICB0
b29sLmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSh7cmVzdWx0c19wYXRoOiBOb25lfSkKLSAg
ICAgICAgcXVldWUuYmluZF90b190b29sKHRvb2wpCi0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQg
b3VyIGZpbGVzeXN0ZW0gbW9jayBmdW5jdGlvbnMgYXMgd2UgZXhwZWN0LgotICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0b29sLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUsIHJl
c3VsdHNfcGF0aCkKLSAgICAgICAgIyBsYXlvdXRfdGVzdF9yZXN1bHRzIHNob3VsZG4ndCByYWlz
ZSBldmVuIGlmIHRoZSByZXN1bHRzLmh0bWwgZmlsZSBpcyBtaXNzaW5nLgotICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhxdWV1ZS5sYXlvdXRfdGVzdF9yZXN1bHRzKCksIE5vbmUpCi0KLSAgICBk
ZWYgdGVzdF9sYXlvdXRfdGVzdF9yZXN1bHRzKHNlbGYpOgotICAgICAgICBxdWV1ZSA9IENvbW1p
dFF1ZXVlKCkKLSAgICAgICAgcXVldWUuYmluZF90b190b29sKE1vY2tUb29sKCkpCi0gICAgICAg
IHF1ZXVlLl9yZWFkX2ZpbGVfY29udGVudHMgPSBsYW1iZGEgcGF0aDogTm9uZQotICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhxdWV1ZS5sYXlvdXRfdGVzdF9yZXN1bHRzKCksIE5vbmUpCi0gICAg
ICAgIHF1ZXVlLl9yZWFkX2ZpbGVfY29udGVudHMgPSBsYW1iZGEgcGF0aDogIiIKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocXVldWUubGF5b3V0X3Rlc3RfcmVzdWx0cygpLCBOb25lKQotICAg
ICAgICBxdWV1ZS5fY3JlYXRlX2xheW91dF90ZXN0X3Jlc3VsdHMgPSBsYW1iZGE6IExheW91dFRl
c3RSZXN1bHRzKFtdKQotICAgICAgICByZXN1bHRzID0gcXVldWUubGF5b3V0X3Rlc3RfcmVzdWx0
cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKHJlc3VsdHMsIE5vbmUpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdHMuZmFpbHVyZV9saW1pdF9jb3VudCgpLCAxMCkgICMg
VGhpcyB2YWx1ZSBtYXRjaGVzIFJ1blRlc3RzLk5PTl9JTlRFUkFDVElWRV9GQUlMVVJFX0xJTUlU
X0NPVU5UCi0KLSAgICBkZWYgdGVzdF9hcmNoaXZlX2xhc3RfbGF5b3V0X3Rlc3RfcmVzdWx0cyhz
ZWxmKToKLSAgICAgICAgcXVldWUgPSBDb21taXRRdWV1ZSgpCi0gICAgICAgIHRvb2wgPSBNb2Nr
VG9vbCgpCi0gICAgICAgIHF1ZXVlLmJpbmRfdG9fdG9vbCh0b29sKQotICAgICAgICBwYXRjaCA9
IHF1ZXVlLl90b29sLmJ1Z3MuZmV0Y2hfYXR0YWNobWVudCgxMjgpCi0gICAgICAgICMgU2hvdWxk
IGZhaWwgYmVjYXVzZSB0aGUgcmVzdWx0c19kaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuCi0gICAg
ICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIvbW9jayBkb2VzIG5vdCBleGlzdCwgbm90IGFyY2hpdmlu
Zy5cbiIKLSAgICAgICAgYXJjaGl2ZSA9IE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhz
ZWxmLCBxdWV1ZS5hcmNoaXZlX2xhc3RfbGF5b3V0X3Rlc3RfcmVzdWx0cywgW3BhdGNoXSwgZXhw
ZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChh
cmNoaXZlLCBOb25lKQotCi0gICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gIi9tb2NrIgotICAg
ICAgICAjIFNhbml0eSBjaGVjayB3aGF0IHdlIGFzc3VtZSBvdXIgbW9jayByZXN1bHRzIGRpcmVj
dG9yeSBpcy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5fcmVzdWx0c19kaXJlY3Rv
cnkoKSwgcmVzdWx0c19kaXJlY3RvcnkpCi0gICAgICAgIHRvb2wuZmlsZXN5c3RlbS5tYXliZV9t
YWtlX2RpcmVjdG9yeShyZXN1bHRzX2RpcmVjdG9yeSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHRvb2wuZmlsZXN5c3RlbS5leGlzdHMocmVzdWx0c19kaXJlY3RvcnkpKQotCi0gICAgICAgIHNl
bGYuYXNzZXJ0Tm90RXF1YWwocXVldWUuYXJjaGl2ZV9sYXN0X2xheW91dF90ZXN0X3Jlc3VsdHMo
cGF0Y2gpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRvb2wuZmlsZXN5c3RlbS5l
eGlzdHMocmVzdWx0c19kaXJlY3RvcnkpKQotCiAgICAgZGVmIHRlc3RfdXBsb2FkX3Jlc3VsdHNf
YXJjaGl2ZV9mb3JfcGF0Y2goc2VsZik6Ci0gICAgICAgIHF1ZXVlID0gQ29tbWl0UXVldWUoKQot
ICAgICAgICBxdWV1ZS5iaW5kX3RvX3Rvb2woTW9ja1Rvb2woKSkKKyAgICAgICAgcXVldWUgPSBU
ZXN0Q29tbWl0UXVldWUoTW9ja1Rvb2woKSkKKyAgICAgICAgcXVldWUuYmVnaW5fd29ya19xdWV1
ZSgpCiAgICAgICAgIHBhdGNoID0gcXVldWUuX3Rvb2wuYnVncy5mZXRjaF9hdHRhY2htZW50KDEy
OCkKICAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIiIiTU9DSyBhZGRfYXR0YWNobWVudF90b19i
dWc6IGJ1Z19pZD00MiwgZGVzY3JpcHRpb249QXJjaGl2ZSBvZiBsYXlvdXQtdGVzdC1yZXN1bHRz
IGZyb20gYm90IGZpbGVuYW1lPWxheW91dC10ZXN0LXJlc3VsdHMuemlwCiAtLSBCZWdpbiBjb21t
ZW50IC0tCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90797</attachid>
            <date>2011-04-22 16:17:41 -0700</date>
            <delta_ts>2011-04-22 18:20:48 -0700</delta_ts>
            <desc>patch: less nasty dependencies</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>9364</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5Y2MyMDA2Li5kNjMxMzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDQtMTkgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gVXNl
IGltcGxpY2l0IHJlZmVyZW5jZXMgZm9yIFY4IGxpc3RlbmVycyBvbiBET00gbm9kZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk1MworCisgICAg
ICAgIEluc3RlYWQgb2YgYWxsb2NhdGluZyBhbiBhdXhpbGlhcnkgVjggYXJyYXkgcmVmZXJlbmNp
bmcgVjgKKyAgICAgICAgbGlzdGVuZXIgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYSBET00gbm9k
ZSBhbmQgdXNpbmcgYW4gZXh0cmEKKyAgICAgICAgcG9pbnRlciBpbiBldmVyeSBET00gbm9kZSB3
cmFwcGVyLCB3ZSBjYW4gcmVnaXN0ZXIgaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyBiZXR3
ZWVuIG5vZGVzIGFuZCB0aGVpciBsaXN0ZW5lcnMgZHVyaW5nIEdDLiBUaGlzIGFsc28KKyAgICAg
ICAgbWFrZXMgVjggYmluZGluZ3MgbW9yZSBhbGlnbmVkIHdpdGggSlNDIGJpbmRpbmdzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBTdG9wcGVkIGdlbmVy
YXRpbmcgdGhlCisgICAgICAgIGxpc3RlbmVyIGNhY2hlIGludGVybmFsIGZpZWxkIGZvciBET00g
bm9kZXMuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaDog
RXhwb3NlZCB0aGUgbGlzdGVyIGhhbmRsZQorICAgICAgICB0byB0aGUgR0MuCisgICAgICAgIChX
ZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Z2V0RXhpc3RpbmdMaXN0ZW5lck9iamVj
dFBlcmlzdGVudEhhbmRsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIu
Y3BwOiBTdGFydGVkIHVzaW5nIGltcGxpY2l0IHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3Jl
OjpHcm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKiBkb20vRXZlbnRU
YXJnZXQuaDogSW1wbGVtZW50ZWQgYW4gaXRlcmF0b3Igb3ZlciBhbGwgbGlzdGVuZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yKToKKwogMjAxMS0wNC0yMiAgSm9z
ZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQppbmRleCAyMWUyYTBlLi5hOTdhZDExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtNDQxLDEw
ICs0NDEsMTQgQEAgc3ViIEdldEludGVybmFsRmllbGRzCiAgICAgCiAgICAgbXkgQGN1c3RvbUlu
dGVybmFsRmllbGRzID0gKCk7CiAgCi0gICAgIyBXZSBjYW4ndCBhc2sgd2hldGhlciBhIHBhcmVu
dCB0eXBlIGhhcyBhIGdpdmVuIGV4dGVuZGVkQXR0cmlidXRlLCBzbyBzcGVjaWFsLWNhc2UgTm9k
ZSwgQWJzdHJhY3RXb3JrZXIgYW5kIFdvcmtlckNvbnRleHQgdG8gaW5jbHVkZSBhbGwgc3ViLXR5
cGVzLgorICAgICMgV2UgY2FuJ3QgYXNrIHdoZXRoZXIgYSBwYXJlbnQgdHlwZSBoYXMgYSBnaXZl
biBleHRlbmRlZEF0dHJpYnV0ZSwgc28gc3BlY2lhbC1jYXNlIEFic3RyYWN0V29ya2VyIGFuZCBX
b3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1Yi10eXBlcy4KKyAgICAjIEV2ZW50IGxpc3Rl
bmVycyBvbiBET00gbm9kZXMgYXJlIGV4cGxpY2l0bHkgc3VwcG9ydGVkIGluIHRoZSBHQyBjb250
cm9sbGVyLgogICAgICMgRklYTUU6IFNWR0VsZW1lbnRJbnN0YW5jZSBzaG91bGQgcHJvYmFibHkg
aGF2ZSB0aGUgRXZlbnRUYXJnZXQgZXh0ZW5kZWQgYXR0cmlidXRlLCBidXQgZG9lc24ndC4KLSAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSB8fCBJ
c05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgfHwgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIkFic3RyYWN0
V29ya2VyIikgfHwgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldvcmtlckNvbnRleHQiKQotICAgICAg
ICB8fCAkbmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIikgeworICAgIGlmICghSXNOb2RlU3Vi
VHlwZSgkZGF0YU5vZGUpICYmCisgICAgICAgICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJFdmVudFRhcmdldCJ9IHx8CisgICAgICAgICBJc1N1YlR5cGUoJGRhdGFOb2RlLCAiQWJz
dHJhY3RXb3JrZXIiKSB8fAorICAgICAgICAgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldvcmtlckNv
bnRleHQiKSB8fAorICAgICAgICAgJG5hbWUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIpKSB7CiAg
ICAgICAgIHB1c2goQGN1c3RvbUludGVybmFsRmllbGRzLCAiZXZlbnRMaXN0ZW5lckNhY2hlSW5k
ZXgiKTsKICAgICB9CiAKQEAgLTk5Niw3ICsxMDAwLDkgQEAgRU5ECiAgICAgICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CiAgICAgICAgICAg
ICBteSAkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0
KCRhdHRyTmFtZSk7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lci5oIn0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICB0cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgaW1wLT4kYXR0ck5hbWUo
KSwgdmFsdWUsIFY4JHtpbnRlcmZhY2VOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpO1xu
Iik7CisgICAgICAgICAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgdHJhbnNmZXJIaWRkZW5EZXBl
bmRlbmN5KGluZm8uSG9sZGVyKCksIGltcC0+JGF0dHJOYW1lKCksIHZhbHVlLCBWOCR7aW50ZXJm
YWNlTmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJDb250ZXh0IiBhbmQgJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJvbmVycm9yIikgewogICAgICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IlY4RXZlbnRMaXN0ZW5lckxpc3QuaCJ9ID0gMTsKICAgICAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJWOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuaCJ9ID0gMTsK
QEAgLTEwNjcsNiArMTA3Myw3IEBAIHN1YiBHZW5lcmF0ZU5ld0Z1bmN0aW9uVGVtcGxhdGUKIHN1
YiBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjawogewogICAgIG15ICRpbXBsQ2xhc3NOYW1l
ID0gc2hpZnQ7CisgICAgbXkgJHJlcXVpcmVzSGlkZGVuRGVwZW5kZW5jeSA9IHNoaWZ0OwogICAg
IG15ICRmdW5jdGlvbk5hbWUgPSBzaGlmdDsKICAgICBteSAkbG9va3VwVHlwZSA9ICgkZnVuY3Rp
b25OYW1lIGVxICJhZGQiKSA/ICJPckNyZWF0ZSIgOiAiT25seSI7CiAgICAgbXkgJHBhc3NSZWZQ
dHJIYW5kbGluZyA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICIiIDogIi5nZXQoKSI7CkBA
IC0xMDc5LDcgKzEwODYsMTMgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2Z1bmN0
aW9uTmFtZX1FdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3UKICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIo
YXJnc1sxXSwgZmFsc2UsIExpc3RlbmVyRmluZCR7bG9va3VwVHlwZX0pOwogICAgIGlmIChsaXN0
ZW5lcikgewogICAgICAgICBWOCR7aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpLT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVT
dHJpbmcoYXJnc1swXSksIGxpc3RlbmVyJHtwYXNzUmVmUHRySGFuZGxpbmd9LCBhcmdzWzJdLT5C
b29sZWFuVmFsdWUoKSk7CitFTkQKKyAgICBpZiAoJHJlcXVpcmVzSGlkZGVuRGVwZW5kZW5jeSkg
eworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgICAgICR7aGlk
ZGVuRGVwZW5kZW5jeUFjdGlvbn1IaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3Nb
MV0sIFY4JHtpbXBsQ2xhc3NOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOworRU5ECisg
ICAgfQorICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICB9CiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KQEAgLTExODUsMTAgKzExOTgsMTAgQEAgc3ViIEdlbmVy
YXRlRnVuY3Rpb25DYWxsYmFjawogICAgICMgYnV0IHRoZXkgYXJlIGV4dHJlbWVseSBjb25zaXN0
ZW50IGFjcm9zcyB0aGUgdmFyaW91cyBjbGFzc2VzIHRoYXQgdGFrZSBldmVudCBsaXN0ZW5lcnMs
CiAgICAgIyBzbyB3ZSBjYW4gZ2VuZXJhdGUgdGhlbSBhcyBhICJzcGVjaWFsIGNhc2UiLgogICAg
IGlmICgkbmFtZSBlcSAiYWRkRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgR2VuZXJhdGVFdmVu
dExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICJhZGQiKTsKKyAgICAgICAgR2VuZXJh
dGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRk
YXRhTm9kZSksICJhZGQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzaWYgKCRuYW1lIGVx
ICJyZW1vdmVFdmVudExpc3RlbmVyIikgewotICAgICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJD
YWxsYmFjaygkaW1wbENsYXNzTmFtZSwgInJlbW92ZSIpOworICAgICAgICBHZW5lcmF0ZUV2ZW50
TGlzdGVuZXJDYWxsYmFjaygkaW1wbENsYXNzTmFtZSwgIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2Rl
KSwgInJlbW92ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAppbmRleCA0YjM2
ZmZiLi45YmI4YWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKQEAgLTg4LDYgKzg4LDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xp
c3RlbmVyKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUg
dW5kZXJseWluZyBoYW5kbGUgZm9yIEdDLiBSZXR1cm5lZAorICAgICAgICAvLyB2YWx1ZSBtaWdo
dCBiZSBhIHdlYWsgaGFuZGxlIGFuZCBzbyBub3QgZ3VhcmFudGVlZCB0byBzdGF5CisgICAgICAg
IC8vIGFsaXZlLgorICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBnZXRFeGlzdGlu
Z0xpc3RlbmVyT2JqZWN0UGVyc2lzdGVudEhhbmRsZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2xpc3RlbmVyOworICAgICAgICB9CisKICAgICAgICAgYm9vbCBoYXNFeGlzdGlu
Z0xpc3RlbmVyT2JqZWN0KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICFtX2xpc3Rl
bmVyLklzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
R0NDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmNwcAppbmRleCBhN2QzZThhLi5mZmRkNmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCkBAIC0zMjYsNiArMzI2LDIxIEBAIGNsYXNzIEdy
b3VwZXJWaXNpdG9yIDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IsIHB1Ymxp
YyBET01XcmFwcGVyTWFwCiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0
YVN0b3JlKiBzdG9yZSwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3Jh
cHBlcikKICAgICB7CisgICAgICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpKSB7Cisg
ICAgICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGxpc3RlbmVyczsK
KyAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJJdGVyYXRvciBpdGVyYXRvcihub2RlKTsKKyAgICAg
ICAgICAgIHdoaWxlIChFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGl0ZXJhdG9yLm5leHRMaXN0
ZW5lcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLT50eXBlKCkgIT0gRXZlbnRM
aXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4bGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXY4bGlzdGVuZXItPmhhc0V4aXN0aW5nTGlzdGVuZXJPYmplY3QoKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbGlzdGVuZXJz
LmFwcGVuZCh2OGxpc3RlbmVyLT5nZXRFeGlzdGluZ0xpc3RlbmVyT2JqZWN0UGVyc2lzdGVudEhh
bmRsZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbGlzdGVuZXJzLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyh3cmFw
cGVyLCBsaXN0ZW5lcnMuZGF0YSgpLCBsaXN0ZW5lcnMuc2l6ZSgpKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIEdyb3VwSWQgZ3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQobm9kZSk7CiAgICAgICAg
IGlmICghZ3JvdXBJZCkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCmluZGV4IGQ4NGQ2NmIzLi5hOWJlZWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2
ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtMzkwLDQgKzM5MSwy
NSBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiAgICAgfQog
fQogCitFdmVudExpc3RlbmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcigpIDogbV9p
bmRleCgwKSB7fQorCitFdmVudExpc3RlbmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRv
cihFdmVudFRhcmdldCogdGFyZ2V0KSA6IG1faW5kZXgoMCkKK3sKKyAgICBFdmVudFRhcmdldERh
dGEqIGRhdGEgPSB0YXJnZXQtPmV2ZW50VGFyZ2V0RGF0YSgpOworICAgIGlmICghZGF0YSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fbWFwSXRlcmF0b3IgPSBkYXRhLT5ldmVudExpc3RlbmVyTWFw
LmJlZ2luKCk7CisgICAgbV9tYXBFbmQgPSBkYXRhLT5ldmVudExpc3RlbmVyTWFwLmVuZCgpOwor
fQorCitFdmVudExpc3RlbmVyKiBFdmVudExpc3RlbmVySXRlcmF0b3I6Om5leHRMaXN0ZW5lcigp
Cit7CisgICAgZm9yICg7IG1fbWFwSXRlcmF0b3IgIT0gbV9tYXBFbmQ7ICsrbV9tYXBJdGVyYXRv
cikgeworICAgICAgICBFdmVudExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSAqbV9tYXBJdGVy
YXRvci0+c2Vjb25kOworICAgICAgICBpZiAobV9pbmRleCA8IGxpc3RlbmVycy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJzW21faW5kZXgrK10ubGlzdGVuZXIuZ2V0KCk7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5oCmluZGV4IDgxOTAyZDAuLjM3NGMzZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5oCkBAIC0xODUsNiArMTg1LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCosIEV2ZW50VGFyZ2V0RGF0YSosIEV2ZW50
TGlzdGVuZXJWZWN0b3ImKTsKKworICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lckl0
ZXJhdG9yOworICAgIH07CisKKyAgICBjbGFzcyBFdmVudExpc3RlbmVySXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKCk7CisgICAgICAgIEV2ZW50
TGlzdGVuZXJJdGVyYXRvcihFdmVudFRhcmdldCopOworCisgICAgICAgIEV2ZW50TGlzdGVuZXIq
IG5leHRMaXN0ZW5lcigpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgRXZlbnRMaXN0ZW5lck1h
cDo6aXRlcmF0b3IgbV9tYXBJdGVyYXRvcjsKKyAgICAgICAgRXZlbnRMaXN0ZW5lck1hcDo6aXRl
cmF0b3IgbV9tYXBFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgfTsKIAogICAg
IC8vIEZJWE1FOiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHNwbGl0IGludG8gc2VwYXJhdGUgREVG
SU5FIGFuZCBERUNMQVJFCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90823</attachid>
            <date>2011-04-22 18:20:48 -0700</date>
            <delta_ts>2011-04-22 18:23:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>listeners.patch</filename>
            <type>text/plain</type>
            <size>9379</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNzUyNjkwLi41OTE5YjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDQtMTkgIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtWOF0gVXNl
IGltcGxpY2l0IHJlZmVyZW5jZXMgZm9yIFY4IGxpc3RlbmVycyBvbiBET00gbm9kZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk1MworCisgICAg
ICAgIEluc3RlYWQgb2YgYWxsb2NhdGluZyBhbiBhdXhpbGlhcnkgVjggYXJyYXkgcmVmZXJlbmNp
bmcgVjgKKyAgICAgICAgbGlzdGVuZXIgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYSBET00gbm9k
ZSBhbmQgdXNpbmcgYW4gZXh0cmEKKyAgICAgICAgcG9pbnRlciBpbiBldmVyeSBET00gbm9kZSB3
cmFwcGVyLCB3ZSBjYW4gcmVnaXN0ZXIgaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyBiZXR3
ZWVuIG5vZGVzIGFuZCB0aGVpciBsaXN0ZW5lcnMgZHVyaW5nIEdDLiBUaGlzIGFsc28KKyAgICAg
ICAgbWFrZXMgVjggYmluZGluZ3MgbW9yZSBhbGlnbmVkIHdpdGggSlNDIGJpbmRpbmdzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoaXMgaXMgYSByZWZhY3RvcmluZy4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBTdG9wcGVkIGdlbmVy
YXRpbmcgdGhlCisgICAgICAgIGxpc3RlbmVyIGNhY2hlIGludGVybmFsIGZpZWxkIGZvciBET00g
bm9kZXMuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaDog
RXhwb3NlZCB0aGUgbGlzdGVyIGhhbmRsZQorICAgICAgICB0byB0aGUgR0MuCisgICAgICAgIChX
ZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6ZXhpc3RpbmdMaXN0ZW5lck9iamVjdFBl
cmlzdGVudEhhbmRsZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3Bw
OiBTdGFydGVkIHVzaW5nIGltcGxpY2l0IHJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpH
cm91cGVyVmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJn
ZXQuaDogSW1wbGVtZW50ZWQgYW4gaXRlcmF0b3Igb3ZlciBhbGwgbGlzdGVuZXJzLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRMaXN0ZW5lckl0ZXJhdG9yKToKKwogMjAxMS0wNC0yMiAgWGlhb21l
aSBKaSAgPHhqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBO
aXdhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQppbmRleCAyMWUyYTBlLi5hOTdhZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtNDQxLDEwICs0NDEsMTQg
QEAgc3ViIEdldEludGVybmFsRmllbGRzCiAgICAgCiAgICAgbXkgQGN1c3RvbUludGVybmFsRmll
bGRzID0gKCk7CiAgCi0gICAgIyBXZSBjYW4ndCBhc2sgd2hldGhlciBhIHBhcmVudCB0eXBlIGhh
cyBhIGdpdmVuIGV4dGVuZGVkQXR0cmlidXRlLCBzbyBzcGVjaWFsLWNhc2UgTm9kZSwgQWJzdHJh
Y3RXb3JrZXIgYW5kIFdvcmtlckNvbnRleHQgdG8gaW5jbHVkZSBhbGwgc3ViLXR5cGVzLgorICAg
ICMgV2UgY2FuJ3QgYXNrIHdoZXRoZXIgYSBwYXJlbnQgdHlwZSBoYXMgYSBnaXZlbiBleHRlbmRl
ZEF0dHJpYnV0ZSwgc28gc3BlY2lhbC1jYXNlIEFic3RyYWN0V29ya2VyIGFuZCBXb3JrZXJDb250
ZXh0IHRvIGluY2x1ZGUgYWxsIHN1Yi10eXBlcy4KKyAgICAjIEV2ZW50IGxpc3RlbmVycyBvbiBE
T00gbm9kZXMgYXJlIGV4cGxpY2l0bHkgc3VwcG9ydGVkIGluIHRoZSBHQyBjb250cm9sbGVyLgog
ICAgICMgRklYTUU6IFNWR0VsZW1lbnRJbnN0YW5jZSBzaG91bGQgcHJvYmFibHkgaGF2ZSB0aGUg
RXZlbnRUYXJnZXQgZXh0ZW5kZWQgYXR0cmlidXRlLCBidXQgZG9lc24ndC4KLSAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSB8fCBJc05vZGVTdWJU
eXBlKCRkYXRhTm9kZSkgfHwgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIkFic3RyYWN0V29ya2VyIikg
fHwgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldvcmtlckNvbnRleHQiKQotICAgICAgICB8fCAkbmFt
ZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIikgeworICAgIGlmICghSXNOb2RlU3ViVHlwZSgkZGF0
YU5vZGUpICYmCisgICAgICAgICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVu
dFRhcmdldCJ9IHx8CisgICAgICAgICBJc1N1YlR5cGUoJGRhdGFOb2RlLCAiQWJzdHJhY3RXb3Jr
ZXIiKSB8fAorICAgICAgICAgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldvcmtlckNvbnRleHQiKSB8
fAorICAgICAgICAgJG5hbWUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIpKSB7CiAgICAgICAgIHB1
c2goQGN1c3RvbUludGVybmFsRmllbGRzLCAiZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgiKTsKICAg
ICB9CiAKQEAgLTk5Niw3ICsxMDAwLDkgQEAgRU5ECiAgICAgICAgIGlmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiKSB7CiAgICAgICAgICAgICBteSAkaW1w
bFNldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyTmFt
ZSk7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5o
In0gPSAxOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB0cmFuc2Zl
ckhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgaW1wLT4kYXR0ck5hbWUoKSwgdmFsdWUs
IFY4JHtpbnRlcmZhY2VOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpO1xuIik7CisgICAg
ICAgICAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgeworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KGlu
Zm8uSG9sZGVyKCksIGltcC0+JGF0dHJOYW1lKCksIHZhbHVlLCBWOCR7aW50ZXJmYWNlTmFtZX06
OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJDb250ZXh0IiBhbmQgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lIGVxICJvbmVycm9yIikgewogICAgICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IlY4RXZlbnRMaXN0ZW5lckxpc3QuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJWOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuaCJ9ID0gMTsKQEAgLTEwNjcs
NiArMTA3Myw3IEBAIHN1YiBHZW5lcmF0ZU5ld0Z1bmN0aW9uVGVtcGxhdGUKIHN1YiBHZW5lcmF0
ZUV2ZW50TGlzdGVuZXJDYWxsYmFjawogewogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7
CisgICAgbXkgJHJlcXVpcmVzSGlkZGVuRGVwZW5kZW5jeSA9IHNoaWZ0OwogICAgIG15ICRmdW5j
dGlvbk5hbWUgPSBzaGlmdDsKICAgICBteSAkbG9va3VwVHlwZSA9ICgkZnVuY3Rpb25OYW1lIGVx
ICJhZGQiKSA/ICJPckNyZWF0ZSIgOiAiT25seSI7CiAgICAgbXkgJHBhc3NSZWZQdHJIYW5kbGlu
ZyA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICIiIDogIi5nZXQoKSI7CkBAIC0xMDc5LDcg
KzEwODYsMTMgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2Z1bmN0aW9uTmFtZX1F
dmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3UKICAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwg
ZmFsc2UsIExpc3RlbmVyRmluZCR7bG9va3VwVHlwZX0pOwogICAgIGlmIChsaXN0ZW5lcikgewog
ICAgICAgICBWOCR7aW1wbENsYXNzTmFtZX06OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpLT4ke2Z1
bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJn
c1swXSksIGxpc3RlbmVyJHtwYXNzUmVmUHRySGFuZGxpbmd9LCBhcmdzWzJdLT5Cb29sZWFuVmFs
dWUoKSk7CitFTkQKKyAgICBpZiAoJHJlcXVpcmVzSGlkZGVuRGVwZW5kZW5jeSkgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgICAgICR7aGlkZGVuRGVwZW5k
ZW5jeUFjdGlvbn1IaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4JHtp
bXBsQ2xhc3NOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOworRU5ECisgICAgfQorICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICB9CiAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIH0KQEAgLTExODUsMTAgKzExOTgsMTAgQEAgc3ViIEdlbmVyYXRlRnVuY3Rp
b25DYWxsYmFjawogICAgICMgYnV0IHRoZXkgYXJlIGV4dHJlbWVseSBjb25zaXN0ZW50IGFjcm9z
cyB0aGUgdmFyaW91cyBjbGFzc2VzIHRoYXQgdGFrZSBldmVudCBsaXN0ZW5lcnMsCiAgICAgIyBz
byB3ZSBjYW4gZ2VuZXJhdGUgdGhlbSBhcyBhICJzcGVjaWFsIGNhc2UiLgogICAgIGlmICgkbmFt
ZSBlcSAiYWRkRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVy
Q2FsbGJhY2soJGltcGxDbGFzc05hbWUsICJhZGQiKTsKKyAgICAgICAgR2VuZXJhdGVFdmVudExp
c3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSks
ICJhZGQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzaWYgKCRuYW1lIGVxICJyZW1vdmVF
dmVudExpc3RlbmVyIikgewotICAgICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjaygk
aW1wbENsYXNzTmFtZSwgInJlbW92ZSIpOworICAgICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJD
YWxsYmFjaygkaW1wbENsYXNzTmFtZSwgIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSwgInJlbW92
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAppbmRleCA0YjM2ZmZiLi42NGI1
ODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZl
bnRMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmgKQEAgLTg4LDYgKzg4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xpc3RlbmVyKTsK
ICAgICAgICAgfQogCisgICAgICAgIC8vIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgdW5kZXJseWlu
ZyBoYW5kbGUgZm9yIEdDLiBSZXR1cm5lZAorICAgICAgICAvLyB2YWx1ZSBtaWdodCBiZSBhIHdl
YWsgaGFuZGxlIGFuZCBzbyBub3QgZ3VhcmFudGVlZCB0byBzdGF5CisgICAgICAgIC8vIGFsaXZl
LgorICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBleGlzdGluZ0xpc3RlbmVyT2Jq
ZWN0UGVyc2lzdGVudEhhbmRsZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xp
c3RlbmVyOworICAgICAgICB9CisKICAgICAgICAgYm9vbCBoYXNFeGlzdGluZ0xpc3RlbmVyT2Jq
ZWN0KCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICFtX2xpc3RlbmVyLklzRW1wdHko
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcAppbmRl
eCBhN2QzZThhLi4xYTU1OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhH
Q0NvbnRyb2xsZXIuY3BwCkBAIC0zMjYsNiArMzI2LDIxIEBAIGNsYXNzIEdyb3VwZXJWaXNpdG9y
IDogcHVibGljIERPTVdyYXBwZXJNYXA8Tm9kZT46OlZpc2l0b3IsIHB1YmxpYyBET01XcmFwcGVy
TWFwCiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9y
ZSwgTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7
CisgICAgICAgIGlmIChub2RlLT5oYXNFdmVudExpc3RlbmVycygpKSB7CisgICAgICAgICAgICBW
ZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGxpc3RlbmVyczsKKyAgICAgICAgICAg
IEV2ZW50TGlzdGVuZXJJdGVyYXRvciBpdGVyYXRvcihub2RlKTsKKyAgICAgICAgICAgIHdoaWxl
IChFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGl0ZXJhdG9yLm5leHRMaXN0ZW5lcigpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyLT50eXBlKCkgIT0gRXZlbnRMaXN0ZW5lcjo6SlNF
dmVudExpc3RlbmVyVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4bGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXY4bGlzdGVuZXItPmhhc0V4aXN0aW5nTGlzdGVuZXJPYmplY3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFwcGVuZCh2OGxp
c3RlbmVyLT5leGlzdGluZ0xpc3RlbmVyT2JqZWN0UGVyc2lzdGVudEhhbmRsZSgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbGlzdGVuZXJzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyh3cmFwcGVyLCBsaXN0ZW5lcnMu
ZGF0YSgpLCBsaXN0ZW5lcnMuc2l6ZSgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEdyb3VwSWQg
Z3JvdXBJZCA9IGNhbGN1bGF0ZUdyb3VwSWQobm9kZSk7CiAgICAgICAgIGlmICghZ3JvdXBJZCkK
ICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCmluZGV4IGQ4
NGQ2NmIzLi43MjA3Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtMzkwLDQgKzM5MSwyOSBAQCB2b2lkIEV2ZW50
VGFyZ2V0OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygpCiAgICAgfQogfQogCitFdmVudExpc3Rl
bmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcigpIDogbV9pbmRleCgwKQoreworfQor
CitFdmVudExpc3RlbmVySXRlcmF0b3I6OkV2ZW50TGlzdGVuZXJJdGVyYXRvcihFdmVudFRhcmdl
dCogdGFyZ2V0KQorICAgIDogbV9pbmRleCgwKQoreworICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0
YSA9IHRhcmdldC0+ZXZlbnRUYXJnZXREYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9tYXBJdGVyYXRvciA9IGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuYmVnaW4o
KTsKKyAgICBtX21hcEVuZCA9IGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuZW5kKCk7Cit9CisKK0V2
ZW50TGlzdGVuZXIqIEV2ZW50TGlzdGVuZXJJdGVyYXRvcjo6bmV4dExpc3RlbmVyKCkKK3sKKyAg
ICBmb3IgKDsgbV9tYXBJdGVyYXRvciAhPSBtX21hcEVuZDsgKyttX21hcEl0ZXJhdG9yKSB7Cisg
ICAgICAgIEV2ZW50TGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9ICptX21hcEl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgICAgIGlmIChtX2luZGV4IDwgbGlzdGVuZXJzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBsaXN0ZW5lcnNbbV9pbmRleCsrXS5saXN0ZW5lci5nZXQoKTsKKyAgICAgICAg
bV9pbmRleCA9IDA7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCmluZGV4IDgxOTAyZDAuLjM3NGMzZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCkBAIC0xODUsNiArMTg1LDIxIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSA9IDA7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGZpcmVFdmVudExpc3RlbmVycyhFdmVudCosIEV2ZW50VGFy
Z2V0RGF0YSosIEV2ZW50TGlzdGVuZXJWZWN0b3ImKTsKKworICAgICAgICBmcmllbmQgY2xhc3Mg
RXZlbnRMaXN0ZW5lckl0ZXJhdG9yOworICAgIH07CisKKyAgICBjbGFzcyBFdmVudExpc3RlbmVy
SXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXZlbnRMaXN0ZW5lckl0ZXJhdG9yKCk7
CisgICAgICAgIEV2ZW50TGlzdGVuZXJJdGVyYXRvcihFdmVudFRhcmdldCopOworCisgICAgICAg
IEV2ZW50TGlzdGVuZXIqIG5leHRMaXN0ZW5lcigpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
RXZlbnRMaXN0ZW5lck1hcDo6aXRlcmF0b3IgbV9tYXBJdGVyYXRvcjsKKyAgICAgICAgRXZlbnRM
aXN0ZW5lck1hcDo6aXRlcmF0b3IgbV9tYXBFbmQ7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CiAgICAgfTsKIAogICAgIC8vIEZJWE1FOiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHNwbGl0IGlu
dG8gc2VwYXJhdGUgREVGSU5FIGFuZCBERUNMQVJFCg==
</data>
<flag name="review"
          id="83597"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="83599"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>