<?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>107238</bug_id>
          
          <creation_ts>2013-01-18 00:57:43 -0800</creation_ts>
          <short_desc>Web Inspector: speedup highlight regex API in DefaultTextEditor</short_desc>
          <delta_ts>2013-01-23 11:11:36 -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 (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>1</everconfirmed>
          <reporter name="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>810338</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-18 00:57:43 -0800</bug_when>
    <thetext>Speedup highlight regex API in DefaultTextEditor. 
Current implementation of highlight regex API forces too many synchronous relayouts of page, which are expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810346</commentid>
    <comment_count>1</comment_count>
      <attachid>183398</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-18 01:15:24 -0800</bug_when>
    <thetext>Created attachment 183398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810407</commentid>
    <comment_count>2</comment_count>
      <attachid>183398</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-18 02:30:09 -0800</bug_when>
    <thetext>Comment on attachment 183398
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1932
&gt; +    _measureOverlayHighlight: function(lineChunks)

lineChunks is a poor name.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1934
&gt; +        /** @type {Array.&lt;WebInspector.TextEditorMainPanel.RegexOverlayHighlight&gt;} */

nuke this

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1947
&gt; +     * @return {Array.&lt;WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics&gt;}

Lets use map here.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1953
&gt; +        for (var i = 0; i &lt; lineChunks.length; ++i) {

this.beginDomUpdates()

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1964
&gt; +                    this._renderRanges(lineRow, line, ranges);

We could do this in an artificial container positioned at 0, 0

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1970
&gt; +        /** @type {Array.&lt;WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics&gt;} */

This is inferred

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1975
&gt; +            /** @type {WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics} */

This is implied

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:3058
&gt; +    this.offsetLeft = element.offsetLeft;

You should not use DOM metrics, use simple box metrics that fit your problem: width and offset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810505</commentid>
    <comment_count>3</comment_count>
      <attachid>183431</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-18 05:44:53 -0800</bug_when>
    <thetext>Created attachment 183431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810509</commentid>
    <comment_count>4</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-18 05:47:03 -0800</bug_when>
    <thetext>Will refactor lineChunks -&gt; lineNumberRanges in a separate patch (to avoid clutter).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811858</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-20 23:33:22 -0800</bug_when>
    <thetext>You should reply to me review comments with responses on what you fixed and what not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811921</commentid>
    <comment_count>6</comment_count>
      <attachid>183398</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-21 01:03:33 -0800</bug_when>
    <thetext>Comment on attachment 183398
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1932
&gt;&gt; +    _measureOverlayHighlight: function(lineChunks)
&gt; 
&gt; lineChunks is a poor name.

this refactoring is done in a separate patch to avoid clutter: https://bugs.webkit.org/show_bug.cgi?id=107273

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1934
&gt;&gt; +        /** @type {Array.&lt;WebInspector.TextEditorMainPanel.RegexOverlayHighlight&gt;} */
&gt; 
&gt; nuke this

fixed.

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1947
&gt;&gt; +     * @return {Array.&lt;WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics&gt;}
&gt; 
&gt; Lets use map here.

fixed.

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1953
&gt;&gt; +        for (var i = 0; i &lt; lineChunks.length; ++i) {
&gt; 
&gt; this.beginDomUpdates()

fixed.

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1964
&gt;&gt; +                    this._renderRanges(lineRow, line, ranges);
&gt; 
&gt; We could do this in an artificial container positioned at 0, 0

I did an experiment on that, and it ran significantly slower then current implementation.

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1970
&gt;&gt; +        /** @type {Array.&lt;WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics&gt;} */
&gt; 
&gt; This is inferred

removed.

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1975
&gt;&gt; +            /** @type {WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics} */
&gt; 
&gt; This is implied

removed.

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:3058
&gt;&gt; +    this.offsetLeft = element.offsetLeft;
&gt; 
&gt; You should not use DOM metrics, use simple box metrics that fit your problem: width and offset.

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811945</commentid>
    <comment_count>7</comment_count>
      <attachid>183431</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-21 01:56:02 -0800</bug_when>
    <thetext>Comment on attachment 183431
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1929
&gt; +     * @param {Array.&lt;{startLine: number, endLine: number}&gt;} lineChunks

It probably requires a rebaseline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811977</commentid>
    <comment_count>8</comment_count>
      <attachid>183431</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-21 02:42:40 -0800</bug_when>
    <thetext>Comment on attachment 183431
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1929
&gt;&gt; +     * @param {Array.&lt;{startLine: number, endLine: number}&gt;} lineChunks
&gt; 
&gt; It probably requires a rebaseline?

The patch (https://bugs.webkit.org/show_bug.cgi?id=107273) was intended to be landed after this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812000</commentid>
    <comment_count>9</comment_count>
      <attachid>183431</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-21 03:26:15 -0800</bug_when>
    <thetext>Comment on attachment 183431
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1896
&gt;          for (var i = 0; i &lt; lineChunks.length; ++i) {

This nesting iteration looks ugly. You iterate over ranges and then over lines within ranges and you need to do this both in _measureOverlayHighlight and below. You also measure overlayHighlight for lines that will get scheduled. I.e. you will re-measure overlayHighlight for them again later.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1935
&gt; +        for(var key in this._highlightRegexs) {

What is key? Is it a regexString?

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1936
&gt; +            var value = this._highlightRegexs[key];

What is value? Is it a highlightDescriptor? Naming variables key and value when interacting with a map it not helping.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1940
&gt; +        return overlayHighlight;

It seems suboptimal that you build an array of maps. I&apos;d use multimap instead (i.e. map from line to array of highlights).

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1953
&gt; +        for (var i = 0; i &lt; lineChunks.length; ++i) {

Here it is, same non-trivial nested again. I would be simpler to collect lineRows first in one place and pass them here.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:3062
&gt; +WebInspector.TextEditorMainPanel.LineOverlayHighlightMetrics;

The fact that you need to define top-level structures like this means that you could have extracted this logic into a separate class. Declaring an array of elements of a type under a name that does not resemble the  name of the items is confusing. How am I supposed to know that LineOverlayHighlightMetrics is an array of ElementMetrics? It should be ElementMetricsArray I guess. And then it just does not need a name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812062</commentid>
    <comment_count>10</comment_count>
      <attachid>183431</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-21 05:41:57 -0800</bug_when>
    <thetext>Comment on attachment 183431
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1940
&gt;&gt; +        return overlayHighlight;
&gt; 
&gt; It seems suboptimal that you build an array of maps. I&apos;d use multimap instead (i.e. map from line to array of highlights).

I&apos;ll have to store a cssClass for each of the values of a multimap - a slight overhead in comparison to the current version. Will we trade it for convenience?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812064</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-21 05:47:33 -0800</bug_when>
    <thetext>&gt; I&apos;ll have to store a cssClass for each of the values of a multimap - a slight overhead in comparison to the current version. Will we trade it for convenience?

It just feels like the introduced complexity is not worth the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812065</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-01-21 05:48:04 -0800</bug_when>
    <thetext>&gt; It just feels like the introduced complexity is not worth the feature.

... or better the other way around</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814141</commentid>
    <comment_count>13</comment_count>
      <attachid>184211</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-01-23 05:58:53 -0800</bug_when>
    <thetext>Created attachment 184211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814387</commentid>
    <comment_count>14</comment_count>
      <attachid>184211</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 11:11:32 -0800</bug_when>
    <thetext>Comment on attachment 184211
Patch

Clearing flags on attachment: 184211

Committed r140556: &lt;http://trac.webkit.org/changeset/140556&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814388</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 11:11:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183398</attachid>
            <date>2013-01-18 01:15:24 -0800</date>
            <delta_ts>2013-01-21 01:03:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107238-20130118131223.patch</filename>
            <type>text/plain</type>
            <size>15552</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YwNTA1ZTI3NzA1MDMw
YmYxYWJiNjY4NWIyMWUzMDc4NTFjYTkwMi4uZTM2MGE5YjhkZmMxYTE0ZDYwYTYyYzcwYjg1OTM2
YjZiNjUyYzc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEzLTAxLTE4ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzcGVlZHVwIGhpZ2hsaWdodCByZWdleCBBUEkgaW4gRGVmYXVsdFRleHRFZGl0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzIzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFR3byBpbXBy
b3ZlbWVudHMgaGVyZToKKyAgICAgICAgLSBNb3ZlIG92ZXJsYXkgaGlnaGxpZ2h0IG1lYXN1cmVt
ZW50IG9wZXJhdGlvbnMgZnJvbSBfcGFpbnRMaW5lIGxldmVsIHRvCisgICAgICAgIF9wYWludExp
bmVDaHVua3MgbGV2ZWwuIFRoaXMgYXZvaWRzIGZvcmNpbmcgcmVsYXlvdXRpbmcgZm9yIGV2ZXJ5
IGxpbmUuCisgICAgICAgIC0gUG9zaXRpb24gb3ZlcmxheSBzcGFucyB2aWEgImxlZnQiIGNzcyBw
cm9wZXJ0eSBpbnN0ZWFkIG9mICJtYXJnaW4tbGVmdCIgcHJvcGVydHkuCisgICAgICAgIFRoaXMg
YXZvaWRzIGZvcmNpbmcgcmVsYXlvdXQgYXMgd2VsbC4KKworICAgICAgICBObyBuZXcgdGVzdHM6
IG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlLm1hcmtBbmRSZXZlYWxSYW5nZSk6IENhbGwgX3BhaW50TGluZUNo
dW5rcyBpbnN0ZWFkIG9mIF9wYWludExpbmUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX21lYXN1cmVPdmVybGF5SGln
aGxpZ2h0KTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX21lYXN1cmVMaW5lQ2h1bmtzRm9yUmVnZXgpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYXBwZW5kT3Zlcmxh
eUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5w
cm90b3R5cGUuX3JlbmRlclJhbmdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuZXhwYW5kKTogQ2FsbCBfcGFpbnRMaW5lQ2h1
bmtzIGluc3RlYWQgb2YgX3BhaW50TGluZS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzKTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5SZWdleE92ZXJsYXlIaWdobGlnaHQpOiBBZGRlZC4KKwog
MjAxMy0wMS0xOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MDAwNS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzCmlu
ZGV4IGMzM2VkNmYyMjdiM2ZjNzMzNTdkNjQyMGMyNDk5MTc5Zjk2MGJiNTMuLjRmNTAwODc1MWFi
MjVkNzJmZTRkY2VkZjI4N2ViNTg1YjM1YmUxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcwpAQCAtMTU2Niw3
ICsxNTY2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5fcmFuZ2VUb01hcmsgPSByYW5nZTsKICAgICAgICAgICAgIHRo
aXMucmV2ZWFsTGluZShyYW5nZS5zdGFydExpbmUpOwogICAgICAgICAgICAgdmFyIGNodW5rID0g
dGhpcy5tYWtlTGluZUFDaHVuayhyYW5nZS5zdGFydExpbmUpOwotICAgICAgICAgICAgdGhpcy5f
cGFpbnRMaW5lKGNodW5rLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhy
YW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0TGluZSArIDEpOwogICAgICAgICAgICAgaWYgKHRo
aXMuX21hcmtlZFJhbmdlRWxlbWVudCkKICAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5n
ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwogICAgICAgICB9CkBAIC0xODczLDcg
KzE4NzMsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuX3BhaW50TGluZUNodW5rcyhbeyBzdGFydExpbmU6IGZyb21MaW5lLCBl
bmRMaW5lOiB0b0xpbmUgfV0sIHJlc3RvcmVTZWxlY3Rpb24pOwogICAgIH0sCiAKKwogICAgIC8q
KgorICAgICAqIEBwYXJhbSB7QXJyYXkuPHtzdGFydExpbmU6IG51bWJlciwgZW5kTGluZTogbnVt
YmVyfT59IGxpbmVDaHVua3MKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXN0b3JlU2VsZWN0
aW9uCiAgICAgICovCiAgICAgX3BhaW50TGluZUNodW5rczogZnVuY3Rpb24obGluZUNodW5rcywg
cmVzdG9yZVNlbGVjdGlvbikKQEAgLTE4ODMsOCArMTg4NSwxMyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB2aXNpYmxlRnJvbSA9
IHRoaXMuc2Nyb2xsVG9wKCk7CiAgICAgICAgIHZhciBmaXJzdFZpc2libGVMaW5lTnVtYmVyID0g
dGhpcy5saW5lTnVtYmVyQXRPZmZzZXQodmlzaWJsZUZyb20pOwogCi0gICAgICAgIHZhciBjaHVu
azsKICAgICAgICAgdmFyIHNlbGVjdGlvbjsKKyAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24p
CisgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpOworCisgICAgICAgIHZh
ciBvdmVybGF5SGlnaGxpZ2h0ID0gdGhpcy5fbWVhc3VyZU92ZXJsYXlIaWdobGlnaHQobGluZUNo
dW5rcyk7CisKKyAgICAgICAgdmFyIGNodW5rOwogICAgICAgICB2YXIgaW52aXNpYmxlTGluZVJv
d3MgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lQ2h1bmtzLmxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICB2YXIgbGluZUNodW5rID0gbGluZUNodW5rc1tpXTsKQEAgLTE5
MDIsOSArMTkwOSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgICAgICAgICAgaW52aXNpYmxlTGluZVJvd3MucHVzaChsaW5lUm93
KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fcGFpbnRMaW5lKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIHRoaXMuX3BhaW50
TGluZShsaW5lUm93LCBvdmVybGF5SGlnaGxpZ2h0KTsKICAgICAgICAgICAgICAgICBpZiAodGhp
cy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NjaGVkdWxlUGFpbnRMaW5lcyhsaW5lTnVtYmVyICsgMSwgbGluZUNodW5rLmVuZExp
bmUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5MTMsOSArMTkxOCw3IEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQog
CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW52aXNpYmxlTGluZVJvd3MubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCi0g
ICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
IHRoaXMuX3BhaW50TGluZShpbnZpc2libGVMaW5lUm93c1tpXSk7CisgICAgICAgICAgICB0aGlz
Ll9wYWludExpbmUoaW52aXNpYmxlTGluZVJvd3NbaV0sIG92ZXJsYXlIaWdobGlnaHQpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24pCkBAIC0xOTIzLDYgKzE5MjYs
NjMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAg
IH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5Ljx7c3RhcnRMaW5lOiBudW1iZXIs
IGVuZExpbmU6IG51bWJlcn0+fSBsaW5lQ2h1bmtzCisgICAgICogQHJldHVybiB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlJlZ2V4T3ZlcmxheUhpZ2hsaWdodD59Cisg
ICAgICovCisgICAgX21lYXN1cmVPdmVybGF5SGlnaGxpZ2h0OiBmdW5jdGlvbihsaW5lQ2h1bmtz
KQorICAgIHsKKyAgICAgICAgLyoqIEB0eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluUGFuZWwuUmVnZXhPdmVybGF5SGlnaGxpZ2h0Pn0gKi8KKyAgICAgICAgdmFyIG92ZXJs
YXlIaWdobGlnaHQgPSBbXTsKKyAgICAgICAgZm9yKHZhciBrZXkgaW4gdGhpcy5faGlnaGxpZ2h0
UmVnZXhzKSB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9oaWdobGlnaHRSZWdleHNb
a2V5XTsKKyAgICAgICAgICAgIHZhciBsaW5lQ2h1bmtzUmVnZXhNZXRyaWNzID0gdGhpcy5fbWVh
c3VyZUxpbmVDaHVua3NGb3JSZWdleChsaW5lQ2h1bmtzLCB2YWx1ZS5yZWdleCk7CisgICAgICAg
ICAgICBvdmVybGF5SGlnaGxpZ2h0LnB1c2gobmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFp
blBhbmVsLlJlZ2V4T3ZlcmxheUhpZ2hsaWdodChsaW5lQ2h1bmtzUmVnZXhNZXRyaWNzLCB2YWx1
ZS5jc3NDbGFzcykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvdmVybGF5SGlnaGxpZ2h0
OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5Ljx7c3RhcnRMaW5lOiBu
dW1iZXIsIGVuZExpbmU6IG51bWJlcn0+fSBsaW5lQ2h1bmtzCisgICAgICogQHBhcmFtIHtSZWdF
eHB9IHJlZ2V4CisgICAgICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0TWV0cmljcz59CisgICAgICovCisgICAgX21l
YXN1cmVMaW5lQ2h1bmtzRm9yUmVnZXg6IGZ1bmN0aW9uKGxpbmVDaHVua3MsIHJlZ2V4KQorICAg
IHsKKyAgICAgICAgdmFyIGNodW5rOworICAgICAgICB2YXIgbGluZVJvd3NUb01lYXN1cmUgPSBb
XTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lQ2h1bmtzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICB2YXIgbGluZUNodW5rID0gbGluZUNodW5rc1tpXTsKKyAgICAgICAgICAg
IGZvciAodmFyIGxpbmVOdW1iZXIgPSBsaW5lQ2h1bmsuc3RhcnRMaW5lOyBsaW5lTnVtYmVyIDwg
bGluZUNodW5rLmVuZExpbmU7ICsrbGluZU51bWJlcikgeworICAgICAgICAgICAgICAgIGlmICgh
Y2h1bmsgfHwgbGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSB8fCBsaW5lTnVtYmVyID49IGNo
dW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgICAgIGNo
dW5rID0gdGhpcy5jaHVua0ZvckxpbmUobGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgdmFy
IGxpbmVSb3cgPSBjaHVuay5leHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7CisgICAgICAgICAg
ICAgICAgaWYgKCFsaW5lUm93KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpOwor
ICAgICAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLl9maW5kUmVnZXhPY2N1cnJlbmNlcyhs
aW5lLCByZWdleCk7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyUmFuZ2VzKGxpbmVSb3csIGxpbmUsIHJhbmdlcyk7
CisgICAgICAgICAgICAgICAgICAgIGxpbmVSb3dzVG9NZWFzdXJlLnB1c2gobGluZVJvdyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoq
IEB0eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuTGluZU92ZXJs
YXlIaWdobGlnaHRNZXRyaWNzPn0gKi8KKyAgICAgICAgdmFyIHJlZ2V4SGlnaGxpZ2h0ID0gW107
CisgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaW5lUm93c1RvTWVhc3VyZS5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBsaW5lUm93c1RvTWVhc3VyZVtpXTsKKyAg
ICAgICAgICAgIHZhciBzcGFucyA9IGxpbmVSb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4i
KTsKKyAgICAgICAgICAgIC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwuTGluZU92ZXJsYXlIaWdobGlnaHRNZXRyaWNzfSAqLworICAgICAgICAgICAgdmFyIG1ldHJp
Y3MgPSBbXTsKKyAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsr
aikKKyAgICAgICAgICAgICAgICBtZXRyaWNzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzKHNwYW5zW2pdKSk7CisgICAgICAgICAgICByZWdl
eEhpZ2hsaWdodFtsaW5lUm93LmxpbmVOdW1iZXJdID0gbWV0cmljczsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZWdleEhpZ2hsaWdodDsKKyAgICB9LAorCisgICAgLyoqCiAgICAgICog
QHBhcmFtIHtzdHJpbmd9IGxpbmUKICAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXgKICAgICAg
KiBAcmV0dXJuIHtBcnJheS48e3N0YXJ0Q29sdW1uOiBudW1iZXIsIGVuZENvbHVtbjogbnVtYmVy
fT59CkBAIC0xOTQyLDMzICsyMDAyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtFbGVtZW50fSBsaW5l
Um93Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUKLSAgICAgKiBAcGFyYW0ge1JlZ0V4cH0g
cmVnZXgKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48e2xlZnQ6IG51bWJlciwgd2lkdGg6IG51bWJl
cn0+fQotICAgICAqLwotICAgIF9tZWFzdXJlUmVnZXg6IGZ1bmN0aW9uKGxpbmVSb3csIGxpbmUs
IHJlZ2V4KQotICAgIHsKLSAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuX2ZpbmRSZWdleE9jY3Vy
cmVuY2VzKGxpbmUsIHJlZ2V4KTsKLSAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPT09IDApCi0g
ICAgICAgICAgICByZXR1cm4gW107Ci0KLSAgICAgICAgdGhpcy5fcmVuZGVyUmFuZ2VzKGxpbmVS
b3csIGxpbmUsIHJhbmdlcyk7Ci0gICAgICAgIHZhciBzcGFucyA9IGxpbmVSb3cuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoInNwYW4iKTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1
bHRUZXh0RWRpdG9yKQotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3BhbnMubGVuZ3RoID09
PSByYW5nZXMubGVuZ3RoLCAiUmFuZ2VzIG51bWJlcjogIiArIHJhbmdlcy5sZW5ndGggKyAiICE9
PSBzcGFucyBudW1iZXI6ICIgKyBzcGFucy5sZW5ndGgpOwotCi0gICAgICAgIHZhciBtZXRyaWNz
ID0gW107Ci0gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICBtZXRyaWNzLnB1c2goewotICAgICAgICAgICAgICAgIGxlZnQ6IHNwYW5zW2ld
Lm9mZnNldExlZnQsCi0gICAgICAgICAgICAgICAgd2lkdGg6IHNwYW5zW2ldLm9mZnNldFdpZHRo
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIG1ldHJpY3M7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwotICAgICAqIEBwYXJhbSB7QXJy
YXkuPHtvZmZzZXRMZWZ0OiBudW1iZXIsIG9mZnNldFRvcDogbnVtYmVyLCBvZmZzZXRXaWR0aDog
bnVtYmVyLCBvZmZzZXRIZWlnaHQ6IG51bWJlcn0+fSBtZXRyaWNzCisgICAgICogQHBhcmFtIHtB
cnJheS48V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuRWxlbWVudE1ldHJpY3M+fSBt
ZXRyaWNzCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCiAgICAgICovCiAgICAgX2Fw
cGVuZE92ZXJsYXlIaWdobGlnaHQ6IGZ1bmN0aW9uKGxpbmVSb3csIG1ldHJpY3MsIGNzc0NsYXNz
KQpAQCAtMTk3NywxMiArMjAxMSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBtZXRyaWNzLmxlbmd0
aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOwogICAgICAgICAgICAgaGlnaGxpZ2h0LmFkZFN0eWxlQ2xhc3MoY3NzQ2xh
c3MpOwotICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChoaWdobGlnaHQpOwotCi0gICAg
ICAgICAgICBoaWdobGlnaHQuc3R5bGUubWFyZ2luTGVmdCA9IChtZXRyaWNzW2ldLmxlZnQgLSBo
aWdobGlnaHQub2Zmc2V0TGVmdCAtIGV4dHJhV2lkdGgpICsgInB4IjsKLSAgICAgICAgICAgIGhp
Z2hsaWdodC5zdHlsZS53aWR0aCA9IChtZXRyaWNzW2ldLndpZHRoICsgZXh0cmFXaWR0aCAqIDIp
ICsgInB4IjsKLSAgICAgICAgICAgIGhpZ2hsaWdodC5pbm5lckhUTUwgPSAiJm5ic3A7IjsKKyAg
ICAgICAgICAgIGhpZ2hsaWdodC5zdHlsZS5sZWZ0ID0gKG1ldHJpY3NbaV0ub2Zmc2V0TGVmdCAt
IGV4dHJhV2lkdGgpICsgInB4IjsKKyAgICAgICAgICAgIGhpZ2hsaWdodC5zdHlsZS53aWR0aCA9
IChtZXRyaWNzW2ldLm9mZnNldFdpZHRoICsgZXh0cmFXaWR0aCAqIDIpICsgInB4IjsKKyAgICAg
ICAgICAgIGhpZ2hsaWdodC50ZXh0Q29udGVudCA9ICIgIjsKICAgICAgICAgICAgIGhpZ2hsaWdo
dC5hZGRTdHlsZUNsYXNzKCJ0ZXh0LWVkaXRvci1vdmVybGF5LWhpZ2hsaWdodCIpOworICAgICAg
ICAgICAgbGluZVJvdy5hcHBlbmRDaGlsZChoaWdobGlnaHQpOwogICAgICAgICB9CiAgICAgfSwK
IApAQCAtMTk5Myw2ICsyMDI2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9yZW5kZXJSYW5nZXM6IGZ1bmN0aW9uKGxpbmVS
b3csIGxpbmUsIHJhbmdlcykKICAgICB7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7
CiAgICAgICAgIHZhciBkZWNvcmF0aW9uc0VsZW1lbnQgPSBsaW5lUm93LmRlY29yYXRpb25zRWxl
bWVudDsKIAogICAgICAgICBpZiAoIWRlY29yYXRpb25zRWxlbWVudCkKQEAgLTIwMjcsMTIgKzIw
NjEsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGV4dE5vZGVCZWZvcmUobGluZVJvdywgZGVjb3JhdGlv
bnNFbGVtZW50LCBsaW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5sZW5ndGgpKTsK
ICAgICAgICAgICAgIC0tdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ7CiAgICAgICAg
IH0KKyAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7CiAgICAgfSwKIAogICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdworICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlJlZ2V4T3ZlcmxheUhpZ2hsaWdodD59IG92ZXJs
YXlIaWdobGlnaHQKICAgICAgKi8KLSAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihsaW5lUm93KQor
ICAgIF9wYWludExpbmU6IGZ1bmN0aW9uKGxpbmVSb3csIG92ZXJsYXlIaWdobGlnaHQpCiAgICAg
ewogICAgICAgICB2YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGluZU51bWJlcjsKIApAQCAtMjA0
MywyNSArMjA3OSwyMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVt
YmVyLCAiaGlnaGxpZ2h0Iik7Ci0gICAgICAgICAgICBpZiAoIWhpZ2hsaWdodCkKKyAgICAgICAg
ICAgIHZhciB0b2tlbkhpZ2hsaWdodCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGlu
ZU51bWJlciwgImhpZ2hsaWdodCIpOworICAgICAgICAgICAgaWYgKCF0b2tlbkhpZ2hsaWdodCkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5f
dGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7Ci0KLSAgICAgICAgICAgIHZhciBtZXRyaWNzID0g
W107Ci0gICAgICAgICAgICB2YXIgY3NzQ2xhc3NlcyA9IFtdOwotICAgICAgICAgICAgZm9yKHZh
ciBrZXkgaW4gdGhpcy5faGlnaGxpZ2h0UmVnZXhzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gdGhpcy5faGlnaGxpZ2h0UmVnZXhzW2tleV07Ci0gICAgICAgICAgICAgICAgbWV0cmlj
cy5wdXNoKHRoaXMuX21lYXN1cmVSZWdleChsaW5lUm93LCBsaW5lLCB2YWx1ZS5yZWdleCkpOwot
ICAgICAgICAgICAgICAgIGNzc0NsYXNzZXMucHVzaCh2YWx1ZS5jc3NDbGFzcyk7Ci0gICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLl9oaWdobGlnaHRlci5vcmRl
cmVkUmFuZ2VzUGVyTGluZShsaW5lTnVtYmVyKTsKICAgICAgICAgICAgIHRoaXMuX3JlbmRlclJh
bmdlcyhsaW5lUm93LCBsaW5lLCByYW5nZXMpOwogCi0gICAgICAgICAgICBmb3IodmFyIGkgPSAw
OyBpIDwgbWV0cmljcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRP
dmVybGF5SGlnaGxpZ2h0KGxpbmVSb3csIG1ldHJpY3NbaV0sIGNzc0NsYXNzZXNbaV0pOworICAg
ICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG92ZXJsYXlIaWdobGlnaHQubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzRm9yUmVnZXggPSBvdmVybGF5SGlnaGxpZ2h0
W2ldLmxpbmVDaHVua3NNZXRyaWNzOworICAgICAgICAgICAgICAgIGlmIChyYW5nZXNGb3JSZWdl
eFtsaW5lTnVtYmVyXSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSBvdmVy
bGF5SGlnaGxpZ2h0W2ldLmNzc0NsYXNzOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBl
bmRPdmVybGF5SGlnaGxpZ2h0KGxpbmVSb3csIHJhbmdlc0ZvclJlZ2V4W2xpbmVOdW1iZXJdLCBj
c3NDbGFzcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGZp
bmFsbHkgewogICAgICAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3Jhbmdl
VG9NYXJrLnN0YXJ0TGluZSA9PT0gbGluZU51bWJlcikKICAgICAgICAgICAgICAgICB0aGlzLl9t
YXJrZWRSYW5nZUVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxp
bmVSb3csIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5l
bmRDb2x1bW4gLSB0aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbik7CkBAIC0yODc4LDcgKzI5
MTAsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuX2V4cGFuZGVkID0gdHJ1ZTsKIAogICAgICAgICBpZiAodGhpcy5saW5lc0Nv
dW50ID09PSAxKSB7Ci0gICAgICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuX3BhaW50TGluZSh0
aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLl9wYWludExpbmVz
KHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0TGluZSArIDEpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTMwMTcsNCArMzA0OSwyOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgfQogfQogCisvKioKKyAqIEBjb25zdHJ1
Y3RvcgorICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgKi8KK1dlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzID0gZnVuY3Rpb24oZWxlbWVudCkKK3sKKyAg
ICB0aGlzLm9mZnNldExlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQ7CisgICAgdGhpcy5vZmZzZXRX
aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7Cit9CisKKy8qKiBAdHlwZWRlZiB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzPn0gKi8KK1dlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0TWV0cmljczsK
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0TWV0cmljcz59IGxpbmVDaHVu
a3NNZXRyaWNzCisgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3MKKyAqLworV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwuUmVnZXhPdmVybGF5SGlnaGxpZ2h0ID0gZnVuY3Rpb24obGlu
ZUNodW5rc01ldHJpY3MsIGNzc0NsYXNzKQoreworICAgIHRoaXMubGluZUNodW5rc01ldHJpY3Mg
PSBsaW5lQ2h1bmtzTWV0cmljczsKKyAgICB0aGlzLmNzc0NsYXNzID0gY3NzQ2xhc3M7Cit9CisK
IFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0RWRpdG9yID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODQ4
YTQ5ZWQzZjQyMDQzZWY3ODc3ZTVhM2ZjY2EwODBlM2RjNGZhMy4uOGU4MTc1NTgxYmVkYjAyODMw
ODYxMzM0ZmY1YzUwZGFkYTE5ZDI1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEzLTAxLTE4
ICBBbmRyZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBzcGVlZHVwIGhpZ2hsaWdodCByZWdleCBBUEkgaW4gRGVmYXVsdFRleHRF
ZGl0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NzIzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
cnJlY3QgbGF5b3V0IHRlc3QgdG8gY29ycmVzcG9uZCB0byBjaGFuZ2VzLgorCisgICAgICAgICog
aW5zcGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1oaWdobGlnaHQtcmVnZXhwLWV4cGVjdGVkLnR4
dDoKKwogMjAxMy0wMS0xOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCBmaXggbWFjIGFuZCBtYWMtd2syIFRlc3RFeHBlY3RhdGlv
bnMgbGludCB3YXJuaW5ncy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lZGl0
b3IvdGV4dC1lZGl0b3ItaGlnaGxpZ2h0LXJlZ2V4cC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZWRpdG9yL3RleHQtZWRpdG9yLWhpZ2hsaWdodC1yZWdleHAtZXhwZWN0ZWQu
dHh0CmluZGV4IDQ2OTAzMTkxNjhjOThmMzYyOWJiYjZkZTE0MDQxZTcyMzBkOTE0YjAuLmY4YmE1
ZmQ3MGNjZTQ3ZWZmZjNlMDg5ODk4NjAyMzE5NWIxNzc5MjggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0b3ItaGlnaGxpZ2h0LXJlZ2V4cC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1oaWdo
bGlnaHQtcmVnZXhwLWV4cGVjdGVkLnR4dApAQCAtMTcsMTEgKzE3LDExIEBAIEFkZCBoaWdobGln
aHQgZm9yIHJlZ2V4cCAvZm9vXy4vCiAKIDxkaXYgY2xhc3M9ImlubmVyLWNvbnRhaW5lciIgdGFi
aW5kZXg9IjAiPgogPGRpdiBjbGFzcz0id2Via2l0LWxpbmUtY29udGVudCI+Zm9vKCk7PC9kaXY+
Ci08ZGl2IGNsYXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5mb29fMTsgZm9vcjsgZm9vXzs8c3Bh
biBjbGFzcz0ic29tZS1jc3MtY2xhc3MgdGV4dC1lZGl0b3Itb3ZlcmxheS1oaWdobGlnaHQiIHN0
eWxlPSJtYXJnaW4tbGVmdDogLTEyN3B4OyB3aWR0aDogMzdweDsiPiZuYnNwOzwvc3Bhbj48c3Bh
biBjbGFzcz0ic29tZS1jc3MtY2xhc3MgdGV4dC1lZGl0b3Itb3ZlcmxheS1oaWdobGlnaHQiIHN0
eWxlPSJtYXJnaW4tbGVmdDogLTM2cHg7IHdpZHRoOiAzN3B4OyI+Jm5ic3A7PC9zcGFuPjwvZGl2
PgorPGRpdiBjbGFzcz0id2Via2l0LWxpbmUtY29udGVudCI+Zm9vXzE7IGZvb3I7IGZvb187PHNw
YW4gY2xhc3M9InNvbWUtY3NzLWNsYXNzIHRleHQtZWRpdG9yLW92ZXJsYXktaGlnaGxpZ2h0IiBz
dHlsZT0ibGVmdDogLTFweDsgd2lkdGg6IDM3cHg7Ij4gPC9zcGFuPjxzcGFuIGNsYXNzPSJzb21l
LWNzcy1jbGFzcyB0ZXh0LWVkaXRvci1vdmVybGF5LWhpZ2hsaWdodCIgc3R5bGU9ImxlZnQ6IDkw
cHg7IHdpZHRoOiAzN3B4OyI+IDwvc3Bhbj48L2Rpdj4KIDxkaXYgY2xhc3M9IndlYmtpdC1saW5l
LWNvbnRlbnQiPmZvb188L2Rpdj4KIDxkaXYgY2xhc3M9IndlYmtpdC1saW5lLWNvbnRlbnQiPmds
b2JhbF9mb288L2Rpdj4KIDxkaXYgY2xhc3M9IndlYmtpdC1saW5lLWNvbnRlbnQiPmdsb2JhbF9m
b28yPC9kaXY+Ci08ZGl2IGNsYXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5zb21lX290aGVyX2Zv
b19YPHNwYW4gY2xhc3M9InNvbWUtY3NzLWNsYXNzIHRleHQtZWRpdG9yLW92ZXJsYXktaGlnaGxp
Z2h0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IC0zNnB4OyB3aWR0aDogMzdweDsiPiZuYnNwOzwvc3Bh
bj48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9IndlYmtpdC1saW5lLWNvbnRlbnQiPnNvbWVfb3Ro
ZXJfZm9vX1g8c3BhbiBjbGFzcz0ic29tZS1jc3MtY2xhc3MgdGV4dC1lZGl0b3Itb3ZlcmxheS1o
aWdobGlnaHQiIHN0eWxlPSJsZWZ0OiA3NnB4OyB3aWR0aDogMzdweDsiPiA8L3NwYW4+PC9kaXY+
PC9kaXY+CiAKIFJlbW92ZSBoaWdobGlnaHQgZm9yIHJlZ2V4cCAvZm9vXy4vCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183431</attachid>
            <date>2013-01-18 05:44:53 -0800</date>
            <delta_ts>2013-01-23 05:58:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107238-20130118174151.patch</filename>
            <type>text/plain</type>
            <size>15244</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YwNTA1ZTI3NzA1MDMw
YmYxYWJiNjY4NWIyMWUzMDc4NTFjYTkwMi4uZTM2MGE5YjhkZmMxYTE0ZDYwYTYyYzcwYjg1OTM2
YjZiNjUyYzc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEzLTAxLTE4ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzcGVlZHVwIGhpZ2hsaWdodCByZWdleCBBUEkgaW4gRGVmYXVsdFRleHRFZGl0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzIzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFR3byBpbXBy
b3ZlbWVudHMgaGVyZToKKyAgICAgICAgLSBNb3ZlIG92ZXJsYXkgaGlnaGxpZ2h0IG1lYXN1cmVt
ZW50IG9wZXJhdGlvbnMgZnJvbSBfcGFpbnRMaW5lIGxldmVsIHRvCisgICAgICAgIF9wYWludExp
bmVDaHVua3MgbGV2ZWwuIFRoaXMgYXZvaWRzIGZvcmNpbmcgcmVsYXlvdXRpbmcgZm9yIGV2ZXJ5
IGxpbmUuCisgICAgICAgIC0gUG9zaXRpb24gb3ZlcmxheSBzcGFucyB2aWEgImxlZnQiIGNzcyBw
cm9wZXJ0eSBpbnN0ZWFkIG9mICJtYXJnaW4tbGVmdCIgcHJvcGVydHkuCisgICAgICAgIFRoaXMg
YXZvaWRzIGZvcmNpbmcgcmVsYXlvdXQgYXMgd2VsbC4KKworICAgICAgICBObyBuZXcgdGVzdHM6
IG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlLm1hcmtBbmRSZXZlYWxSYW5nZSk6IENhbGwgX3BhaW50TGluZUNo
dW5rcyBpbnN0ZWFkIG9mIF9wYWludExpbmUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX21lYXN1cmVPdmVybGF5SGln
aGxpZ2h0KTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX21lYXN1cmVMaW5lQ2h1bmtzRm9yUmVnZXgpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYXBwZW5kT3Zlcmxh
eUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5w
cm90b3R5cGUuX3JlbmRlclJhbmdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUuZXhwYW5kKTogQ2FsbCBfcGFpbnRMaW5lQ2h1
bmtzIGluc3RlYWQgb2YgX3BhaW50TGluZS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzKTogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5SZWdleE92ZXJsYXlIaWdobGlnaHQpOiBBZGRlZC4KKwog
MjAxMy0wMS0xOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MDAwNS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzCmlu
ZGV4IGMzM2VkNmYyMjdiM2ZjNzMzNTdkNjQyMGMyNDk5MTc5Zjk2MGJiNTMuLmNlYTgyZjFkYzUw
YzQ5ODU5MmIyMmI0OTBmYjAxMjk0MGJhMWE4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcwpAQCAtMTU2Niw3
ICsxNTY2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5fcmFuZ2VUb01hcmsgPSByYW5nZTsKICAgICAgICAgICAgIHRo
aXMucmV2ZWFsTGluZShyYW5nZS5zdGFydExpbmUpOwogICAgICAgICAgICAgdmFyIGNodW5rID0g
dGhpcy5tYWtlTGluZUFDaHVuayhyYW5nZS5zdGFydExpbmUpOwotICAgICAgICAgICAgdGhpcy5f
cGFpbnRMaW5lKGNodW5rLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhy
YW5nZS5zdGFydExpbmUsIHJhbmdlLnN0YXJ0TGluZSArIDEpOwogICAgICAgICAgICAgaWYgKHRo
aXMuX21hcmtlZFJhbmdlRWxlbWVudCkKICAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5n
ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOwogICAgICAgICB9CkBAIC0xODczLDcg
KzE4NzMsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuX3BhaW50TGluZUNodW5rcyhbeyBzdGFydExpbmU6IGZyb21MaW5lLCBl
bmRMaW5lOiB0b0xpbmUgfV0sIHJlc3RvcmVTZWxlY3Rpb24pOwogICAgIH0sCiAKKwogICAgIC8q
KgorICAgICAqIEBwYXJhbSB7QXJyYXkuPHtzdGFydExpbmU6IG51bWJlciwgZW5kTGluZTogbnVt
YmVyfT59IGxpbmVDaHVua3MKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSByZXN0b3JlU2VsZWN0
aW9uCiAgICAgICovCiAgICAgX3BhaW50TGluZUNodW5rczogZnVuY3Rpb24obGluZUNodW5rcywg
cmVzdG9yZVNlbGVjdGlvbikKQEAgLTE4ODMsOCArMTg4NSwxMyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB2aXNpYmxlRnJvbSA9
IHRoaXMuc2Nyb2xsVG9wKCk7CiAgICAgICAgIHZhciBmaXJzdFZpc2libGVMaW5lTnVtYmVyID0g
dGhpcy5saW5lTnVtYmVyQXRPZmZzZXQodmlzaWJsZUZyb20pOwogCi0gICAgICAgIHZhciBjaHVu
azsKICAgICAgICAgdmFyIHNlbGVjdGlvbjsKKyAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24p
CisgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbigpOworCisgICAgICAgIHZh
ciBvdmVybGF5SGlnaGxpZ2h0ID0gdGhpcy5fbWVhc3VyZU92ZXJsYXlIaWdobGlnaHQobGluZUNo
dW5rcyk7CisKKyAgICAgICAgdmFyIGNodW5rOwogICAgICAgICB2YXIgaW52aXNpYmxlTGluZVJv
d3MgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lQ2h1bmtzLmxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICB2YXIgbGluZUNodW5rID0gbGluZUNodW5rc1tpXTsKQEAgLTE5
MDIsOSArMTkwOSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgICAgICAgICAgaW52aXNpYmxlTGluZVJvd3MucHVzaChsaW5lUm93
KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCi0gICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fcGFpbnRMaW5lKGxpbmVSb3cpOworICAgICAgICAgICAgICAgIHRoaXMuX3BhaW50
TGluZShsaW5lUm93LCBvdmVybGF5SGlnaGxpZ2h0KTsKICAgICAgICAgICAgICAgICBpZiAodGhp
cy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NjaGVkdWxlUGFpbnRMaW5lcyhsaW5lTnVtYmVyICsgMSwgbGluZUNodW5rLmVuZExp
bmUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5MTMsOSArMTkxOCw3IEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQog
CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW52aXNpYmxlTGluZVJvd3MubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCi0g
ICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24oKTsKLSAgICAgICAgICAg
IHRoaXMuX3BhaW50TGluZShpbnZpc2libGVMaW5lUm93c1tpXSk7CisgICAgICAgICAgICB0aGlz
Ll9wYWludExpbmUoaW52aXNpYmxlTGluZVJvd3NbaV0sIG92ZXJsYXlIaWdobGlnaHQpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24pCkBAIC0xOTIzLDYgKzE5MjYs
NjIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAg
IH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FycmF5Ljx7c3RhcnRMaW5lOiBudW1iZXIs
IGVuZExpbmU6IG51bWJlcn0+fSBsaW5lQ2h1bmtzCisgICAgICogQHJldHVybiB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlJlZ2V4T3ZlcmxheUhpZ2hsaWdodD59Cisg
ICAgICovCisgICAgX21lYXN1cmVPdmVybGF5SGlnaGxpZ2h0OiBmdW5jdGlvbihsaW5lQ2h1bmtz
KQorICAgIHsKKyAgICAgICAgdmFyIG92ZXJsYXlIaWdobGlnaHQgPSBbXTsKKyAgICAgICAgZm9y
KHZhciBrZXkgaW4gdGhpcy5faGlnaGxpZ2h0UmVnZXhzKSB7CisgICAgICAgICAgICB2YXIgdmFs
dWUgPSB0aGlzLl9oaWdobGlnaHRSZWdleHNba2V5XTsKKyAgICAgICAgICAgIHZhciBsaW5lQ2h1
bmtzUmVnZXhNZXRyaWNzID0gdGhpcy5fbWVhc3VyZUxpbmVDaHVua3NGb3JSZWdleChsaW5lQ2h1
bmtzLCB2YWx1ZS5yZWdleCk7CisgICAgICAgICAgICBvdmVybGF5SGlnaGxpZ2h0LnB1c2gobmV3
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlJlZ2V4T3ZlcmxheUhpZ2hsaWdodChs
aW5lQ2h1bmtzUmVnZXhNZXRyaWNzLCB2YWx1ZS5jc3NDbGFzcykpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBvdmVybGF5SGlnaGxpZ2h0OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge0FycmF5Ljx7c3RhcnRMaW5lOiBudW1iZXIsIGVuZExpbmU6IG51bWJlcn0+fSBsaW5l
Q2h1bmtzCisgICAgICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4CisgICAgICogQHJldHVybiB7T2Jq
ZWN0LjxXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5MaW5lT3ZlcmxheUhpZ2hsaWdo
dE1ldHJpY3M+fQorICAgICAqLworICAgIF9tZWFzdXJlTGluZUNodW5rc0ZvclJlZ2V4OiBmdW5j
dGlvbihsaW5lQ2h1bmtzLCByZWdleCkKKyAgICB7CisgICAgICAgIHZhciBjaHVuazsKKyAgICAg
ICAgdmFyIGxpbmVSb3dzVG9NZWFzdXJlID0gW107CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRh
dGVzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNodW5rcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgdmFyIGxpbmVDaHVuayA9IGxpbmVDaHVua3NbaV07CisgICAgICAg
ICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gbGluZUNodW5rLnN0YXJ0TGluZTsgbGluZU51bWJl
ciA8IGxpbmVDaHVuay5lbmRMaW5lOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWNodW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgfHwgbGluZU51bWJlciA+
PSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQorICAgICAgICAgICAgICAgICAg
ICBjaHVuayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAg
IHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOworICAgICAg
ICAgICAgICAgIGlmICghbGluZVJvdykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVy
KTsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5fZmluZFJlZ2V4T2NjdXJyZW5j
ZXMobGluZSwgcmVnZXgpOworICAgICAgICAgICAgICAgIGlmIChyYW5nZXMubGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclJhbmdlcyhsaW5lUm93LCBsaW5lLCByYW5n
ZXMpOworICAgICAgICAgICAgICAgICAgICBsaW5lUm93c1RvTWVhc3VyZS5wdXNoKGxpbmVSb3cp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0
aGlzLmVuZERvbVVwZGF0ZXMoKTsKKworICAgICAgICB2YXIgcmVnZXhIaWdobGlnaHQgPSB7fTsK
KyAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxpbmVSb3dzVG9NZWFzdXJlLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGxpbmVSb3dzVG9NZWFzdXJlW2ldOworICAg
ICAgICAgICAgdmFyIHNwYW5zID0gbGluZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIp
OworICAgICAgICAgICAgdmFyIG1ldHJpY3MgPSBbXTsKKyAgICAgICAgICAgIGZvcih2YXIgaiA9
IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikKKyAgICAgICAgICAgICAgICBtZXRyaWNzLnB1c2go
bmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzKHNwYW5z
W2pdKSk7CisgICAgICAgICAgICByZWdleEhpZ2hsaWdodFtsaW5lUm93LmxpbmVOdW1iZXJdID0g
bWV0cmljczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWdleEhpZ2hsaWdodDsKKyAg
ICB9LAorCisgICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUKICAgICAgKiBAcGFy
YW0ge1JlZ0V4cH0gcmVnZXgKICAgICAgKiBAcmV0dXJuIHtBcnJheS48e3N0YXJ0Q29sdW1uOiBu
dW1iZXIsIGVuZENvbHVtbjogbnVtYmVyfT59CkBAIC0xOTQyLDMzICsyMDAxLDcgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAg
ICogQHBhcmFtIHtFbGVtZW50fSBsaW5lUm93Ci0gICAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUK
LSAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXgKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48e2xl
ZnQ6IG51bWJlciwgd2lkdGg6IG51bWJlcn0+fQotICAgICAqLwotICAgIF9tZWFzdXJlUmVnZXg6
IGZ1bmN0aW9uKGxpbmVSb3csIGxpbmUsIHJlZ2V4KQotICAgIHsKLSAgICAgICAgdmFyIHJhbmdl
cyA9IHRoaXMuX2ZpbmRSZWdleE9jY3VycmVuY2VzKGxpbmUsIHJlZ2V4KTsKLSAgICAgICAgaWYg
KHJhbmdlcy5sZW5ndGggPT09IDApCi0gICAgICAgICAgICByZXR1cm4gW107Ci0KLSAgICAgICAg
dGhpcy5fcmVuZGVyUmFuZ2VzKGxpbmVSb3csIGxpbmUsIHJhbmdlcyk7Ci0gICAgICAgIHZhciBz
cGFucyA9IGxpbmVSb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKTsKLSAgICAgICAgaWYg
KFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0RWRpdG9yKQotICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQoc3BhbnMubGVuZ3RoID09PSByYW5nZXMubGVuZ3RoLCAiUmFuZ2VzIG51bWJlcjog
IiArIHJhbmdlcy5sZW5ndGggKyAiICE9PSBzcGFucyBudW1iZXI6ICIgKyBzcGFucy5sZW5ndGgp
OwotCi0gICAgICAgIHZhciBtZXRyaWNzID0gW107Ci0gICAgICAgIGZvcih2YXIgaSA9IDA7IGkg
PCByYW5nZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtZXRyaWNzLnB1c2goewotICAgICAg
ICAgICAgICAgIGxlZnQ6IHNwYW5zW2ldLm9mZnNldExlZnQsCi0gICAgICAgICAgICAgICAgd2lk
dGg6IHNwYW5zW2ldLm9mZnNldFdpZHRoCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJu
IG1ldHJpY3M7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGlu
ZVJvdwotICAgICAqIEBwYXJhbSB7QXJyYXkuPHtvZmZzZXRMZWZ0OiBudW1iZXIsIG9mZnNldFRv
cDogbnVtYmVyLCBvZmZzZXRXaWR0aDogbnVtYmVyLCBvZmZzZXRIZWlnaHQ6IG51bWJlcn0+fSBt
ZXRyaWNzCisgICAgICogQHBhcmFtIHtBcnJheS48V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwuRWxlbWVudE1ldHJpY3M+fSBtZXRyaWNzCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IGNz
c0NsYXNzCiAgICAgICovCiAgICAgX2FwcGVuZE92ZXJsYXlIaWdobGlnaHQ6IGZ1bmN0aW9uKGxp
bmVSb3csIG1ldHJpY3MsIGNzc0NsYXNzKQpAQCAtMTk3NywxMiArMjAxMCwxMSBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvcih2YXIg
aSA9IDA7IGkgPCBtZXRyaWNzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgaGlnaGxp
Z2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgICAgaGlnaGxp
Z2h0LmFkZFN0eWxlQ2xhc3MoY3NzQ2xhc3MpOwotICAgICAgICAgICAgbGluZVJvdy5hcHBlbmRD
aGlsZChoaWdobGlnaHQpOwotCi0gICAgICAgICAgICBoaWdobGlnaHQuc3R5bGUubWFyZ2luTGVm
dCA9IChtZXRyaWNzW2ldLmxlZnQgLSBoaWdobGlnaHQub2Zmc2V0TGVmdCAtIGV4dHJhV2lkdGgp
ICsgInB4IjsKKyAgICAgICAgICAgIGhpZ2hsaWdodC5zdHlsZS5sZWZ0ID0gKG1ldHJpY3NbaV0u
bGVmdCAtIGV4dHJhV2lkdGgpICsgInB4IjsKICAgICAgICAgICAgIGhpZ2hsaWdodC5zdHlsZS53
aWR0aCA9IChtZXRyaWNzW2ldLndpZHRoICsgZXh0cmFXaWR0aCAqIDIpICsgInB4IjsKLSAgICAg
ICAgICAgIGhpZ2hsaWdodC5pbm5lckhUTUwgPSAiJm5ic3A7IjsKKyAgICAgICAgICAgIGhpZ2hs
aWdodC50ZXh0Q29udGVudCA9ICIgIjsKICAgICAgICAgICAgIGhpZ2hsaWdodC5hZGRTdHlsZUNs
YXNzKCJ0ZXh0LWVkaXRvci1vdmVybGF5LWhpZ2hsaWdodCIpOworICAgICAgICAgICAgbGluZVJv
dy5hcHBlbmRDaGlsZChoaWdobGlnaHQpOwogICAgICAgICB9CiAgICAgfSwKIApAQCAtMTk5Myw2
ICsyMDI1LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAqLwogICAgIF9yZW5kZXJSYW5nZXM6IGZ1bmN0aW9uKGxpbmVSb3csIGxpbmUsIHJh
bmdlcykKICAgICB7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAgICAgICAgIHZh
ciBkZWNvcmF0aW9uc0VsZW1lbnQgPSBsaW5lUm93LmRlY29yYXRpb25zRWxlbWVudDsKIAogICAg
ICAgICBpZiAoIWRlY29yYXRpb25zRWxlbWVudCkKQEAgLTIwMjcsMTIgKzIwNjAsMTQgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAg
dGhpcy5faW5zZXJ0VGV4dE5vZGVCZWZvcmUobGluZVJvdywgZGVjb3JhdGlvbnNFbGVtZW50LCBs
aW5lLnN1YnN0cmluZyhwbGFpblRleHRTdGFydCwgbGluZS5sZW5ndGgpKTsKICAgICAgICAgICAg
IC0tdGhpcy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQ7CiAgICAgICAgIH0KKyAgICAgICAg
dGhpcy5lbmREb21VcGRhdGVzKCk7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7
RWxlbWVudH0gbGluZVJvdworICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLlJlZ2V4T3ZlcmxheUhpZ2hsaWdodD59IG92ZXJsYXlIaWdobGlnaHQK
ICAgICAgKi8KLSAgICBfcGFpbnRMaW5lOiBmdW5jdGlvbihsaW5lUm93KQorICAgIF9wYWludExp
bmU6IGZ1bmN0aW9uKGxpbmVSb3csIG92ZXJsYXlIaWdobGlnaHQpCiAgICAgewogICAgICAgICB2
YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGluZU51bWJlcjsKIApAQCAtMjA0MywyNSArMjA3OCwy
MSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgaGln
aGxpZ2h0ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxp
Z2h0Iik7Ci0gICAgICAgICAgICBpZiAoIWhpZ2hsaWdodCkKKyAgICAgICAgICAgIHZhciB0b2tl
bkhpZ2hsaWdodCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImhp
Z2hsaWdodCIpOworICAgICAgICAgICAgaWYgKCF0b2tlbkhpZ2hsaWdodCkKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxp
bmUobGluZU51bWJlcik7Ci0KLSAgICAgICAgICAgIHZhciBtZXRyaWNzID0gW107Ci0gICAgICAg
ICAgICB2YXIgY3NzQ2xhc3NlcyA9IFtdOwotICAgICAgICAgICAgZm9yKHZhciBrZXkgaW4gdGhp
cy5faGlnaGxpZ2h0UmVnZXhzKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5f
aGlnaGxpZ2h0UmVnZXhzW2tleV07Ci0gICAgICAgICAgICAgICAgbWV0cmljcy5wdXNoKHRoaXMu
X21lYXN1cmVSZWdleChsaW5lUm93LCBsaW5lLCB2YWx1ZS5yZWdleCkpOwotICAgICAgICAgICAg
ICAgIGNzc0NsYXNzZXMucHVzaCh2YWx1ZS5jc3NDbGFzcyk7Ci0gICAgICAgICAgICB9Ci0KICAg
ICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLl9oaWdobGlnaHRlci5vcmRlcmVkUmFuZ2VzUGVy
TGluZShsaW5lTnVtYmVyKTsKICAgICAgICAgICAgIHRoaXMuX3JlbmRlclJhbmdlcyhsaW5lUm93
LCBsaW5lLCByYW5nZXMpOwogCi0gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbWV0cmlj
cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRPdmVybGF5SGlnaGxp
Z2h0KGxpbmVSb3csIG1ldHJpY3NbaV0sIGNzc0NsYXNzZXNbaV0pOworICAgICAgICAgICAgZm9y
KHZhciBpID0gMDsgaSA8IG92ZXJsYXlIaWdobGlnaHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcmFuZ2VzRm9yUmVnZXggPSBvdmVybGF5SGlnaGxpZ2h0W2ldLmxpbmVDaHVu
a3NNZXRyaWNzOworICAgICAgICAgICAgICAgIGlmIChyYW5nZXNGb3JSZWdleFtsaW5lTnVtYmVy
XSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSBvdmVybGF5SGlnaGxpZ2h0
W2ldLmNzc0NsYXNzOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRPdmVybGF5SGln
aGxpZ2h0KGxpbmVSb3csIHJhbmdlc0ZvclJlZ2V4W2xpbmVOdW1iZXJdLCBjc3NDbGFzcyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAg
ICAgICAgICAgaWYgKHRoaXMuX3JhbmdlVG9NYXJrICYmIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0
TGluZSA9PT0gbGluZU51bWJlcikKICAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZWRSYW5nZUVs
ZW1lbnQgPSBXZWJJbnNwZWN0b3IuaGlnaGxpZ2h0U2VhcmNoUmVzdWx0KGxpbmVSb3csIHRoaXMu
X3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uLCB0aGlzLl9yYW5nZVRvTWFyay5lbmRDb2x1bW4gLSB0
aGlzLl9yYW5nZVRvTWFyay5zdGFydENvbHVtbik7CkBAIC0yODc4LDcgKzI5MDksNyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMu
X2V4cGFuZGVkID0gdHJ1ZTsKIAogICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7
Ci0gICAgICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuX3BhaW50TGluZSh0aGlzLmVsZW1lbnQp
OworICAgICAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLl9wYWludExpbmVzKHRoaXMuc3RhcnRM
aW5lLCB0aGlzLnN0YXJ0TGluZSArIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTMwMTcsNCArMzA0OCwyOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVu
ay5wcm90b3R5cGUgPSB7CiAgICAgfQogfQogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBh
cmFtIHtFbGVtZW50fSBlbGVtZW50CisgKi8KK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLkVsZW1lbnRNZXRyaWNzID0gZnVuY3Rpb24oZWxlbWVudCkKK3sKKyAgICB0aGlzLmxlZnQg
PSBlbGVtZW50Lm9mZnNldExlZnQ7CisgICAgdGhpcy53aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lk
dGg7Cit9CisKKy8qKiBAdHlwZWRlZiB7QXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFp
blBhbmVsLkVsZW1lbnRNZXRyaWNzPn0gKi8KK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0TWV0cmljczsKKworLyoqCisgKiBAY29uc3RydWN0b3IK
KyAqIEBwYXJhbSB7T2JqZWN0LjxXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5MaW5l
T3ZlcmxheUhpZ2hsaWdodE1ldHJpY3M+fSBsaW5lQ2h1bmtzTWV0cmljcworICogQHBhcmFtIHtz
dHJpbmd9IGNzc0NsYXNzCisgKi8KK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLlJl
Z2V4T3ZlcmxheUhpZ2hsaWdodCA9IGZ1bmN0aW9uKGxpbmVDaHVua3NNZXRyaWNzLCBjc3NDbGFz
cykKK3sKKyAgICB0aGlzLmxpbmVDaHVua3NNZXRyaWNzID0gbGluZUNodW5rc01ldHJpY3M7Cisg
ICAgdGhpcy5jc3NDbGFzcyA9IGNzc0NsYXNzOworfQorCiBXZWJJbnNwZWN0b3IuZGVidWdEZWZh
dWx0VGV4dEVkaXRvciA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg0OGE0OWVkM2Y0MjA0M2VmNzg3N2U1YTNm
Y2NhMDgwZTNkYzRmYTMuLjhlODE3NTU4MWJlZGIwMjgzMDg2MTMzNGZmNWM1MGRhZGExOWQyNWIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMS0xOCAgQW5kcmV5IEx1c2huaWtvdiAgPGx1
c2huaWtvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogc3BlZWR1cCBo
aWdobGlnaHQgcmVnZXggQVBJIGluIERlZmF1bHRUZXh0RWRpdG9yCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDcyMzgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3JyZWN0IGxheW91dCB0ZXN0IHRvIGNv
cnJlc3BvbmQgdG8gY2hhbmdlcy4KKworICAgICAgICAqIGluc3BlY3Rvci9lZGl0b3IvdGV4dC1l
ZGl0b3ItaGlnaGxpZ2h0LXJlZ2V4cC1leHBlY3RlZC50eHQ6CisKIDIwMTMtMDEtMTggIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
Zml4IG1hYyBhbmQgbWFjLXdrMiBUZXN0RXhwZWN0YXRpb25zIGxpbnQgd2FybmluZ3MuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWRpdG9yL3RleHQtZWRpdG9yLWhpZ2hsaWdo
dC1yZWdleHAtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VkaXRvci90ZXh0
LWVkaXRvci1oaWdobGlnaHQtcmVnZXhwLWV4cGVjdGVkLnR4dAppbmRleCA0NjkwMzE5MTY4Yzk4
ZjM2MjliYmI2ZGUxNDA0MWU3MjMwZDkxNGIwLi5mOGJhNWZkNzBjY2U0N2VmZmYzZTA4OTg5ODYw
MjMxOTViMTc3OTI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWRpdG9yL3Rl
eHQtZWRpdG9yLWhpZ2hsaWdodC1yZWdleHAtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0b3ItaGlnaGxpZ2h0LXJlZ2V4cC1leHBlY3RlZC50
eHQKQEAgLTE3LDExICsxNywxMSBAQCBBZGQgaGlnaGxpZ2h0IGZvciByZWdleHAgL2Zvb18uLwog
CiA8ZGl2IGNsYXNzPSJpbm5lci1jb250YWluZXIiIHRhYmluZGV4PSIwIj4KIDxkaXYgY2xhc3M9
IndlYmtpdC1saW5lLWNvbnRlbnQiPmZvbygpOzwvZGl2PgotPGRpdiBjbGFzcz0id2Via2l0LWxp
bmUtY29udGVudCI+Zm9vXzE7IGZvb3I7IGZvb187PHNwYW4gY2xhc3M9InNvbWUtY3NzLWNsYXNz
IHRleHQtZWRpdG9yLW92ZXJsYXktaGlnaGxpZ2h0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IC0xMjdw
eDsgd2lkdGg6IDM3cHg7Ij4mbmJzcDs8L3NwYW4+PHNwYW4gY2xhc3M9InNvbWUtY3NzLWNsYXNz
IHRleHQtZWRpdG9yLW92ZXJsYXktaGlnaGxpZ2h0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IC0zNnB4
OyB3aWR0aDogMzdweDsiPiZuYnNwOzwvc3Bhbj48L2Rpdj4KKzxkaXYgY2xhc3M9IndlYmtpdC1s
aW5lLWNvbnRlbnQiPmZvb18xOyBmb29yOyBmb29fOzxzcGFuIGNsYXNzPSJzb21lLWNzcy1jbGFz
cyB0ZXh0LWVkaXRvci1vdmVybGF5LWhpZ2hsaWdodCIgc3R5bGU9ImxlZnQ6IC0xcHg7IHdpZHRo
OiAzN3B4OyI+IDwvc3Bhbj48c3BhbiBjbGFzcz0ic29tZS1jc3MtY2xhc3MgdGV4dC1lZGl0b3It
b3ZlcmxheS1oaWdobGlnaHQiIHN0eWxlPSJsZWZ0OiA5MHB4OyB3aWR0aDogMzdweDsiPiA8L3Nw
YW4+PC9kaXY+CiA8ZGl2IGNsYXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5mb29fPC9kaXY+CiA8
ZGl2IGNsYXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5nbG9iYWxfZm9vPC9kaXY+CiA8ZGl2IGNs
YXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5nbG9iYWxfZm9vMjwvZGl2PgotPGRpdiBjbGFzcz0i
d2Via2l0LWxpbmUtY29udGVudCI+c29tZV9vdGhlcl9mb29fWDxzcGFuIGNsYXNzPSJzb21lLWNz
cy1jbGFzcyB0ZXh0LWVkaXRvci1vdmVybGF5LWhpZ2hsaWdodCIgc3R5bGU9Im1hcmdpbi1sZWZ0
OiAtMzZweDsgd2lkdGg6IDM3cHg7Ij4mbmJzcDs8L3NwYW4+PC9kaXY+PC9kaXY+Cis8ZGl2IGNs
YXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5zb21lX290aGVyX2Zvb19YPHNwYW4gY2xhc3M9InNv
bWUtY3NzLWNsYXNzIHRleHQtZWRpdG9yLW92ZXJsYXktaGlnaGxpZ2h0IiBzdHlsZT0ibGVmdDog
NzZweDsgd2lkdGg6IDM3cHg7Ij4gPC9zcGFuPjwvZGl2PjwvZGl2PgogCiBSZW1vdmUgaGlnaGxp
Z2h0IGZvciByZWdleHAgL2Zvb18uLwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184211</attachid>
            <date>2013-01-23 05:58:53 -0800</date>
            <delta_ts>2013-01-23 11:11:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107238-20130123175546.patch</filename>
            <type>text/plain</type>
            <size>13169</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTMyMWUzYmRkZGNhNTZm
MmM1MjUxNTdmMmZlNTUzZjFiOGUxMzE0OC4uZGY3ZThkYjZjZTE2NmM0MjE5ZjJhNDA4ZmZmMmEy
N2ZmMjIwYmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMzIEBACiAyMDEzLTAxLTIzICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAorICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzcGVlZHVwIGhpZ2hsaWdodCByZWdleCBBUEkgaW4gRGVmYXVsdFRleHRFZGl0b3IK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzIzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgb3Zl
cmxheSBoaWdobGlnaHQgbWVhc3VyZW1lbnQgKGhpZ2hsaWdodCByZWdleCBBUEkpIGZyb20gRGVm
YXVsdFRleHRFZGl0b3IuX3BhaW50TGluZQorICAgICAgICBtZXRob2QgdG8gdGhlIERlZmF1bHRU
ZXh0RWRpdG9yLl9wYWludExpbmVzIG1ldGhvZCB3aGljaCBhbGxvd3MgdG8gcmVsYXlvdXQgZG9t
IG9ubHkKKyAgICAgICAgb25jZS4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRv
IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQorICAgICAgICBhcnQgd2hpY2ggZG9lcyByZWxheW91
dCBvbiBlYWNoIHJlZ2V4IG9jY3VyZW5jZS4KKyAgICAgICAgSW4gYWRkaXRpb24sIHVzZSAibGVm
dCIgY3NzIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mICJtYXJnaW4tbGVmdCI6IHRoaXMKKyAgICAgICAg
d2F5IGl0IHdpbGwgYmUgcG9zc2libGUgdG8gYXZvaWQgYW4gdW5uZWNlc3NhcnkgcmVsYXlvdXRp
bmcgZHVyaW5nCisgICAgICAgIGFwcGVuZGluZyBvdmVybGF5IGhpZ2hsaWdodC4KKworICAgICAg
ICBObyBuZXcgdGVzdHM6IG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLm1hcmtBbmRSZXZlYWxSYW5nZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50
TGluZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLl9tZWFzdXJlUmVnZXhIaWdobGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9tZWFzdXJlU3BhbnMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9hcHBlbmRPdmVybGF5SGlnaGxp
Z2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5fcGFpbnRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LkVsZW1lbnRNZXRyaWNzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpbkNodW5rLnByb3RvdHlwZS5leHBhbmQpOgorCisyMDEzLTAxLTIzICBBbmRyZXkgTHVz
aG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKwogICAgICAgICBXZWIgSW5zcGVjdG9y
OiByZW1vdmUgaW52aXNpYmxlTGluZVJvdyBjb2RlIGZyb20gcGFpbnRMaW5lcyBEVEUgbWV0aG9k
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2NDkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0
VGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVs
dFRleHRFZGl0b3IuanMKaW5kZXggNjZjMTY4M2NkNjNjY2YxMTg3ZTU4MGE3NzlmZWFiMTkxODE4
OThhMy4uNmJhY2E4ZDU0ZTEwYWFkMzE3MWMyODE5ZDExYjg3YzY2NmU3NDA5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRp
dG9yLmpzCkBAIC0xNTY2LDcgKzE1NjYsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5Q
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9yYW5nZVRvTWFyayA9IHJhbmdl
OwogICAgICAgICAgICAgdGhpcy5yZXZlYWxMaW5lKHJhbmdlLnN0YXJ0TGluZSk7CiAgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLm1ha2VMaW5lQUNodW5rKHJhbmdlLnN0YXJ0TGluZSk7Ci0g
ICAgICAgICAgICB0aGlzLl9wYWludExpbmUoY2h1bmsuZWxlbWVudCk7CisgICAgICAgICAgICB0
aGlzLl9wYWludExpbmVzKGNodW5rLnN0YXJ0TGluZSwgY2h1bmsuc3RhcnRMaW5lICsgMSk7CiAg
ICAgICAgICAgICBpZiAodGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50KQogICAgICAgICAgICAgICAg
IHRoaXMuX21hcmtlZFJhbmdlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CiAgICAg
ICAgIH0KQEAgLTE3OTMsNiArMTc5Myw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBh
bmVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBjaHVuazsKICAgICAgICAgdmFy
IHNlbGVjdGlvbjsKKyAgICAgICAgdmFyIGxpbmVSb3dzID0gW107CiAgICAgICAgIGZvciAodmFy
IGxpbmVOdW1iZXIgPSBmcm9tTGluZTsgbGluZU51bWJlciA8IHRvTGluZTsgKytsaW5lTnVtYmVy
KSB7CiAgICAgICAgICAgICBpZiAoIWNodW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExp
bmUgfHwgbGluZU51bWJlciA+PSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQog
ICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUobGluZU51bWJlcik7CkBA
IC0xODAxLDkgKzE4MDIsMjEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHJl
c3RvcmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24g
PSB0aGlzLnNlbGVjdGlvbigpOwotICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGxpbmVSb3cp
OworICAgICAgICAgICAgbGluZVJvd3MucHVzaChsaW5lUm93KTsKICAgICAgICAgfQogCisgICAg
ICAgIHZhciBoaWdobGlnaHQgPSB7fTsKKyAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsK
KyAgICAgICAgZm9yKHZhciByZWdleFN0cmluZyBpbiB0aGlzLl9oaWdobGlnaHRSZWdleHMpIHsK
KyAgICAgICAgICAgIHZhciByZWdleEhpZ2hsaWdodERlc2NyaXB0b3IgPSB0aGlzLl9oaWdobGln
aHRSZWdleHNbcmVnZXhTdHJpbmddOworICAgICAgICAgICAgdGhpcy5fbWVhc3VyZVJlZ2V4SGln
aGxpZ2h0KGhpZ2hsaWdodCwgbGluZVJvd3MsIHJlZ2V4SGlnaGxpZ2h0RGVzY3JpcHRvci5yZWdl
eCwgcmVnZXhIaWdobGlnaHREZXNjcmlwdG9yLmNzc0NsYXNzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsaW5lUm93cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IHRoaXMuX3BhaW50TGluZShsaW5lUm93c1tpXSwgaGlnaGxpZ2h0W2xpbmVSb3dzW2ldLmxpbmVO
dW1iZXJdKTsKKworICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKwogICAgICAgICBpZiAo
cmVzdG9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2Vs
ZWN0aW9uKTsKICAgICB9LApAQCAtMTgyNyw0OCArMTg0MCw2NyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAq
IEBwYXJhbSB7RWxlbWVudH0gbGluZVJvdwotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lCisg
ICAgICogQHBhcmFtIHtPYmplY3QuPG51bWJlciwgQXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0Pj59IGhpZ2hsaWdodAorICAgICAqIEBw
YXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBsaW5lUm93cwogICAgICAqIEBwYXJhbSB7UmVnRXhwfSBy
ZWdleAotICAgICAqIEByZXR1cm4ge0FycmF5Ljx7bGVmdDogbnVtYmVyLCB3aWR0aDogbnVtYmVy
fT59CisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCiAgICAgICovCi0gICAgX21lYXN1
cmVSZWdleDogZnVuY3Rpb24obGluZVJvdywgbGluZSwgcmVnZXgpCisgICAgX21lYXN1cmVSZWdl
eEhpZ2hsaWdodDogZnVuY3Rpb24oaGlnaGxpZ2h0LCBsaW5lUm93cywgcmVnZXgsIGNzc0NsYXNz
KQogICAgIHsKLSAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuX2ZpbmRSZWdleE9jY3VycmVuY2Vz
KGxpbmUsIHJlZ2V4KTsKLSAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPT09IDApCi0gICAgICAg
ICAgICByZXR1cm4gW107CisgICAgICAgIHZhciByb3dzVG9NZWFzdXJlID0gW107CisgICAgICAg
IGZvcih2YXIgaSA9IDA7IGkgPCBsaW5lUm93cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
dmFyIGxpbmVSb3cgPSBsaW5lUm93c1tpXTsKKyAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5f
dGV4dE1vZGVsLmxpbmUobGluZVJvdy5saW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHZhciByYW5n
ZXMgPSB0aGlzLl9maW5kUmVnZXhPY2N1cnJlbmNlcyhsaW5lLCByZWdleCk7CisgICAgICAgICAg
ICBpZiAocmFuZ2VzLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICB0aGlzLl9yZW5kZXJSYW5nZXMobGluZVJvdywgbGluZSwgcmFuZ2VzKTsKLSAgICAg
ICAgdmFyIHNwYW5zID0gbGluZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpOwotICAg
ICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0b3IpCi0gICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChzcGFucy5sZW5ndGggPT09IHJhbmdlcy5sZW5ndGgsICJSYW5nZXMg
bnVtYmVyOiAiICsgcmFuZ2VzLmxlbmd0aCArICIgIT09IHNwYW5zIG51bWJlcjogIiArIHNwYW5z
Lmxlbmd0aCk7CisgICAgICAgICAgICB0aGlzLl9yZW5kZXJSYW5nZXMobGluZVJvdywgbGluZSwg
cmFuZ2VzKTsKKyAgICAgICAgICAgIHJvd3NUb01lYXN1cmUucHVzaChsaW5lUm93KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCByb3dzVG9NZWFzdXJlLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IHJvd3NUb01lYXN1cmVbaV07CisgICAg
ICAgICAgICB2YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGluZU51bWJlcjsKKyAgICAgICAgICAg
IHZhciBtZXRyaWNzID0gdGhpcy5fbWVhc3VyZVNwYW5zKGxpbmVSb3cpOworCisgICAgICAgICAg
ICBpZiAoIWhpZ2hsaWdodFtsaW5lTnVtYmVyXSkKKyAgICAgICAgICAgICAgICBoaWdobGlnaHRb
bGluZU51bWJlcl0gPSBbXTsKIAorICAgICAgICAgICAgaGlnaGxpZ2h0W2xpbmVOdW1iZXJdLnB1
c2gobmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxp
Z2h0KG1ldHJpY3MsIGNzc0NsYXNzKSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtFbGVtZW50fSBsaW5lUm93CisgICAgICogQHJldHVybiB7QXJyYXkuPFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkVsZW1lbnRNZXRyaWNzPn0KKyAgICAgKi8K
KyAgICBfbWVhc3VyZVNwYW5zOiBmdW5jdGlvbihsaW5lUm93KQorICAgIHsKKyAgICAgICAgdmFy
IHNwYW5zID0gbGluZVJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpOwogICAgICAgICB2
YXIgbWV0cmljcyA9IFtdOwotICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0
aDsgKytpKQotICAgICAgICAgICAgbWV0cmljcy5wdXNoKHsKLSAgICAgICAgICAgICAgICBsZWZ0
OiBzcGFuc1tpXS5vZmZzZXRMZWZ0LAotICAgICAgICAgICAgICAgIHdpZHRoOiBzcGFuc1tpXS5v
ZmZzZXRXaWR0aAotICAgICAgICAgICAgfSk7CisgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBz
cGFucy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIG1ldHJpY3MucHVzaChuZXcgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwuRWxlbWVudE1ldHJpY3Moc3BhbnNbaV0pKTsKICAgICAg
ICAgcmV0dXJuIG1ldHJpY3M7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7RWxl
bWVudH0gbGluZVJvdwotICAgICAqIEBwYXJhbSB7QXJyYXkuPHtvZmZzZXRMZWZ0OiBudW1iZXIs
IG9mZnNldFRvcDogbnVtYmVyLCBvZmZzZXRXaWR0aDogbnVtYmVyLCBvZmZzZXRIZWlnaHQ6IG51
bWJlcn0+fSBtZXRyaWNzCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCisgICAgICog
QHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5MaW5lT3ZlcmxheUhpZ2hs
aWdodH0gaGlnaGxpZ2h0CiAgICAgICovCi0gICAgX2FwcGVuZE92ZXJsYXlIaWdobGlnaHQ6IGZ1
bmN0aW9uKGxpbmVSb3csIG1ldHJpY3MsIGNzc0NsYXNzKQorICAgIF9hcHBlbmRPdmVybGF5SGln
aGxpZ2h0OiBmdW5jdGlvbihsaW5lUm93LCBoaWdobGlnaHQpCiAgICAgewogICAgICAgICBjb25z
dCBleHRyYVdpZHRoID0gMTsKKyAgICAgICAgdmFyIG1ldHJpY3MgPSBoaWdobGlnaHQubWV0cmlj
czsKKyAgICAgICAgdmFyIGNzc0NsYXNzID0gaGlnaGxpZ2h0LmNzc0NsYXNzOwogICAgICAgICBm
b3IodmFyIGkgPSAwOyBpIDwgbWV0cmljcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFy
IGhpZ2hsaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAg
IGhpZ2hsaWdodC5hZGRTdHlsZUNsYXNzKGNzc0NsYXNzKTsKLSAgICAgICAgICAgIGxpbmVSb3cu
YXBwZW5kQ2hpbGQoaGlnaGxpZ2h0KTsKLQotICAgICAgICAgICAgaGlnaGxpZ2h0LnN0eWxlLm1h
cmdpbkxlZnQgPSAobWV0cmljc1tpXS5sZWZ0IC0gaGlnaGxpZ2h0Lm9mZnNldExlZnQgLSBleHRy
YVdpZHRoKSArICJweCI7Ci0gICAgICAgICAgICBoaWdobGlnaHQuc3R5bGUud2lkdGggPSAobWV0
cmljc1tpXS53aWR0aCArIGV4dHJhV2lkdGggKiAyKSArICJweCI7Ci0gICAgICAgICAgICBoaWdo
bGlnaHQuaW5uZXJIVE1MID0gIiZuYnNwOyI7Ci0gICAgICAgICAgICBoaWdobGlnaHQuYWRkU3R5
bGVDbGFzcygidGV4dC1lZGl0b3Itb3ZlcmxheS1oaWdobGlnaHQiKTsKKyAgICAgICAgICAgIHZh
ciBoaWdobGlnaHRTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAg
ICAgICAgaGlnaGxpZ2h0U3Bhbi5hZGRTdHlsZUNsYXNzKGNzc0NsYXNzKTsKKyAgICAgICAgICAg
IGhpZ2hsaWdodFNwYW4uc3R5bGUubGVmdCA9IChtZXRyaWNzW2ldLmxlZnQgLSBleHRyYVdpZHRo
KSArICJweCI7CisgICAgICAgICAgICBoaWdobGlnaHRTcGFuLnN0eWxlLndpZHRoID0gKG1ldHJp
Y3NbaV0ud2lkdGggKyBleHRyYVdpZHRoICogMikgKyAicHgiOworICAgICAgICAgICAgaGlnaGxp
Z2h0U3Bhbi50ZXh0Q29udGVudCA9ICIgIjsKKyAgICAgICAgICAgIGhpZ2hsaWdodFNwYW4uYWRk
U3R5bGVDbGFzcygidGV4dC1lZGl0b3Itb3ZlcmxheS1oaWdobGlnaHQiKTsKKyAgICAgICAgICAg
IGxpbmVSb3cuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0U3Bhbik7CiAgICAgICAgIH0KICAgICB9LAog
CkBAIC0xOTE0LDMyICsxOTQ2LDI1IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbGluZVJv
dworICAgICAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LkxpbmVPdmVybGF5SGlnaGxpZ2h0Pn0gb3ZlcmxheUhpZ2hsaWdodAogICAgICAqLwotICAgIF9w
YWludExpbmU6IGZ1bmN0aW9uKGxpbmVSb3cpCisgICAgX3BhaW50TGluZTogZnVuY3Rpb24obGlu
ZVJvdywgb3ZlcmxheUhpZ2hsaWdodCkKICAgICB7CiAgICAgICAgIHZhciBsaW5lTnVtYmVyID0g
bGluZVJvdy5saW5lTnVtYmVyOwogCiAgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4dE1vZGVs
LmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiaGlnaGxpZ2h0Iik7Ci0gICAgICAgICAgICBpZiAo
IWhpZ2hsaWdodCkKKyAgICAgICAgICAgIHZhciBzeW50YXhIaWdobGlnaHQgPSB0aGlzLl90ZXh0
TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJoaWdobGlnaHQiKTsKKyAgICAgICAgICAg
IGlmICghc3ludGF4SGlnaGxpZ2h0KQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKLQotICAg
ICAgICAgICAgdmFyIG1ldHJpY3MgPSBbXTsKLSAgICAgICAgICAgIHZhciBjc3NDbGFzc2VzID0g
W107Ci0gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzLl9oaWdobGlnaHRSZWdleHMpIHsK
LSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9oaWdobGlnaHRSZWdleHNba2V5XTsK
LSAgICAgICAgICAgICAgICBtZXRyaWNzLnB1c2godGhpcy5fbWVhc3VyZVJlZ2V4KGxpbmVSb3cs
IGxpbmUsIHZhbHVlLnJlZ2V4KSk7Ci0gICAgICAgICAgICAgICAgY3NzQ2xhc3Nlcy5wdXNoKHZh
bHVlLmNzc0NsYXNzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHJhbmdlcyA9
IGhpZ2hsaWdodC5yYW5nZXM7CisgICAgICAgICAgICB2YXIgcmFuZ2VzID0gc3ludGF4SGlnaGxp
Z2h0LnJhbmdlczsKICAgICAgICAgICAgIHRoaXMuX3JlbmRlclJhbmdlcyhsaW5lUm93LCBsaW5l
LCByYW5nZXMpOwogCi0gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbWV0cmljcy5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRPdmVybGF5SGlnaGxpZ2h0KGxp
bmVSb3csIG1ldHJpY3NbaV0sIGNzc0NsYXNzZXNbaV0pOworICAgICAgICAgICAgaWYgKG92ZXJs
YXlIaWdobGlnaHQpCisgICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG92ZXJsYXlI
aWdobGlnaHQubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZE92
ZXJsYXlIaWdobGlnaHQobGluZVJvdywgb3ZlcmxheUhpZ2hsaWdodFtpXSk7CiAgICAgICAgIH0g
ZmluYWxseSB7CiAgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VUb01hcmsgJiYgdGhpcy5fcmFu
Z2VUb01hcmsuc3RhcnRMaW5lID09PSBsaW5lTnVtYmVyKQogICAgICAgICAgICAgICAgIHRoaXMu
X21hcmtlZFJhbmdlRWxlbWVudCA9IFdlYkluc3BlY3Rvci5oaWdobGlnaHRTZWFyY2hSZXN1bHQo
bGluZVJvdywgdGhpcy5fcmFuZ2VUb01hcmsuc3RhcnRDb2x1bW4sIHRoaXMuX3JhbmdlVG9NYXJr
LmVuZENvbHVtbiAtIHRoaXMuX3JhbmdlVG9NYXJrLnN0YXJ0Q29sdW1uKTsKQEAgLTI2MzcsNiAr
MjY2MiwyNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAKIC8qKgogICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQKKyAq
LworV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwuRWxlbWVudE1ldHJpY3MgPSBmdW5j
dGlvbihlbGVtZW50KQoreworICAgIHRoaXMud2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoOwor
ICAgIHRoaXMubGVmdCA9IGVsZW1lbnQub2Zmc2V0TGVmdDsKK30KKworLyoqCisgKiBAY29uc3Ry
dWN0b3IKKyAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LkVsZW1lbnRNZXRyaWNzPn0gbWV0cmljcworICogQHBhcmFtIHtzdHJpbmd9IGNzc0NsYXNzCisg
Ki8KK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLkxpbmVPdmVybGF5SGlnaGxpZ2h0
ID0gZnVuY3Rpb24obWV0cmljcywgY3NzQ2xhc3MpCit7CisgICAgdGhpcy5tZXRyaWNzID0gbWV0
cmljczsKKyAgICB0aGlzLmNzc0NsYXNzID0gY3NzQ2xhc3M7Cit9CisKKy8qKgorICogQGNvbnN0
cnVjdG9yCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsfSBj
aHVua2VkUGFuZWwKICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKICAqIEBwYXJhbSB7bnVt
YmVyfSBlbmRMaW5lCkBAIC0yNzU1LDcgKzI4MDEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2V4cGFuZGVkID0gdHJ1ZTsK
IAogICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKSB7Ci0gICAgICAgICAgICB0aGlz
Ll9jaHVua2VkUGFuZWwuX3BhaW50TGluZSh0aGlzLmVsZW1lbnQpOworICAgICAgICAgICAgdGhp
cy5fY2h1bmtlZFBhbmVsLl9wYWludExpbmVzKHRoaXMuc3RhcnRMaW5lLCB0aGlzLnN0YXJ0TGlu
ZSArIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzZTQ4YzY3
YzQ1OGEzNjRiOTgzNjljODk1MjBjYjU4ZjEyYjQ4YWQ3Li40YTAzZThkMzJmNmUwNzZmNzg3NWVm
ODg4Y2ViMjExZjFmMzgxOGJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDEtMjMgIEFu
ZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IHNwZWVkdXAgaGlnaGxpZ2h0IHJlZ2V4IEFQSSBpbiBEZWZhdWx0VGV4dEVkaXRv
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MjM4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29ycmVj
dGVkIGxheW91dCB0ZXN0IGV4cGVjdGF0aW9ucyB0byBjb3JyZXNwb25kIHRvIHJlZmFjdG9yaW5n
LgorCisgICAgICAgICogaW5zcGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1oaWdobGlnaHQtcmVn
ZXhwLWV4cGVjdGVkLnR4dDoKKwogMjAxMy0wMS0yMiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBGaXggc3ZuOm1pbWUtdHlwZSBvZiBQTkcg
ZmlsZXMgaW4gcGxhdGZvcm0vY2hyb21pdW0qLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1oaWdobGlnaHQtcmVnZXhwLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0b3ItaGlnaGxpZ2h0LXJlZ2V4
cC1leHBlY3RlZC50eHQKaW5kZXggNDY5MDMxOTE2OGM5OGYzNjI5YmJiNmRlMTQwNDFlNzIzMGQ5
MTRiMC4uZjhiYTVmZDcwY2NlNDdlZmZmM2UwODk4OTg2MDIzMTk1YjE3NzkyOCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1oaWdobGlnaHQtcmVn
ZXhwLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWRpdG9yL3RleHQt
ZWRpdG9yLWhpZ2hsaWdodC1yZWdleHAtZXhwZWN0ZWQudHh0CkBAIC0xNywxMSArMTcsMTEgQEAg
QWRkIGhpZ2hsaWdodCBmb3IgcmVnZXhwIC9mb29fLi8KIAogPGRpdiBjbGFzcz0iaW5uZXItY29u
dGFpbmVyIiB0YWJpbmRleD0iMCI+CiA8ZGl2IGNsYXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5m
b28oKTs8L2Rpdj4KLTxkaXYgY2xhc3M9IndlYmtpdC1saW5lLWNvbnRlbnQiPmZvb18xOyBmb29y
OyBmb29fOzxzcGFuIGNsYXNzPSJzb21lLWNzcy1jbGFzcyB0ZXh0LWVkaXRvci1vdmVybGF5LWhp
Z2hsaWdodCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAtMTI3cHg7IHdpZHRoOiAzN3B4OyI+Jm5ic3A7
PC9zcGFuPjxzcGFuIGNsYXNzPSJzb21lLWNzcy1jbGFzcyB0ZXh0LWVkaXRvci1vdmVybGF5LWhp
Z2hsaWdodCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAtMzZweDsgd2lkdGg6IDM3cHg7Ij4mbmJzcDs8
L3NwYW4+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ3ZWJraXQtbGluZS1jb250ZW50Ij5mb29fMTsgZm9v
cjsgZm9vXzs8c3BhbiBjbGFzcz0ic29tZS1jc3MtY2xhc3MgdGV4dC1lZGl0b3Itb3ZlcmxheS1o
aWdobGlnaHQiIHN0eWxlPSJsZWZ0OiAtMXB4OyB3aWR0aDogMzdweDsiPiA8L3NwYW4+PHNwYW4g
Y2xhc3M9InNvbWUtY3NzLWNsYXNzIHRleHQtZWRpdG9yLW92ZXJsYXktaGlnaGxpZ2h0IiBzdHls
ZT0ibGVmdDogOTBweDsgd2lkdGg6IDM3cHg7Ij4gPC9zcGFuPjwvZGl2PgogPGRpdiBjbGFzcz0i
d2Via2l0LWxpbmUtY29udGVudCI+Zm9vXzwvZGl2PgogPGRpdiBjbGFzcz0id2Via2l0LWxpbmUt
Y29udGVudCI+Z2xvYmFsX2ZvbzwvZGl2PgogPGRpdiBjbGFzcz0id2Via2l0LWxpbmUtY29udGVu
dCI+Z2xvYmFsX2ZvbzI8L2Rpdj4KLTxkaXYgY2xhc3M9IndlYmtpdC1saW5lLWNvbnRlbnQiPnNv
bWVfb3RoZXJfZm9vX1g8c3BhbiBjbGFzcz0ic29tZS1jc3MtY2xhc3MgdGV4dC1lZGl0b3Itb3Zl
cmxheS1oaWdobGlnaHQiIHN0eWxlPSJtYXJnaW4tbGVmdDogLTM2cHg7IHdpZHRoOiAzN3B4OyI+
Jm5ic3A7PC9zcGFuPjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0id2Via2l0LWxpbmUtY29udGVu
dCI+c29tZV9vdGhlcl9mb29fWDxzcGFuIGNsYXNzPSJzb21lLWNzcy1jbGFzcyB0ZXh0LWVkaXRv
ci1vdmVybGF5LWhpZ2hsaWdodCIgc3R5bGU9ImxlZnQ6IDc2cHg7IHdpZHRoOiAzN3B4OyI+IDwv
c3Bhbj48L2Rpdj48L2Rpdj4KIAogUmVtb3ZlIGhpZ2hsaWdodCBmb3IgcmVnZXhwIC9mb29fLi8K
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>