<?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>105285</bug_id>
          
          <creation_ts>2012-12-18 06:47:07 -0800</creation_ts>
          <short_desc>Web Inspector: [Styles] Implement navigation to UI locations of property names/values in the source code</short_desc>
          <delta_ts>2013-03-01 06:49:01 -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>
          <dependson>105764</dependson>
    
    <dependson>109168</dependson>
    
    <dependson>111175</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>paulirish</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>793598</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-18 06:47:07 -0800</bug_when>
    <thetext>We should be able to click-navigate to a UISourceCode location corresponding to the CSS property name and value (be it a source-mapped resource or a stylesheet proper) from the Styles sidebar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793656</commentid>
    <comment_count>1</comment_count>
      <attachid>179943</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-12-18 08:08:18 -0800</bug_when>
    <thetext>Created attachment 179943
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806119</commentid>
    <comment_count>2</comment_count>
      <attachid>182519</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-01-13 23:50:49 -0800</bug_when>
    <thetext>Created attachment 182519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807503</commentid>
    <comment_count>3</comment_count>
      <attachid>182519</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-01-15 11:31:44 -0800</bug_when>
    <thetext>Comment on attachment 182519
Patch

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

&gt; Source/WebCore/inspector/front-end/CSSStyleModel.js:525
&gt; +    createLiveLocation: function(rawLocation, updateDelegate)

Is this change necessary and related?

&gt; Source/WebCore/inspector/front-end/Linkifier.js:95
&gt; +        var liveLocation = WebInspector.cssModel.createLiveLocation(rule.rawLocation, this._updateAnchor.bind(this, anchor));

Looks  unrelated

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2059
&gt; +        var uiSourceCode = uiLocation ? uiLocation.uiSourceCode : WebInspector.workspace.uiSourceCodeForURL(rawLocation.url);

This looks like a CSSStyleModel.rawLocationToUILocation logic duplicate, you could remove it.
You should not call showUISourceCode with possibly null uiSourceCode.
Actually I would like to be sure that rawLocationToUILocation never returns null,  but I am not sure we can guarantee that right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807537</commentid>
    <comment_count>4</comment_count>
      <attachid>182519</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-01-15 11:57:45 -0800</bug_when>
    <thetext>Comment on attachment 182519
