<?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>26350</bug_id>
          
          <creation_ts>2009-06-12 12:35:46 -0700</creation_ts>
          <short_desc>Make WebInspector&apos;s console evaluation/completion asynchronous.</short_desc>
          <delta_ts>2009-06-15 18:14:19 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></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="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>125506</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-06-12 12:35:46 -0700</bug_when>
    <thetext>This way of evaluation allows serializing calls between InspectorController and its frontend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125508</commentid>
    <comment_count>1</comment_count>
      <attachid>31206</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-06-12 12:39:29 -0700</bug_when>
    <thetext>Created attachment 31206
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125527</commentid>
    <comment_count>2</comment_count>
      <attachid>31206</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-06-12 14:17:40 -0700</bug_when>
    <thetext>Comment on attachment 31206
patch

The code looks correct. I think this just gets ready for asynchronous evaluation, but the callback is still called synchronously. Is that correct?

Maybe use setTimeout with a zero/quick delay to simulate asynchronous behaviour.

One concern I have with the completion code being asynchronous is if the user keeps typing and the completions for the previous range have not been returned yet. When the results are returned to the callback, the user typed text might get messed up or mangled in some way.

So I think completion results need to be ignored if more user typing has happened since. Make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125610</commentid>
    <comment_count>3</comment_count>
      <attachid>31232</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-06-13 04:17:30 -0700</bug_when>
    <thetext>Created attachment 31232
patch

Thanks for the review!

