<?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>147667</bug_id>
          
          <creation_ts>2015-08-04 17:29:05 -0700</creation_ts>
          <short_desc>Refactor BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions to be more generic</short_desc>
          <delta_ts>2015-08-07 16:11:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=147796</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jason Marcell">jmarcell</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adele</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>jmarcell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1114892</commentid>
    <comment_count>0</comment_count>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-04 17:29:05 -0700</bug_when>
    <thetext>BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions currently reference the &quot;internal&quot; and &quot;openSource&quot; repositories specifically. These methods should instead work more generically with any number of repositories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114893</commentid>
    <comment_count>1</comment_count>
      <attachid>258244</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-04 17:36:49 -0700</bug_when>
    <thetext>Created attachment 258244
Refactor BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions to be more generic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115863</commentid>
    <comment_count>2</comment_count>
      <attachid>258244</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-08-07 13:31:49 -0700</bug_when>
    <thetext>Comment on attachment 258244
Refactor BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions to be more generic

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

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:276
&gt; +        for (var i = 0; i &lt; Dashboard.sortedRepositories.length; i++) {
&gt; +            var repositoryName = Dashboard.sortedRepositories[i].name;
&gt; +            var result = b.revision[repositoryName] - a.revision[repositoryName];
&gt; +            if (result)
&gt; +                return result;
&gt; +        }

Notice that the getter Dashboard.sortedRepositories is called twice on each iteration: once in the for-loop condition &quot;i &lt; Dashboard.sortedRepositories.length&quot; (line 271) and once when evaluating &quot;Dashboard.sortedRepositories[i].name&quot; (line 272). We should cache Dashboard.sortedRepositories and Dashboard.sortedRepositories.length in local variables to avoid extraneous calls to Dashboard.sortedRepositories, such that this for-loop reads:

var sortedRepositories = Dashboard.sortedRepositories;
for (var i = 0, length = sortedRepositories.length; i &lt; sortedRepositories.length; ++i) {
    var repositoryName = sortedRepositories[i].name;
    var result = b.revision[repositoryName] - a.revision[repositoryName];
    if (result)
        return result;
}

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:293
&gt; +        for (var i = 0; i &lt; Dashboard.sortedRepositories.length; i++) {
&gt; +            var repositoryName = Dashboard.sortedRepositories[i].name;
&gt; +            var result = b.revision[repositoryName] - a.revision[repositoryName];
&gt; +            if (result)
&gt; +                return result;
&gt; +        }