Patch

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

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:168
&gt; +        if (forceRebind || (sourceMap &amp;&amp; !this._sourceMapByStyleSheetURL[cssURL])) {

what if (forceRebind &amp;&amp; !sourceMap?)

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:261
&gt; +            return this._identityMapping(location);

We should just return null here and below, default mapping in CSSStyleModel.rawLocationToUILocation will take care then.

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2081
&gt; +        var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(this.style.parentRule.sourceURL);

These 3 lines could be moved above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807539</commentid>
    <comment_count>5</comment_count>
      <attachid>182519</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-01-15 11:58:40 -0800</bug_when>
    <thetext>Comment on attachment 182519
Patch

Please remove unrelated changes, logic duplicates and make sure showUISourceCode is never called with null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815270</commentid>
    <comment_count>6</comment_count>
      <attachid>184448</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-01-24 02:30:53 -0800</bug_when>
    <thetext>Created attachment 184448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817560</commentid>
    <comment_count>7</comment_count>
      <attachid>184448</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-01-28 00:12:16 -0800</bug_when>
    <thetext>Comment on attachment 184448
Patch

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

Looks like you didn&apos;t address some of the previous comments.

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:170
&gt; +        if (forceRebind || (sourceMap &amp;&amp; !this._sourceMapByStyleSheetURL[cssURL])) {

what if (forceRebind &amp;&amp; !sourceMap?)

I would rewrite this as:
if (sourceMap &amp;&amp; (forceRebind || !this._sourceMapByStyleSheetURL[cssURL])) {

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:258
&gt; +            return this._identityMapping(location);

We should just return null here and below, default mapping in CSSStyleModel.rawLocationToUILocation will take care then.

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2060
&gt; +        if (uiLocation) {

This looks like a CSSStyleModel.rawLocationToUILocation logic duplicate, you could remove it. You should not call showUISourceCode with possibly null uiSourceCode. Actually I would like to be sure that rawLocationToUILocation never returns null, but I am not sure we can guarantee that right now.

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2088
&gt; +        var propertyNameClicked = element === this.nameElement;

I would move this line below, to the place where propertyNameClicked is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817673</commentid>
    <comment_count>8</comment_count>
      <attachid>184966</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-01-28 03:49:12 -0800</bug_when>
    <thetext>Created attachment 184966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817687</commentid>
    <comment_count>9</comment_count>
      <attachid>184966</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-01-28 04:35:19 -0800</bug_when>
    <thetext>Comment on attachment 184966
Patch

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

I think we should split this into 2 separate changes - one for sass source maps and another one for UI feature.
It would be great to have a test for SASS source mappings also.

&gt; Source/WebCore/inspector/front-end/SASSSourceMapping.js:201
&gt; +        sourceMapURL = WebInspector.SourceMap.prototype._canonicalizeURL(sourceMapURL, styleSheetURL);

https://bugs.webkit.org/show_bug.cgi?id=107939 removes _canonicalizeURL and uses completeURL instead.
You will need to update your patch to follow this way of resolving relative URLs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829629</commentid>
    <comment_count>10</comment_count>
      <attachid>187558</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-11 06:42:40 -0800</bug_when>
    <thetext>Created attachment 187558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829633</commentid>
    <comment_count>11</comment_count>
      <attachid>187560</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-11 06:50:26 -0800</bug_when>
    <thetext>Created attachment 187560
[Image] Screenshot of a navigable rule section hovered</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829709</commentid>
    <comment_count>12</comment_count>
      <attachid>187558</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2013-02-11 08:10:12 -0800</bug_when>
    <thetext>Comment on attachment 187558
Patch

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

Also missing tests.

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2156
&gt; +            this._setLineEndingsForURL(this.style.parentRule.sourceURL, lineEndings);

I don&apos;t think this belongs to the styles sidebar pane. It should probably be a part of the model. This mapping should be properly encapsulated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830773</commentid>
    <comment_count>13</comment_count>
      <attachid>187830</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-12 04:15:40 -0800</bug_when>
    <thetext>Created attachment 187830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830804</commentid>
    <comment_count>14</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-12 05:18:36 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 187558 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187558&amp;action=review
&gt; 
&gt; Also missing tests.

The model tests were landed in r142445.

&gt; &gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2156
&gt; &gt; +            this._setLineEndingsForURL(this.style.parentRule.sourceURL, lineEndings);
&gt; 
&gt; I don&apos;t think this belongs to the styles sidebar pane. It should probably be a part of the model. This mapping should be properly encapsulated.

Moved into the model. Once bug 105828 is fixed, it will become possible to move the mappings into the CSS stylesheet descriptors stored in the frontend (akin to the Script entities that store their own source mappings).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845047</commentid>
    <comment_count>15</comment_count>
      <attachid>190930</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-03-01 04:11:15 -0800</bug_when>
    <thetext>Created attachment 190930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845080</commentid>
    <comment_count>16</comment_count>
      <attachid>190930</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-03-01 05:07:48 -0800</bug_when>
    <thetext>Comment on attachment 190930
Patch

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

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:1110
&gt; +    _isCSSNavigable: function(url)

Can we move this to WebInspector.CSSRule?

&gt; Source/WebCore/inspector/front-end/StylesSidebarPane.js:2195
&gt; +        var range = this.property.range;

Can this piece of code be a method of Property?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845122</commentid>
    <comment_count>17</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-03-01 06:14:37 -0800</bug_when>
    <thetext>Committed r144449: &lt;http://trac.webkit.org/changeset/144449&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845126</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-01 06:31:25 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 111175</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845137</commentid>
    <comment_count>19</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-03-01 06:49:01 -0800</bug_when>
    <thetext>Committed r144451: &lt;http://trac.webkit.org/changeset/144451&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179943</attachid>
            <date>2012-12-18 08:08:18 -0800</date>
            <delta_ts>2013-01-13 23:50:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20121218200534.patch</filename>
            <type>text/plain</type>
            <size>24361</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGVlMWY1NGY5NDYyNDMx
MjhiODM2NjYzOGM4ZmI1NTc5NGI3MjliNC4uNjViMGYzM2M4NmQ4M2I3OWFkMjhhYTM2MGE3MGQ3
MmFkMmUzMTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUyIEBACiAyMDEyLTEyLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHRyYWNrcyBwcm9wZXJ0
eSByYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgc291cmNlIGNvZGUgYW5kIENTUyBzb3VyY2UgbWFw
cGluZ3MKKyAgICAgICAgdG8gY29tcHV0ZSB0aGUgVUkgbG9jYXRpb24gb2YgQ1NTIHByb3BlcnR5
IG5hbWVzIGFuZCB2YWx1ZXMuIFRoZSBtYXBwaW5nIGlzIHJlbW92ZWQgdXBvbiBDU1Mgc3R5bGVz
aGVldCB1cGRhdGVzCisgICAgICAgIGFuZCB1cGRhdGVkL3Jlc3RvcmVkIHVwb24gcmVsb2FkIG9m
IENTUyBhZnRlciBhIFNBU1MgZmlsZSBoYXMgYmVlbiByZWxvYWRlZCAoZHVlIHRvIHNvdXJjZSBl
ZGl0cy4pCisgICAgICAgIFVzZXIgc2hvdWxkIEN0cmwvQ21kLWNsaWNrIHRoZSBkYXNoLXVuZGVy
bGluZWQgcHJvcGVydHkgbmFtZSBvciB2YWx1ZSBlbGVtZW50IHRvIG5hdmlnYXRlIHRvIHRoZSBy
ZXNwZWN0aXZlCisgICAgICAgIGxvY2F0aW9uIGluIGEgc291cmNlIGZpbGUuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9u
LnByb3RvdHlwZS51aUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUuZ2V0IGlzUmVndWxh
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUudWlMb2NhdGlvbik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlTWFwUGFyc2VyLnByb3RvdHlwZS5tYXBwaW5ncyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9TQVNTU291cmNlTWFwcGluZy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcu
cHJvdG90eXBlLl9zdHlsZVNoZWV0Q2hhbmdlZC5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9zdHlsZVNoZWV0Q2hhbmdlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZWxvYWRD
U1MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5f
cmVzb3VyY2VBZGRlZC5kaWRSZXF1ZXN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJjZUFkZGVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX2xvYWRBbmRQcm9jZXNzU291
cmNlTWFwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5
cGUubG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNB
U1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5fYmluZFVJU291cmNlQ29kZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLnJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5
cGUuX3Jlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5SZXZl
cnNlTG9jYXRpb25NYXBwaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFw
cGluZy5SZXZlcnNlTG9jYXRpb25NYXBwaW5nLkNvbXBhcmF0b3IpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9pbm5lclJlYnVpbGRVcGRhdGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUu
ZWxlbWVudC5jb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnQucHJvdG90eXBlLmlzUmV2ZXJ0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL2VsZW1lbnRzUGFuZWwuY3NzOgorICAgICAgICAoLnN0eWxlcy1zZWN0aW9uOm5vdCgucmVh
ZC1vbmx5KTpob3ZlciAucHJvcGVydGllcyBsaSAudmFsdWUpOgorICAgICAgICAoLnN0eWxlcy1z
ZWN0aW9uIC5wcm9wZXJ0aWVzIGxpKToKKworMjAxMi0xMi0xOCAgQWxleGFuZGVyIFBhdmxvdiAg
PGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtTdHlsZXNd
IFNlbGVjdG9yIG1hdGNoZXMgYXJlIG5vdCBtYXJrZWQgYWZ0ZXIgcHJvcGVydHkgZWRpdGluZwog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1Mjg0CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVN
b2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2Rl
bC5qcwppbmRleCA4MmRmOThjNWFkMTI1NzM5MDM4YzBhYzQxYTIyMDk3OGM5OTY5MjhhLi42MmJh
YzNlNzYzZjBjYmIzMTQ2MjJkZDI0NzU3OTJiMjhlNmQ5ZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC00ODQsNyAr
NDg0LDEwIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAg
Ki8KICAgICBzZXRTb3VyY2VNYXBwaW5nOiBmdW5jdGlvbih1cmwsIHNvdXJjZU1hcHBpbmcpCiAg
ICAgewotICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsK
KyAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmcpCisgICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBw
aW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX3NvdXJjZU1hcHBpbmdzW3VybF07CiAgICAgICAgIHRoaXMuX3VwZGF0ZUxvY2F0
aW9ucygpOwogICAgIH0sCiAKQEAgLTUyNCw3ICs1MjcsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuQ1NTTG9j
YXRpb259IHJhd0xvY2F0aW9uCiAgICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5VSUxvY2F0
aW9ufQogICAgICAqLwotICAgIF9yYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3
TG9jYXRpb24pCisgICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0
aW9uKQogICAgIHsKICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmcgPSB0aGlzLl9zb3VyY2VNYXBw
aW5nc1tyYXdMb2NhdGlvbi51cmxdOwogICAgICAgICByZXR1cm4gc291cmNlTWFwcGluZyA/IHNv
dXJjZU1hcHBpbmcucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24ocmF3TG9jYXRpb24pIDogbnVsbDsK
QEAgLTU3NCw3ICs1NzcsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5MaXZlTG9jYXRp
b24ucHJvdG90eXBlID0gewogICAgIHVpTG9jYXRpb246IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIHZhciBjc3NMb2NhdGlvbiA9IC8qKiBAdHlwZSBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24g
Ki8gKHRoaXMucmF3TG9jYXRpb24oKSk7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY3Nz
TW9kZWwuX3Jhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0aW9uKTsKKyAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihjc3NMb2Nh
dGlvbik7CiAgICAgfSwKIAogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKQEAgLTU5MywxMSArNTk2
LDEzIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUg
PSB7CiAgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0aW9ufQogICogQHBhcmFt
IHtzdHJpbmd9IHVybAogICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAqIEBwYXJhbSB7
bnVtYmVyPX0gY29sdW1uTnVtYmVyCiAgKi8KLVdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1
bmN0aW9uKHVybCwgbGluZU51bWJlcikKK1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1bmN0
aW9uKHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogewogICAgIHRoaXMudXJsID0gdXJs
OwogICAgIHRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgdGhpcy5jb2x1bW5OdW1i
ZXIgPSBjb2x1bW5OdW1iZXIgfHwgMDsKIH0KIAogLyoqCkBAIC04NjYsNiArODcxLDE2IEBAIFdl
Ykluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZSA9IHsKICAgICBnZXQgaXNSZWd1bGFyKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbiA9PT0gInJlZ3VsYXIiOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259CisgICAg
ICovCisgICAgdWlMb2NhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9yYXdMb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHRoaXMuX3Jhd0xv
Y2F0aW9uKTsKICAgICB9CiB9CiAKQEAgLTg4MCw4ICs4OTUsOSBAQCBXZWJJbnNwZWN0b3IuQ1NT
UnVsZS5wcm90b3R5cGUgPSB7CiAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcnNlZE9rCiAgKiBAcGFy
YW0ge2Jvb2xlYW59IGltcGxpY2l0CiAgKiBAcGFyYW0gez9zdHJpbmc9fSB0ZXh0CisgKiBAcGFy
YW0ge0NTU0FnZW50LlNvdXJjZVJhbmdlPX0gcmFuZ2UKICAqLwotV2ViSW5zcGVjdG9yLkNTU1By
b3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0
eSwgc3RhdHVzLCBwYXJzZWRPaywgaW1wbGljaXQsIHRleHQpCitXZWJJbnNwZWN0b3IuQ1NTUHJv
cGVydHkgPSBmdW5jdGlvbihvd25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFsdWUsIHByaW9yaXR5
LCBzdGF0dXMsIHBhcnNlZE9rLCBpbXBsaWNpdCwgdGV4dCwgcmFuZ2UpCiB7CiAgICAgdGhpcy5v
d25lclN0eWxlID0gb3duZXJTdHlsZTsKICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CkBAIC04OTIs
NiArOTA4LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHls
ZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgc3QKICAgICB0aGlzLnBhcnNlZE9rID0g
cGFyc2VkT2s7CiAgICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0OwogICAgIHRoaXMudGV4dCA9
IHRleHQ7CisgICAgdGhpcy5yYW5nZSA9IHJhbmdlOwogfQogCiAvKioKQEAgLTkwOCw3ICs5MjUs
NyBAQCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ob3du
ZXJTdHlsZSwgaW5kZXgsIHBheWxvYWQpCiAgICAgLy8gaW1wbGljaXQ6IGZhbHNlCiAgICAgLy8g
c3RhdHVzOiAic3R5bGUiCiAgICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTUHJv
cGVydHkoCi0gICAgICAgIG93bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkLm5hbWUsIHBheWxvYWQu
dmFsdWUsIHBheWxvYWQucHJpb3JpdHkgfHwgIiIsIHBheWxvYWQuc3RhdHVzIHx8ICJzdHlsZSIs
ICgicGFyc2VkT2siIGluIHBheWxvYWQpID8gISFwYXlsb2FkLnBhcnNlZE9rIDogdHJ1ZSwgISFw
YXlsb2FkLmltcGxpY2l0LCBwYXlsb2FkLnRleHQpOworICAgICAgICBvd25lclN0eWxlLCBpbmRl
eCwgcGF5bG9hZC5uYW1lLCBwYXlsb2FkLnZhbHVlLCBwYXlsb2FkLnByaW9yaXR5IHx8ICIiLCBw
YXlsb2FkLnN0YXR1cyB8fCAic3R5bGUiLCAoInBhcnNlZE9rIiBpbiBwYXlsb2FkKSA/ICEhcGF5
bG9hZC5wYXJzZWRPayA6IHRydWUsICEhcGF5bG9hZC5pbXBsaWNpdCwgcGF5bG9hZC50ZXh0LCBw
YXlsb2FkLnJhbmdlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5n
LmpzCmluZGV4IGU3MDMwNjY5NTNhYTZmMjRkMzEzYWQ2NDRlODk1ZWZhNGI0NTM2OWQuLjE3MTU1
NjZiMDRmOWZiMjgzNzAwYWJlMjliNjliOWVjOGExYWJkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5n
LmpzCkBAIC0yMTMsNiArMjEzLDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIucHJv
dG90eXBlID0gewogICAgICAgICByZXR1cm4gc291cmNlczsKICAgICB9LAogCisgICAgbWFwcGlu
Z3M6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9tYXBwaW5ncy5zbGlj
ZSgpOworICAgIH0sCisKICAgICBzb3VyY2VDb250ZW50OiBmdW5jdGlvbihzb3VyY2VVUkwpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29udGVudEJ5VVJMW3NvdXJjZVVSTF07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3Vy
Y2VNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TQVNTU291
cmNlTWFwcGluZy5qcwppbmRleCA0M2JjMWU3Y2Y0NjY0MGU3NjhkOTc2ZDkxZWFmMGI3NjZlZDA1
MDYxLi44NDZiODE3N2U5MmUyYzNkODYzN2M1ZmE2ODNmZjI3OGExMGFlMDZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU0FTU1NvdXJjZU1hcHBp
bmcuanMKQEAgLTM4LDExICszOCwxNSBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcg
PSBmdW5jdGlvbih3b3Jrc3BhY2UsIG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcikKIHsKICAgICB0
aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7CiAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVBy
b3ZpZGVyID0gbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyOwotICAgIHRoaXMuX3VpTG9jYXRpb25z
ID0ge307CisgICAgdGhpcy5fc291cmNlTWFwQnlVUkwgPSB7fTsKKyAgICB0aGlzLl9zb3VyY2VN
YXBCeVN0eWxlU2hlZXRVUkwgPSB7fTsKKyAgICB0aGlzLl9zb3VyY2VNYXBGb3JVSVNvdXJjZUNv
ZGUgPSBuZXcgTWFwKCk7CisgICAgdGhpcy5fcmV2ZXJzZUxvY2F0aW9uTWFwcGluZ3MgPSBbXTsK
ICAgICB0aGlzLl9jc3NVUkxzRm9yU0FTU1VSTCA9IHt9OwogICAgIHRoaXMuX3RpbWVvdXRGb3JV
UkwgPSB7fTsKICAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5SZXNvdXJjZUFk
ZGVkLCB0aGlzLl9yZXNvdXJjZUFkZGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZmlsZU1h
bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBl
cy5TYXZlZFVSTCwgdGhpcy5fZmlsZVNhdmVGaW5pc2hlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVj
dG9yLmNzc01vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwu
RXZlbnRzLlN0eWxlU2hlZXRDaGFuZ2VkLCB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcyk7
CiAgICAgdGhpcy5fd29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLldvcmtz
cGFjZS5FdmVudHMuUHJvamVjdFdpbGxSZXNldCwgdGhpcy5fcmVzZXQsIHRoaXMpOwogfQogCkBA
IC02NSw2ICs2OSwyNiBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBl
ID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAog
ICAgICAqLworICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgewor
ICAgICAgICB2YXIgaXNBZGRpbmdSZXZpc2lvbiA9IHRoaXMuX2lzQWRkaW5nUmV2aXNpb247Cisg
ICAgICAgIGRlbGV0ZSB0aGlzLl9pc0FkZGluZ1JldmlzaW9uOworCisgICAgICAgIGlmIChpc0Fk
ZGluZ1JldmlzaW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJJbnNwZWN0b3Iu
Y3NzTW9kZWwucmVzb3VyY2VCaW5kaW5nKCkucmVxdWVzdFJlc291cmNlVVJMRm9yU3R5bGVTaGVl
dElkKGV2ZW50LmRhdGEuc3R5bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKworICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjayh1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
dXJsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5j
c3NNb2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVybCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CisgICAg
ICovCiAgICAgX2ZpbGVTYXZlRmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAg
ICAgdmFyIHNhc3NVUkwgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGV2ZW50LmRhdGEpOwpAQCAt
OTYsNyArMTIwLDEwIEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB2YXIgbmV3Q29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KHVybCk7CisgICAgICAgIHRoaXMuX2lzQWRkaW5nUmV2aXNpb24gPSB0cnVl
OwogICAgICAgICB1aVNvdXJjZUNvZGUuYWRkUmV2aXNpb24obmV3Q29udGVudCk7CisgICAgICAg
IC8vIHRoaXMuX2lzQWRkaW5nUmV2aXNpb24gd2lsbCBiZSBkZWxldGVkIGluIHRoaXMuX3N0eWxl
U2hlZXRDaGFuZ2VkKCkuCisgICAgICAgIHRoaXMuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKG5l
d0NvbnRlbnQsIHVybCwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTE1LDU1ICsxNDIs
MzUgQEAgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICovCiAgICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRl
bnRFbmNvZGVkLCBtaW1lVHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjb250ZW50
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRl
bnQuc3BsaXQoL1xyP1xuLyk7Ci0gICAgICAgICAgICB2YXIgZGVidWdJbmZvUmVnZXggPSAvQG1l
ZGlhXHNcLXNhc3NcLWRlYnVnXC1pbmZve2ZpbGVuYW1le2ZvbnQtZmFtaWx5OihbXn1dKyl9bGlu
ZXtmb250LWZhbWlseTpcXDAwMDAoXGRcZCkoW159XSopfX0vaTsKLSAgICAgICAgICAgIHZhciBs
aW5lTnVtYmVyc1JlZ2V4ID0gL1wvXCpccytsaW5lXHMrKFswLTldKyksXHMrKFteKlwvXSspLzsK
LSAgICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZXMu
bGVuZ3RoOyArK2xpbmVOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBkZWJ1
Z0luZm9SZWdleC5leGVjKGxpbmVzW2xpbmVOdW1iZXJdKTsKLSAgICAgICAgICAgICAgICBpZiAo
bWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IG1hdGNoWzFdLnJlcGxhY2Uo
L1xcKC4pL2csICIkMSIpOwotICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHBhcnNlSW50
KGRlY29kZVVSSSgiJSIgKyBtYXRjaFsyXSkgKyBtYXRjaFszXSwgMTApOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKHVybCwgbGluZSwgcmVzb3VyY2UudXJsLCBs
aW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG1hdGNoID0gbGluZU51bWJlcnNSZWdleC5leGVjKGxpbmVz
W2xpbmVOdW1iZXJdKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIGZpbGVOYW1lID0gbWF0Y2hbMl0udHJpbSgpOwotICAgICAgICAgICAgICAg
ICAgICB2YXIgbGluZSA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhciB1cmwgPSByZXNvdXJjZS51cmw7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cmwu
ZW5kc1dpdGgoIi8iICsgcmVzb3VyY2UucGFyc2VkVVJMLmxhc3RQYXRoQ29tcG9uZW50KSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxlbmd0aCAt
IHJlc291cmNlLnBhcnNlZFVSTC5sYXN0UGF0aENvbXBvbmVudC5sZW5ndGgpICsgZmlsZU5hbWU7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9
IGZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKHVy
bCwgbGluZSwgcmVzb3VyY2UudXJsLCBsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXAoY29udGVudCwgcmVzb3VyY2UudXJsKTsKICAg
ICAgICAgfQogICAgICAgICByZXNvdXJjZS5yZXF1ZXN0Q29udGVudChkaWRSZXF1ZXN0Q29udGVu
dC5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHVybAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IHJhd1VSTAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXdMaW5lCisgICAgICogQHBhcmFtIHs/
c3RyaW5nfSBjb250ZW50CisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc1VSTAorICAgICAqIEBw
YXJhbSB7Ym9vbGVhbj19IGZvcmNlUmViaW5kCiAgICAgICovCi0gICAgX2JpbmRVSVNvdXJjZUNv
ZGU6IGZ1bmN0aW9uKHVybCwgbGluZSwgcmF3VVJMLCByYXdMaW5lKQorICAgIF9sb2FkQW5kUHJv
Y2Vzc1NvdXJjZU1hcDogZnVuY3Rpb24oY29udGVudCwgY3NzVVJMLCBmb3JjZVJlYmluZCkKICAg
ICB7Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VD
b2RlRm9yVVJMKHVybCk7Ci0gICAgICAgIGlmICghdWlTb3VyY2VDb2RlKSB7Ci0gICAgICAgICAg
ICB2YXIgY29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KHVybCk7Ci0gICAgICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYklu
c3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIoV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMu
U3R5bGVzaGVldCwgY29udGVudCwgInRleHQveC1zY3NzIik7Ci0gICAgICAgICAgICB0aGlzLl9u
ZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIuYWRkRmlsZSh1cmwsIGNvbnRlbnRQcm92aWRlciwgdHJ1
ZSk7Ci0gICAgICAgICAgICB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VD
b2RlRm9yVVJMKHVybCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0U291
cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOworICAgICAgICBpZiAoIWNvbnRlbnQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xyP1xuLyk7
CisgICAgICAgIGlmICghbGluZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnN0IHNvdXJjZU1hcFJlZ2V4ID0gL15cL1wqQCBzb3VyY2VNYXBwaW5nVVJMPShbXlxz
XSspXHMqXCpcLyQvOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGgg
LSAxXTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGFzdExpbmUubWF0Y2goc291cmNlTWFwUmVnZXgp
OworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZh
ciBzb3VyY2VNYXAgPSB0aGlzLmxvYWRTb3VyY2VNYXBGb3JTdHlsZVNoZWV0KG1hdGNoWzFdLCBj
c3NVUkwsIGZvcmNlUmViaW5kKTsKKyAgICAgICAgaWYgKGZvcmNlUmViaW5kIHx8IChzb3VyY2VN
YXAgJiYgIXRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NVUkxdKSkgeworICAgICAg
ICAgICAgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VSTF0gPSBzb3VyY2VNYXA7
CisgICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKGNzc1VSTCwgc291cmNlTWFwKTsK
ICAgICAgICAgfQotICAgICAgICB2YXIgcmF3TG9jYXRpb25TdHJpbmcgPSByYXdVUkwgKyAiOiIg
KyAocmF3TGluZSArIDEpOyAgLy8gTmV4dCBsaW5lIGFmdGVyIG1hcHBpbmcgbWV0YWluZm8KLSAg
ICAgICAgdGhpcy5fdWlMb2NhdGlvbnNbcmF3TG9jYXRpb25TdHJpbmddID0gbmV3IFdlYkluc3Bl
Y3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgbGluZSAtIDEsIDApOwotICAgICAgICB0aGlz
Ll9hZGRDU1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJsKTsKICAgICB9LAogCiAgICAgLyoqCkBA
IC0xODQsMTggKzE5MSw4MiBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90
eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
TWFwVVJMCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlU2hlZXRVUkwKKyAgICAgKiBAcGFy
YW0ge2Jvb2xlYW49fSBmb3JjZVJlbG9hZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5T
b3VyY2VNYXBQYXJzZXJ9CisgICAgICovCisgICAgbG9hZFNvdXJjZU1hcEZvclN0eWxlU2hlZXQ6
IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCwgc3R5bGVTaGVldFVSTCwgZm9yY2VSZWxvYWQpCisgICAg
eworICAgICAgICBzb3VyY2VNYXBVUkwgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFyc2VyLnBy
b3RvdHlwZS5fY2Fub25pY2FsaXplVVJMKHNvdXJjZU1hcFVSTCwgc3R5bGVTaGVldFVSTCk7Cisg
ICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtzb3VyY2VNYXBVUkxd
OworICAgICAgICBpZiAoc291cmNlTWFwICYmICFmb3JjZVJlbG9hZCkKKyAgICAgICAgICAgIHJl
dHVybiBzb3VyY2VNYXA7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBt
YWtlIHNlbmRSZXF1ZXN0IGFzeW5jLgorICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc291cmNlTWFwVVJMKTsK
KyAgICAgICAgICAgIGlmIChyZXNwb25zZS5zbGljZSgwLCAzKSA9PT0gIildfSIpCisgICAgICAg
ICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5zdWJzdHJpbmcocmVzcG9uc2UuaW5kZXhPZign
XG4nKSk7CisgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9y
LlNvdXJjZU1hcFBheWxvYWR9ICovIEpTT04ucGFyc2UocmVzcG9uc2UpOworICAgICAgICAgICAg
c291cmNlTWFwID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBQYXJzZXIoc291cmNlTWFwVVJM
LCBwYXlsb2FkKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKGUubWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9zb3VyY2VNYXBCeVVSTFtzb3VyY2VNYXBVUkxdID0gc291cmNlTWFwOworICAg
ICAgICByZXR1cm4gc291cmNlTWFwOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e3N0cmluZ30gcmF3VVJMCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwUGFy
c2VyfSBzb3VyY2VNYXAKKyAgICAgKi8KKyAgICBfYmluZFVJU291cmNlQ29kZTogZnVuY3Rpb24o
cmF3VVJMLCBzb3VyY2VNYXApCisgICAgeworICAgICAgICB2YXIgc291cmNlcyA9IHNvdXJjZU1h
cC5zb3VyY2VzKCk7CisgICAgICAgIHZhciBwcm9qZWN0ID0gdGhpcy5fd29ya3NwYWNlLnByb2pl
Y3QoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICB2YXIgdXJsID0gc291cmNlc1tpXTsKKyAgICAgICAgICAgIHZhciB1aVNv
dXJjZUNvZGUgPSBwcm9qZWN0LnVpU291cmNlQ29kZUZvclVSTCh1cmwpOworICAgICAgICAgICAg
aWYgKCF1aVNvdXJjZUNvZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IEluc3Bl
Y3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29u
dGVudFByb3ZpZGVyKFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQsIGNvbnRl
bnQsICJ0ZXh0L3gtc2NzcyIpOworICAgICAgICAgICAgICAgIHRoaXMuX25ldHdvcmtXb3Jrc3Bh
Y2VQcm92aWRlci5hZGRGaWxlKHVybCwgY29udGVudFByb3ZpZGVyLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICB1aVNvdXJjZUNvZGUgPSBwcm9qZWN0LnVpU291cmNlQ29kZUZvclVSTCh1cmwpOwor
ICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5zZXRTb3VyY2VNYXBwaW5nKHRoaXMpOworICAg
ICAgICAgICAgICAgIHRoaXMuX3NvdXJjZU1hcEZvclVJU291cmNlQ29kZS5wdXQodWlTb3VyY2VD
b2RlLCBzb3VyY2VNYXApOworICAgICAgICAgICAgICAgIHRoaXMuX2FkZENTU1VSTGZvclNBU1NV
UkwocmF3VVJMLCB1cmwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBt
YXBwaW5ncyA9IHNvdXJjZU1hcC5tYXBwaW5ncygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1hcHBpbmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgZW50cnkgPSBtYXBw
aW5nc1tpXTsKKyAgICAgICAgICAgIHZhciBtYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5TQVNT
U291cmNlTWFwcGluZy5SZXZlcnNlTG9jYXRpb25NYXBwaW5nKG5ldyBXZWJJbnNwZWN0b3IuQ1NT
TG9jYXRpb24ocmF3VVJMLCBlbnRyeVswXSwgZW50cnlbMV0pLCBuZXcgV2ViSW5zcGVjdG9yLlVJ
TG9jYXRpb24ocHJvamVjdC51aVNvdXJjZUNvZGVGb3JVUkwoZW50cnlbMl0pLCBlbnRyeVszXSwg
ZW50cnlbNF0pKTsKKyAgICAgICAgICAgIHRoaXMuX3JldmVyc2VMb2NhdGlvbk1hcHBpbmdzLnB1
c2gobWFwcGluZyk7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
c2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOworICAgIH0sCisKKyAgICAvKioKICAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KICAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KICAgICByYXdMb2NhdGlv
blRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewotICAgICAgICB2YXIg
bG9jYXRpb24gPSAvKiogQHR5cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovIChyYXdMb2Nh
dGlvbik7Ci0gICAgICAgIHZhciB1aUxvY2F0aW9uID0gdGhpcy5fdWlMb2NhdGlvbnNbbG9jYXRp
b24udXJsICsgIjoiICsgbG9jYXRpb24ubGluZU51bWJlcl07Ci0gICAgICAgIGlmICghdWlMb2Nh
dGlvbikgewotICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3dvcmtzcGFjZS51
aVNvdXJjZUNvZGVGb3JVUkwobG9jYXRpb24udXJsKTsKLSAgICAgICAgICAgIHVpTG9jYXRpb24g
PSBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBsb2NhdGlvbi5saW5l
TnVtYmVyLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdWlMb2NhdGlvbjsKKyAgICAg
ICAgdmFyIGxvY2F0aW9uID0gLyoqIEB0eXBlIFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiAqLyBy
YXdMb2NhdGlvbjsKKyAgICAgICAgdmFyIGNvbXBhcmF0b3IgPSBXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcuUmV2ZXJzZUxvY2F0aW9uTWFwcGluZy5Db21wYXJhdG9yOworICAgICAgICB2
YXIgaW5kZXggPSBiaW5hcnlTZWFyY2gobG9jYXRpb24sIHRoaXMuX3JldmVyc2VMb2NhdGlvbk1h
cHBpbmdzLCBjb21wYXJhdG9yKTsKKyAgICAgICAgaWYgKGluZGV4ID49IDApCisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fcmV2ZXJzZUxvY2F0aW9uTWFwcGluZ3NbaW5kZXhdLnVpTG9jYXRpb247
CisKKyAgICAgICAgaW5kZXggPSAtaW5kZXggLSAxOworICAgICAgICBpZiAoaW5kZXggPiAwICYm
IChpbmRleCAlIDIpICYmIGNvbXBhcmF0b3IobG9jYXRpb24sIHRoaXMuX3JldmVyc2VMb2NhdGlv
bk1hcHBpbmdzW2luZGV4IC0gMV0pID49IDAgJiYgY29tcGFyYXRvcihsb2NhdGlvbiwgdGhpcy5f
cmV2ZXJzZUxvY2F0aW9uTWFwcGluZ3NbaW5kZXhdKSA8PSAwKQorICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3JldmVyc2VMb2NhdGlvbk1hcHBpbmdzW2luZGV4XS51aUxvY2F0aW9uOworCisgICAg
ICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJM
KGxvY2F0aW9uLnVybCk7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRp
b24odWlTb3VyY2VDb2RlLCBsb2NhdGlvbi5saW5lTnVtYmVyLCAwKTsKICAgICB9LAogCiAgICAg
LyoqCkBAIC0yMTIsOCArMjgzLDMwIEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5w
cm90b3R5cGUgPSB7CiAKICAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRo
aXMuX3VpTG9jYXRpb25zID0ge307CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5VVJMID0ge307
CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTCA9IHt9OworICAgICAgICB0
aGlzLl9zb3VyY2VNYXBGb3JVSVNvdXJjZUNvZGUgPSBuZXcgTWFwKCk7CisgICAgICAgIHRoaXMu
X3JldmVyc2VMb2NhdGlvbk1hcHBpbmdzID0gW107CiAgICAgICAgIHRoaXMuX3BvcHVsYXRlKCk7
CiAgICAgfQogfQogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuQ1NTTG9jYXRpb259IHJhd0xvY2F0aW9uCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSUxv
Y2F0aW9ufSB1aUxvY2F0aW9uCisgKi8KK1dlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5S
ZXZlcnNlTG9jYXRpb25NYXBwaW5nID0gZnVuY3Rpb24ocmF3TG9jYXRpb24sIHVpTG9jYXRpb24p
Cit7CisgICAgdGhpcy5yYXdMb2NhdGlvbiA9IHJhd0xvY2F0aW9uOworICAgIHRoaXMudWlMb2Nh
dGlvbiA9IHVpTG9jYXRpb247Cit9CisKK1dlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5S
ZXZlcnNlTG9jYXRpb25NYXBwaW5nLkNvbXBhcmF0b3IgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkK
K3sKKyAgICB2YXIgYSA9IGxlZnQucmF3TG9jYXRpb24gfHwgbGVmdDsKKyAgICB2YXIgYiA9IHJp
Z2h0LnJhd0xvY2F0aW9uIHx8IHJpZ2h0OworICAgIGlmIChhLmxpbmVOdW1iZXIgIT09IGIubGlu
ZU51bWJlcikKKyAgICAgICAgcmV0dXJuIGEubGluZU51bWJlciAtIGIubGluZU51bWJlcjsKKyAg
ICByZXR1cm4gYS5jb2x1bW5OdW1iZXIgLSBiLmNvbHVtbk51bWJlcjsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpz
CmluZGV4IDczNmIyY2MxNmQ3YmVkYWFiNjUwZjllNDJiMDA4NTRhMDhlMDhmZTMuLjcyYTZlMzQ3
YTM5ZjgzYzUzNmZkMDdkMzgyZmMwNmE1OGE4N2QzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtMzY5
LDcgKzM2OSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuc2VjdGlvbnNbMF0gPSB0aGlzLl9yZWJ1aWxkU2VjdGlvbnNGb3JTdHls
ZVJ1bGVzKHN0eWxlUnVsZXMsIHVzZWRQcm9wZXJ0aWVzLCAwLCBudWxsKTsKICAgICAgICAgdmFy
IGFuY2hvckVsZW1lbnQgPSB0aGlzLnNlY3Rpb25zWzBdLmluaGVyaXRlZFByb3BlcnRpZXNTZXBh
cmF0b3JFbGVtZW50OwogCi0gICAgICAgIGlmIChzdHlsZXMuY29tcHV0ZWRTdHlsZSkgICAgICAg
IAorICAgICAgICBpZiAoc3R5bGVzLmNvbXB1dGVkU3R5bGUpCiAgICAgICAgICAgICB0aGlzLnNl
Y3Rpb25zWzBdWzBdLnJlYnVpbGRDb21wdXRlZFRyYWNlKHRoaXMuc2VjdGlvbnNbMF0pOwogCiAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLnBzZXVkb0VsZW1lbnRzLmxlbmd0aDsg
KytpKSB7CkBAIC0yMDI5LDcgKzIwMjksNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKIAog
ICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLmxpc3RJdGVtRWxlbWVudCkgewotICAg
ICAgICAgICAgaWYgKCF0aGlzLnNlY3Rpb24uZWRpdGFibGUpIAorICAgICAgICAgICAgaWYgKCF0
aGlzLnNlY3Rpb24uZWRpdGFibGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
ICAgICBpZiAodGhpcy5zZWN0aW9uLl9jaGVja1dpbGxDYW5jZWxFZGl0aW5nKCkpCkBAIC0yMDM4
LDkgKzIwMzgsNTcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50KSkg
eworICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVUb1NvdXJjZShldmVudC50YXJnZXQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdGhpcy5zdGFydEVkaXRpbmco
ZXZlbnQudGFyZ2V0KTsKICAgICB9LAogCisgICAgX3Nob3dSYXdDU1NMb2NhdGlvbjogZnVuY3Rp
b24ocmF3TG9jYXRpb24pCisgICAgeworICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IFdlYkluc3Bl
Y3Rvci5jc3NNb2RlbC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7CisgICAg
ICAgIHZhciB1aVNvdXJjZUNvZGUgPSB1aUxvY2F0aW9uID8gdWlMb2NhdGlvbi51aVNvdXJjZUNv
ZGUgOiBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSTChyYXdMb2NhdGlv
bi51cmwpOworICAgICAgICB2YXIgbGluZU51bWJlciA9IHVpTG9jYXRpb24gPyB1aUxvY2F0aW9u
LmxpbmVOdW1iZXIgOiByYXdMb2NhdGlvbi5saW5lTnVtYmVyOworICAgICAgICBXZWJJbnNwZWN0
b3Iuc2hvd1BhbmVsKCJzY3JpcHRzIikuc2hvd1VJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUsIGxp
bmVOdW1iZXIpOworICAgIH0sCisKKyAgICBfcmF3Q1NTTG9jYXRpb246IGZ1bmN0aW9uKGlzUHJv
cGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zdHlsZS5yYW5n
ZS5zdGFydCArIChpc1Byb3BlcnR5TmFtZSA/IHRoaXMucHJvcGVydHkucmFuZ2Uuc3RhcnQgOiB0
aGlzLnByb3BlcnR5LnJhbmdlLmVuZCAtIDEpOworICAgICAgICB2YXIgbG9jYXRpb24gPSBXZWJJ
bnNwZWN0b3IuRm9ybWF0dGVyLnBvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLnNlY3Rpb24uX2xpbmVF
bmRpbmdzLCBwb3NpdGlvbik7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU0xv
Y2F0aW9uKHRoaXMuc3R5bGUucGFyZW50UnVsZS5zb3VyY2VVUkwsIGxvY2F0aW9uWzBdLCBsb2Nh
dGlvblsxXSk7CisgICAgfSwKKworICAgIF9uYXZpZ2F0ZVRvU291cmNlOiBmdW5jdGlvbihlbGVt
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLnN0eWxlLnBhcmVudFJ1bGUgfHwgIXRoaXMu
c3R5bGUucGFyZW50UnVsZS5zb3VyY2VVUkwgfHwgIXRoaXMuc3R5bGUucmFuZ2UgfHwgIXRoaXMu
cHJvcGVydHkucmFuZ2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHByb3Bl
cnR5TmFtZUNsaWNrZWQgPSBlbGVtZW50ID09PSB0aGlzLm5hbWVFbGVtZW50OworCisgICAgICAg
IHZhciB1aVNvdXJjZUNvZGUgPSBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29kZUZv
clVSTCh0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMKTsKKyAgICAgICAgaWYgKCF1aVNv
dXJjZUNvZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMuc2VjdGlv
bi5fbGluZUVuZGluZ3MpIHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dSYXdDU1NMb2NhdGlvbih0
aGlzLl9yYXdDU1NMb2NhdGlvbihwcm9wZXJ0eU5hbWVDbGlja2VkKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1aVNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQo
ZGlkUmVxdWVzdENvbnRlbnQuYmluZCh0aGlzKSk7CisKKyAgICAgICAgZnVuY3Rpb24gZGlkUmVx
dWVzdENvbnRlbnQoY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIWNvbnRlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICB0aGlzLnNlY3Rpb24uX2xpbmVFbmRpbmdzID0gY29udGVudC5saW5lRW5kaW5n
cygpOworICAgICAgICAgICAgdGhpcy5fc2hvd1Jhd0NTU0xvY2F0aW9uKHRoaXMuX3Jhd0NTU0xv
Y2F0aW9uKHByb3BlcnR5TmFtZUNsaWNrZWQpKTsKKyAgICAgICAgfQorICAgIH0sCisKICAgICBf
aXNOYW1lRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBl
bGVtZW50LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1jc3MtcHJvcGVydHki
KSA9PT0gdGhpcy5uYW1lRWxlbWVudDsKQEAgLTI0NTQsOSArMjUwMiwxMSBAQCBXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAg
aWYgKHRoaXMuX25ld1Byb3BlcnR5KQogICAgICAgICAgICAgICAgIHRoaXMuX25ld1Byb3BlcnR5
SW5TdHlsZSA9IHRydWU7CisgICAgICAgICAgICBuZXdTdHlsZS5wYXJlbnRSdWxlID0gdGhpcy5z
dHlsZS5wYXJlbnRSdWxlOwogICAgICAgICAgICAgdGhpcy5zdHlsZSA9IG5ld1N0eWxlOwogICAg
ICAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IG5ld1N0eWxlLnByb3BlcnR5QXQodGhpcy5wcm9wZXJ0
eS5pbmRleCk7CiAgICAgICAgICAgICB0aGlzLl9zdHlsZVJ1bGUuc3R5bGUgPSB0aGlzLnN0eWxl
OworICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VjdGlvbi5fbGluZUVuZGluZ3M7CiAKICAgICAg
ICAgICAgIGlmIChzZWN0aW9uICYmIHNlY3Rpb24ucGFuZSkKICAgICAgICAgICAgICAgICBzZWN0
aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzdHlsZSBlZGl0ZWQiKTsKQEAgLTI1
NDksNyArMjU5OSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQcm9wZXJ0
eVByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAvLyBTeW50aGVzaXplIHByb3BlcnR5
IHRleHQgZGlzcmVnYXJkaW5nIGFueSBjb21tZW50cywgY3VzdG9tIHdoaXRlc3BhY2UgZXRjLgog
ICAgICAgICAgICAgdGhpcy5fc2lkZWJhclBhbmUuYXBwbHlTdHlsZVRleHQodGhpcy5fc2lkZWJh
clBhbmUubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiOiAiICsgdGhpcy5fc2lkZWJhclBhbmUu
dmFsdWVFbGVtZW50LnRleHRDb250ZW50LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAg
fQotICAgIAorCiAgICAgICAgIC8vIEhhbmRsZSBudW1lcmljIHZhbHVlIGluY3JlbWVudC9kZWNy
ZW1lbnQgb25seSBhdCB0aGlzIHBvaW50LgogICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdGluZ05h
bWUgJiYgV2ViSW5zcGVjdG9yLmhhbmRsZUVsZW1lbnRWYWx1ZU1vZGlmaWNhdGlvbnMoZXZlbnQs
IHRoaXMuX3NpZGViYXJQYW5lLnZhbHVlRWxlbWVudCwgZmluaXNoSGFuZGxlci5iaW5kKHRoaXMp
LCB0aGlzLl9pc1ZhbHVlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9l
bGVtZW50c1BhbmVsLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxl
bWVudHNQYW5lbC5jc3MKaW5kZXggOWRkMWQ3ODIyY2I5ZjM5YTAxYjRlNDY4ODViZGIxYmMyZTg0
NGIwYS4uMWIxNzEyMjI4NjdkMTU3MzlmZDk3YjBkMjg3MjA1YzhhYzkyYjMyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNzcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwuY3Nz
CkBAIC0xNjYsNiArMTY2LDExIEBACiAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKIH0K
IAorLnN0eWxlcy1zZWN0aW9uOm5vdCgucmVhZC1vbmx5KTpob3ZlciAucHJvcGVydGllcyBsaSAu
d2Via2l0LWNzcy1wcm9wZXJ0eSwKKy5zdHlsZXMtc2VjdGlvbjpub3QoLnJlYWQtb25seSk6aG92
ZXIgLnByb3BlcnRpZXMgbGkgLnZhbHVlIHsKKyAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVk
IGJsYWNrICFpbXBvcnRhbnQ7Cit9CisKIC5zdHlsZXMtc2VjdGlvbjpub3QoLmZpcnN0LXN0eWxl
cy1zZWN0aW9uKSB7CiAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYigxOTEsIDE5MSwgMTkx
KTsKIH0KQEAgLTI3NSw2ICsyODAsNyBAQAogCiAuc3R5bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMg
bGkgewogICAgIG1hcmdpbi1sZWZ0OiAxMnB4OworICAgIHBhZGRpbmctYm90dG9tOiAxcHg7CiAg
ICAgcGFkZGluZy1sZWZ0OiAyMnB4OwogICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgdGV4
dC1vdmVyZmxvdzogZWxsaXBzaXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182519</attachid>
            <date>2013-01-13 23:50:49 -0800</date>
            <delta_ts>2013-01-24 02:30:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20130114114749.patch</filename>
            <type>text/plain</type>
            <size>25160</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDA2MjMzYjA3NjBiODI4
NDBiZGVjMDM5YjY0NWI0Y2UzZjdkMzFkZi4uMjJjNzJiY2M0NzlmMDk3ZmE2YTQ4OTdjMzg5NDlj
ZTc1N2RlOGEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAxLTEzICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHRyYWNrcyBwcm9wZXJ0
eSByYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgc291cmNlIGNvZGUgYW5kIENTUyBzb3VyY2UgbWFw
cGluZ3MKKyAgICAgICAgdG8gY29tcHV0ZSB0aGUgVUkgbG9jYXRpb24gb2YgQ1NTIHByb3BlcnR5
IG5hbWVzIGFuZCB2YWx1ZXMuIFRoZSBtYXBwaW5nIGlzIHJlbW92ZWQgdXBvbiBDU1Mgc3R5bGVz
aGVldCB1cGRhdGVzCisgICAgICAgIGFuZCB1cGRhdGVkL3Jlc3RvcmVkIHVwb24gcmVsb2FkIG9m
IENTUyBhZnRlciBhIFNBU1MgZmlsZSBoYXMgYmVlbiByZWxvYWRlZCAoZHVlIHRvIHNvdXJjZSBl
ZGl0cy4pCisgICAgICAgIFVzZXIgc2hvdWxkIEN0cmwvQ21kLWNsaWNrIHRoZSBkYXNoLXVuZGVy
bGluZWQgcHJvcGVydHkgbmFtZSBvciB2YWx1ZSBlbGVtZW50IHRvIG5hdmlnYXRlIHRvIHRoZSBy
ZXNwZWN0aXZlCisgICAgICAgIGxvY2F0aW9uIGluIGEgc291cmNlIGZpbGUuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuY3JlYXRlTGl2ZUxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5yYXdMb2Nh
dGlvblRvVUlMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5M
aXZlTG9jYXRpb24ucHJvdG90eXBlLnVpTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNTU0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJv
cGVydHkucGFyc2VQYXlsb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0xpbmtp
Zmllci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5MaW5raWZpZXIucHJvdG90eXBlLmxpbmtp
ZnlDU1NSdWxlTG9jYXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU0FTU1Nv
dXJjZU1hcHBpbmcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5fc3R5
bGVTaGVldENoYW5nZWQuY2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3Vy
Y2VNYXBwaW5nLnByb3RvdHlwZS5fc3R5bGVTaGVldENoYW5nZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5fcmVsb2FkQ1NTKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3Jlc291cmNlQWRkZWQu
ZGlkUmVxdWVzdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZS5fcmVzb3VyY2VBZGRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FT
U1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9sb2FkQW5kUHJvY2Vzc1NvdXJjZU1hcCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLmxvYWRTb3VyY2VN
YXBGb3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGlu
Zy5wcm90b3R5cGUuX2JpbmRVSVNvdXJjZUNvZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNB
U1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5faWRlbnRpdHlNYXBwaW5nKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlw
ZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNldCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNT
aWRlYmFyUGFuZS5wcm90b3R5cGUuX2lubmVyUmVidWlsZFVwZGF0ZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5lbGVtZW50LmNv
bnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5w
cm90b3R5cGUuaXNSZXZlcnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVu
dHNQYW5lbC5jc3M6CisgICAgICAgICguc3R5bGVzLXNlY3Rpb246bm90KC5yZWFkLW9ubHkpOmhv
dmVyIC5wcm9wZXJ0aWVzIGxpIC52YWx1ZSk6CisgICAgICAgICguc3R5bGVzLXNlY3Rpb24gLnBy
b3BlcnRpZXMgbGkpOgorCiAyMDEzLTAxLTEzICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4gUm9sbGluZyBvdXQgcjEz
OTUzNy4gSXQgYnJva2UgcGxhdGZvcm1zIHdpdGhvdXQgc3ViLXBpeGVsIGxheW91dC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpp
bmRleCAwNmNjZGQxMTQ2YzkyMjRjZDZhYmFlNDEyZWUwZDdiMTBmNDM1Zjk0Li43MjkxNWMzMzIy
MmIyNTI2YjNiZmZmMTcwYjA4OTU3NTY2NTk5NDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC00OTQsNyArNDk0LDEw
IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAg
ICBzZXRTb3VyY2VNYXBwaW5nOiBmdW5jdGlvbih1cmwsIHNvdXJjZU1hcHBpbmcpCiAgICAgewot
ICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAg
ICAgaWYgKHNvdXJjZU1hcHBpbmcpCisgICAgICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1
cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX3NvdXJjZU1hcHBpbmdzW3VybF07CiAgICAgICAgIHRoaXMuX3VwZGF0ZUxvY2F0aW9ucygp
OwogICAgIH0sCiAKQEAgLTUxNSwxNCArNTE4LDEzIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1v
ZGVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuQ1NTTG9jYXRpb259IHJhd0xvY2F0aW9uCiAgICAgICogQHBhcmFtIHtmdW5jdGlv
bihXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbik6KGJvb2xlYW58dW5kZWZpbmVkKX0gdXBkYXRlRGVs
ZWdhdGUKICAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLkxpdmVMb2NhdGlvbn0KICAgICAg
Ki8KLSAgICBjcmVhdGVMaXZlTG9jYXRpb246IGZ1bmN0aW9uKGNzc1J1bGUsIHVwZGF0ZURlbGVn
YXRlKQorICAgIGNyZWF0ZUxpdmVMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24sIHVwZGF0
ZURlbGVnYXRlKQogICAgIHsKLSAgICAgICAgaWYgKCFjc3NSdWxlLl9yYXdMb2NhdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB2YXIgbG9jYXRpb24gPSBuZXcgV2ViSW5z
cGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9uKGNzc1J1bGUuX3Jhd0xvY2F0aW9uLCB1
cGRhdGVEZWxlZ2F0ZSk7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNb2RlbC5MaXZlTG9jYXRpb24ocmF3TG9jYXRpb24sIHVwZGF0ZURlbGVnYXRlKTsK
ICAgICAgICAgaWYgKCFsb2NhdGlvbi51aUxvY2F0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKICAgICAgICAgdGhpcy5fbG9jYXRpb25zLnB1c2gobG9jYXRpb24pOwpAQCAtNTM0LDEw
ICs1MzYsMTYgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAgICAq
IEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KLSAgICBfcmF3TG9j
YXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQorICAgIHJhd0xvY2F0aW9u
VG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBz
b3VyY2VNYXBwaW5nID0gdGhpcy5fc291cmNlTWFwcGluZ3NbcmF3TG9jYXRpb24udXJsXTsKLSAg
ICAgICAgcmV0dXJuIHNvdXJjZU1hcHBpbmcgPyBzb3VyY2VNYXBwaW5nLnJhd0xvY2F0aW9uVG9V
SUxvY2F0aW9uKHJhd0xvY2F0aW9uKSA6IG51bGw7CisgICAgICAgIGlmICghc291cmNlTWFwcGlu
ZykgeworICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IFdlYkluc3BlY3Rvci53b3Jrc3Bh
Y2UudWlTb3VyY2VDb2RlRm9yVVJMKHJhd0xvY2F0aW9uLnVybCk7CisgICAgICAgICAgICBpZiAo
IXVpU291cmNlQ29kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCByYXdMb2Nh
dGlvbi5saW5lTnVtYmVyLCByYXdMb2NhdGlvbi5jb2x1bW5OdW1iZXIpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzb3VyY2VNYXBwaW5nLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xv
Y2F0aW9uKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC01ODQsNyArNTkyLDcgQEAgV2ViSW5zcGVj
dG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9IHsKICAgICB1aUxvY2F0
aW9uOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgY3NzTG9jYXRpb24gPSAvKiogQHR5
cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovICh0aGlzLnJhd0xvY2F0aW9uKCkpOwotICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmNzc01vZGVsLl9yYXdMb2NhdGlvblRvVUlMb2NhdGlv
bihjc3NMb2NhdGlvbik7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY3NzTW9kZWwucmF3
TG9jYXRpb25Ub1VJTG9jYXRpb24oY3NzTG9jYXRpb24pOwogICAgIH0sCiAKICAgICBkaXNwb3Nl
OiBmdW5jdGlvbigpCkBAIC02MDMsMTEgKzYxMSwxMyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVN
b2RlbC5MaXZlTG9jYXRpb24ucHJvdG90eXBlID0gewogICogQGltcGxlbWVudHMge1dlYkluc3Bl
Y3Rvci5SYXdMb2NhdGlvbn0KICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKICAqIEBwYXJhbSB7bnVt
YmVyfSBsaW5lTnVtYmVyCisgKiBAcGFyYW0ge251bWJlcj19IGNvbHVtbk51bWJlcgogICovCi1X
ZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24gPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIpCitXZWJJ
bnNwZWN0b3IuQ1NTTG9jYXRpb24gPSBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcikKIHsKICAgICB0aGlzLnVybCA9IHVybDsKICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5l
TnVtYmVyOworICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyIHx8IDA7CiB9CiAK
IC8qKgpAQCAtODM5LDcgKzg0OSw3IEBAIFdlYkluc3BlY3Rvci5DU1NSdWxlID0gZnVuY3Rpb24o
cGF5bG9hZCwgbWF0Y2hpbmdTZWxlY3RvcnMpCiAgICAgdGhpcy5zb3VyY2VMaW5lID0gcGF5bG9h
ZC5zb3VyY2VMaW5lOwogICAgIHRoaXMuc291cmNlVVJMID0gcGF5bG9hZC5zb3VyY2VVUkw7CiAg
ICAgaWYgKHBheWxvYWQuc291cmNlVVJMKQotICAgICAgICB0aGlzLl9yYXdMb2NhdGlvbiA9IG5l
dyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24ocGF5bG9hZC5zb3VyY2VVUkwsIHBheWxvYWQuc291
cmNlTGluZSk7CisgICAgICAgIHRoaXMucmF3TG9jYXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLkNT
U0xvY2F0aW9uKHBheWxvYWQuc291cmNlVVJMLCBwYXlsb2FkLnNvdXJjZUxpbmUpOwogICAgIHRo
aXMub3JpZ2luID0gcGF5bG9hZC5vcmlnaW47CiAgICAgdGhpcy5zdHlsZSA9IFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChwYXlsb2FkLnN0eWxlKTsKICAgICB0
aGlzLnN0eWxlLnBhcmVudFJ1bGUgPSB0aGlzOwpAQCAtODkwLDggKzkwMCw5IEBAIFdlYkluc3Bl
Y3Rvci5DU1NSdWxlLnByb3RvdHlwZSA9IHsKICAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyc2VkT2sK
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW1wbGljaXQKICAqIEBwYXJhbSB7P3N0cmluZz19IHRleHQK
KyAqIEBwYXJhbSB7Q1NTQWdlbnQuU291cmNlUmFuZ2U9fSByYW5nZQogICovCi1XZWJJbnNwZWN0
b3IuQ1NTUHJvcGVydHkgPSBmdW5jdGlvbihvd25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFsdWUs
IHByaW9yaXR5LCBzdGF0dXMsIHBhcnNlZE9rLCBpbXBsaWNpdCwgdGV4dCkKK1dlYkluc3BlY3Rv
ci5DU1NQcm9wZXJ0eSA9IGZ1bmN0aW9uKG93bmVyU3R5bGUsIGluZGV4LCBuYW1lLCB2YWx1ZSwg
cHJpb3JpdHksIHN0YXR1cywgcGFyc2VkT2ssIGltcGxpY2l0LCB0ZXh0LCByYW5nZSkKIHsKICAg
ICB0aGlzLm93bmVyU3R5bGUgPSBvd25lclN0eWxlOwogICAgIHRoaXMuaW5kZXggPSBpbmRleDsK
QEAgLTkwMiw2ICs5MTMsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkgPSBmdW5jdGlvbihv
d25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFsdWUsIHByaW9yaXR5LCBzdAogICAgIHRoaXMucGFy
c2VkT2sgPSBwYXJzZWRPazsKICAgICB0aGlzLmltcGxpY2l0ID0gaW1wbGljaXQ7CiAgICAgdGhp
cy50ZXh0ID0gdGV4dDsKKyAgICB0aGlzLnJhbmdlID0gcmFuZ2U7CiB9CiAKIC8qKgpAQCAtOTE4
LDcgKzkzMCw3IEBAIFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wYXJzZVBheWxvYWQgPSBmdW5j
dGlvbihvd25lclN0eWxlLCBpbmRleCwgcGF5bG9hZCkKICAgICAvLyBpbXBsaWNpdDogZmFsc2UK
ICAgICAvLyBzdGF0dXM6ICJzdHlsZSIKICAgICB2YXIgcmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rv
ci5DU1NQcm9wZXJ0eSgKLSAgICAgICAgb3duZXJTdHlsZSwgaW5kZXgsIHBheWxvYWQubmFtZSwg
cGF5bG9hZC52YWx1ZSwgcGF5bG9hZC5wcmlvcml0eSB8fCAiIiwgcGF5bG9hZC5zdGF0dXMgfHwg
InN0eWxlIiwgKCJwYXJzZWRPayIgaW4gcGF5bG9hZCkgPyAhIXBheWxvYWQucGFyc2VkT2sgOiB0
cnVlLCAhIXBheWxvYWQuaW1wbGljaXQsIHBheWxvYWQudGV4dCk7CisgICAgICAgIG93bmVyU3R5
bGUsIGluZGV4LCBwYXlsb2FkLm5hbWUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQucHJpb3JpdHkg
fHwgIiIsIHBheWxvYWQuc3RhdHVzIHx8ICJzdHlsZSIsICgicGFyc2VkT2siIGluIHBheWxvYWQp
ID8gISFwYXlsb2FkLnBhcnNlZE9rIDogdHJ1ZSwgISFwYXlsb2FkLmltcGxpY2l0LCBwYXlsb2Fk
LnRleHQsIHBheWxvYWQucmFuZ2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTGlua2lmaWVyLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9MaW5raWZpZXIuanMKaW5kZXggOWYxN2Q0
MmI1OTBjYzc5ODFiZTFjYzA2Y2UyZDY4NWQ4ZTY1NzhmZS4uNzMwZWZhOGU5NGUwOGM4M2IzNmVi
NjM3MmIzNmI1OTk1MWIwNjA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9MaW5raWZpZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9MaW5raWZpZXIuanMKQEAgLTkyLDcgKzkyLDcgQEAgV2ViSW5zcGVjdG9yLkxpbmtp
Zmllci5wcm90b3R5cGUgPSB7CiAgICAgbGlua2lmeUNTU1J1bGVMb2NhdGlvbjogZnVuY3Rpb24o
cnVsZSkKICAgICB7CiAgICAgICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVS
TEFzTm9kZSgiIiwgIiIsICIiLCBmYWxzZSk7Ci0gICAgICAgIHZhciBsaXZlTG9jYXRpb24gPSBX
ZWJJbnNwZWN0b3IuY3NzTW9kZWwuY3JlYXRlTGl2ZUxvY2F0aW9uKHJ1bGUsIHRoaXMuX3VwZGF0
ZUFuY2hvci5iaW5kKHRoaXMsIGFuY2hvcikpOworICAgICAgICB2YXIgbGl2ZUxvY2F0aW9uID0g
V2ViSW5zcGVjdG9yLmNzc01vZGVsLmNyZWF0ZUxpdmVMb2NhdGlvbihydWxlLnJhd0xvY2F0aW9u
LCB0aGlzLl91cGRhdGVBbmNob3IuYmluZCh0aGlzLCBhbmNob3IpKTsKICAgICAgICAgaWYgKCFs
aXZlTG9jYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgdGhpcy5fbGl2
ZUxvY2F0aW9ucy5wdXNoKGxpdmVMb2NhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcwppbmRleCAyYTY0ZDA5
MzM0MDczMjQ5NjZiZWJhMGE2ZjY0MTAxZjIyYTI3ZjIzLi45YzEyYzAxYzMyYmNjZjYyMTMxYzEz
MWExNDE5NjdiMWI2MTJjNDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU0FTU1NvdXJjZU1hcHBpbmcuanMKQEAgLTM4LDExICszOCwxMyBAQCBX
ZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbih3b3Jrc3BhY2UsIG5ldHdv
cmtXb3Jrc3BhY2VQcm92aWRlcikKIHsKICAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jrc3BhY2U7
CiAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyID0gbmV0d29ya1dvcmtzcGFjZVBy
b3ZpZGVyOwotICAgIHRoaXMuX3VpTG9jYXRpb25zID0ge307CisgICAgdGhpcy5fc291cmNlTWFw
QnlVUkwgPSB7fTsKKyAgICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkwgPSB7fTsKICAg
ICB0aGlzLl9jc3NVUkxzRm9yU0FTU1VSTCA9IHt9OwogICAgIHRoaXMuX3RpbWVvdXRGb3JVUkwg
PSB7fTsKICAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5SZXNvdXJjZUFkZGVk
LCB0aGlzLl9yZXNvdXJjZUFkZGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZmlsZU1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZlbnRUeXBlcy5T
YXZlZFVSTCwgdGhpcy5fZmlsZVNhdmVGaW5pc2hlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9y
LmNzc01vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRXZl
bnRzLlN0eWxlU2hlZXRDaGFuZ2VkLCB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcyk7CiAg
ICAgdGhpcy5fd29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLldvcmtzcGFj
ZS5FdmVudHMuUHJvamVjdFdpbGxSZXNldCwgdGhpcy5fcmVzZXQsIHRoaXMpOwogfQogCkBAIC02
NSw2ICs2NywyNiBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0g
ewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAg
ICAqLworICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAg
ICAgICB2YXIgaXNBZGRpbmdSZXZpc2lvbiA9IHRoaXMuX2lzQWRkaW5nUmV2aXNpb247CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9pc0FkZGluZ1JldmlzaW9uOworCisgICAgICAgIGlmIChpc0FkZGlu
Z1JldmlzaW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJJbnNwZWN0b3IuY3Nz
TW9kZWwucmVzb3VyY2VCaW5kaW5nKCkucmVxdWVzdFJlc291cmNlVVJMRm9yU3R5bGVTaGVldElk
KGV2ZW50LmRhdGEuc3R5bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKworICAgICAg
ICBmdW5jdGlvbiBjYWxsYmFjayh1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdXJs
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NN
b2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVybCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CisgICAgICov
CiAgICAgX2ZpbGVTYXZlRmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAg
dmFyIHNhc3NVUkwgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGV2ZW50LmRhdGEpOwpAQCAtOTYs
NyArMTE4LDEwIEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB2YXIgbmV3Q29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KHVybCk7CisgICAgICAgIHRoaXMuX2lzQWRkaW5nUmV2aXNpb24gPSB0cnVlOwog
ICAgICAgICB1aVNvdXJjZUNvZGUuYWRkUmV2aXNpb24obmV3Q29udGVudCk7CisgICAgICAgIC8v
IHRoaXMuX2lzQWRkaW5nUmV2aXNpb24gd2lsbCBiZSBkZWxldGVkIGluIHRoaXMuX3N0eWxlU2hl
ZXRDaGFuZ2VkKCkuCisgICAgICAgIHRoaXMuX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwKG5ld0Nv
bnRlbnQsIHVybCwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTE1LDU0ICsxNDAsMzUg
QEAgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICovCiAgICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRF
bmNvZGVkLCBtaW1lVHlwZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjb250ZW50KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQu
c3BsaXQoL1xyP1xuLyk7Ci0gICAgICAgICAgICB2YXIgZGVidWdJbmZvUmVnZXggPSAvQG1lZGlh
XHNcLXNhc3NcLWRlYnVnXC1pbmZve2ZpbGVuYW1le2ZvbnQtZmFtaWx5OihbXn1dKyl9bGluZXtm
b250LWZhbWlseTpcXDAwMDAoXGRcZCkoW159XSopfX0vaTsKLSAgICAgICAgICAgIHZhciBsaW5l
TnVtYmVyc1JlZ2V4ID0gL1wvXCpccytsaW5lXHMrKFswLTldKyksXHMrKFteKlwvXSspLzsKLSAg
ICAgICAgICAgIGZvciAodmFyIGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgbGluZXMubGVu
Z3RoOyArK2xpbmVOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBkZWJ1Z0lu
Zm9SZWdleC5leGVjKGxpbmVzW2xpbmVOdW1iZXJdKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0
Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IG1hdGNoWzFdLnJlcGxhY2UoL1xc
KC4pL2csICIkMSIpOwotICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHBhcnNlSW50KGRl
Y29kZVVSSSgiJSIgKyBtYXRjaFsyXSkgKyBtYXRjaFszXSwgMTApOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKHVybCwgbGluZSwgcmVzb3VyY2UudXJsLCBsaW5l
TnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG1hdGNoID0gbGluZU51bWJlcnNSZWdleC5leGVjKGxpbmVzW2xp
bmVOdW1iZXJdKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAg
ICAgICAgdmFyIGZpbGVOYW1lID0gbWF0Y2hbMl0udHJpbSgpOwotICAgICAgICAgICAgICAgICAg
ICB2YXIgbGluZSA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciB1cmwgPSByZXNvdXJjZS51cmw7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuZW5k
c1dpdGgoIi8iICsgcmVzb3VyY2UucGFyc2VkVVJMLmxhc3RQYXRoQ29tcG9uZW50KSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxlbmd0aCAtIHJl
c291cmNlLnBhcnNlZFVSTC5sYXN0UGF0aENvbXBvbmVudC5sZW5ndGgpICsgZmlsZU5hbWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGZp
bGVOYW1lOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKHVybCwg
bGluZSwgcmVzb3VyY2UudXJsLCBsaW5lTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXAoY29udGVudCwgcmVzb3VyY2UudXJsKTsKICAgICAg
ICAgfQogICAgICAgICByZXNvdXJjZS5yZXF1ZXN0Q29udGVudChkaWRSZXF1ZXN0Q29udGVudC5i
aW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHVy
bAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHJh
d1VSTAotICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXdMaW5lCisgICAgICogQHBhcmFtIHs/c3Ry
aW5nfSBjb250ZW50CisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNzc1VSTAorICAgICAqIEBwYXJh
bSB7Ym9vbGVhbj19IGZvcmNlUmViaW5kCiAgICAgICovCi0gICAgX2JpbmRVSVNvdXJjZUNvZGU6
IGZ1bmN0aW9uKHVybCwgbGluZSwgcmF3VVJMLCByYXdMaW5lKQorICAgIF9sb2FkQW5kUHJvY2Vz
c1NvdXJjZU1hcDogZnVuY3Rpb24oY29udGVudCwgY3NzVVJMLCBmb3JjZVJlYmluZCkKICAgICB7
Ci0gICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2Rl
Rm9yVVJMKHVybCk7Ci0gICAgICAgIGlmICghdWlTb3VyY2VDb2RlKSB7Ci0gICAgICAgICAgICB2
YXIgY29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHVybCk7Ci0gICAgICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIoV2ViSW5zcGVjdG9yLnJlc291cmNlVHlwZXMuU3R5
bGVzaGVldCwgY29udGVudCwgInRleHQveC1zY3NzIik7Ci0gICAgICAgICAgICB1aVNvdXJjZUNv
ZGUgPSB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIuYWRkRmlsZUZvclVSTCh1cmwsIGNv
bnRlbnRQcm92aWRlciwgdHJ1ZSk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
c2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOworICAgICAgICBpZiAoIWNvbnRlbnQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xy
P1xuLyk7CisgICAgICAgIGlmICghbGluZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGNvbnN0IHNvdXJjZU1hcFJlZ2V4ID0gL15cL1wqQCBzb3VyY2VNYXBwaW5nVVJM
PShbXlxzXSspXHMqXCpcLyQvOworICAgICAgICB2YXIgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5s
ZW5ndGggLSAxXTsKKyAgICAgICAgdmFyIG1hdGNoID0gbGFzdExpbmUubWF0Y2goc291cmNlTWFw
UmVnZXgpOworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLmxvYWRTb3VyY2VNYXBGb3JTdHlsZVNoZWV0KG1hdGNo
WzFdLCBjc3NVUkwsIGZvcmNlUmViaW5kKTsKKyAgICAgICAgaWYgKGZvcmNlUmViaW5kIHx8IChz
b3VyY2VNYXAgJiYgIXRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NVUkxdKSkgewor
ICAgICAgICAgICAgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VSTF0gPSBzb3Vy
Y2VNYXA7CisgICAgICAgICAgICB0aGlzLl9iaW5kVUlTb3VyY2VDb2RlKGNzc1VSTCwgc291cmNl
TWFwKTsKICAgICAgICAgfQotICAgICAgICB2YXIgcmF3TG9jYXRpb25TdHJpbmcgPSByYXdVUkwg
KyAiOiIgKyAocmF3TGluZSArIDEpOyAgLy8gTmV4dCBsaW5lIGFmdGVyIG1hcHBpbmcgbWV0YWlu
Zm8KLSAgICAgICAgdGhpcy5fdWlMb2NhdGlvbnNbcmF3TG9jYXRpb25TdHJpbmddID0gbmV3IFdl
Ykluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgbGluZSAtIDEsIDApOwotICAgICAg
ICB0aGlzLl9hZGRDU1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJsKTsKICAgICB9LAogCiAgICAg
LyoqCkBAIC0xODMsMTggKzE4OSw4NSBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcu
cHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30g
c291cmNlTWFwVVJMCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlU2hlZXRVUkwKKyAgICAg
KiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZVJlbG9hZAorICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5SYW5nZUJhc2VkU291cmNlTWFwfQorICAgICAqLworICAgIGxvYWRTb3VyY2VNYXBGb3JT
dHlsZVNoZWV0OiBmdW5jdGlvbihzb3VyY2VNYXBVUkwsIHN0eWxlU2hlZXRVUkwsIGZvcmNlUmVs
b2FkKQorICAgIHsKKyAgICAgICAgc291cmNlTWFwVVJMID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cC5wcm90b3R5cGUuX2Nhbm9uaWNhbGl6ZVVSTChzb3VyY2VNYXBVUkwsIHN0eWxlU2hlZXRVUkwp
OworICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwQnlVUkxbc291cmNlTWFw
VVJMXTsKKyAgICAgICAgaWYgKHNvdXJjZU1hcCAmJiAhZm9yY2VSZWxvYWQpCisgICAgICAgICAg
ICByZXR1cm4gc291cmNlTWFwOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogbWFrZSBzZW5kUmVxdWVzdCBhc3luYy4KKyAgICAgICAgICAgIHZhciByZXNwb25zZSA9IElu
c3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNvdXJjZU1hcFVS
TCk7CisgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQorICAg
ICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmluZGV4
T2YoJ1xuJykpOworICAgICAgICAgICAgdmFyIHBheWxvYWQgPSAvKiogQHR5cGUge1NvdXJjZU1h
cFYzfSAqLyBKU09OLnBhcnNlKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIHNvdXJjZU1hcCA9IG5l
dyBXZWJJbnNwZWN0b3IuUmFuZ2VCYXNlZFNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIHBheWxvYWQp
OworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZS5tZXNz
YWdlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHRoaXMu
X3NvdXJjZU1hcEJ5VVJMW3NvdXJjZU1hcFVSTF0gPSBzb3VyY2VNYXA7CisgICAgICAgIHJldHVy
biBzb3VyY2VNYXA7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBy
YXdVUkwKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwfSBz
b3VyY2VNYXAKKyAgICAgKi8KKyAgICBfYmluZFVJU291cmNlQ29kZTogZnVuY3Rpb24ocmF3VVJM
LCBzb3VyY2VNYXApCisgICAgeworICAgICAgICB2YXIgc291cmNlcyA9IHNvdXJjZU1hcC5zb3Vy
Y2VzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdmFyIHVybCA9IHNvdXJjZXNbaV07CisgICAgICAgICAgICB2YXIgdWlT
b3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSTCh1cmwpOworICAg
ICAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGVu
dCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7
CisgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
U3RhdGljQ29udGVudFByb3ZpZGVyKFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hl
ZXQsIGNvbnRlbnQsICJ0ZXh0L3gtc2NzcyIpOworICAgICAgICAgICAgICAgIHVpU291cmNlQ29k
ZSA9IHRoaXMuX25ldHdvcmtXb3Jrc3BhY2VQcm92aWRlci5hZGRGaWxlRm9yVVJMKHVybCwgY29u
dGVudFByb3ZpZGVyLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUuc2V0U291
cmNlTWFwcGluZyh0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hZGRDU1NVUkxmb3JTQVNT
VVJMKHJhd1VSTCwgdXJsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFdl
Ykluc3BlY3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VNYXBwaW5nKHJhd1VSTCwgdGhpcyk7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9ufSBs
b2NhdGlvbgorICAgICAqLworICAgIF9pZGVudGl0eU1hcHBpbmc6IGZ1bmN0aW9uKGxvY2F0aW9u
KQorICAgIHsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3dvcmtzcGFjZS51aVNv
dXJjZUNvZGVGb3JVUkwobG9jYXRpb24udXJsKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxvY2F0aW9uLmxpbmVOdW1iZXIsIGxvY2F0
aW9uLmNvbHVtbk51bWJlcik7CisgICAgfSwKKworICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlJhd0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5VSUxvY2F0aW9ufQogICAgICAqLwogICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9u
OiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBsb2NhdGlvbiA9IC8q
KiBAdHlwZSBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24gKi8gKHJhd0xvY2F0aW9uKTsKLSAgICAg
ICAgdmFyIHVpTG9jYXRpb24gPSB0aGlzLl91aUxvY2F0aW9uc1tsb2NhdGlvbi51cmwgKyAiOiIg
KyBsb2NhdGlvbi5saW5lTnVtYmVyXTsKLSAgICAgICAgaWYgKCF1aUxvY2F0aW9uKSB7Ci0gICAg
ICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZv
clVSTChsb2NhdGlvbi51cmwpOwotICAgICAgICAgICAgdWlMb2NhdGlvbiA9IG5ldyBXZWJJbnNw
ZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxvY2F0aW9uLmxpbmVOdW1iZXIsIDApOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB1aUxvY2F0aW9uOworICAgICAgICB2YXIgdWlSYW5n
ZTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZTsKKyAgICAgICAgdmFyIHNvdXJjZU1hcCA9IHRo
aXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTFtsb2NhdGlvbi51cmxdOworICAgICAgICBpZiAo
IXNvdXJjZU1hcCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pZGVudGl0eU1hcHBpbmcobG9j
YXRpb24pOworICAgICAgICB1aVJhbmdlID0gc291cmNlTWFwLmZpbmRTb3VyY2VSYW5nZShsb2Nh
dGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5OdW1iZXIpOworICAgICAgICBpZiAoIXVp
UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRlbnRpdHlNYXBwaW5nKGxvY2F0aW9u
KTsKKyAgICAgICAgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZv
clVSTCh1aVJhbmdlLnVybCk7CisgICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQorICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX2lkZW50aXR5TWFwcGluZyhsb2NhdGlvbik7CisKKyAgICAgICAgLy8g
TWFwIGEgY29tcGlsZWQgc291cmNlIHBvc2l0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIG9yaWdp
bmF0aW5nIHNvdXJjZSByYW5nZSBzdGFydCBwb3NpdGlvbi4KKyAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHVpUmFuZ2Uuc3RhcnRMaW5lLCB1
aVJhbmdlLnN0YXJ0Q29sdW1uKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMDYsMTMgKzI3OSwx
MyBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgIHVp
TG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyB3
aGVuIHVpIC0+IHJhdyBtYXBwaW5nIGhhcyBjbGllbnRzLgotICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5DU1NMb2NhdGlvbih1aVNvdXJjZUNvZGUuY29udGVudFVSTCgpIHx8ICIiLCBs
aW5lTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24o
dWlTb3VyY2VDb2RlLmNvbnRlbnRVUkwoKSB8fCAiIiwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
KTsKICAgICB9LAogCiAgICAgX3Jlc2V0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlz
Ll91aUxvY2F0aW9ucyA9IHt9OworICAgICAgICB0aGlzLl9zb3VyY2VNYXBCeVVSTCA9IHt9Owor
ICAgICAgICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkwgPSB7fTsKICAgICAgICAgdGhp
cy5fcG9wdWxhdGUoKTsKICAgICB9CiB9Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDcwZjY4MmYzOTlm
MjVlNGNhNjFkYjRlZDQ0MThmYTMzMmIyYjkyZTguLmQzMTk2NTQ0NzNmZTdiYjVlMDUzMTc1OGNh
OTM3NGViNjQyY2M1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtMzc2LDcgKzM3Niw3IEBAIFdlYklu
c3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc2Vj
dGlvbnNbMF0gPSB0aGlzLl9yZWJ1aWxkU2VjdGlvbnNGb3JTdHlsZVJ1bGVzKHN0eWxlUnVsZXMs
IHVzZWRQcm9wZXJ0aWVzLCAwLCBudWxsKTsKICAgICAgICAgdmFyIGFuY2hvckVsZW1lbnQgPSB0
aGlzLnNlY3Rpb25zWzBdLmluaGVyaXRlZFByb3BlcnRpZXNTZXBhcmF0b3JFbGVtZW50OwogCi0g
ICAgICAgIGlmIChzdHlsZXMuY29tcHV0ZWRTdHlsZSkgICAgICAgIAorICAgICAgICBpZiAoc3R5
bGVzLmNvbXB1dGVkU3R5bGUpCiAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zWzBdWzBdLnJlYnVp
bGRDb21wdXRlZFRyYWNlKHRoaXMuc2VjdGlvbnNbMF0pOwogCiAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3R5bGVzLnBzZXVkb0VsZW1lbnRzLmxlbmd0aDsgKytpKSB7CkBAIC0yMDM2LDcg
KzIwMzYsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKIAogICAgICAgICBpZiAoZXZlbnQu
dGFyZ2V0ID09PSB0aGlzLmxpc3RJdGVtRWxlbWVudCkgewotICAgICAgICAgICAgaWYgKCF0aGlz
LnNlY3Rpb24uZWRpdGFibGUpIAorICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3Rpb24uZWRpdGFi
bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAodGhpcy5zZWN0
aW9uLl9jaGVja1dpbGxDYW5jZWxFZGl0aW5nKCkpCkBAIC0yMDQ1LDkgKzIwNDUsNjAgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50KSkgeworICAgICAgICAgICAgdGhp
cy5fbmF2aWdhdGVUb1NvdXJjZShldmVudC50YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKICAgICAgICAgdGhpcy5zdGFydEVkaXRpbmcoZXZlbnQudGFyZ2V0KTsKICAg
ICB9LAogCisgICAgX3Nob3dSYXdDU1NMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCisg
ICAgeworICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5jc3NNb2RlbC5yYXdM
b2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7CisgICAgICAgIHZhciB1aVNvdXJjZUNv
ZGUgPSB1aUxvY2F0aW9uID8gdWlMb2NhdGlvbi51aVNvdXJjZUNvZGUgOiBXZWJJbnNwZWN0b3Iu
d29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSTChyYXdMb2NhdGlvbi51cmwpOworICAgICAgICB2
YXIgbGluZU51bWJlciA9IHVpTG9jYXRpb24gPyB1aUxvY2F0aW9uLmxpbmVOdW1iZXIgOiByYXdM
b2NhdGlvbi5saW5lTnVtYmVyOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJzY3Jp
cHRzIikuc2hvd1VJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIpOworICAgIH0s
CisKKyAgICBfcmF3Q1NTTG9jYXRpb246IGZ1bmN0aW9uKGlzUHJvcGVydHlOYW1lKQorICAgIHsK
KyAgICAgICAgLy8gRW5kIG9mIHJhbmdlIGlzIGV4Y2x1c2l2ZSwgc28gc3VidHJhY3QgMSBmcm9t
IHRoZSBlbmQgb2Zmc2V0LgorICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnN0eWxlLnJhbmdl
LnN0YXJ0ICsgKGlzUHJvcGVydHlOYW1lID8gdGhpcy5wcm9wZXJ0eS5yYW5nZS5zdGFydCA6IHRo
aXMucHJvcGVydHkucmFuZ2UuZW5kIC0gMSk7CisgICAgICAgIGlmICghaXNQcm9wZXJ0eU5hbWUg
JiYgdGhpcy5wcm9wZXJ0eS50ZXh0ICYmIHRoaXMucHJvcGVydHkudGV4dC5lbmRzV2l0aCgiOyIp
KQorICAgICAgICAgICAgcG9zaXRpb24gLT0gMTsKKyAgICAgICAgdmFyIGxvY2F0aW9uID0gV2Vi
SW5zcGVjdG9yLkZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24odGhpcy5zZWN0aW9uLl9saW5l
RW5kaW5ncywgcG9zaXRpb24pOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NM
b2NhdGlvbih0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMLCBsb2NhdGlvblswXSwgbG9j
YXRpb25bMV0pOworICAgIH0sCisKKyAgICBfbmF2aWdhdGVUb1NvdXJjZTogZnVuY3Rpb24oZWxl
bWVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5zdHlsZS5wYXJlbnRSdWxlIHx8ICF0aGlz
LnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMIHx8ICF0aGlzLnN0eWxlLnJhbmdlIHx8ICF0aGlz
LnByb3BlcnR5LnJhbmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBwcm9w
ZXJ0eU5hbWVDbGlja2VkID0gZWxlbWVudCA9PT0gdGhpcy5uYW1lRWxlbWVudDsKKworICAgICAg
ICB2YXIgdWlTb3VyY2VDb2RlID0gV2ViSW5zcGVjdG9yLndvcmtzcGFjZS51aVNvdXJjZUNvZGVG
b3JVUkwodGhpcy5zdHlsZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCk7CisgICAgICAgIGlmICghdWlT
b3VyY2VDb2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLnNlY3Rp
b24uX2xpbmVFbmRpbmdzKSB7CisgICAgICAgICAgICB0aGlzLl9zaG93UmF3Q1NTTG9jYXRpb24o
dGhpcy5fcmF3Q1NTTG9jYXRpb24ocHJvcGVydHlOYW1lQ2xpY2tlZCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdWlTb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50
KGRpZFJlcXVlc3RDb250ZW50LmJpbmQodGhpcykpOworCisgICAgICAgIGZ1bmN0aW9uIGRpZFJl
cXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFjb250ZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgdGhpcy5zZWN0aW9uLl9saW5lRW5kaW5ncyA9IGNvbnRlbnQubGluZUVuZGlu
Z3MoKTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dSYXdDU1NMb2NhdGlvbih0aGlzLl9yYXdDU1NM
b2NhdGlvbihwcm9wZXJ0eU5hbWVDbGlja2VkKSk7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAg
X2lzTmFtZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4g
ZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtY3NzLXByb3BlcnR5
IikgPT09IHRoaXMubmFtZUVsZW1lbnQ7CkBAIC0yNDYxLDkgKzI1MTIsMTEgQEAgV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAg
IGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAgICAgICAgICAgICB0aGlzLl9uZXdQcm9wZXJ0
eUluU3R5bGUgPSB0cnVlOworICAgICAgICAgICAgbmV3U3R5bGUucGFyZW50UnVsZSA9IHRoaXMu
c3R5bGUucGFyZW50UnVsZTsKICAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsKICAg
ICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBuZXdTdHlsZS5wcm9wZXJ0eUF0KHRoaXMucHJvcGVy
dHkuaW5kZXgpOwogICAgICAgICAgICAgdGhpcy5fc3R5bGVSdWxlLnN0eWxlID0gdGhpcy5zdHls
ZTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlY3Rpb24uX2xpbmVFbmRpbmdzOwogCiAgICAg
ICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLnBhbmUpCiAgICAgICAgICAgICAgICAgc2Vj
dGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVkIik7CkBAIC0y
NTU2LDcgKzI2MDksNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVy
dHlQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgLy8gU3ludGhlc2l6ZSBwcm9wZXJ0
eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3aGl0ZXNwYWNlIGV0Yy4K
ICAgICAgICAgICAgIHRoaXMuX3NpZGViYXJQYW5lLmFwcGx5U3R5bGVUZXh0KHRoaXMuX3NpZGVi
YXJQYW5lLm5hbWVFbGVtZW50LnRleHRDb250ZW50ICsgIjogIiArIHRoaXMuX3NpZGViYXJQYW5l
LnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAg
IH0KLSAgICAKKwogICAgICAgICAvLyBIYW5kbGUgbnVtZXJpYyB2YWx1ZSBpbmNyZW1lbnQvZGVj
cmVtZW50IG9ubHkgYXQgdGhpcyBwb2ludC4KICAgICAgICAgaWYgKCF0aGlzLl9pc0VkaXRpbmdO
YW1lICYmIFdlYkluc3BlY3Rvci5oYW5kbGVFbGVtZW50VmFsdWVNb2RpZmljYXRpb25zKGV2ZW50
LCB0aGlzLl9zaWRlYmFyUGFuZS52YWx1ZUVsZW1lbnQsIGZpbmlzaEhhbmRsZXIuYmluZCh0aGlz
KSwgdGhpcy5faXNWYWx1ZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
ZWxlbWVudHNQYW5lbC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2Vs
ZW1lbnRzUGFuZWwuY3NzCmluZGV4IDlkZDFkNzgyMmNiOWYzOWEwMWI0ZTQ2ODg1YmRiMWJjMmU4
NDRiMGEuLjFiMTcxMjIyODY3ZDE1NzM5ZmQ5N2IwZDI4NzIwNWM4YWM5MmIzMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3MK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNz
cwpAQCAtMTY2LDYgKzE2NiwxMSBAQAogICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CiB9
CiAKKy5zdHlsZXMtc2VjdGlvbjpub3QoLnJlYWQtb25seSk6aG92ZXIgLnByb3BlcnRpZXMgbGkg
LndlYmtpdC1jc3MtcHJvcGVydHksCisuc3R5bGVzLXNlY3Rpb246bm90KC5yZWFkLW9ubHkpOmhv
dmVyIC5wcm9wZXJ0aWVzIGxpIC52YWx1ZSB7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRl
ZCBibGFjayAhaW1wb3J0YW50OworfQorCiAuc3R5bGVzLXNlY3Rpb246bm90KC5maXJzdC1zdHls
ZXMtc2VjdGlvbikgewogICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMTkxLCAxOTEsIDE5
MSk7CiB9CkBAIC0yNzUsNiArMjgwLDcgQEAKIAogLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVz
IGxpIHsKICAgICBtYXJnaW4tbGVmdDogMTJweDsKKyAgICBwYWRkaW5nLWJvdHRvbTogMXB4Owog
ICAgIHBhZGRpbmctbGVmdDogMjJweDsKICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgIHRl
eHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184448</attachid>
            <date>2013-01-24 02:30:53 -0800</date>
            <delta_ts>2013-01-28 03:49:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20130124142744.patch</filename>
            <type>text/plain</type>
            <size>27011</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI0MGI4MWQ1NDE4MmE5
YTI3NWM0ZWVhOWUyNjczZWM2OGVjYjYyZC4uNTc4ZGVlMWVkN2I5NGE5ZGNlMGQ3ZmExMDk3M2E1
ZjkzMzQ0Njg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAxLTI0ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHRyYWNrcyBwcm9wZXJ0
eSByYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgc291cmNlIGNvZGUgYW5kIENTUyBzb3VyY2UgbWFw
cGluZ3MKKyAgICAgICAgdG8gY29tcHV0ZSB0aGUgVUkgbG9jYXRpb24gb2YgQ1NTIHByb3BlcnR5
IG5hbWVzIGFuZCB2YWx1ZXMuIFRoZSBtYXBwaW5nIGlzIHJlbW92ZWQgdXBvbiBDU1Mgc3R5bGVz
aGVldCB1cGRhdGVzCisgICAgICAgIGFuZCB1cGRhdGVkL3Jlc3RvcmVkIHVwb24gcmVsb2FkIG9m
IENTUyBhZnRlciBhIFNBU1MgZmlsZSBoYXMgYmVlbiByZWxvYWRlZCAoZHVlIHRvIHNvdXJjZSBl
ZGl0cy4pCisgICAgICAgIFVzZXIgc2hvdWxkIEN0cmwvQ21kLWNsaWNrIHRoZSBkYXNoLXVuZGVy
bGluZWQgcHJvcGVydHkgbmFtZSBvciB2YWx1ZSBlbGVtZW50IHRvIG5hdmlnYXRlIHRvIHRoZSBy
ZXNwZWN0aXZlCisgICAgICAgIGxvY2F0aW9uIGluIGEgc291cmNlIGZpbGUuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9u
LnByb3RvdHlwZS51aUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU2NyaXB0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDaGFuZ2VkLmNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUu
X3N0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFw
cGluZy5wcm90b3R5cGUuX3JlbG9hZENTUyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJjZUFkZGVkLmRpZFJlcXVlc3RDb250ZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3Jlc291
cmNlQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3Rv
dHlwZS5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNB
U1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9iaW5kVUlT
b3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90
b3R5cGUuX2lkZW50aXR5TWFwcGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJj
ZU1hcHBpbmcucHJvdG90eXBlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUudWlMb2NhdGlvblRvUmF3TG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlw
ZS5fcmVzZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5sb2FkUGF5bG9hZCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2lubmVyUmVidWlsZFVwZGF0ZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3Rv
dHlwZS5lbGVtZW50LmNvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVy
dHlUcmVlRWxlbWVudC5wcm90b3R5cGUuaXNSZXZlcnQpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3M6CisgICAgICAgICguc3R5bGVzLXNlY3Rpb246bm90
KC5yZWFkLW9ubHkpOmhvdmVyIC5wcm9wZXJ0aWVzIGxpIC52YWx1ZSk6CisgICAgICAgICguc3R5
bGVzLXNlY3Rpb24gLnByb3BlcnRpZXMgbGkpOgorCiAyMDEzLTAxLTI0ICBLZW50YXJvIEhhcmEg
IDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBCdWlsZCBmaXgu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxl
TW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9k
ZWwuanMKaW5kZXggNjdiODdjOTQ4Y2RhMjUxZjdiMTI4ZWM0M2FiOTNmNjFiNGM3Y2JmMS4uYjdj
ZjA2MmIzMzRjMTljNTgzNTk0YjA0NWEwMzRhMTNhNDE0NzE5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpAQCAtNDk0LDcg
KzQ5NCwxMCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAg
ICovCiAgICAgc2V0U291cmNlTWFwcGluZzogZnVuY3Rpb24odXJsLCBzb3VyY2VNYXBwaW5nKQog
ICAgIHsKLSAgICAgICAgdGhpcy5fc291cmNlTWFwcGluZ3NbdXJsXSA9IHNvdXJjZU1hcHBpbmc7
CisgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nKQorICAgICAgICAgICAgdGhpcy5fc291cmNlTWFw
cGluZ3NbdXJsXSA9IHNvdXJjZU1hcHBpbmc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdOwogICAgICAgICB0aGlzLl91cGRhdGVMb2Nh
dGlvbnMoKTsKICAgICB9LAogCkBAIC01MTUsNiArNTE4LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0
eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5DU1NSdWxlfSBjc3NSdWxlCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihX
ZWJJbnNwZWN0b3IuVUlMb2NhdGlvbik6KGJvb2xlYW58dW5kZWZpbmVkKX0gdXBkYXRlRGVsZWdh
dGUKICAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLkxpdmVMb2NhdGlvbn0KICAgICAgKi8K
QEAgLTUzNCwxMCArNTM4LDE3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlw
ZSA9IHsKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbn0gcmF3TG9jYXRp
b24KICAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259CiAgICAgICovCi0g
ICAgX3Jhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKKyAgICBy
YXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewogICAg
ICAgICB2YXIgc291cmNlTWFwcGluZyA9IHRoaXMuX3NvdXJjZU1hcHBpbmdzW3Jhd0xvY2F0aW9u
LnVybF07Ci0gICAgICAgIHJldHVybiBzb3VyY2VNYXBwaW5nID8gc291cmNlTWFwcGluZy5yYXdM
b2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbikgOiBudWxsOworICAgICAgICBpZiAoIXNv
dXJjZU1hcHBpbmcpIHsKKyAgICAgICAgICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1h
cHBpbmcudXJpRm9yVVJMKHJhd0xvY2F0aW9uLnVybCk7CisgICAgICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlID0gV2ViSW5zcGVjdG9yLndvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsK
KyAgICAgICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNv
dXJjZUNvZGUsIHJhd0xvY2F0aW9uLmxpbmVOdW1iZXIsIHJhd0xvY2F0aW9uLmNvbHVtbk51bWJl
cik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNvdXJjZU1hcHBpbmcucmF3TG9jYXRpb25U
b1VJTG9jYXRpb24ocmF3TG9jYXRpb24pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTU4NCw3ICs1
OTUsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5MaXZlTG9jYXRpb24ucHJvdG90eXBl
ID0gewogICAgIHVpTG9jYXRpb246IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBjc3NM
b2NhdGlvbiA9IC8qKiBAdHlwZSBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24gKi8gKHRoaXMucmF3
TG9jYXRpb24oKSk7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuX3Jhd0xv
Y2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5jc3NNb2RlbC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihjc3NMb2NhdGlvbik7CiAgICAg
fSwKIAogICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKQEAgLTYwMywxMSArNjE0LDEzIEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlvbi5wcm90b3R5cGUgPSB7CiAgKiBAaW1w
bGVtZW50cyB7V2ViSW5zcGVjdG9yLlJhd0xvY2F0aW9ufQogICogQHBhcmFtIHtzdHJpbmd9IHVy
bAogICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAqIEBwYXJhbSB7bnVtYmVyPX0gY29s
dW1uTnVtYmVyCiAgKi8KLVdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCwg
bGluZU51bWJlcikKK1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiA9IGZ1bmN0aW9uKHVybCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyKQogewogICAgIHRoaXMudXJsID0gdXJsOwogICAgIHRoaXMu
bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5O
dW1iZXIgfHwgMDsKIH0KIAogLyoqCkBAIC04OTAsOCArOTAzLDkgQEAgV2ViSW5zcGVjdG9yLkNT
U1J1bGUucHJvdG90eXBlID0gewogICogQHBhcmFtIHtib29sZWFufSBwYXJzZWRPawogICogQHBh
cmFtIHtib29sZWFufSBpbXBsaWNpdAogICogQHBhcmFtIHs/c3RyaW5nPX0gdGV4dAorICogQHBh
cmFtIHtDU1NBZ2VudC5Tb3VyY2VSYW5nZT19IHJhbmdlCiAgKi8KLVdlYkluc3BlY3Rvci5DU1NQ
cm9wZXJ0eSA9IGZ1bmN0aW9uKG93bmVyU3R5bGUsIGluZGV4LCBuYW1lLCB2YWx1ZSwgcHJpb3Jp
dHksIHN0YXR1cywgcGFyc2VkT2ssIGltcGxpY2l0LCB0ZXh0KQorV2ViSW5zcGVjdG9yLkNTU1By
b3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0
eSwgc3RhdHVzLCBwYXJzZWRPaywgaW1wbGljaXQsIHRleHQsIHJhbmdlKQogewogICAgIHRoaXMu
b3duZXJTdHlsZSA9IG93bmVyU3R5bGU7CiAgICAgdGhpcy5pbmRleCA9IGluZGV4OwpAQCAtOTAy
LDYgKzkxNiw3IEBAIFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eSA9IGZ1bmN0aW9uKG93bmVyU3R5
bGUsIGluZGV4LCBuYW1lLCB2YWx1ZSwgcHJpb3JpdHksIHN0CiAgICAgdGhpcy5wYXJzZWRPayA9
IHBhcnNlZE9rOwogICAgIHRoaXMuaW1wbGljaXQgPSBpbXBsaWNpdDsKICAgICB0aGlzLnRleHQg
PSB0ZXh0OworICAgIHRoaXMucmFuZ2UgPSByYW5nZTsKIH0KIAogLyoqCkBAIC05MTgsNyArOTMz
LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCA9IGZ1bmN0aW9uKG93
bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkKQogICAgIC8vIGltcGxpY2l0OiBmYWxzZQogICAgIC8v
IHN0YXR1czogInN0eWxlIgogICAgIHZhciByZXN1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1By
b3BlcnR5KAotICAgICAgICBvd25lclN0eWxlLCBpbmRleCwgcGF5bG9hZC5uYW1lLCBwYXlsb2Fk
LnZhbHVlLCBwYXlsb2FkLnByaW9yaXR5IHx8ICIiLCBwYXlsb2FkLnN0YXR1cyB8fCAic3R5bGUi
LCAoInBhcnNlZE9rIiBpbiBwYXlsb2FkKSA/ICEhcGF5bG9hZC5wYXJzZWRPayA6IHRydWUsICEh
cGF5bG9hZC5pbXBsaWNpdCwgcGF5bG9hZC50ZXh0KTsKKyAgICAgICAgb3duZXJTdHlsZSwgaW5k
ZXgsIHBheWxvYWQubmFtZSwgcGF5bG9hZC52YWx1ZSwgcGF5bG9hZC5wcmlvcml0eSB8fCAiIiwg
cGF5bG9hZC5zdGF0dXMgfHwgInN0eWxlIiwgKCJwYXJzZWRPayIgaW4gcGF5bG9hZCkgPyAhIXBh
eWxvYWQucGFyc2VkT2sgOiB0cnVlLCAhIXBheWxvYWQuaW1wbGljaXQsIHBheWxvYWQudGV4dCwg
cGF5bG9hZC5yYW5nZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGlu
Zy5qcwppbmRleCA3MjM2ZGNmYjhjZWI4MTE1MmRmZWEzNDVhNDliNTFkOGRiNTQ2ODRiLi5mYzU1
MzEzYjRmNTQzMWE4YTU2Yjc5N2IwZjljZThkNzhlMTFhYWFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0TWFwcGlu
Zy5qcwpAQCAtMTUzLDIyICsxNTMsMTUgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFw
cGluZy5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgbG9hZFNvdXJjZU1hcEZvclNjcmlwdDog
ZnVuY3Rpb24oc2NyaXB0KQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZU1hcFVSTCA9IFdlYklu
c3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwLnByb3RvdHlwZS5fY2Fub25pY2FsaXplVVJM
KHNjcmlwdC5zb3VyY2VNYXBVUkwsIHNjcmlwdC5zb3VyY2VVUkwpOworICAgICAgICB2YXIgc291
cmNlTWFwVVJMID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX2Nhbm9uaWNhbGl6
ZVVSTChzY3JpcHQuc291cmNlTWFwVVJMLCBzY3JpcHQuc291cmNlVVJMKTsKICAgICAgICAgdmFy
IHNvdXJjZU1hcCA9IHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBVUkxd
OwogICAgICAgICBpZiAoc291cmNlTWFwKQogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1hcDsK
IAotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gRklYTUU6IG1ha2Ugc2VuZFJlcXVlc3Qg
YXN5bmMuCi0gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzb3VyY2VNYXBVUkwpOwotICAgICAgICAgICAgaWYg
KHJlc3BvbnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikKLSAgICAgICAgICAgICAgICByZXNwb25z
ZSA9IHJlc3BvbnNlLnN1YnN0cmluZyhyZXNwb25zZS5pbmRleE9mKCdcbicpKTsKLSAgICAgICAg
ICAgIHZhciBwYXlsb2FkID0gLyoqIEB0eXBlIHtTb3VyY2VNYXBWM30gKi8gKEpTT04ucGFyc2Uo
cmVzcG9uc2UpKTsKLSAgICAgICAgICAgIHNvdXJjZU1hcCA9IG5ldyBXZWJJbnNwZWN0b3IuUG9z
aXRpb25CYXNlZFNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIHBheWxvYWQpOwotICAgICAgICB9IGNh
dGNoKGUpIHsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZS5tZXNzYWdlKTsKKyAgICAgICAg
dmFyIHBheWxvYWQgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKHNvdXJjZU1h
cFVSTCk7CisgICAgICAgIGlmICghcGF5bG9hZCkKICAgICAgICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgICB9CisgICAgICAgIHNvdXJjZU1hcCA9IG5ldyBXZWJJbnNwZWN0b3IuUG9zaXRpb25C
YXNlZFNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIHBheWxvYWQpOwogICAgICAgICB0aGlzLl9zb3Vy
Y2VNYXBGb3JTb3VyY2VNYXBVUkxbc291cmNlTWFwVVJMXSA9IHNvdXJjZU1hcDsKICAgICAgICAg
cmV0dXJuIHNvdXJjZU1hcDsKICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU0FTU1NvdXJjZU1hcHBpbmcuanMKaW5kZXggOGE4Zjc2ZGU2NjBm
ZDc3Nzk3NDU3MTNiZDkxMTI4MThiZThhZWM0My4uYmM5ZDMyZTEwOWI5ZTYyZTE5OWExZmM5Y2Qw
YWU1YjRmNDNlZDc4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzCkBAIC0zOCwxMSArMzgsMTMgQEAgV2ViSW5z
cGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24od29ya3NwYWNlLCBuZXR3b3JrV29y
a3NwYWNlUHJvdmlkZXIpCiB7CiAgICAgdGhpcy5fd29ya3NwYWNlID0gd29ya3NwYWNlOwogICAg
IHRoaXMuX25ldHdvcmtXb3Jrc3BhY2VQcm92aWRlciA9IG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRl
cjsKLSAgICB0aGlzLl9tYXBwaW5nRW50cmllcyA9IHt9OworICAgIHRoaXMuX3NvdXJjZU1hcEJ5
VVJMID0ge307CisgICAgdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMID0ge307CiAgICAg
dGhpcy5fY3NzVVJMc0ZvclNBU1NVUkwgPSB7fTsKICAgICB0aGlzLl90aW1lb3V0Rm9yVVJMID0g
e307CiAgICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLkV2ZW50VHlwZXMuUmVzb3VyY2VBZGRlZCwg
dGhpcy5fcmVzb3VyY2VBZGRlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmZpbGVNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbGVNYW5hZ2VyLkV2ZW50VHlwZXMuU2F2
ZWRVUkwsIHRoaXMuX2ZpbGVTYXZlRmluaXNoZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5j
c3NNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkV2ZW50
cy5TdHlsZVNoZWV0Q2hhbmdlZCwgdGhpcy5fc3R5bGVTaGVldENoYW5nZWQsIHRoaXMpOwogICAg
IHRoaXMuX3dvcmtzcGFjZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Xb3Jrc3BhY2Uu
RXZlbnRzLlByb2plY3RXaWxsUmVzZXQsIHRoaXMuX3Jlc2V0LCB0aGlzKTsKIH0KIApAQCAtNjUs
NiArNjcsMjYgQEAgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsK
ICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0gZXZlbnQKICAgICAg
Ki8KKyAgICBfc3R5bGVTaGVldENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAg
ICAgdmFyIGlzQWRkaW5nUmV2aXNpb24gPSB0aGlzLl9pc0FkZGluZ1JldmlzaW9uOworICAgICAg
ICBkZWxldGUgdGhpcy5faXNBZGRpbmdSZXZpc2lvbjsKKworICAgICAgICBpZiAoaXNBZGRpbmdS
ZXZpc2lvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01v
ZGVsLnJlc291cmNlQmluZGluZygpLnJlcXVlc3RSZXNvdXJjZVVSTEZvclN0eWxlU2hlZXRJZChl
dmVudC5kYXRhLnN0eWxlU2hlZXRJZCwgY2FsbGJhY2suYmluZCh0aGlzKSk7CisKKyAgICAgICAg
ZnVuY3Rpb24gY2FsbGJhY2sodXJsKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXVybCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9k
ZWwuc2V0U291cmNlTWFwcGluZyh1cmwsIG51bGwpOworICAgICAgICB9CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAorICAgICAqLwog
ICAgIF9maWxlU2F2ZUZpbmlzaGVkOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIC8v
IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgRmlsZU1hcHBpbmcuCkBAIC05OCw3ICsxMjAsMTAgQEAg
V2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYg
KCF1aVNvdXJjZUNvZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZhciBuZXdDb250
ZW50ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJs
KTsKKyAgICAgICAgdGhpcy5faXNBZGRpbmdSZXZpc2lvbiA9IHRydWU7CiAgICAgICAgIHVpU291
cmNlQ29kZS5hZGRSZXZpc2lvbihuZXdDb250ZW50KTsKKyAgICAgICAgLy8gdGhpcy5faXNBZGRp
bmdSZXZpc2lvbiB3aWxsIGJlIGRlbGV0ZWQgaW4gdGhpcy5fc3R5bGVTaGVldENoYW5nZWQoKS4K
KyAgICAgICAgdGhpcy5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXAobmV3Q29udGVudCwgdXJsLCB0
cnVlKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0xMTcsNTQgKzE0MiwzNSBAQCBXZWJJbnNwZWN0
b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAgICAgKi8KICAgICAgICAg
ZnVuY3Rpb24gZGlkUmVxdWVzdENvbnRlbnQoY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVU
eXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRlbnQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgdmFyIGxpbmVzID0gY29udGVudC5zcGxpdCgvXHI/XG4v
KTsKLSAgICAgICAgICAgIHZhciBkZWJ1Z0luZm9SZWdleCA9IC9AbWVkaWFcc1wtc2Fzc1wtZGVi
dWdcLWluZm97ZmlsZW5hbWV7Zm9udC1mYW1pbHk6KFtefV0rKX1saW5le2ZvbnQtZmFtaWx5Olxc
MDAwMChcZFxkKShbXn1dKil9fS9pOwotICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXJzUmVnZXgg
PSAvXC9cKlxzK2xpbmVccysoWzAtOV0rKSxccysoW14qXC9dKykvOwotICAgICAgICAgICAgZm9y
ICh2YXIgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBsaW5lcy5sZW5ndGg7ICsrbGluZU51
bWJlcikgewotICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGRlYnVnSW5mb1JlZ2V4LmV4ZWMo
bGluZXNbbGluZU51bWJlcl0pOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgdXJsID0gbWF0Y2hbMV0ucmVwbGFjZSgvXFwoLikvZywgIiQxIik7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gcGFyc2VJbnQoZGVjb2RlVVJJKCIlIiAr
IG1hdGNoWzJdKSArIG1hdGNoWzNdLCAxMCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Fk
ZFVSTE1hcHBpbmcodXJsLCBsaW5lLCByZXNvdXJjZS51cmwsIGxpbmVOdW1iZXIpOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbWF0Y2ggPSBsaW5lTnVtYmVyc1JlZ2V4LmV4ZWMobGluZXNbbGluZU51bWJlcl0pOwotICAg
ICAgICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZU5h
bWUgPSBtYXRjaFsyXS50cmltKCk7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gcGFy
c2VJbnQobWF0Y2hbMV0sIDEwKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHJlc291
cmNlLnVybDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVybC5lbmRzV2l0aCgiLyIgKyByZXNv
dXJjZS5wYXJzZWRVUkwubGFzdFBhdGhDb21wb25lbnQpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdXJsID0gdXJsLnN1YnN0cmluZygwLCB1cmwubGVuZ3RoIC0gcmVzb3VyY2UucGFyc2VkVVJM
Lmxhc3RQYXRoQ29tcG9uZW50Lmxlbmd0aCkgKyBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gZmlsZU5hbWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2FkZFVSTE1hcHBpbmcodXJsLCBsaW5lLCByZXNvdXJjZS51cmws
IGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLl9sb2FkQW5kUHJvY2Vzc1Nv
dXJjZU1hcChjb250ZW50LCByZXNvdXJjZS51cmwpOwogICAgICAgICB9CiAgICAgICAgIHJlc291
cmNlLnJlcXVlc3RDb250ZW50KGRpZFJlcXVlc3RDb250ZW50LmJpbmQodGhpcykpOwogICAgIH0s
CiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBhcmFtIHtu
dW1iZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3VVJMCi0gICAgICogQHBhcmFt
IHtudW1iZXJ9IHJhd0xpbmUKKyAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gY3NzVVJMCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gZm9yY2VS
ZWJpbmQKICAgICAgKi8KLSAgICBfYWRkVVJMTWFwcGluZzogZnVuY3Rpb24odXJsLCBsaW5lLCBy
YXdVUkwsIHJhd0xpbmUpCisgICAgX2xvYWRBbmRQcm9jZXNzU291cmNlTWFwOiBmdW5jdGlvbihj
b250ZW50LCBjc3NVUkwsIGZvcmNlUmViaW5kKQogICAgIHsKLSAgICAgICAgdmFyIHVyaSA9IFdl
Ykluc3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwodXJsKTsKLSAgICAgICAgaWYgKCFXZWJJ
bnNwZWN0b3IuZmlsZU1hcHBpbmcuaGFzTWFwcGluZ0ZvclVSTCh1cmwpICYmICF0aGlzLl93b3Jr
c3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVyaSkpIHsKLSAgICAgICAgICAgIHZhciBjb250ZW50
ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsK
LSAgICAgICAgICAgIHZhciBjb250ZW50UHJvdmlkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXRp
Y0NvbnRlbnRQcm92aWRlcihXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0LCBj
b250ZW50LCAidGV4dC94LXNjc3MiKTsKLSAgICAgICAgICAgIHRoaXMuX25ldHdvcmtXb3Jrc3Bh
Y2VQcm92aWRlci5hZGRGaWxlRm9yVVJMKHVybCwgY29udGVudFByb3ZpZGVyLCB0cnVlKTsKKyAg
ICAgICAgaWYgKCFjb250ZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbGlu
ZXMgPSBjb250ZW50LnNwbGl0KC9ccj9cbi8pOworICAgICAgICBpZiAoIWxpbmVzLmxlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBzb3VyY2VNYXBSZWdleCA9IC9e
XC9cKkAgc291cmNlTWFwcGluZ1VSTD0oW15cc10rKVxzKlwqXC8kLzsKKyAgICAgICAgdmFyIGxh
c3RMaW5lID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07CisgICAgICAgIHZhciBtYXRjaCA9IGxh
c3RMaW5lLm1hdGNoKHNvdXJjZU1hcFJlZ2V4KTsKKyAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5sb2FkU291cmNl
TWFwRm9yU3R5bGVTaGVldChtYXRjaFsxXSwgY3NzVVJMLCBmb3JjZVJlYmluZCk7CisgICAgICAg
IGlmIChmb3JjZVJlYmluZCB8fCAoc291cmNlTWFwICYmICF0aGlzLl9zb3VyY2VNYXBCeVN0eWxl
U2hlZXRVUkxbY3NzVVJMXSkpIHsKKyAgICAgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVT
aGVldFVSTFtjc3NVUkxdID0gc291cmNlTWFwOworICAgICAgICAgICAgdGhpcy5fYmluZFVJU291
cmNlQ29kZShjc3NVUkwsIHNvdXJjZU1hcCk7CiAgICAgICAgIH0KLSAgICAgICAgdmFyIHJhd0xv
Y2F0aW9uU3RyaW5nID0gcmF3VVJMICsgIjoiICsgKHJhd0xpbmUgKyAxKTsgIC8vIE5leHQgbGlu
ZSBhZnRlciBtYXBwaW5nIG1ldGFpbmZvCi0gICAgICAgIHRoaXMuX21hcHBpbmdFbnRyaWVzW3Jh
d0xvY2F0aW9uU3RyaW5nXSA9IG5ldyBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcuTWFw
cGluZ0VudHJ5KHVyaSwgbGluZSAtIDEsIDApOwotICAgICAgICB0aGlzLl9hZGRDU1NVUkxmb3JT
QVNTVVJMKHJhd1VSTCwgdXJsKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLnNldFNv
dXJjZU1hcHBpbmcocmF3VVJMLCB0aGlzKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0xODUsMjYg
KzE5MSw4MSBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewog
ICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlTWFwVVJMCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlU2hlZXRVUkwKKyAgICAgKiBAcGFyYW0ge2Jvb2xl
YW49fSBmb3JjZVJlbG9hZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5SYW5nZUJhc2Vk
U291cmNlTWFwfQorICAgICAqLworICAgIGxvYWRTb3VyY2VNYXBGb3JTdHlsZVNoZWV0OiBmdW5j
dGlvbihzb3VyY2VNYXBVUkwsIHN0eWxlU2hlZXRVUkwsIGZvcmNlUmVsb2FkKQorICAgIHsKKyAg
ICAgICAgc291cmNlTWFwVVJMID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5wcm90b3R5cGUuX2Nh
bm9uaWNhbGl6ZVVSTChzb3VyY2VNYXBVUkwsIHN0eWxlU2hlZXRVUkwpOworICAgICAgICB2YXIg
c291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwQnlVUkxbc291cmNlTWFwVVJMXTsKKyAgICAgICAg
aWYgKHNvdXJjZU1hcCAmJiAhZm9yY2VSZWxvYWQpCisgICAgICAgICAgICByZXR1cm4gc291cmNl
TWFwOworCisgICAgICAgIHZhciBwYXlsb2FkID0gV2ViSW5zcGVjdG9yLlNvdXJjZU1hcC5sb2Fk
UGF5bG9hZChzb3VyY2VNYXBVUkwpOworICAgICAgICBpZiAoIXBheWxvYWQpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgc291cmNlTWFwID0gbmV3IFdlYkluc3BlY3Rvci5SYW5n
ZUJhc2VkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgcGF5bG9hZCk7CisgICAgICAgIHRoaXMuX3Nv
dXJjZU1hcEJ5VVJMW3NvdXJjZU1hcFVSTF0gPSBzb3VyY2VNYXA7CisgICAgICAgIHJldHVybiBz
b3VyY2VNYXA7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdV
UkwKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SYW5nZUJhc2VkU291cmNlTWFwfSBzb3Vy
Y2VNYXAKKyAgICAgKi8KKyAgICBfYmluZFVJU291cmNlQ29kZTogZnVuY3Rpb24ocmF3VVJMLCBz
b3VyY2VNYXApCisgICAgeworICAgICAgICB2YXIgc291cmNlcyA9IHNvdXJjZU1hcC5zb3VyY2Vz
KCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgdmFyIHVybCA9IHNvdXJjZXNbaV07CisgICAgICAgICAgICB2YXIgdXJpID0g
V2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVSTCh1cmwpOworICAgICAgICAgICAgaWYg
KCFXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcuaGFzTWFwcGluZ0ZvclVSTCh1cmwpICYmICF0aGlz
Ll93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVyaSkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29udGVudCA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHVybCk7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuU3RhdGljQ29udGVudFByb3ZpZGVyKFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVz
LlN0eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0L3gtc2NzcyIpOworICAgICAgICAgICAgICAgIHZh
ciB1aVNvdXJjZUNvZGUgPSB0aGlzLl9uZXR3b3JrV29ya3NwYWNlUHJvdmlkZXIuYWRkRmlsZUZv
clVSTCh1cmwsIGNvbnRlbnRQcm92aWRlciwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdWlTb3Vy
Y2VDb2RlLnNldFNvdXJjZU1hcHBpbmcodGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fYWRk
Q1NTVVJMZm9yU0FTU1VSTChyYXdVUkwsIHVybCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0U291cmNlTWFwcGluZyhyYXdVUkws
IHRoaXMpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5D
U1NMb2NhdGlvbn0gbG9jYXRpb24KKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2Nh
dGlvbn0KKyAgICAgKi8KKyAgICBfaWRlbnRpdHlNYXBwaW5nOiBmdW5jdGlvbihsb2NhdGlvbikK
KyAgICB7CisgICAgICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9y
VVJMKGxvY2F0aW9uLnVybCk7CisgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jr
c3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVyaSk7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBsb2NhdGlvbi5saW5lTnVtYmVyLCBsb2Nh
dGlvbi5jb2x1bW5OdW1iZXIpOworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5SYXdMb2NhdGlvbn0gcmF3TG9jYXRpb24KICAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuVUlMb2NhdGlvbn0KICAgICAgKi8KICAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlv
bjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgewogICAgICAgICB2YXIgbG9jYXRpb24gPSAv
KiogQHR5cGUgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uICovIChyYXdMb2NhdGlvbik7Ci0gICAg
ICAgIHZhciBtYXBwaW5nRW50cnkgPSB0aGlzLl9tYXBwaW5nRW50cmllc1tsb2NhdGlvbi51cmwg
KyAiOiIgKyBsb2NhdGlvbi5saW5lTnVtYmVyXTsKLSAgICAgICAgdmFyIHVpTG9jYXRpb24gPSBu
dWxsOwotICAgICAgICBpZiAobWFwcGluZ0VudHJ5KSB7Ci0gICAgICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSShtYXBwaW5nRW50cnku
dXJpKTsKLSAgICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGUpCi0gICAgICAgICAgICAgICAgdWlM
b2NhdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIG1hcHBp
bmdFbnRyeS5saW5lTnVtYmVyLCBtYXBwaW5nRW50cnkuY29sdW1uTnVtYmVyKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIXVpTG9jYXRpb24pIHsKLSAgICAgICAgICAgIHZhciB1cmkgPSBXZWJJ
bnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKGxvY2F0aW9uLnVybCk7Ci0gICAgICAgICAg
ICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSh1
cmkpOwotICAgICAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKLSAgICAgICAgICAgICAgICB1aUxv
Y2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgbG9jYXRp
b24ubGluZU51bWJlciwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHVpTG9jYXRpb247
CisgICAgICAgIHZhciB1aVJhbmdlOworICAgICAgICB2YXIgdWlTb3VyY2VDb2RlOworICAgICAg
ICB2YXIgc291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwQnlTdHlsZVNoZWV0VVJMW2xvY2F0aW9u
LnVybF07CisgICAgICAgIGlmICghc291cmNlTWFwKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2lkZW50aXR5TWFwcGluZyhsb2NhdGlvbik7CisgICAgICAgIHVpUmFuZ2UgPSBzb3VyY2VNYXAu
ZmluZFNvdXJjZVJhbmdlKGxvY2F0aW9uLmxpbmVOdW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJl
cik7CisgICAgICAgIGlmICghdWlSYW5nZSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9pZGVu
dGl0eU1hcHBpbmcobG9jYXRpb24pOworICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZp
bGVNYXBwaW5nLnVyaUZvclVSTCh1aVJhbmdlLnVybCk7CisgICAgICAgIHVpU291cmNlQ29kZSA9
IHRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsKKyAgICAgICAgaWYgKCF1
aVNvdXJjZUNvZGUpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5faWRlbnRpdHlNYXBwaW5nKGxv
Y2F0aW9uKTsKKworICAgICAgICAvLyBNYXAgYSBjb21waWxlZCBzb3VyY2UgcG9zaXRpb24gdG8g
dGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYXRpbmcgc291cmNlIHJhbmdlIHN0YXJ0IHBvc2l0aW9u
LgorICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29k
ZSwgdWlSYW5nZS5zdGFydExpbmUsIHVpUmFuZ2Uuc3RhcnRDb2x1bW4pOwogICAgIH0sCiAKICAg
ICAvKioKQEAgLTIxNiwyNSArMjc3LDEzIEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGlu
Zy5wcm90b3R5cGUgPSB7CiAgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVp
U291cmNlQ29kZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIHdoZW4gdWkgLT4gcmF3IG1hcHBpbmcgaGFzIGNsaWVudHMu
Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uKHVpU291cmNlQ29k
ZS51cmwgfHwgIiIsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5DU1NMb2NhdGlvbih1aVNvdXJjZUNvZGUudXJsIHx8ICIiLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIpOwogICAgIH0sCiAKICAgICBfcmVzZXQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAg
IHRoaXMuX21hcHBpbmdFbnRyaWVzID0ge307CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5VVJM
ID0ge307CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcEJ5U3R5bGVTaGVldFVSTCA9IHt9OwogICAg
ICAgICB0aGlzLl9wb3B1bGF0ZSgpOwogICAgIH0KIH0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqIEBwYXJhbSB7c3RyaW5nfSB1cmkKLSAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0g
Ki8KLVdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5NYXBwaW5nRW50cnkgPSBmdW5jdGlv
bih1cmksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLXsKLSAgICB0aGlzLnVyaSA9IHVyaTsK
LSAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgIHRoaXMuY29sdW1uTnVtYmVy
ID0gY29sdW1uTnVtYmVyOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZU1hcC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlTWFwLmpzCmluZGV4IDA2ZjMxMTk1MjQyM2M3ODYyMWU1ZDA2YjVjNDczMWJk
ZWQzZmY4MDUuLjUxZjE2MDMxNjYxN2VlMWY1OWQxNzVjZTM0MDg2MTk2Nzg2MzJjM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpzCkBAIC01
MSw2ICs1MSwyNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlTWFwID0gZnVuY3Rpb24oc291cmNlTWFw
cGluZ1VSTCwgcGF5bG9hZCkKICAgICB0aGlzLl9wYXJzZU1hcHBpbmdQYXlsb2FkKHBheWxvYWQp
OwogfQogCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAqIEByZXR1cm4ge1NvdXJjZU1h
cFYzfQorICovCitXZWJJbnNwZWN0b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkID0gZnVuY3Rpb24o
dXJsKQoreworICAgIHRyeSB7CisgICAgICAgIC8vIEZJWE1FOiBtYWtlIHNlbmRSZXF1ZXN0IGFz
eW5jLgorICAgICAgICB2YXIgcmVzcG9uc2UgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZFJl
c291cmNlU3luY2hyb25vdXNseSh1cmwpOworICAgICAgICBpZiAoIXJlc3BvbnNlKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIGlmIChyZXNwb25zZS5zbGljZSgwLCAzKSA9PT0g
IildfSIpCisgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLnN1YnN0cmluZyhyZXNwb25z
ZS5pbmRleE9mKCdcbicpKTsKKyAgICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7U291cmNlTWFwVjN9
ICovIChKU09OLnBhcnNlKHJlc3BvbnNlKSk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGNv
bnNvbGUuZXJyb3IoZS5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQor
CiBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBA
cmV0dXJuIHtBcnJheS48c3RyaW5nPn0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IGI2NjMzNWI3YTkyNTk0
ZDA2ZDRhN2I3MzkyNzdlY2FjYzYzZDY3YmIuLmY5Yzg2MWQyMDZjMDZiZWUwZWMyODNkODVlZmUw
ZmQzNWVlNDdlNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtMzc2LDcgKzM3Niw3IEBAIFdlYkluc3Bl
Y3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc2VjdGlv
bnNbMF0gPSB0aGlzLl9yZWJ1aWxkU2VjdGlvbnNGb3JTdHlsZVJ1bGVzKHN0eWxlUnVsZXMsIHVz
ZWRQcm9wZXJ0aWVzLCAwLCBudWxsKTsKICAgICAgICAgdmFyIGFuY2hvckVsZW1lbnQgPSB0aGlz
LnNlY3Rpb25zWzBdLmluaGVyaXRlZFByb3BlcnRpZXNTZXBhcmF0b3JFbGVtZW50OwogCi0gICAg
ICAgIGlmIChzdHlsZXMuY29tcHV0ZWRTdHlsZSkgICAgICAgIAorICAgICAgICBpZiAoc3R5bGVz
LmNvbXB1dGVkU3R5bGUpCiAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zWzBdWzBdLnJlYnVpbGRD
b21wdXRlZFRyYWNlKHRoaXMuc2VjdGlvbnNbMF0pOwogCiAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc3R5bGVzLnBzZXVkb0VsZW1lbnRzLmxlbmd0aDsgKytpKSB7CkBAIC0yMDM1LDcgKzIw
MzUsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9
IHsKICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKIAogICAgICAgICBpZiAoZXZlbnQudGFy
Z2V0ID09PSB0aGlzLmxpc3RJdGVtRWxlbWVudCkgewotICAgICAgICAgICAgaWYgKCF0aGlzLnNl
Y3Rpb24uZWRpdGFibGUpIAorICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3Rpb24uZWRpdGFibGUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBpZiAodGhpcy5zZWN0aW9u
Ll9jaGVja1dpbGxDYW5jZWxFZGl0aW5nKCkpCkBAIC0yMDQ0LDkgKzIwNDQsNzEgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50KSkgeworICAgICAgICAgICAgdGhpcy5f
bmF2aWdhdGVUb1NvdXJjZShldmVudC50YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKICAgICAgICAgdGhpcy5zdGFydEVkaXRpbmcoZXZlbnQudGFyZ2V0KTsKICAgICB9
LAogCisgICAgX3Nob3dSYXdDU1NMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCisgICAg
eworICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5jc3NNb2RlbC5yYXdMb2Nh
dGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7CisgICAgICAgIHZhciB1aVNvdXJjZUNvZGU7
CisgICAgICAgIHZhciBsaW5lTnVtYmVyOworICAgICAgICBpZiAodWlMb2NhdGlvbikgeworICAg
ICAgICAgICAgdWlTb3VyY2VDb2RlID0gdWlMb2NhdGlvbi51aVNvdXJjZUNvZGU7CisgICAgICAg
ICAgICBsaW5lTnVtYmVyID0gdWlMb2NhdGlvbi5saW5lTnVtYmVyOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdmFyIHVyaSA9IFdlYkluc3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JV
UkwocmF3TG9jYXRpb24udXJsKTsKKyAgICAgICAgICAgIHVpU291cmNlQ29kZSA9IFdlYkluc3Bl
Y3Rvci53b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVyaSk7CisgICAgICAgICAgICBpZiAo
IXVpU291cmNlQ29kZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBsaW5l
TnVtYmVyID0gcmF3TG9jYXRpb24ubGluZU51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2hvd1BhbmVsKCJzY3JpcHRzIikuc2hvd1VJU291cmNlQ29kZSh1aVNvdXJjZUNv
ZGUsIGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBfcmF3Q1NTTG9jYXRpb246IGZ1bmN0aW9u
KGlzUHJvcGVydHlOYW1lKQorICAgIHsKKyAgICAgICAgLy8gRW5kIG9mIHJhbmdlIGlzIGV4Y2x1
c2l2ZSwgc28gc3VidHJhY3QgMSBmcm9tIHRoZSBlbmQgb2Zmc2V0LgorICAgICAgICB2YXIgcG9z
aXRpb24gPSB0aGlzLnN0eWxlLnJhbmdlLnN0YXJ0ICsgKGlzUHJvcGVydHlOYW1lID8gdGhpcy5w
cm9wZXJ0eS5yYW5nZS5zdGFydCA6IHRoaXMucHJvcGVydHkucmFuZ2UuZW5kIC0gMSk7CisgICAg
ICAgIGlmICghaXNQcm9wZXJ0eU5hbWUgJiYgdGhpcy5wcm9wZXJ0eS50ZXh0ICYmIHRoaXMucHJv
cGVydHkudGV4dC5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgcG9zaXRpb24gLT0gMTsKKyAg
ICAgICAgdmFyIGxvY2F0aW9uID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlci5wb3NpdGlvblRvTG9j
YXRpb24odGhpcy5zZWN0aW9uLl9saW5lRW5kaW5ncywgcG9zaXRpb24pOworICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbih0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291
cmNlVVJMLCBsb2NhdGlvblswXSwgbG9jYXRpb25bMV0pOworICAgIH0sCisKKyAgICBfbmF2aWdh
dGVUb1NvdXJjZTogZnVuY3Rpb24oZWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5z
dHlsZS5wYXJlbnRSdWxlIHx8ICF0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMIHx8ICF0
aGlzLnN0eWxlLnJhbmdlIHx8ICF0aGlzLnByb3BlcnR5LnJhbmdlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHZhciBwcm9wZXJ0eU5hbWVDbGlja2VkID0gZWxlbWVudCA9PT0gdGhp
cy5uYW1lRWxlbWVudDsKKworICAgICAgICB2YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZpbGVNYXBw
aW5nLnVyaUZvclVSTCh0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMKTsKKyAgICAgICAg
dmFyIHVpU291cmNlQ29kZSA9IFdlYkluc3BlY3Rvci53b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9y
VVJJKHVyaSk7CisgICAgICAgIGlmICghdWlTb3VyY2VDb2RlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmICh0aGlzLnNlY3Rpb24uX2xpbmVFbmRpbmdzKSB7CisgICAgICAgICAg
ICB0aGlzLl9zaG93UmF3Q1NTTG9jYXRpb24odGhpcy5fcmF3Q1NTTG9jYXRpb24ocHJvcGVydHlO
YW1lQ2xpY2tlZCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
dWlTb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50KGRpZFJlcXVlc3RDb250ZW50LmJpbmQodGhpcykp
OworCisgICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRF
bmNvZGVkLCBtaW1lVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb250ZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdGhpcy5zZWN0aW9uLl9saW5l
RW5kaW5ncyA9IGNvbnRlbnQubGluZUVuZGluZ3MoKTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dS
YXdDU1NMb2NhdGlvbih0aGlzLl9yYXdDU1NMb2NhdGlvbihwcm9wZXJ0eU5hbWVDbGlja2VkKSk7
CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgX2lzTmFtZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1l
bnQpCiAgICAgewogICAgICAgICByZXR1cm4gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0
aENsYXNzKCJ3ZWJraXQtY3NzLXByb3BlcnR5IikgPT09IHRoaXMubmFtZUVsZW1lbnQ7CkBAIC0y
NDYwLDkgKzI1MjIsMTEgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAg
ICAgICAgICAgICB0aGlzLl9uZXdQcm9wZXJ0eUluU3R5bGUgPSB0cnVlOworICAgICAgICAgICAg
bmV3U3R5bGUucGFyZW50UnVsZSA9IHRoaXMuc3R5bGUucGFyZW50UnVsZTsKICAgICAgICAgICAg
IHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsKICAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBuZXdT
dHlsZS5wcm9wZXJ0eUF0KHRoaXMucHJvcGVydHkuaW5kZXgpOwogICAgICAgICAgICAgdGhpcy5f
c3R5bGVSdWxlLnN0eWxlID0gdGhpcy5zdHlsZTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNl
Y3Rpb24uX2xpbmVFbmRpbmdzOwogCiAgICAgICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9u
LnBhbmUpCiAgICAgICAgICAgICAgICAgc2VjdGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycygic3R5bGUgZWRpdGVkIik7CkBAIC0yNTU1LDcgKzI2MTksNyBAQCBXZWJJbnNwZWN0b3Iu
U3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJvcGVydHlQcm9tcHQucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgLy8gU3ludGhlc2l6ZSBwcm9wZXJ0eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVu
dHMsIGN1c3RvbSB3aGl0ZXNwYWNlIGV0Yy4KICAgICAgICAgICAgIHRoaXMuX3NpZGViYXJQYW5l
LmFwcGx5U3R5bGVUZXh0KHRoaXMuX3NpZGViYXJQYW5lLm5hbWVFbGVtZW50LnRleHRDb250ZW50
ICsgIjogIiArIHRoaXMuX3NpZGViYXJQYW5lLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCwgZmFs
c2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAvLyBIYW5kbGUg
bnVtZXJpYyB2YWx1ZSBpbmNyZW1lbnQvZGVjcmVtZW50IG9ubHkgYXQgdGhpcyBwb2ludC4KICAg
ICAgICAgaWYgKCF0aGlzLl9pc0VkaXRpbmdOYW1lICYmIFdlYkluc3BlY3Rvci5oYW5kbGVFbGVt
ZW50VmFsdWVNb2RpZmljYXRpb25zKGV2ZW50LCB0aGlzLl9zaWRlYmFyUGFuZS52YWx1ZUVsZW1l
bnQsIGZpbmlzaEhhbmRsZXIuYmluZCh0aGlzKSwgdGhpcy5faXNWYWx1ZVN1Z2dlc3Rpb24uYmlu
ZCh0aGlzKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3MgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwuY3NzCmluZGV4IDlkZDFkNzgy
MmNiOWYzOWEwMWI0ZTQ2ODg1YmRiMWJjMmU4NDRiMGEuLjFiMTcxMjIyODY3ZDE1NzM5ZmQ5N2Iw
ZDI4NzIwNWM4YWM5MmIzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNzcwpAQCAtMTY2LDYgKzE2NiwxMSBAQAogICAgIC13
ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CiB9CiAKKy5zdHlsZXMtc2VjdGlvbjpub3QoLnJlYWQt
b25seSk6aG92ZXIgLnByb3BlcnRpZXMgbGkgLndlYmtpdC1jc3MtcHJvcGVydHksCisuc3R5bGVz
LXNlY3Rpb246bm90KC5yZWFkLW9ubHkpOmhvdmVyIC5wcm9wZXJ0aWVzIGxpIC52YWx1ZSB7Cisg
ICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCBibGFjayAhaW1wb3J0YW50OworfQorCiAuc3R5
bGVzLXNlY3Rpb246bm90KC5maXJzdC1zdHlsZXMtc2VjdGlvbikgewogICAgIGJvcmRlci10b3A6
IDFweCBzb2xpZCByZ2IoMTkxLCAxOTEsIDE5MSk7CiB9CkBAIC0yNzUsNiArMjgwLDcgQEAKIAog
LnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0aWVzIGxpIHsKICAgICBtYXJnaW4tbGVmdDogMTJweDsK
KyAgICBwYWRkaW5nLWJvdHRvbTogMXB4OwogICAgIHBhZGRpbmctbGVmdDogMjJweDsKICAgICB3
aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184966</attachid>
            <date>2013-01-28 03:49:12 -0800</date>
            <delta_ts>2013-02-11 06:42:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20130128154559.patch</filename>
            <type>text/plain</type>
            <size>26075</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYwZmE2MDk4ZWNmY2Qy
ZjI5M2FhYjNkMzkzNjExNGY0OGRjOTBmYS4uNjhlMmFmZjNiMzllNjU2MzZlMjkzNTk4NzRlNjMw
MmIxN2JjNmQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTI4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIHRyYWNrcyBwcm9wZXJ0
eSByYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgc291cmNlIGNvZGUgYW5kIENTUyBzb3VyY2UgbWFw
cGluZ3MKKyAgICAgICAgdG8gY29tcHV0ZSB0aGUgVUkgbG9jYXRpb24gb2YgQ1NTIHByb3BlcnR5
IG5hbWVzIGFuZCB2YWx1ZXMuIFRoZSBtYXBwaW5nIGlzIHJlbW92ZWQgdXBvbiBDU1Mgc3R5bGVz
aGVldCB1cGRhdGVzCisgICAgICAgIGFuZCB1cGRhdGVkL3Jlc3RvcmVkIHVwb24gcmVsb2FkIG9m
IENTUyBhZnRlciBhIFNBU1MgZmlsZSBoYXMgYmVlbiByZWxvYWRlZCAoZHVlIHRvIHNvdXJjZSBl
ZGl0cy4pCisgICAgICAgIFVzZXIgc2hvdWxkIEN0cmwvQ21kLWNsaWNrIHRoZSBkYXNoLXVuZGVy
bGluZWQgcHJvcGVydHkgbmFtZSBvciB2YWx1ZSBlbGVtZW50IHRvIG5hdmlnYXRlIHRvIHRoZSBy
ZXNwZWN0aXZlCisgICAgICAgIGxvY2F0aW9uIGluIGEgc291cmNlIGZpbGUuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0U291cmNlTWFwcGluZyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9u
LnByb3RvdHlwZS51aUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNTU1Byb3BlcnR5LnBhcnNlUGF5bG9hZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU2NyaXB0KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3N0eWxlU2hlZXRDaGFuZ2VkLmNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUu
X3N0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFw
cGluZy5wcm90b3R5cGUuX3JlbG9hZENTUyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1Nv
dXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNvdXJjZUFkZGVkLmRpZFJlcXVlc3RDb250ZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUuX3Jlc291
cmNlQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3Rv
dHlwZS5fbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNB
U1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5sb2FkU291cmNlTWFwRm9yU3R5bGVTaGVldCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9iaW5kVUlT
b3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90
b3R5cGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNB
U1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlLl9yZXNldCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlTWFwLmxvYWRQYXlsb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxl
c1NpZGViYXJQYW5lLnByb3RvdHlwZS5faW5uZXJSZWJ1aWxkVXBkYXRlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmVsZW1lbnQu
Y29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50
LnByb3RvdHlwZS5pc1JldmVydCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVt
ZW50c1BhbmVsLmNzczoKKyAgICAgICAgKC5zdHlsZXMtc2VjdGlvbjpub3QoLnJlYWQtb25seSk6
aG92ZXIgLnByb3BlcnRpZXMgbGkgLnZhbHVlKToKKyAgICAgICAgKC5zdHlsZXMtc2VjdGlvbiAu
cHJvcGVydGllcyBsaSk6CisKIDIwMTMtMDEtMjggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW1JFR1JFU1NJT05dIENhbGVuZGFyIFBpY2tlciBmb2N1cyBy
aW5nIGlzIGdvbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q1NTU3R5bGVNb2RlbC5qcwppbmRleCA2N2I4N2M5NDhjZGEyNTFmN2IxMjhlYzQzYWI5M2Y2MWI0
YzdjYmYxLi5iN2NmMDYyYjMzNGMxOWM1ODM1OTRiMDQ1YTAzNGExM2E0MTQ3MTkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpz
CkBAIC00OTQsNyArNDk0LDEwIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlw
ZSA9IHsKICAgICAgKi8KICAgICBzZXRTb3VyY2VNYXBwaW5nOiBmdW5jdGlvbih1cmwsIHNvdXJj
ZU1hcHBpbmcpCiAgICAgewotICAgICAgICB0aGlzLl9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291
cmNlTWFwcGluZzsKKyAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmcpCisgICAgICAgICAgICB0aGlz
Ll9zb3VyY2VNYXBwaW5nc1t1cmxdID0gc291cmNlTWFwcGluZzsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZU1hcHBpbmdzW3VybF07CiAgICAgICAgIHRoaXMu
X3VwZGF0ZUxvY2F0aW9ucygpOwogICAgIH0sCiAKQEAgLTUxNSw2ICs1MTgsNyBAQCBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU1J1bGV9IGNzc1J1bGUKICAgICAgKiBAcGFyYW0g
e2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKTooYm9vbGVhbnx1bmRlZmluZWQpfSB1
cGRhdGVEZWxlZ2F0ZQogICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9u
fQogICAgICAqLwpAQCAtNTM0LDEwICs1MzgsMTcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwucHJvdG90eXBlID0gewogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9u
fSByYXdMb2NhdGlvbgogICAgICAqIEByZXR1cm4gez9XZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0K
ICAgICAgKi8KLSAgICBfcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0
aW9uKQorICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikK
ICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdGhpcy5fc291cmNlTWFwcGluZ3Nb
cmF3TG9jYXRpb24udXJsXTsKLSAgICAgICAgcmV0dXJuIHNvdXJjZU1hcHBpbmcgPyBzb3VyY2VN
YXBwaW5nLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0aW9uKSA6IG51bGw7CisgICAg
ICAgIGlmICghc291cmNlTWFwcGluZykgeworICAgICAgICAgICAgdmFyIHVyaSA9IFdlYkluc3Bl
Y3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwocmF3TG9jYXRpb24udXJsKTsKKyAgICAgICAgICAg
IHZhciB1aVNvdXJjZUNvZGUgPSBXZWJJbnNwZWN0b3Iud29ya3NwYWNlLnVpU291cmNlQ29kZUZv
clVSSSh1cmkpOworICAgICAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxv
Y2F0aW9uKHVpU291cmNlQ29kZSwgcmF3TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24u
Y29sdW1uTnVtYmVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc291cmNlTWFwcGluZy5y
YXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpA
QCAtNTg0LDcgKzU5NSw3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkxpdmVMb2NhdGlv
bi5wcm90b3R5cGUgPSB7CiAgICAgdWlMb2NhdGlvbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgdmFyIGNzc0xvY2F0aW9uID0gLyoqIEB0eXBlIFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbiAq
LyAodGhpcy5yYXdMb2NhdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jc3NN
b2RlbC5fcmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oY3NzTG9jYXRpb24pOworICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNzc0xvY2F0
aW9uKTsKICAgICB9LAogCiAgICAgZGlzcG9zZTogZnVuY3Rpb24oKQpAQCAtNjAzLDExICs2MTQs
MTMgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuTGl2ZUxvY2F0aW9uLnByb3RvdHlwZSA9
IHsKICAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuUmF3TG9jYXRpb259CiAgKiBAcGFyYW0g
e3N0cmluZ30gdXJsCiAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICogQHBhcmFtIHtu
dW1iZXI9fSBjb2x1bW5OdW1iZXIKICAqLwotV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVu
Y3Rpb24odXJsLCBsaW5lTnVtYmVyKQorV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uID0gZnVuY3Rp
b24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiB7CiAgICAgdGhpcy51cmwgPSB1cmw7
CiAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICB0aGlzLmNvbHVtbk51bWJl
ciA9IGNvbHVtbk51bWJlciB8fCAwOwogfQogCiAvKioKQEAgLTg5MCw4ICs5MDMsOSBAQCBXZWJJ
bnNwZWN0b3IuQ1NTUnVsZS5wcm90b3R5cGUgPSB7CiAgKiBAcGFyYW0ge2Jvb2xlYW59IHBhcnNl
ZE9rCiAgKiBAcGFyYW0ge2Jvb2xlYW59IGltcGxpY2l0CiAgKiBAcGFyYW0gez9zdHJpbmc9fSB0
ZXh0CisgKiBAcGFyYW0ge0NTU0FnZW50LlNvdXJjZVJhbmdlPX0gcmFuZ2UKICAqLwotV2ViSW5z
cGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZh
bHVlLCBwcmlvcml0eSwgc3RhdHVzLCBwYXJzZWRPaywgaW1wbGljaXQsIHRleHQpCitXZWJJbnNw
ZWN0b3IuQ1NTUHJvcGVydHkgPSBmdW5jdGlvbihvd25lclN0eWxlLCBpbmRleCwgbmFtZSwgdmFs
dWUsIHByaW9yaXR5LCBzdGF0dXMsIHBhcnNlZE9rLCBpbXBsaWNpdCwgdGV4dCwgcmFuZ2UpCiB7
CiAgICAgdGhpcy5vd25lclN0eWxlID0gb3duZXJTdHlsZTsKICAgICB0aGlzLmluZGV4ID0gaW5k
ZXg7CkBAIC05MDIsNiArOTE2LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5ID0gZnVuY3Rp
b24ob3duZXJTdHlsZSwgaW5kZXgsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgc3QKICAgICB0aGlz
LnBhcnNlZE9rID0gcGFyc2VkT2s7CiAgICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0OwogICAg
IHRoaXMudGV4dCA9IHRleHQ7CisgICAgdGhpcy5yYW5nZSA9IHJhbmdlOwogfQogCiAvKioKQEAg
LTkxOCw3ICs5MzMsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucGFyc2VQYXlsb2FkID0g
ZnVuY3Rpb24ob3duZXJTdHlsZSwgaW5kZXgsIHBheWxvYWQpCiAgICAgLy8gaW1wbGljaXQ6IGZh
bHNlCiAgICAgLy8gc3RhdHVzOiAic3R5bGUiCiAgICAgdmFyIHJlc3VsdCA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ1NTUHJvcGVydHkoCi0gICAgICAgIG93bmVyU3R5bGUsIGluZGV4LCBwYXlsb2FkLm5h
bWUsIHBheWxvYWQudmFsdWUsIHBheWxvYWQucHJpb3JpdHkgfHwgIiIsIHBheWxvYWQuc3RhdHVz
IHx8ICJzdHlsZSIsICgicGFyc2VkT2siIGluIHBheWxvYWQpID8gISFwYXlsb2FkLnBhcnNlZE9r
IDogdHJ1ZSwgISFwYXlsb2FkLmltcGxpY2l0LCBwYXlsb2FkLnRleHQpOworICAgICAgICBvd25l
clN0eWxlLCBpbmRleCwgcGF5bG9hZC5uYW1lLCBwYXlsb2FkLnZhbHVlLCBwYXlsb2FkLnByaW9y
aXR5IHx8ICIiLCBwYXlsb2FkLnN0YXR1cyB8fCAic3R5bGUiLCAoInBhcnNlZE9rIiBpbiBwYXls
b2FkKSA/ICEhcGF5bG9hZC5wYXJzZWRPayA6IHRydWUsICEhcGF5bG9hZC5pbXBsaWNpdCwgcGF5
bG9hZC50ZXh0LCBwYXlsb2FkLnJhbmdlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0
TWFwcGluZy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJT
Y3JpcHRNYXBwaW5nLmpzCmluZGV4IGU2ZTRkMzM4YzkzNzBlN2YyYzRmNjM0ZjdiZWU0YWNmZjZj
ZDdiYzMuLjJjOTUxYWJjYjllNGQ0YWRjNjQ3YmVjYTM3NjRhYjE2YTUxYWEwYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBw
aW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29tcGlsZXJT
Y3JpcHRNYXBwaW5nLmpzCkBAIC0xNTQsMjIgKzE1NCwxNSBAQCBXZWJJbnNwZWN0b3IuQ29tcGls
ZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBsb2FkU291cmNlTWFw
Rm9yU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQpCiAgICAgewotICAgICAgICB2YXIgc291cmNlTWFw
VVJMID0gV2ViSW5zcGVjdG9yLlBvc2l0aW9uQmFzZWRTb3VyY2VNYXAucHJvdG90eXBlLl9jYW5v
bmljYWxpemVVUkwoc2NyaXB0LnNvdXJjZU1hcFVSTCwgc2NyaXB0LnNvdXJjZVVSTCk7CisgICAg
ICAgIHZhciBzb3VyY2VNYXBVUkwgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnByb3RvdHlwZS5f
Y2Fub25pY2FsaXplVVJMKHNjcmlwdC5zb3VyY2VNYXBVUkwsIHNjcmlwdC5zb3VyY2VVUkwpOwog
ICAgICAgICB2YXIgc291cmNlTWFwID0gdGhpcy5fc291cmNlTWFwRm9yU291cmNlTWFwVVJMW3Nv
dXJjZU1hcFVSTF07CiAgICAgICAgIGlmIChzb3VyY2VNYXApCiAgICAgICAgICAgICByZXR1cm4g
c291cmNlTWFwOwogCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogbWFrZSBz
ZW5kUmVxdWVzdCBhc3luYy4KLSAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEluc3BlY3RvckZy
b250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNvdXJjZU1hcFVSTCk7Ci0gICAg
ICAgICAgICBpZiAocmVzcG9uc2Uuc2xpY2UoMCwgMykgPT09ICIpXX0iKQotICAgICAgICAgICAg
ICAgIHJlc3BvbnNlID0gcmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmluZGV4T2YoJ1xuJykp
OwotICAgICAgICAgICAgdmFyIHBheWxvYWQgPSAvKiogQHR5cGUge1NvdXJjZU1hcFYzfSAqLyAo
SlNPTi5wYXJzZShyZXNwb25zZSkpOwotICAgICAgICAgICAgc291cmNlTWFwID0gbmV3IFdlYklu
c3BlY3Rvci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgcGF5bG9hZCk7Ci0g
ICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2Up
OworICAgICAgICB2YXIgcGF5bG9hZCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAubG9hZFBheWxv
YWQoc291cmNlTWFwVVJMKTsKKyAgICAgICAgaWYgKCFwYXlsb2FkKQogICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KKyAgICAgICAgc291cmNlTWFwID0gbmV3IFdlYkluc3BlY3Rv
ci5Qb3NpdGlvbkJhc2VkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgcGF5bG9hZCk7CiAgICAgICAg
IHRoaXMuX3NvdXJjZU1hcEZvclNvdXJjZU1hcFVSTFtzb3VyY2VNYXBVUkxdID0gc291cmNlTWFw
OwogICAgICAgICByZXR1cm4gc291cmNlTWFwOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TQVNTU291cmNlTWFwcGluZy5qcwppbmRleCA4
YThmNzZkZTY2MGZkNzc3OTc0NTcxM2JkOTExMjgxOGJlOGFlYzQzLi5lM2M4MzM2YmMwNzI3OWZh
NzdlYWQyNzk0MGI4NDE5NWUwZjcyYzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NBU1NTb3VyY2VNYXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU0FTU1NvdXJjZU1hcHBpbmcuanMKQEAgLTM4LDExICszOCwx
MyBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbih3b3Jrc3BhY2Us
IG5ldHdvcmtXb3Jrc3BhY2VQcm92aWRlcikKIHsKICAgICB0aGlzLl93b3Jrc3BhY2UgPSB3b3Jr
c3BhY2U7CiAgICAgdGhpcy5fbmV0d29ya1dvcmtzcGFjZVByb3ZpZGVyID0gbmV0d29ya1dvcmtz
cGFjZVByb3ZpZGVyOwotICAgIHRoaXMuX21hcHBpbmdFbnRyaWVzID0ge307CisgICAgdGhpcy5f
c291cmNlTWFwQnlVUkwgPSB7fTsKKyAgICB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkwg
PSB7fTsKICAgICB0aGlzLl9jc3NVUkxzRm9yU0FTU1VSTCA9IHt9OwogICAgIHRoaXMuX3RpbWVv
dXRGb3JVUkwgPSB7fTsKICAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwuRXZlbnRUeXBlcy5SZXNv
dXJjZUFkZGVkLCB0aGlzLl9yZXNvdXJjZUFkZGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3Iu
ZmlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmlsZU1hbmFnZXIuRXZl
bnRUeXBlcy5TYXZlZFVSTCwgdGhpcy5fZmlsZVNhdmVGaW5pc2hlZCwgdGhpcyk7CisgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TW9kZWwuRXZlbnRzLlN0eWxlU2hlZXRDaGFuZ2VkLCB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZCwg
dGhpcyk7CiAgICAgdGhpcy5fd29ya3NwYWNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LldvcmtzcGFjZS5FdmVudHMuUHJvamVjdFdpbGxSZXNldCwgdGhpcy5fcmVzZXQsIHRoaXMpOwog
fQogCkBAIC02NSw2ICs2NywyNiBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJv
dG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBl
dmVudAogICAgICAqLworICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisg
ICAgeworICAgICAgICB2YXIgaXNBZGRpbmdSZXZpc2lvbiA9IHRoaXMuX2lzQWRkaW5nUmV2aXNp
b247CisgICAgICAgIGRlbGV0ZSB0aGlzLl9pc0FkZGluZ1JldmlzaW9uOworCisgICAgICAgIGlm
IChpc0FkZGluZ1JldmlzaW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJJbnNw
ZWN0b3IuY3NzTW9kZWwucmVzb3VyY2VCaW5kaW5nKCkucmVxdWVzdFJlc291cmNlVVJMRm9yU3R5
bGVTaGVldElkKGV2ZW50LmRhdGEuc3R5bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsK
KworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghdXJsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VNYXBwaW5nKHVybCwgbnVsbCk7CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50
CisgICAgICovCiAgICAgX2ZpbGVTYXZlRmluaXNoZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsK
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBGaWxlTWFwcGluZy4KQEAgLTk4LDcg
KzEyMCwxMCBAQCBXZWJJbnNwZWN0b3IuU0FTU1NvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAoIXVpU291cmNlQ29kZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
dmFyIG5ld0NvbnRlbnQgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hy
b25vdXNseSh1cmwpOworICAgICAgICB0aGlzLl9pc0FkZGluZ1JldmlzaW9uID0gdHJ1ZTsKICAg
ICAgICAgdWlTb3VyY2VDb2RlLmFkZFJldmlzaW9uKG5ld0NvbnRlbnQpOworICAgICAgICAvLyB0
aGlzLl9pc0FkZGluZ1JldmlzaW9uIHdpbGwgYmUgZGVsZXRlZCBpbiB0aGlzLl9zdHlsZVNoZWV0
Q2hhbmdlZCgpLgorICAgICAgICB0aGlzLl9sb2FkQW5kUHJvY2Vzc1NvdXJjZU1hcChuZXdDb250
ZW50LCB1cmwsIHRydWUpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTExNyw1NCArMTQyLDM1IEBA
IFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAq
LwogICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29udGVudChjb250ZW50LCBjb250ZW50RW5j
b2RlZCwgbWltZVR5cGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghY29udGVudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2YXIgbGluZXMgPSBjb250ZW50LnNw
bGl0KC9ccj9cbi8pOwotICAgICAgICAgICAgdmFyIGRlYnVnSW5mb1JlZ2V4ID0gL0BtZWRpYVxz
XC1zYXNzXC1kZWJ1Z1wtaW5mb3tmaWxlbmFtZXtmb250LWZhbWlseTooW159XSspfWxpbmV7Zm9u
dC1mYW1pbHk6XFwwMDAwKFxkXGQpKFtefV0qKX19L2k7Ci0gICAgICAgICAgICB2YXIgbGluZU51
bWJlcnNSZWdleCA9IC9cL1wqXHMrbGluZVxzKyhbMC05XSspLFxzKyhbXipcL10rKS87Ci0gICAg
ICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGxpbmVzLmxlbmd0
aDsgKytsaW5lTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gZGVidWdJbmZv
UmVnZXguZXhlYyhsaW5lc1tsaW5lTnVtYmVyXSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNo
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBtYXRjaFsxXS5yZXBsYWNlKC9cXCgu
KS9nLCAiJDEiKTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBwYXJzZUludChkZWNv
ZGVVUkkoIiUiICsgbWF0Y2hbMl0pICsgbWF0Y2hbM10sIDEwKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fYWRkVVJMTWFwcGluZyh1cmwsIGxpbmUsIHJlc291cmNlLnVybCwgbGluZU51bWJl
cik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBtYXRjaCA9IGxpbmVOdW1iZXJzUmVnZXguZXhlYyhsaW5lc1tsaW5lTnVt
YmVyXSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBmaWxlTmFtZSA9IG1hdGNoWzJdLnRyaW0oKTsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGxpbmUgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOwotICAgICAgICAgICAgICAgICAgICB2YXIg
dXJsID0gcmVzb3VyY2UudXJsOwotICAgICAgICAgICAgICAgICAgICBpZiAodXJsLmVuZHNXaXRo
KCIvIiArIHJlc291cmNlLnBhcnNlZFVSTC5sYXN0UGF0aENvbXBvbmVudCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSByZXNvdXJj
ZS5wYXJzZWRVUkwubGFzdFBhdGhDb21wb25lbnQubGVuZ3RoKSArIGZpbGVOYW1lOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBmaWxlTmFt
ZTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVVJMTWFwcGluZyh1cmwsIGxpbmUsIHJl
c291cmNlLnVybCwgbGluZU51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2xvYWRB
bmRQcm9jZXNzU291cmNlTWFwKGNvbnRlbnQsIHJlc291cmNlLnVybCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmVzb3VyY2UucmVxdWVzdENvbnRlbnQoZGlkUmVxdWVzdENvbnRlbnQuYmluZCh0aGlz
KSk7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKLSAgICAg
KiBAcGFyYW0ge251bWJlcn0gbGluZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdVUkwKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gcmF3TGluZQorICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29u
dGVudAorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NVUkwKKyAgICAgKiBAcGFyYW0ge2Jvb2xl
YW49fSBmb3JjZVJlYmluZAogICAgICAqLwotICAgIF9hZGRVUkxNYXBwaW5nOiBmdW5jdGlvbih1
cmwsIGxpbmUsIHJhd1VSTCwgcmF3TGluZSkKKyAgICBfbG9hZEFuZFByb2Nlc3NTb3VyY2VNYXA6
IGZ1bmN0aW9uKGNvbnRlbnQsIGNzc1VSTCwgZm9yY2VSZWJpbmQpCiAgICAgewotICAgICAgICB2
YXIgdXJpID0gV2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVSTCh1cmwpOwotICAgICAg
ICBpZiAoIVdlYkluc3BlY3Rvci5maWxlTWFwcGluZy5oYXNNYXBwaW5nRm9yVVJMKHVybCkgJiYg
IXRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKSkgewotICAgICAgICAgICAg
dmFyIGNvbnRlbnQgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25v
dXNseSh1cmwpOwotICAgICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuU3RhdGljQ29udGVudFByb3ZpZGVyKFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0
eWxlc2hlZXQsIGNvbnRlbnQsICJ0ZXh0L3gtc2NzcyIpOwotICAgICAgICAgICAgdGhpcy5fbmV0
d29ya1dvcmtzcGFjZVByb3ZpZGVyLmFkZEZpbGVGb3JVUkwodXJsLCBjb250ZW50UHJvdmlkZXIs
IHRydWUpOworICAgICAgICBpZiAoIWNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xyP1xuLyk7CisgICAgICAgIGlmICghbGlu
ZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IHNvdXJjZU1h
cFJlZ2V4ID0gL15cL1wqQCBzb3VyY2VNYXBwaW5nVVJMPShbXlxzXSspXHMqXCpcLyQvOworICAg
ICAgICB2YXIgbGFzdExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTsKKyAgICAgICAgdmFy
IG1hdGNoID0gbGFzdExpbmUubWF0Y2goc291cmNlTWFwUmVnZXgpOworICAgICAgICBpZiAoIW1h
dGNoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlz
LmxvYWRTb3VyY2VNYXBGb3JTdHlsZVNoZWV0KG1hdGNoWzFdLCBjc3NVUkwsIGZvcmNlUmViaW5k
KTsKKyAgICAgICAgaWYgKHNvdXJjZU1hcCAmJiAoZm9yY2VSZWJpbmQgfHwgIXRoaXMuX3NvdXJj
ZU1hcEJ5U3R5bGVTaGVldFVSTFtjc3NVUkxdKSkgeworICAgICAgICAgICAgdGhpcy5fc291cmNl
TWFwQnlTdHlsZVNoZWV0VVJMW2Nzc1VSTF0gPSBzb3VyY2VNYXA7CisgICAgICAgICAgICB0aGlz
Ll9iaW5kVUlTb3VyY2VDb2RlKGNzc1VSTCwgc291cmNlTWFwKTsKICAgICAgICAgfQotICAgICAg
ICB2YXIgcmF3TG9jYXRpb25TdHJpbmcgPSByYXdVUkwgKyAiOiIgKyAocmF3TGluZSArIDEpOyAg
Ly8gTmV4dCBsaW5lIGFmdGVyIG1hcHBpbmcgbWV0YWluZm8KLSAgICAgICAgdGhpcy5fbWFwcGlu
Z0VudHJpZXNbcmF3TG9jYXRpb25TdHJpbmddID0gbmV3IFdlYkluc3BlY3Rvci5TQVNTU291cmNl
TWFwcGluZy5NYXBwaW5nRW50cnkodXJpLCBsaW5lIC0gMSwgMCk7Ci0gICAgICAgIHRoaXMuX2Fk
ZENTU1VSTGZvclNBU1NVUkwocmF3VVJMLCB1cmwpOwotICAgICAgICBXZWJJbnNwZWN0b3IuY3Nz
TW9kZWwuc2V0U291cmNlTWFwcGluZyhyYXdVUkwsIHRoaXMpOwogICAgIH0sCiAKICAgICAvKioK
QEAgLTE4NSwyNiArMTkxLDcwIEBAIFdlYkluc3BlY3Rvci5TQVNTU291cmNlTWFwcGluZy5wcm90
b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3Vy
Y2VNYXBVUkwKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVTaGVldFVSTAorICAgICAqIEBw
YXJhbSB7Ym9vbGVhbj19IGZvcmNlUmVsb2FkCisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LlJhbmdlQmFzZWRTb3VyY2VNYXB9CisgICAgICovCisgICAgbG9hZFNvdXJjZU1hcEZvclN0eWxl
U2hlZXQ6IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCwgc3R5bGVTaGVldFVSTCwgZm9yY2VSZWxvYWQp
CisgICAgeworICAgICAgICBzb3VyY2VNYXBVUkwgPSBXZWJJbnNwZWN0b3IuU291cmNlTWFwLnBy
b3RvdHlwZS5fY2Fub25pY2FsaXplVVJMKHNvdXJjZU1hcFVSTCwgc3R5bGVTaGVldFVSTCk7Cisg
ICAgICAgIHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVVSTFtzb3VyY2VNYXBVUkxd
OworICAgICAgICBpZiAoc291cmNlTWFwICYmICFmb3JjZVJlbG9hZCkKKyAgICAgICAgICAgIHJl
dHVybiBzb3VyY2VNYXA7CisKKyAgICAgICAgdmFyIHBheWxvYWQgPSBXZWJJbnNwZWN0b3IuU291
cmNlTWFwLmxvYWRQYXlsb2FkKHNvdXJjZU1hcFVSTCk7CisgICAgICAgIGlmICghcGF5bG9hZCkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBzb3VyY2VNYXAgPSBuZXcgV2ViSW5z
cGVjdG9yLlJhbmdlQmFzZWRTb3VyY2VNYXAoc291cmNlTWFwVVJMLCBwYXlsb2FkKTsKKyAgICAg
ICAgdGhpcy5fc291cmNlTWFwQnlVUkxbc291cmNlTWFwVVJMXSA9IHNvdXJjZU1hcDsKKyAgICAg
ICAgcmV0dXJuIHNvdXJjZU1hcDsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IHJhd1VSTAorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhbmdlQmFzZWRTb3Vy
Y2VNYXB9IHNvdXJjZU1hcAorICAgICAqLworICAgIF9iaW5kVUlTb3VyY2VDb2RlOiBmdW5jdGlv
bihyYXdVUkwsIHNvdXJjZU1hcCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VzID0gc291cmNl
TWFwLnNvdXJjZXMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gc291cmNlc1tpXTsKKyAgICAgICAgICAg
IHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKHVybCk7CisgICAg
ICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5maWxlTWFwcGluZy5oYXNNYXBwaW5nRm9yVVJMKHVy
bCkgJiYgIXRoaXMuX3dvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKSkgeworICAgICAg
ICAgICAgICAgIHZhciBjb250ZW50ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkodXJsKTsKKyAgICAgICAgICAgICAgICB2YXIgY29udGVudFByb3ZpZGVy
ID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIoV2ViSW5zcGVjdG9yLnJl
c291cmNlVHlwZXMuU3R5bGVzaGVldCwgY29udGVudCwgInRleHQveC1zY3NzIik7CisgICAgICAg
ICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX25ldHdvcmtXb3Jrc3BhY2VQcm92aWRl
ci5hZGRGaWxlRm9yVVJMKHVybCwgY29udGVudFByb3ZpZGVyLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICB1aVNvdXJjZUNvZGUuc2V0U291cmNlTWFwcGluZyh0aGlzKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLl9hZGRDU1NVUkxmb3JTQVNTVVJMKHJhd1VSTCwgdXJsKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5zZXRTb3VyY2VNYXBw
aW5nKHJhd1VSTCwgdGhpcyk7CisgICAgfSwKKworICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2Vi
SW5zcGVjdG9yLlJhd0xvY2F0aW9ufSByYXdMb2NhdGlvbgogICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5VSUxvY2F0aW9ufQogICAgICAqLwogICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9u
OiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7CiAgICAgICAgIHZhciBsb2NhdGlvbiA9IC8q
KiBAdHlwZSBXZWJJbnNwZWN0b3IuQ1NTTG9jYXRpb24gKi8gKHJhd0xvY2F0aW9uKTsKLSAgICAg
ICAgdmFyIG1hcHBpbmdFbnRyeSA9IHRoaXMuX21hcHBpbmdFbnRyaWVzW2xvY2F0aW9uLnVybCAr
ICI6IiArIGxvY2F0aW9uLmxpbmVOdW1iZXJdOwotICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IG51
bGw7Ci0gICAgICAgIGlmIChtYXBwaW5nRW50cnkpIHsKLSAgICAgICAgICAgIHZhciB1aVNvdXJj
ZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKG1hcHBpbmdFbnRyeS51
cmkpOwotICAgICAgICAgICAgaWYgKHVpU291cmNlQ29kZSkKLSAgICAgICAgICAgICAgICB1aUxv
Y2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgbWFwcGlu
Z0VudHJ5LmxpbmVOdW1iZXIsIG1hcHBpbmdFbnRyeS5jb2x1bW5OdW1iZXIpOwotICAgICAgICB9
Ci0gICAgICAgIGlmICghdWlMb2NhdGlvbikgewotICAgICAgICAgICAgdmFyIHVyaSA9IFdlYklu
c3BlY3Rvci5maWxlTWFwcGluZy51cmlGb3JVUkwobG9jYXRpb24udXJsKTsKLSAgICAgICAgICAg
IHZhciB1aVNvdXJjZUNvZGUgPSB0aGlzLl93b3Jrc3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVy
aSk7Ci0gICAgICAgICAgICBpZiAodWlTb3VyY2VDb2RlKQotICAgICAgICAgICAgICAgIHVpTG9j
YXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCBsb2NhdGlv
bi5saW5lTnVtYmVyLCAwKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdWlMb2NhdGlvbjsK
KyAgICAgICAgdmFyIHVpUmFuZ2U7CisgICAgICAgIHZhciB1aVNvdXJjZUNvZGU7CisgICAgICAg
IHZhciBzb3VyY2VNYXAgPSB0aGlzLl9zb3VyY2VNYXBCeVN0eWxlU2hlZXRVUkxbbG9jYXRpb24u
dXJsXTsKKyAgICAgICAgaWYgKCFzb3VyY2VNYXApCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgICAgdWlSYW5nZSA9IHNvdXJjZU1hcC5maW5kU291cmNlUmFuZ2UobG9jYXRpb24ubGlu
ZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgaWYgKCF1aVJhbmdlKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3Iu
ZmlsZU1hcHBpbmcudXJpRm9yVVJMKHVpUmFuZ2UudXJsKTsKKyAgICAgICAgdWlTb3VyY2VDb2Rl
ID0gdGhpcy5fd29ya3NwYWNlLnVpU291cmNlQ29kZUZvclVSSSh1cmkpOworICAgICAgICBpZiAo
IXVpU291cmNlQ29kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIC8vIE1h
cCBhIGNvbXBpbGVkIHNvdXJjZSBwb3NpdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5h
dGluZyBzb3VyY2UgcmFuZ2Ugc3RhcnQgcG9zaXRpb24uCisgICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCB1aVJhbmdlLnN0YXJ0TGluZSwgdWlS
YW5nZS5zdGFydENvbHVtbik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMjE2LDI1ICsyNjYsMTMg
QEAgV2ViSW5zcGVjdG9yLlNBU1NTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICB1aUxv
Y2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgd2hl
biB1aSAtPiByYXcgbWFwcGluZyBoYXMgY2xpZW50cy4KLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuQ1NTTG9jYXRpb24odWlTb3VyY2VDb2RlLnVybCB8fCAiIiwgbGluZU51bWJlcik7
CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uKHVpU291cmNlQ29k
ZS51cmwgfHwgIiIsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgfSwKIAogICAgIF9y
ZXNldDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fbWFwcGluZ0VudHJpZXMgPSB7
fTsKKyAgICAgICAgdGhpcy5fc291cmNlTWFwQnlVUkwgPSB7fTsKKyAgICAgICAgdGhpcy5fc291
cmNlTWFwQnlTdHlsZVNoZWV0VVJMID0ge307CiAgICAgICAgIHRoaXMuX3BvcHVsYXRlKCk7CiAg
ICAgfQogfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtzdHJpbmd9IHVyaQot
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAqLwotV2ViSW5zcGVjdG9yLlNBU1NTb3Vy
Y2VNYXBwaW5nLk1hcHBpbmdFbnRyeSA9IGZ1bmN0aW9uKHVyaSwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyKQotewotICAgIHRoaXMudXJpID0gdXJpOwotICAgIHRoaXMubGluZU51bWJlciA9IGxp
bmVOdW1iZXI7Ci0gICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci19Ci0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlTWFwLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMKaW5kZXgg
MDZmMzExOTUyNDIzYzc4NjIxZTVkMDZiNWM0NzMxYmRlZDNmZjgwNS4uNTFmMTYwMzE2NjE3ZWUx
ZjU5ZDE3NWNlMzQwODYxOTY3ODYzMmMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VNYXAuanMKQEAgLTUxLDYgKzUxLDI2IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VNYXAgPSBmdW5jdGlvbihzb3VyY2VNYXBwaW5nVVJMLCBwYXlsb2FkKQogICAgIHRo
aXMuX3BhcnNlTWFwcGluZ1BheWxvYWQocGF5bG9hZCk7CiB9CiAKKy8qKgorICogQHBhcmFtIHtz
dHJpbmd9IHVybAorICogQHJldHVybiB7U291cmNlTWFwVjN9CisgKi8KK1dlYkluc3BlY3Rvci5T
b3VyY2VNYXAubG9hZFBheWxvYWQgPSBmdW5jdGlvbih1cmwpCit7CisgICAgdHJ5IHsKKyAgICAg
ICAgLy8gRklYTUU6IG1ha2Ugc2VuZFJlcXVlc3QgYXN5bmMuCisgICAgICAgIHZhciByZXNwb25z
ZSA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHVybCk7
CisgICAgICAgIGlmICghcmVzcG9uc2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgaWYgKHJlc3BvbnNlLnNsaWNlKDAsIDMpID09PSAiKV19IikKKyAgICAgICAgICAgIHJlc3Bv
bnNlID0gcmVzcG9uc2Uuc3Vic3RyaW5nKHJlc3BvbnNlLmluZGV4T2YoJ1xuJykpOworICAgICAg
ICByZXR1cm4gLyoqIEB0eXBlIHtTb3VyY2VNYXBWM30gKi8gKEpTT04ucGFyc2UocmVzcG9uc2Up
KTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcihlLm1lc3NhZ2UpOwor
ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXAu
cHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRl
YmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lk
ZWJhclBhbmUuanMKaW5kZXggN2IwZDI0YWM1MzVmZTJmNWY0YTk0M2E5M2UwYzUwNjRiOThlNzJk
Zi4uODE4Y2NmZDZjZGE4ODJlZGIxNGI4YjRiMWMzZWQ4NjY2NTQyNDk0YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5l
LmpzCkBAIC0zNzYsNyArMzc2LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5zZWN0aW9uc1swXSA9IHRoaXMuX3JlYnVpbGRTZWN0
aW9uc0ZvclN0eWxlUnVsZXMoc3R5bGVSdWxlcywgdXNlZFByb3BlcnRpZXMsIDAsIG51bGwpOwog
ICAgICAgICB2YXIgYW5jaG9yRWxlbWVudCA9IHRoaXMuc2VjdGlvbnNbMF0uaW5oZXJpdGVkUHJv
cGVydGllc1NlcGFyYXRvckVsZW1lbnQ7CiAKLSAgICAgICAgaWYgKHN0eWxlcy5jb21wdXRlZFN0
eWxlKSAgICAgICAgCisgICAgICAgIGlmIChzdHlsZXMuY29tcHV0ZWRTdHlsZSkKICAgICAgICAg
ICAgIHRoaXMuc2VjdGlvbnNbMF1bMF0ucmVidWlsZENvbXB1dGVkVHJhY2UodGhpcy5zZWN0aW9u
c1swXSk7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMucHNldWRvRWxlbWVu
dHMubGVuZ3RoOyArK2kpIHsKQEAgLTIwMzUsNyArMjAzNSw3IEBAIFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBldmVudC5jb25zdW1l
KHRydWUpOwogCiAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMubGlzdEl0ZW1FbGVt
ZW50KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuc2VjdGlvbi5lZGl0YWJsZSkgCisgICAgICAg
ICAgICBpZiAoIXRoaXMuc2VjdGlvbi5lZGl0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb24uX2NoZWNrV2lsbENhbmNlbEVkaXRpbmco
KSkKQEAgLTIwNDQsOSArMjA0NCw2MCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisg
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5ldmVudEhhc0N0cmxPck1l
dGEoZXZlbnQpKSB7CisgICAgICAgICAgICB0aGlzLl9uYXZpZ2F0ZVRvU291cmNlKGV2ZW50LnRh
cmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICB0aGlzLnN0
YXJ0RWRpdGluZyhldmVudC50YXJnZXQpOwogICAgIH0sCiAKKyAgICBfc2hvd1Jhd0NTU0xvY2F0
aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKKyAgICB7CisgICAgICAgIHZhciB1aUxvY2F0aW9u
ID0gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0
aW9uKTsKKyAgICAgICAgaWYgKCF1aUxvY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJzY3JpcHRzIikuc2hvd1VJU291cmNlQ29kZSh1
aUxvY2F0aW9uLnVpU291cmNlQ29kZSwgdWlMb2NhdGlvbi5saW5lTnVtYmVyKTsKKyAgICB9LAor
CisgICAgX3Jhd0NTU0xvY2F0aW9uOiBmdW5jdGlvbihpc1Byb3BlcnR5TmFtZSkKKyAgICB7Cisg
ICAgICAgIC8vIEVuZCBvZiByYW5nZSBpcyBleGNsdXNpdmUsIHNvIHN1YnRyYWN0IDEgZnJvbSB0
aGUgZW5kIG9mZnNldC4KKyAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zdHlsZS5yYW5nZS5z
dGFydCArIChpc1Byb3BlcnR5TmFtZSA/IHRoaXMucHJvcGVydHkucmFuZ2Uuc3RhcnQgOiB0aGlz
LnByb3BlcnR5LnJhbmdlLmVuZCAtIDEpOworICAgICAgICBpZiAoIWlzUHJvcGVydHlOYW1lICYm
IHRoaXMucHJvcGVydHkudGV4dCAmJiB0aGlzLnByb3BlcnR5LnRleHQuZW5kc1dpdGgoIjsiKSkK
KyAgICAgICAgICAgIHBvc2l0aW9uIC09IDE7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IFdlYklu
c3BlY3Rvci5Gb3JtYXR0ZXIucG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuc2VjdGlvbi5fbGluZUVu
ZGluZ3MsIHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ1NTTG9j
YXRpb24odGhpcy5zdHlsZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCwgbG9jYXRpb25bMF0sIGxvY2F0
aW9uWzFdKTsKKyAgICB9LAorCisgICAgX25hdmlnYXRlVG9Tb3VyY2U6IGZ1bmN0aW9uKGVsZW1l
bnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuc3R5bGUucGFyZW50UnVsZSB8fCAhdGhpcy5z
dHlsZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCB8fCAhdGhpcy5zdHlsZS5yYW5nZSB8fCAhdGhpcy5w
cm9wZXJ0eS5yYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdXJpID0g
V2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVSTCh0aGlzLnN0eWxlLnBhcmVudFJ1bGUu
c291cmNlVVJMKTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IFdlYkluc3BlY3Rvci53b3Jr
c3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVyaSk7CisgICAgICAgIGlmICghdWlTb3VyY2VDb2Rl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLnNlY3Rpb24uX2xpbmVF
bmRpbmdzKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lQ2xpY2tlZCA9IGVsZW1lbnQg
PT09IHRoaXMubmFtZUVsZW1lbnQ7CisgICAgICAgICAgICB0aGlzLl9zaG93UmF3Q1NTTG9jYXRp
b24odGhpcy5fcmF3Q1NTTG9jYXRpb24ocHJvcGVydHlOYW1lQ2xpY2tlZCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdWlTb3VyY2VDb2RlLnJlcXVlc3RDb250
ZW50KGRpZFJlcXVlc3RDb250ZW50LmJpbmQodGhpcykpOworCisgICAgICAgIGZ1bmN0aW9uIGRp
ZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFjb250ZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgdGhpcy5zZWN0aW9uLl9saW5lRW5kaW5ncyA9IGNvbnRlbnQubGluZUVu
ZGluZ3MoKTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dSYXdDU1NMb2NhdGlvbih0aGlzLl9yYXdD
U1NMb2NhdGlvbihwcm9wZXJ0eU5hbWVDbGlja2VkKSk7CisgICAgICAgIH0KKyAgICB9LAorCiAg
ICAgX2lzTmFtZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCiAgICAgewogICAgICAgICByZXR1
cm4gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtY3NzLXByb3Bl
cnR5IikgPT09IHRoaXMubmFtZUVsZW1lbnQ7CkBAIC0yNDY0LDkgKzI1MTUsMTEgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAg
ICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAgICAgICAgICAgICB0aGlzLl9uZXdQcm9w
ZXJ0eUluU3R5bGUgPSB0cnVlOworICAgICAgICAgICAgbmV3U3R5bGUucGFyZW50UnVsZSA9IHRo
aXMuc3R5bGUucGFyZW50UnVsZTsKICAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsK
ICAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBuZXdTdHlsZS5wcm9wZXJ0eUF0KHRoaXMucHJv
cGVydHkuaW5kZXgpOwogICAgICAgICAgICAgdGhpcy5fc3R5bGVSdWxlLnN0eWxlID0gdGhpcy5z
dHlsZTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlY3Rpb24uX2xpbmVFbmRpbmdzOwogCiAg
ICAgICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLnBhbmUpCiAgICAgICAgICAgICAgICAg
c2VjdGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVkIik7CkBA
IC0yNTU5LDcgKzI2MTIsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuQ1NTUHJv
cGVydHlQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgLy8gU3ludGhlc2l6ZSBwcm9w
ZXJ0eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3aGl0ZXNwYWNlIGV0
Yy4KICAgICAgICAgICAgIHRoaXMuX3NpZGViYXJQYW5lLmFwcGx5U3R5bGVUZXh0KHRoaXMuX3Np
ZGViYXJQYW5lLm5hbWVFbGVtZW50LnRleHRDb250ZW50ICsgIjogIiArIHRoaXMuX3NpZGViYXJQ
YW5lLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAg
ICAgIH0KLSAgICAKKwogICAgICAgICAvLyBIYW5kbGUgbnVtZXJpYyB2YWx1ZSBpbmNyZW1lbnQv
ZGVjcmVtZW50IG9ubHkgYXQgdGhpcyBwb2ludC4KICAgICAgICAgaWYgKCF0aGlzLl9pc0VkaXRp
bmdOYW1lICYmIFdlYkluc3BlY3Rvci5oYW5kbGVFbGVtZW50VmFsdWVNb2RpZmljYXRpb25zKGV2
ZW50LCB0aGlzLl9zaWRlYmFyUGFuZS52YWx1ZUVsZW1lbnQsIGZpbmlzaEhhbmRsZXIuYmluZCh0
aGlzKSwgdGhpcy5faXNWYWx1ZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvZWxlbWVudHNQYW5lbC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2VsZW1lbnRzUGFuZWwuY3NzCmluZGV4IDlkZDFkNzgyMmNiOWYzOWEwMWI0ZTQ2ODg1YmRiMWJj
MmU4NDRiMGEuLjFiMTcxMjIyODY3ZDE1NzM5ZmQ5N2IwZDI4NzIwNWM4YWM5MmIzMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVudHNQYW5lbC5j
c3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVs
LmNzcwpAQCAtMTY2LDYgKzE2NiwxMSBAQAogICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7
CiB9CiAKKy5zdHlsZXMtc2VjdGlvbjpub3QoLnJlYWQtb25seSk6aG92ZXIgLnByb3BlcnRpZXMg
bGkgLndlYmtpdC1jc3MtcHJvcGVydHksCisuc3R5bGVzLXNlY3Rpb246bm90KC5yZWFkLW9ubHkp
OmhvdmVyIC5wcm9wZXJ0aWVzIGxpIC52YWx1ZSB7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRv
dHRlZCBibGFjayAhaW1wb3J0YW50OworfQorCiAuc3R5bGVzLXNlY3Rpb246bm90KC5maXJzdC1z
dHlsZXMtc2VjdGlvbikgewogICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IoMTkxLCAxOTEs
IDE5MSk7CiB9CkBAIC0yNzUsNiArMjgwLDcgQEAKIAogLnN0eWxlcy1zZWN0aW9uIC5wcm9wZXJ0
aWVzIGxpIHsKICAgICBtYXJnaW4tbGVmdDogMTJweDsKKyAgICBwYWRkaW5nLWJvdHRvbTogMXB4
OwogICAgIHBhZGRpbmctbGVmdDogMjJweDsKICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAg
IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187558</attachid>
            <date>2013-02-11 06:42:40 -0800</date>
            <delta_ts>2013-02-12 04:15:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20130211183911.patch</filename>
            <type>text/plain</type>
            <size>10836</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc4NDliYjIzMzA5Y2U2
ZmM5Zjc3MzUxNDJlNTIyNjg0YTIxNTJjZi4uZTBkOTRiMWFmNzQ3Mjg4YjYwN2MwYzViZTUwZDA4
NWQ5MTNkNDYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMxIEBACiAyMDEzLTAyLTExICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZXJzIGNhbiBub3cgQ3RybC9DbWQtY2xp
Y2sgQ1NTIHByb3BlcnR5IG5hbWVzL3ZhbHVlcyB3aG9zZSBVSSBsb2NhdGlvbnMgYXJlIGZvdW5k
IGluCisgICAgICAgIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQvc2Fzcy9vdGhlciBmaWxlLiBJbmxp
bmUgc3R5bGVzaGVldHMgYXJlIG5vdCBuYXZpZ2FibGUsCisgICAgICAgIHNpbmNlIHRoZWlyIHN0
YXJ0IG9mZnNldCBpcyBub3QgZGV0ZWN0YWJsZSBpbnNpZGUgdGhlIHN1cnJvdW5kaW5nIEhUTUwu
CisgICAgICAgIE5hdmlnYWJsZSBwcm9wZXJ0eSBuYW1lcy92YWx1ZXMgaGF2ZSBncmF5IGRvdHRl
ZCB1bmRlcmxpbmVzIHRoYXQgYXBwZWFyIHdoZW4gdGhlIHVzZXIKKyAgICAgICAgaXMgaG92ZXJp
bmcgdGhlIHJ1bGUgc2VjdGlvbi4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3R5
bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBh
bmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5f
aW5uZXJSZWJ1aWxkVXBkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRp
ZXNTZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9u
LnByb3RvdHlwZS5faXNDU1NOYXZpZ2FibGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuZXZlbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuZWxlbWVudC5jb250ZW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90
eXBlLmlzUmV2ZXJ0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFu
ZWwuY3NzOgorICAgICAgICAoLnN0eWxlcy1zZWN0aW9uLm5hdmlnYWJsZTpub3QoLnJlYWQtb25s
eSk6aG92ZXIgLnByb3BlcnRpZXMgbGkgLnZhbHVlKToKKyAgICAgICAgKC5zdHlsZXMtc2VjdGlv
biAucHJvcGVydGllcyBsaSk6CisKKzIwMTMtMDItMTEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2
bG92QGNocm9taXVtLm9yZz4KKwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgcG9z
aXRpb24tYmFzZWQgc291cmNlbWFwcGluZyBmb3Igc3R5bGVzaGVldHMKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTE2OAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpp
bmRleCBjZTkwMjZkOTllNTc5ZWExOTVjOTlmNjlhMjI5NzA1Y2M1ODQ1YjUzLi45MWY0NmNiMGRl
MzQwNDhiNTVjMGJiNzVlOTdkYWE5NzQ0YThkMWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAgLTYzLDYg
KzYzLDggQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lID0gZnVuY3Rpb24oY29tcHV0
ZWRTdHlsZVBhbmUsIHNldFBzZXVkb0NsYXNzQ2FsbGIKICAgICAvLyBQcmV2ZW50IHNlY3Rpb24g
ZnJvbSBjb2xsYXBzaW5nLgogICAgIHZhciBtdXRlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2
ZW50KSB7IGV2ZW50LmNvbnN1bWUodHJ1ZSk7IH07CiAKKyAgICB0aGlzLl9saW5lRW5kaW5nc0Zv
clVSTCA9IHt9OworCiAgICAgdGhpcy5zZXR0aW5nc1NlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCBtdXRlRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CiAgICAgdGhpcy5zZXR0aW5n
c1NlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5fY2hhbmdlU2V0
dGluZy5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgdGhpcy5fdXBkYXRlQ29sb3JGb3JtYXRGaWx0
ZXIoKTsKQEAgLTM3Niw3ICszNzgsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnNlY3Rpb25zWzBdID0gdGhpcy5fcmVidWlsZFNl
Y3Rpb25zRm9yU3R5bGVSdWxlcyhzdHlsZVJ1bGVzLCB1c2VkUHJvcGVydGllcywgMCwgbnVsbCk7
CiAgICAgICAgIHZhciBhbmNob3JFbGVtZW50ID0gdGhpcy5zZWN0aW9uc1swXS5pbmhlcml0ZWRQ
cm9wZXJ0aWVzU2VwYXJhdG9yRWxlbWVudDsKIAotICAgICAgICBpZiAoc3R5bGVzLmNvbXB1dGVk
U3R5bGUpICAgICAgICAKKyAgICAgICAgaWYgKHN0eWxlcy5jb21wdXRlZFN0eWxlKQogICAgICAg
ICAgICAgdGhpcy5zZWN0aW9uc1swXVswXS5yZWJ1aWxkQ29tcHV0ZWRUcmFjZSh0aGlzLnNlY3Rp
b25zWzBdKTsKIAogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5wc2V1ZG9FbGVt
ZW50cy5sZW5ndGg7ICsraSkgewpAQCAtODk0LDYgKzg5NiwxMCBAQCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9uKHBhcmVudFBhbmUsIHN0eWxlUnVsZSwgZWRp
dGFibGUsCiAgICAgICAgIC8vIFByZXZlbnQgZWRpdGluZyB0aGUgdXNlciBhZ2VudCBhbmQgdXNl
ciBydWxlcy4KICAgICAgICAgaWYgKHRoaXMucnVsZS5pc1VzZXJBZ2VudCB8fCB0aGlzLnJ1bGUu
aXNVc2VyKQogICAgICAgICAgICAgdGhpcy5lZGl0YWJsZSA9IGZhbHNlOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJ1bGUuc291cmNlVVJMKQorICAgICAgICAgICAgICAg
IHRoaXMubmF2aWdhYmxlID0gdGhpcy5faXNDU1NOYXZpZ2FibGUodGhpcy5ydWxlLnNvdXJjZVVS
TCk7CisgICAgICAgIH0KICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
c3R5bGVzLXNlbGVjdG9yIik7CiAgICAgfQogCkBAIC05MDksNiArOTE1LDkgQEAgV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24gPSBmdW5jdGlvbihwYXJlbnRQYW5lLCBzdHlsZVJ1
bGUsIGVkaXRhYmxlLAogICAgIGlmIChpc0luaGVyaXRlZCkKICAgICAgICAgdGhpcy5lbGVtZW50
LmFkZFN0eWxlQ2xhc3MoInNob3ctaW5oZXJpdGVkIik7IC8vIFRoaXMgb25lIGlzIHJlbGF0ZWQg
dG8gaW5oZXJpdGVkIHJ1bGVzLCBub3QgY29tcHV0ZWQgc3R5bGUuCiAKKyAgICBpZiAodGhpcy5u
YXZpZ2FibGUpCisgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJuYXZpZ2FibGUi
KTsKKwogICAgIGlmICghdGhpcy5lZGl0YWJsZSkKICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoInJlYWQtb25seSIpOwogfQpAQCAtMTEwMCw2ICsxMTA5LDEyIEBAIFdlYkluc3Bl
Y3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJu
IG51bGw7CiAgICAgfSwKIAorICAgIF9pc0NTU05hdmlnYWJsZTogZnVuY3Rpb24odXJsKQorICAg
IHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVs
LnJlc291cmNlRm9yVVJMKHVybCk7CisgICAgICAgIHJldHVybiByZXNvdXJjZSAmJiByZXNvdXJj
ZS5jb250ZW50VHlwZSgpID09PSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0
OworICAgIH0sCisKICAgICBfbWFya1NlbGVjdG9yTWF0Y2hlczogZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLnN0eWxlUnVsZS5ydWxlOwpAQCAtMTk1OCw2ICsxOTcz
LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICBpZiAoIW5ld1N0eWxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAor
ICAgICAgICAgICAgbmV3U3R5bGUucGFyZW50UnVsZSA9IHRoaXMuc3R5bGUucGFyZW50UnVsZTsK
ICAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsKICAgICAgICAgICAgIHRoaXMuX3N0
eWxlUnVsZS5zdHlsZSA9IG5ld1N0eWxlOwogCkBAIC0yMDM2LDYgKzIwNTIsMjggQEAgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMubGlzdEl0ZW1FbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLm5hbWVFbGVtZW50LCB0aGlzLmxp
c3RJdGVtRWxlbWVudC5maXJzdENoaWxkKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtzdHJpbmd9IHVybAorICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQorICAgICAq
LworICAgIF9saW5lRW5kaW5nc0ZvclVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuc2VjdGlvbi5fcGFyZW50UGFuZS5fbGluZUVuZGluZ3NGb3JVUkxbdXJsXSB8
fCBudWxsOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisg
ICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbGluZUVuZGluZ3MKKyAgICAgKi8KKyAgICBf
c2V0TGluZUVuZGluZ3NGb3JVUkw6IGZ1bmN0aW9uKHVybCwgbGluZUVuZGluZ3MpCisgICAgewor
ICAgICAgICBpZiAoIWxpbmVFbmRpbmdzKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWN0
aW9uLl9wYXJlbnRQYW5lLl9saW5lRW5kaW5nc0ZvclVSTFt1cmxdOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2VjdGlvbi5fcGFyZW50UGFuZS5fbGluZUVu
ZGluZ3NGb3JVUkxbdXJsXSA9IGxpbmVFbmRpbmdzOworICAgIH0sCisKICAgICBfbW91c2VDbGlj
azogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5pc0NvbGxhcHNlZCkKQEAgLTIwNDQsNyArMjA4Miw3IEBAIFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBldmVudC5jb25zdW1l
KHRydWUpOwogCiAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMubGlzdEl0ZW1FbGVt
ZW50KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuc2VjdGlvbi5lZGl0YWJsZSkgCisgICAgICAg
ICAgICBpZiAoIXRoaXMuc2VjdGlvbi5lZGl0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb24uX2NoZWNrV2lsbENhbmNlbEVkaXRpbmco
KSkKQEAgLTIwNTMsOSArMjA5MSw3MyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisg
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5ldmVudEhhc0N0cmxPck1l
dGEoZXZlbnQpICYmIHRoaXMuc2VjdGlvbi5uYXZpZ2FibGUpIHsKKyAgICAgICAgICAgIHRoaXMu
X25hdmlnYXRlVG9Tb3VyY2UoZXZlbnQudGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCiAgICAgICAgIHRoaXMuc3RhcnRFZGl0aW5nKGV2ZW50LnRhcmdldCk7CiAgICAg
fSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9ufSBy
YXdMb2NhdGlvbgorICAgICAqLworICAgIF9zaG93UmF3Q1NTTG9jYXRpb246IGZ1bmN0aW9uKHJh
d0xvY2F0aW9uKQorICAgIHsKKyAgICAgICAgdmFyIHVpTG9jYXRpb24gPSBXZWJJbnNwZWN0b3Iu
Y3NzTW9kZWwucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24ocmF3TG9jYXRpb24pOworICAgICAgICBp
ZiAoIXVpTG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdlYkluc3BlY3Rv
ci5zaG93UGFuZWwoInNjcmlwdHMiKS5zaG93VUlTb3VyY2VDb2RlKHVpTG9jYXRpb24udWlTb3Vy
Y2VDb2RlLCB1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBsaW5lRW5kaW5ncworICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gaXNQcm9wZXJ0eU5hbWUKKyAgICAgKi8KKyAgICBfcmF3Q1NTTG9jYXRpb246IGZ1bmN0
aW9uKGxpbmVFbmRpbmdzLCBpc1Byb3BlcnR5TmFtZSkKKyAgICB7CisgICAgICAgIC8vIEVuZCBv
ZiByYW5nZSBpcyBleGNsdXNpdmUsIHNvIHN1YnRyYWN0IDEgZnJvbSB0aGUgZW5kIG9mZnNldC4K
KyAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zdHlsZS5yYW5nZS5zdGFydCArIChpc1Byb3Bl
cnR5TmFtZSA/IHRoaXMucHJvcGVydHkucmFuZ2Uuc3RhcnQgOiB0aGlzLnByb3BlcnR5LnJhbmdl
LmVuZCAtIDEpOworICAgICAgICBpZiAoIWlzUHJvcGVydHlOYW1lICYmIHRoaXMucHJvcGVydHku
dGV4dCAmJiB0aGlzLnByb3BlcnR5LnRleHQuZW5kc1dpdGgoIjsiKSkKKyAgICAgICAgICAgIHBv
c2l0aW9uIC09IDE7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZXIucG9zaXRpb25Ub0xvY2F0aW9uKGxpbmVFbmRpbmdzLCBwb3NpdGlvbik7CisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU0xvY2F0aW9uKHRoaXMuc3R5bGUucGFyZW50UnVsZS5z
b3VyY2VVUkwsIGxvY2F0aW9uWzBdLCBsb2NhdGlvblsxXSk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAorICAgICAqLworICAgIF9uYXZpZ2F0ZVRv
U291cmNlOiBmdW5jdGlvbihlbGVtZW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5zZWN0aW9uLm5hdmlnYWJsZSk7CisgICAgICAgIGlmICghdGhpcy5zdHlsZS5wYXJlbnRS
dWxlIHx8ICF0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMIHx8ICF0aGlzLnN0eWxlLnJh
bmdlIHx8ICF0aGlzLnByb3BlcnR5LnJhbmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciB1cmkgPSBXZWJJbnNwZWN0b3IuZmlsZU1hcHBpbmcudXJpRm9yVVJMKHRoaXMuc3R5
bGUucGFyZW50UnVsZS5zb3VyY2VVUkwpOworICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gV2Vi
SW5zcGVjdG9yLndvcmtzcGFjZS51aVNvdXJjZUNvZGVGb3JVUkkodXJpKTsKKyAgICAgICAgaWYg
KCF1aVNvdXJjZUNvZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHByb3Bl
cnR5TmFtZUNsaWNrZWQgPSBlbGVtZW50ID09PSB0aGlzLm5hbWVFbGVtZW50OworICAgICAgICB2
YXIgbGluZUVuZGluZ3MgPSB0aGlzLl9saW5lRW5kaW5nc0ZvclVSTCh0aGlzLnN0eWxlLnBhcmVu
dFJ1bGUuc291cmNlVVJMKTsKKyAgICAgICAgaWYgKGxpbmVFbmRpbmdzKSB7CisgICAgICAgICAg
ICB0aGlzLl9zaG93UmF3Q1NTTG9jYXRpb24odGhpcy5fcmF3Q1NTTG9jYXRpb24obGluZUVuZGlu
Z3MsIHByb3BlcnR5TmFtZUNsaWNrZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHVpU291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChkaWRSZXF1ZXN0Q29udGVu
dC5iaW5kKHRoaXMpKTsKKworICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29udGVudChjb250
ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghY29udGVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGxpbmVF
bmRpbmdzID0gY29udGVudC5saW5lRW5kaW5ncygpOworICAgICAgICAgICAgdGhpcy5fc2V0TGlu
ZUVuZGluZ3NGb3JVUkwodGhpcy5zdHlsZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCwgbGluZUVuZGlu
Z3MpOworICAgICAgICAgICAgdGhpcy5fc2hvd1Jhd0NTU0xvY2F0aW9uKHRoaXMuX3Jhd0NTU0xv
Y2F0aW9uKGxpbmVFbmRpbmdzLCBwcm9wZXJ0eU5hbWVDbGlja2VkKSk7CisgICAgICAgIH0KKyAg
ICB9LAorCiAgICAgX2lzTmFtZUVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCiAgICAgewogICAg
ICAgICByZXR1cm4gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQt
Y3NzLXByb3BlcnR5IikgPT09IHRoaXMubmFtZUVsZW1lbnQ7CkBAIC0yNDczLDkgKzI1NzUsMTIg
QEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAK
ICAgICAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAgICAgICAgICAgICB0aGlz
Ll9uZXdQcm9wZXJ0eUluU3R5bGUgPSB0cnVlOworICAgICAgICAgICAgbmV3U3R5bGUucGFyZW50
UnVsZSA9IHRoaXMuc3R5bGUucGFyZW50UnVsZTsKICAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBu
ZXdTdHlsZTsKICAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBuZXdTdHlsZS5wcm9wZXJ0eUF0
KHRoaXMucHJvcGVydHkuaW5kZXgpOwogICAgICAgICAgICAgdGhpcy5fc3R5bGVSdWxlLnN0eWxl
ID0gdGhpcy5zdHlsZTsKKyAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlLnBhcmVudFJ1bGUpCisg
ICAgICAgICAgICAgICAgdGhpcy5fc2V0TGluZUVuZGluZ3NGb3JVUkwodGhpcy5zdHlsZS5wYXJl
bnRSdWxlLnNvdXJjZVVSTCwgbnVsbCk7CiAKICAgICAgICAgICAgIGlmIChzZWN0aW9uICYmIHNl
Y3Rpb24ucGFuZSkKICAgICAgICAgICAgICAgICBzZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJzdHlsZSBlZGl0ZWQiKTsKQEAgLTI1NjgsNyArMjY3Myw3IEBAIFdlYkluc3Bl
Y3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQcm9wZXJ0eVByb21wdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAvLyBTeW50aGVzaXplIHByb3BlcnR5IHRleHQgZGlzcmVnYXJkaW5nIGFueSBj
b21tZW50cywgY3VzdG9tIHdoaXRlc3BhY2UgZXRjLgogICAgICAgICAgICAgdGhpcy5fc2lkZWJh
clBhbmUuYXBwbHlTdHlsZVRleHQodGhpcy5fc2lkZWJhclBhbmUubmFtZUVsZW1lbnQudGV4dENv
bnRlbnQgKyAiOiAiICsgdGhpcy5fc2lkZWJhclBhbmUudmFsdWVFbGVtZW50LnRleHRDb250ZW50
LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgfQotICAgIAorCiAgICAgICAgIC8vIEhh
bmRsZSBudW1lcmljIHZhbHVlIGluY3JlbWVudC9kZWNyZW1lbnQgb25seSBhdCB0aGlzIHBvaW50
LgogICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdGluZ05hbWUgJiYgV2ViSW5zcGVjdG9yLmhhbmRs
ZUVsZW1lbnRWYWx1ZU1vZGlmaWNhdGlvbnMoZXZlbnQsIHRoaXMuX3NpZGViYXJQYW5lLnZhbHVl
RWxlbWVudCwgZmluaXNoSGFuZGxlci5iaW5kKHRoaXMpLCB0aGlzLl9pc1ZhbHVlU3VnZ2VzdGlv
bi5iaW5kKHRoaXMpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNzcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3MKaW5kZXggOWRk
MWQ3ODIyY2I5ZjM5YTAxYjRlNDY4ODViZGIxYmMyZTg0NGIwYS4uOWNhNTEwY2ZhMzJkM2ZkMWY0
ODE5ZDM1ZWM3MTcxOGJiMTc1M2ZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2VsZW1lbnRzUGFuZWwuY3NzCkBAIC0xNjYsNiArMTY2LDExIEBACiAg
ICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKIH0KIAorLnN0eWxlcy1zZWN0aW9uLm5hdmln
YWJsZTpub3QoLnJlYWQtb25seSk6aG92ZXIgLnByb3BlcnRpZXMgbGkgLndlYmtpdC1jc3MtcHJv
cGVydHksCisuc3R5bGVzLXNlY3Rpb24ubmF2aWdhYmxlOm5vdCgucmVhZC1vbmx5KTpob3ZlciAu
cHJvcGVydGllcyBsaSAudmFsdWUgeworICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgZ3Jh
eTsKK30KKwogLnN0eWxlcy1zZWN0aW9uOm5vdCguZmlyc3Qtc3R5bGVzLXNlY3Rpb24pIHsKICAg
ICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDE5MSwgMTkxLCAxOTEpOwogfQpAQCAtMjc1LDYg
KzI4MCw3IEBACiAKIC5zdHlsZXMtc2VjdGlvbiAucHJvcGVydGllcyBsaSB7CiAgICAgbWFyZ2lu
LWxlZnQ6IDEycHg7CisgICAgcGFkZGluZy1ib3R0b206IDFweDsKICAgICBwYWRkaW5nLWxlZnQ6
IDIycHg7CiAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICB0ZXh0LW92ZXJmbG93OiBlbGxp
cHNpczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>187560</attachid>
            <date>2013-02-11 06:50:26 -0800</date>
            <delta_ts>2013-02-11 06:50:26 -0800</delta_ts>
            <desc>[Image] Screenshot of a navigable rule section hovered</desc>
            <filename>Navigable.png</filename>
            <type>image/png</type>
            <size>12144</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">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
QmCC
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187830</attachid>
            <date>2013-02-12 04:15:40 -0800</date>
            <delta_ts>2013-02-27 04:59:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20130212161210.patch</filename>
            <type>text/plain</type>
            <size>11440</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZhMmUzNjdiZTQ1MWNl
OWEzYzdlMTBmMmYxYzdjM2Y3OTZiNTFjMi4uOGQzZjhkZWU2YmNmZGIzZDI0Mjc1MjI3ZTU2OGUz
YjczOGJjY2ViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEzLTAyLTEyICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZXJzIGNhbiBub3cgQ3RybC9DbWQtY2xp
Y2sgQ1NTIHByb3BlcnR5IG5hbWVzL3ZhbHVlcyB3aG9zZSBVSSBsb2NhdGlvbnMgYXJlIGZvdW5k
IGluCisgICAgICAgIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQvc2Fzcy9vdGhlciBmaWxlLiBJbmxp
bmUgc3R5bGVzaGVldHMgYXJlIG5vdCBuYXZpZ2FibGUsCisgICAgICAgIHNpbmNlIHRoZWlyIHN0
YXJ0IG9mZnNldCBpcyBub3QgZGV0ZWN0YWJsZSBpbnNpZGUgdGhlIHN1cnJvdW5kaW5nIEhUTUwu
CisgICAgICAgIE5hdmlnYWJsZSBwcm9wZXJ0eSBuYW1lcy92YWx1ZXMgaGF2ZSBncmF5IGRvdHRl
ZCB1bmRlcmxpbmVzIHRoYXQgYXBwZWFyIHdoZW4gdGhlIHVzZXIKKyAgICAgICAgaXMgaG92ZXJp
bmcgdGhlIHJ1bGUgc2VjdGlvbi4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1NT
U3R5bGVNb2RlbC5qczogS2VlcCB0cmFjayBvZiB0aGUgbGluZSBlbmRpbmdzIGZvciBDU1Mgc3R5
bGVzaGVldHMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUubGluZUVuZGluZ3NGb3JVUkwp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLnNldExpbmVF
bmRpbmdzRm9yVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3Rv
dHlwZS5faW5uZXJSZWJ1aWxkVXBkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnRpZXNTZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNT
ZWN0aW9uLnByb3RvdHlwZS5faXNDU1NOYXZpZ2FibGUpOgorICAgICAgICAgIERldGVjdCBpZiB1
c2VycyBjYW4gbmF2aWdhdGUgdG8gVUkgbG9jYXRpb25zIGNvcnJlc3BvbmRpbmcgdG8gQ1NTIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5
VHJlZUVsZW1lbnQucHJvdG90eXBlLmV2ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLmVsZW1lbnQuY29udGVudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5pc1Jl
dmVydCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50c1BhbmVsLmNzczoK
KyAgICAgICAgKC5zdHlsZXMtc2VjdGlvbi5uYXZpZ2FibGU6bm90KC5yZWFkLW9ubHkpOmhvdmVy
IC5wcm9wZXJ0aWVzIGxpIC52YWx1ZSk6CisgICAgICAgICguc3R5bGVzLXNlY3Rpb24gLnByb3Bl
cnRpZXMgbGkpOgorCiAyMDEzLTAyLTEyICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUk6IE1vdXNlIGNsaWNrIG5vdCBv
biBzdWItZmllbGRzIGluIG11bHRpcGxlIGZpZWxkcyBpbnB1dCAgc2hvdWxkIG5vdCBtb3ZlIGZv
Y3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0
eWxlTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxl
TW9kZWwuanMKaW5kZXggZjQ1YjJmOGQ2YmIwNDcxZDYzMmNiMzhhZTdmMjAyNTBiMTBjZGM5Mi4u
OWM0MmI0ODhkMWU4M2U3MWQ4ZmUyZjE2NGUwYTdjZTUwOGM3MmU0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpAQCAtNDAs
NiArNDAsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbCA9IGZ1bmN0aW9uKHdvcmtzcGFj
ZSkKICAgICAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5MaXZl
TG9jYXRpb24+fSAqLwogICAgIHRoaXMuX2xvY2F0aW9ucyA9IFtdOwogICAgIHRoaXMuX3NvdXJj
ZU1hcHBpbmdzID0ge307CisgICAgdGhpcy5fbGluZUVuZGluZ3NGb3JVUkwgPSB7fTsKICAgICBX
ZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdl
bnQuRXZlbnRzLlVuZG9SZWRvUmVxdWVzdGVkLCB0aGlzLl91bmRvUmVkb1JlcXVlc3RlZCwgdGhp
cyk7CiAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkRPTUFnZW50LkV2ZW50cy5VbmRvUmVkb0NvbXBsZXRlZCwgdGhpcy5fdW5kb1JlZG9Db21w
bGV0ZWQsIHRoaXMpOwogICAgIHRoaXMuX3Jlc291cmNlQmluZGluZyA9IG5ldyBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNb2RlbFJlc291cmNlQmluZGluZygpOwpAQCAtMzU4LDYgKzM1OSwyOCBAQCBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8q
KgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVt
YmVyPn0KKyAgICAgKi8KKyAgICBsaW5lRW5kaW5nc0ZvclVSTDogZnVuY3Rpb24odXJsKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmVFbmRpbmdzRm9yVVJMW3VybF0gfHwgbnVsbDsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAorICAgICAqIEBw
YXJhbSB7QXJyYXkuPG51bWJlcj59IGxpbmVFbmRpbmdzCisgICAgICovCisgICAgc2V0TGluZUVu
ZGluZ3NGb3JVUkw6IGZ1bmN0aW9uKHVybCwgbGluZUVuZGluZ3MpCisgICAgeworICAgICAgICBp
ZiAoIWxpbmVFbmRpbmdzKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGluZUVuZGluZ3NG
b3JVUkxbdXJsXTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9saW5lRW5kaW5nc0ZvclVSTFt1cmxdID0gbGluZUVuZGluZ3M7CisgICAgfSwKKworICAgIC8q
KgogICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKICAgICAgKi8KICAgICBf
b3duZXJEb2N1bWVudElkOiBmdW5jdGlvbihub2RlSWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRleCBjZTkw
MjZkOTllNTc5ZWExOTVjOTlmNjlhMjI5NzA1Y2M1ODQ1YjUzLi5jZmU3ZTM1MmZhZDI3OTQxMDEy
ZjgzZmMyYWJkZjMyZWE2NjU3OGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAgLTM3Niw3ICszNzYsNyBA
QCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICB0
aGlzLnNlY3Rpb25zWzBdID0gdGhpcy5fcmVidWlsZFNlY3Rpb25zRm9yU3R5bGVSdWxlcyhzdHls
ZVJ1bGVzLCB1c2VkUHJvcGVydGllcywgMCwgbnVsbCk7CiAgICAgICAgIHZhciBhbmNob3JFbGVt
ZW50ID0gdGhpcy5zZWN0aW9uc1swXS5pbmhlcml0ZWRQcm9wZXJ0aWVzU2VwYXJhdG9yRWxlbWVu
dDsKIAotICAgICAgICBpZiAoc3R5bGVzLmNvbXB1dGVkU3R5bGUpICAgICAgICAKKyAgICAgICAg
aWYgKHN0eWxlcy5jb21wdXRlZFN0eWxlKQogICAgICAgICAgICAgdGhpcy5zZWN0aW9uc1swXVsw
XS5yZWJ1aWxkQ29tcHV0ZWRUcmFjZSh0aGlzLnNlY3Rpb25zWzBdKTsKIAogICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHN0eWxlcy5wc2V1ZG9FbGVtZW50cy5sZW5ndGg7ICsraSkgewpAQCAt
ODk0LDYgKzg5NCwxMCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1
bmN0aW9uKHBhcmVudFBhbmUsIHN0eWxlUnVsZSwgZWRpdGFibGUsCiAgICAgICAgIC8vIFByZXZl
bnQgZWRpdGluZyB0aGUgdXNlciBhZ2VudCBhbmQgdXNlciBydWxlcy4KICAgICAgICAgaWYgKHRo
aXMucnVsZS5pc1VzZXJBZ2VudCB8fCB0aGlzLnJ1bGUuaXNVc2VyKQogICAgICAgICAgICAgdGhp
cy5lZGl0YWJsZSA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlz
LnJ1bGUuc291cmNlVVJMKQorICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhYmxlID0gdGhpcy5f
aXNDU1NOYXZpZ2FibGUodGhpcy5ydWxlLnNvdXJjZVVSTCk7CisgICAgICAgIH0KICAgICAgICAg
dGhpcy50aXRsZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygic3R5bGVzLXNlbGVjdG9yIik7CiAgICAg
fQogCkBAIC05MDksNiArOTEzLDkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rp
b24gPSBmdW5jdGlvbihwYXJlbnRQYW5lLCBzdHlsZVJ1bGUsIGVkaXRhYmxlLAogICAgIGlmIChp
c0luaGVyaXRlZCkKICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNob3ctaW5o
ZXJpdGVkIik7IC8vIFRoaXMgb25lIGlzIHJlbGF0ZWQgdG8gaW5oZXJpdGVkIHJ1bGVzLCBub3Qg
Y29tcHV0ZWQgc3R5bGUuCiAKKyAgICBpZiAodGhpcy5uYXZpZ2FibGUpCisgICAgICAgIHRoaXMu
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJuYXZpZ2FibGUiKTsKKwogICAgIGlmICghdGhpcy5lZGl0
YWJsZSkKICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInJlYWQtb25seSIpOwog
fQpAQCAtMTEwMCw2ICsxMTA3LDEyIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0
aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfSwKIAorICAgIF9p
c0NTU05hdmlnYWJsZTogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNl
ID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLnJlc291cmNlRm9yVVJMKHVybCk7Cisg
ICAgICAgIHJldHVybiByZXNvdXJjZSAmJiByZXNvdXJjZS5jb250ZW50VHlwZSgpID09PSBXZWJJ
bnNwZWN0b3IucmVzb3VyY2VUeXBlcy5TdHlsZXNoZWV0OworICAgIH0sCisKICAgICBfbWFya1Nl
bGVjdG9yTWF0Y2hlczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHJ1bGUgPSB0aGlz
LnN0eWxlUnVsZS5ydWxlOwpAQCAtMTk1OCw2ICsxOTcxLDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoIW5ld1N0
eWxlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgbmV3U3R5bGUucGFy
ZW50UnVsZSA9IHRoaXMuc3R5bGUucGFyZW50UnVsZTsKICAgICAgICAgICAgIHRoaXMuc3R5bGUg
PSBuZXdTdHlsZTsKICAgICAgICAgICAgIHRoaXMuX3N0eWxlUnVsZS5zdHlsZSA9IG5ld1N0eWxl
OwogCkBAIC0yMDQ0LDcgKzIwNTgsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgZXZlbnQuY29uc3VtZSh0cnVlKTsKIAogICAg
ICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLmxpc3RJdGVtRWxlbWVudCkgewotICAgICAg
ICAgICAgaWYgKCF0aGlzLnNlY3Rpb24uZWRpdGFibGUpIAorICAgICAgICAgICAgaWYgKCF0aGlz
LnNlY3Rpb24uZWRpdGFibGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAg
ICBpZiAodGhpcy5zZWN0aW9uLl9jaGVja1dpbGxDYW5jZWxFZGl0aW5nKCkpCkBAIC0yMDUzLDkg
KzIwNjcsNzMgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuZXZlbnRIYXNDdHJsT3JNZXRhKGV2ZW50KSAmJiB0
aGlzLnNlY3Rpb24ubmF2aWdhYmxlKSB7CisgICAgICAgICAgICB0aGlzLl9uYXZpZ2F0ZVRvU291
cmNlKGV2ZW50LnRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAg
ICAgICB0aGlzLnN0YXJ0RWRpdGluZyhldmVudC50YXJnZXQpOwogICAgIH0sCiAKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5DU1NMb2NhdGlvbn0gcmF3TG9jYXRpb24KKyAg
ICAgKi8KKyAgICBfc2hvd1Jhd0NTU0xvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKKyAg
ICB7CisgICAgICAgIHZhciB1aUxvY2F0aW9uID0gV2ViSW5zcGVjdG9yLmNzc01vZGVsLnJhd0xv
Y2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0aW9uKTsKKyAgICAgICAgaWYgKCF1aUxvY2F0aW9u
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJz
Y3JpcHRzIikuc2hvd1VJU291cmNlQ29kZSh1aUxvY2F0aW9uLnVpU291cmNlQ29kZSwgdWlMb2Nh
dGlvbi5saW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJh
eS48bnVtYmVyPn0gbGluZUVuZGluZ3MKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvcGVy
dHlOYW1lCisgICAgICovCisgICAgX3Jhd0NTU0xvY2F0aW9uOiBmdW5jdGlvbihsaW5lRW5kaW5n
cywgaXNQcm9wZXJ0eU5hbWUpCisgICAgeworICAgICAgICAvLyBFbmQgb2YgcmFuZ2UgaXMgZXhj
bHVzaXZlLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIGVuZCBvZmZzZXQuCisgICAgICAgIHZhciBw
b3NpdGlvbiA9IHRoaXMuc3R5bGUucmFuZ2Uuc3RhcnQgKyAoaXNQcm9wZXJ0eU5hbWUgPyB0aGlz
LnByb3BlcnR5LnJhbmdlLnN0YXJ0IDogdGhpcy5wcm9wZXJ0eS5yYW5nZS5lbmQgLSAxKTsKKyAg
ICAgICAgaWYgKCFpc1Byb3BlcnR5TmFtZSAmJiB0aGlzLnByb3BlcnR5LnRleHQgJiYgdGhpcy5w
cm9wZXJ0eS50ZXh0LmVuZHNXaXRoKCI7IikpCisgICAgICAgICAgICBwb3NpdGlvbiAtPSAxOwor
ICAgICAgICB2YXIgbG9jYXRpb24gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyLnBvc2l0aW9uVG9M
b2NhdGlvbihsaW5lRW5kaW5ncywgcG9zaXRpb24pOworICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5DU1NMb2NhdGlvbih0aGlzLnN0eWxlLnBhcmVudFJ1bGUuc291cmNlVVJMLCBsb2Nh
dGlvblswXSwgbG9jYXRpb25bMV0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e0VsZW1lbnR9IGVsZW1lbnQKKyAgICAgKi8KKyAgICBfbmF2aWdhdGVUb1NvdXJjZTogZnVuY3Rp
b24oZWxlbWVudCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2VjdGlvbi5u
YXZpZ2FibGUpOworICAgICAgICBpZiAoIXRoaXMuc3R5bGUucGFyZW50UnVsZSB8fCAhdGhpcy5z
dHlsZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCB8fCAhdGhpcy5zdHlsZS5yYW5nZSB8fCAhdGhpcy5w
cm9wZXJ0eS5yYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdXJpID0g
V2ViSW5zcGVjdG9yLmZpbGVNYXBwaW5nLnVyaUZvclVSTCh0aGlzLnN0eWxlLnBhcmVudFJ1bGUu
c291cmNlVVJMKTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IFdlYkluc3BlY3Rvci53b3Jr
c3BhY2UudWlTb3VyY2VDb2RlRm9yVVJJKHVyaSk7CisgICAgICAgIGlmICghdWlTb3VyY2VDb2Rl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBwcm9wZXJ0eU5hbWVDbGlja2Vk
ID0gZWxlbWVudCA9PT0gdGhpcy5uYW1lRWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmVFbmRpbmdz
ID0gV2ViSW5zcGVjdG9yLmNzc01vZGVsLmxpbmVFbmRpbmdzRm9yVVJMKHRoaXMuc3R5bGUucGFy
ZW50UnVsZS5zb3VyY2VVUkwpOworICAgICAgICBpZiAobGluZUVuZGluZ3MpIHsKKyAgICAgICAg
ICAgIHRoaXMuX3Nob3dSYXdDU1NMb2NhdGlvbih0aGlzLl9yYXdDU1NMb2NhdGlvbihsaW5lRW5k
aW5ncywgcHJvcGVydHlOYW1lQ2xpY2tlZCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdWlTb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50KGRpZFJlcXVlc3RDb250
ZW50LmJpbmQodGhpcykpOworCisgICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50KGNv
bnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFjb250ZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbGlu
ZUVuZGluZ3MgPSBjb250ZW50LmxpbmVFbmRpbmdzKCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0
b3IuY3NzTW9kZWwuc2V0TGluZUVuZGluZ3NGb3JVUkwodGhpcy5zdHlsZS5wYXJlbnRSdWxlLnNv
dXJjZVVSTCwgbGluZUVuZGluZ3MpOworICAgICAgICAgICAgdGhpcy5fc2hvd1Jhd0NTU0xvY2F0
aW9uKHRoaXMuX3Jhd0NTU0xvY2F0aW9uKGxpbmVFbmRpbmdzLCBwcm9wZXJ0eU5hbWVDbGlja2Vk
KSk7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgX2lzTmFtZUVsZW1lbnQ6IGZ1bmN0aW9uKGVs
ZW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxm
V2l0aENsYXNzKCJ3ZWJraXQtY3NzLXByb3BlcnR5IikgPT09IHRoaXMubmFtZUVsZW1lbnQ7CkBA
IC0yNDczLDkgKzI1NTEsMTIgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVu
dC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAg
ICAgICAgICAgICAgICB0aGlzLl9uZXdQcm9wZXJ0eUluU3R5bGUgPSB0cnVlOworICAgICAgICAg
ICAgbmV3U3R5bGUucGFyZW50UnVsZSA9IHRoaXMuc3R5bGUucGFyZW50UnVsZTsKICAgICAgICAg
ICAgIHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsKICAgICAgICAgICAgIHRoaXMucHJvcGVydHkgPSBu
ZXdTdHlsZS5wcm9wZXJ0eUF0KHRoaXMucHJvcGVydHkuaW5kZXgpOwogICAgICAgICAgICAgdGhp
cy5fc3R5bGVSdWxlLnN0eWxlID0gdGhpcy5zdHlsZTsKKyAgICAgICAgICAgIGlmICh0aGlzLnN0
eWxlLnBhcmVudFJ1bGUpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLnNl
dExpbmVFbmRpbmdzRm9yVVJMKHRoaXMuc3R5bGUucGFyZW50UnVsZS5zb3VyY2VVUkwsIG51bGwp
OwogCiAgICAgICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLnBhbmUpCiAgICAgICAgICAg
ICAgICAgc2VjdGlvbi5wYW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVk
Iik7CkBAIC0yNTY4LDcgKzI2NDksNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUu
Q1NTUHJvcGVydHlQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgLy8gU3ludGhlc2l6
ZSBwcm9wZXJ0eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3aGl0ZXNw
YWNlIGV0Yy4KICAgICAgICAgICAgIHRoaXMuX3NpZGViYXJQYW5lLmFwcGx5U3R5bGVUZXh0KHRo
aXMuX3NpZGViYXJQYW5lLm5hbWVFbGVtZW50LnRleHRDb250ZW50ICsgIjogIiArIHRoaXMuX3Np
ZGViYXJQYW5lLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAvLyBIYW5kbGUgbnVtZXJpYyB2YWx1ZSBpbmNy
ZW1lbnQvZGVjcmVtZW50IG9ubHkgYXQgdGhpcyBwb2ludC4KICAgICAgICAgaWYgKCF0aGlzLl9p
c0VkaXRpbmdOYW1lICYmIFdlYkluc3BlY3Rvci5oYW5kbGVFbGVtZW50VmFsdWVNb2RpZmljYXRp
b25zKGV2ZW50LCB0aGlzLl9zaWRlYmFyUGFuZS52YWx1ZUVsZW1lbnQsIGZpbmlzaEhhbmRsZXIu
YmluZCh0aGlzKSwgdGhpcy5faXNWYWx1ZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvZWxlbWVudHNQYW5lbC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2VsZW1lbnRzUGFuZWwuY3NzCmluZGV4IDlkZDFkNzgyMmNiOWYzOWEwMWI0ZTQ2ODg1
YmRiMWJjMmU4NDRiMGEuLjljYTUxMGNmYTMyZDNmZDFmNDgxOWQzNWVjNzE3MThiYjE3NTNmZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvZWxlbWVudHNQ
YW5lbC5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9lbGVtZW50
c1BhbmVsLmNzcwpAQCAtMTY2LDYgKzE2NiwxMSBAQAogICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6
IHRleHQ7CiB9CiAKKy5zdHlsZXMtc2VjdGlvbi5uYXZpZ2FibGU6bm90KC5yZWFkLW9ubHkpOmhv
dmVyIC5wcm9wZXJ0aWVzIGxpIC53ZWJraXQtY3NzLXByb3BlcnR5LAorLnN0eWxlcy1zZWN0aW9u
Lm5hdmlnYWJsZTpub3QoLnJlYWQtb25seSk6aG92ZXIgLnByb3BlcnRpZXMgbGkgLnZhbHVlIHsK
KyAgICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkIGdyYXk7Cit9CisKIC5zdHlsZXMtc2VjdGlv
bjpub3QoLmZpcnN0LXN0eWxlcy1zZWN0aW9uKSB7CiAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlk
IHJnYigxOTEsIDE5MSwgMTkxKTsKIH0KQEAgLTI3NSw2ICsyODAsNyBAQAogCiAuc3R5bGVzLXNl
Y3Rpb24gLnByb3BlcnRpZXMgbGkgewogICAgIG1hcmdpbi1sZWZ0OiAxMnB4OworICAgIHBhZGRp
bmctYm90dG9tOiAxcHg7CiAgICAgcGFkZGluZy1sZWZ0OiAyMnB4OwogICAgIHdoaXRlLXNwYWNl
OiBub3JtYWw7CiAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190930</attachid>
            <date>2013-03-01 04:11:15 -0800</date>
            <delta_ts>2013-03-01 05:07:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105285-20130301160726.patch</filename>
            <type>text/plain</type>
            <size>6227</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5OTBiMzRmMDNjN2Nm
ZDVjNjAxYmE3YjhkMWI3YmYxMzMxNjgwMy4uN2UzNmEzYTQ1OTg2ZTdiNTBhZDRiNTUyZGZlNzQ0
OTY3NGZlNGQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEzLTAzLTAxICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1N0eWxlc10gSW1wbGVtZW50IG5hdmlnYXRpb24gdG8gVUkgbG9jYXRpb25zIG9mIHBy
b3BlcnR5IG5hbWVzL3ZhbHVlcyBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZXJzIGNhbiBub3cgQ3RybC9DbWQtY2xp
Y2sgQ1NTIHByb3BlcnR5IG5hbWVzL3ZhbHVlcyB3aG9zZSBVSSBsb2NhdGlvbnMgYXJlIGZvdW5k
IGluCisgICAgICAgIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQvc2Fzcy9vdGhlciBmaWxlLiBJbmxp
bmUgc3R5bGVzaGVldHMgYXJlIG5vdCBuYXZpZ2FibGUsCisgICAgICAgIHNpbmNlIHRoZWlyIHN0
YXJ0IHBvc2l0aW9uIGlzIG5vdCBkZXRlY3RhYmxlIGluc2lkZSB0aGUgc3Vycm91bmRpbmcgSFRN
TCBhcyBvZiB5ZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhIFVJIGNoYW5nZS4KKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanM6IEFkZCBuYXZp
Z2F0aW9uIGNvZGUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJv
dG90eXBlLl9pbm5lclJlYnVpbGRVcGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydGllc1NlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGll
c1NlY3Rpb24ucHJvdG90eXBlLl9pc0NTU05hdmlnYWJsZSk6CisgICAgICAgICAgRGV0ZWN0IGlm
IHVzZXJzIGNhbiBuYXZpZ2F0ZSB0byBVSSBsb2NhdGlvbnMgY29ycmVzcG9uZGluZyB0byBDU1Mg
cHJvcGVydHkgbmFtZXMvdmFsdWVzLgorCiAyMDEzLTAzLTAxICBFdWdlbmUgS2x5dWNobmlrb3Yg
IDxldXN0YXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtEYXRhR3Jp
ZF0gQ29sdW1ucyBhcmUgbWlzYWxpZ25lZCBhZnRlciByb3dzIGJlaW5nIHJlZnJlc2hlZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJh
clBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzCmluZGV4IGQ0MzlkM2FlODgxMTJjY2NmNDFmZmJjYTNiY2U4NDQ5NjIyNzc3MzYu
LjZiYTgzYWUzZmU1MmQyMGI1NzA3OWZiMTM5MzExMTVhNThjNTJmZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
cwpAQCAtMzc2LDcgKzM3Niw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc2VjdGlvbnNbMF0gPSB0aGlzLl9yZWJ1aWxkU2VjdGlv
bnNGb3JTdHlsZVJ1bGVzKHN0eWxlUnVsZXMsIHVzZWRQcm9wZXJ0aWVzLCAwLCBudWxsKTsKICAg
ICAgICAgdmFyIGFuY2hvckVsZW1lbnQgPSB0aGlzLnNlY3Rpb25zWzBdLmluaGVyaXRlZFByb3Bl
cnRpZXNTZXBhcmF0b3JFbGVtZW50OwogCi0gICAgICAgIGlmIChzdHlsZXMuY29tcHV0ZWRTdHls
ZSkgICAgICAgIAorICAgICAgICBpZiAoc3R5bGVzLmNvbXB1dGVkU3R5bGUpCiAgICAgICAgICAg
ICB0aGlzLnNlY3Rpb25zWzBdWzBdLnJlYnVpbGRDb21wdXRlZFRyYWNlKHRoaXMuc2VjdGlvbnNb
MF0pOwogCiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLnBzZXVkb0VsZW1lbnRz
Lmxlbmd0aDsgKytpKSB7CkBAIC04OTQsNiArODk0LDEwIEBAIFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24ocGFyZW50UGFuZSwgc3R5bGVSdWxlLCBlZGl0YWJs
ZSwKICAgICAgICAgLy8gUHJldmVudCBlZGl0aW5nIHRoZSB1c2VyIGFnZW50IGFuZCB1c2VyIHJ1
bGVzLgogICAgICAgICBpZiAodGhpcy5ydWxlLmlzVXNlckFnZW50IHx8IHRoaXMucnVsZS5pc1Vz
ZXIpCiAgICAgICAgICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHRoaXMucnVsZS5zb3VyY2VVUkwpCisgICAgICAgICAgICAgICAgdGhp
cy5uYXZpZ2FibGUgPSB0aGlzLl9pc0NTU05hdmlnYWJsZSh0aGlzLnJ1bGUuc291cmNlVVJMKTsK
KyAgICAgICAgfQogICAgICAgICB0aGlzLnRpdGxlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzdHls
ZXMtc2VsZWN0b3IiKTsKICAgICB9CiAKQEAgLTkwOSw2ICs5MTMsOSBAQCBXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9uKHBhcmVudFBhbmUsIHN0eWxlUnVsZSwg
ZWRpdGFibGUsCiAgICAgaWYgKGlzSW5oZXJpdGVkKQogICAgICAgICB0aGlzLmVsZW1lbnQuYWRk
U3R5bGVDbGFzcygic2hvdy1pbmhlcml0ZWQiKTsgLy8gVGhpcyBvbmUgaXMgcmVsYXRlZCB0byBp
bmhlcml0ZWQgcnVsZXMsIG5vdCBjb21wdXRlZCBzdHlsZS4KIAorICAgIGlmICh0aGlzLm5hdmln
YWJsZSkKKyAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5hdmlnYWJsZSIpOwor
CiAgICAgaWYgKCF0aGlzLmVkaXRhYmxlKQogICAgICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVD
bGFzcygicmVhZC1vbmx5Iik7CiB9CkBAIC0xMTAwLDYgKzExMDcsMTIgQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gbnVs
bDsKICAgICB9LAogCisgICAgX2lzQ1NTTmF2aWdhYmxlOiBmdW5jdGlvbih1cmwpCisgICAgewor
ICAgICAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwucmVz
b3VyY2VGb3JVUkwodXJsKTsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIHJlc291cmNlLmNv
bnRlbnRUeXBlKCkgPT09IFdlYkluc3BlY3Rvci5yZXNvdXJjZVR5cGVzLlN0eWxlc2hlZXQ7Cisg
ICAgfSwKKwogICAgIF9tYXJrU2VsZWN0b3JNYXRjaGVzOiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICB2YXIgcnVsZSA9IHRoaXMuc3R5bGVSdWxlLnJ1bGU7CkBAIC0yMDQ1LDYgKzIwNTgsNyBA
QCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGlmICghbmV3U3R5bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAg
ICAgICAgICBuZXdTdHlsZS5wYXJlbnRSdWxlID0gdGhpcy5zdHlsZS5wYXJlbnRSdWxlOwogICAg
ICAgICAgICAgdGhpcy5zdHlsZSA9IG5ld1N0eWxlOwogICAgICAgICAgICAgdGhpcy5fc3R5bGVS
dWxlLnN0eWxlID0gbmV3U3R5bGU7CiAKQEAgLTIxNTgsOSArMjE3MiwzNiBAQCBXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5ldmVudEhhc0N0cmxPck1ldGEoZXZlbnQpICYmIHRoaXMuc2VjdGlvbigpLm5hdmlnYWJs
ZSkgeworICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVUb1NvdXJjZShldmVudC50YXJnZXQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdGhpcy5zdGFydEVkaXRp
bmcoZXZlbnQudGFyZ2V0KTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtFbGVt
ZW50fSBlbGVtZW50CisgICAgICovCisgICAgX25hdmlnYXRlVG9Tb3VyY2U6IGZ1bmN0aW9uKGVs
ZW1lbnQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnNlY3Rpb24oKS5uYXZp
Z2FibGUpOworICAgICAgICBpZiAoIXRoaXMuc3R5bGUucGFyZW50UnVsZSB8fCAhdGhpcy5zdHls
ZS5wYXJlbnRSdWxlLnNvdXJjZVVSTCB8fCAhdGhpcy5zdHlsZS5yYW5nZSB8fCAhdGhpcy5wcm9w
ZXJ0eS5yYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgcHJvcGVydHlO
YW1lQ2xpY2tlZCA9IGVsZW1lbnQgPT09IHRoaXMubmFtZUVsZW1lbnQ7CisKKyAgICAgICAgLy8g
RW5kIG9mIHJhbmdlIGlzIGV4Y2x1c2l2ZSwgc28gc3VidHJhY3QgMSBmcm9tIHRoZSBlbmQgb2Zm
c2V0LgorICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnByb3BlcnR5LnJhbmdlOworICAgICAgICB2
YXIgbGluZSA9IHByb3BlcnR5TmFtZUNsaWNrZWQgPyByYW5nZS5zdGFydExpbmUgOiByYW5nZS5l
bmRMaW5lOworICAgICAgICB2YXIgY29sdW1uID0gcHJvcGVydHlOYW1lQ2xpY2tlZCA/IHJhbmdl
LnN0YXJ0Q29sdW1uIDogcmFuZ2UuZW5kQ29sdW1uIC0gMTsKKyAgICAgICAgdmFyIHJhd0xvY2F0
aW9uID0gbmV3IFdlYkluc3BlY3Rvci5DU1NMb2NhdGlvbih0aGlzLnN0eWxlLnBhcmVudFJ1bGUu
c291cmNlVVJMLCBsaW5lLCBjb2x1bW4pOworICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IFdlYklu
c3BlY3Rvci5jc3NNb2RlbC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7Cisg
ICAgICAgIGlmICghdWlMb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnNob3dQYW5lbCgic2NyaXB0cyIpLnNob3dVSVNvdXJjZUNvZGUodWlMb2NhdGlv
bi51aVNvdXJjZUNvZGUsIHVpTG9jYXRpb24ubGluZU51bWJlcik7CisgICAgfSwKKwogICAgIF9p
c05hbWVFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWNzcy1wcm9wZXJ0eSIp
ID09PSB0aGlzLm5hbWVFbGVtZW50OwpAQCAtMjU4MCw2ICsyNjIxLDcgQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIGlm
ICh0aGlzLl9uZXdQcm9wZXJ0eSkKICAgICAgICAgICAgICAgICB0aGlzLl9uZXdQcm9wZXJ0eUlu
U3R5bGUgPSB0cnVlOworICAgICAgICAgICAgbmV3U3R5bGUucGFyZW50UnVsZSA9IHRoaXMuc3R5
bGUucGFyZW50UnVsZTsKICAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXdTdHlsZTsKICAgICAg
ICAgICAgIHRoaXMucHJvcGVydHkgPSBuZXdTdHlsZS5wcm9wZXJ0eUF0KHRoaXMucHJvcGVydHku
aW5kZXgpOwogICAgICAgICAgICAgdGhpcy5fc3R5bGVSdWxlLnN0eWxlID0gdGhpcy5zdHlsZTsK
QEAgLTI2NzMsNyArMjcxNSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5DU1NQ
cm9wZXJ0eVByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAvLyBTeW50aGVzaXplIHBy
b3BlcnR5IHRleHQgZGlzcmVnYXJkaW5nIGFueSBjb21tZW50cywgY3VzdG9tIHdoaXRlc3BhY2Ug
ZXRjLgogICAgICAgICAgICAgdGhpcy5fc2lkZWJhclBhbmUuYXBwbHlTdHlsZVRleHQodGhpcy5f
c2lkZWJhclBhbmUubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiOiAiICsgdGhpcy5fc2lkZWJh
clBhbmUudmFsdWVFbGVtZW50LnRleHRDb250ZW50LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAg
ICAgICAgfQotICAgIAorCiAgICAgICAgIC8vIEhhbmRsZSBudW1lcmljIHZhbHVlIGluY3JlbWVu
dC9kZWNyZW1lbnQgb25seSBhdCB0aGlzIHBvaW50LgogICAgICAgICBpZiAoIXRoaXMuX2lzRWRp
dGluZ05hbWUgJiYgV2ViSW5zcGVjdG9yLmhhbmRsZUVsZW1lbnRWYWx1ZU1vZGlmaWNhdGlvbnMo
ZXZlbnQsIHRoaXMuX3NpZGViYXJQYW5lLnZhbHVlRWxlbWVudCwgZmluaXNoSGFuZGxlci5iaW5k
KHRoaXMpLCB0aGlzLl9pc1ZhbHVlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwo=
</data>
<flag name="review"
          id="211762"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>