<?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>17896</bug_id>
          
          <creation_ts>2008-03-17 11:58:37 -0700</creation_ts>
          <short_desc>Inspector console should autocomplete the id&apos;s in the document when completing document.getElementById</short_desc>
          <delta_ts>2026-01-12 09:04:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>admin</cc>
    
    <cc>bweinstein</cc>
    
    <cc>graouts</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>keishi</cc>
    
    <cc>me</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>74132</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-03-17 11:58:37 -0700</bug_when>
    <thetext>It might also be helpful to autocomplete the &apos;name&apos; attributes when doing document.getElementsByName, the &apos;class&apos; attributes when doing document.getElementsByClassName, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238255</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-14 23:42:49 -0700</bug_when>
    <thetext>Something like this?
http://screencast.com/t/NTI1MmZjZWIt

I played around with this. I&apos;m doing it in a very inefficient way (not caching, rescanning the document every time) and there are magical things with ranges that I work around. But does this sound like something useful?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238263</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-06-14 23:59:29 -0700</bug_when>
    <thetext>Hot and Large!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238331</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-15 04:53:34 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Something like this?
&gt; http://screencast.com/t/NTI1MmZjZWIt
&gt; 
&gt; I played around with this. I&apos;m doing it in a very inefficient way (not caching, rescanning the document every time) and there are magical things with ranges that I work around. But does this sound like something useful?

When you are saying &quot;rescanning the document every time&quot;, do you mean anything other than 

document.querySelectorAll(&quot;[id]&quot;);?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238410</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-15 09:07:05 -0700</bug_when>
    <thetext>Yes, worse, I was just doing getElementsByTagName(&quot;*&quot;) for my proof of concept. Your query is much better! But even that might be scanning the full document.

With that suggestion I can probably do the following:

    getElementById         =&gt; querySelectorAll(&quot;[id]&quot;)
    getElementsByClassName =&gt; querySelectorAll(&quot;[class]&quot;)
    getElementsByName      =&gt; querySelectorAll(&quot;[name]&quot;)
    getElementsByTagName   =&gt; getElementsByTagName(&quot;*&quot;) + filter?
    querySelector[All]     =&gt; something fancy, like a mix of the above, #id, .class, tagName

I might take a look at:

  - getElementsByTagNameNS =&gt; same as above but with namespaces?
  - createElement[NS]      =&gt; valid html types, namespaces?
  - createEvent            =&gt; valid event types
  - maybe $ and $$         =&gt; getElementById &amp;&amp; querySelectorAll
  - addEventListener       =&gt; event types? functions?
  - removeEventListener    =&gt; event types? functions?

Knowing the function you&apos;re writing into can be kind of
useful. You can decide only to return objects of a
particular type. So for the 2nd argument of addEventListener
you would want either functions, or object&apos;s with a
&quot;handleEvent&quot; property. Thats going a bit overkill
though.

By the way, a did do a quick balanced parenthesis check
so the following will at least let you know that the
function is &quot;getElementById&quot;. I haven&apos;t played around
with what I want to do in this case.

  document.getElementById( func() + |</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240591</commentid>
    <comment_count>5</comment_count>
      <attachid>59226</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-20 22:18:05 -0700</bug_when>
    <thetext>Created attachment 59226
[PATCH] Work in Progress

Feel free to review, but I won&apos;t be satisfied with this until I can automatically provide
a closing &quot;)&quot; in the completion. It appears that the &quot;)&quot; triggers a new completion
because &quot;)&quot; is a special character.

This patch provides simple caching. After a list is fetched, a timer is started to clear
all lists after 30 seconds. I could change to timestamps, or cache indefinitely. Any
preferences?

@Pavel. I make use of &quot;window&quot; and &quot;document&quot; directly in this patch. What
should I be worried about? I recently found out document could be destroyed
if the frame navigates, and access to it will cause a crash. =/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240596</commentid>
    <comment_count>6</comment_count>
      <attachid>59228</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-20 22:32:22 -0700</bug_when>
    <thetext>Created attachment 59228
[PATCH] Work in Progress (Improved)

&gt;     getElementsByClassName =&gt; querySelectorAll(&quot;[class]&quot;)

Whoops, I forgot to update this one. Fixed.

&gt;   - maybe $ and $$         =&gt; getElementById &amp;&amp; querySelectorAll

Oversight of mine. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240656</commentid>
    <comment_count>7</comment_count>
      <attachid>59228</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-21 05:16:08 -0700</bug_when>
    <thetext>Comment on attachment 59228
[PATCH] Work in Progress (Improved)

WebCore/inspector/front-end/ConsoleView.js:353
 +      _getCurrentFunctionName: function(text)
No &apos;get&apos; prefix in WebKit?

WebCore/inspector/front-end/InjectedScript.js:177
 +      var elems = document.querySelectorAll(&quot;[id]&quot;);