(In reply to comment #2)
&gt; (From update of attachment 31206 [review])
&gt; The code looks correct. I think this just gets ready for asynchronous
&gt; evaluation, but the callback is still called synchronously. Is that correct?
&gt; 

Calls receiving callbacks are always the last ones in the methods, so that it should not really matter. However you are right - putting these into SetTimeout would give better guarantees. This is now done.

&gt; Maybe use setTimeout with a zero/quick delay to simulate asynchronous
&gt; behaviour.
&gt; 

Done.

&gt; One concern I have with the completion code being asynchronous is if the user
&gt; keeps typing and the completions for the previous range have not been returned
&gt; yet. When the results are returned to the callback, the user typed text might
&gt; get messed up or mangled in some way.
&gt; 
&gt; So I think completion results need to be ignored if more user typing has
&gt; happened since. Make sense?
&gt; 

I&apos;ve added post-evaluation filtering into completionReady, so that only the ones that do match currently added query are suggested.

I&apos;ve also extracted couple of methods in the code: 
- installation of the console API 
    (just for convenience)
- Console::doEvalInWindow and ScriptsPanel::doEvalInCallFrame 
    (these are supposed to do the actual eval work over the serialization layer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125668</commentid>
    <comment_count>4</comment_count>
      <attachid>31232</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-06-13 14:01:39 -0700</bug_when>
    <thetext>Comment on attachment 31232
patch

&gt; +        setTimeout(function() {
&gt; +            completionsReadyCallback(results);
&gt; +        }, 0);

This can just be written as:

setTimeout(completionsReadyCallback, 0, results);

&gt; +    _ensureCommandLineAPIInstalled: function(inspectedWindow) {
&gt; +    doEvalInWindow: function(expression, callback) {
&gt; +        function printResult(result, exception) {
&gt; +        function updatingCallbackWrapper(result) {

The open brace should be on the next line for these.

&gt; +        setTimeout(function() {
&gt; +            var inspectedWindow = InspectorController.inspectedWindow();
&gt; +            self._ensureCommandLineAPIInstalled(inspectedWindow);
&gt; +            try {
&gt; +                callback(inspectedWindow.eval(expression));
&gt; +            } catch (e) {
&gt; +                callback(e, true);
&gt; +            }
&gt; +        }, 0);

I think it would be cleaner to define a nested function then call setTimeout on it, not using an anonymous function inline.

&gt; +        setTimeout(function() {
&gt; +            try {
&gt; +                callback(callFrame.evaluate(code));
&gt; +            } catch (e) {
&gt; +                callback(e, true);
&gt; +            }
&gt; +        }, 0);

Same here.

&gt; -
&gt; + 

Extra space added here.

&gt; +        var currentText = fullWordRange.toString();
&gt; +
&gt; +        var matchingCompletions = []
&gt; +        for (var i = 0; i &lt; completions.length; ++i) {
&gt; +            if (completions[i].indexOf(currentText) == 0)
&gt; +                matchingCompletions.push(completions[i]);
&gt; +        }  
&gt; +        completions = matchingCompletions;
&gt; +
&gt; +        if (!completions || !completions.length)
&gt; +            return;

Does this work when case dosen&apos;t match? The completions are found case-insenitvly and indexOf is case-sensitive.

I think a better way to detect instead of looking at all the completion prefixes, would be to get the word range that was present when completions was made. If the word range matches the current fullWordRange, then it is the right one. Otherwise return early when there isn&apos;t a match and don&apos;t call this.clearAutoComplete in that case.

How does that sound to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125747</commentid>
    <comment_count>5</comment_count>
      <attachid>31254</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-06-14 00:33:32 -0700</bug_when>
    <thetext>Created attachment 31254
patch

(In reply to comment #4)
&gt; (From update of attachment 31232 [review])
&gt; 
&gt; This can just be written as:
&gt; 
&gt; setTimeout(completionsReadyCallback, 0, results);
&gt; 

Done.

&gt; 
&gt; The open brace should be on the next line for these.
&gt;

Done.
 
&gt; 
&gt; I think it would be cleaner to define a nested function then call setTimeout on
&gt; it, not using an anonymous function inline.
&gt;

Done.
 
&gt; 
&gt; Same here.
&gt; 

Done.

&gt; &gt; -
&gt; &gt; + 
&gt; 
&gt; Extra space added here.
&gt;

Not sure which one you mean. How do I find exact line number?
 
&gt; 
&gt; Does this work when case dosen&apos;t match? The completions are found
&gt; case-insenitvly and indexOf is case-sensitive.
&gt;

In fact, I think that completions are also case-sensitive. At least that is what I&apos;ve learned from playing with the tool.
 
&gt; I think a better way to detect instead of looking at all the completion
&gt; prefixes, would be to get the word range that was present when completions was
&gt; made. If the word range matches the current fullWordRange, then it is the right
&gt; one. Otherwise return early when there isn&apos;t a match and don&apos;t call
&gt; this.clearAutoComplete in that case.
&gt;

Done. Regardless of case sensitivity I could do it this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125748</commentid>
    <comment_count>6</comment_count>
      <attachid>31255</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-06-14 00:37:46 -0700</bug_when>
    <thetext>Created attachment 31255
patch

Removed extra spaces in blank lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126105</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-15 18:14:19 -0700</bug_when>
    <thetext>Sigh, my script almost landed this correctly.

Anyway, it&apos;s in as r44701.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31206</attachid>
            <date>2009-06-12 12:39:29 -0700</date>
            <delta_ts>2009-06-13 04:17:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>console_async.patch</filename>
            <type>text/plain</type>
            <size>10496</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmM1Mzc3Yy4uYzVhY2ZlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wNi0xMiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIFdlYkluc3BlY3RvcidzIGNvbnNvbGUgZXZhbHVhdGlv
bi9jb21wbGV0aW9uIGFzeW5jaHJvbm91cy4KKyAgICAgICAgVGhpcyB3YXkgb2YgZXZhbHVhdGlv
biBhbGxvd3Mgc2VyaWFsaXppbmcgY2FsbHMgYmV0d2VlbiAKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgaXRzIGZyb250ZW5kLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzUwCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnNvbGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90
b3R5cGUuY29tcGxldGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90
eXBlLl9yZXBvcnRDb21wbGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5w
cm90b3R5cGUuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZC5wcmludFJlc3VsdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmV2YWx1
YXRlRXhwcmVzc2lvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5ldmFs
dWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZS5jb21wbGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUu
X2NvbXBsZXRpb25zUmVhZHkpOgorCiAyMDA5LTA2LTEyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCmluZGV4IDY1Y2M3ZDAuLjRlYTNjNzQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCkBAIC0yNDEsNyArMjQxLDcgQEAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5wcmV2
aW91c01lc3NhZ2U7CiAgICAgfSwKIAotICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFu
Z2UsIGJlc3RNYXRjaE9ubHkpCisgICAgY29tcGxldGlvbnM6IGZ1bmN0aW9uKHdvcmRSYW5nZSwg
YmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
Ly8gUGFzcyBsZXNzIHN0b3AgY2hhcmFjdGVycyB0byByYW5nZU9mV29yZCBzbyB0aGUgcmFuZ2Ug
d2lsbCBiZSBhIG1vcmUgY29tcGxldGUgZXhwcmVzc2lvbi4KICAgICAgICAgY29uc3QgZXhwcmVz
c2lvblN0b3BDaGFyYWN0ZXJzID0gIiA9Ons7IjsKQEAgLTI1OSwyMiArMjU5LDIwIEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFleHByZXNzaW9uU3Ry
aW5nICYmICFwcmVmaXgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHJlc3Vs
dDsKKyAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlv
bnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRv
dE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7CiAgICAgICAgIGlmIChleHByZXNz
aW9uU3RyaW5nKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhleHByZXNzaW9uU3RyaW5nKTsKLSAgICAgICAg
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcsIHRoZSBwcmVm
aXggd2lsbCBiZSBjb25zaWRlcmVkIGEgd2luZG93IHByb3BlcnR5LgotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb25TdHJpbmcs
IHJlcG9ydENvbXBsZXRpb25zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIG5vIGV4cHJlc3Npb25TdHJpbmcsIHNvIHRoZSBjb21wbGV0aW9uIHNob3VsZCBoYXBw
ZW4gYWdhaW5zdCBnbG9iYWwgcHJvcGVydGllcy4KICAgICAgICAgICAgIC8vIE9yIGlmIHRoZSBk
ZWJ1Z2dlciBpcyBwYXVzZWQsIGFnYWluc3QgcHJvcGVydGllcyBpbiBzY29wZSBvZiB0aGUgc2Vs
ZWN0ZWQgY2FsbCBmcmFtZS4KICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnBhdXNlZCkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmFyaWFibGVzSW5TY29w
ZUZvclNlbGVjdGVkQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgcmVwb3J0Q29tcGxldGlv
bnMoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZhcmlhYmxlc0luU2NvcGVGb3JTZWxlY3Rl
ZENhbGxGcmFtZSgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOworICAgICAgICAgICAgICAg
IHJlcG9ydENvbXBsZXRpb25zKEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkp
OwogICAgICAgICB9Ci0KKyAgICB9LAorICAgIAorICAgIF9yZXBvcnRDb21wbGV0aW9uczogZnVu
Y3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlv
biwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCkgewogICAgICAgICBpZiAoYnJhY2tl
dE5vdGF0aW9uKSB7CiAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0g
PT09ICInIikKICAgICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIiciOwpAQCAtMzA1LDgg
KzMwMyw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGlmIChiZXN0TWF0Y2hPbmx5KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFj
ayhyZXN1bHRzKTsKICAgICB9LAogCiAgICAgX3RvZ2dsZUJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9u
KCkKQEAgLTM5NCwxMCArMzkxLDEyIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9
IHsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgfSwKIAotICAgIF9ldmFs
SW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24pCisgICAgX2V2YWxJbkluc3Bl
Y3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2FsbGJhY2spCiAgICAgewotICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0cy5wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHByZXNzaW9uKTsKKyAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMucGF1c2VkKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMu
ZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZhbHNlLCBjYWxsYmFjayk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICB2YXIgaW5zcGVjdGVk
V2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsKICAgICAgICAg
aWYgKCFpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKSB7CkBAIC00Mjks
NyArNDI4LDEyIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
Ly8gdGhlIHdpbmRvdyBvYmplY3QgcHJvcGVydGllcyBzdGlsbCB0YWtlIG1vcmUgcHJlY2VkZW50
IHRoYW4gb3VyIEFQSSBmdW5jdGlvbnMuCiAgICAgICAgIGV4cHJlc3Npb24gPSAid2l0aCAod2lu
ZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4cHJl
c3Npb24gKyAiIH0gfSI7CiAKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5ldmFsKGV4
cHJlc3Npb24pOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGluc3Bl
Y3RlZFdpbmRvdy5ldmFsKGV4cHJlc3Npb24pOworICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1ZSk7
CisgICAgICAgIH0KICAgICB9LAogCiAgICAgX2VudGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZl
bnQpCkBAIC00NDksMjAgKzQ1MywxNSBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHZhciBjb21tYW5kTWVzc2FnZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29s
ZUNvbW1hbmQoc3RyKTsKICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKGNvbW1hbmRNZXNzYWdlKTsK
IAotICAgICAgICB2YXIgcmVzdWx0OwotICAgICAgICB2YXIgZXhjZXB0aW9uID0gZmFsc2U7Ci0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB0aGlzLl9ldmFsSW5JbnNwZWN0ZWRX
aW5kb3coc3RyKTsKLSAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBl
OwotICAgICAgICAgICAgZXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OworICAgICAgICBmdW5jdGlvbiBwcmludFJlc3VsdChyZXN1bHQsIGV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgc2VsZi5wcm9tcHQuaGlzdG9yeS5wdXNoKHN0cik7CisgICAgICAgICAgICBzZWxm
LnByb21wdC5oaXN0b3J5T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIHNlbGYucHJvbXB0LnRleHQg
PSAiIjsKKyAgICAgICAgICAgIHNlbGYuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNv
bGVDb21tYW5kUmVzdWx0KHJlc3VsdCwgZXhjZXB0aW9uLCBjb21tYW5kTWVzc2FnZSkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgdGhpcy5wcm9tcHQuaGlzdG9yeS5wdXNoKHN0cik7Ci0gICAgICAg
IHRoaXMucHJvbXB0Lmhpc3RvcnlPZmZzZXQgPSAwOwotICAgICAgICB0aGlzLnByb21wdC50ZXh0
ID0gIiI7Ci0KLSAgICAgICAgdGhpcy5hZGRNZXNzYWdlKG5ldyBXZWJJbnNwZWN0b3IuQ29uc29s
ZUNvbW1hbmRSZXN1bHQocmVzdWx0LCBleGNlcHRpb24sIGNvbW1hbmRNZXNzYWdlKSk7CisgICAg
ICAgIHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhzdHIsIHByaW50UmVzdWx0KTsKICAgICB9
LAogCiAgICAgX2Zvcm1hdDogZnVuY3Rpb24ob3V0cHV0LCBmb3JjZU9iamVjdEZvcm1hdCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcwppbmRl
eCAxMjI3MDdmLi5mODViNzMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RhdGFiYXNlUXVlcnlWaWV3LmpzCkBAIC01OCw3ICs1OCw3IEBAIFdlYkluc3BlY3Rvci5EYXRh
YmFzZVF1ZXJ5Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHNldFRpbWVvdXQobW92ZUJhY2tJ
Zk91dHNpZGUuYmluZCh0aGlzKSwgMCk7CiAgICAgfSwKIAotICAgIGNvbXBsZXRpb25zOiBmdW5j
dGlvbih3b3JkUmFuZ2UsIGJlc3RNYXRjaE9ubHkpCisgICAgY29tcGxldGlvbnM6IGZ1bmN0aW9u
KHdvcmRSYW5nZSwgYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgdmFyIHByZWZpeCA9IHdvcmRSYW5nZS50b1N0cmluZygpLnRvTG93ZXJDYXNl
KCk7CiAgICAgICAgIGlmICghcHJlZml4Lmxlbmd0aCkKQEAgLTg1LDcgKzg1LDcgQEAgV2ViSW5z
cGVjdG9yLkRhdGFiYXNlUXVlcnlWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgYWNjdW11bGF0
ZU1hdGNoZXModGhpcy5kYXRhYmFzZS50YWJsZU5hbWVzLm1hcChmdW5jdGlvbihuYW1lKSB7IHJl
dHVybiBuYW1lICsgIiAiIH0pKTsKICAgICAgICAgYWNjdW11bGF0ZU1hdGNoZXMoWyJTRUxFQ1Qg
IiwgIkZST00gIiwgIldIRVJFICIsICJMSU1JVCAiLCAiREVMRVRFIEZST00gIiwgIkNSRUFURSAi
LCAiRFJPUCAiLCAiVEFCTEUgIiwgIklOREVYICIsICJVUERBVEUgIiwgIklOU0VSVCBJTlRPICIs
ICJWQUxVRVMgKCJdKTsKIAotICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgY29tcGxl
dGlvbnNSZWFkeUNhbGxiYWNrKHJlc3VsdHMpOwogICAgIH0sCiAKICAgICBfcHJvbXB0S2V5RG93
bjogZnVuY3Rpb24oZXZlbnQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKaW5kZXggYWI2YWM1NS4uNTllNzM3NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0
aW9uLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVz
U2VjdGlvbi5qcwpAQCAtMjE0LDEzICsyMTQsMTggQEAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLmVkaXRpbmdFbmRlZChj
b250ZXh0KTsKICAgICB9LAogCi0gICAgZXZhbHVhdGVFeHByZXNzaW9uOiBmdW5jdGlvbihleHBy
ZXNzaW9uKQorICAgIGV2YWx1YXRlRXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2Fs
bGJhY2spCiAgICAgewogICAgICAgICAvLyBFdmFsdWF0ZSBpbiB0aGUgY3VycmVudGx5IHNlbGVj
dGVkIGNhbGwgZnJhbWUgaWYgdGhlIGRlYnVnZ2VyIGlzIHBhdXNlZC4KICAgICAgICAgLy8gT3Ro
ZXJ3aXNlIGV2YWx1YXRlIGluIGFnYWluc3QgdGhlIGluc3BlY3RlZCB3aW5kb3cuCiAgICAgICAg
IGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLnBhdXNlZCAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uZWRpdEluU2VsZWN0ZWRD
YWxsRnJhbWVXaGVuUGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5wYW5l
bHMuc2NyaXB0cy5ldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lvbiwgZmFsc2Up
OwotICAgICAgICByZXR1cm4gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5l
dmFsKGV4cHJlc3Npb24pOworICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0cy5ldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lvbiwgZmFsc2UsIGNh
bGxiYWNrKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBJbnNwZWN0
b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpLmV2YWwoZXhwcmVzc2lvbik7CisgICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhlLCB0cnVlKTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBhcHBseUV4cHJl
c3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHVwZGF0ZUludGVyZmFjZSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDdhZjkyOTIuLjQ2NjY4OTcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMzE2
LDE3ICszMTYsMjEgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBzb3VyY2VGcmFtZS5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAg
IH0sCiAKLSAgICBldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9uKGNvZGUsIHVw
ZGF0ZUludGVyZmFjZSkKKyAgICBldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9u
KGNvZGUsIHVwZGF0ZUludGVyZmFjZSwgY2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgc2Vs
ZWN0ZWRDYWxsRnJhbWUgPSB0aGlzLnNpZGViYXJQYW5lcy5jYWxsc3RhY2suc2VsZWN0ZWRDYWxs
RnJhbWU7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkIHx8ICFzZWxlY3RlZENhbGxGcmFtZSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVJbnRlcmZhY2Ug
PT09ICJ1bmRlZmluZWQiKQogICAgICAgICAgICAgdXBkYXRlSW50ZXJmYWNlID0gdHJ1ZTsKLSAg
ICAgICAgdmFyIHJlc3VsdCA9IHNlbGVjdGVkQ2FsbEZyYW1lLmV2YWx1YXRlKGNvZGUpOworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNlbGVjdGVkQ2FsbEZyYW1lLmV2
YWx1YXRlKGNvZGUpOworICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1ZSk7CisgICAgICAgIH0KICAg
ICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKICAgICAgICAgICAgIHRoaXMuc2lkZWJhclBhbmVz
LnNjb3BlY2hhaW4udXBkYXRlKHNlbGVjdGVkQ2FsbEZyYW1lKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9LAogCiAgICAgdmFyaWFibGVzSW5TY29wZUZvclNlbGVjdGVkQ2FsbEZyYW1l
OiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4
dFByb21wdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCmlu
ZGV4IDYxZTFiNTIuLjU4OWNhZjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UZXh0UHJvbXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0
UHJvbXB0LmpzCkBAIC0xNTIsOCArMTUyLDEwIEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgd29yZFByZWZp
eFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0
aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHRoaXMuY29tcGxldGlvblN0b3BDaGFyYWN0ZXJzLCB0aGlz
LmVsZW1lbnQsICJiYWNrd2FyZCIpOwotICAgICAgICB2YXIgY29tcGxldGlvbnMgPSB0aGlzLmNv
bXBsZXRpb25zKHdvcmRQcmVmaXhSYW5nZSwgYXV0byk7CisgICAgICAgIHRoaXMuY29tcGxldGlv
bnMod29yZFByZWZpeFJhbmdlLCBhdXRvLCB0aGlzLl9jb21wbGV0aW9uc1JlYWR5LmJpbmQodGhp
cywgc2VsZWN0aW9uLCBzZWxlY3Rpb25SYW5nZSwgYXV0bywgd29yZFByZWZpeFJhbmdlKSk7Cisg
ICAgfSwKIAorICAgIF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIHNlbGVj
dGlvblJhbmdlLCBhdXRvLCB3b3JkUHJlZml4UmFuZ2UsIGNvbXBsZXRpb25zKSB7CiAgICAgICAg
IGlmICghY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkKICAgICAgICAgICAgIHJl
dHVybjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31232</attachid>
            <date>2009-06-13 04:17:30 -0700</date>
            <delta_ts>2009-06-14 00:33:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>console_async_2.patch</filename>
            <type>text/plain</type>
            <size>13691</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmM1Mzc3Yy4uYzVhY2ZlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wNi0xMiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIFdlYkluc3BlY3RvcidzIGNvbnNvbGUgZXZhbHVhdGlv
bi9jb21wbGV0aW9uIGFzeW5jaHJvbm91cy4KKyAgICAgICAgVGhpcyB3YXkgb2YgZXZhbHVhdGlv
biBhbGxvd3Mgc2VyaWFsaXppbmcgY2FsbHMgYmV0d2VlbiAKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgaXRzIGZyb250ZW5kLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzUwCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnNvbGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90
b3R5cGUuY29tcGxldGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90
eXBlLl9yZXBvcnRDb21wbGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5w
cm90b3R5cGUuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZC5wcmludFJlc3VsdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmV2YWx1
YXRlRXhwcmVzc2lvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5ldmFs
dWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZS5jb21wbGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUu
X2NvbXBsZXRpb25zUmVhZHkpOgorCiAyMDA5LTA2LTEyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCmluZGV4IDY1Y2M3ZDAuLjM2NTdhN2QgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCkBAIC0yNDEsNyArMjQxLDcgQEAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5wcmV2
aW91c01lc3NhZ2U7CiAgICAgfSwKIAotICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFu
Z2UsIGJlc3RNYXRjaE9ubHkpCisgICAgY29tcGxldGlvbnM6IGZ1bmN0aW9uKHdvcmRSYW5nZSwg
YmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
Ly8gUGFzcyBsZXNzIHN0b3AgY2hhcmFjdGVycyB0byByYW5nZU9mV29yZCBzbyB0aGUgcmFuZ2Ug
d2lsbCBiZSBhIG1vcmUgY29tcGxldGUgZXhwcmVzc2lvbi4KICAgICAgICAgY29uc3QgZXhwcmVz
c2lvblN0b3BDaGFyYWN0ZXJzID0gIiA9Ons7IjsKQEAgLTI1OSwyMiArMjU5LDIwIEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFleHByZXNzaW9uU3Ry
aW5nICYmICFwcmVmaXgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHJlc3Vs
dDsKKyAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlv
bnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRv
dE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7CiAgICAgICAgIGlmIChleHByZXNz
aW9uU3RyaW5nKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhleHByZXNzaW9uU3RyaW5nKTsKLSAgICAgICAg
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcsIHRoZSBwcmVm
aXggd2lsbCBiZSBjb25zaWRlcmVkIGEgd2luZG93IHByb3BlcnR5LgotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb25TdHJpbmcs
IHJlcG9ydENvbXBsZXRpb25zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIG5vIGV4cHJlc3Npb25TdHJpbmcsIHNvIHRoZSBjb21wbGV0aW9uIHNob3VsZCBoYXBw
ZW4gYWdhaW5zdCBnbG9iYWwgcHJvcGVydGllcy4KICAgICAgICAgICAgIC8vIE9yIGlmIHRoZSBk
ZWJ1Z2dlciBpcyBwYXVzZWQsIGFnYWluc3QgcHJvcGVydGllcyBpbiBzY29wZSBvZiB0aGUgc2Vs
ZWN0ZWQgY2FsbCBmcmFtZS4KICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnBhdXNlZCkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmFyaWFibGVzSW5TY29w
ZUZvclNlbGVjdGVkQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgcmVwb3J0Q29tcGxldGlv
bnMoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZhcmlhYmxlc0luU2NvcGVGb3JTZWxlY3Rl
ZENhbGxGcmFtZSgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOworICAgICAgICAgICAgICAg
IHJlcG9ydENvbXBsZXRpb25zKEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkp
OwogICAgICAgICB9Ci0KKyAgICB9LAorICAgIAorICAgIF9yZXBvcnRDb21wbGV0aW9uczogZnVu
Y3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlv
biwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCkgewogICAgICAgICBpZiAoYnJhY2tl
dE5vdGF0aW9uKSB7CiAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0g
PT09ICInIikKICAgICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIiciOwpAQCAtMzA1LDgg
KzMwMyw5IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGlmIChiZXN0TWF0Y2hPbmx5KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2socmVzdWx0cyk7CisgICAgICAg
IH0sIDApOwogICAgIH0sCiAKICAgICBfdG9nZ2xlQnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQpA
QCAtMzk0LDEyICszOTMsMTcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewog
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9LAogCi0gICAgX2V2YWxJbklu
c3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbikKKyAgICBfZXZhbEluSW5zcGVjdGVk
V2luZG93OiBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGlm
IChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3Jp
cHRzLnBhdXNlZCkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlw
dHMuZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24pOworICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0
cy5wYXVzZWQpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5ldmFs
dWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lvbiwgZmFsc2UsIGNhbGxiYWNrKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIHZhciBpbnNwZWN0ZWRXaW5k
b3cgPSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOworICAgICAgICB0aGlz
LmRvRXZhbEluV2luZG93KGV4cHJlc3Npb24sIGNhbGxiYWNrKTsKKyAgICB9LAorICAgIAorICAg
IF9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZDogZnVuY3Rpb24oaW5zcGVjdGVkV2luZG93
KSB7CiAgICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQ
SSkgewogICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmV2YWwoIndpbmRvdy5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkgPSB7IFwKICAgICAgICAgICAgICAgICAkOiBmdW5jdGlvbigpIHsgcmV0
dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkLmFwcGx5KGRvY3VtZW50LCBhcmd1bWVudHMpIH0s
IFwKQEAgLTQyNCwxMiArNDI4LDIzIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQ
SS5jbGVhciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENhbGxiYWNrKHRoaXMuY2xlYXJNZXNz
YWdlcy5iaW5kKHRoaXMpKTsKICAgICAgICAgfQotCisgICAgfSwKKyAgICAKKyAgICBkb0V2YWxJ
bldpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2FsbGJhY2spIHsKICAgICAgICAgLy8gU3Vy
cm91bmQgdGhlIGV4cHJlc3Npb24gaW4gd2l0aCBzdGF0ZW1lbnRzIHRvIGluamVjdCBvdXIgY29t
bWFuZCBsaW5lIEFQSSBzbyB0aGF0CiAgICAgICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3Bl
cnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgog
ICAgICAgICBleHByZXNzaW9uID0gIndpdGggKHdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVB
UEkpIHsgd2l0aCAod2luZG93KSB7ICIgKyBleHByZXNzaW9uICsgIiB9IH0iOwogCi0gICAgICAg
IHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuZXZhbChleHByZXNzaW9uKTsKKyAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dmFyIGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93
KCk7CisgICAgICAgICAgICBzZWxmLl9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZChpbnNw
ZWN0ZWRXaW5kb3cpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayhpbnNwZWN0ZWRXaW5kb3cuZXZhbChleHByZXNzaW9uKSk7CisgICAgICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0sIDApOwogICAgIH0sCiAKICAgICBfZW50ZXJLZXlQcmVzc2VkOiBmdW5jdGlv
bihldmVudCkKQEAgLTQ0OSwyMCArNDY0LDE0IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdmFyIGNvbW1hbmRNZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5D
b25zb2xlQ29tbWFuZChzdHIpOwogICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoY29tbWFuZE1lc3Nh
Z2UpOwogCi0gICAgICAgIHZhciByZXN1bHQ7Ci0gICAgICAgIHZhciBleGNlcHRpb24gPSBmYWxz
ZTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2V2YWxJbkluc3Bl
Y3RlZFdpbmRvdyhzdHIpOwotICAgICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGU7Ci0gICAgICAgICAgICBleGNlcHRpb24gPSB0cnVlOworICAgICAgICB2YXIgc2VsZiA9
IHRoaXM7CisgICAgICAgIGZ1bmN0aW9uIHByaW50UmVzdWx0KHJlc3VsdCwgZXhjZXB0aW9uKSB7
CisgICAgICAgICAgICBzZWxmLnByb21wdC5oaXN0b3J5LnB1c2goc3RyKTsKKyAgICAgICAgICAg
IHNlbGYucHJvbXB0Lmhpc3RvcnlPZmZzZXQgPSAwOworICAgICAgICAgICAgc2VsZi5wcm9tcHQu
dGV4dCA9ICIiOworICAgICAgICAgICAgc2VsZi5hZGRNZXNzYWdlKG5ldyBXZWJJbnNwZWN0b3Iu
Q29uc29sZUNvbW1hbmRSZXN1bHQocmVzdWx0LCBleGNlcHRpb24sIGNvbW1hbmRNZXNzYWdlKSk7
CiAgICAgICAgIH0KLQotICAgICAgICB0aGlzLnByb21wdC5oaXN0b3J5LnB1c2goc3RyKTsKLSAg
ICAgICAgdGhpcy5wcm9tcHQuaGlzdG9yeU9mZnNldCA9IDA7Ci0gICAgICAgIHRoaXMucHJvbXB0
LnRleHQgPSAiIjsKLQotICAgICAgICB0aGlzLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5D
b25zb2xlQ29tbWFuZFJlc3VsdChyZXN1bHQsIGV4Y2VwdGlvbiwgY29tbWFuZE1lc3NhZ2UpKTsK
KyAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KHN0ciwgcHJpbnRSZXN1bHQpOwog
ICAgIH0sCiAKICAgICBfZm9ybWF0OiBmdW5jdGlvbihvdXRwdXQsIGZvcmNlT2JqZWN0Rm9ybWF0
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlW
aWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlWaWV3Lmpz
CmluZGV4IDEyMjcwN2YuLmY4NWI3MzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKQEAgLTU4LDcgKzU4LDcgQEAgV2ViSW5zcGVjdG9y
LkRhdGFiYXNlUXVlcnlWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgc2V0VGltZW91dChtb3Zl
QmFja0lmT3V0c2lkZS5iaW5kKHRoaXMpLCAwKTsKICAgICB9LAogCi0gICAgY29tcGxldGlvbnM6
IGZ1bmN0aW9uKHdvcmRSYW5nZSwgYmVzdE1hdGNoT25seSkKKyAgICBjb21wbGV0aW9uczogZnVu
Y3Rpb24od29yZFJhbmdlLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2sp
CiAgICAgewogICAgICAgICB2YXIgcHJlZml4ID0gd29yZFJhbmdlLnRvU3RyaW5nKCkudG9Mb3dl
ckNhc2UoKTsKICAgICAgICAgaWYgKCFwcmVmaXgubGVuZ3RoKQpAQCAtODUsNyArODUsNyBAQCBX
ZWJJbnNwZWN0b3IuRGF0YWJhc2VRdWVyeVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBhY2N1
bXVsYXRlTWF0Y2hlcyh0aGlzLmRhdGFiYXNlLnRhYmxlTmFtZXMubWFwKGZ1bmN0aW9uKG5hbWUp
IHsgcmV0dXJuIG5hbWUgKyAiICIgfSkpOwogICAgICAgICBhY2N1bXVsYXRlTWF0Y2hlcyhbIlNF
TEVDVCAiLCAiRlJPTSAiLCAiV0hFUkUgIiwgIkxJTUlUICIsICJERUxFVEUgRlJPTSAiLCAiQ1JF
QVRFICIsICJEUk9QICIsICJUQUJMRSAiLCAiSU5ERVggIiwgIlVQREFURSAiLCAiSU5TRVJUIElO
VE8gIiwgIlZBTFVFUyAoIl0pOwogCi0gICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICBj
b21wbGV0aW9uc1JlYWR5Q2FsbGJhY2socmVzdWx0cyk7CiAgICAgfSwKIAogICAgIF9wcm9tcHRL
ZXlEb3duOiBmdW5jdGlvbihldmVudCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwppbmRleCBhYjZhYzU1Li41OWU3Mzc0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24uanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3Bl
cnRpZXNTZWN0aW9uLmpzCkBAIC0yMTQsMTMgKzIxNCwxOCBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0
UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZWRpdGluZ0Vu
ZGVkKGNvbnRleHQpOwogICAgIH0sCiAKLSAgICBldmFsdWF0ZUV4cHJlc3Npb246IGZ1bmN0aW9u
KGV4cHJlc3Npb24pCisgICAgZXZhbHVhdGVFeHByZXNzaW9uOiBmdW5jdGlvbihleHByZXNzaW9u
LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIEV2YWx1YXRlIGluIHRoZSBjdXJyZW50bHkg
c2VsZWN0ZWQgY2FsbCBmcmFtZSBpZiB0aGUgZGVidWdnZXIgaXMgcGF1c2VkLgogICAgICAgICAv
LyBPdGhlcndpc2UgZXZhbHVhdGUgaW4gYWdhaW5zdCB0aGUgaW5zcGVjdGVkIHdpbmRvdy4KICAg
ICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFu
ZWxzLnNjcmlwdHMucGF1c2VkICYmIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5lZGl0SW5TZWxl
Y3RlZENhbGxGcmFtZVdoZW5QYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LnBhbmVscy5zY3JpcHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHByZXNzaW9uLCBm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRv
dygpLmV2YWwoZXhwcmVzc2lvbik7CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnBh
bmVscy5zY3JpcHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHByZXNzaW9uLCBmYWxz
ZSwgY2FsbGJhY2spOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IElu
c3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuZXZhbChleHByZXNzaW9uKTsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIGNhbGxiYWNrKGUsIHRydWUpOworICAgICAgICB9CiAgICAgfSwKIAogICAgIGFwcGx5
RXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbiwgdXBkYXRlSW50ZXJmYWNlKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggN2FmOTI5Mi4uNDQ0
NmQ4MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBA
IC0zMTYsMTcgKzMxNiwzMyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIHNvdXJjZUZyYW1lLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludCk7
CiAgICAgfSwKIAotICAgIGV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZTogZnVuY3Rpb24oY29k
ZSwgdXBkYXRlSW50ZXJmYWNlKQorICAgIGV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZTogZnVu
Y3Rpb24oY29kZSwgdXBkYXRlSW50ZXJmYWNlLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZh
ciBzZWxlY3RlZENhbGxGcmFtZSA9IHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZWxlY3Rl
ZENhbGxGcmFtZTsKICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgfHwgIXNlbGVjdGVkQ2FsbEZy
YW1lKQogICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlSW50
ZXJmYWNlID09PSAidW5kZWZpbmVkIikKICAgICAgICAgICAgIHVwZGF0ZUludGVyZmFjZSA9IHRy
dWU7Ci0gICAgICAgIHZhciByZXN1bHQgPSBzZWxlY3RlZENhbGxGcmFtZS5ldmFsdWF0ZShjb2Rl
KTsKLSAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKLSAgICAgICAgICAgIHRoaXMuc2lkZWJh
clBhbmVzLnNjb3BlY2hhaW4udXBkYXRlKHNlbGVjdGVkQ2FsbEZyYW1lKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9u
IHVwZGF0aW5nQ2FsbGJhY2tXcmFwcGVyKHJlc3VsdCkgeworICAgICAgICAgICAgY2FsbGJhY2so
cmVzdWx0KTsKKyAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCisgICAgICAgICAgICAg
ICAgc2VsZi5zaWRlYmFyUGFuZXMuc2NvcGVjaGFpbi51cGRhdGUoc2VsZWN0ZWRDYWxsRnJhbWUp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzLmRvRXZhbEluQ2FsbEZyYW1lKHNl
bGVjdGVkQ2FsbEZyYW1lLCBjb2RlLCB1cGRhdGluZ0NhbGxiYWNrV3JhcHBlcik7CisgICAgfSwK
KworICAgIGRvRXZhbEluQ2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUsIGNvZGUsIGNhbGxi
YWNrKSB7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNhbGxGcmFtZS5ldmFsdWF0ZShjb2RlKSk7Cisg
ICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIDApOwogICAgIH0sCiAKICAgICB2YXJpYWJs
ZXNJblNjb3BlRm9yU2VsZWN0ZWRDYWxsRnJhbWU6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKaW5kZXggNjFlMWI1Mi4uNDNjZTI0YyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKQEAgLTE0MCwzMiArMTQwLDQz
IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBjb21wbGV0ZTog
ZnVuY3Rpb24oYXV0bykKICAgICB7CiAgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUodHJ1
ZSk7Ci0KICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAg
ICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKICAgICAgICAgICAgIHJldHVybjsKLQor
IAogICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsK
ICAgICAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5pc0Rl
c2NlbmRhbnQodGhpcy5lbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KGF1dG8gJiYgIXRoaXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLQogICAgICAgICB2YXIgd29yZFByZWZpeFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRD
b250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHRoaXMuY29t
cGxldGlvblN0b3BDaGFyYWN0ZXJzLCB0aGlzLmVsZW1lbnQsICJiYWNrd2FyZCIpOwotICAgICAg
ICB2YXIgY29tcGxldGlvbnMgPSB0aGlzLmNvbXBsZXRpb25zKHdvcmRQcmVmaXhSYW5nZSwgYXV0
byk7CisgICAgICAgIHRoaXMuY29tcGxldGlvbnMod29yZFByZWZpeFJhbmdlLCBhdXRvLCB0aGlz
Ll9jb21wbGV0aW9uc1JlYWR5LmJpbmQodGhpcywgc2VsZWN0aW9uLCBhdXRvKSk7CisgICAgfSwK
IAotICAgICAgICBpZiAoIWNvbXBsZXRpb25zIHx8ICFjb21wbGV0aW9ucy5sZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgX2NvbXBsZXRpb25zUmVhZHk6IGZ1bmN0aW9uKHNlbGVjdGlv
biwgYXV0bywgY29tcGxldGlvbnMpIHsKKyAgICAgICAgdGhpcy5jbGVhckF1dG9Db21wbGV0ZSh0
cnVlKTsKKworICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VB
dCgwKTsKKyAgICAgICAgdmFyIHdvcmRQcmVmaXhSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0
Q29udGFpbmVyLnJhbmdlT2ZXb3JkKHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCB0aGlzLmNv
bXBsZXRpb25TdG9wQ2hhcmFjdGVycywgdGhpcy5lbGVtZW50LCAiYmFja3dhcmQiKTsKIAogICAg
ICAgICB2YXIgZnVsbFdvcmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAg
IGZ1bGxXb3JkUmFuZ2Uuc2V0U3RhcnQod29yZFByZWZpeFJhbmdlLnN0YXJ0Q29udGFpbmVyLCB3
b3JkUHJlZml4UmFuZ2Uuc3RhcnRPZmZzZXQpOwogICAgICAgICBmdWxsV29yZFJhbmdlLnNldEVu
ZChzZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7
CisgICAgICAgIHZhciBjdXJyZW50VGV4dCA9IGZ1bGxXb3JkUmFuZ2UudG9TdHJpbmcoKTsKKwor
ICAgICAgICB2YXIgbWF0Y2hpbmdDb21wbGV0aW9ucyA9IFtdCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChjb21w
bGV0aW9uc1tpXS5pbmRleE9mKGN1cnJlbnRUZXh0KSA9PSAwKQorICAgICAgICAgICAgICAgIG1h
dGNoaW5nQ29tcGxldGlvbnMucHVzaChjb21wbGV0aW9uc1tpXSk7CisgICAgICAgIH0gIAorICAg
ICAgICBjb21wbGV0aW9ucyA9IG1hdGNoaW5nQ29tcGxldGlvbnM7CisKKyAgICAgICAgaWYgKCFj
b21wbGV0aW9ucyB8fCAhY29tcGxldGlvbnMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPT09IDEgfHwgc2VsZWN0aW9uLmlzQ29s
bGFwc2VkIHx8IGF1dG8pIHsKICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBs
ZXRpb25zWzBdOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIGN1cnJlbnRUZXh0
ID0gZnVsbFdvcmRSYW5nZS50b1N0cmluZygpOwotCiAgICAgICAgICAgICB2YXIgZm91bmRJbmRl
eCA9IG51bGw7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBsZXRpb25zLmxl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRpb25zW2ldID09PSBjdXJy
ZW50VGV4dCkKQEAgLTE4Niw3ICsxOTcsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGZ1bGxXb3JkUmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKIAogICAg
ICAgICB2YXIgZmluYWxTZWxlY3Rpb25SYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0K
KyAgICAgICAgCiAgICAgICAgIGlmIChhdXRvKSB7CiAgICAgICAgICAgICB2YXIgcHJlZml4VGV4
dCA9IGNvbXBsZXRpb25UZXh0LnN1YnN0cmluZygwLCB3b3JkUHJlZml4TGVuZ3RoKTsKICAgICAg
ICAgICAgIHZhciBzdWZmaXhUZXh0ID0gY29tcGxldGlvblRleHQuc3Vic3RyaW5nKHdvcmRQcmVm
aXhMZW5ndGgpOwo=
</data>
<flag name="review"
          id="15931"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31254</attachid>
            <date>2009-06-14 00:33:32 -0700</date>
            <delta_ts>2009-06-14 00:37:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>console_async_3.patch</filename>
            <type>text/plain</type>
            <size>13297</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmM1Mzc3Yy4uYzVhY2ZlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wNi0xMiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIFdlYkluc3BlY3RvcidzIGNvbnNvbGUgZXZhbHVhdGlv
bi9jb21wbGV0aW9uIGFzeW5jaHJvbm91cy4KKyAgICAgICAgVGhpcyB3YXkgb2YgZXZhbHVhdGlv
biBhbGxvd3Mgc2VyaWFsaXppbmcgY2FsbHMgYmV0d2VlbiAKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgaXRzIGZyb250ZW5kLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzUwCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnNvbGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90
b3R5cGUuY29tcGxldGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90
eXBlLl9yZXBvcnRDb21wbGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5w
cm90b3R5cGUuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZC5wcmludFJlc3VsdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmV2YWx1
YXRlRXhwcmVzc2lvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5ldmFs
dWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZS5jb21wbGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUu
X2NvbXBsZXRpb25zUmVhZHkpOgorCiAyMDA5LTA2LTEyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCmluZGV4IDY1Y2M3ZDAuLmJjZTE3ODQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCkBAIC0yNDEsNyArMjQxLDcgQEAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5wcmV2
aW91c01lc3NhZ2U7CiAgICAgfSwKIAotICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFu
Z2UsIGJlc3RNYXRjaE9ubHkpCisgICAgY29tcGxldGlvbnM6IGZ1bmN0aW9uKHdvcmRSYW5nZSwg
YmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
Ly8gUGFzcyBsZXNzIHN0b3AgY2hhcmFjdGVycyB0byByYW5nZU9mV29yZCBzbyB0aGUgcmFuZ2Ug
d2lsbCBiZSBhIG1vcmUgY29tcGxldGUgZXhwcmVzc2lvbi4KICAgICAgICAgY29uc3QgZXhwcmVz
c2lvblN0b3BDaGFyYWN0ZXJzID0gIiA9Ons7IjsKQEAgLTI1OSwyMiArMjU5LDIwIEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFleHByZXNzaW9uU3Ry
aW5nICYmICFwcmVmaXgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHJlc3Vs
dDsKKyAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlv
bnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRv
dE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7CiAgICAgICAgIGlmIChleHByZXNz
aW9uU3RyaW5nKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhleHByZXNzaW9uU3RyaW5nKTsKLSAgICAgICAg
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcsIHRoZSBwcmVm
aXggd2lsbCBiZSBjb25zaWRlcmVkIGEgd2luZG93IHByb3BlcnR5LgotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb25TdHJpbmcs
IHJlcG9ydENvbXBsZXRpb25zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIG5vIGV4cHJlc3Npb25TdHJpbmcsIHNvIHRoZSBjb21wbGV0aW9uIHNob3VsZCBoYXBw
ZW4gYWdhaW5zdCBnbG9iYWwgcHJvcGVydGllcy4KICAgICAgICAgICAgIC8vIE9yIGlmIHRoZSBk
ZWJ1Z2dlciBpcyBwYXVzZWQsIGFnYWluc3QgcHJvcGVydGllcyBpbiBzY29wZSBvZiB0aGUgc2Vs
ZWN0ZWQgY2FsbCBmcmFtZS4KICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnBhdXNlZCkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmFyaWFibGVzSW5TY29w
ZUZvclNlbGVjdGVkQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgcmVwb3J0Q29tcGxldGlv
bnMoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZhcmlhYmxlc0luU2NvcGVGb3JTZWxlY3Rl
ZENhbGxGcmFtZSgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOworICAgICAgICAgICAgICAg
IHJlcG9ydENvbXBsZXRpb25zKEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkp
OwogICAgICAgICB9Ci0KKyAgICB9LAorICAgIAorICAgIF9yZXBvcnRDb21wbGV0aW9uczogZnVu
Y3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlv
biwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCkgewogICAgICAgICBpZiAoYnJhY2tl
dE5vdGF0aW9uKSB7CiAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0g
PT09ICInIikKICAgICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIiciOwpAQCAtMzA1LDgg
KzMwMyw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGlmIChiZXN0TWF0Y2hPbmx5KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGlvbnNS
ZWFkeUNhbGxiYWNrLCAwLCByZXN1bHRzKTsKICAgICB9LAogCiAgICAgX3RvZ2dsZUJ1dHRvbkNs
aWNrZWQ6IGZ1bmN0aW9uKCkKQEAgLTM5NCwxMiArMzkxLDE4IEBAIFdlYkluc3BlY3Rvci5Db25z
b2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAg
fSwKIAotICAgIF9ldmFsSW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24pCisg
ICAgX2V2YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2FsbGJhY2sp
CiAgICAgewotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHByZXNz
aW9uKTsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNw
ZWN0b3IucGFuZWxzLnNjcmlwdHMucGF1c2VkKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
cGFuZWxzLnNjcmlwdHMuZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZh
bHNlLCBjYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAg
ICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5k
b3coKTsKKyAgICAgICAgdGhpcy5kb0V2YWxJbldpbmRvdyhleHByZXNzaW9uLCBjYWxsYmFjayk7
CisgICAgfSwKKyAgICAKKyAgICBfZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQ6IGZ1bmN0
aW9uKGluc3BlY3RlZFdpbmRvdykKKyAgICB7CiAgICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93
Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgewogICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93
LmV2YWwoIndpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkgPSB7IFwKICAgICAgICAgICAg
ICAgICAkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkLmFwcGx5
KGRvY3VtZW50LCBhcmd1bWVudHMpIH0sIFwKQEAgLTQyNCwxMiArNDI3LDI2IEBAIFdlYkluc3Bl
Y3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93
Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3Jh
cENhbGxiYWNrKHRoaXMuY2xlYXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKICAgICAgICAgfQotCisg
ICAgfSwKKyAgICAKKyAgICBkb0V2YWxJbldpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2Fs
bGJhY2spCisgICAgewogICAgICAgICAvLyBTdXJyb3VuZCB0aGUgZXhwcmVzc2lvbiBpbiB3aXRo
IHN0YXRlbWVudHMgdG8gaW5qZWN0IG91ciBjb21tYW5kIGxpbmUgQVBJIHNvIHRoYXQKICAgICAg
ICAgLy8gdGhlIHdpbmRvdyBvYmplY3QgcHJvcGVydGllcyBzdGlsbCB0YWtlIG1vcmUgcHJlY2Vk
ZW50IHRoYW4gb3VyIEFQSSBmdW5jdGlvbnMuCiAgICAgICAgIGV4cHJlc3Npb24gPSAid2l0aCAo
d2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4
cHJlc3Npb24gKyAiIH0gfSI7CiAKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5ldmFs
KGV4cHJlc3Npb24pOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9u
IGRlbGF5ZWRFdmFsdWF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGluc3BlY3Rl
ZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCk7CisgICAgICAg
ICAgICBzZWxmLl9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZChpbnNwZWN0ZWRXaW5kb3cp
OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhpbnNwZWN0ZWRX
aW5kb3cuZXZhbChleHByZXNzaW9uKSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgc2V0VGltZW91dChkZWxheWVkRXZhbHVhdGlvbiwgMCk7CiAgICAgfSwKIAogICAg
IF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNDQ5LDIwICs0NjYsMTUgQEAg
V2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY29tbWFuZE1l
c3NhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kKHN0cik7CiAgICAgICAgIHRo
aXMuYWRkTWVzc2FnZShjb21tYW5kTWVzc2FnZSk7CiAKLSAgICAgICAgdmFyIHJlc3VsdDsKLSAg
ICAgICAgdmFyIGV4Y2VwdGlvbiA9IGZhbHNlOwotICAgICAgICB0cnkgewotICAgICAgICAgICAg
cmVzdWx0ID0gdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KHN0cik7Ci0gICAgICAgIH0gY2F0
Y2goZSkgewotICAgICAgICAgICAgcmVzdWx0ID0gZTsKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9
IHRydWU7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gcHJpbnRS
ZXN1bHQocmVzdWx0LCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGYucHJv
bXB0Lmhpc3RvcnkucHVzaChzdHIpOworICAgICAgICAgICAgc2VsZi5wcm9tcHQuaGlzdG9yeU9m
ZnNldCA9IDA7CisgICAgICAgICAgICBzZWxmLnByb21wdC50ZXh0ID0gIiI7CisgICAgICAgICAg
ICBzZWxmLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdChy
ZXN1bHQsIGV4Y2VwdGlvbiwgY29tbWFuZE1lc3NhZ2UpKTsKICAgICAgICAgfQotCi0gICAgICAg
IHRoaXMucHJvbXB0Lmhpc3RvcnkucHVzaChzdHIpOwotICAgICAgICB0aGlzLnByb21wdC5oaXN0
b3J5T2Zmc2V0ID0gMDsKLSAgICAgICAgdGhpcy5wcm9tcHQudGV4dCA9ICIiOwotCi0gICAgICAg
IHRoaXMuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KHJl
c3VsdCwgZXhjZXB0aW9uLCBjb21tYW5kTWVzc2FnZSkpOworICAgICAgICB0aGlzLl9ldmFsSW5J
bnNwZWN0ZWRXaW5kb3coc3RyLCBwcmludFJlc3VsdCk7CiAgICAgfSwKIAogICAgIF9mb3JtYXQ6
IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKaW5kZXggMTIyNzA3Zi4uZjg1Yjcz
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlW
aWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmll
dy5qcwpAQCAtNTgsNyArNTgsNyBAQCBXZWJJbnNwZWN0b3IuRGF0YWJhc2VRdWVyeVZpZXcucHJv
dG90eXBlID0gewogICAgICAgICBzZXRUaW1lb3V0KG1vdmVCYWNrSWZPdXRzaWRlLmJpbmQodGhp
cyksIDApOwogICAgIH0sCiAKLSAgICBjb21wbGV0aW9uczogZnVuY3Rpb24od29yZFJhbmdlLCBi
ZXN0TWF0Y2hPbmx5KQorICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFuZ2UsIGJlc3RN
YXRjaE9ubHksIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBw
cmVmaXggPSB3b3JkUmFuZ2UudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICBpZiAo
IXByZWZpeC5sZW5ndGgpCkBAIC04NSw3ICs4NSw3IEBAIFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1
ZXJ5Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGFjY3VtdWxhdGVNYXRjaGVzKHRoaXMuZGF0
YWJhc2UudGFibGVOYW1lcy5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gbmFtZSArICIgIiB9
KSk7CiAgICAgICAgIGFjY3VtdWxhdGVNYXRjaGVzKFsiU0VMRUNUICIsICJGUk9NICIsICJXSEVS
RSAiLCAiTElNSVQgIiwgIkRFTEVURSBGUk9NICIsICJDUkVBVEUgIiwgIkRST1AgIiwgIlRBQkxF
ICIsICJJTkRFWCAiLCAiVVBEQVRFICIsICJJTlNFUlQgSU5UTyAiLCAiVkFMVUVTICgiXSk7CiAK
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFj
ayhyZXN1bHRzKTsKICAgICB9LAogCiAgICAgX3Byb21wdEtleURvd246IGZ1bmN0aW9uKGV2ZW50
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRp
ZXNTZWN0aW9uLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRp
ZXNTZWN0aW9uLmpzCmluZGV4IGFiNmFjNTUuLjU5ZTczNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKQEAgLTIx
NCwxMyArMjE0LDE4IEBAIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5lZGl0aW5nRW5kZWQoY29udGV4dCk7CiAgICAgfSwK
IAotICAgIGV2YWx1YXRlRXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbikKKyAgICBldmFs
dWF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNhbGxiYWNrKQogICAgIHsKICAg
ICAgICAgLy8gRXZhbHVhdGUgaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYWxsIGZyYW1lIGlm
IHRoZSBkZWJ1Z2dlciBpcyBwYXVzZWQuCiAgICAgICAgIC8vIE90aGVyd2lzZSBldmFsdWF0ZSBp
biBhZ2FpbnN0IHRoZSBpbnNwZWN0ZWQgd2luZG93LgogICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVzZWQgJiYg
dGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmVkaXRJblNlbGVjdGVkQ2FsbEZyYW1lV2hlblBhdXNl
ZCkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZXZhbHVh
dGVJblNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZhbHNlKTsKLSAgICAgICAgcmV0dXJu
IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuZXZhbChleHByZXNzaW9uKTsK
KyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZXZhbHVhdGVJ
blNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZhbHNlLCBjYWxsYmFjayk7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNw
ZWN0ZWRXaW5kb3coKS5ldmFsKGV4cHJlc3Npb24pOworICAgICAgICAgICAgY2FsbGJhY2socmVz
dWx0KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1
ZSk7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgYXBwbHlFeHByZXNzaW9uOiBmdW5jdGlvbihl
eHByZXNzaW9uLCB1cGRhdGVJbnRlcmZhY2UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcwppbmRleCA3YWY5MjkyLi5iYzAzYzYxIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTMxNiwxNyArMzE2LDM3IEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgc291cmNl
RnJhbWUucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCi0gICAgZXZhbHVh
dGVJblNlbGVjdGVkQ2FsbEZyYW1lOiBmdW5jdGlvbihjb2RlLCB1cGRhdGVJbnRlcmZhY2UpCisg
ICAgZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lOiBmdW5jdGlvbihjb2RlLCB1cGRhdGVJbnRl
cmZhY2UsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGVkQ2FsbEZyYW1lID0g
dGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNlbGVjdGVkQ2FsbEZyYW1lOwogICAgICAgICBp
ZiAoIXRoaXMuX3BhdXNlZCB8fCAhc2VsZWN0ZWRDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVJbnRlcmZhY2UgPT09ICJ1bmRlZmluZWQi
KQogICAgICAgICAgICAgdXBkYXRlSW50ZXJmYWNlID0gdHJ1ZTsKLSAgICAgICAgdmFyIHJlc3Vs
dCA9IHNlbGVjdGVkQ2FsbEZyYW1lLmV2YWx1YXRlKGNvZGUpOwotICAgICAgICBpZiAodXBkYXRl
SW50ZXJmYWNlKQotICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuc2NvcGVjaGFpbi51cGRh
dGUoc2VsZWN0ZWRDYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAg
IHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRpbmdDYWxsYmFja1dyYXBw
ZXIocmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAg
ICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVi
YXJQYW5lcy5zY29wZWNoYWluLnVwZGF0ZShzZWxlY3RlZENhbGxGcmFtZSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHRoaXMuZG9FdmFsSW5DYWxsRnJhbWUoc2VsZWN0ZWRDYWxsRnJh
bWUsIGNvZGUsIHVwZGF0aW5nQ2FsbGJhY2tXcmFwcGVyKTsKKyAgICB9LAorCisgICAgZG9FdmFs
SW5DYWxsRnJhbWU6IGZ1bmN0aW9uKGNhbGxGcmFtZSwgY29kZSwgY2FsbGJhY2spCisgICAgewor
ICAgICAgICBmdW5jdGlvbiBkZWxheWVkRXZhbHVhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soY2FsbEZyYW1lLmV2YWx1YXRlKGNv
ZGUpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayhlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0
KGRlbGF5ZWRFdmFsdWF0aW9uLCAwKTsKICAgICB9LAogCiAgICAgdmFyaWFibGVzSW5TY29wZUZv
clNlbGVjdGVkQ2FsbEZyYW1lOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0UHJvbXB0LmpzCmluZGV4IDYxZTFiNTIuLmZiYTA3ZjUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCkBAIC0xNDAsMjcgKzE0MCwzNCBAQCBXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgY29tcGxldGU6IGZ1bmN0aW9uKGF1
dG8pCiAgICAgewogICAgICAgICB0aGlzLmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOwotCiAgICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLnJhbmdlQ291bnQpCiAgICAgICAgICAgICByZXR1cm47Ci0KKyAKICAgICAgICAg
dmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICAgICAgIGlm
ICghc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRo
aXMuZWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChhdXRvICYmICF0
aGlzLmlzQ2FyZXRBdEVuZE9mUHJvbXB0KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0KICAgICAg
ICAgdmFyIHdvcmRQcmVmaXhSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLnJh
bmdlT2ZXb3JkKHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCB0aGlzLmNvbXBsZXRpb25TdG9w
Q2hhcmFjdGVycywgdGhpcy5lbGVtZW50LCAiYmFja3dhcmQiKTsKLSAgICAgICAgdmFyIGNvbXBs
ZXRpb25zID0gdGhpcy5jb21wbGV0aW9ucyh3b3JkUHJlZml4UmFuZ2UsIGF1dG8pOworICAgICAg
ICB0aGlzLmNvbXBsZXRpb25zKHdvcmRQcmVmaXhSYW5nZSwgYXV0bywgdGhpcy5fY29tcGxldGlv
bnNSZWFkeS5iaW5kKHRoaXMsIHNlbGVjdGlvbiwgYXV0bywgd29yZFByZWZpeFJhbmdlKSk7Cisg
ICAgfSwKIAorICAgIF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihzZWxlY3Rpb24sIGF1dG8s
IG9yaWdpbmFsV29yZFByZWZpeFJhbmdlLCBjb21wbGV0aW9ucykKKyAgICB7CiAgICAgICAgIGlm
ICghY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVy
bjsKIAorICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgw
KTsKKyAgICAgICAgdmFyIHdvcmRQcmVmaXhSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29u
dGFpbmVyLnJhbmdlT2ZXb3JkKHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCB0aGlzLmNvbXBs
ZXRpb25TdG9wQ2hhcmFjdGVycywgdGhpcy5lbGVtZW50LCAiYmFja3dhcmQiKTsKKwogICAgICAg
ICB2YXIgZnVsbFdvcmRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgIGZ1
bGxXb3JkUmFuZ2Uuc2V0U3RhcnQod29yZFByZWZpeFJhbmdlLnN0YXJ0Q29udGFpbmVyLCB3b3Jk
UHJlZml4UmFuZ2Uuc3RhcnRPZmZzZXQpOwogICAgICAgICBmdWxsV29yZFJhbmdlLnNldEVuZChz
ZWxlY3Rpb25SYW5nZS5lbmRDb250YWluZXIsIHNlbGVjdGlvblJhbmdlLmVuZE9mZnNldCk7CiAK
KyAgICAgICAgaWYgKG9yaWdpbmFsV29yZFByZWZpeFJhbmdlLnRvU3RyaW5nKCkgIT0gZnVsbFdv
cmRSYW5nZS50b1N0cmluZygpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChj
b21wbGV0aW9ucy5sZW5ndGggPT09IDEgfHwgc2VsZWN0aW9uLmlzQ29sbGFwc2VkIHx8IGF1dG8p
IHsKICAgICAgICAgICAgIHZhciBjb21wbGV0aW9uVGV4dCA9IGNvbXBsZXRpb25zWzBdOwogICAg
ICAgICB9IGVsc2UgewpAQCAtMTg2LDcgKzE5Myw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZnVsbFdvcmRSYW5nZS5kZWxldGVDb250ZW50cygpOwog
CiAgICAgICAgIHZhciBmaW5hbFNlbGVjdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTsKLQorICAgICAgICAKICAgICAgICAgaWYgKGF1dG8pIHsKICAgICAgICAgICAgIHZhciBwcmVm
aXhUZXh0ID0gY29tcGxldGlvblRleHQuc3Vic3RyaW5nKDAsIHdvcmRQcmVmaXhMZW5ndGgpOwog
ICAgICAgICAgICAgdmFyIHN1ZmZpeFRleHQgPSBjb21wbGV0aW9uVGV4dC5zdWJzdHJpbmcod29y
ZFByZWZpeExlbmd0aCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31255</attachid>
            <date>2009-06-14 00:37:46 -0700</date>
            <delta_ts>2009-06-14 02:11:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>console_async_4.patch</filename>
            <type>text/plain</type>
            <size>12868</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmM1Mzc3Yy4uYzVhY2ZlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAwOS0wNi0xMiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIFdlYkluc3BlY3RvcidzIGNvbnNvbGUgZXZhbHVhdGlv
bi9jb21wbGV0aW9uIGFzeW5jaHJvbm91cy4KKyAgICAgICAgVGhpcyB3YXkgb2YgZXZhbHVhdGlv
biBhbGxvd3Mgc2VyaWFsaXppbmcgY2FsbHMgYmV0d2VlbiAKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlciBhbmQgaXRzIGZyb250ZW5kLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MzUwCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnNvbGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90
b3R5cGUuY29tcGxldGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90
eXBlLl9yZXBvcnRDb21wbGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZS5w
cm90b3R5cGUuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZC5wcmludFJlc3VsdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUuX2VudGVyS2V5UHJlc3NlZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmlldy5qczoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmV2YWx1
YXRlRXhwcmVzc2lvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5ldmFs
dWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlw
ZS5jb21wbGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUu
X2NvbXBsZXRpb25zUmVhZHkpOgorCiAyMDA5LTA2LTEyICBYYW4gTG9wZXogIDx4bG9wZXpAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCmluZGV4IDY1Y2M3ZDAuLmJjZTE3ODQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCkBAIC0yNDEsNyArMjQxLDcgQEAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5wcmV2
aW91c01lc3NhZ2U7CiAgICAgfSwKIAotICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFu
Z2UsIGJlc3RNYXRjaE9ubHkpCisgICAgY29tcGxldGlvbnM6IGZ1bmN0aW9uKHdvcmRSYW5nZSwg
YmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
Ly8gUGFzcyBsZXNzIHN0b3AgY2hhcmFjdGVycyB0byByYW5nZU9mV29yZCBzbyB0aGUgcmFuZ2Ug
d2lsbCBiZSBhIG1vcmUgY29tcGxldGUgZXhwcmVzc2lvbi4KICAgICAgICAgY29uc3QgZXhwcmVz
c2lvblN0b3BDaGFyYWN0ZXJzID0gIiA9Ons7IjsKQEAgLTI1OSwyMiArMjU5LDIwIEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFleHByZXNzaW9uU3Ry
aW5nICYmICFwcmVmaXgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHJlc3Vs
dDsKKyAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlv
bnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRv
dE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7CiAgICAgICAgIGlmIChleHByZXNz
aW9uU3RyaW5nKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhleHByZXNzaW9uU3RyaW5nKTsKLSAgICAgICAg
ICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcsIHRoZSBwcmVm
aXggd2lsbCBiZSBjb25zaWRlcmVkIGEgd2luZG93IHByb3BlcnR5LgotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb25TdHJpbmcs
IHJlcG9ydENvbXBsZXRpb25zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIG5vIGV4cHJlc3Npb25TdHJpbmcsIHNvIHRoZSBjb21wbGV0aW9uIHNob3VsZCBoYXBw
ZW4gYWdhaW5zdCBnbG9iYWwgcHJvcGVydGllcy4KICAgICAgICAgICAgIC8vIE9yIGlmIHRoZSBk
ZWJ1Z2dlciBpcyBwYXVzZWQsIGFnYWluc3QgcHJvcGVydGllcyBpbiBzY29wZSBvZiB0aGUgc2Vs
ZWN0ZWQgY2FsbCBmcmFtZS4KICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMgJiYgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnBhdXNlZCkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudmFyaWFibGVzSW5TY29w
ZUZvclNlbGVjdGVkQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgcmVwb3J0Q29tcGxldGlv
bnMoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZhcmlhYmxlc0luU2NvcGVGb3JTZWxlY3Rl
ZENhbGxGcmFtZSgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOworICAgICAgICAgICAgICAg
IHJlcG9ydENvbXBsZXRpb25zKEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkp
OwogICAgICAgICB9Ci0KKyAgICB9LAorICAgIAorICAgIF9yZXBvcnRDb21wbGV0aW9uczogZnVu
Y3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlv
biwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCkgewogICAgICAgICBpZiAoYnJhY2tl
dE5vdGF0aW9uKSB7CiAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0g
PT09ICInIikKICAgICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIiciOwpAQCAtMzA1LDgg
KzMwMyw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGlmIChiZXN0TWF0Y2hPbmx5KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGlvbnNS
ZWFkeUNhbGxiYWNrLCAwLCByZXN1bHRzKTsKICAgICB9LAogCiAgICAgX3RvZ2dsZUJ1dHRvbkNs
aWNrZWQ6IGZ1bmN0aW9uKCkKQEAgLTM5NCwxMiArMzkxLDE4IEBAIFdlYkluc3BlY3Rvci5Db25z
b2xlLnByb3RvdHlwZSA9IHsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAg
fSwKIAotICAgIF9ldmFsSW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24pCisg
ICAgX2V2YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2FsbGJhY2sp
CiAgICAgewotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzLmV2YWx1YXRlSW5TZWxlY3RlZENhbGxGcmFtZShleHByZXNz
aW9uKTsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNw
ZWN0b3IucGFuZWxzLnNjcmlwdHMucGF1c2VkKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
cGFuZWxzLnNjcmlwdHMuZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZh
bHNlLCBjYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAg
ICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5k
b3coKTsKKyAgICAgICAgdGhpcy5kb0V2YWxJbldpbmRvdyhleHByZXNzaW9uLCBjYWxsYmFjayk7
CisgICAgfSwKKyAgICAKKyAgICBfZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQ6IGZ1bmN0
aW9uKGluc3BlY3RlZFdpbmRvdykKKyAgICB7CiAgICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93
Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgewogICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93
LmV2YWwoIndpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkgPSB7IFwKICAgICAgICAgICAg
ICAgICAkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkLmFwcGx5
KGRvY3VtZW50LCBhcmd1bWVudHMpIH0sIFwKQEAgLTQyNCwxMiArNDI3LDI2IEBAIFdlYkluc3Bl
Y3Rvci5Db25zb2xlLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93
Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3Jh
cENhbGxiYWNrKHRoaXMuY2xlYXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKICAgICAgICAgfQotCisg
ICAgfSwKKyAgICAKKyAgICBkb0V2YWxJbldpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2Fs
bGJhY2spCisgICAgewogICAgICAgICAvLyBTdXJyb3VuZCB0aGUgZXhwcmVzc2lvbiBpbiB3aXRo
IHN0YXRlbWVudHMgdG8gaW5qZWN0IG91ciBjb21tYW5kIGxpbmUgQVBJIHNvIHRoYXQKICAgICAg
ICAgLy8gdGhlIHdpbmRvdyBvYmplY3QgcHJvcGVydGllcyBzdGlsbCB0YWtlIG1vcmUgcHJlY2Vk
ZW50IHRoYW4gb3VyIEFQSSBmdW5jdGlvbnMuCiAgICAgICAgIGV4cHJlc3Npb24gPSAid2l0aCAo
d2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4
cHJlc3Npb24gKyAiIH0gfSI7CiAKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5ldmFs
KGV4cHJlc3Npb24pOworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9u
IGRlbGF5ZWRFdmFsdWF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGluc3BlY3Rl
ZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCk7CisgICAgICAg
ICAgICBzZWxmLl9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZChpbnNwZWN0ZWRXaW5kb3cp
OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhpbnNwZWN0ZWRX
aW5kb3cuZXZhbChleHByZXNzaW9uKSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgc2V0VGltZW91dChkZWxheWVkRXZhbHVhdGlvbiwgMCk7CiAgICAgfSwKIAogICAg
IF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNDQ5LDIwICs0NjYsMTUgQEAg
V2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY29tbWFuZE1l
c3NhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kKHN0cik7CiAgICAgICAgIHRo
aXMuYWRkTWVzc2FnZShjb21tYW5kTWVzc2FnZSk7CiAKLSAgICAgICAgdmFyIHJlc3VsdDsKLSAg
ICAgICAgdmFyIGV4Y2VwdGlvbiA9IGZhbHNlOwotICAgICAgICB0cnkgewotICAgICAgICAgICAg
cmVzdWx0ID0gdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KHN0cik7Ci0gICAgICAgIH0gY2F0
Y2goZSkgewotICAgICAgICAgICAgcmVzdWx0ID0gZTsKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9
IHRydWU7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gcHJpbnRS
ZXN1bHQocmVzdWx0LCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGYucHJv
bXB0Lmhpc3RvcnkucHVzaChzdHIpOworICAgICAgICAgICAgc2VsZi5wcm9tcHQuaGlzdG9yeU9m
ZnNldCA9IDA7CisgICAgICAgICAgICBzZWxmLnByb21wdC50ZXh0ID0gIiI7CisgICAgICAgICAg
ICBzZWxmLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdChy
ZXN1bHQsIGV4Y2VwdGlvbiwgY29tbWFuZE1lc3NhZ2UpKTsKICAgICAgICAgfQotCi0gICAgICAg
IHRoaXMucHJvbXB0Lmhpc3RvcnkucHVzaChzdHIpOwotICAgICAgICB0aGlzLnByb21wdC5oaXN0
b3J5T2Zmc2V0ID0gMDsKLSAgICAgICAgdGhpcy5wcm9tcHQudGV4dCA9ICIiOwotCi0gICAgICAg
IHRoaXMuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KHJl
c3VsdCwgZXhjZXB0aW9uLCBjb21tYW5kTWVzc2FnZSkpOworICAgICAgICB0aGlzLl9ldmFsSW5J
bnNwZWN0ZWRXaW5kb3coc3RyLCBwcmludFJlc3VsdCk7CiAgICAgfSwKIAogICAgIF9mb3JtYXQ6
IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMKaW5kZXggMTIyNzA3Zi4uZjg1Yjcz
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlW
aWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmll
dy5qcwpAQCAtNTgsNyArNTgsNyBAQCBXZWJJbnNwZWN0b3IuRGF0YWJhc2VRdWVyeVZpZXcucHJv
dG90eXBlID0gewogICAgICAgICBzZXRUaW1lb3V0KG1vdmVCYWNrSWZPdXRzaWRlLmJpbmQodGhp
cyksIDApOwogICAgIH0sCiAKLSAgICBjb21wbGV0aW9uczogZnVuY3Rpb24od29yZFJhbmdlLCBi
ZXN0TWF0Y2hPbmx5KQorICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFuZ2UsIGJlc3RN
YXRjaE9ubHksIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBw
cmVmaXggPSB3b3JkUmFuZ2UudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICBpZiAo
IXByZWZpeC5sZW5ndGgpCkBAIC04NSw3ICs4NSw3IEBAIFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1
ZXJ5Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGFjY3VtdWxhdGVNYXRjaGVzKHRoaXMuZGF0
YWJhc2UudGFibGVOYW1lcy5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gbmFtZSArICIgIiB9
KSk7CiAgICAgICAgIGFjY3VtdWxhdGVNYXRjaGVzKFsiU0VMRUNUICIsICJGUk9NICIsICJXSEVS
RSAiLCAiTElNSVQgIiwgIkRFTEVURSBGUk9NICIsICJDUkVBVEUgIiwgIkRST1AgIiwgIlRBQkxF
ICIsICJJTkRFWCAiLCAiVVBEQVRFICIsICJJTlNFUlQgSU5UTyAiLCAiVkFMVUVTICgiXSk7CiAK
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFj
ayhyZXN1bHRzKTsKICAgICB9LAogCiAgICAgX3Byb21wdEtleURvd246IGZ1bmN0aW9uKGV2ZW50
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRp
ZXNTZWN0aW9uLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRp
ZXNTZWN0aW9uLmpzCmluZGV4IGFiNmFjNTUuLjU5ZTczNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKQEAgLTIx
NCwxMyArMjE0LDE4IEBAIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5lZGl0aW5nRW5kZWQoY29udGV4dCk7CiAgICAgfSwK
IAotICAgIGV2YWx1YXRlRXhwcmVzc2lvbjogZnVuY3Rpb24oZXhwcmVzc2lvbikKKyAgICBldmFs
dWF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNhbGxiYWNrKQogICAgIHsKICAg
ICAgICAgLy8gRXZhbHVhdGUgaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjYWxsIGZyYW1lIGlm
IHRoZSBkZWJ1Z2dlciBpcyBwYXVzZWQuCiAgICAgICAgIC8vIE90aGVyd2lzZSBldmFsdWF0ZSBp
biBhZ2FpbnN0IHRoZSBpbnNwZWN0ZWQgd2luZG93LgogICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVzZWQgJiYg
dGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmVkaXRJblNlbGVjdGVkQ2FsbEZyYW1lV2hlblBhdXNl
ZCkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZXZhbHVh
dGVJblNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZhbHNlKTsKLSAgICAgICAgcmV0dXJu
IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuZXZhbChleHByZXNzaW9uKTsK
KyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZXZhbHVhdGVJ
blNlbGVjdGVkQ2FsbEZyYW1lKGV4cHJlc3Npb24sIGZhbHNlLCBjYWxsYmFjayk7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNw
ZWN0ZWRXaW5kb3coKS5ldmFsKGV4cHJlc3Npb24pOworICAgICAgICAgICAgY2FsbGJhY2socmVz
dWx0KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1
ZSk7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgYXBwbHlFeHByZXNzaW9uOiBmdW5jdGlvbihl
eHByZXNzaW9uLCB1cGRhdGVJbnRlcmZhY2UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NjcmlwdHNQYW5lbC5qcwppbmRleCA3YWY5MjkyLi5kMzBjMDAyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTMxNiwxNyArMzE2LDM2IEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgc291cmNl
RnJhbWUucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCi0gICAgZXZhbHVh
dGVJblNlbGVjdGVkQ2FsbEZyYW1lOiBmdW5jdGlvbihjb2RlLCB1cGRhdGVJbnRlcmZhY2UpCisg
ICAgZXZhbHVhdGVJblNlbGVjdGVkQ2FsbEZyYW1lOiBmdW5jdGlvbihjb2RlLCB1cGRhdGVJbnRl
cmZhY2UsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGVkQ2FsbEZyYW1lID0g
dGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNlbGVjdGVkQ2FsbEZyYW1lOwogICAgICAgICBp
ZiAoIXRoaXMuX3BhdXNlZCB8fCAhc2VsZWN0ZWRDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVJbnRlcmZhY2UgPT09ICJ1bmRlZmluZWQi
KQogICAgICAgICAgICAgdXBkYXRlSW50ZXJmYWNlID0gdHJ1ZTsKLSAgICAgICAgdmFyIHJlc3Vs
dCA9IHNlbGVjdGVkQ2FsbEZyYW1lLmV2YWx1YXRlKGNvZGUpOwotICAgICAgICBpZiAodXBkYXRl
SW50ZXJmYWNlKQotICAgICAgICAgICAgdGhpcy5zaWRlYmFyUGFuZXMuc2NvcGVjaGFpbi51cGRh
dGUoc2VsZWN0ZWRDYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAg
IHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gdXBkYXRpbmdDYWxsYmFja1dyYXBw
ZXIocmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAg
ICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVi
YXJQYW5lcy5zY29wZWNoYWluLnVwZGF0ZShzZWxlY3RlZENhbGxGcmFtZSk7CisgICAgICAgIH0g
ICAgICAgIAorICAgICAgICB0aGlzLmRvRXZhbEluQ2FsbEZyYW1lKHNlbGVjdGVkQ2FsbEZyYW1l
LCBjb2RlLCB1cGRhdGluZ0NhbGxiYWNrV3JhcHBlcik7CisgICAgfSwKKworICAgIGRvRXZhbElu
Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUsIGNvZGUsIGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgZnVuY3Rpb24gZGVsYXllZEV2YWx1YXRpb24oKQorICAgICAgICB7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNhbGxGcmFtZS5ldmFsdWF0ZShjb2Rl
KSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
ZSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2V0VGltZW91dChk
ZWxheWVkRXZhbHVhdGlvbiwgMCk7CiAgICAgfSwKIAogICAgIHZhcmlhYmxlc0luU2NvcGVGb3JT
ZWxlY3RlZENhbGxGcmFtZTogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGV4dFByb21wdC5qcwppbmRleCA2MWUxYjUyLi5jNThjZjY0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGV4dFByb21wdC5qcwpAQCAtMTQwLDcgKzE0MCw2IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBjb21wbGV0ZTogZnVuY3Rpb24oYXV0bykK
ICAgICB7CiAgICAgICAgIHRoaXMuY2xlYXJBdXRvQ29tcGxldGUodHJ1ZSk7Ci0KICAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKCFzZWxl
Y3Rpb24ucmFuZ2VDb3VudCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1MCwxNyArMTQ5LDI1
IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgaWYgKGF1dG8gJiYgIXRoaXMuaXNDYXJldEF0RW5kT2ZQcm9tcHQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICB2YXIgd29yZFByZWZpeFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRPZmZzZXQsIHRoaXMuY29tcGxldGlvblN0b3BDaGFyYWN0ZXJzLCB0aGlzLmVsZW1lbnQsICJi
YWNrd2FyZCIpOwotICAgICAgICB2YXIgY29tcGxldGlvbnMgPSB0aGlzLmNvbXBsZXRpb25zKHdv
cmRQcmVmaXhSYW5nZSwgYXV0byk7CisgICAgICAgIHRoaXMuY29tcGxldGlvbnMod29yZFByZWZp
eFJhbmdlLCBhdXRvLCB0aGlzLl9jb21wbGV0aW9uc1JlYWR5LmJpbmQodGhpcywgc2VsZWN0aW9u
LCBhdXRvLCB3b3JkUHJlZml4UmFuZ2UpKTsKKyAgICB9LAogCisgICAgX2NvbXBsZXRpb25zUmVh
ZHk6IGZ1bmN0aW9uKHNlbGVjdGlvbiwgYXV0bywgb3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UsIGNv
bXBsZXRpb25zKQorICAgIHsKICAgICAgICAgaWYgKCFjb21wbGV0aW9ucyB8fCAhY29tcGxldGlv
bnMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHZhciBzZWxlY3Rpb25S
YW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOworICAgICAgICB2YXIgd29yZFByZWZpeFJh
bmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9u
UmFuZ2Uuc3RhcnRPZmZzZXQsIHRoaXMuY29tcGxldGlvblN0b3BDaGFyYWN0ZXJzLCB0aGlzLmVs
ZW1lbnQsICJiYWNrd2FyZCIpOworCiAgICAgICAgIHZhciBmdWxsV29yZFJhbmdlID0gZG9jdW1l
bnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgZnVsbFdvcmRSYW5nZS5zZXRTdGFydCh3b3JkUHJl
Zml4UmFuZ2Uuc3RhcnRDb250YWluZXIsIHdvcmRQcmVmaXhSYW5nZS5zdGFydE9mZnNldCk7CiAg
ICAgICAgIGZ1bGxXb3JkUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvblJhbmdlLmVuZENvbnRhaW5lciwg
c2VsZWN0aW9uUmFuZ2UuZW5kT2Zmc2V0KTsKIAorICAgICAgICBpZiAob3JpZ2luYWxXb3JkUHJl
Zml4UmFuZ2UudG9TdHJpbmcoKSAhPSBmdWxsV29yZFJhbmdlLnRvU3RyaW5nKCkpCisgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA9PT0gMSB8fCBz
ZWxlY3Rpb24uaXNDb2xsYXBzZWQgfHwgYXV0bykgewogICAgICAgICAgICAgdmFyIGNvbXBsZXRp
b25UZXh0ID0gY29tcGxldGlvbnNbMF07CiAgICAgICAgIH0gZWxzZSB7Cg==
</data>
<flag name="review"
          id="15954"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>