<?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>142233</bug_id>
          
          <creation_ts>2015-03-03 13:45:39 -0800</creation_ts>
          <short_desc>Web Inspector: Destructuring function parameters should show type information</short_desc>
          <delta_ts>2022-03-01 02:47:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1073781</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-03 13:45:39 -0800</bug_when>
    <thetext>Currently, we don&apos;t recursively gather identifiers for restructuring assignments as function arguments.

Also, there is some duplicated code between the ScriptSyntaxTree and TypeTokenAnnotator for how they
traverse the AST and decide which nodes to gather type information for. There is no need for this duplication. 
ScriptSyntaxTree should be the canonical version that decides which nodes to gather type information for, and 
the type token annotator should just receive an array of such nodes that it should update from ScriptSyntaxTree.

Also, there was a subtle bug that will be fixed. Currently, if a function returns some type, say an Int, and we display
in the UI that it displays an Int, if that function ever returns a type other than an Int, the UI will not update because
there was a faulty condition inside an if statement in type token annotator. This is taken care of in this patch too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073782</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-03 13:46:03 -0800</bug_when>
    <thetext>&lt;rdar://problem/20027306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073791</commentid>
    <comment_count>2</comment_count>
      <attachid>247791</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-03 14:03:57 -0800</bug_when>
    <thetext>Created attachment 247791
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073793</commentid>
    <comment_count>3</comment_count>
      <attachid>247791</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-03-03 14:06:50 -0800</bug_when>
    <thetext>Comment on attachment 247791
patch

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

&gt; Source/WebInspectorUI/ChangeLog:9
&gt; +        just an oversight not have this in bug 141215.

Grammar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073801</commentid>
    <comment_count>4</comment_count>
      <attachid>247791</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-03 14:26:01 -0800</bug_when>
    <thetext>Comment on attachment 247791
patch

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

Is it possible / worth writing a test for this?

&gt; Source/WebInspectorUI/ChangeLog:8
&gt; +        JSC supports destructuring arguments, and so should we. This was