You are only querying current document, not touching iframes. Imagine the code is frames[0].document.getElementById(...

WebCore/inspector/front-end/InjectedScript.js:190
 +      var elems = document.getElementsByTagName(&quot;*&quot;);
Same here, this all needs to be done in native code as I&apos;ve done it to the performSearch.

WebCore/inspector/front-end/InjectedScript.js:235
 +  InjectedScript._generatedCachedQueryObjects = [];
We try to get rid of these...

WebCore/inspector/front-end/InjectedScript.js:380
 +          case &quot;getElementById&quot;:
Now this is heuristics. How hard would it be to test whether this function is defined on the document object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245671</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-07-01 17:20:05 -0700</bug_when>
    <thetext>
(In reply to comment #7)
&gt; (From update of attachment 59228 [details])
&gt; WebCore/inspector/front-end/ConsoleView.js:353
&gt;  +      _getCurrentFunctionName: function(text)
&gt; No &apos;get&apos; prefix in WebKit?

Done.


&gt; WebCore/inspector/front-end/InjectedScript.js:177
&gt;  +      var elems = document.querySelectorAll(&quot;[id]&quot;);
&gt; You are only querying current document, not touching iframes. Imagine the code is frames[0].document.getElementById(...

Currently we don&apos;t even support autocompletion across frames.
So &quot;frames[0].do&quot; wouldn&apos;t even complete to &quot;document&quot;.
Autocompletion doesn&apos;t dig into either &quot;obj[key]&quot; or &quot;obj.get(key)&quot;.
I don&apos;t know why it doesn&apos;t dig into the bracket syntax, but
certainly the call syntax might cause sideaffects if run.

So, that sounds like a different problem that should be tackled.


&gt; WebCore/inspector/front-end/InjectedScript.js:380
&gt;  +          case &quot;getElementById&quot;:
&gt; Now this is heuristics. How hard would it be to test whether this function is defined
&gt; on the document object?

I thought about this at the time. I think ideally we should break
this down into 2 parts. With Example Input:

&gt;             document.body.appendChild( a.b.c().d( someVar|

    - Current Typing Unit      =&gt;  someVar

      This can autocomplete to variables and the usual things.
      Combining this with the next part, if we know its a particular
      function we can autocomplete with strings or restrict the
      variables to types that make sense.

    - Previous Unit            =&gt;  a.b.c().d

      This can be checked against a known function, because it is
      being called with &quot;(&quot;. Again here, we have a function call c(),
      so to be safe we don&apos;t evaluate it. But assuming that part
      wasn&apos;t there &quot;a.b.d&quot; we could compare against each frame&apos;s
      `document.getElementById` or something like that.

When I wrote this patch I didn&apos;t think far enough ahead. I just
wanted to play with it. I&apos;ve already missed it while working on
my other machines!


&gt; WebCore/inspector/front-end/InjectedScript.js:190
&gt;  +      var elems = document.getElementsByTagName(&quot;*&quot;);
&gt; Same here, this all needs to be done in native code as I&apos;ve done it to the performSearch.

I don&apos;t know about that. I thought if the user types &quot;document.getElementsByTagName(&quot;
they would only care about the tag names of elements in ^^^ that &quot;document&quot;. Not inner
&lt;iframe&gt;s which that cannot access. Given:

    &lt;body&gt;
      &lt;iframe src=&quot;data:text/html,&lt;p&gt;Hi&lt;/p&gt;&quot;&gt;&lt;/iframe&gt;
      &lt;script&gt;
        setTimeout(function() {
            alert( document.getElementsByTagName(&quot;p&quot;).length ); // =&gt; 0
        }, 1000);
      &lt;/script&gt;
    &lt;/body&gt;


&gt; WebCore/inspector/front-end/InjectedScript.js:235
&gt;  +  InjectedScript._generatedCachedQueryObjects = [];
&gt; We try to get rid of these...

Okay. I haven&apos;t stress tested this to see if caching is even useful.


&gt; NOTE TO SELF: This would also need a test. If performSearch can
&gt; be tested, this most certainly can be!

Noted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568762</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-03-01 10:21:11 -0800</bug_when>
    <thetext>*** Bug 80036 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733548</commentid>
    <comment_count>10</comment_count>
    <who name="Umar Hansa">admin</who>
    <bug_when>2012-10-03 04:02:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This patch provides simple caching. After a list is fetched, a timer is started to clear
&gt; all lists after 30 seconds. I could change to timestamps, or cache indefinitely. Any
&gt; preferences?

Hi, I&apos;m not a WebKit committer or anything, but this feature looked interesting so I had a quick look through it, sorry if this comes across naive but instead of clearing the cached queries every 30 seconds would it be worth using DOM Mutation Events (http://www.w3.org/TR/DOM-Level-2-Events/events.html) or Mutation Observers to detect changes to the DOM and then clear the cache?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733602</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-10-03 05:50:58 -0700</bug_when>
    <thetext>&gt; Hi, I&apos;m not a WebKit committer or anything, but this feature looked interesting so I had a quick look through it, sorry if this comes across naive but instead of clearing the cached queries every 30 seconds would it be worth using DOM Mutation Events (http://www.w3.org/TR/DOM-Level-2-Events/events.html) or Mutation Observers to detect changes to the DOM and then clear the cache?

This patch and the approach is slightly out of date. We no longer like doing non-formatting JavaScript in the context of running page. I would expose &quot;idsForInspector&quot; on the DocumentOrderedMap and would fetch all ids at the time they are needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056456</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-12-17 11:25:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/19281596&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59226</attachid>
            <date>2010-06-20 22:18:05 -0700</date>
            <delta_ts>2010-06-20 22:32:22 -0700</delta_ts>
            <desc>[PATCH] Work in Progress</desc>
            <filename>work-in-progress.patch</filename>
            <type>text/plain</type>
            <size>9480</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTViMWNkZS4uZWQ3NjgxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNi0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEluc3BlY3RvciBjb25zb2xlIHNob3VsZCBhdXRvY29tcGxldGUg
dGhlIGlkJ3MgaW4gdGhlIGRvY3VtZW50IHdoZW4gY29tcGxldGluZyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc4OTYKKworICAgICAgICBQcm92aWRlIHN0cmluZyBjb21wbGV0aW9ucyBmb3IgZWxlbWVudCBp
ZHMsIGNsYXNzIG5hbWVzLCB0YWcgbmFtZXMsCisgICAgICAgIGVsZW1lbnQgbmFtZXMsIGFuZCBz
aW1wbGUgc2VsZWN0b3JzIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIHVzZXIgaXMKKyAgICAgICAg
cHJvdmlkaW5nIGFuIGFyZ3VtZW50IGZvciBnZXRFbGVtZW50QnlJZCwgZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSwKKyAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWUsIGdldEVsZW1lbnRzQnlOYW1l
LCBhbmQgcXVlcnlTZWxlY3RvcltBbGxdLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90
b3R5cGUuX2dldEN1cnJlbnRGdW5jdGlvbk5hbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0cnVj
dG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IuKToKKwogMjAxMC0wNi0y
MCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29uc29sZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29s
ZVZpZXcuanMKaW5kZXggOGJiNzFlNi4uODY5ZjRlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcwpAQCAtMzMwLDggKzMzMCwxMCBAQCBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoZG90Tm90YXRpb24gfHwgYnJh
Y2tldE5vdGF0aW9uKQogICAgICAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25T
dHJpbmcuc3Vic3RyKDAsIGxhc3RJbmRleCk7CiAKKyAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9
IHRoaXMuX2dldEN1cnJlbnRGdW5jdGlvbk5hbWUod29yZFJhbmdlLnN0YXJ0Q29udGFpbmVyLnBh
cmVudE5vZGUudGV4dENvbnRlbnQpOworCiAgICAgICAgIHZhciBwcmVmaXggPSB3b3JkUmFuZ2Uu
dG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKCFleHByZXNzaW9uU3RyaW5nICYmICFwcmVmaXgpCisg
ICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZyAmJiAhcHJlZml4ICYmICFmdW5jdGlvbk5hbWUp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0g
dGhpcy5fcmVwb3J0Q29tcGxldGlvbnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0
aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7
CkBAIC0zNDUsNyArMzQ3LDQ1IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBpbmplY3RlZFNjcmlwdEFjY2VzcyA9IEluamVjdGVkU2NyaXB0QWNj
ZXNzLmdldChzZWxlY3RlZENhbGxGcmFtZS5pbmplY3RlZFNjcmlwdElkKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBpbmplY3RlZFNjcmlwdEFjY2VzcyA9IEluamVjdGVkU2NyaXB0QWNj
ZXNzLmdldERlZmF1bHQoKTsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0Q29tcGxl
dGlvbnMoZXhwcmVzc2lvblN0cmluZywgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBj
YWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpOworICAgICAgICBpbmplY3RlZFNjcmlwdEFj
Y2Vzcy5nZXRDb21wbGV0aW9ucyhleHByZXNzaW9uU3RyaW5nLCBmdW5jdGlvbk5hbWUsIGluY2x1
ZGVJbnNwZWN0b3JDb21tYW5kTGluZUFQSSwgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRpb25z
KTsKKyAgICB9LAorCisgICAgX2dldEN1cnJlbnRGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uKHRleHQp
CisgICAgeworICAgICAgICAvLyBHZXRzIHRoZSBtb3N0IHJlY2VudCB1bmNsb3NlZCBmdW5jdGlv
biBuYW1lLiBUaGlzIGlzIG5vdCBhIHBhcnNlciwgaXQKKyAgICAgICAgLy8ganVzdCBsb29rcyBm
b3IgdGhlIG1vc3QgcmVjZW50IGlkZW50aWZpZXIgYmVmb3JlIGFuIG9wZW5pbmcgcGFyZW50aGVz
aXMuCisgICAgICAgIC8vIEZvciBpbnB1dCAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGZ1bmMo
KSIgdGhpcyB3aWxsIHJldHVybiAiZ2V0RWxlbWVudEJ5SWQiLgorCisgICAgICAgIC8vIEZpbmQg
dGhlIGxhc3Qgb3BlbiBwYXJlbnRoZXNpcyB0aGF0IHdhcyBub3QgY2xvc2VkLgorICAgICAgICB2
YXIgYmFsYW5jZSA9IDA7CisgICAgICAgIHZhciBvcGVuUGFyZW5JbmRleCA9IC0xOworICAgICAg
ICBmb3IgKHZhciBpID0gdGV4dC5sZW5ndGg7IGkgPj0gMCAmJiBiYWxhbmNlID49IDA7IC0taSkg
eworICAgICAgICAgICAgdmFyIGMgPSB0ZXh0W2ldOworICAgICAgICAgICAgaWYgKGMgPT09ICIp
IikKKyAgICAgICAgICAgICAgICBiYWxhbmNlKys7CisgICAgICAgICAgICBlbHNlIGlmIChjID09
PSAiKCIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFsYW5jZSA9PT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBvcGVuUGFyZW5JbmRleCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAtLWJhbGFuY2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGwgcGFyZW50aGVzaXMgd2VyZSBiYWxh
bmNlZC4KKyAgICAgICAgaWYgKG9wZW5QYXJlbkluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworCisgICAgICAgIC8vIElkZW50aWZpZXIgYmVmb3JlIHRoZSBvcGVuaW5nIHBh
cmVudGhlc2lzLgorICAgICAgICB2YXIgc3RhcnRJbmRleCA9IDA7CisgICAgICAgIGZvciAodmFy
IGkgPSBvcGVuUGFyZW5JbmRleCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAo
IS9bYS16QS1aMC05X10vLnRlc3QodGV4dFtpXSkpIHsKKyAgICAgICAgICAgICAgICBzdGFydElu
ZGV4ID0gaSArIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdGV4dC5zdWJzdHIoc3RhcnRJbmRleCwgb3BlblBhcmVu
SW5kZXggLSBzdGFydEluZGV4KTsKICAgICB9LAogCiAgICAgX3JlcG9ydENvbXBsZXRpb25zOiBm
dW5jdGlvbihiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0
aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCwgcmVzdWx0LCBpc0V4Y2VwdGlvbikgewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDFkNjMw
MTcuLjZkM2Q1ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRT
Y3JpcHQuanMKQEAgLTE3MSw2ICsxNzEsMTA3IEBAIEluamVjdGVkU2NyaXB0LmdldFByb3BlcnRp
ZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJlCiAg
ICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKK0luamVjdGVkU2NyaXB0LmdldFZhbGlkRWxlbWVu
dElkcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgaWRzID0gW107CisgICAgdmFyIGVsZW1zID0g
ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpOworICAgIGZvciAodmFyIGkgPSAwLCBs
ZW4gPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIgaWQgPSBlbGVt
c1tpXS5nZXRBdHRyaWJ1dGUoImlkIik7CisgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICJzdHJp
bmciKQorICAgICAgICAgICAgaWRzLnB1c2goaWQpOworICAgIH0KKyAgICByZXR1cm4gaWRzOwor
fQorCitJbmplY3RlZFNjcmlwdC5nZXRWYWxpZFRhZ05hbWVzID0gZnVuY3Rpb24oKQoreworICAg
IHZhciB1c2VkID0ge307CisgICAgdmFyIHRhZ3MgPSBbIioiXTsKKyAgICB2YXIgZWxlbXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOworICAgIGZvciAodmFyIGkgPSAwLCBs
ZW4gPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIgdGFnID0gZWxl
bXNbaV0udGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICBpZiAoIXVzZWRbdGFnXSkgewor
ICAgICAgICAgICAgdXNlZFt0YWddID0gdHJ1ZTsKKyAgICAgICAgICAgIHRhZ3MucHVzaCh0YWcp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0YWdzOworfQorCitJbmplY3RlZFNjcmlw
dC5nZXRWYWxpZEVsZW1lbnROYW1lcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgdXNlZCA9IHt9
OworICAgIHZhciBuYW1lcyA9IFtdOworICAgIHZhciBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3JBbGwoIltuYW1lXSIpOworICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBlbGVtcy5sZW5n
dGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW1zW2ldLmdldEF0dHJp
YnV0ZSgibmFtZSIpOworICAgICAgICBpZiAobmFtZS5sZW5ndGggJiYgIXVzZWRbbmFtZV0pIHsK
KyAgICAgICAgICAgIHVzZWRbbmFtZV0gPSB0cnVlOworICAgICAgICAgICAgbmFtZXMucHVzaChu
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmFtZXM7Cit9CisKK0luamVjdGVk
U2NyaXB0LmdldFZhbGlkQ2xhc3NOYW1lcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgdXNlZCA9
IHt9OworICAgIHZhciBjbGFzc2VzID0gW107CisgICAgdmFyIGVsZW1zID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZWxlbXMu
bGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFyIGNsYXNzTmFtZXMgPSBlbGVtc1tp
XS5jbGFzc05hbWUuc3BsaXQoL1xzKy8pOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNs
YXNzTmFtZXMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBjbGFz
c05hbWVzW2pdOworICAgICAgICAgICAgaWYgKGNsYXNzTmFtZS5sZW5ndGggPiAwICYmICF1c2Vk
W2NsYXNzTmFtZV0pIHsKKyAgICAgICAgICAgICAgICB1c2VkW2NsYXNzTmFtZV0gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjbGFzc2VzOworfQorCitJbmplY3RlZFNjcmlw
dC5fY2xlYXJDYWNoZVRpbWVyID0gbnVsbDsKK0luamVjdGVkU2NyaXB0Ll9nZW5lcmF0ZWRDYWNo
ZWRRdWVyeU9iamVjdHMgPSBbXTsKKworSW5qZWN0ZWRTY3JpcHQuX2NsZWFyQ2FjaGVkUXVlcmll
cyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBmb3IgKHZhciBjYWNoZWRQcm9wZXJ0eU5hbWUgaW4gSW5q
ZWN0ZWRTY3JpcHQuX2dlbmVyYXRlZENhY2hlZFF1ZXJ5T2JqZWN0cykKKyAgICAgICAgSW5qZWN0
ZWRTY3JpcHRbY2FjaGVkUHJvcGVydHlOYW1lXSA9IG51bGw7CisgICAgSW5qZWN0ZWRTY3JpcHQu
X2NsZWFyQ2FjaGVUaW1lciA9IG51bGw7Cit9CisKK0luamVjdGVkU2NyaXB0Ll9nZW5lcmF0ZUNh
Y2hlZFF1ZXJ5QnVpbGRlciA9IGZ1bmN0aW9uKGNhY2hlZFByb3BlcnR5TmFtZSwgZnVuY3Rpb25O
YW1lKQoreworICAgIC8vIENyZWF0ZSB0aGUgY2FjaGUgb2JqZWN0LCBpbml0aWFsaXplIHdpdGgg
bnVsbC4KKyAgICBJbmplY3RlZFNjcmlwdFtjYWNoZWRQcm9wZXJ0eU5hbWVdID0gbnVsbDsKKwor
ICAgIC8vIFJlbWVtYmVyIHRoYXQgY2FjaGVkIG9iamVjdCBuYW1lLCBzbyB3ZSBjYW4gY2xlYXIg
aXQgbGF0ZXIuCisgICAgSW5qZWN0ZWRTY3JpcHQuX2dlbmVyYXRlZENhY2hlZFF1ZXJ5T2JqZWN0
cy5wdXNoKGNhY2hlZFByb3BlcnR5TmFtZSk7CisKKyAgICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRv
IHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgICB2YXIgb3JpZ2luYWxGdW5jdGlvbiA9IEluamVj
dGVkU2NyaXB0W2Z1bmN0aW9uTmFtZV07CisKKyAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5hbCBm
dW5jdGlvbiB3aXRoIG9uZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgY2FjaGUuCisgICAg
Ly8gVGhlIGVudGlyZSBjYWNoZSBnZXRzIGNsZWFyZWQgMzAgc2Vjb25kcyBhZnRlciBpdHMgaW5p
dGlhbCB1c2UuCisgICAgSW5qZWN0ZWRTY3JpcHRbZnVuY3Rpb25OYW1lXSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHRbY2FjaGVkUHJvcGVydHlOYW1lXSkKKyAgICAg
ICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdFtjYWNoZWRQcm9wZXJ0eU5hbWVdOworCisgICAg
ICAgIEluamVjdGVkU2NyaXB0W2NhY2hlZFByb3BlcnR5TmFtZV0gPSBvcmlnaW5hbEZ1bmN0aW9u
KCk7CisKKyAgICAgICAgaWYgKEluamVjdGVkU2NyaXB0Ll9jbGVhckNhY2hlVGltZXIgPT09IG51
bGwpCisgICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fY2xlYXJDYWNoZVRpbWVyID0gc2V0VGlt
ZW91dChJbmplY3RlZFNjcmlwdC5fY2xlYXJDYWNoZWRRdWVyaWVzLCAzMDAwMCk7CisKKyAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0W2NhY2hlZFByb3BlcnR5TmFtZV07CisgICAgfQorfQor
CitJbmplY3RlZFNjcmlwdC5fZ2VuZXJhdGVDYWNoZWRRdWVyeUJ1aWxkZXIoImNhY2hlZFZhbGlk
RWxlbWVudElkcyIsICJnZXRWYWxpZEVsZW1lbnRJZHMiKTsKK0luamVjdGVkU2NyaXB0Ll9nZW5l
cmF0ZUNhY2hlZFF1ZXJ5QnVpbGRlcigiY2FjaGVkVmFsaWRUYWdOYW1lcyIsICJnZXRWYWxpZFRh
Z05hbWVzIik7CitJbmplY3RlZFNjcmlwdC5fZ2VuZXJhdGVDYWNoZWRRdWVyeUJ1aWxkZXIoImNh
Y2hlZFZhbGlkRWxlbWVudE5hbWVzIiwgImdldFZhbGlkRWxlbWVudE5hbWVzIik7CitJbmplY3Rl
ZFNjcmlwdC5fZ2VuZXJhdGVDYWNoZWRRdWVyeUJ1aWxkZXIoImNhY2hlZFZhbGlkQ2xhc3NOYW1l
cyIsICJnZXRWYWxpZENsYXNzTmFtZXMiKTsKKwogSW5qZWN0ZWRTY3JpcHQuX2lzU2NvcGVQcm94
eSA9IGZ1bmN0aW9uKG9iamVjdFByb3h5KQogewogICAgIHZhciBvYmplY3RJZCA9IG9iamVjdFBy
b3h5Lm9iamVjdElkOwpAQCAtMjMwLDcgKzMzMSw3IEBAIEluamVjdGVkU2NyaXB0Ll9nZXRQcm9w
ZXJ0eU5hbWVzID0gZnVuY3Rpb24ob2JqZWN0LCByZXN1bHRTZXQpCiAgICAgcmV0dXJuIE9iamVj
dC5rZXlzKHByb3BlcnR5TmFtZVNldCk7CiB9CiAKLUluamVjdGVkU2NyaXB0LmdldENvbXBsZXRp
b25zID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJ
LCBjYWxsRnJhbWVJZCkKK0luamVjdGVkU2NyaXB0LmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24o
ZXhwcmVzc2lvbiwgZnVuY3Rpb25OYW1lLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEks
IGNhbGxGcmFtZUlkKQogewogICAgIHZhciBwcm9wcyA9IHt9OwogICAgIHRyeSB7CkBAIC0yNjIs
NiArMzYzLDQwIEBAIEluamVjdGVkU2NyaXB0LmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oZXhw
cmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lCiAgICAgICAgIH0KICAgICB9IGNh
dGNoKGUpIHsKICAgICB9CisKKyAgICAvLyBBdXRvY29tcGxldGUgc29tZSB2YWx1ZXMgZm9yIGtu
b3duIGZ1bmN0aW9ucy4KKyAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIHZhciBsaXN0
OworICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uTmFtZSkgeworICAgICAgICBjYXNlICJxdWVyeVNl
bGVjdG9yIjoKKyAgICAgICAgY2FzZSAicXVlcnlTZWxlY3RvckFsbCI6CisgICAgICAgICAgICB2
YXIgbGlzdDEgPSBJbmplY3RlZFNjcmlwdC5nZXRWYWxpZEVsZW1lbnRJZHMoKS5tYXAoZnVuY3Rp
b24oZSkgeyByZXR1cm4gIiMiICsgZTsgfSk7CisgICAgICAgICAgICB2YXIgbGlzdDIgPSBJbmpl
Y3RlZFNjcmlwdC5nZXRWYWxpZENsYXNzTmFtZXMoKS5tYXAoZnVuY3Rpb24oZSkgeyByZXR1cm4g
Ii4iICsgZTsgfSk7IC8vIEZJWE1FOiBicm9rZW4KKyAgICAgICAgICAgIHZhciBsaXN0MyA9IElu
amVjdGVkU2NyaXB0LmdldFZhbGlkVGFnTmFtZXMoKTsKKyAgICAgICAgICAgIGxpc3QgPSBsaXN0
MS5jb25jYXQobGlzdDIpLmNvbmNhdChsaXN0Myk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAiZ2V0RWxlbWVudEJ5SWQiOgorICAgICAgICAgICAgbGlzdCA9IEluamVjdGVkU2Ny
aXB0LmdldFZhbGlkRWxlbWVudElkcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgImdldEVsZW1lbnRzQnlDbGFzc05hbWUiOgorICAgICAgICAgICAgbGlzdCA9IEluamVjdGVk
U2NyaXB0LmdldFZhbGlkQ2xhc3NOYW1lcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgImdldEVsZW1lbnRzQnlUYWdOYW1lIjoKKyAgICAgICAgICAgIGxpc3QgPSBJbmplY3Rl
ZFNjcmlwdC5nZXRWYWxpZFRhZ05hbWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiZ2V0RWxlbWVudHNCeU5hbWUiOgorICAgICAgICAgICAgbGlzdCA9IEluamVjdGVkU2Ny
aXB0LmdldFZhbGlkRWxlbWVudE5hbWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGxpc3QgPSBbXTsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsZW4gPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAg
ICAgICBwcm9wc1snIicgKyBsaXN0W2ldICsgJyInXSA9IHRydWU7CisgICAgICAgICAgICBwcm9w
c1siJyIgKyBsaXN0W2ldICsgIiciXSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICBy
ZXR1cm4gcHJvcHM7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59228</attachid>
            <date>2010-06-20 22:32:22 -0700</date>
            <delta_ts>2010-06-21 05:16:08 -0700</delta_ts>
            <desc>[PATCH] Work in Progress (Improved)</desc>
            <filename>wip2.patch</filename>
            <type>text/plain</type>
            <size>9522</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTViMWNkZS4uZWQ3NjgxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNi0yMCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEluc3BlY3RvciBjb25zb2xlIHNob3VsZCBhdXRvY29tcGxldGUg
dGhlIGlkJ3MgaW4gdGhlIGRvY3VtZW50IHdoZW4gY29tcGxldGluZyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc4OTYKKworICAgICAgICBQcm92aWRlIHN0cmluZyBjb21wbGV0aW9ucyBmb3IgZWxlbWVudCBp
ZHMsIGNsYXNzIG5hbWVzLCB0YWcgbmFtZXMsCisgICAgICAgIGVsZW1lbnQgbmFtZXMsIGFuZCBz
aW1wbGUgc2VsZWN0b3JzIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIHVzZXIgaXMKKyAgICAgICAg
cHJvdmlkaW5nIGFuIGFyZ3VtZW50IGZvciBnZXRFbGVtZW50QnlJZCwgZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSwKKyAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWUsIGdldEVsZW1lbnRzQnlOYW1l
LCBhbmQgcXVlcnlTZWxlY3RvcltBbGxdLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90
b3R5cGUuX2dldEN1cnJlbnRGdW5jdGlvbk5hbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0cnVj
dG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IuKToKKwogMjAxMC0wNi0y
MCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29uc29sZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29s
ZVZpZXcuanMKaW5kZXggOGJiNzFlNi4uZDk2MmVkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcwpAQCAtMzMwLDggKzMzMCwxMCBAQCBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoZG90Tm90YXRpb24gfHwgYnJh
Y2tldE5vdGF0aW9uKQogICAgICAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25T
dHJpbmcuc3Vic3RyKDAsIGxhc3RJbmRleCk7CiAKKyAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9
IHRoaXMuX2dldEN1cnJlbnRGdW5jdGlvbk5hbWUod29yZFJhbmdlLnN0YXJ0Q29udGFpbmVyLnBh
cmVudE5vZGUudGV4dENvbnRlbnQpOworCiAgICAgICAgIHZhciBwcmVmaXggPSB3b3JkUmFuZ2Uu
dG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKCFleHByZXNzaW9uU3RyaW5nICYmICFwcmVmaXgpCisg
ICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZyAmJiAhcHJlZml4ICYmICFmdW5jdGlvbk5hbWUp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0g
dGhpcy5fcmVwb3J0Q29tcGxldGlvbnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0
aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7
CkBAIC0zNDUsNyArMzQ3LDQ1IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBpbmplY3RlZFNjcmlwdEFjY2VzcyA9IEluamVjdGVkU2NyaXB0QWNj
ZXNzLmdldChzZWxlY3RlZENhbGxGcmFtZS5pbmplY3RlZFNjcmlwdElkKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBpbmplY3RlZFNjcmlwdEFjY2VzcyA9IEluamVjdGVkU2NyaXB0QWNj
ZXNzLmdldERlZmF1bHQoKTsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0Q29tcGxl
dGlvbnMoZXhwcmVzc2lvblN0cmluZywgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBj
YWxsRnJhbWVJZCwgcmVwb3J0Q29tcGxldGlvbnMpOworICAgICAgICBpbmplY3RlZFNjcmlwdEFj
Y2Vzcy5nZXRDb21wbGV0aW9ucyhleHByZXNzaW9uU3RyaW5nLCBmdW5jdGlvbk5hbWUsIGluY2x1
ZGVJbnNwZWN0b3JDb21tYW5kTGluZUFQSSwgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRpb25z
KTsKKyAgICB9LAorCisgICAgX2dldEN1cnJlbnRGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uKHRleHQp
CisgICAgeworICAgICAgICAvLyBHZXRzIHRoZSBtb3N0IHJlY2VudCB1bmNsb3NlZCBmdW5jdGlv
biBuYW1lLiBUaGlzIGlzIG5vdCBhIHBhcnNlciwgaXQKKyAgICAgICAgLy8ganVzdCBsb29rcyBm
b3IgdGhlIG1vc3QgcmVjZW50IGlkZW50aWZpZXIgYmVmb3JlIGFuIG9wZW5pbmcgcGFyZW50aGVz
aXMuCisgICAgICAgIC8vIEZvciBpbnB1dCAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGZ1bmMo
KSIgdGhpcyB3aWxsIHJldHVybiAiZ2V0RWxlbWVudEJ5SWQiLgorCisgICAgICAgIC8vIEZpbmQg
dGhlIGxhc3Qgb3BlbiBwYXJlbnRoZXNpcyB0aGF0IHdhcyBub3QgY2xvc2VkLgorICAgICAgICB2
YXIgYmFsYW5jZSA9IDA7CisgICAgICAgIHZhciBvcGVuUGFyZW5JbmRleCA9IC0xOworICAgICAg
ICBmb3IgKHZhciBpID0gdGV4dC5sZW5ndGg7IGkgPj0gMCAmJiBiYWxhbmNlID49IDA7IC0taSkg
eworICAgICAgICAgICAgdmFyIGMgPSB0ZXh0W2ldOworICAgICAgICAgICAgaWYgKGMgPT09ICIp
IikKKyAgICAgICAgICAgICAgICBiYWxhbmNlKys7CisgICAgICAgICAgICBlbHNlIGlmIChjID09
PSAiKCIpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFsYW5jZSA9PT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBvcGVuUGFyZW5JbmRleCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAtLWJhbGFuY2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGwgcGFyZW50aGVzaXMgd2VyZSBiYWxh
bmNlZC4KKyAgICAgICAgaWYgKG9wZW5QYXJlbkluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworCisgICAgICAgIC8vIElkZW50aWZpZXIgYmVmb3JlIHRoZSBvcGVuaW5nIHBh
cmVudGhlc2lzLgorICAgICAgICB2YXIgc3RhcnRJbmRleCA9IDA7CisgICAgICAgIGZvciAodmFy
IGkgPSBvcGVuUGFyZW5JbmRleCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAo
IS9bYS16QS1aMC05XyRdLy50ZXN0KHRleHRbaV0pKSB7CisgICAgICAgICAgICAgICAgc3RhcnRJ
bmRleCA9IGkgKyAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRleHQuc3Vic3RyKHN0YXJ0SW5kZXgsIG9wZW5QYXJl
bkluZGV4IC0gc3RhcnRJbmRleCk7CiAgICAgfSwKIAogICAgIF9yZXBvcnRDb21wbGV0aW9uczog
ZnVuY3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3Rh
dGlvbiwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCwgaXNFeGNlcHRpb24pIHsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwppbmRleCAxZDYz
MDE3Li5jZDZkOWYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5q
ZWN0ZWRTY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzCkBAIC0xNzEsNiArMTcxLDEwNyBAQCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0
aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5LCBhYmJyZQog
ICAgIHJldHVybiBwcm9wZXJ0aWVzOwogfQogCitJbmplY3RlZFNjcmlwdC5nZXRWYWxpZEVsZW1l
bnRJZHMgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIGlkcyA9IFtdOworICAgIHZhciBlbGVtcyA9
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKTsKKyAgICBmb3IgKHZhciBpID0gMCwg
bGVuID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFyIGlkID0gZWxl
bXNbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOworICAgICAgICBpZiAodHlwZW9mIGlkID09PSAic3Ry
aW5nIikKKyAgICAgICAgICAgIGlkcy5wdXNoKGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGlkczsK
K30KKworSW5qZWN0ZWRTY3JpcHQuZ2V0VmFsaWRUYWdOYW1lcyA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICB2YXIgdXNlZCA9IHt9OworICAgIHZhciB0YWdzID0gWyIqIl07CisgICAgdmFyIGVsZW1zID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKKyAgICBmb3IgKHZhciBpID0gMCwg
bGVuID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFyIHRhZyA9IGVs
ZW1zW2ldLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgaWYgKCF1c2VkW3RhZ10pIHsK
KyAgICAgICAgICAgIHVzZWRbdGFnXSA9IHRydWU7CisgICAgICAgICAgICB0YWdzLnB1c2godGFn
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGFnczsKK30KKworSW5qZWN0ZWRTY3Jp
cHQuZ2V0VmFsaWRFbGVtZW50TmFtZXMgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIHVzZWQgPSB7
fTsKKyAgICB2YXIgbmFtZXMgPSBbXTsKKyAgICB2YXIgZWxlbXMgPSBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCJbbmFtZV0iKTsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZWxlbXMubGVu
Z3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFyIG5hbWUgPSBlbGVtc1tpXS5nZXRBdHRy
aWJ1dGUoIm5hbWUiKTsKKyAgICAgICAgaWYgKG5hbWUubGVuZ3RoICYmICF1c2VkW25hbWVdKSB7
CisgICAgICAgICAgICB1c2VkW25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICAgIG5hbWVzLnB1c2go
bmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5hbWVzOworfQorCitJbmplY3Rl
ZFNjcmlwdC5nZXRWYWxpZENsYXNzTmFtZXMgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIHVzZWQg
PSB7fTsKKyAgICB2YXIgY2xhc3NlcyA9IFtdOworICAgIHZhciBlbGVtcyA9IGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3JBbGwoIltjbGFzc10iKTsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZWxl
bXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgdmFyIGNsYXNzTmFtZXMgPSBlbGVt
c1tpXS5jbGFzc05hbWUuc3BsaXQoL1xzKy8pOworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGNsYXNzTmFtZXMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBj
bGFzc05hbWVzW2pdOworICAgICAgICAgICAgaWYgKGNsYXNzTmFtZS5sZW5ndGggPiAwICYmICF1
c2VkW2NsYXNzTmFtZV0pIHsKKyAgICAgICAgICAgICAgICB1c2VkW2NsYXNzTmFtZV0gPSB0cnVl
OworICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWUpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjbGFzc2VzOworfQorCitJbmplY3RlZFNj
cmlwdC5fY2xlYXJDYWNoZVRpbWVyID0gbnVsbDsKK0luamVjdGVkU2NyaXB0Ll9nZW5lcmF0ZWRD
YWNoZWRRdWVyeU9iamVjdHMgPSBbXTsKKworSW5qZWN0ZWRTY3JpcHQuX2NsZWFyQ2FjaGVkUXVl
cmllcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBmb3IgKHZhciBjYWNoZWRQcm9wZXJ0eU5hbWUgaW4g
SW5qZWN0ZWRTY3JpcHQuX2dlbmVyYXRlZENhY2hlZFF1ZXJ5T2JqZWN0cykKKyAgICAgICAgSW5q
ZWN0ZWRTY3JpcHRbY2FjaGVkUHJvcGVydHlOYW1lXSA9IG51bGw7CisgICAgSW5qZWN0ZWRTY3Jp
cHQuX2NsZWFyQ2FjaGVUaW1lciA9IG51bGw7Cit9CisKK0luamVjdGVkU2NyaXB0Ll9nZW5lcmF0
ZUNhY2hlZFF1ZXJ5QnVpbGRlciA9IGZ1bmN0aW9uKGNhY2hlZFByb3BlcnR5TmFtZSwgZnVuY3Rp
b25OYW1lKQoreworICAgIC8vIENyZWF0ZSB0aGUgY2FjaGUgb2JqZWN0LCBpbml0aWFsaXplIHdp
dGggbnVsbC4KKyAgICBJbmplY3RlZFNjcmlwdFtjYWNoZWRQcm9wZXJ0eU5hbWVdID0gbnVsbDsK
KworICAgIC8vIFJlbWVtYmVyIHRoYXQgY2FjaGVkIG9iamVjdCBuYW1lLCBzbyB3ZSBjYW4gY2xl
YXIgaXQgbGF0ZXIuCisgICAgSW5qZWN0ZWRTY3JpcHQuX2dlbmVyYXRlZENhY2hlZFF1ZXJ5T2Jq
ZWN0cy5wdXNoKGNhY2hlZFByb3BlcnR5TmFtZSk7CisKKyAgICAvLyBTYXZlIGEgcmVmZXJlbmNl
IHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgICB2YXIgb3JpZ2luYWxGdW5jdGlvbiA9IElu
amVjdGVkU2NyaXB0W2Z1bmN0aW9uTmFtZV07CisKKyAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5h
bCBmdW5jdGlvbiB3aXRoIG9uZSB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgY2FjaGUuCisg
ICAgLy8gVGhlIGVudGlyZSBjYWNoZSBnZXRzIGNsZWFyZWQgMzAgc2Vjb25kcyBhZnRlciBpdHMg
aW5pdGlhbCB1c2UuCisgICAgSW5qZWN0ZWRTY3JpcHRbZnVuY3Rpb25OYW1lXSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHRbY2FjaGVkUHJvcGVydHlOYW1lXSkKKyAg
ICAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdFtjYWNoZWRQcm9wZXJ0eU5hbWVdOworCisg
ICAgICAgIEluamVjdGVkU2NyaXB0W2NhY2hlZFByb3BlcnR5TmFtZV0gPSBvcmlnaW5hbEZ1bmN0
aW9uKCk7CisKKyAgICAgICAgaWYgKEluamVjdGVkU2NyaXB0Ll9jbGVhckNhY2hlVGltZXIgPT09
IG51bGwpCisgICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fY2xlYXJDYWNoZVRpbWVyID0gc2V0
VGltZW91dChJbmplY3RlZFNjcmlwdC5fY2xlYXJDYWNoZWRRdWVyaWVzLCAzMDAwMCk7CisKKyAg
ICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0W2NhY2hlZFByb3BlcnR5TmFtZV07CisgICAgfQor
fQorCitJbmplY3RlZFNjcmlwdC5fZ2VuZXJhdGVDYWNoZWRRdWVyeUJ1aWxkZXIoImNhY2hlZFZh
bGlkRWxlbWVudElkcyIsICJnZXRWYWxpZEVsZW1lbnRJZHMiKTsKK0luamVjdGVkU2NyaXB0Ll9n
ZW5lcmF0ZUNhY2hlZFF1ZXJ5QnVpbGRlcigiY2FjaGVkVmFsaWRUYWdOYW1lcyIsICJnZXRWYWxp
ZFRhZ05hbWVzIik7CitJbmplY3RlZFNjcmlwdC5fZ2VuZXJhdGVDYWNoZWRRdWVyeUJ1aWxkZXIo
ImNhY2hlZFZhbGlkRWxlbWVudE5hbWVzIiwgImdldFZhbGlkRWxlbWVudE5hbWVzIik7CitJbmpl
Y3RlZFNjcmlwdC5fZ2VuZXJhdGVDYWNoZWRRdWVyeUJ1aWxkZXIoImNhY2hlZFZhbGlkQ2xhc3NO
YW1lcyIsICJnZXRWYWxpZENsYXNzTmFtZXMiKTsKKwogSW5qZWN0ZWRTY3JpcHQuX2lzU2NvcGVQ
cm94eSA9IGZ1bmN0aW9uKG9iamVjdFByb3h5KQogewogICAgIHZhciBvYmplY3RJZCA9IG9iamVj
dFByb3h5Lm9iamVjdElkOwpAQCAtMjMwLDcgKzMzMSw3IEBAIEluamVjdGVkU2NyaXB0Ll9nZXRQ
cm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24ob2JqZWN0LCByZXN1bHRTZXQpCiAgICAgcmV0dXJuIE9i
amVjdC5rZXlzKHByb3BlcnR5TmFtZVNldCk7CiB9CiAKLUluamVjdGVkU2NyaXB0LmdldENvbXBs
ZXRpb25zID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5l
QVBJLCBjYWxsRnJhbWVJZCkKK0luamVjdGVkU2NyaXB0LmdldENvbXBsZXRpb25zID0gZnVuY3Rp
b24oZXhwcmVzc2lvbiwgZnVuY3Rpb25OYW1lLCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVB
UEksIGNhbGxGcmFtZUlkKQogewogICAgIHZhciBwcm9wcyA9IHt9OwogICAgIHRyeSB7CkBAIC0y
NjIsNiArMzYzLDQyIEBAIEluamVjdGVkU2NyaXB0LmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24o
ZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lCiAgICAgICAgIH0KICAgICB9
IGNhdGNoKGUpIHsKICAgICB9CisKKyAgICAvLyBBdXRvY29tcGxldGUgc29tZSB2YWx1ZXMgZm9y
IGtub3duIGZ1bmN0aW9ucy4KKyAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIHZhciBs
aXN0OworICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uTmFtZSkgeworICAgICAgICBjYXNlICIkJCI6
CisgICAgICAgIGNhc2UgInF1ZXJ5U2VsZWN0b3IiOgorICAgICAgICBjYXNlICJxdWVyeVNlbGVj
dG9yQWxsIjoKKyAgICAgICAgICAgIHZhciBsaXN0MSA9IEluamVjdGVkU2NyaXB0LmdldFZhbGlk
RWxlbWVudElkcygpLm1hcChmdW5jdGlvbihlKSB7IHJldHVybiAiIyIgKyBlOyB9KTsKKyAgICAg
ICAgICAgIHZhciBsaXN0MiA9IEluamVjdGVkU2NyaXB0LmdldFZhbGlkQ2xhc3NOYW1lcygpLm1h
cChmdW5jdGlvbihlKSB7IHJldHVybiAiLiIgKyBlOyB9KTsgLy8gRklYTUU6IGJyb2tlbgorICAg
ICAgICAgICAgdmFyIGxpc3QzID0gSW5qZWN0ZWRTY3JpcHQuZ2V0VmFsaWRUYWdOYW1lcygpOwor
ICAgICAgICAgICAgbGlzdCA9IGxpc3QxLmNvbmNhdChsaXN0MikuY29uY2F0KGxpc3QzKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICIkIjoKKyAgICAgICAgY2FzZSAiZ2V0RWxl
bWVudEJ5SWQiOgorICAgICAgICAgICAgbGlzdCA9IEluamVjdGVkU2NyaXB0LmdldFZhbGlkRWxl
bWVudElkcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImdldEVsZW1lbnRz
QnlDbGFzc05hbWUiOgorICAgICAgICAgICAgbGlzdCA9IEluamVjdGVkU2NyaXB0LmdldFZhbGlk
Q2xhc3NOYW1lcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImdldEVsZW1l
bnRzQnlUYWdOYW1lIjoKKyAgICAgICAgICAgIGxpc3QgPSBJbmplY3RlZFNjcmlwdC5nZXRWYWxp
ZFRhZ05hbWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiZ2V0RWxlbWVu
dHNCeU5hbWUiOgorICAgICAgICAgICAgbGlzdCA9IEluamVjdGVkU2NyaXB0LmdldFZhbGlkRWxl
bWVudE5hbWVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGxpc3QgPSBbXTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwLCBs
ZW4gPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICBwcm9wc1snIicg
KyBsaXN0W2ldICsgJyInXSA9IHRydWU7CisgICAgICAgICAgICBwcm9wc1siJyIgKyBsaXN0W2ld
ICsgIiciXSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gcHJvcHM7CiB9
CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>