Similarly, we should cache Dashboard.sortedRepositories and Dashboard.sortedRepositories.length in local variables.

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:45
&gt; +        if (this._sortedPlatforms === undefined) {

Remove the brace for if-statements with a single line body.

Also, I would write this line as:

if (!this._sortedPlatforms)

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:52
&gt; +        if (this._sortedRepositories === undefined) {

Remove the brace for if-statements with a single line body.

Similar to above, I would write this line as:

if (!this._sortedRepositories)

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:68
&gt; +    _sortedItems: function(unsorted)
&gt; +    {
&gt; +        var sorted = [];
&gt; +
&gt; +        for (var key in unsorted)
&gt; +            sorted.push(unsorted[key]);
&gt; +
&gt; +        sorted.sort(function(a, b) {
&gt; +            return a.order - b.order;
&gt; +        });
&gt; +
&gt; +        return sorted;

Please make this a free function. Additionally, the name of this function is disingenuous given the presence of its argument. Specifically the use of the past tense word &quot;sorted&quot; implies the function is a getter and/or sorts some kind of global data &quot;items&quot;. But it takes an unsorted array as its argument and sorts this argument. Functions that perform a computation should have a name that begins with a verb. Maybe sortDictionaryByOrder()? Can we come up with a better name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115866</commentid>
    <comment_count>3</comment_count>
      <attachid>258244</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-07 13:40:28 -0700</bug_when>
    <thetext>Comment on attachment 258244
Refactor BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions to be more generic

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

&gt;&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/BuildbotQueue.js:276
&gt;&gt; +        }
&gt; 
&gt; Notice that the getter Dashboard.sortedRepositories is called twice on each iteration: once in the for-loop condition &quot;i &lt; Dashboard.sortedRepositories.length&quot; (line 271) and once when evaluating &quot;Dashboard.sortedRepositories[i].name&quot; (line 272). We should cache Dashboard.sortedRepositories and Dashboard.sortedRepositories.length in local variables to avoid extraneous calls to Dashboard.sortedRepositories, such that this for-loop reads:
&gt; 
&gt; var sortedRepositories = Dashboard.sortedRepositories;
&gt; for (var i = 0, length = sortedRepositories.length; i &lt; sortedRepositories.length; ++i) {
&gt;     var repositoryName = sortedRepositories[i].name;
&gt;     var result = b.revision[repositoryName] - a.revision[repositoryName];
&gt;     if (result)
&gt;         return result;
&gt; }

I tried to do the caching in the getter itself. Does this not cache the sortedRepositories using an instance variable?

    get sortedRepositories()
    {
        if (this._sortedRepositories === undefined) {
            this._sortedRepositories = this._sortedItems(Dashboard.Repository);
        }
        return this._sortedRepositories;
    },</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115869</commentid>
    <comment_count>4</comment_count>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-07 13:51:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Dashboard.js:68
&gt; &gt; +    _sortedItems: function(unsorted)
&gt; &gt; +    {
&gt; &gt; +        var sorted = [];
&gt; &gt; +
&gt; &gt; +        for (var key in unsorted)
&gt; &gt; +            sorted.push(unsorted[key]);
&gt; &gt; +
&gt; &gt; +        sorted.sort(function(a, b) {
&gt; &gt; +            return a.order - b.order;
&gt; &gt; +        });
&gt; &gt; +
&gt; &gt; +        return sorted;
&gt; 
&gt; Please make this a free function. Additionally, the name of this function is
&gt; disingenuous given the presence of its argument. Specifically the use of the
&gt; past tense word &quot;sorted&quot; implies the function is a getter and/or sorts some
&gt; kind of global data &quot;items&quot;. But it takes an unsorted array as its argument
&gt; and sorts this argument. Functions that perform a computation should have a
&gt; name that begins with a verb. Maybe sortDictionaryByOrder()? Can we come up
&gt; with a better name?

Okay, but it&apos;s not really sorting a dictionary. It&apos;s really sorting an array of dictionaries or objects that happen to have an `order` key or property. Maybe `sortArrayByOrder` or `sortDictionariesByOrder` or `sortObjectsByOrder`?

Also, there is a Utilities.js file. Do you think this should go there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115888</commentid>
    <comment_count>5</comment_count>
      <attachid>258530</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-07 14:47:19 -0700</bug_when>
    <thetext>Created attachment 258530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115896</commentid>
    <comment_count>6</comment_count>
      <attachid>258530</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-08-07 15:03:26 -0700</bug_when>
    <thetext>Comment on attachment 258530
Patch

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

&gt; Tools/BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/Utilities.js:201
&gt; +sortDictionariesByOrder = function(unsorted)

Please write this as a named function:

function sortDictionariesByOrder(unsorted)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115898</commentid>
    <comment_count>7</comment_count>
      <attachid>258533</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-07 15:08:04 -0700</bug_when>
    <thetext>Created attachment 258533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115899</commentid>
    <comment_count>8</comment_count>
      <attachid>258533</attachid>
    <who name="Jason Marcell">jmarcell</who>
    <bug_when>2015-08-07 15:09:14 -0700</bug_when>
    <thetext>Comment on attachment 258533
Patch

Writing sortDictionariesByOrder as a named function per Dan Bates&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115913</commentid>
    <comment_count>9</comment_count>
      <attachid>258533</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-07 16:11:15 -0700</bug_when>
    <thetext>Comment on attachment 258533
Patch

Clearing flags on attachment: 258533

Committed r188172: &lt;http://trac.webkit.org/changeset/188172&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115915</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-07 16:11:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258244</attachid>
            <date>2015-08-04 17:36:49 -0700</date>
            <delta_ts>2015-08-07 14:47:16 -0700</delta_ts>
            <desc>Refactor BuildbotQueue.compareIterations and BuildbotQueue.compareIterationsByRevisions to be more generic</desc>
            <filename>0001-Refactor-BuildbotQueue.compareIterations-and-Buildbo.patch</filename>
            <type>text/plain</type>
            <size>9409</size>
            <attacher name="Jason Marcell">jmarcell</attacher>
            
              <data encoding="base64">RnJvbSBkNjA5N2UxNDZlNzYyY2M2MTUxOGVmMTc2Zjg1Zjk4NDY4Y2JhNGY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYXNvbiBNYXJjZWxsIDxqbWFyY2VsbEBhcHBsZS5jb20+CkRh
dGU6IFR1ZSwgNCBBdWcgMjAxNSAxNzozNDo0NiAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFJlZmFj
dG9yIEJ1aWxkYm90UXVldWUuY29tcGFyZUl0ZXJhdGlvbnMgYW5kCiBCdWlsZGJvdFF1ZXVlLmNv
bXBhcmVJdGVyYXRpb25zQnlSZXZpc2lvbnMgdG8gYmUgbW9yZSBnZW5lcmljCiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY3CgpSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KCiogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5qczoKKEJ1aWxkYm90UXVl
dWUucHJvdG90eXBlLmNvbXBhcmVJdGVyYXRpb25zKTogUmVmYWN0b3JlZCB0byB3b3JrIG1vcmUg
Z2VuZXJpY2FsbHkgd2l0aCByZXBvc2l0b3JpZXMKb3RoZXIgdGhhbiAib3BlblNvdXJjZSIgYW5k
ICJpbnRlcm5hbCIuCihCdWlsZGJvdFF1ZXVlLnByb3RvdHlwZS5jb21wYXJlSXRlcmF0aW9uc0J5
UmV2aXNpb25zKTogRGl0dG8uCiogQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1j
b25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvRGFzaGJvYXJkLmpzOgooRGFzaGJv
YXJkLmdldCBzb3J0ZWRQbGF0Zm9ybXMpOiBBZGRlZC4gUmV0dXJucyBhIHNvcnRlZCBhcnJheSBv
ZiBwbGF0Zm9ybXMuCihEYXNoYm9hcmQuZ2V0IHNvcnRlZFJlcG9zaXRvcmllcyk6IEFkZGVkLiBS
ZXR1cm5zIGEgc29ydGVkIGFycmF5IG9mIHJlcG9zaXRvcmllcy4KKERhc2hib2FyZC5fc29ydGVk
SXRlbXMpOiBBZGRlZC4gVGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB0aGF0IGhhdmUgYW4gIm9y
ZGVyIiBwcm9wZXJ0eQphbmQgc29ydHMgdGhlbSBieSB0aGlzIHByb3BlcnR5IHJldHVybmluZyB0
aGUgbmV3IHNvcnRlZCBhcnJheS4KKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzOgooZG9jdW1lbnRS
ZWFkeSk6IFVzaW5nIERhc2hib2FyZC5zb3J0ZWRQbGF0Zm9ybXMgaW5zdGVhZCBvZiBzb3J0ZWRQ
bGF0Zm9ybXMuCihzb3J0ZWRQbGF0Zm9ybXMpOiBEZWxldGVkLgoqIEJ1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01l
dHJpY3NNYWluLmpzOgooYnVpbGRRdWV1ZXNUYWJsZSk6IFVzaW5nIERhc2hib2FyZC5zb3J0ZWRQ
bGF0Zm9ybXMgaW5zdGVhZCBvZiBzb3J0ZWRQbGF0Zm9ybXMuCihzb3J0ZWRQbGF0Zm9ybXMpOiBE
ZWxldGVkLgotLS0KIC4uLi9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1
ZXVlLmpzIHwgMjYgKysrKysrKysrKy0tLS0tLS0tLS0tCiAuLi4vcHVibGljX2h0bWwvZGFzaGJv
YXJkL1NjcmlwdHMvRGFzaGJvYXJkLmpzICAgICB8IDI3ICsrKysrKysrKysrKysrKysrKysrKysK
IC4uLi9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzICAgICAgICAgIHwgMTYg
Ky0tLS0tLS0tLS0tLQogLi4uL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01ldHJpY3NN
YWluLmpzICAgfCAxNiArLS0tLS0tLS0tLS0tCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IDIzICsrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBj
aGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9U
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Njcmlw
dHMvQnVpbGRib3RRdWV1ZS5qcwppbmRleCAxYzIxYWZiLi5jM2EwMjFkIDEwMDY0NAotLS0gYS9U
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRt
bC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xh
dmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9T
Y3JpcHRzL0J1aWxkYm90UXVldWUuanMKQEAgLTI2OCwxMyArMjY4LDEyIEBAIEJ1aWxkYm90UXVl
dWUucHJvdG90eXBlID0gewogCiAgICAgY29tcGFyZUl0ZXJhdGlvbnM6IGZ1bmN0aW9uKGEsIGIp
CiAgICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gYi5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3Np
dG9yeS5PcGVuU291cmNlLm5hbWVdIC0gYS5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5P
cGVuU291cmNlLm5hbWVdOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLQotICAgICAgICByZXN1bHQgPSBiLnJldmlzaW9uW0Rhc2hib2FyZC5SZXBvc2l0
b3J5LkludGVybmFsLm5hbWVdIC0gYS5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5JbnRl
cm5hbC5uYW1lXTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRGFzaGJvYXJkLnNvcnRlZFJlcG9zaXRv
cmllcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnlOYW1lID0gRGFz
aGJvYXJkLnNvcnRlZFJlcG9zaXRvcmllc1tpXS5uYW1lOworICAgICAgICAgICAgdmFyIHJlc3Vs
dCA9IGIucmV2aXNpb25bcmVwb3NpdG9yeU5hbWVdIC0gYS5yZXZpc2lvbltyZXBvc2l0b3J5TmFt
ZV07CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KIAogICAgICAgICAvLyBBIGxvYWRlZCBpdGVyYXRpb24gbWF5IG5vdCBo
YXZlIHJldmlzaW9uIG51bWJlcnMgaWYgaXQgZmFpbGVkIGVhcmx5LCBiZWZvcmUgc3ZuIHN0ZXBz
IGZpbmlzaGVkLgogICAgICAgICByZXN1bHQgPSBiLmxvYWRlZCAtIGEubG9hZGVkOwpAQCAtMjg2
LDEzICsyODUsMTIgQEAgQnVpbGRib3RRdWV1ZS5wcm90b3R5cGUgPSB7CiAKICAgICBjb21wYXJl
SXRlcmF0aW9uc0J5UmV2aXNpb25zOiBmdW5jdGlvbihhLCBiKQogICAgIHsKLSAgICAgICAgdmFy
IHJlc3VsdCA9IGIucmV2aXNpb25bRGFzaGJvYXJkLlJlcG9zaXRvcnkuT3BlblNvdXJjZS5uYW1l
XSAtIGEucmV2aXNpb25bRGFzaGJvYXJkLlJlcG9zaXRvcnkuT3BlblNvdXJjZS5uYW1lXTsKLSAg
ICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAg
cmVzdWx0ID0gYi5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5JbnRlcm5hbC5uYW1lXSAt
IGEucmV2aXNpb25bRGFzaGJvYXJkLlJlcG9zaXRvcnkuSW50ZXJuYWwubmFtZV07Ci0gICAgICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IERhc2hib2FyZC5zb3J0ZWRSZXBvc2l0b3JpZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciByZXBvc2l0b3J5TmFtZSA9IERhc2hib2FyZC5zb3J0ZWRSZXBvc2l0
b3JpZXNbaV0ubmFtZTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBiLnJldmlzaW9uW3JlcG9z
aXRvcnlOYW1lXSAtIGEucmV2aXNpb25bcmVwb3NpdG9yeU5hbWVdOworICAgICAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRz
L0Rhc2hib2FyZC5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0Rhc2hib2FyZC5qcwppbmRleCA0
YTNiZGVkLi4yZWM4NjI4IDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWls
ZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNoYm9h
cmQuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25m
aWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvRGFzaGJvYXJkLmpzCkBAIC0zOSw1ICsz
OSwzMiBAQCBEYXNoYm9hcmQgPSB7CiAgICAgUmVwb3NpdG9yeTogewogICAgICAgICBPcGVuU291
cmNlOiB7IG5hbWU6ICJvcGVuU291cmNlIiwgb3JkZXI6IDAgfSwKICAgICAgICAgSW50ZXJuYWw6
IHsgbmFtZTogImludGVybmFsIiwgb3JkZXI6IDEgfSwKKyAgICB9LAorICAgIGdldCBzb3J0ZWRQ
bGF0Zm9ybXMoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NvcnRlZFBsYXRmb3JtcyA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICB0aGlzLl9zb3J0ZWRQbGF0Zm9ybXMgPSB0aGlzLl9z
b3J0ZWRJdGVtcyhEYXNoYm9hcmQuUGxhdGZvcm0pOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLl9zb3J0ZWRQbGF0Zm9ybXM7CisgICAgfSwKKyAgICBnZXQgc29ydGVkUmVwb3NpdG9y
aWVzKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9zb3J0ZWRSZXBvc2l0b3JpZXMgPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICAgICAgdGhpcy5fc29ydGVkUmVwb3NpdG9yaWVzID0gdGhpcy5f
c29ydGVkSXRlbXMoRGFzaGJvYXJkLlJlcG9zaXRvcnkpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0aGlzLl9zb3J0ZWRSZXBvc2l0b3JpZXM7CisgICAgfSwKKyAgICBfc29ydGVkSXRlbXM6
IGZ1bmN0aW9uKHVuc29ydGVkKQorICAgIHsKKyAgICAgICAgdmFyIHNvcnRlZCA9IFtdOworCisg
ICAgICAgIGZvciAodmFyIGtleSBpbiB1bnNvcnRlZCkKKyAgICAgICAgICAgIHNvcnRlZC5wdXNo
KHVuc29ydGVkW2tleV0pOworCisgICAgICAgIHNvcnRlZC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsK
KyAgICAgICAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgcmV0dXJuIHNvcnRlZDsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRT
bGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJk
L1NjcmlwdHMvTWFpbi5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01haW4uanMKaW5kZXggYzZl
NjE4ZC4uMjFhZjIxMyAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcwor
KysgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzCkBAIC0xMDMsMjAgKzEwMyw2IEBAIHZh
ciB0ZXN0TmFtZXMgPSB7fTsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0
Ml0gPSAiV0syIFRlc3RzIjsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0
MV0gPSAiV0sxIFRlc3RzIjsKIAotZnVuY3Rpb24gc29ydGVkUGxhdGZvcm1zKCkKLXsKLSAgICB2
YXIgcGxhdGZvcm1zID0gW107Ci0KLSAgICBmb3IgKHZhciBwbGF0Zm9ybUtleSBpbiBEYXNoYm9h
cmQuUGxhdGZvcm0pCi0gICAgICAgIHBsYXRmb3Jtcy5wdXNoKERhc2hib2FyZC5QbGF0Zm9ybVtw
bGF0Zm9ybUtleV0pOwotCi0gICAgcGxhdGZvcm1zLnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAg
ICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gcGxh
dGZvcm1zOwotfQotCiBmdW5jdGlvbiB1cGRhdGVIaWRkZW5QbGF0Zm9ybXMoKQogewogICAgIHZh
ciBoaWRkZW5QbGF0Zm9ybXMgPSBzZXR0aW5ncy5nZXRPYmplY3QoImhpZGRlblBsYXRmb3JtcyIp
OwpAQCAtMTk5LDcgKzE4NSw3IEBAIGZ1bmN0aW9uIGRvY3VtZW50UmVhZHkoKQogCiAgICAgdGFi
bGUuYXBwZW5kQ2hpbGQocm93KTsKIAotICAgIHZhciBwbGF0Zm9ybXMgPSBzb3J0ZWRQbGF0Zm9y
bXMoKTsKKyAgICB2YXIgcGxhdGZvcm1zID0gRGFzaGJvYXJkLnNvcnRlZFBsYXRmb3JtczsKIAog
ICAgIGZvciAodmFyIGkgaW4gcGxhdGZvcm1zKSB7CiAgICAgICAgIHZhciBwbGF0Zm9ybSA9IHBs
YXRmb3Jtc1tpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndl
YmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01ldHJpY3NNYWlu
LmpzIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMKaW5kZXggNmRiZjM4ZS4u
MWZjNzlmNSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMK
KysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMKQEAgLTcwLDIwICs3MCw2
IEBAIHZhciB0ZXN0TmFtZXMgPSB7fTsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnku
V2ViS2l0Ml0gPSAiV0syIFRlc3RzIjsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnku
V2ViS2l0MV0gPSAiV0sxIFRlc3RzIjsKIAotZnVuY3Rpb24gc29ydGVkUGxhdGZvcm1zKCkKLXsK
LSAgICB2YXIgcGxhdGZvcm1zID0gW107Ci0KLSAgICBmb3IgKHZhciBwbGF0Zm9ybUtleSBpbiBE
YXNoYm9hcmQuUGxhdGZvcm0pCi0gICAgICAgIHBsYXRmb3Jtcy5wdXNoKERhc2hib2FyZC5QbGF0
Zm9ybVtwbGF0Zm9ybUtleV0pOwotCi0gICAgcGxhdGZvcm1zLnNvcnQoZnVuY3Rpb24oYSwgYikg
ewotICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7Ci0gICAgfSk7Ci0KLSAgICByZXR1
cm4gcGxhdGZvcm1zOwotfQotCiBmdW5jdGlvbiB1cGRhdGVIaWRkZW5QbGF0Zm9ybXMoKQogewog
ICAgIHZhciBoaWRkZW5QbGF0Zm9ybXMgPSBzZXR0aW5ncy5nZXRPYmplY3QoImhpZGRlblBsYXRm
b3JtcyIpOwpAQCAtMjA0LDcgKzE5MCw3IEBAIGZ1bmN0aW9uIGJ1aWxkUXVldWVzVGFibGUoKQog
CiAgICAgdGFibGUuYXBwZW5kQ2hpbGQocm93KTsKIAotICAgIHZhciBwbGF0Zm9ybXMgPSBzb3J0
ZWRQbGF0Zm9ybXMoKTsKKyAgICB2YXIgcGxhdGZvcm1zID0gRGFzaGJvYXJkLnNvcnRlZFBsYXRm
b3JtczsKIAogICAgIGZvciAodmFyIGkgaW4gcGxhdGZvcm1zKSB7CiAgICAgICAgIHZhciBwbGF0
Zm9ybSA9IHBsYXRmb3Jtc1tpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCBmMWZiYTc2Li40YmU2M2M1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTUtMDgtMDQg
IEphc29uIE1hcmNlbGwgIDxqbWFyY2VsbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Ig
QnVpbGRib3RRdWV1ZS5jb21wYXJlSXRlcmF0aW9ucyBhbmQgQnVpbGRib3RRdWV1ZS5jb21wYXJl
SXRlcmF0aW9uc0J5UmV2aXNpb25zIHRvIGJlIG1vcmUgZ2VuZXJpYworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWls
ZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJv
dFF1ZXVlLmpzOgorICAgICAgICAoQnVpbGRib3RRdWV1ZS5wcm90b3R5cGUuY29tcGFyZUl0ZXJh
dGlvbnMpOiBSZWZhY3RvcmVkIHRvIHdvcmsgbW9yZSBnZW5lcmljYWxseSB3aXRoIHJlcG9zaXRv
cmllcworICAgICAgICBvdGhlciB0aGFuICJvcGVuU291cmNlIiBhbmQgImludGVybmFsIi4KKyAg
ICAgICAgKEJ1aWxkYm90UXVldWUucHJvdG90eXBlLmNvbXBhcmVJdGVyYXRpb25zQnlSZXZpc2lv
bnMpOiBEaXR0by4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNoYm9hcmQuanM6CisgICAg
ICAgIChEYXNoYm9hcmQuZ2V0IHNvcnRlZFBsYXRmb3Jtcyk6IEFkZGVkLiBSZXR1cm5zIGEgc29y
dGVkIGFycmF5IG9mIHBsYXRmb3Jtcy4KKyAgICAgICAgKERhc2hib2FyZC5nZXQgc29ydGVkUmVw
b3NpdG9yaWVzKTogQWRkZWQuIFJldHVybnMgYSBzb3J0ZWQgYXJyYXkgb2YgcmVwb3NpdG9yaWVz
LgorICAgICAgICAoRGFzaGJvYXJkLl9zb3J0ZWRJdGVtcyk6IEFkZGVkLiBUYWtlcyBhbiBhcnJh
eSBvZiBvYmplY3RzIHRoYXQgaGF2ZSBhbiAib3JkZXIiIHByb3BlcnR5CisgICAgICAgIGFuZCBz
b3J0cyB0aGVtIGJ5IHRoaXMgcHJvcGVydHkgcmV0dXJuaW5nIHRoZSBuZXcgc29ydGVkIGFycmF5
LgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01haW4uanM6CisgICAgICAgIChkb2N1bWVudFJl
YWR5KTogVXNpbmcgRGFzaGJvYXJkLnNvcnRlZFBsYXRmb3JtcyBpbnN0ZWFkIG9mIHNvcnRlZFBs
YXRmb3Jtcy4KKyAgICAgICAgKHNvcnRlZFBsYXRmb3Jtcyk6IERlbGV0ZWQuCisgICAgICAgICog
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanM6CisgICAgICAgIChidWlsZFF1ZXVlc1RhYmxl
KTogVXNpbmcgRGFzaGJvYXJkLnNvcnRlZFBsYXRmb3JtcyBpbnN0ZWFkIG9mIHNvcnRlZFBsYXRm
b3Jtcy4KKyAgICAgICAgKHNvcnRlZFBsYXRmb3Jtcyk6IERlbGV0ZWQuCisKIDIwMTUtMDgtMDQg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gVXBk
YXRlIEFwcGxlIFdpbmRvd3MgYnVpbGQgZm9yIFZTMjAxNQotLSAKMi4zLjggKEFwcGxlIEdpdC01
OCkKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258530</attachid>
            <date>2015-08-07 14:47:19 -0700</date>
            <delta_ts>2015-08-07 15:08:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147667-20150807144708.patch</filename>
            <type>text/plain</type>
            <size>8689</size>
            <attacher name="Jason Marcell">jmarcell</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5Zjll
ZDhjOTQ2NmNmNGRiYjE2OTQwM2UxNDdiYzk4YzAxYzdiZjE5Li40Mjg4ODQzOGI4OTIwZTJlNGNi
ZGNkMTkwZWQwMmViODYwNmM2M2RhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTUtMDgtMDcgIEphc29uIE1hcmNl
bGwgIDxqbWFyY2VsbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQnVpbGRib3RRdWV1
ZS5jb21wYXJlSXRlcmF0aW9ucyBhbmQgQnVpbGRib3RRdWV1ZS5jb21wYXJlSXRlcmF0aW9uc0J5
UmV2aXNpb25zIHRvIGJlIG1vcmUgZ2VuZXJpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzOgor
ICAgICAgICAoQnVpbGRib3RRdWV1ZS5wcm90b3R5cGUuY29tcGFyZUl0ZXJhdGlvbnMpOiBSZWZh
Y3RvcmVkIHRvIHdvcmsgbW9yZSBnZW5lcmljYWxseSB3aXRoIHJlcG9zaXRvcmllcworICAgICAg
ICBvdGhlciB0aGFuICJvcGVuU291cmNlIiBhbmQgImludGVybmFsIi4KKyAgICAgICAgKEJ1aWxk
Ym90UXVldWUucHJvdG90eXBlLmNvbXBhcmVJdGVyYXRpb25zQnlSZXZpc2lvbnMpOiBEaXR0by4K
KyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNoYm9hcmQuanM6CisgICAgICAgIChEYXNoYm9h
cmQuZ2V0IHNvcnRlZFBsYXRmb3Jtcyk6IEFkZGVkLiBSZXR1cm5zIGEgc29ydGVkIGFycmF5IG9m
IHBsYXRmb3Jtcy4KKyAgICAgICAgKERhc2hib2FyZC5nZXQgc29ydGVkUmVwb3NpdG9yaWVzKTog
QWRkZWQuIFJldHVybnMgYSBzb3J0ZWQgYXJyYXkgb2YgcmVwb3NpdG9yaWVzLgorICAgICAgICAq
IEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL01haW4uanM6CisgICAgICAgIChkb2N1bWVudFJlYWR5KTogVXNpbmcg
RGFzaGJvYXJkLnNvcnRlZFBsYXRmb3JtcyBpbnN0ZWFkIG9mIHNvcnRlZFBsYXRmb3Jtcy4KKyAg
ICAgICAgKHNvcnRlZFBsYXRmb3Jtcyk6IERlbGV0ZWQuCisgICAgICAgICogQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Njcmlw
dHMvTWV0cmljc01haW4uanM6CisgICAgICAgIChidWlsZFF1ZXVlc1RhYmxlKTogVXNpbmcgRGFz
aGJvYXJkLnNvcnRlZFBsYXRmb3JtcyBpbnN0ZWFkIG9mIHNvcnRlZFBsYXRmb3Jtcy4KKyAgICAg
ICAgKHNvcnRlZFBsYXRmb3Jtcyk6IERlbGV0ZWQuCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMv
VXRpbGl0aWVzLmpzOgorICAgICAgICAoc29ydERpY3Rpb25hcmllc0J5T3JkZXIpOiBBZGRlZC4g
VGFrZXMgYW4gYXJyYXkgb2YgZGljdGlvbmFyaWVzIHRoYXQgaGF2ZSBhbiAib3JkZXIiIHByb3Bl
cnR5CisgICAgICAgIGFuZCBzb3J0cyB0aGVtIGJ5IHRoaXMgcHJvcGVydHkgcmV0dXJuaW5nIHRo
ZSBuZXcgc29ydGVkIGFycmF5LgorCiAyMDE1LTA4LTA3ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgUnVubmluZyB0ZXN0cyBmb3IgYSBsb25nIHRpbWUg
cmVzdWx0cyBpbiBzb21lIHRlc3RzIHJ1bm5pbmcgdmVyeSBzbG93bHkgKHRocm90dGxpbmcpCmRp
ZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzIGIvVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFz
aGJvYXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5qcwppbmRleCAxYzIxYWZiYzIzMWJlNDFkNTI5
NjIzZDdkZTlhZDNlODYyYWQ5MDc2Li43MDU5ZGFhMjBjZDk2MmZlZWQxMmEzM2ViNThmZDM4Y2E5
OWE4ZTJhIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQu
b3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpz
CisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1
YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMKQEAgLTI2OCwxMyAr
MjY4LDEzIEBAIEJ1aWxkYm90UXVldWUucHJvdG90eXBlID0gewogCiAgICAgY29tcGFyZUl0ZXJh
dGlvbnM6IGZ1bmN0aW9uKGEsIGIpCiAgICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gYi5yZXZp
c2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5PcGVuU291cmNlLm5hbWVdIC0gYS5yZXZpc2lvbltE
YXNoYm9hcmQuUmVwb3NpdG9yeS5PcGVuU291cmNlLm5hbWVdOwotICAgICAgICBpZiAocmVzdWx0
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICByZXN1bHQgPSBiLnJldmlz
aW9uW0Rhc2hib2FyZC5SZXBvc2l0b3J5LkludGVybmFsLm5hbWVdIC0gYS5yZXZpc2lvbltEYXNo
Ym9hcmQuUmVwb3NpdG9yeS5JbnRlcm5hbC5uYW1lXTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHZhciBzb3J0ZWRSZXBvc2l0b3JpZXMg
PSBEYXNoYm9hcmQuc29ydGVkUmVwb3NpdG9yaWVzOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHNvcnRlZFJlcG9zaXRvcmllcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHJl
cG9zaXRvcnlOYW1lID0gc29ydGVkUmVwb3NpdG9yaWVzW2ldLm5hbWU7CisgICAgICAgICAgICB2
YXIgcmVzdWx0ID0gYi5yZXZpc2lvbltyZXBvc2l0b3J5TmFtZV0gLSBhLnJldmlzaW9uW3JlcG9z
aXRvcnlOYW1lXTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEEgbG9hZGVkIGl0ZXJhdGlvbiBt
YXkgbm90IGhhdmUgcmV2aXNpb24gbnVtYmVycyBpZiBpdCBmYWlsZWQgZWFybHksIGJlZm9yZSBz
dm4gc3RlcHMgZmluaXNoZWQuCiAgICAgICAgIHJlc3VsdCA9IGIubG9hZGVkIC0gYS5sb2FkZWQ7
CkBAIC0yODYsMTMgKzI4NiwxMyBAQCBCdWlsZGJvdFF1ZXVlLnByb3RvdHlwZSA9IHsKIAogICAg
IGNvbXBhcmVJdGVyYXRpb25zQnlSZXZpc2lvbnM6IGZ1bmN0aW9uKGEsIGIpCiAgICAgewotICAg
ICAgICB2YXIgcmVzdWx0ID0gYi5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5PcGVuU291
cmNlLm5hbWVdIC0gYS5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5PcGVuU291cmNlLm5h
bWVdOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgICAgICByZXN1bHQgPSBiLnJldmlzaW9uW0Rhc2hib2FyZC5SZXBvc2l0b3J5LkludGVybmFs
Lm5hbWVdIC0gYS5yZXZpc2lvbltEYXNoYm9hcmQuUmVwb3NpdG9yeS5JbnRlcm5hbC5uYW1lXTsK
LSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHZhciBzb3J0ZWRSZXBvc2l0b3JpZXMgPSBEYXNoYm9hcmQuc29ydGVkUmVwb3NpdG9yaWVzOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRlZFJlcG9zaXRvcmllcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgdmFyIHJlcG9zaXRvcnlOYW1lID0gc29ydGVkUmVwb3NpdG9yaWVz
W2ldLm5hbWU7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYi5yZXZpc2lvbltyZXBvc2l0b3J5
TmFtZV0gLSBhLnJldmlzaW9uW3JlcG9zaXRvcnlOYW1lXTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0sCmRpZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9i
dWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNo
Ym9hcmQuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNoYm9hcmQuanMKaW5kZXggNGEzYmRl
ZGRkZTU4ZGI1ZTM1N2JlNzYwYmJhNDIyYWFlMjQ0NmJmYy4uY2Q1NzVhNjhlOTdkMTUwYjc2MTQw
YzE3ZGIxOTg5MjJjNzZmNGFmNCAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
YnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvRGFz
aGJvYXJkLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0Rhc2hib2FyZC5qcwpAQCAtMzks
NSArMzksMTcgQEAgRGFzaGJvYXJkID0gewogICAgIFJlcG9zaXRvcnk6IHsKICAgICAgICAgT3Bl
blNvdXJjZTogeyBuYW1lOiAib3BlblNvdXJjZSIsIG9yZGVyOiAwIH0sCiAgICAgICAgIEludGVy
bmFsOiB7IG5hbWU6ICJpbnRlcm5hbCIsIG9yZGVyOiAxIH0sCi0gICAgfQorICAgIH0sCisgICAg
Z2V0IHNvcnRlZFBsYXRmb3JtcygpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3NvcnRlZFBs
YXRmb3JtcykKKyAgICAgICAgICAgIHRoaXMuX3NvcnRlZFBsYXRmb3JtcyA9IHNvcnREaWN0aW9u
YXJpZXNCeU9yZGVyKERhc2hib2FyZC5QbGF0Zm9ybSk7CisgICAgICAgIHJldHVybiB0aGlzLl9z
b3J0ZWRQbGF0Zm9ybXM7CisgICAgfSwKKyAgICBnZXQgc29ydGVkUmVwb3NpdG9yaWVzKCkKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fc29ydGVkUmVwb3NpdG9yaWVzKQorICAgICAgICAgICAg
dGhpcy5fc29ydGVkUmVwb3NpdG9yaWVzID0gc29ydERpY3Rpb25hcmllc0J5T3JkZXIoRGFzaGJv
YXJkLlJlcG9zaXRvcnkpOworICAgICAgICByZXR1cm4gdGhpcy5fc29ydGVkUmVwb3NpdG9yaWVz
OworICAgIH0sCiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQu
d2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcyBi
L1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19o
dG1sL2Rhc2hib2FyZC9TY3JpcHRzL01haW4uanMKaW5kZXggYzZlNjE4ZDJiMGUxZDhlM2NiMmJi
N2Q5MTMzMzFhN2U5ZDdlYzhkZS4uMjFhZjIxMzNkMzM3Nzc0NDlhN2YwYzcwZjNjYmQxMWQzMzUy
MjFjNyAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWFpbi5qcworKysgYi9Ub29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9k
YXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzCkBAIC0xMDMsMjAgKzEwMyw2IEBAIHZhciB0ZXN0TmFt
ZXMgPSB7fTsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0Ml0gPSAiV0sy
IFRlc3RzIjsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnkuV2ViS2l0MV0gPSAiV0sx
IFRlc3RzIjsKIAotZnVuY3Rpb24gc29ydGVkUGxhdGZvcm1zKCkKLXsKLSAgICB2YXIgcGxhdGZv
cm1zID0gW107Ci0KLSAgICBmb3IgKHZhciBwbGF0Zm9ybUtleSBpbiBEYXNoYm9hcmQuUGxhdGZv
cm0pCi0gICAgICAgIHBsYXRmb3Jtcy5wdXNoKERhc2hib2FyZC5QbGF0Zm9ybVtwbGF0Zm9ybUtl
eV0pOwotCi0gICAgcGxhdGZvcm1zLnNvcnQoZnVuY3Rpb24oYSwgYikgewotICAgICAgICByZXR1
cm4gYS5vcmRlciAtIGIub3JkZXI7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1zOwot
fQotCiBmdW5jdGlvbiB1cGRhdGVIaWRkZW5QbGF0Zm9ybXMoKQogewogICAgIHZhciBoaWRkZW5Q
bGF0Zm9ybXMgPSBzZXR0aW5ncy5nZXRPYmplY3QoImhpZGRlblBsYXRmb3JtcyIpOwpAQCAtMTk5
LDcgKzE4NSw3IEBAIGZ1bmN0aW9uIGRvY3VtZW50UmVhZHkoKQogCiAgICAgdGFibGUuYXBwZW5k
Q2hpbGQocm93KTsKIAotICAgIHZhciBwbGF0Zm9ybXMgPSBzb3J0ZWRQbGF0Zm9ybXMoKTsKKyAg
ICB2YXIgcGxhdGZvcm1zID0gRGFzaGJvYXJkLnNvcnRlZFBsYXRmb3JtczsKIAogICAgIGZvciAo
dmFyIGkgaW4gcGxhdGZvcm1zKSB7CiAgICAgICAgIHZhciBwbGF0Zm9ybSA9IHBsYXRmb3Jtc1tp
XTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL01ldHJpY3NNYWluLmpzIGIvVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
ZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMKaW5kZXggNmRiZjM4ZWJhYmNiNjc1ZmE5
NjQ4NmJiZTcwOGE5ZmFiYjk4NjZiYS4uMWZjNzlmNWY3YzJkZGQzODNhNDM2Yjk5OGQxMjIxZWQw
Yzk1Mzk1OSAxMDA2NDQKLS0tIGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0
Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMK
KysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVi
bGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMKQEAgLTcwLDIwICs3MCw2
IEBAIHZhciB0ZXN0TmFtZXMgPSB7fTsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnku
V2ViS2l0Ml0gPSAiV0syIFRlc3RzIjsKIHRlc3ROYW1lc1tCdWlsZGJvdC5UZXN0Q2F0ZWdvcnku
V2ViS2l0MV0gPSAiV0sxIFRlc3RzIjsKIAotZnVuY3Rpb24gc29ydGVkUGxhdGZvcm1zKCkKLXsK
LSAgICB2YXIgcGxhdGZvcm1zID0gW107Ci0KLSAgICBmb3IgKHZhciBwbGF0Zm9ybUtleSBpbiBE
YXNoYm9hcmQuUGxhdGZvcm0pCi0gICAgICAgIHBsYXRmb3Jtcy5wdXNoKERhc2hib2FyZC5QbGF0
Zm9ybVtwbGF0Zm9ybUtleV0pOwotCi0gICAgcGxhdGZvcm1zLnNvcnQoZnVuY3Rpb24oYSwgYikg
ewotICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7Ci0gICAgfSk7Ci0KLSAgICByZXR1
cm4gcGxhdGZvcm1zOwotfQotCiBmdW5jdGlvbiB1cGRhdGVIaWRkZW5QbGF0Zm9ybXMoKQogewog
ICAgIHZhciBoaWRkZW5QbGF0Zm9ybXMgPSBzZXR0aW5ncy5nZXRPYmplY3QoImhpZGRlblBsYXRm
b3JtcyIpOwpAQCAtMjA0LDcgKzE5MCw3IEBAIGZ1bmN0aW9uIGJ1aWxkUXVldWVzVGFibGUoKQog
CiAgICAgdGFibGUuYXBwZW5kQ2hpbGQocm93KTsKIAotICAgIHZhciBwbGF0Zm9ybXMgPSBzb3J0
ZWRQbGF0Zm9ybXMoKTsKKyAgICB2YXIgcGxhdGZvcm1zID0gRGFzaGJvYXJkLnNvcnRlZFBsYXRm
b3JtczsKIAogICAgIGZvciAodmFyIGkgaW4gcGxhdGZvcm1zKSB7CiAgICAgICAgIHZhciBwbGF0
Zm9ybSA9IHBsYXRmb3Jtc1tpXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0
L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1V0
aWxpdGllcy5qcyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1V0aWxpdGllcy5qcwppbmRleCAzYzMw
YzI2ZWU4ZTg4ZGFlOTNmNmVmYTI0M2ZiYjZiNjhmZDUwYjBkLi5mOWZhZWExN2Q4ZjIxYTc0Y2Vh
NjAxM2I2ODllY2Y1Y2JjNmFjMTcyIDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9V
dGlsaXRpZXMuanMKKysrIGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvVXRpbGl0aWVzLmpzCkBAIC0x
OTYsNCArMTk2LDE4IEBAIFN0cmluZy5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihzdWJz
dHJpbmcpCiBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggPSBmdW5jdGlvbihzdWJzdHJpbmcp
CiB7CiAgICAgcmV0dXJuIHRoaXMubGFzdEluZGV4T2Yoc3Vic3RyaW5nLCAwKSA9PT0gMDsKLX0K
K307CisKK3NvcnREaWN0aW9uYXJpZXNCeU9yZGVyID0gZnVuY3Rpb24odW5zb3J0ZWQpCit7Cisg
ICAgdmFyIHNvcnRlZCA9IFtdOworCisgICAgZm9yICh2YXIga2V5IGluIHVuc29ydGVkKQorICAg
ICAgICBzb3J0ZWQucHVzaCh1bnNvcnRlZFtrZXldKTsKKworICAgIHNvcnRlZC5zb3J0KGZ1bmN0
aW9uKGEsIGIpIHsKKyAgICAgICAgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyOworICAgIH0pOwor
CisgICAgcmV0dXJuIHNvcnRlZDsKK307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258533</attachid>
            <date>2015-08-07 15:08:04 -0700</date>
            <delta_ts>2015-08-07 16:11:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147667-20150807150753.patch</filename>
            <type>text/plain</type>
            <size>8614</size>
            <attacher name="Jason Marcell">jmarcell</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMDQz
ZDM4MDU4MTA3YzgyNzAyODkzNjhlYzY2MmI2MzQ0YmY5YjkzLi5kMTFlMTM1ZGM0MjY5YjA0MzQ1
YjRkZDI5ZTNmM2U4ZmMwZWQwZGZhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTUtMDgtMDcgIEphc29uIE1hcmNl
bGwgIDxqbWFyY2VsbEBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQnVpbGRib3RRdWV1
ZS5jb21wYXJlSXRlcmF0aW9ucyBhbmQgQnVpbGRib3RRdWV1ZS5jb21wYXJlSXRlcmF0aW9uc0J5
UmV2aXNpb25zIHRvIGJlIG1vcmUgZ2VuZXJpYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9CdWlsZGJvdFF1ZXVlLmpzOgor
ICAgICAgICAoQnVpbGRib3RRdWV1ZS5wcm90b3R5cGUuY29tcGFyZUl0ZXJhdGlvbnMpOiBSZWZh
Y3RvcmVkIHRvIHdvcmsgbW9yZSBnZW5lcmljYWxseSB3aXRoIHJlcG9zaXRvcmllcworICAgICAg
ICBvdGhlciB0aGFuICJvcGVuU291cmNlIiBhbmQgImludGVybmFsIi4KKyAgICAgICAgKEJ1aWxk
Ym90UXVldWUucHJvdG90eXBlLmNvbXBhcmVJdGVyYXRpb25zQnlSZXZpc2lvbnMpOiBEaXR0by4K
KyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNoYm9hcmQuanM6CisgICAgICAgIChEYXNoYm9h
cmQuZ2V0IHNvcnRlZFBsYXRmb3Jtcyk6IEFkZGVkLiBSZXR1cm5zIGEgc29ydGVkIGFycmF5IG9m
IHBsYXRmb3Jtcy4KKyAgICAgICAgKERhc2hib2FyZC5nZXQgc29ydGVkUmVwb3NpdG9yaWVzKTog
QWRkZWQuIFJldHVybnMgYSBzb3J0ZWQgYXJyYXkgb2YgcmVwb3NpdG9yaWVzLgorICAgICAgICAq
IEJ1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL01haW4uanM6CisgICAgICAgIChkb2N1bWVudFJlYWR5KTogVXNpbmcg
RGFzaGJvYXJkLnNvcnRlZFBsYXRmb3JtcyBpbnN0ZWFkIG9mIHNvcnRlZFBsYXRmb3Jtcy4KKyAg
ICAgICAgKHNvcnRlZFBsYXRmb3Jtcyk6IERlbGV0ZWQuCisgICAgICAgICogQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Njcmlw
dHMvTWV0cmljc01haW4uanM6CisgICAgICAgIChidWlsZFF1ZXVlc1RhYmxlKTogVXNpbmcgRGFz
aGJvYXJkLnNvcnRlZFBsYXRmb3JtcyBpbnN0ZWFkIG9mIHNvcnRlZFBsYXRmb3Jtcy4KKyAgICAg
ICAgKHNvcnRlZFBsYXRmb3Jtcyk6IERlbGV0ZWQuCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBv
cnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMv
VXRpbGl0aWVzLmpzOgorICAgICAgICAoc29ydERpY3Rpb25hcmllc0J5T3JkZXIpOiBBZGRlZC4g
VGFrZXMgYW4gYXJyYXkgb2YgZGljdGlvbmFyaWVzIHRoYXQgaGF2ZSBhbiAib3JkZXIiIHByb3Bl
cnR5CisgICAgICAgIGFuZCBzb3J0cyB0aGVtIGJ5IHRoaXMgcHJvcGVydHkgcmV0dXJuaW5nIHRo
ZSBuZXcgc29ydGVkIGFycmF5LgorCiAyMDE1LTA4LTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGEgdHlvcC4KZGlmZiAtLWdpdCBhL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9y
dC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9C
dWlsZGJvdFF1ZXVlLmpzCmluZGV4IDFjMjFhZmJjMjMxYmU0MWQ1Mjk2MjNkN2RlOWFkM2U4NjJh
ZDkwNzYuLjcwNTlkYWEyMGNkOTYyZmVlZDEyYTMzZWI1OGZkMzhjYTk5YThlMmEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1Ymxp
Y19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0J1aWxkYm90UXVldWUuanMKKysrIGIvVG9vbHMvQnVp
bGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJv
YXJkL1NjcmlwdHMvQnVpbGRib3RRdWV1ZS5qcwpAQCAtMjY4LDEzICsyNjgsMTMgQEAgQnVpbGRi
b3RRdWV1ZS5wcm90b3R5cGUgPSB7CiAKICAgICBjb21wYXJlSXRlcmF0aW9uczogZnVuY3Rpb24o
YSwgYikKICAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBiLnJldmlzaW9uW0Rhc2hib2FyZC5S
ZXBvc2l0b3J5Lk9wZW5Tb3VyY2UubmFtZV0gLSBhLnJldmlzaW9uW0Rhc2hib2FyZC5SZXBvc2l0
b3J5Lk9wZW5Tb3VyY2UubmFtZV07Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHJlc3VsdCA9IGIucmV2aXNpb25bRGFzaGJvYXJkLlJl
cG9zaXRvcnkuSW50ZXJuYWwubmFtZV0gLSBhLnJldmlzaW9uW0Rhc2hib2FyZC5SZXBvc2l0b3J5
LkludGVybmFsLm5hbWVdOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgdmFyIHNvcnRlZFJlcG9zaXRvcmllcyA9IERhc2hib2FyZC5zb3J0
ZWRSZXBvc2l0b3JpZXM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc29ydGVkUmVwb3Np
dG9yaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVwb3NpdG9yeU5hbWUgPSBz
b3J0ZWRSZXBvc2l0b3JpZXNbaV0ubmFtZTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBiLnJl
dmlzaW9uW3JlcG9zaXRvcnlOYW1lXSAtIGEucmV2aXNpb25bcmVwb3NpdG9yeU5hbWVdOworICAg
ICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CiAKICAgICAgICAgLy8gQSBsb2FkZWQgaXRlcmF0aW9uIG1heSBub3QgaGF2ZSByZXZp
c2lvbiBudW1iZXJzIGlmIGl0IGZhaWxlZCBlYXJseSwgYmVmb3JlIHN2biBzdGVwcyBmaW5pc2hl
ZC4KICAgICAgICAgcmVzdWx0ID0gYi5sb2FkZWQgLSBhLmxvYWRlZDsKQEAgLTI4NiwxMyArMjg2
LDEzIEBAIEJ1aWxkYm90UXVldWUucHJvdG90eXBlID0gewogCiAgICAgY29tcGFyZUl0ZXJhdGlv
bnNCeVJldmlzaW9uczogZnVuY3Rpb24oYSwgYikKICAgICB7Ci0gICAgICAgIHZhciByZXN1bHQg
PSBiLnJldmlzaW9uW0Rhc2hib2FyZC5SZXBvc2l0b3J5Lk9wZW5Tb3VyY2UubmFtZV0gLSBhLnJl
dmlzaW9uW0Rhc2hib2FyZC5SZXBvc2l0b3J5Lk9wZW5Tb3VyY2UubmFtZV07Ci0gICAgICAgIGlm
IChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHJlc3VsdCA9
IGIucmV2aXNpb25bRGFzaGJvYXJkLlJlcG9zaXRvcnkuSW50ZXJuYWwubmFtZV0gLSBhLnJldmlz
aW9uW0Rhc2hib2FyZC5SZXBvc2l0b3J5LkludGVybmFsLm5hbWVdOwotICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgdmFyIHNvcnRlZFJlcG9z
aXRvcmllcyA9IERhc2hib2FyZC5zb3J0ZWRSZXBvc2l0b3JpZXM7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc29ydGVkUmVwb3NpdG9yaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICB2YXIgcmVwb3NpdG9yeU5hbWUgPSBzb3J0ZWRSZXBvc2l0b3JpZXNbaV0ubmFtZTsKKyAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBiLnJldmlzaW9uW3JlcG9zaXRvcnlOYW1lXSAtIGEucmV2aXNp
b25bcmVwb3NpdG9yeU5hbWVdOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmct
Y29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL0Rhc2hib2FyZC5qcyBiL1Rvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rh
c2hib2FyZC9TY3JpcHRzL0Rhc2hib2FyZC5qcwppbmRleCA0YTNiZGVkZGRlNThkYjVlMzU3YmU3
NjBiYmE0MjJhYWUyNDQ2YmZjLi5jZDU3NWE2OGU5N2QxNTBiNzYxNDBjMTdkYjE5ODkyMmM3NmY0
YWY0IDEwMDY0NAotLS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3Jn
LWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9EYXNoYm9hcmQuanMKKysrIGIv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvRGFzaGJvYXJkLmpzCkBAIC0zOSw1ICszOSwxNyBAQCBEYXNo
Ym9hcmQgPSB7CiAgICAgUmVwb3NpdG9yeTogewogICAgICAgICBPcGVuU291cmNlOiB7IG5hbWU6
ICJvcGVuU291cmNlIiwgb3JkZXI6IDAgfSwKICAgICAgICAgSW50ZXJuYWw6IHsgbmFtZTogImlu
dGVybmFsIiwgb3JkZXI6IDEgfSwKLSAgICB9CisgICAgfSwKKyAgICBnZXQgc29ydGVkUGxhdGZv
cm1zKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc29ydGVkUGxhdGZvcm1zKQorICAgICAg
ICAgICAgdGhpcy5fc29ydGVkUGxhdGZvcm1zID0gc29ydERpY3Rpb25hcmllc0J5T3JkZXIoRGFz
aGJvYXJkLlBsYXRmb3JtKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRlZFBsYXRmb3JtczsK
KyAgICB9LAorICAgIGdldCBzb3J0ZWRSZXBvc2l0b3JpZXMoKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9zb3J0ZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICB0aGlzLl9zb3J0ZWRSZXBv
c2l0b3JpZXMgPSBzb3J0RGljdGlvbmFyaWVzQnlPcmRlcihEYXNoYm9hcmQuUmVwb3NpdG9yeSk7
CisgICAgICAgIHJldHVybiB0aGlzLl9zb3J0ZWRSZXBvc2l0b3JpZXM7CisgICAgfSwKIH07CmRp
ZmYgLS1naXQgYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZp
Zy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzIGIvVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1Nj
cmlwdHMvTWFpbi5qcwppbmRleCBjNmU2MThkMmIwZTFkOGUzY2IyYmI3ZDkxMzMzMWE3ZTlkN2Vj
OGRlLi4yMWFmMjEzM2QzMzc3NzQ0OWE3ZjBjNzBmM2NiZDExZDMzNTIyMWM3IDEwMDY0NAotLS0g
YS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NYWluLmpzCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2J1aWxkLndlYmtpdC5vcmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRz
L01haW4uanMKQEAgLTEwMywyMCArMTAzLDYgQEAgdmFyIHRlc3ROYW1lcyA9IHt9OwogdGVzdE5h
bWVzW0J1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyXSA9ICJXSzIgVGVzdHMiOwogdGVzdE5h
bWVzW0J1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxXSA9ICJXSzEgVGVzdHMiOwogCi1mdW5j
dGlvbiBzb3J0ZWRQbGF0Zm9ybXMoKQotewotICAgIHZhciBwbGF0Zm9ybXMgPSBbXTsKLQotICAg
IGZvciAodmFyIHBsYXRmb3JtS2V5IGluIERhc2hib2FyZC5QbGF0Zm9ybSkKLSAgICAgICAgcGxh
dGZvcm1zLnB1c2goRGFzaGJvYXJkLlBsYXRmb3JtW3BsYXRmb3JtS2V5XSk7Ci0KLSAgICBwbGF0
Zm9ybXMuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5v
cmRlcjsKLSAgICB9KTsKLQotICAgIHJldHVybiBwbGF0Zm9ybXM7Ci19Ci0KIGZ1bmN0aW9uIHVw
ZGF0ZUhpZGRlblBsYXRmb3JtcygpCiB7CiAgICAgdmFyIGhpZGRlblBsYXRmb3JtcyA9IHNldHRp
bmdzLmdldE9iamVjdCgiaGlkZGVuUGxhdGZvcm1zIik7CkBAIC0xOTksNyArMTg1LDcgQEAgZnVu
Y3Rpb24gZG9jdW1lbnRSZWFkeSgpCiAKICAgICB0YWJsZS5hcHBlbmRDaGlsZChyb3cpOwogCi0g
ICAgdmFyIHBsYXRmb3JtcyA9IHNvcnRlZFBsYXRmb3JtcygpOworICAgIHZhciBwbGF0Zm9ybXMg
PSBEYXNoYm9hcmQuc29ydGVkUGxhdGZvcm1zOwogCiAgICAgZm9yICh2YXIgaSBpbiBwbGF0Zm9y
bXMpIHsKICAgICAgICAgdmFyIHBsYXRmb3JtID0gcGxhdGZvcm1zW2ldOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0
bWwvZGFzaGJvYXJkL1NjcmlwdHMvTWV0cmljc01haW4uanMgYi9Ub29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0
cy9NZXRyaWNzTWFpbi5qcwppbmRleCA2ZGJmMzhlYmFiY2I2NzVmYTk2NDg2YmJlNzA4YTlmYWJi
OTg2NmJhLi4xZmM3OWY1ZjdjMmRkZDM4M2E0MzZiOTk4ZDEyMjFlZDBjOTUzOTU5IDEwMDY0NAot
LS0gYS9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJs
aWNfaHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9NZXRyaWNzTWFpbi5qcworKysgYi9Ub29scy9CdWls
ZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNfaHRtbC9kYXNoYm9h
cmQvU2NyaXB0cy9NZXRyaWNzTWFpbi5qcwpAQCAtNzAsMjAgKzcwLDYgQEAgdmFyIHRlc3ROYW1l
cyA9IHt9OwogdGVzdE5hbWVzW0J1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQyXSA9ICJXSzIg
VGVzdHMiOwogdGVzdE5hbWVzW0J1aWxkYm90LlRlc3RDYXRlZ29yeS5XZWJLaXQxXSA9ICJXSzEg
VGVzdHMiOwogCi1mdW5jdGlvbiBzb3J0ZWRQbGF0Zm9ybXMoKQotewotICAgIHZhciBwbGF0Zm9y
bXMgPSBbXTsKLQotICAgIGZvciAodmFyIHBsYXRmb3JtS2V5IGluIERhc2hib2FyZC5QbGF0Zm9y
bSkKLSAgICAgICAgcGxhdGZvcm1zLnB1c2goRGFzaGJvYXJkLlBsYXRmb3JtW3BsYXRmb3JtS2V5
XSk7Ci0KLSAgICBwbGF0Zm9ybXMuc29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgIHJldHVy
biBhLm9yZGVyIC0gYi5vcmRlcjsKLSAgICB9KTsKLQotICAgIHJldHVybiBwbGF0Zm9ybXM7Ci19
Ci0KIGZ1bmN0aW9uIHVwZGF0ZUhpZGRlblBsYXRmb3JtcygpCiB7CiAgICAgdmFyIGhpZGRlblBs
YXRmb3JtcyA9IHNldHRpbmdzLmdldE9iamVjdCgiaGlkZGVuUGxhdGZvcm1zIik7CkBAIC0yMDQs
NyArMTkwLDcgQEAgZnVuY3Rpb24gYnVpbGRRdWV1ZXNUYWJsZSgpCiAKICAgICB0YWJsZS5hcHBl
bmRDaGlsZChyb3cpOwogCi0gICAgdmFyIHBsYXRmb3JtcyA9IHNvcnRlZFBsYXRmb3JtcygpOwor
ICAgIHZhciBwbGF0Zm9ybXMgPSBEYXNoYm9hcmQuc29ydGVkUGxhdGZvcm1zOwogCiAgICAgZm9y
ICh2YXIgaSBpbiBwbGF0Zm9ybXMpIHsKICAgICAgICAgdmFyIHBsYXRmb3JtID0gcGxhdGZvcm1z
W2ldOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9y
Zy1jb25maWcvcHVibGljX2h0bWwvZGFzaGJvYXJkL1NjcmlwdHMvVXRpbGl0aWVzLmpzIGIvVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcHVibGljX2h0bWwv
ZGFzaGJvYXJkL1NjcmlwdHMvVXRpbGl0aWVzLmpzCmluZGV4IDNjMzBjMjZlZThlODhkYWU5M2Y2
ZWZhMjQzZmJiNmI2OGZkNTBiMGQuLjJkNzAyNTAxZTcxZmE2ZTljZWYzZDYyMTIzMGI5OWU5ZjEy
ZDEwZGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5v
cmctY29uZmlnL3B1YmxpY19odG1sL2Rhc2hib2FyZC9TY3JpcHRzL1V0aWxpdGllcy5qcworKysg
Yi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsZC53ZWJraXQub3JnLWNvbmZpZy9wdWJsaWNf
aHRtbC9kYXNoYm9hcmQvU2NyaXB0cy9VdGlsaXRpZXMuanMKQEAgLTE5Niw0ICsxOTYsMTggQEAg
U3RyaW5nLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHN1YnN0cmluZykKIFN0cmluZy5w
cm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uKHN1YnN0cmluZykKIHsKICAgICByZXR1cm4g
dGhpcy5sYXN0SW5kZXhPZihzdWJzdHJpbmcsIDApID09PSAwOwotfQorfTsKKworZnVuY3Rpb24g
c29ydERpY3Rpb25hcmllc0J5T3JkZXIodW5zb3J0ZWQpCit7CisgICAgdmFyIHNvcnRlZCA9IFtd
OworCisgICAgZm9yICh2YXIga2V5IGluIHVuc29ydGVkKQorICAgICAgICBzb3J0ZWQucHVzaCh1
bnNvcnRlZFtrZXldKTsKKworICAgIHNvcnRlZC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAg
ICAgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyOworICAgIH0pOworCisgICAgcmV0dXJuIHNvcnRl
ZDsKK307Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>