What is destructuring arguments? Is this supposed to be destructuring assignments?

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:110
&gt; +        if (!node.attachments.__typeToken
&gt; +                &amp;&amp; (scriptSyntaxTree.containsNonEmptyReturnStatement(node.body) || !WebInspector.TypeSet.fromPayload(functionReturnType).isContainedIn(WebInspector.TypeSet.TypeBit.Undefined))) {

Style: Can just b done line. The line-break doesn&apos;t help much.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:237
&gt; +                for (var identifier of this._gatherIdentifiersInDeclaration(node.id)) {

Err, shouldn&apos;t this be calling with &quot;node&quot; and not &quot;node.id&quot;?

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:275
&gt; +    _gatherIdentifiersInDeclaration: function (node) {

Style: &quot;function (node)&quot; =&gt; &quot;function(node)&quot;.
Style: Brace should be on its own line.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:300
&gt;              }

Typo on line 298: &quot;Unexecpted&quot; =&gt; &quot;Unexpected&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075159</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-06 16:45:30 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 247791 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247791&amp;action=review
&gt; 
&gt; Is it possible / worth writing a test for this?
&gt; 
It&apos;s both possible and probably worth doing inside JSC. This way we can ensure
the data JSC sends the inspector is correct. I think it&apos;s possible from within
the inspector to write tests too, but it&apos;s more difficult and would require some
scaffolding to be created.

&gt; &gt; Source/WebInspectorUI/ChangeLog:8
&gt; &gt; +        JSC supports destructuring arguments, and so should we. This was
&gt; 
&gt; What is destructuring arguments? Is this supposed to be destructuring
&gt; assignments?

Not sure what the proper ECMAScript name for it is, but basically:

function foo({x, y: hello}) { return x + hello }
foo({x:20, y: 40})

or

function foo([a, b]) { return a * b }
foo([10, 20])

&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:110
&gt; &gt; +        if (!node.attachments.__typeToken
&gt; &gt; +                &amp;&amp; (scriptSyntaxTree.containsNonEmptyReturnStatement(node.body) || !WebInspector.TypeSet.fromPayload(functionReturnType).isContainedIn(WebInspector.TypeSet.TypeBit.Undefined))) {
&gt; 
&gt; Style: Can just b done line. The line-break doesn&apos;t help much.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:237
&gt; &gt; +                for (var identifier of this._gatherIdentifiersInDeclaration(node.id)) {
&gt; 
&gt; Err, shouldn&apos;t this be calling with &quot;node&quot; and not &quot;node.id&quot;?

No, I&apos;ve changed the function to recurse on a node that&apos;s an
&quot;Identifier&quot;. I&apos;m not sure Identifier is the proper name
here, I&apos;m sure there is some other name in ECMAScript&apos;s grammar,
but basically an expression that can be the X in &quot;var X = expr&quot;.
So, X can be:
var ident = expr
var {y: yyy} = expo
var [x,y] = expr
etc.

Previously, this function would receive a VariableDeclarator AST node and
recurse on that node&apos;s node.id property, but, that was too specific 
because it rules out recursing on a function&apos;s formal parameters which
can also be an &quot;Identifier&quot; in the sense defined above for &quot;X&quot;.

I&apos;m going to add an assert to make sure the node passed into this function
meets my above definition of &quot;Identifier&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075163</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-06 16:57:59 -0800</bug_when>
    <thetext>Looks like ECMA grammar has some names for it based on context,
but basically, X in var X can be:
&quot;BindingIdentifier&quot; or &quot;BindingPattern&quot; which is basically a name
or a pattern.

and function foo(X) {}, X can be a
&quot;BindingElement&quot; which is either a pattern or a name.

We will have to support more AST nodes when JSC gets
ES6 function rest parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075168</commentid>
    <comment_count>7</comment_count>
      <attachid>248117</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-06 17:27:18 -0800</bug_when>
    <thetext>Created attachment 248117
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075179</commentid>
    <comment_count>8</comment_count>
      <attachid>248120</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-06 17:49:24 -0800</bug_when>
    <thetext>Created attachment 248120
patch

Should apply to ToT now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075279</commentid>
    <comment_count>9</comment_count>
      <attachid>248157</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-07 10:12:03 -0800</bug_when>
    <thetext>Created attachment 248157
patch

Change misleading name of bug to indicate that this is a function definition&apos;s parameters
and not a function call&apos;s arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075881</commentid>
    <comment_count>10</comment_count>
      <attachid>248157</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-09 20:51:48 -0700</bug_when>
    <thetext>Comment on attachment 248157
patch

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

r=me

&gt; Source/WebInspectorUI/ChangeLog:10
&gt; +        and so should the type profiler in the Inspector. This was just an oversight 
&gt; +        not have this in bug 141215.

Grammar: &quot;an oversight not have this&quot;

&gt; Source/WebInspectorUI/ChangeLog:14
&gt; +        Before, both these classes were responsible for traversing the AST

Grammar: &quot;both these classes&quot; =&gt; &quot;both of these classes&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076013</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-03-10 11:48:01 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/181331</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247791</attachid>
            <date>2015-03-03 14:03:57 -0800</date>
            <delta_ts>2015-03-06 17:27:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>10205</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwOTUzKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE1LTAzLTAzICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBEZXN0cnVjdHVyaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBzaG91
bGQgc2hvdyB0eXBlIGluZm9ybWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDIyMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBKU0Mgc3VwcG9ydHMgZGVzdHJ1Y3R1cmluZyBhcmd1bWVudHMsIGFu
ZCBzbyBzaG91bGQgd2UuIFRoaXMgd2FzCisgICAgICAgIGp1c3QgYW4gb3ZlcnNpZ2h0IG5vdCBo
YXZlIHRoaXMgaW4gYnVnIDE0MTIxNS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZG9lcyBh
IGJpdCBvZiByZWZhY3RvcmluZyB0byBub3QgaGF2ZSBkdXBsaWNhdGUgY29kZQorICAgICAgICB0
aGF0IHRyYXZlcnNlcyBBU1Qgbm9kZXMgaW4gVHlwZVRva2VuQW5ub3RhdG9yIGFuZCBTY3JpcHRT
eW50YXhUcmVlLgorICAgICAgICBCZWZvcmUsIGJvdGggdGhlc2UgY2xhc3NlcyB3ZXJlIHJlc3Bv
bnNpYmxlIGZvciB0cmF2ZXJzaW5nIHRoZSBBU1QKKyAgICAgICAgaW4gYW4gaWRlbnRpY2FsIHdh
eSwgdGhpcyBpcyBiYWQuIE5vdywgU2NyaXB0U3ludGF4VHJlZSBjb250YWlucyB0aGUKKyAgICAg
ICAgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uIG9mIGhvdyB0aGUgQVNUIHNob3VsZCBiZSB0cmF2
ZXJzZWQgYW5kIHdoaWNoCisgICAgICAgIEFTVCBub2RlcyBzaG91bGQgYmUgY29sbGVjdGVkIGZv
ciB0eXBlIHByb2ZpbGluZy4gU2NyaXB0U3ludGF4VHJlZSB3aWxsCisgICAgICAgIHBhc3MgdGhp
cyBpbmZvcm1hdGlvbiBiYWNrIHRvIFR5cGVUb2tlbkFubm90YXRvci4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuX2luc2VydFR5cGVUb2tl
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5f
aW5zZXJ0VHlwZVRva2Vuc0ZvckVhY2hOb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50
ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5wcm90b3R5cGUudXBkYXRlVHlwZXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLl9nYXRoZXJJZGVudGlmaWVyc0luRGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBl
LmdhdGhlcklkZW50aWZpZXJzSW5WYXJpYWJsZURlY2xhcmF0aW9uKTogRGVsZXRlZC4KKwogMjAx
NS0wMy0wMyAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBSZWZhY3RvcmluZzogc2VwYXJhdGUgQ29uc29sZVNlc3Npb24gZnJv
bSBDb25zb2xlR3JvdXAKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0
b3IuanMJKHJldmlzaW9uIDE4MDkyNCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpA
QCAtNjIsMTIgKzYyLDEyIEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90
eXAKIAogICAgICAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgdmFyIGFs
bE5vZGVzSW5SYW5nZSA9IHNjcmlwdFN5bnRheFRyZWUuZmlsdGVyQnlSYW5nZShzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0KTsKLSAgICAgICAgc2NyaXB0U3ludGF4VHJlZS51cGRhdGVUeXBlcyhhbGxO
b2Rlc0luUmFuZ2UsIGZ1bmN0aW9uIGFmdGVyVHlwZVVwZGF0ZXMoKSB7CisgICAgICAgIHNjcmlw
dFN5bnRheFRyZWUudXBkYXRlVHlwZXMoYWxsTm9kZXNJblJhbmdlLCBmdW5jdGlvbiBhZnRlclR5
cGVVcGRhdGVzKG5vZGVzV2l0aFVwZGF0ZWRUeXBlcykgewogICAgICAgICAgICAgLy8gQmVjYXVz
ZSB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyBjYWxsLCB3ZSBjb3VsZCBoYXZlIGJlZW4gZGVhY3Rp
dmF0ZWQgYmVmb3JlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgICAgICAgICAg
ICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgICAgIGFsbE5vZGVzSW5SYW5nZS5mb3JFYWNoKHRoaXMuX2luc2VydFR5cGVUb2tlbnNGb3JF
YWNoTm9kZSwgdGhpcyk7CisgICAgICAgICAgICBub2Rlc1dpdGhVcGRhdGVkVHlwZXMuZm9yRWFj
aCh0aGlzLl9pbnNlcnRUeXBlVG9rZW4sIHRoaXMpOwogCiAgICAgICAgICAgICB2YXIgdG90YWxU
aW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgIHZhciB0aW1lb3V0VGlt
ZSA9IE1hdGgubWluKE1hdGgubWF4KDc1MDAsIHRvdGFsVGltZSksIDggKiB0b3RhbFRpbWUpOwpA
QCAtODYsNDcgKzg2LDM1IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90
eXAKIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGU6
IGZ1bmN0aW9uKG5vZGUpCisgICAgX2luc2VydFR5cGVUb2tlbjogZnVuY3Rpb24obm9kZSkKICAg
ICB7Ci0gICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRT
eW50YXhUcmVlOwotCi0gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7Ci0gICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlv
bjoKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
dW5jdGlvbkV4cHJlc3Npb246Ci0gICAgICAgICAgICBmb3IgKHZhciBwYXJhbSBvZiBub2RlLnBh
cmFtcykgewotICAgICAgICAgICAgICAgIGlmICghcGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9r
ZW4gJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMgJiYgcGFyYW0uYXR0YWNobWVudHMudHlwZXMu
aXNWYWxpZCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4ocGFyYW0ucmFu
Z2VbMF0sIHBhcmFtLCBmYWxzZSwgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBl
LlZhcmlhYmxlLCBwYXJhbS5uYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmIChwYXJhbS5hdHRh
Y2htZW50cy5fX3R5cGVUb2tlbikKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0uYXR0YWNobWVu
dHMuX190eXBlVG9rZW4udXBkYXRlKHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGV4
cGxpY2l0IHJldHVybiB0eXBlLCB0aGVuIGRvbid0IHNob3cgYSByZXR1cm4gdHlwZSB1bmxlc3Mg
d2UgdGhpbmsgaXQncyBhIGNvbnN0cnVjdG9yLgotICAgICAgICAgICAgdmFyIGZ1bmN0aW9uUmV0
dXJuVHlwZSA9IG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXM7Ci0gICAgICAgICAgICBpZiAo
bm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbiB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlIHx8ICFm
dW5jdGlvblJldHVyblR5cGUuaXNWYWxpZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgaWYgKHNjcmlwdFN5bnRheFRyZWUuY29udGFpbnNOb25FbXB0eVJldHVyblN0YXRl
bWVudChub2RlLmJvZHkpIHx8ICFXZWJJbnNwZWN0b3IuVHlwZVNldC5mcm9tUGF5bG9hZChmdW5j
dGlvblJldHVyblR5cGUpLmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVTZXQuVHlwZUJp
dC5VbmRlZmluZWQpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG5vZGUu
aWQgPyBub2RlLmlkLm5hbWUgOiBudWxsOwotICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRv
a2VuKG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUuZ2V0dGVyT3JTZXR0ZXJSYW5nZVswXSA6
IG5vZGUucmFuZ2VbMF0sIG5vZGUsIHRydWUsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRp
dGxlVHlwZS5SZXR1cm5TdGF0ZW1lbnQsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGlmIChub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS5hdHRhY2htZW50cy5f
X3R5cGVUb2tlbiAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzICYmIG5vZGUuYXR0YWNobWVudHMu
dHlwZXMuaXNWYWxpZCkKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihub2RlLnJh
bmdlWzBdLCBub2RlLCBmYWxzZSwgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBl
LlZhcmlhYmxlLCBub2RlLm5hbWUpOwogCiAgICAgICAgICAgICBpZiAobm9kZS5hdHRhY2htZW50
cy5fX3R5cGVUb2tlbikKLSAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRv
a2VuLnVwZGF0ZShub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5cGVzKTsKKyAgICAgICAgICAgICAg
ICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShub2RlLmF0dGFjaG1lbnRzLnR5
cGVzKTsKIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgotICAgICAgICAgICAg
dmFyIGlkZW50aWZpZXJzID0gc2NyaXB0U3ludGF4VHJlZS5nYXRoZXJJZGVudGlmaWVyc0luVmFy
aWFibGVEZWNsYXJhdGlvbihub2RlKTsKLSAgICAgICAgICAgIGZvciAoaWRlbnRpZmllciBvZiBp
ZGVudGlmaWVycykgewotICAgICAgICAgICAgICAgIGlmICghaWRlbnRpZmllci5hdHRhY2htZW50
cy5fX3R5cGVUb2tlbiAmJiBpZGVudGlmaWVyLmF0dGFjaG1lbnRzLnR5cGVzICYmIGlkZW50aWZp
ZXIuYXR0YWNobWVudHMudHlwZXMuaXNWYWxpZCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5f
aW5zZXJ0VG9rZW4oaWRlbnRpZmllci5yYW5nZVswXSwgaWRlbnRpZmllciwgZmFsc2UsIFdlYklu
c3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgaWRlbnRpZmllci5uYW1l
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYg
KGlkZW50aWZpZXIuYXR0YWNobWVudHMuX190eXBlVG9rZW4pCi0gICAgICAgICAgICAgICAgICAg
IGlkZW50aWZpZXIuYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBkYXRlKGlkZW50aWZpZXIuYXR0
YWNobWVudHMudHlwZXMpOwotICAgICAgICAgICAgfQorICAgICAgICBjb25zb2xlLmFzc2VydChu
b2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0
aW9uRGVjbGFyYXRpb24gfHwgbm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24pOworCisgICAgICAgIC8vIElmIGEgZnVu
Y3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24ndCBz
aG93IGEgcmV0dXJuIHR5cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4KKyAg
ICAgICAgdmFyIGZ1bmN0aW9uUmV0dXJuVHlwZSA9IG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlw
ZXM7CisgICAgICAgIGlmICghZnVuY3Rpb25SZXR1cm5UeXBlIHx8ICFmdW5jdGlvblJldHVyblR5
cGUuaXNWYWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhU
cmVlOworICAgICAgICBpZiAoIW5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4KKyAgICAgICAg
ICAgICAgICAmJiAoc2NyaXB0U3ludGF4VHJlZS5jb250YWluc05vbkVtcHR5UmV0dXJuU3RhdGVt
ZW50KG5vZGUuYm9keSkgfHwgIVdlYkluc3BlY3Rvci5UeXBlU2V0LmZyb21QYXlsb2FkKGZ1bmN0
aW9uUmV0dXJuVHlwZSkuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlwZVNldC5UeXBlQml0
LlVuZGVmaW5lZCkpKSB7CisgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbm9kZS5pZCA/
IG5vZGUuaWQubmFtZSA6IG51bGw7CisgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gbm9kZS5pc0dl
dHRlck9yU2V0dGVyID8gbm9kZS5nZXR0ZXJPclNldHRlclJhbmdlWzBdIDogbm9kZS5yYW5nZVsw
XTsKKyAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKG9mZnNldCwgbm9kZSwgdHJ1ZSwgV2Vi
SW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlJldHVyblN0YXRlbWVudCwgZnVuY3Rp
b25OYW1lKTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlw
ZVRva2VuKQorICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUo
bm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlcyk7CiAgICAgfSwKIAogICAgIF9pbnNlcnRUb2tl
bjogZnVuY3Rpb24ob3JpZ2luYWxPZmZzZXQsIG5vZGUsIHNob3VsZFRyYW5zbGF0ZU9mZnNldFRv
QWZ0ZXJQYXJhbWV0ZXJMaXN0LCB0eXBlVG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJs
ZU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
U2NyaXB0U3ludGF4VHJlZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwkocmV2aXNpb24gMTgwOTI0
KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5
bnRheFRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTIxNiwxMiArMjE2LDE0IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKICAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVu
Y3Rpb25FeHByZXNzaW9uOgogICAgICAgICAgICAgICAgIGZvciAodmFyIHBhcmFtIG9mIG5vZGUu
cGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goewotICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5Ob3JtYWxFeHBy
ZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBdCi0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChwYXJh
bSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5fZ2F0
aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uKHBhcmFtKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5Ob3JtYWxFeHByZXNzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaXZvdDogaWRlbnRpZmllci5yYW5nZVswXQorICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChpZGVu
dGlmaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goewpAQCAtMjMyLDcgKzIzNCw3IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgICAgICAgICBhbGxS
ZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVE
ZWNsYXJhdG9yOgotICAgICAgICAgICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5n
YXRoZXJJZGVudGlmaWVyc0luVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSkgeworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5fZ2F0aGVySWRlbnRpZmllcnNJbkRl
Y2xhcmF0aW9uKG5vZGUuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1
c2goewogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjog
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ci5Ob3JtYWxFeHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNv
dXJjZUlELApAQCAtMjYyLDEzICsyNjQsMTUgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUucHJvdG90eXBlIAogICAgICAgICAgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLnR5cGVz
ID0gdHlwZUluZm9ybWF0aW9uOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYWxsYmFj
aygpOworICAgICAgICAgICAgY2FsbGJhY2soYWxsUmVxdWVzdE5vZGVzKTsKICAgICAgICAgfQog
CiAgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNl
dHMoYWxsUmVxdWVzdHMsIGhhbmRsZVR5cGVzKTsKICAgICB9LAogCi0gICAgZ2F0aGVySWRlbnRp
ZmllcnNJblZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uIChub2RlKSB7CisgICAgLy8gUHJp
dmF0ZQorCisgICAgX2dhdGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbjogZnVuY3Rpb24gKG5v
ZGUpIHsKICAgICAgICAgZnVuY3Rpb24gZ2F0aGVySWRlbnRpZmllcnMobm9kZSkgCiAgICAgICAg
IHsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CkBAIC0yOTYsMTIgKzMwMCw5IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yKTsKLSAg
ICAgICAgcmV0dXJuIGdhdGhlcklkZW50aWZpZXJzKG5vZGUuaWQpOworICAgICAgICByZXR1cm4g
Z2F0aGVySWRlbnRpZmllcnMobm9kZSk7CiAgICAgfSwKIAotICAgIC8vIFByaXZhdGUKLQogICAg
IF9kZWZhdWx0UGFyc2VyU3RhdGU6IGZ1bmN0aW9uKCkgCiAgICAgewogICAgICAgICByZXR1cm4g
ewo=
</data>
<flag name="review"
          id="272703"
          type_id="1"
          status="+"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="272704"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248117</attachid>
            <date>2015-03-06 17:27:18 -0800</date>
            <delta_ts>2015-03-06 17:49:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>10897</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwOTUzKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTAzLTAzICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBEZXN0cnVjdHVyaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBzaG91
bGQgc2hvdyB0eXBlIGluZm9ybWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDIyMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBKU0Mgc3VwcG9ydHMgYSBmdW5jdGlvbidzIGZvcm1hbCBwYXJhbWV0
ZXIgYmVpbmcgYSBkZXN0cnVjdHVyaW5nIHBhdHRlcm4sIAorICAgICAgICBhbmQgc28gc2hvdWxk
IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBJbnNwZWN0b3IuIFRoaXMgd2FzIGp1c3QgYW4gb3Zl
cnNpZ2h0IAorICAgICAgICBub3QgaGF2ZSB0aGlzIGluIGJ1ZyAxNDEyMTUuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhbHNvIGRvZXMgYSBiaXQgb2YgcmVmYWN0b3JpbmcgdG8gbm90IGhhdmUgZHVw
bGljYXRlIGNvZGUKKyAgICAgICAgdGhhdCB0cmF2ZXJzZXMgQVNUIG5vZGVzIGluIFR5cGVUb2tl
bkFubm90YXRvciBhbmQgU2NyaXB0U3ludGF4VHJlZS4KKyAgICAgICAgQmVmb3JlLCBib3RoIHRo
ZXNlIGNsYXNzZXMgd2VyZSByZXNwb25zaWJsZSBmb3IgdHJhdmVyc2luZyB0aGUgQVNUCisgICAg
ICAgIGluIGFuIGlkZW50aWNhbCB3YXksIHRoaXMgaXMgYmFkLiBOb3csIFNjcmlwdFN5bnRheFRy
ZWUgY29udGFpbnMgdGhlCisgICAgICAgIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiBob3cg
dGhlIEFTVCBzaG91bGQgYmUgdHJhdmVyc2VkIGFuZCB3aGljaAorICAgICAgICBBU1Qgbm9kZXMg
c2hvdWxkIGJlIGNvbGxlY3RlZCBmb3IgdHlwZSBwcm9maWxpbmcuIFNjcmlwdFN5bnRheFRyZWUg
d2lsbAorICAgICAgICBwYXNzIHRoaXMgaW5mb3JtYXRpb24gYmFjayB0byBUeXBlVG9rZW5Bbm5v
dGF0b3IuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFu
bm90YXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJv
dG90eXBlLl9pbnNlcnRUeXBlVG9rZW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUuX2luc2VydFR5cGVUb2tlbnNGb3JFYWNoTm9kZSk6IERlbGV0
ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS4pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLnVwZGF0ZVR5cGVz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fZ2F0
aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLnByb3RvdHlwZS5nYXRoZXJJZGVudGlmaWVyc0luVmFyaWFibGVEZWNsYXJh
dGlvbik6IERlbGV0ZWQuCisKIDIwMTUtMDMtMDMgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHll
dkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVmYWN0b3Jpbmc6IHNlcGFy
YXRlIENvbnNvbGVTZXNzaW9uIGZyb20gQ29uc29sZUdyb3VwCkluZGV4OiBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAxODA5MjQpCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0
b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEyICs2MiwxMiBAQCBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUu
bm93KCk7CiAgICAgICAgIHZhciBhbGxOb2Rlc0luUmFuZ2UgPSBzY3JpcHRTeW50YXhUcmVlLmZp
bHRlckJ5UmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgIHNjcmlwdFN5bnRh
eFRyZWUudXBkYXRlVHlwZXMoYWxsTm9kZXNJblJhbmdlLCBmdW5jdGlvbiBhZnRlclR5cGVVcGRh
dGVzKCkgeworICAgICAgICBzY3JpcHRTeW50YXhUcmVlLnVwZGF0ZVR5cGVzKGFsbE5vZGVzSW5S
YW5nZSwgZnVuY3Rpb24gYWZ0ZXJUeXBlVXBkYXRlcyhub2Rlc1dpdGhVcGRhdGVkVHlwZXMpIHsK
ICAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBhc3luY2hyb25vdXMgY2FsbCwgd2Ug
Y291bGQgaGF2ZSBiZWVuIGRlYWN0aXZhdGVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24g
aXMgY2FsbGVkLgogICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBhbGxOb2Rlc0luUmFuZ2UuZm9yRWFjaCh0aGlz
Ll9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGUsIHRoaXMpOworICAgICAgICAgICAgbm9kZXNX
aXRoVXBkYXRlZFR5cGVzLmZvckVhY2godGhpcy5faW5zZXJ0VHlwZVRva2VuLCB0aGlzKTsKIAog
ICAgICAgICAgICAgdmFyIHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7CiAgICAg
ICAgICAgICB2YXIgdGltZW91dFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heCg3NTAwLCB0b3RhbFRp
bWUpLCA4ICogdG90YWxUaW1lKTsKQEAgLTg2LDQ3ICs4NiwzNSBAQCBXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfaW5zZXJ0
VHlwZVRva2Vuc0ZvckVhY2hOb2RlOiBmdW5jdGlvbihub2RlKQorICAgIF9pbnNlcnRUeXBlVG9r
ZW46IGZ1bmN0aW9uKG5vZGUpCiAgICAgewotICAgICAgICB2YXIgc2NyaXB0U3ludGF4VHJlZSA9
IHRoaXMuX3NjcmlwdC5fc2NyaXB0U3ludGF4VHJlZTsKLQotICAgICAgICBzd2l0Y2ggKG5vZGUu
dHlwZSkgewotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uOgotICAgICAgICAgICAgZm9y
ICh2YXIgcGFyYW0gb2Ygbm9kZS5wYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcmFt
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzICYmIHBh
cmFtLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMu
X2luc2VydFRva2VuKHBhcmFtLnJhbmdlWzBdLCBwYXJhbSwgZmFsc2UsIFdlYkluc3BlY3Rvci5U
eXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgcGFyYW0ubmFtZSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAocGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9rZW4pCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShwYXJhbS5hdHRhY2ht
ZW50cy50eXBlcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGEgZnVuY3Rp
b24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24ndCBzaG93
IGEgcmV0dXJuIHR5cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4KLSAgICAg
ICAgICAgIHZhciBmdW5jdGlvblJldHVyblR5cGUgPSBub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5
cGVzOwotICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gfHwgIWZ1
bmN0aW9uUmV0dXJuVHlwZSB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlLmlzVmFsaWQpCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChzY3JpcHRTeW50YXhUcmVlLmNvbnRh
aW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5KSB8fCAhV2ViSW5zcGVjdG9yLlR5
cGVTZXQuZnJvbVBheWxvYWQoZnVuY3Rpb25SZXR1cm5UeXBlKS5pc0NvbnRhaW5lZEluKFdlYklu
c3BlY3Rvci5UeXBlU2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkgewotICAgICAgICAgICAgICAgIHZh
ciBmdW5jdGlvbk5hbWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdl
dHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLCB0cnVlLCBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5h
bWUpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobm9kZS50eXBlID09PSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBp
ZiAoIW5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgbm9kZS5hdHRhY2htZW50cy50eXBl
cyAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCisgICAgICAgICAgICAgICAgdGhp
cy5faW5zZXJ0VG9rZW4obm9kZS5yYW5nZVswXSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5U
eXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5WYXJpYWJsZSwgbm9kZS5uYW1lKTsKIAogICAgICAgICAg
ICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4pCi0gICAgICAgICAgICAgICAgbm9k
ZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUobm9kZS5hdHRhY2htZW50cy5yZXR1cm5U
eXBlcyk7CisgICAgICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRh
dGUobm9kZS5hdHRhY2htZW50cy50eXBlcyk7CiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVj
bGFyYXRvcjoKLSAgICAgICAgICAgIHZhciBpZGVudGlmaWVycyA9IHNjcmlwdFN5bnRheFRyZWUu
Z2F0aGVySWRlbnRpZmllcnNJblZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7Ci0gICAgICAgICAg
ICBmb3IgKGlkZW50aWZpZXIgb2YgaWRlbnRpZmllcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWlkZW50aWZpZXIuYXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgaWRlbnRpZmllci5hdHRhY2ht
ZW50cy50eXBlcyAmJiBpZGVudGlmaWVyLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2VuKGlkZW50aWZpZXIucmFuZ2VbMF0sIGlk
ZW50aWZpZXIsIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuVmFy
aWFibGUsIGlkZW50aWZpZXIubmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmF0dGFjaG1lbnRzLl9fdHlwZVRva2Vu
KQotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmF0dGFjaG1lbnRzLl9fdHlwZVRva2Vu
LnVwZGF0ZShpZGVudGlmaWVyLmF0dGFjaG1lbnRzLnR5cGVzKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgY29uc29sZS5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uIHx8IG5vZGUudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uKTsK
KworICAgICAgICB2YXIgZnVuY3Rpb25SZXR1cm5UeXBlID0gbm9kZS5hdHRhY2htZW50cy5yZXR1
cm5UeXBlczsKKyAgICAgICAgaWYgKCFmdW5jdGlvblJldHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0
dXJuVHlwZS5pc1ZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgLy8gSWYgYSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHJl
dHVybiBzdGF0ZW1lbnQgd2l0aCBhbiBhcmd1bWVudCAoaS5lLCAicmV0dXJuIHg7IiBpbnN0ZWFk
IG9mICJyZXR1cm47IikgCisgICAgICAgIC8vIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBl
IHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgIHZhciBzY3JpcHRT
eW50YXhUcmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOworICAgICAgICBpZiAo
IW5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgKHNjcmlwdFN5bnRheFRyZWUuY29udGFp
bnNOb25FbXB0eVJldHVyblN0YXRlbWVudChub2RlLmJvZHkpIHx8ICFXZWJJbnNwZWN0b3IuVHlw
ZVNldC5mcm9tUGF5bG9hZChmdW5jdGlvblJldHVyblR5cGUpLmlzQ29udGFpbmVkSW4oV2ViSW5z
cGVjdG9yLlR5cGVTZXQuVHlwZUJpdC5VbmRlZmluZWQpKSkgeworICAgICAgICAgICAgdmFyIGZ1
bmN0aW9uTmFtZSA9IG5vZGUuaWQgPyBub2RlLmlkLm5hbWUgOiBudWxsOworICAgICAgICAgICAg
dmFyIG9mZnNldCA9IG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUuZ2V0dGVyT3JTZXR0ZXJS
YW5nZVswXSA6IG5vZGUucmFuZ2VbMF07CisgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihv
ZmZzZXQsIG5vZGUsIHRydWUsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5S
ZXR1cm5TdGF0ZW1lbnQsIGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAo
bm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbikKKyAgICAgICAgICAgIG5vZGUuYXR0YWNobWVu
dHMuX190eXBlVG9rZW4udXBkYXRlKG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMpOwogICAg
IH0sCiAKICAgICBfaW5zZXJ0VG9rZW46IGZ1bmN0aW9uKG9yaWdpbmFsT2Zmc2V0LCBub2RlLCBz
aG91bGRUcmFuc2xhdGVPZmZzZXRUb0FmdGVyUGFyYW1ldGVyTGlzdCwgdHlwZVRva2VuVGl0bGVU
eXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1lKQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRy
ZWUuanMJKHJldmlzaW9uIDE4MDkyNCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYs
MTIgKzIxNiwxNCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUgCiAg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1
bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgICAgICAgICBm
b3IgKHZhciBwYXJhbSBvZiBub2RlLnBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBhbGxS
ZXF1ZXN0cy5wdXNoKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRl
c2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZUlEOiBzb3VyY2VJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpdm90OiBwYXJhbS5y
YW5nZVswXQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYWxs
UmVxdWVzdE5vZGVzLnB1c2gocGFyYW0pOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ZGVudGlmaWVyIG9mIHRoaXMuX2dhdGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbihwYXJhbSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IGlkZW50aWZpZXIucmFuZ2VbMF0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgYWxs
UmVxdWVzdE5vZGVzLnB1c2goaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKQEAg
LTIzMiw3ICsyMzQsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUg
CiAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gobm9kZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRvcjoKLSAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpZGVudGlmaWVyIG9mIHRoaXMuZ2F0aGVySWRlbnRpZmllcnNJblZhcmlhYmxlRGVjbGFyYXRp
b24obm9kZSkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpZGVudGlmaWVyIG9mIHRoaXMu
X2dhdGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbihub2RlLmlkKSkgewogICAgICAgICAgICAg
ICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJ
bmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKQEAgLTI2MiwxMyArMjY0LDE2IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgICAgICAgICAgICAg
bm9kZS5hdHRhY2htZW50cy50eXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKGFsbFJlcXVl
c3ROb2Rlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UnVudGltZVR5
cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVUeXBlcyk7CiAgICAg
fSwKIAotICAgIGdhdGhlcklkZW50aWZpZXJzSW5WYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlv
biAobm9kZSkgeworICAgIC8vIFByaXZhdGUKKworICAgIF9nYXRoZXJJZGVudGlmaWVyc0luRGVj
bGFyYXRpb246IGZ1bmN0aW9uKG5vZGUpCisgICAgewogICAgICAgICBmdW5jdGlvbiBnYXRoZXJJ
ZGVudGlmaWVycyhub2RlKSAKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChub2RlLnR5
cGUpIHsKQEAgLTI5MSwxNiArMjk2LDE1IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
LnByb3RvdHlwZSAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaWRlbnRpZmllcnM7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFsc2UsICJVbmV4ZWNwdGVkIG5vZGUgdHlwZSBpbiB2
YXJpYWJsZSBkZWNsYXJhdG9yOiAiICsgbm9kZS50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIG5vZGUgdHlwZSBpbiB2YXJpYWJsZSBk
ZWNsYXJhdG9yOiAiICsgbm9kZS50eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtd
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgY29uc29sZS5hc3NlcnQobm9k
ZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJs
ZURlY2xhcmF0b3IpOwotICAgICAgICByZXR1cm4gZ2F0aGVySWRlbnRpZmllcnMobm9kZS5pZCk7
Ci0gICAgfSwKKyAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyIHx8IG5vZGUudHlwZSA9PT0g
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0UGF0dGVybiB8fCBu
b2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFycmF5
UGF0dGVybik7CiAKLSAgICAvLyBQcml2YXRlCisgICAgICAgIHJldHVybiBnYXRoZXJJZGVudGlm
aWVycyhub2RlKTsKKyAgICB9LAogCiAgICAgX2RlZmF1bHRQYXJzZXJTdGF0ZTogZnVuY3Rpb24o
KSAKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248120</attachid>
            <date>2015-03-06 17:49:24 -0800</date>
            <delta_ts>2015-03-07 10:12:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>10855</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTk1KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTAzLTA2ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBEZXN0cnVjdHVyaW5nIGZ1bmN0aW9uIGFyZ3VtZW50cyBzaG91
bGQgc2hvdyB0eXBlIGluZm9ybWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDIyMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBKU0Mgc3VwcG9ydHMgYSBmdW5jdGlvbidzIGZvcm1hbCBwYXJhbWV0
ZXIgYmVpbmcgYSBkZXN0cnVjdHVyaW5nIHBhdHRlcm4sIAorICAgICAgICBhbmQgc28gc2hvdWxk
IHRoZSB0eXBlIHByb2ZpbGVyIGluIHRoZSBJbnNwZWN0b3IuIFRoaXMgd2FzIGp1c3QgYW4gb3Zl
cnNpZ2h0IAorICAgICAgICBub3QgaGF2ZSB0aGlzIGluIGJ1ZyAxNDEyMTUuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhbHNvIGRvZXMgYSBiaXQgb2YgcmVmYWN0b3JpbmcgdG8gbm90IGhhdmUgZHVw
bGljYXRlIGNvZGUKKyAgICAgICAgdGhhdCB0cmF2ZXJzZXMgQVNUIG5vZGVzIGluIFR5cGVUb2tl
bkFubm90YXRvciBhbmQgU2NyaXB0U3ludGF4VHJlZS4KKyAgICAgICAgQmVmb3JlLCBib3RoIHRo
ZXNlIGNsYXNzZXMgd2VyZSByZXNwb25zaWJsZSBmb3IgdHJhdmVyc2luZyB0aGUgQVNUCisgICAg
ICAgIGluIGFuIGlkZW50aWNhbCB3YXksIHRoaXMgaXMgYmFkLiBOb3csIFNjcmlwdFN5bnRheFRy
ZWUgY29udGFpbnMgdGhlCisgICAgICAgIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiBob3cg
dGhlIEFTVCBzaG91bGQgYmUgdHJhdmVyc2VkIGFuZCB3aGljaAorICAgICAgICBBU1Qgbm9kZXMg
c2hvdWxkIGJlIGNvbGxlY3RlZCBmb3IgdHlwZSBwcm9maWxpbmcuIFNjcmlwdFN5bnRheFRyZWUg
d2lsbAorICAgICAgICBwYXNzIHRoaXMgaW5mb3JtYXRpb24gYmFjayB0byBUeXBlVG9rZW5Bbm5v
dGF0b3IuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFu
bm90YXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJv
dG90eXBlLl9pbnNlcnRUeXBlVG9rZW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUuX2luc2VydFR5cGVUb2tlbnNGb3JFYWNoTm9kZSk6IERlbGV0
ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS4pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLnVwZGF0ZVR5cGVz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fZ2F0
aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLnByb3RvdHlwZS5nYXRoZXJJZGVudGlmaWVyc0luVmFyaWFibGVEZWNsYXJh
dGlvbik6IERlbGV0ZWQuCisKIDIwMTUtMDMtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZG9wdCBPYmplY3QgTGl0ZXJh
bCBNZXRob2QgUHJvcGVydHkgU3ludGF4CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRv
a2VuQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAxODExOTQpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDEyICs2MiwxMiBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3Rh
dG9yLnByb3RvdHlwCiAKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAgICAg
ICAgIHZhciBhbGxOb2Rlc0luUmFuZ2UgPSBzY3JpcHRTeW50YXhUcmVlLmZpbHRlckJ5UmFuZ2Uo
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgIHNjcmlwdFN5bnRheFRyZWUudXBkYXRl
VHlwZXMoYWxsTm9kZXNJblJhbmdlLCBmdW5jdGlvbiBhZnRlclR5cGVVcGRhdGVzKCkgeworICAg
ICAgICBzY3JpcHRTeW50YXhUcmVlLnVwZGF0ZVR5cGVzKGFsbE5vZGVzSW5SYW5nZSwgZnVuY3Rp
b24gYWZ0ZXJUeXBlVXBkYXRlcyhub2Rlc1dpdGhVcGRhdGVkVHlwZXMpIHsKICAgICAgICAgICAg
IC8vIEJlY2F1c2UgdGhpcyBpcyBhbiBhc3luY2hyb25vdXMgY2FsbCwgd2UgY291bGQgaGF2ZSBi
ZWVuIGRlYWN0aXZhdGVkIGJlZm9yZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLgog
ICAgICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgICAgICBhbGxOb2Rlc0luUmFuZ2UuZm9yRWFjaCh0aGlzLl9pbnNlcnRUeXBl
VG9rZW5zRm9yRWFjaE5vZGUsIHRoaXMpOworICAgICAgICAgICAgbm9kZXNXaXRoVXBkYXRlZFR5
cGVzLmZvckVhY2godGhpcy5faW5zZXJ0VHlwZVRva2VuLCB0aGlzKTsKIAogICAgICAgICAgICAg
dmFyIHRvdGFsVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICB2YXIg
dGltZW91dFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heCg3NTAwLCB0b3RhbFRpbWUpLCA4ICogdG90
YWxUaW1lKTsKQEAgLTg2LDQ3ICs4NiwzNSBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3Rh
dG9yLnByb3RvdHlwCiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfaW5zZXJ0VHlwZVRva2Vuc0Zv
ckVhY2hOb2RlOiBmdW5jdGlvbihub2RlKQorICAgIF9pbnNlcnRUeXBlVG9rZW46IGZ1bmN0aW9u
KG5vZGUpCiAgICAgewotICAgICAgICB2YXIgc2NyaXB0U3ludGF4VHJlZSA9IHRoaXMuX3Njcmlw
dC5fc2NyaXB0U3ludGF4VHJlZTsKLQotICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewotICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9u
RGVjbGFyYXRpb246Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uOgotICAgICAgICAgICAgZm9yICh2YXIgcGFyYW0g
b2Ygbm9kZS5wYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcmFtLmF0dGFjaG1lbnRz
Ll9fdHlwZVRva2VuICYmIHBhcmFtLmF0dGFjaG1lbnRzLnR5cGVzICYmIHBhcmFtLmF0dGFjaG1l
bnRzLnR5cGVzLmlzVmFsaWQpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRva2Vu
KHBhcmFtLnJhbmdlWzBdLCBwYXJhbSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3
LlRpdGxlVHlwZS5WYXJpYWJsZSwgcGFyYW0ubmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
cGFyYW0uYXR0YWNobWVudHMuX190eXBlVG9rZW4pCi0gICAgICAgICAgICAgICAgICAgIHBhcmFt
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShwYXJhbS5hdHRhY2htZW50cy50eXBlcyk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGEgZnVuY3Rpb24gZG9lcyBub3Qg
aGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gdHlwZSwgdGhlbiBkb24ndCBzaG93IGEgcmV0dXJuIHR5
cGUgdW5sZXNzIHdlIHRoaW5rIGl0J3MgYSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgICAgIHZhciBm
dW5jdGlvblJldHVyblR5cGUgPSBub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5cGVzOwotICAgICAg
ICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gfHwgIWZ1bmN0aW9uUmV0dXJu
VHlwZSB8fCAhZnVuY3Rpb25SZXR1cm5UeXBlLmlzVmFsaWQpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIGlmIChzY3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlS
ZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5KSB8fCAhV2ViSW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBh
eWxvYWQoZnVuY3Rpb25SZXR1cm5UeXBlKS5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBl
U2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkgewotICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5h
bWUgPSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9pbnNlcnRUb2tlbihub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0dGVy
UmFuZ2VbMF0gOiBub2RlLnJhbmdlWzBdLCBub2RlLCB0cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVtZW50LCBmdW5jdGlvbk5hbWUpOwotICAgICAg
ICAgICAgfQorICAgICAgICBpZiAobm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBpZiAoIW5vZGUuYXR0
YWNobWVudHMuX190eXBlVG9rZW4gJiYgbm9kZS5hdHRhY2htZW50cy50eXBlcyAmJiBub2RlLmF0
dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCisgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9r
ZW4obm9kZS5yYW5nZVswXSwgbm9kZSwgZmFsc2UsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3
LlRpdGxlVHlwZS5WYXJpYWJsZSwgbm9kZS5uYW1lKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUu
YXR0YWNobWVudHMuX190eXBlVG9rZW4pCi0gICAgICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50
cy5fX3R5cGVUb2tlbi51cGRhdGUobm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlcyk7CisgICAg
ICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUobm9kZS5hdHRh
Y2htZW50cy50eXBlcyk7CiAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRvcjoKLSAg
ICAgICAgICAgIHZhciBpZGVudGlmaWVycyA9IHNjcmlwdFN5bnRheFRyZWUuZ2F0aGVySWRlbnRp
ZmllcnNJblZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7Ci0gICAgICAgICAgICBmb3IgKGlkZW50
aWZpZXIgb2YgaWRlbnRpZmllcnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlkZW50aWZpZXIu
YXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgaWRlbnRpZmllci5hdHRhY2htZW50cy50eXBlcyAm
JiBpZGVudGlmaWVyLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2luc2VydFRva2VuKGlkZW50aWZpZXIucmFuZ2VbMF0sIGlkZW50aWZpZXIsIGZh
bHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuVmFyaWFibGUsIGlkZW50
aWZpZXIubmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIGlmIChpZGVudGlmaWVyLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuKQotICAgICAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShpZGVu
dGlmaWVyLmF0dGFjaG1lbnRzLnR5cGVzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY29uc29s
ZS5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uIHx8IG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uKTsKKworICAgICAgICB2
YXIgZnVuY3Rpb25SZXR1cm5UeXBlID0gbm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlczsKKyAg
ICAgICAgaWYgKCFmdW5jdGlvblJldHVyblR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5pc1Zh
bGlkKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Ly8gSWYgYSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHJldHVybiBzdGF0ZW1l
bnQgd2l0aCBhbiBhcmd1bWVudCAoaS5lLCAicmV0dXJuIHg7IiBpbnN0ZWFkIG9mICJyZXR1cm47
IikgCisgICAgICAgIC8vIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0eXBlIHVubGVzcyB3ZSB0
aGluayBpdCdzIGEgY29uc3RydWN0b3IuCisgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVlID0g
dGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOworICAgICAgICBpZiAoIW5vZGUuYXR0YWNo
bWVudHMuX190eXBlVG9rZW4gJiYgKHNjcmlwdFN5bnRheFRyZWUuY29udGFpbnNOb25FbXB0eVJl
dHVyblN0YXRlbWVudChub2RlLmJvZHkpIHx8ICFXZWJJbnNwZWN0b3IuVHlwZVNldC5mcm9tUGF5
bG9hZChmdW5jdGlvblJldHVyblR5cGUpLmlzQ29udGFpbmVkSW4oV2ViSW5zcGVjdG9yLlR5cGVT
ZXQuVHlwZUJpdC5VbmRlZmluZWQpKSkgeworICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9
IG5vZGUuaWQgPyBub2RlLmlkLm5hbWUgOiBudWxsOworICAgICAgICAgICAgdmFyIG9mZnNldCA9
IG5vZGUuaXNHZXR0ZXJPclNldHRlciA/IG5vZGUuZ2V0dGVyT3JTZXR0ZXJSYW5nZVswXSA6IG5v
ZGUucmFuZ2VbMF07CisgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tlbihvZmZzZXQsIG5vZGUs
IHRydWUsIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5WaWV3LlRpdGxlVHlwZS5SZXR1cm5TdGF0ZW1l
bnQsIGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS5hdHRhY2ht
ZW50cy5fX3R5cGVUb2tlbikKKyAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9r
ZW4udXBkYXRlKG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMpOwogICAgIH0sCiAKICAgICBf
aW5zZXJ0VG9rZW46IGZ1bmN0aW9uKG9yaWdpbmFsT2Zmc2V0LCBub2RlLCBzaG91bGRUcmFuc2xh
dGVPZmZzZXRUb0FmdGVyUGFyYW1ldGVyTGlzdCwgdHlwZVRva2VuVGl0bGVUeXBlLCBmdW5jdGlv
bk9yVmFyaWFibGVOYW1lKQpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMJKHJldmlz
aW9uIDE4MTE5NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsMTIgKzIxNiwxNCBA
QCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUgCiAgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFy
YXRpb246CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICAgICAgICAgICBmb3IgKHZhciBwYXJh
bSBvZiBub2RlLnBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNo
KHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3Iu
Tm9ybWFsRXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlELAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBdCi0gICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChwYXJh
bSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5fZ2F0
aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uKHBhcmFtKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5Ob3JtYWxFeHByZXNzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
dm90OiBpZGVudGlmaWVyLnJhbmdlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3ROb2Rlcy5wdXNoKGlkZW50aWZpZXIpOwor
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgYWxsUmVxdWVzdHMucHVzaCh7CkBAIC0yMzIsNyArMjM0LDcgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAgICAgICAgIGFsbFJlcXVlc3ROb2Rl
cy5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaWRlbnRpZmllciBvZiB0aGlzLmdhdGhlcklkZW50
aWZpZXJzSW5WYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaWRlbnRpZmllciBvZiB0aGlzLl9nYXRoZXJJZGVudGlmaWVyc0luRGVjbGFyYXRpb24o
bm9kZS5pZCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVzaCh7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLk5vcm1hbEV4
cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRCwKQEAgLTI2MiwxMyAr
MjY0LDE2IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy50eXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIGNh
bGxiYWNrKGFsbFJlcXVlc3ROb2Rlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBSdW50aW1lQWdl
bnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5k
bGVUeXBlcyk7CiAgICAgfSwKIAotICAgIGdhdGhlcklkZW50aWZpZXJzSW5WYXJpYWJsZURlY2xh
cmF0aW9uOiBmdW5jdGlvbiAobm9kZSkgeworICAgIC8vIFByaXZhdGUKKworICAgIF9nYXRoZXJJ
ZGVudGlmaWVyc0luRGVjbGFyYXRpb246IGZ1bmN0aW9uKG5vZGUpCisgICAgewogICAgICAgICBm
dW5jdGlvbiBnYXRoZXJJZGVudGlmaWVycyhub2RlKSAKICAgICAgICAgewogICAgICAgICAgICAg
c3dpdGNoIChub2RlLnR5cGUpIHsKQEAgLTI5MSwxNiArMjk2LDE1IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcnM7CiAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFsc2UsICJVbmV4ZWNwdGVk
IG5vZGUgdHlwZSBpbiB2YXJpYWJsZSBkZWNsYXJhdG9yOiAiICsgbm9kZS50eXBlKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIG5vZGUgdHlw
ZSBpbiB2YXJpYWJsZSBkZWNsYXJhdG9yOiAiICsgbm9kZS50eXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgY29u
c29sZS5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IpOwotICAgICAgICByZXR1cm4gZ2F0aGVySWRlbnRp
ZmllcnMobm9kZS5pZCk7Ci0gICAgfSwKKyAgICAgICAgY29uc29sZS5hc3NlcnQobm9kZS50eXBl
ID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyIHx8
IG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2Jq
ZWN0UGF0dGVybiB8fCBub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkFycmF5UGF0dGVybik7CiAKLSAgICAvLyBQcml2YXRlCisgICAgICAgIHJldHVy
biBnYXRoZXJJZGVudGlmaWVycyhub2RlKTsKKyAgICB9LAogCiAgICAgX2RlZmF1bHRQYXJzZXJT
dGF0ZTogZnVuY3Rpb24oKSAKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248157</attachid>
            <date>2015-03-07 10:12:03 -0800</date>
            <delta_ts>2022-03-01 02:47:59 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>10856</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTk1KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTAzLTA2ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBEZXN0cnVjdHVyaW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgc2hv
dWxkIHNob3cgdHlwZSBpbmZvcm1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSlNDIHN1cHBvcnRzIGEgZnVuY3Rpb24ncyBmb3JtYWwgcGFyYW1l
dGVyIGJlaW5nIGEgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuLCAKKyAgICAgICAgYW5kIHNvIHNob3Vs
ZCB0aGUgdHlwZSBwcm9maWxlciBpbiB0aGUgSW5zcGVjdG9yLiBUaGlzIHdhcyBqdXN0IGFuIG92
ZXJzaWdodCAKKyAgICAgICAgbm90IGhhdmUgdGhpcyBpbiBidWcgMTQxMjE1LgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxzbyBkb2VzIGEgYml0IG9mIHJlZmFjdG9yaW5nIHRvIG5vdCBoYXZlIGR1
cGxpY2F0ZSBjb2RlCisgICAgICAgIHRoYXQgdHJhdmVyc2VzIEFTVCBub2RlcyBpbiBUeXBlVG9r
ZW5Bbm5vdGF0b3IgYW5kIFNjcmlwdFN5bnRheFRyZWUuCisgICAgICAgIEJlZm9yZSwgYm90aCB0
aGVzZSBjbGFzc2VzIHdlcmUgcmVzcG9uc2libGUgZm9yIHRyYXZlcnNpbmcgdGhlIEFTVAorICAg
ICAgICBpbiBhbiBpZGVudGljYWwgd2F5LCB0aGlzIGlzIGJhZC4gTm93LCBTY3JpcHRTeW50YXhU
cmVlIGNvbnRhaW5zIHRoZQorICAgICAgICBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gb2YgaG93
IHRoZSBBU1Qgc2hvdWxkIGJlIHRyYXZlcnNlZCBhbmQgd2hpY2gKKyAgICAgICAgQVNUIG5vZGVz
IHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHR5cGUgcHJvZmlsaW5nLiBTY3JpcHRTeW50YXhUcmVl
IHdpbGwKKyAgICAgICAgcGFzcyB0aGlzIGluZm9ybWF0aW9uIGJhY2sgdG8gVHlwZVRva2VuQW5u
b3RhdG9yLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5B
bm5vdGF0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnBy
b3RvdHlwZS5faW5zZXJ0VHlwZVRva2VuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGUpOiBEZWxl
dGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS51cGRhdGVUeXBl
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2dh
dGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5wcm90b3R5cGUuZ2F0aGVySWRlbnRpZmllcnNJblZhcmlhYmxlRGVjbGFy
YXRpb24pOiBEZWxldGVkLgorCiAyMDE1LTAzLTA2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRvcHQgT2JqZWN0IExpdGVy
YWwgTWV0aG9kIFByb3BlcnR5IFN5bnRheApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVU
b2tlbkFubm90YXRvci5qcwkocmV2aXNpb24gMTgxMTk0KQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MiwxMiArNjIsMTIgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90
YXRvci5wcm90b3R5cAogCiAgICAgICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAg
ICAgICB2YXIgYWxsTm9kZXNJblJhbmdlID0gc2NyaXB0U3ludGF4VHJlZS5maWx0ZXJCeVJhbmdl
KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAgICAgICBzY3JpcHRTeW50YXhUcmVlLnVwZGF0
ZVR5cGVzKGFsbE5vZGVzSW5SYW5nZSwgZnVuY3Rpb24gYWZ0ZXJUeXBlVXBkYXRlcygpIHsKKyAg
ICAgICAgc2NyaXB0U3ludGF4VHJlZS51cGRhdGVUeXBlcyhhbGxOb2Rlc0luUmFuZ2UsIGZ1bmN0
aW9uIGFmdGVyVHlwZVVwZGF0ZXMobm9kZXNXaXRoVXBkYXRlZFR5cGVzKSB7CiAgICAgICAgICAg
ICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGNhbGwsIHdlIGNvdWxkIGhhdmUg
YmVlbiBkZWFjdGl2YXRlZCBiZWZvcmUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZC4K
ICAgICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgYWxsTm9kZXNJblJhbmdlLmZvckVhY2godGhpcy5faW5zZXJ0VHlw
ZVRva2Vuc0ZvckVhY2hOb2RlLCB0aGlzKTsKKyAgICAgICAgICAgIG5vZGVzV2l0aFVwZGF0ZWRU
eXBlcy5mb3JFYWNoKHRoaXMuX2luc2VydFR5cGVUb2tlbiwgdGhpcyk7CiAKICAgICAgICAgICAg
IHZhciB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lOwogICAgICAgICAgICAgdmFy
IHRpbWVvdXRUaW1lID0gTWF0aC5taW4oTWF0aC5tYXgoNzUwMCwgdG90YWxUaW1lKSwgOCAqIHRv
dGFsVGltZSk7CkBAIC04Niw0NyArODYsMzUgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90
YXRvci5wcm90b3R5cAogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2luc2VydFR5cGVUb2tlbnNG
b3JFYWNoTm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICBfaW5zZXJ0VHlwZVRva2VuOiBmdW5jdGlv
bihub2RlKQogICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdFN5bnRheFRyZWUgPSB0aGlzLl9zY3Jp
cHQuX3NjcmlwdFN5bnRheFRyZWU7Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKLSAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlv
bkRlY2xhcmF0aW9uOgotICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKLSAgICAgICAgICAgIGZvciAodmFyIHBhcmFt
IG9mIG5vZGUucGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJhbS5hdHRhY2htZW50
cy5fX3R5cGVUb2tlbiAmJiBwYXJhbS5hdHRhY2htZW50cy50eXBlcyAmJiBwYXJhbS5hdHRhY2ht
ZW50cy50eXBlcy5pc1ZhbGlkKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUb2tl
bihwYXJhbS5yYW5nZVswXSwgcGFyYW0sIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5UaXRsZVR5cGUuVmFyaWFibGUsIHBhcmFtLm5hbWUpOwotCi0gICAgICAgICAgICAgICAgaWYg
KHBhcmFtLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuKQotICAgICAgICAgICAgICAgICAgICBwYXJh
bS5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUocGFyYW0uYXR0YWNobWVudHMudHlwZXMp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBhIGZ1bmN0aW9uIGRvZXMgbm90
IGhhdmUgYW4gZXhwbGljaXQgcmV0dXJuIHR5cGUsIHRoZW4gZG9uJ3Qgc2hvdyBhIHJldHVybiB0
eXBlIHVubGVzcyB3ZSB0aGluayBpdCdzIGEgY29uc3RydWN0b3IuCi0gICAgICAgICAgICB2YXIg
ZnVuY3Rpb25SZXR1cm5UeXBlID0gbm9kZS5hdHRhY2htZW50cy5yZXR1cm5UeXBlczsKLSAgICAg
ICAgICAgIGlmIChub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuIHx8ICFmdW5jdGlvblJldHVy
blR5cGUgfHwgIWZ1bmN0aW9uUmV0dXJuVHlwZS5pc1ZhbGlkKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICBpZiAoc2NyaXB0U3ludGF4VHJlZS5jb250YWluc05vbkVtcHR5
UmV0dXJuU3RhdGVtZW50KG5vZGUuYm9keSkgfHwgIVdlYkluc3BlY3Rvci5UeXBlU2V0LmZyb21Q
YXlsb2FkKGZ1bmN0aW9uUmV0dXJuVHlwZSkuaXNDb250YWluZWRJbihXZWJJbnNwZWN0b3IuVHlw
ZVNldC5UeXBlQml0LlVuZGVmaW5lZCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25O
YW1lID0gbm9kZS5pZCA/IG5vZGUuaWQubmFtZSA6IG51bGw7Ci0gICAgICAgICAgICAgICAgdGhp
cy5faW5zZXJ0VG9rZW4obm9kZS5pc0dldHRlck9yU2V0dGVyID8gbm9kZS5nZXR0ZXJPclNldHRl
clJhbmdlWzBdIDogbm9kZS5yYW5nZVswXSwgbm9kZSwgdHJ1ZSwgV2ViSW5zcGVjdG9yLlR5cGVU
b2tlblZpZXcuVGl0bGVUeXBlLlJldHVyblN0YXRlbWVudCwgZnVuY3Rpb25OYW1lKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllcikgeworICAgICAgICAgICAgaWYgKCFub2RlLmF0
dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIG5vZGUuYXR0YWNobWVudHMudHlwZXMgJiYgbm9kZS5h
dHRhY2htZW50cy50eXBlcy5pc1ZhbGlkKQorICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydFRv
a2VuKG5vZGUucmFuZ2VbMF0sIG5vZGUsIGZhbHNlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5UaXRsZVR5cGUuVmFyaWFibGUsIG5vZGUubmFtZSk7CiAKICAgICAgICAgICAgIGlmIChub2Rl
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuKQotICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVu
dHMuX190eXBlVG9rZW4udXBkYXRlKG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMpOworICAg
ICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBkYXRlKG5vZGUuYXR0
YWNobWVudHMudHlwZXMpOwogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6Ci0g
ICAgICAgICAgICB2YXIgaWRlbnRpZmllcnMgPSBzY3JpcHRTeW50YXhUcmVlLmdhdGhlcklkZW50
aWZpZXJzSW5WYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwotICAgICAgICAgICAgZm9yIChpZGVu
dGlmaWVyIG9mIGlkZW50aWZpZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpZGVudGlmaWVy
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuICYmIGlkZW50aWZpZXIuYXR0YWNobWVudHMudHlwZXMg
JiYgaWRlbnRpZmllci5hdHRhY2htZW50cy50eXBlcy5pc1ZhbGlkKQotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9pbnNlcnRUb2tlbihpZGVudGlmaWVyLnJhbmdlWzBdLCBpZGVudGlmaWVyLCBm
YWxzZSwgV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcuVGl0bGVUeXBlLlZhcmlhYmxlLCBpZGVu
dGlmaWVyLm5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBpZiAoaWRlbnRpZmllci5hdHRhY2htZW50cy5fX3R5cGVUb2tlbikKLSAgICAgICAg
ICAgICAgICAgICAgaWRlbnRpZmllci5hdHRhY2htZW50cy5fX3R5cGVUb2tlbi51cGRhdGUoaWRl
bnRpZmllci5hdHRhY2htZW50cy50eXBlcyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbiB8fCBub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbik7CisKKyAgICAgICAg
dmFyIGZ1bmN0aW9uUmV0dXJuVHlwZSA9IG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXM7Cisg
ICAgICAgIGlmICghZnVuY3Rpb25SZXR1cm5UeXBlIHx8ICFmdW5jdGlvblJldHVyblR5cGUuaXNW
YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IC8vIElmIGEgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhbiBleHBsaWNpdCByZXR1cm4gc3RhdGVt
ZW50IHdpdGggYW4gYXJndW1lbnQgKGkuZSwgInJldHVybiB4OyIgaW5zdGVhZCBvZiAicmV0dXJu
OyIpIAorICAgICAgICAvLyB0aGVuIGRvbid0IHNob3cgYSByZXR1cm4gdHlwZSB1bmxlc3Mgd2Ug
dGhpbmsgaXQncyBhIGNvbnN0cnVjdG9yLgorICAgICAgICB2YXIgc2NyaXB0U3ludGF4VHJlZSA9
IHRoaXMuX3NjcmlwdC5fc2NyaXB0U3ludGF4VHJlZTsKKyAgICAgICAgaWYgKCFub2RlLmF0dGFj
aG1lbnRzLl9fdHlwZVRva2VuICYmIChzY3JpcHRTeW50YXhUcmVlLmNvbnRhaW5zTm9uRW1wdHlS
ZXR1cm5TdGF0ZW1lbnQobm9kZS5ib2R5KSB8fCAhV2ViSW5zcGVjdG9yLlR5cGVTZXQuZnJvbVBh
eWxvYWQoZnVuY3Rpb25SZXR1cm5UeXBlKS5pc0NvbnRhaW5lZEluKFdlYkluc3BlY3Rvci5UeXBl
U2V0LlR5cGVCaXQuVW5kZWZpbmVkKSkpIHsKKyAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUg
PSBub2RlLmlkID8gbm9kZS5pZC5uYW1lIDogbnVsbDsKKyAgICAgICAgICAgIHZhciBvZmZzZXQg
PSBub2RlLmlzR2V0dGVyT3JTZXR0ZXIgPyBub2RlLmdldHRlck9yU2V0dGVyUmFuZ2VbMF0gOiBu
b2RlLnJhbmdlWzBdOworICAgICAgICAgICAgdGhpcy5faW5zZXJ0VG9rZW4ob2Zmc2V0LCBub2Rl
LCB0cnVlLCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldy5UaXRsZVR5cGUuUmV0dXJuU3RhdGVt
ZW50LCBmdW5jdGlvbk5hbWUpOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUuYXR0YWNo
bWVudHMuX190eXBlVG9rZW4pCisgICAgICAgICAgICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRv
a2VuLnVwZGF0ZShub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5cGVzKTsKICAgICB9LAogCiAgICAg
X2luc2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNldCwgbm9kZSwgc2hvdWxkVHJhbnNs
YXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVUb2tlblRpdGxlVHlwZSwgZnVuY3Rp
b25PclZhcmlhYmxlTmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCShyZXZp
c2lvbiAxODExOTQpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvU2NyaXB0U3ludGF4VHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjE2LDEyICsyMTYsMTQg
QEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlIAogICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xh
cmF0aW9uOgogICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgcGFy
YW0gb2Ygbm9kZS5wYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVz
aCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9y
Lk5vcm1hbEV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpdm90OiBwYXJhbS5yYW5nZVswXQotICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gocGFy
YW0pOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpZGVudGlmaWVyIG9mIHRoaXMuX2dh
dGhlcklkZW50aWZpZXJzSW5EZWNsYXJhdGlvbihwYXJhbSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXZvdDogaWRlbnRpZmllci5yYW5nZVswXQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChpZGVudGlmaWVyKTsK
KyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIGFsbFJlcXVlc3RzLnB1c2goewpAQCAtMjMyLDcgKzIzNCw3IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSAKICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9k
ZXMucHVzaChub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9y
OgotICAgICAgICAgICAgICAgIGZvciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5nYXRoZXJJZGVu
dGlmaWVyc0luVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSkgeworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGlkZW50aWZpZXIgb2YgdGhpcy5fZ2F0aGVySWRlbnRpZmllcnNJbkRlY2xhcmF0aW9u
KG5vZGUuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goewogICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5Ob3JtYWxF
eHByZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQsCkBAIC0yNjIsMTMg
KzI2NCwxNiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUgCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMudHlwZXMgPSB0eXBlSW5mb3JtYXRpb247
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICBj
YWxsYmFjayhhbGxSZXF1ZXN0Tm9kZXMpOwogICAgICAgICB9CiAKICAgICAgICAgUnVudGltZUFn
ZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1ZXN0cywgaGFu
ZGxlVHlwZXMpOwogICAgIH0sCiAKLSAgICBnYXRoZXJJZGVudGlmaWVyc0luVmFyaWFibGVEZWNs
YXJhdGlvbjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZ2F0aGVy
SWRlbnRpZmllcnNJbkRlY2xhcmF0aW9uOiBmdW5jdGlvbihub2RlKQorICAgIHsKICAgICAgICAg
ZnVuY3Rpb24gZ2F0aGVySWRlbnRpZmllcnMobm9kZSkgCiAgICAgICAgIHsKICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS50eXBlKSB7CkBAIC0yOTEsMTYgKzI5NiwxNSBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUgCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJzOwogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZhbHNlLCAiVW5leGVjcHRl
ZCBub2RlIHR5cGUgaW4gdmFyaWFibGUgZGVjbGFyYXRvcjogIiArIG5vZGUudHlwZSk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBub2RlIHR5
cGUgaW4gdmFyaWFibGUgZGVjbGFyYXRvcjogIiArIG5vZGUudHlwZSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIGdhdGhlcklkZW50
aWZpZXJzKG5vZGUuaWQpOwotICAgIH0sCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5vZGUudHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllciB8
fCBub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk9i
amVjdFBhdHRlcm4gfHwgbm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5BcnJheVBhdHRlcm4pOwogCi0gICAgLy8gUHJpdmF0ZQorICAgICAgICByZXR1
cm4gZ2F0aGVySWRlbnRpZmllcnMobm9kZSk7CisgICAgfSwKIAogICAgIF9kZWZhdWx0UGFyc2Vy
U3RhdGU6IGZ1bmN0aW9uKCkgCiAgICAgewo=
</data>
<flag name="review"
          id="273075"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>