<?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>161159</bug_id>
          
          <creation_ts>2016-08-24 13:33:06 -0700</creation_ts>
          <short_desc>Web Inspector: Minification detection produces false positives for small resources</short_desc>
          <delta_ts>2016-09-10 13:08:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit 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="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</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>1222802</commentid>
    <comment_count>0</comment_count>
      <attachid>286885</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-24 13:33:06 -0700</bug_when>
    <thetext>Created attachment 286885
[HTML] Reduction

Steps:
1. Open attached HTML file.
2. Open Inspector in Resources tab.
3. Select the only available CSS resource.

Expected:
&quot;{}&quot; icon is black (inactive), pretty printing is turned off.

Actual:
&quot;{}&quot; icon is blue (active), pretty printing is turned on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222803</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-08-24 13:33:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/27995306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222889</commentid>
    <comment_count>2</comment_count>
      <attachid>286912</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-24 16:55:30 -0700</bug_when>
    <thetext>Created attachment 286912
WIP

Setting r- since I don&apos;t have any tests yet.

I&apos;d like to write unit tests for _isLikelyMinified.
_isLikelyMinified is defined in a view (Views/SourceCodeTextEditor.js).
I can make this method static and move it out of a Views/SourceCodeTextEditor.js.
Should I do it, and if so, where should I move it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222979</commentid>
    <comment_count>3</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-24 22:44:18 -0700</bug_when>
    <thetext>*** Bug 153726 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223284</commentid>
    <comment_count>4</comment_count>
      <attachid>287032</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 15:29:38 -0700</bug_when>
    <thetext>Created attachment 287032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223285</commentid>
    <comment_count>5</comment_count>
      <attachid>287032</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 15:35:57 -0700</bug_when>
    <thetext>Comment on attachment 287032
Patch

Forgot to include actual test files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223286</commentid>
    <comment_count>6</comment_count>
      <attachid>287033</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 15:40:14 -0700</bug_when>
    <thetext>Created attachment 287033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223287</commentid>
    <comment_count>7</comment_count>
      <attachid>287033</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 15:41:26 -0700</bug_when>
    <thetext>Comment on attachment 287033
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1410
&gt; +    let i = 0;

I moved this out of the for loop since it&apos;s used after the loop.

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1429
&gt; +    ratio = whiteSpaceScore / i;

I added this line. Without it, every resource with less than 500 characters was considered minified :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223291</commentid>
    <comment_count>8</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 15:45:39 -0700</bug_when>
    <thetext>I also made this webpage to test minification detection as I type:
http://nv.github.io/webkit-inspector-bugs/minification-detection/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223323</commentid>
    <comment_count>9</comment_count>
      <attachid>287033</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-08-25 16:40:21 -0700</bug_when>
    <thetext>Comment on attachment 287033
Patch

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

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:10
&gt; +    let suite = InspectorTest.createAsyncSuite(&quot;isLikelyMinified&quot;);

Please call the suite &quot;Formatting.isLikelyMinified&quot;

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:13
&gt; +        name: &quot;Not minified: small resource&quot;,

See comment below

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:15
&gt; +            InspectorTest.expectThat(!isResourceLikelyMinified(&quot;var x = 42;\nvar y = 24;\n&quot;), &quot;Not minified&quot;);

See comment below

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:95
&gt; +        name: &quot;Not minified: jQuery&quot;,

This does not follow test case naming conventions. A better name would be JQuerySnippet.Unminified.

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:102
&gt; +    var jQueryMinifiedSourceFragment = `/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */

Nit: let

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:106
&gt; +        name: &quot;Minified: jQuery&quot;,

This does not follow test case naming conventions. A better name would be JQuerySnippet.Minified.

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:107
&gt; +        test: function(resolve, reject) {

Use an arrow function.

&gt; LayoutTests/inspector/formatting/is-resource-likely-minified.html:108
&gt; +            InspectorTest.expectThat(isResourceLikelyMinified(jQueryMinifiedSourceFragment), &quot;Minified&quot;);

The expectation string here doesn&apos;t make sense. It should be something like &quot;jQuery snippet should be classified as minified.&quot;

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1405
&gt; +function isResourceLikelyMinified(content)

Nit: isTextLikelyMinified

There&apos;s nothing specific to resources about this function.

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1407
&gt; +    let whiteSpaceScore = 0;

Nit: whitespaceScore

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1432
&gt; +}

Did you mean to change the ratio?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223339</commentid>
    <comment_count>10</comment_count>
      <attachid>287033</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 17:14:35 -0700</bug_when>
    <thetext>Comment on attachment 287033
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1432
&gt;&gt; +}
&gt; 
&gt; Did you mean to change the ratio?

Yes, but I forgot to add a comment. The ratio thresholds were increased to accommodate
for the changes in whiteSpaceScore (a tab character is counted as 4 and a new line as 8).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223340</commentid>
    <comment_count>11</comment_count>
      <attachid>287049</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-25 17:18:19 -0700</bug_when>
    <thetext>Created attachment 287049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223614</commentid>
    <comment_count>12</comment_count>
      <attachid>287049</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-08-26 11:47:20 -0700</bug_when>
    <thetext>Comment on attachment 287049
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1405
&gt; +function isTextLikelyMinified(content)

I think all of my original review comments and questions still apply. I see now you are addressing the \t comment I originally raised. But I still question the extra checks between characters 500-5000:
https://bugs.webkit.org/show_bug.cgi?id=150876#c13

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1412
&gt; +    let i = 0;
&gt; +    let size = Math.min(5000, content.length);
&gt; +    for (; i &lt; size; i++) {

Why not `let i` inside the loop?

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1429
&gt; +    ratio = whitespaceScore / i;

This should be `size` not `i`, right? We only read 5000 characters, not 5001.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223668</commentid>
    <comment_count>13</comment_count>
      <attachid>287139</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-26 13:33:04 -0700</bug_when>
    <thetext>Created attachment 287139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223676</commentid>
    <comment_count>14</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-08-26 13:37:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 287049 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287049&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1405
&gt; &gt; +function isTextLikelyMinified(content)
&gt; 
&gt; I think all of my original review comments and questions still apply. I see
&gt; now you are addressing the \t comment I originally raised. But I still
&gt; question the extra checks between characters 500-5000:
&gt; https://bugs.webkit.org/show_bug.cgi?id=150876#c13

I measured how long does it take for isTextLikelyMinified to execute on unminified jQuery file. It was 0.2-0.7ms, which is very fast, so I removed `if (i &gt;= 500) ...` block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225400</commentid>
    <comment_count>15</comment_count>
      <attachid>287139</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-09-01 11:04:31 -0700</bug_when>
    <thetext>Comment on attachment 287139
Patch

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

r=me

&gt; LayoutTests/inspector/formatting/is-text-likely-minified.html:6
&gt; +window.onload = runTest;

We almost always prefer this to be in &lt;body onload=&quot;runTest();&quot;&gt; just for consistency with 1000&apos;s of other tests.

&gt; LayoutTests/inspector/formatting/is-text-likely-minified.html:20
&gt; +    let jquerySourceFragment = `/*eslint-disable no-unused-vars*/

It would be nice to assign these big literals to globals in a separate file in LayoutTests/inspector/formatting/resources/. Its difficult to read the test flow.

&gt; Source/WebInspectorUI/UserInterface/Base/Utilities.js:1408
&gt; +    const autoFormatWhitespaceRatio = 0.2; // 20%

This comment is unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225510</commentid>
    <comment_count>16</comment_count>
      <attachid>287671</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-09-01 13:45:49 -0700</bug_when>
    <thetext>Created attachment 287671
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225511</commentid>
    <comment_count>17</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-09-01 13:51:28 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; LayoutTests/inspector/formatting/is-text-likely-minified.html:20
&gt; &gt; +    let jquerySourceFragment = `/*eslint-disable no-unused-vars*/
&gt; 
&gt; It would be nice to assign these big literals to globals in a separate file
&gt; in LayoutTests/inspector/formatting/resources/. Its difficult to read the
&gt; test flow.

It turned out to be more difficult as expected so I left it as is
because &quot;test&quot; function didn&apos;t have access to global variables.
I don&apos;t know why, possibly it&apos;s converted to a string (via .toString()) and
then evaluated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225520</commentid>
    <comment_count>18</comment_count>
      <attachid>287671</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 14:06:42 -0700</bug_when>
    <thetext>Comment on attachment 287671
Patch

Clearing flags on attachment: 287671

Committed r205314: &lt;http://trac.webkit.org/changeset/205314&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225521</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 14:06:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228522</commentid>
    <comment_count>20</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2016-09-10 13:08:49 -0700</bug_when>
    <thetext>*** Bug 150947 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>286885</attachid>
            <date>2016-08-24 13:33:06 -0700</date>
            <delta_ts>2016-08-24 13:33:06 -0700</delta_ts>
            <desc>[HTML] Reduction</desc>
            <filename>tabs.html</filename>
            <type>text/html</type>
            <size>274</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4K
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZGF0YTp0ZXh0L2NzcztjaGFyc2V0PXV0
Zi04LHAlMjAlN0IlMEElMDljb2xvciUzQSUyMGJsYWNrJTNCJTBBJTA5Zm9udC1zaXplJTNBJTIw
MTJweCUzQiUwQSUyMCUyMGJhY2tncm91bmQlM0ElMjBsaWdodGdvbGRlbnJvZHllbGxvdyUzQiUw
QSU3RCI+CjwvaGVhZD4KPGJvZHk+CjxwPnA8L3A+CjwvYm9keT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286912</attachid>
            <date>2016-08-24 16:55:30 -0700</date>
            <delta_ts>2016-08-25 15:29:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>WIP.txt</filename>
            <type>text/plain</type>
            <size>2010</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDQ3ZGY2OWYuLjdjMTU1MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTI0ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1pbmlm
aWNhdGlvbiBkZXRlY3Rpb24gcHJvZHVjZXMgZmFsc2UgcG9zaXRpdmVzIGZvciBzbWFsbCByZXNv
dXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MTE1OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjc5OTUzMDY+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Nv
dXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLnByb3RvdHlwZS5faXNMaWtlbHlNaW5pZmllZCk6CisKIDIwMTYtMDgtMjQgIERl
dmluIFJvdXNzbyAgPGRjcm91c3NvK3dlYmtpdEBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogU2hpZnQtVGFiIHNob3VsZCB1bmluZGVudCBzZWxlY3RlZCBsaW5lCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCmluZGV4IDE1ZjZkYjA1Li4zNDA0NTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwpAQCAtMzY5LDEwICszNjksMTcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3Ig
ZXh0ZW5kcyBXZWJJbnNwZWMKICAgICAgICAgbGV0IHdoaXRlU3BhY2VDb3VudCA9IDA7CiAgICAg
ICAgIGxldCByYXRpbyA9IDA7CiAKLSAgICAgICAgZm9yIChsZXQgaSA9IDAsIHNpemUgPSBNYXRo
Lm1pbig1MDAwLCBjb250ZW50Lmxlbmd0aCk7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgbGV0
IGkgPSAwOworICAgICAgICBsZXQgc2l6ZSA9IE1hdGgubWluKDUwMDAsIGNvbnRlbnQubGVuZ3Ro
KTsKKyAgICAgICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGxldCBjaGFy
ID0gY29udGVudFtpXTsKLSAgICAgICAgICAgIGlmIChjaGFyID09PSAiICIgfHwgY2hhciA9PT0g
IlxuIiB8fCBjaGFyID09PSAiXHQiKQorCisgICAgICAgICAgICBpZiAoY2hhciA9PT0gIiAiKQog
ICAgICAgICAgICAgICAgIHdoaXRlU3BhY2VDb3VudCsrOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2hhciA9PT0gIlx0IikKKyAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlQ291bnQgKz0gNDsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09ICJcbiIpCisgICAgICAgICAgICAgICAgd2hpdGVT
cGFjZUNvdW50ICs9IDg7CiAKICAgICAgICAgICAgIGlmIChpID49IDUwMCkgewogICAgICAgICAg
ICAgICAgIHJhdGlvID0gd2hpdGVTcGFjZUNvdW50IC8gaTsKQEAgLTM4MSw2ICszODgsOCBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFzcyBTb3VyY2VDb2RlVGV4dEVk
aXRvciBleHRlbmRzIFdlYkluc3BlYwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAg
ICAgcmF0aW8gPSB3aGl0ZVNwYWNlQ291bnQgLyBpOworCiAgICAgICAgIHJldHVybiByYXRpbyA8
IDAuMTsKICAgICB9CiAK
</data>
<flag name="review"
          id="310414"
          type_id="1"
          status="-"
          setter="nvasilyev"
    />
    <flag name="commit-queue"
          id="310415"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287032</attachid>
            <date>2016-08-25 15:29:38 -0700</date>
            <delta_ts>2016-08-25 15:40:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4686</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGZjODkwLi5mNmQ3ZTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgt
MjUgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTWluaWZpY2F0aW9uIGRldGVjdGlvbiBwcm9kdWNlcyBmYWxzZSBwb3NpdGl2
ZXMgZm9yIHNtYWxsIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMTU5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzk5NTMwNj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9mb3JtYXR0aW5nL2lzLXJlc291cmNlLWxpa2VseS1taW5pZmllZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL2lzLXJlc291cmNlLWxpa2Vs
eS1taW5pZmllZC5odG1sOiBBZGRlZC4KKwogMjAxNi0wOC0yNCAgSmlld2VuIFRhbiAgPGppZXdl
bl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0ZSBleHBlY3RhdGlv
bnMgb2YgaU9TIHNpbXVsYXRvciBXSzEgY3NzMyB0ZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cK
aW5kZXggNDdkZjY5Zi4uY2RiYWFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTYtMDgtMjUgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTWluaWZpY2F0aW9uIGRldGVjdGlvbiBwcm9k
dWNlcyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHNtYWxsIHJlc291cmNlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMTU5CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8yNzk5NTMwNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXByb3ZlIG1pbmlmaWNhdGlvbiBkZXRlY3Rpb24gYWxnb3JpdGhtLiBNaW5p
ZmllZCByZXNvdXJjZXMgcmFyZWx5IGhhdmUgdGFicyBhbmQgdXN1YWxseQorICAgICAgICBoYXZl
IGEgdmVyeSBmZXcgbGluZSBicmVha3MuIENvdW50aW5nIHRhYnMgYXMgNCBzcGFjZXMgYW5kIGxp
bmUgYnJlYWtzIGFzIDggbWFrZXMgbWluaWZpY2F0aW9uCisgICAgICAgIGRldGVjdGlvbiBoZXVy
aXN0aWMgbW9yZSBhY2N1cmF0ZS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9VdGls
aXRpZXMuanM6CisgICAgICAgIChpc1Jlc291cmNlTGlrZWx5TWluaWZpZWQpOgorICAgICAgICBN
b3ZlIHRoaXMgdG8gYSBnbG9iYWwgZnVuY3Rpb24gdG8gbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRl
c3RzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUuX3ByZXBhcmVFZGl0b3JGb3JJbml0aWFsQ29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9pc0xpa2VseU1pbmlmaWVkKTogRGVs
ZXRlZC4KKwogMjAxNi0wOC0yNCAgRGV2aW4gUm91c3NvICA8ZGNyb3Vzc28rd2Via2l0QGdtYWls
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTaGlmdC1UYWIgc2hvdWxkIHVuaW5kZW50
IHNlbGVjdGVkIGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQmFzZS9VdGlsaXRpZXMuanMKaW5kZXggN2IwYjZjNi4uNDhiZjEyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMu
anMKQEAgLTE0MDIsNiArMTQwMiwzNSBAQCBmdW5jdGlvbiBpc0Z1bmN0aW9uU3RyaW5nTmF0aXZl
Q29kZShzdHIpCiAgICAgcmV0dXJuIHN0ci5lbmRzV2l0aCgie1xuICAgIFtuYXRpdmUgY29kZV1c
bn0iKTsKIH0KIAorZnVuY3Rpb24gaXNSZXNvdXJjZUxpa2VseU1pbmlmaWVkKGNvbnRlbnQpCit7
CisgICAgbGV0IHdoaXRlU3BhY2VTY29yZSA9IDA7CisgICAgbGV0IHJhdGlvID0gMDsKKworICAg
IGxldCBpID0gMDsKKyAgICBsZXQgc2l6ZSA9IE1hdGgubWluKDUwMDAsIGNvbnRlbnQubGVuZ3Ro
KTsKKyAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBsZXQgY2hhciA9IGNvbnRl
bnRbaV07CisKKyAgICAgICAgaWYgKGNoYXIgPT09ICIgIikKKyAgICAgICAgICAgIHdoaXRlU3Bh
Y2VTY29yZSsrOworICAgICAgICBlbHNlIGlmIChjaGFyID09PSAiXHQiKQorICAgICAgICAgICAg
d2hpdGVTcGFjZVNjb3JlICs9IDQ7CisgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09ICJcbiIpCisg
ICAgICAgICAgICB3aGl0ZVNwYWNlU2NvcmUgKz0gODsKKworICAgICAgICBpZiAoaSA+PSA1MDAp
IHsKKyAgICAgICAgICAgIHJhdGlvID0gd2hpdGVTcGFjZVNjb3JlIC8gaTsKKyAgICAgICAgICAg
IGlmIChyYXRpbyA8IDAuMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJhdGlvID0gd2hpdGVTcGFjZVNjb3JlIC8gaTsKKworICAgIHJldHVy
biByYXRpbyA8IDAuMjsKK30KKwogZnVuY3Rpb24gZG91YmxlUXVvdGVkU3RyaW5nKHN0cikKIHsK
ICAgICByZXR1cm4gIlwiIiArIHN0ci5yZXBsYWNlKC9cXC9nLCAiXFxcXCIpLnJlcGxhY2UoLyIv
ZywgIlxcXCIiKSArICJcIiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCmluZGV4
IDE1ZjZkYjA1Li44MDVjYzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwpA
QCAtMzY0LDI2ICszNjQsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBj
bGFzcyBTb3VyY2VDb2RlVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3BlYwogICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUluZm8ubGluZU51bWJlcl07CiAgICAgfQog
Ci0gICAgX2lzTGlrZWx5TWluaWZpZWQoY29udGVudCkKLSAgICB7Ci0gICAgICAgIGxldCB3aGl0
ZVNwYWNlQ291bnQgPSAwOwotICAgICAgICBsZXQgcmF0aW8gPSAwOwotCi0gICAgICAgIGZvciAo
bGV0IGkgPSAwLCBzaXplID0gTWF0aC5taW4oNTAwMCwgY29udGVudC5sZW5ndGgpOyBpIDwgc2l6
ZTsgaSsrKSB7Ci0gICAgICAgICAgICBsZXQgY2hhciA9IGNvbnRlbnRbaV07Ci0gICAgICAgICAg
ICBpZiAoY2hhciA9PT0gIiAiIHx8IGNoYXIgPT09ICJcbiIgfHwgY2hhciA9PT0gIlx0IikKLSAg
ICAgICAgICAgICAgICB3aGl0ZVNwYWNlQ291bnQrKzsKLQotICAgICAgICAgICAgaWYgKGkgPj0g
NTAwKSB7Ci0gICAgICAgICAgICAgICAgcmF0aW8gPSB3aGl0ZVNwYWNlQ291bnQgLyBpOwotICAg
ICAgICAgICAgICAgIGlmIChyYXRpbyA8IDAuMDUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJhdGlv
IDwgMC4xOwotICAgIH0KLQogICAgIF9wb3B1bGF0ZVdpdGhDb250ZW50KGNvbnRlbnQpCiAgICAg
ewogICAgICAgICBjb250ZW50ID0gY29udGVudCB8fCAiIjsKQEAgLTQ2NCw3ICs0NDQsNyBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFzcyBTb3VyY2VDb2RlVGV4dEVk
aXRvciBleHRlbmRzIFdlYkluc3BlYwogCiAgICAgICAgIC8vIERlY2lkZSB0byBhdXRvbWF0aWNh
bGx5IGZvcm1hdCB0aGUgY29udGVudCBpZiBpdCBsb29rcyBtaW5pZmllZCBhbmQgaXQgY2FuIGJl
IGZvcm1hdHRlZC4KICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuZm9ybWF0dGVkKTsKLSAg
ICAgICAgaWYgKHRoaXMuY2FuQmVGb3JtYXR0ZWQoKSAmJiB0aGlzLl9pc0xpa2VseU1pbmlmaWVk
KGNvbnRlbnQpKSB7CisgICAgICAgIGlmICh0aGlzLmNhbkJlRm9ybWF0dGVkKCkgJiYgaXNSZXNv
dXJjZUxpa2VseU1pbmlmaWVkKGNvbnRlbnQpKSB7CiAgICAgICAgICAgICB0aGlzLl9hdXRvRm9y
bWF0ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuX2lzUHJvYmFibHlNaW5pZmllZCA9IHRydWU7
CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="310519"
          type_id="1"
          status="-"
          setter="nvasilyev"
    />
    <flag name="commit-queue"
          id="310520"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287033</attachid>
            <date>2016-08-25 15:40:14 -0700</date>
            <delta_ts>2016-08-25 17:18:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12526</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGZjODkwLi5mNmQ3ZTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgt
MjUgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTWluaWZpY2F0aW9uIGRldGVjdGlvbiBwcm9kdWNlcyBmYWxzZSBwb3NpdGl2
ZXMgZm9yIHNtYWxsIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMTU5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzk5NTMwNj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9mb3JtYXR0aW5nL2lzLXJlc291cmNlLWxpa2VseS1taW5pZmllZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL2lzLXJlc291cmNlLWxpa2Vs
eS1taW5pZmllZC5odG1sOiBBZGRlZC4KKwogMjAxNi0wOC0yNCAgSmlld2VuIFRhbiAgPGppZXdl
bl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0ZSBleHBlY3RhdGlv
bnMgb2YgaU9TIHNpbXVsYXRvciBXSzEgY3NzMyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtcmVzb3VyY2UtbGlrZWx5LW1pbmlmaWVkLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2lzLXJlc291cmNlLWxp
a2VseS1taW5pZmllZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDNhMmE5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9m
b3JtYXR0aW5nL2lzLXJlc291cmNlLWxpa2VseS1taW5pZmllZC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMyBAQAorVGVzdCBtaW5pZmljYXRpb24gZGV0ZWN0aW9uLgorCisKKz09IFJ1bm5pbmcg
dGVzdCBzdWl0ZTogaXNMaWtlbHlNaW5pZmllZAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IE5vdCBt
aW5pZmllZDogc21hbGwgcmVzb3VyY2UKK1BBU1M6IE5vdCBtaW5pZmllZAorCistLSBSdW5uaW5n
IHRlc3QgY2FzZTogTm90IG1pbmlmaWVkOiBqUXVlcnkKK1BBU1M6IE5vdCBtaW5pZmllZAorCist
LSBSdW5uaW5nIHRlc3QgY2FzZTogTWluaWZpZWQ6IGpRdWVyeQorUEFTUzogTWluaWZpZWQKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtcmVzb3VyY2Ut
bGlrZWx5LW1pbmlmaWVkLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9p
cy1yZXNvdXJjZS1saWtlbHktbWluaWZpZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMmE4MjJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2Zvcm1hdHRpbmcvaXMtcmVzb3VyY2UtbGlrZWx5LW1pbmlmaWVkLmh0bWwKQEAgLTAsMCAr
MSwxMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvaW5zcGVjdG9yLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK3dpbmRvdy5vbmxvYWQgPSBydW5UZXN0OworCitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZUFzeW5jU3VpdGUo
ImlzTGlrZWx5TWluaWZpZWQiKTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAg
bmFtZTogIk5vdCBtaW5pZmllZDogc21hbGwgcmVzb3VyY2UiLAorICAgICAgICB0ZXN0OiBmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0
VGhhdCghaXNSZXNvdXJjZUxpa2VseU1pbmlmaWVkKCJ2YXIgeCA9IDQyO1xudmFyIHkgPSAyNDtc
biIpLCAiTm90IG1pbmlmaWVkIik7CisgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIGxldCBqcXVlcnlTb3VyY2VGcmFnbWVudCA9IGAvKmVzbGludC1kaXNh
YmxlIG5vLXVudXNlZC12YXJzKi8KKy8qIQorICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2
My4xLjAKKyAqIGh0dHBzOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMK
KyAqIGh0dHBzOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRh
dGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxp
Y2Vuc2UKKyAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogMjAxNi0w
Ny0wN1QyMTo0NFoKKyAqLworKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkgeworCisJInVz
ZSBzdHJpY3QiOworCisJaWYgKCB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiAmJiB0eXBlb2Yg
bW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiICkgeworCisJCS8vIEZvciBDb21tb25KUyBhbmQg
Q29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgd2luZG93CisJCS8vIGlz
IHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCisJCS8vIEZvciBl
bnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQKKwkJ
Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMu
CisJCS8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJl
YWwgd2luZG93LgorCQkvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKCJqcXVlcnkiKSh3aW5k
b3cpOworCQkvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLgorCQltb2R1bGUuZXhw
b3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/CisJCQlmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6CisJ
CQlmdW5jdGlvbiggdyApIHsKKwkJCQlpZiAoICF3LmRvY3VtZW50ICkgeworCQkJCQl0aHJvdyBu
ZXcgRXJyb3IoICJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50IiApOwor
CQkJCX0KKwkJCQlyZXR1cm4gZmFjdG9yeSggdyApOworCQkJfTsKKwl9IGVsc2UgeworCQlmYWN0
b3J5KCBnbG9iYWwgKTsKKwl9CisKKy8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmlu
ZWQgeWV0Cit9ICkoIHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDogdGhp
cywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7CisKKy8vIEVkZ2UgPD0gMTIgLSAxMyss
IEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAt
IDkuMQorLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQ
Lk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlCisvLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxl
ciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUg
c2hvdWxkIGJlIGNvbW1vbgorLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1
YXJkZWQgaW4gYSB0cnkgYmxvY2suCisidXNlIHN0cmljdCI7CisKK3ZhciBhcnIgPSBbXTsKKwor
dmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OworCit2YXIgZ2V0UHJvdG8gPSBPYmplY3Qu
Z2V0UHJvdG90eXBlT2Y7CisKK3ZhciBzbGljZSA9IGFyci5zbGljZTsKKwordmFyIGNvbmNhdCA9
IGFyci5jb25jYXQ7CisKK3ZhciBwdXNoID0gYXJyLnB1c2g7CisKK3ZhciBpbmRleE9mID0gYXJy
LmluZGV4T2Y7CisKK3ZhciBjbGFzczJ0eXBlID0ge307CisKK3ZhciB0b1N0cmluZyA9IGNsYXNz
MnR5cGUudG9TdHJpbmc7CisKK3ZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5
OworCit2YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZzsKKwordmFyIE9iamVjdEZ1bmN0
aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTsKKwordmFyIHN1cHBvcnQgPSB7
fTtgOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiTm90IG1pbmlm
aWVkOiBqUXVlcnkiLAorICAgICAgICB0ZXN0OiBmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghaXNSZXNvdXJjZUxpa2VseU1p
bmlmaWVkKGpxdWVyeVNvdXJjZUZyYWdtZW50KSwgIk5vdCBtaW5pZmllZCIpOworICAgICAgICAg
ICAgcmVzb2x2ZSgpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICB2YXIgalF1ZXJ5TWluaWZp
ZWRTb3VyY2VGcmFnbWVudCA9IGAvKiEgalF1ZXJ5IHYzLjEuMCB8IChjKSBqUXVlcnkgRm91bmRh
dGlvbiB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLworIWZ1bmN0aW9uKGEsYil7InVzZSBzdHJpY3Qi
OyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRz
P21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1
bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9j
dW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2lu
ZG93OnRoaXMsZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9W10sZD1hLmRvY3VtZW50
LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGY9Yy5zbGljZSxnPWMuY29uY2F0LGg9Yy5wdXNoLGk9
Yy5pbmRleE9mLGo9e30saz1qLnRvU3RyaW5nLGw9ai5oYXNPd25Qcm9wZXJ0eSxtPWwudG9TdHJp
bmcsbj1tLmNhbGwoT2JqZWN0KSxvPXt9O2Z1bmN0aW9uIHAoYSxiKXtiPWJ8fGQ7dmFyIGM9Yi5j
cmVhdGVFbGVtZW50KCJzY3JpcHQiKTtjLnRleHQ9YSxiLmhlYWQuYXBwZW5kQ2hpbGQoYykucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChjKX12YXIgcT0iMy4xLjAiLHI9ZnVuY3Rpb24oYSxiKXtyZXR1
cm4gbmV3IHIuZm4uaW5pdChhLGIpfSxzPS9eW3Pvu7/CoF0rfFtz77u/wqBdKyQvZyx0PS9eLW1z
LS8sdT0vLShbYS16XSkvZyx2PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07
ci5mbj1yLnByb3RvdHlwZT17anF1ZXJ5OnEsY29uc3RydWN0b3I6cixsZW5ndGg6MCx0b0FycmF5
OmZ1bmN0aW9uKCl7cmV0dXJuIGYuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBu
dWxsIT1hP2E8MD90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06Zi5jYWxsKHRoaXMpfSxwdXNo
U3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9ci5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0
dXJuIGIucHJldk9iamVjdD10aGlzLGJ9LGVhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHIuZWFjaCh0
aGlzLGEpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHIubWFwKHRoaXMs
ZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEo
LTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKyhhPDA/YjowKTtyZXR1
cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYzxiP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpoLHNvcnQ6
Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sci5leHRlbmQ9ci5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2
YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgs
aj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsr
KSwib2JqZWN0Ij09dHlwZW9mIGd8fHIuaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10
aGlzLGgtLSk7aDxpO2grKylpZihudWxsIT0oYT1hcmd1bWVudHNbaF0pKWZvcihiIGluIGEpYz1n
W2JdLGQ9YVtiXSxnIT09ZCYmKGomJmQmJihyLmlzUGxhaW5PYmplY3QoZCl8fChlPXIuaXNBcnJh
eShkKSkpPyhlPyhlPSExLGY9YyYmci5pc0FycmF5KGMpP2M6W10pOmY9YyYmci5pc1BsYWluT2Jq
ZWN0KGMpP2M6e30sZ1tiXT1yLmV4dGVuZChqLGYsZCkpOnZvaWQgMCE9PWQmJihnW2JdPWQpKTty
ZXR1cm4gZ30sci5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHErTWF0aC5yYW5kb20oKSkucmVw
bGFjZSgvRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJv
cihhKX0sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4iZnVu
Y3Rpb24iPT09ci50eXBlKGEpfSxpc0FycmF5OkFycmF5LmlzQXJyYXksaXNXaW5kb3c6ZnVuY3Rp
b24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEp
e3ZhciBiPXIudHlwZShhKTtyZXR1cm4oIm51bWJlciI9PT1ifHwic3RyaW5nIj09PWIpJiYhaXNO
YU4oYS1wYXJzZUZsb2F0KGEpKX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYixjO3Jl
dHVybiEoIWF8fCJbb2JqZWN0IE9iamVjdF0iIT09ay5jYWxsKGEpKSYmKCEoYj1lKGEpKXx8KGM9
bC5jYWxsKGIsImNvbnN0cnVjdG9yIikmJmIuY29uc3RydWN0b3IsImZ1bmN0aW9uIj09dHlwZW9m
IGMmJm0uY2FsbChjKT09PW4pKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3Io
YiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1h
P2ErIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9qW2suY2FsbChh
KV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGEpe3AoYSl9LGNhbWVs
Q2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHQsIm1zLSIpLnJlcGxhY2UodSx2KX0s
bm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0w
O2lmKHcoYSkpe2ZvcihjPWEubGVuZ3RoO2Q8YztkKyspaWYoYi5jYWxsKGFbZF0sZCxhW2RdKT09
PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJl
YWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJl
cGxhY2UocywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBu
dWxsIT1hJiYodyhPYmplY3QoYSkpP3IubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEp
OmguY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbD09Yj8t
MTppLmNhbGwoYixhLGMpfSxtZXJnZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0rYi5sZW5ndGgs
ZD0wLGU9YS5sZW5ndGg7ZDxjO2QrKylhW2UrK109YltkXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxn
cmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2Y8
ZztmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5j
dGlvbihhLGIsYyl7dmFyIGQsZSxmPTAsaD1bXTtpZih3KGEpKWZvcihkPWEubGVuZ3RoO2Y8ZDtm
KyspZT1iKGFbZl0sZixjKSxudWxsIT1lJiZoLnB1c2goZSk7ZWxzZSBmb3IoZiBpbiBhKWU9Yihh
W2ZdLGYsYyksbnVsbCE9ZSYmaC5wdXNoKGUpO3JldHVybiBnLmFwcGx5KFtdLGgpfSxndWlkOjEs
cHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7aWYoInN0cmluZyI9PXR5cGVvZiBiJiYoYz1h
W2JdLGI9YSxhPWMpLHIuaXNGdW5jdGlvbihhKSlyZXR1cm4gZD1mLmNhbGwoYXJndW1lbnRzLDIp
LGU9ZnVuY3Rpb24oKXtyZXR1cm4gYDsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAg
ICAgbmFtZTogIk1pbmlmaWVkOiBqUXVlcnkiLAorICAgICAgICB0ZXN0OiBmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChpc1Jl
c291cmNlTGlrZWx5TWluaWZpZWQoalF1ZXJ5TWluaWZpZWRTb3VyY2VGcmFnbWVudCksICJNaW5p
ZmllZCIpOworICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICB9CisgICAgfSk7CisKKyAg
ICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2goKTsKK30KKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHA+VGVzdCBtaW5pZmljYXRpb24gZGV0ZWN0aW9uLjwvcD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDQ3ZGY2OWYuLmNkYmFhZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE2LTA4LTI1ICBOaWtp
dGEgVmFzaWx5ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IE1pbmlmaWNhdGlvbiBkZXRlY3Rpb24gcHJvZHVjZXMgZmFsc2UgcG9zaXRpdmVzIGZvciBz
bWFsbCByZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTE1OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjc5OTUzMDY+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wcm92ZSBtaW5pZmlj
YXRpb24gZGV0ZWN0aW9uIGFsZ29yaXRobS4gTWluaWZpZWQgcmVzb3VyY2VzIHJhcmVseSBoYXZl
IHRhYnMgYW5kIHVzdWFsbHkKKyAgICAgICAgaGF2ZSBhIHZlcnkgZmV3IGxpbmUgYnJlYWtzLiBD
b3VudGluZyB0YWJzIGFzIDQgc3BhY2VzIGFuZCBsaW5lIGJyZWFrcyBhcyA4IG1ha2VzIG1pbmlm
aWNhdGlvbgorICAgICAgICBkZXRlY3Rpb24gaGV1cmlzdGljIG1vcmUgYWNjdXJhdGUuCisKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzOgorICAgICAgICAoaXNSZXNv
dXJjZUxpa2VseU1pbmlmaWVkKToKKyAgICAgICAgTW92ZSB0aGlzIHRvIGEgZ2xvYmFsIGZ1bmN0
aW9uIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0ZXN0cy4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wcmVwYXJlRWRpdG9yRm9ySW5pdGlh
bENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZS5faXNMaWtlbHlNaW5pZmllZCk6IERlbGV0ZWQuCisKIDIwMTYtMDgtMjQgIERldmlu
IFJvdXNzbyAgPGRjcm91c3NvK3dlYmtpdEBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogU2hpZnQtVGFiIHNob3VsZCB1bmluZGVudCBzZWxlY3RlZCBsaW5lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzCmlu
ZGV4IDdiMGI2YzYuLjQ4YmYxMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzCkBAIC0xNDAyLDYgKzE0MDIsMzUgQEAg
ZnVuY3Rpb24gaXNGdW5jdGlvblN0cmluZ05hdGl2ZUNvZGUoc3RyKQogICAgIHJldHVybiBzdHIu
ZW5kc1dpdGgoIntcbiAgICBbbmF0aXZlIGNvZGVdXG59Iik7CiB9CiAKK2Z1bmN0aW9uIGlzUmVz
b3VyY2VMaWtlbHlNaW5pZmllZChjb250ZW50KQoreworICAgIGxldCB3aGl0ZVNwYWNlU2NvcmUg
PSAwOworICAgIGxldCByYXRpbyA9IDA7CisKKyAgICBsZXQgaSA9IDA7CisgICAgbGV0IHNpemUg
PSBNYXRoLm1pbig1MDAwLCBjb250ZW50Lmxlbmd0aCk7CisgICAgZm9yICg7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgbGV0IGNoYXIgPSBjb250ZW50W2ldOworCisgICAgICAgIGlmIChjaGFy
ID09PSAiICIpCisgICAgICAgICAgICB3aGl0ZVNwYWNlU2NvcmUrKzsKKyAgICAgICAgZWxzZSBp
ZiAoY2hhciA9PT0gIlx0IikKKyAgICAgICAgICAgIHdoaXRlU3BhY2VTY29yZSArPSA0OworICAg
ICAgICBlbHNlIGlmIChjaGFyID09PSAiXG4iKQorICAgICAgICAgICAgd2hpdGVTcGFjZVNjb3Jl
ICs9IDg7CisKKyAgICAgICAgaWYgKGkgPj0gNTAwKSB7CisgICAgICAgICAgICByYXRpbyA9IHdo
aXRlU3BhY2VTY29yZSAvIGk7CisgICAgICAgICAgICBpZiAocmF0aW8gPCAwLjEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYXRpbyA9IHdo
aXRlU3BhY2VTY29yZSAvIGk7CisKKyAgICByZXR1cm4gcmF0aW8gPCAwLjI7Cit9CisKIGZ1bmN0
aW9uIGRvdWJsZVF1b3RlZFN0cmluZyhzdHIpCiB7CiAgICAgcmV0dXJuICJcIiIgKyBzdHIucmVw
bGFjZSgvXFwvZywgIlxcXFwiKS5yZXBsYWNlKC8iL2csICJcXFwiIikgKyAiXCIiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwppbmRleCAxNWY2ZGIwNS4uODA1Y2MyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29k
ZVRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKQEAgLTM2NCwyNiArMzY0LDYgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3Ig
ZXh0ZW5kcyBXZWJJbnNwZWMKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50TWFw
W2xpbmVJbmZvLmxpbmVOdW1iZXJdOwogICAgIH0KIAotICAgIF9pc0xpa2VseU1pbmlmaWVkKGNv
bnRlbnQpCi0gICAgewotICAgICAgICBsZXQgd2hpdGVTcGFjZUNvdW50ID0gMDsKLSAgICAgICAg
bGV0IHJhdGlvID0gMDsKLQotICAgICAgICBmb3IgKGxldCBpID0gMCwgc2l6ZSA9IE1hdGgubWlu
KDUwMDAsIGNvbnRlbnQubGVuZ3RoKTsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgbGV0
IGNoYXIgPSBjb250ZW50W2ldOwotICAgICAgICAgICAgaWYgKGNoYXIgPT09ICIgIiB8fCBjaGFy
ID09PSAiXG4iIHx8IGNoYXIgPT09ICJcdCIpCi0gICAgICAgICAgICAgICAgd2hpdGVTcGFjZUNv
dW50Kys7Ci0KLSAgICAgICAgICAgIGlmIChpID49IDUwMCkgewotICAgICAgICAgICAgICAgIHJh
dGlvID0gd2hpdGVTcGFjZUNvdW50IC8gaTsKLSAgICAgICAgICAgICAgICBpZiAocmF0aW8gPCAw
LjA1KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiByYXRpbyA8IDAuMTsKLSAgICB9Ci0KICAgICBfcG9w
dWxhdGVXaXRoQ29udGVudChjb250ZW50KQogICAgIHsKICAgICAgICAgY29udGVudCA9IGNvbnRl
bnQgfHwgIiI7CkBAIC00NjQsNyArNDQ0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3IgZXh0ZW5kcyBXZWJJbnNwZWMKIAog
ICAgICAgICAvLyBEZWNpZGUgdG8gYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIGNvbnRlbnQgaWYg
aXQgbG9va3MgbWluaWZpZWQgYW5kIGl0IGNhbiBiZSBmb3JtYXR0ZWQuCiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCF0aGlzLmZvcm1hdHRlZCk7Ci0gICAgICAgIGlmICh0aGlzLmNhbkJlRm9ybWF0
dGVkKCkgJiYgdGhpcy5faXNMaWtlbHlNaW5pZmllZChjb250ZW50KSkgeworICAgICAgICBpZiAo
dGhpcy5jYW5CZUZvcm1hdHRlZCgpICYmIGlzUmVzb3VyY2VMaWtlbHlNaW5pZmllZChjb250ZW50
KSkgewogICAgICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdCA9IHRydWU7CiAgICAgICAgICAgICB0
aGlzLl9pc1Byb2JhYmx5TWluaWZpZWQgPSB0cnVlOwogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="310521"
          type_id="1"
          status="-"
          setter="bburg"
    />
    <flag name="commit-queue"
          id="310522"
          type_id="3"
          status="-"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287049</attachid>
            <date>2016-08-25 17:18:19 -0700</date>
            <delta_ts>2016-08-26 13:33:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12781</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGZjODkwLi45YTAxZWRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgt
MjUgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTWluaWZpY2F0aW9uIGRldGVjdGlvbiBwcm9kdWNlcyBmYWxzZSBwb3NpdGl2
ZXMgZm9yIHNtYWxsIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMTU5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzk5NTMwNj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9mb3JtYXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZp
ZWQuaHRtbDogQWRkZWQuCisKIDIwMTYtMDgtMjQgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB1cGRhdGUgZXhwZWN0YXRpb25zIG9mIGlP
UyBzaW11bGF0b3IgV0sxIGNzczMgdGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9mb3JtYXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWU0MDY1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4
dC1saWtlbHktbWluaWZpZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgbWlu
aWZpY2F0aW9uIGRldGVjdGlvbi4KKworCis9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IEZvcm1hdHRp
bmcuaXNMaWtlbHlNaW5pZmllZAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IEphdmFTY3JpcHRTaG9y
dFNuaXBwZXQuVW5taW5pZmllZAorUEFTUzogVGhpcyBzbWFsbCBKYXZhU2NyaXB0IHNuaXBwZXQg
c2hvdWxkIGJlIGNsYXNzaWZpZWQgYXMgdW5taW5pZmllZC4KKworLS0gUnVubmluZyB0ZXN0IGNh
c2U6IEpRdWVyeVNuaXBwZXQuVW5taW5pZmllZAorUEFTUzogalF1ZXJ5IHNuaXBwZXQgc2hvdWxk
IGJlIGNsYXNzaWZpZWQgYXMgdW5taW5pZmllZC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IEpR
dWVyeVNuaXBwZXQuTWluaWZpZWQKK1BBU1M6IGpRdWVyeSBzbmlwcGV0IHNob3VsZCBiZSBjbGFz
c2lmaWVkIGFzIG1pbmlmaWVkLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9pcy10ZXh0LWxpa2VseS1taW5pZmllZC5odG1sIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWE1NDhmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQuaHRt
bApAQCAtMCwwICsxLDEyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9pbnNwZWN0b3It
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgord2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisK
K2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGxldCBzdWl0ZSA9IEluc3BlY3RvclRlc3QuY3JlYXRl
QXN5bmNTdWl0ZSgiRm9ybWF0dGluZy5pc0xpa2VseU1pbmlmaWVkIik7CisKKyAgICBzdWl0ZS5h
ZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJKYXZhU2NyaXB0U2hvcnRTbmlwcGV0LlVubWlu
aWZpZWQiLAorICAgICAgICB0ZXN0OiAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIWlzVGV4dExpa2VseU1pbmlmaWVkKCJ2YXIgeCA9
IDQyO1xudmFyIHkgPSAyNDtcbiIpLCAiVGhpcyBzbWFsbCBKYXZhU2NyaXB0IHNuaXBwZXQgc2hv
dWxkIGJlIGNsYXNzaWZpZWQgYXMgdW5taW5pZmllZC4iKTsKKyAgICAgICAgICAgIHJlc29sdmUo
KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgbGV0IGpxdWVyeVNvdXJjZUZyYWdtZW50ID0g
YC8qZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMqLworLyohCisgKiBqUXVlcnkgSmF2YVNj
cmlwdCBMaWJyYXJ5IHYzLjEuMAorICogaHR0cHM6Ly9qcXVlcnkuY29tLworICoKKyAqIEluY2x1
ZGVzIFNpenpsZS5qcworICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0
IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVu
ZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisg
KiBEYXRlOiAyMDE2LTA3LTA3VDIxOjQ0WgorICovCisoIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3Rv
cnkgKSB7CisKKwkidXNlIHN0cmljdCI7CisKKwlpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmpl
Y3QiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7CisKKwkJLy8gRm9y
IENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciB3
aW5kb3cKKwkJLy8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVy
eS4KKwkJLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgd2luZG93IHdpdGgg
YSBkb2N1bWVudAorCQkvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBt
b2R1bGUuZXhwb3J0cy4KKwkJLy8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNy
ZWF0aW9uIG9mIGEgcmVhbCB3aW5kb3cuCisJCS8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUo
ImpxdWVyeSIpKHdpbmRvdyk7CisJCS8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8u
CisJCW1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID8KKwkJCWZhY3RvcnkoIGdsb2Jh
bCwgdHJ1ZSApIDoKKwkJCWZ1bmN0aW9uKCB3ICkgeworCQkJCWlmICggIXcuZG9jdW1lbnQgKSB7
CisJCQkJCXRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEg
ZG9jdW1lbnQiICk7CisJCQkJfQorCQkJCXJldHVybiBmYWN0b3J5KCB3ICk7CisJCQl9OworCX0g
ZWxzZSB7CisJCWZhY3RvcnkoIGdsb2JhbCApOworCX0KKworLy8gUGFzcyB0aGlzIGlmIHdpbmRv
dyBpcyBub3QgZGVmaW5lZCB5ZXQKK30gKSggdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIg
PyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHsKKworLy8gRWRn
ZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4x
IC0gOSssIGlPUyA2IC0gOS4xCisvLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBj
b2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGUKKy8vIGFyZ3VtZW50
cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYp
LCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uCisvLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBh
dHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay4KKyJ1c2Ugc3RyaWN0IjsKKwordmFy
IGFyciA9IFtdOworCit2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CisKK3ZhciBnZXRQ
cm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKKwordmFyIHNsaWNlID0gYXJyLnNsaWNlOwor
Cit2YXIgY29uY2F0ID0gYXJyLmNvbmNhdDsKKwordmFyIHB1c2ggPSBhcnIucHVzaDsKKwordmFy
IGluZGV4T2YgPSBhcnIuaW5kZXhPZjsKKwordmFyIGNsYXNzMnR5cGUgPSB7fTsKKwordmFyIHRv
U3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZzsKKwordmFyIGhhc093biA9IGNsYXNzMnR5cGUu
aGFzT3duUHJvcGVydHk7CisKK3ZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nOworCit2
YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApOworCit2
YXIgc3VwcG9ydCA9IHt9O2A7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5h
bWU6ICJKUXVlcnlTbmlwcGV0LlVubWluaWZpZWQiLAorICAgICAgICB0ZXN0OiAocmVzb2x2ZSwg
cmVqZWN0KSA9PiB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIWlzVGV4
dExpa2VseU1pbmlmaWVkKGpxdWVyeVNvdXJjZUZyYWdtZW50KSwgImpRdWVyeSBzbmlwcGV0IHNo
b3VsZCBiZSBjbGFzc2lmaWVkIGFzIHVubWluaWZpZWQuIik7CisgICAgICAgICAgICByZXNvbHZl
KCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGxldCBqUXVlcnlNaW5pZmllZFNvdXJjZUZy
YWdtZW50ID0gYC8qISBqUXVlcnkgdjMuMS4wIHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1
ZXJ5Lm9yZy9saWNlbnNlICovCishZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7Im9iamVjdCI9
PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4
cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93
IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3Jl
dHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxm
dW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1PYmplY3Qu
Z2V0UHJvdG90eXBlT2YsZj1jLnNsaWNlLGc9Yy5jb25jYXQsaD1jLnB1c2gsaT1jLmluZGV4T2Ys
aj17fSxrPWoudG9TdHJpbmcsbD1qLmhhc093blByb3BlcnR5LG09bC50b1N0cmluZyxuPW0uY2Fs
bChPYmplY3QpLG89e307ZnVuY3Rpb24gcChhLGIpe2I9Ynx8ZDt2YXIgYz1iLmNyZWF0ZUVsZW1l
bnQoInNjcmlwdCIpO2MudGV4dD1hLGIuaGVhZC5hcHBlbmRDaGlsZChjKS5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKGMpfXZhciBxPSIzLjEuMCIscj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgci5m
bi5pbml0KGEsYil9LHM9L15bc++7v8KgXSt8W3Pvu7/CoF0rJC9nLHQ9L14tbXMtLyx1PS8tKFth
LXpdKS9nLHY9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTtyLmZuPXIucHJv
dG90eXBlPXtqcXVlcnk6cSxjb25zdHJ1Y3RvcjpyLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24o
KXtyZXR1cm4gZi5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/YTww
P3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpmLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5j
dGlvbihhKXt2YXIgYj1yLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2
T2JqZWN0PXRoaXMsYn0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gci5lYWNoKHRoaXMsYSl9LG1h
cDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soci5tYXAodGhpcyxmdW5jdGlvbihi
LGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlz
LnB1c2hTdGFjayhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1
bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKGE8MD9iOjApO3JldHVybiB0aGlzLnB1
c2hTdGFjayhjPj0wJiZjPGI/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOmgsc29ydDpjLnNvcnQsc3Bs
aWNlOmMuc3BsaWNlfSxyLmV4dGVuZD1yLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGIsYyxk
LGUsZixnPWFyZ3VtZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxqPSExO2Zvcigi
Ym9vbGVhbiI9PXR5cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKyspLCJvYmplY3Qi
PT10eXBlb2YgZ3x8ci5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTto
PGk7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2Jd
LGchPT1kJiYoaiYmZCYmKHIuaXNQbGFpbk9iamVjdChkKXx8KGU9ci5pc0FycmF5KGQpKSk/KGU/
KGU9ITEsZj1jJiZyLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZyLmlzUGxhaW5PYmplY3QoYyk/Yzp7
fSxnW2JdPXIuZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxy
LmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisocStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9EL2cs
IiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29w
OmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1y
LnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1
cm4gbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7dmFyIGI9ci50
eXBlKGEpO3JldHVybigibnVtYmVyIj09PWJ8fCJzdHJpbmciPT09YikmJiFpc05hTihhLXBhcnNl
RmxvYXQoYSkpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiLGM7cmV0dXJuISghYXx8
IltvYmplY3QgT2JqZWN0XSIhPT1rLmNhbGwoYSkpJiYoIShiPWUoYSkpfHwoYz1sLmNhbGwoYiwi
Y29uc3RydWN0b3IiKSYmYi5jb25zdHJ1Y3RvciwiZnVuY3Rpb24iPT10eXBlb2YgYyYmbS5jYWxs
KGMpPT09bikpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0
dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2Jq
ZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2pbay5jYWxsKGEpXXx8Im9iamVj
dCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7cChhKX0sY2FtZWxDYXNlOmZ1bmN0
aW9uKGEpe3JldHVybiBhLnJlcGxhY2UodCwibXMtIikucmVwbGFjZSh1LHYpfSxub2RlTmFtZTpm
dW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9
PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYodyhhKSl7
Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWt9
ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1cm4g
YX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShzLCIi
KX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJih3
KE9iamVjdChhKSk/ci5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6aC5jYWxsKGMs
YSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsPT1iPy0xOmkuY2FsbChi
LGEsYyl9LG1lcmdlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPStiLmxlbmd0aCxkPTAsZT1hLmxl
bmd0aDtkPGM7ZCsrKWFbZSsrXT1iW2RdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rp
b24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7ZjxnO2YrKylkPSFi
KGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixj
KXt2YXIgZCxlLGY9MCxoPVtdO2lmKHcoYSkpZm9yKGQ9YS5sZW5ndGg7ZjxkO2YrKyllPWIoYVtm
XSxmLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihmIGluIGEpZT1iKGFbZl0sZixjKSxu
dWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGcuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5j
dGlvbihhLGIpe3ZhciBjLGQsZTtpZigic3RyaW5nIj09dHlwZW9mIGImJihjPWFbYl0sYj1hLGE9
Yyksci5pc0Z1bmN0aW9uKGEpKXJldHVybiBkPWYuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlv
bigpe3JldHVybiBgOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAi
SlF1ZXJ5U25pcHBldC5NaW5pZmllZCIsCisgICAgICAgIHRlc3Q6IChyZXNvbHZlLCByZWplY3Qp
ID0+IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChpc1RleHRMaWtlbHlN
aW5pZmllZChqUXVlcnlNaW5pZmllZFNvdXJjZUZyYWdtZW50KSwgImpRdWVyeSBzbmlwcGV0IHNo
b3VsZCBiZSBjbGFzc2lmaWVkIGFzIG1pbmlmaWVkLiIpOworICAgICAgICAgICAgcmVzb2x2ZSgp
OworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2go
KTsKK30KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGVzdCBtaW5pZmljYXRp
b24gZGV0ZWN0aW9uLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
CmluZGV4IDQ3ZGY2OWYuLmJlYTkwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIyIEBACisyMDE2LTA4LTI1ICBOaWtpdGEgVmFzaWx5ZXYgIDxudmFzaWx5ZXZAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1pbmlmaWNhdGlvbiBkZXRlY3Rpb24gcHJv
ZHVjZXMgZmFsc2UgcG9zaXRpdmVzIGZvciBzbWFsbCByZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTE1OQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjc5OTUzMDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wcm92ZSBtaW5pZmljYXRpb24gZGV0ZWN0aW9uIGFsZ29yaXRobS4gTWlu
aWZpZWQgcmVzb3VyY2VzIHJhcmVseSBoYXZlIHRhYnMgYW5kIHVzdWFsbHkKKyAgICAgICAgaGF2
ZSBhIHZlcnkgZmV3IGxpbmUgYnJlYWtzLiBDb3VudGluZyB0YWJzIGFzIDQgc3BhY2VzIGFuZCBs
aW5lIGJyZWFrcyBhcyA4IG1ha2VzIG1pbmlmaWNhdGlvbgorICAgICAgICBkZXRlY3Rpb24gaGV1
cmlzdGljIG1vcmUgYWNjdXJhdGUuIEluY3JlYXNlIHJhdGlvIHRocmVzaG9sZHMgdG8gYWNjb21t
b2RhdGUgZm9yIHRoZSBjaGFuZ2VzIGluCisgICAgICAgIHdoaXRlc3BhY2VTY29yZS4KKworICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanM6CisgICAgICAgIChpc1RleHRM
aWtlbHlNaW5pZmllZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUuX3ByZXBhcmVFZGl0b3JGb3JJbml0aWFsQ29udGVudCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9pc0xpa2VseU1pbmlm
aWVkKTogRGVsZXRlZC4KKwogMjAxNi0wOC0yNCAgRGV2aW4gUm91c3NvICA8ZGNyb3Vzc28rd2Vi
a2l0QGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTaGlmdC1UYWIgc2hvdWxk
IHVuaW5kZW50IHNlbGVjdGVkIGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMKaW5kZXggN2IwYjZjNi4uNjdiM2E2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGls
aXRpZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9V
dGlsaXRpZXMuanMKQEAgLTE0MDIsNiArMTQwMiwzNSBAQCBmdW5jdGlvbiBpc0Z1bmN0aW9uU3Ry
aW5nTmF0aXZlQ29kZShzdHIpCiAgICAgcmV0dXJuIHN0ci5lbmRzV2l0aCgie1xuICAgIFtuYXRp
dmUgY29kZV1cbn0iKTsKIH0KIAorZnVuY3Rpb24gaXNUZXh0TGlrZWx5TWluaWZpZWQoY29udGVu
dCkKK3sKKyAgICBsZXQgd2hpdGVzcGFjZVNjb3JlID0gMDsKKyAgICBsZXQgcmF0aW8gPSAwOwor
CisgICAgbGV0IGkgPSAwOworICAgIGxldCBzaXplID0gTWF0aC5taW4oNTAwMCwgY29udGVudC5s
ZW5ndGgpOworICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGxldCBjaGFyID0g
Y29udGVudFtpXTsKKworICAgICAgICBpZiAoY2hhciA9PT0gIiAiKQorICAgICAgICAgICAgd2hp
dGVzcGFjZVNjb3JlKys7CisgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09ICJcdCIpCisgICAgICAg
ICAgICB3aGl0ZXNwYWNlU2NvcmUgKz0gNDsKKyAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gIlxu
IikKKyAgICAgICAgICAgIHdoaXRlc3BhY2VTY29yZSArPSA4OworCisgICAgICAgIGlmIChpID49
IDUwMCkgeworICAgICAgICAgICAgcmF0aW8gPSB3aGl0ZXNwYWNlU2NvcmUgLyBpOworICAgICAg
ICAgICAgaWYgKHJhdGlvIDwgMC4xKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmF0aW8gPSB3aGl0ZXNwYWNlU2NvcmUgLyBpOworCisgICAg
cmV0dXJuIHJhdGlvIDwgMC4yOworfQorCiBmdW5jdGlvbiBkb3VibGVRdW90ZWRTdHJpbmcoc3Ry
KQogewogICAgIHJldHVybiAiXCIiICsgc3RyLnJlcGxhY2UoL1xcL2csICJcXFxcIikucmVwbGFj
ZSgvIi9nLCAiXFxcIiIpICsgIlwiIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMK
aW5kZXggMTVmNmRiMDUuLjQyMzBlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9y
LmpzCkBAIC0zNjQsMjYgKzM2NCw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ciA9IGNsYXNzIFNvdXJjZUNvZGVUZXh0RWRpdG9yIGV4dGVuZHMgV2ViSW5zcGVjCiAgICAgICAg
ICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludE1hcFtsaW5lSW5mby5saW5lTnVtYmVyXTsKICAg
ICB9CiAKLSAgICBfaXNMaWtlbHlNaW5pZmllZChjb250ZW50KQotICAgIHsKLSAgICAgICAgbGV0
IHdoaXRlU3BhY2VDb3VudCA9IDA7Ci0gICAgICAgIGxldCByYXRpbyA9IDA7Ci0KLSAgICAgICAg
Zm9yIChsZXQgaSA9IDAsIHNpemUgPSBNYXRoLm1pbig1MDAwLCBjb250ZW50Lmxlbmd0aCk7IGkg
PCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGxldCBjaGFyID0gY29udGVudFtpXTsKLSAgICAg
ICAgICAgIGlmIChjaGFyID09PSAiICIgfHwgY2hhciA9PT0gIlxuIiB8fCBjaGFyID09PSAiXHQi
KQotICAgICAgICAgICAgICAgIHdoaXRlU3BhY2VDb3VudCsrOwotCi0gICAgICAgICAgICBpZiAo
aSA+PSA1MDApIHsKLSAgICAgICAgICAgICAgICByYXRpbyA9IHdoaXRlU3BhY2VDb3VudCAvIGk7
Ci0gICAgICAgICAgICAgICAgaWYgKHJhdGlvIDwgMC4wNSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
cmF0aW8gPCAwLjE7Ci0gICAgfQotCiAgICAgX3BvcHVsYXRlV2l0aENvbnRlbnQoY29udGVudCkK
ICAgICB7CiAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50IHx8ICIiOwpAQCAtNDY0LDcgKzQ0NCw3
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGNsYXNzIFNvdXJjZUNvZGVU
ZXh0RWRpdG9yIGV4dGVuZHMgV2ViSW5zcGVjCiAKICAgICAgICAgLy8gRGVjaWRlIHRvIGF1dG9t
YXRpY2FsbHkgZm9ybWF0IHRoZSBjb250ZW50IGlmIGl0IGxvb2tzIG1pbmlmaWVkIGFuZCBpdCBj
YW4gYmUgZm9ybWF0dGVkLgogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5mb3JtYXR0ZWQp
OwotICAgICAgICBpZiAodGhpcy5jYW5CZUZvcm1hdHRlZCgpICYmIHRoaXMuX2lzTGlrZWx5TWlu
aWZpZWQoY29udGVudCkpIHsKKyAgICAgICAgaWYgKHRoaXMuY2FuQmVGb3JtYXR0ZWQoKSAmJiBp
c1RleHRMaWtlbHlNaW5pZmllZChjb250ZW50KSkgewogICAgICAgICAgICAgdGhpcy5fYXV0b0Zv
cm1hdCA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLl9pc1Byb2JhYmx5TWluaWZpZWQgPSB0cnVl
OwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287139</attachid>
            <date>2016-08-26 13:33:04 -0700</date>
            <delta_ts>2016-09-01 13:45:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12770</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGZjODkwLi45YTAxZWRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgt
MjUgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTWluaWZpY2F0aW9uIGRldGVjdGlvbiBwcm9kdWNlcyBmYWxzZSBwb3NpdGl2
ZXMgZm9yIHNtYWxsIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMTU5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzk5NTMwNj4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci9mb3JtYXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZp
ZWQuaHRtbDogQWRkZWQuCisKIDIwMTYtMDgtMjQgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB1cGRhdGUgZXhwZWN0YXRpb25zIG9mIGlP
UyBzaW11bGF0b3IgV0sxIGNzczMgdGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9mb3JtYXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWU0MDY1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4
dC1saWtlbHktbWluaWZpZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgbWlu
aWZpY2F0aW9uIGRldGVjdGlvbi4KKworCis9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IEZvcm1hdHRp
bmcuaXNMaWtlbHlNaW5pZmllZAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IEphdmFTY3JpcHRTaG9y
dFNuaXBwZXQuVW5taW5pZmllZAorUEFTUzogVGhpcyBzbWFsbCBKYXZhU2NyaXB0IHNuaXBwZXQg
c2hvdWxkIGJlIGNsYXNzaWZpZWQgYXMgdW5taW5pZmllZC4KKworLS0gUnVubmluZyB0ZXN0IGNh
c2U6IEpRdWVyeVNuaXBwZXQuVW5taW5pZmllZAorUEFTUzogalF1ZXJ5IHNuaXBwZXQgc2hvdWxk
IGJlIGNsYXNzaWZpZWQgYXMgdW5taW5pZmllZC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IEpR
dWVyeVNuaXBwZXQuTWluaWZpZWQKK1BBU1M6IGpRdWVyeSBzbmlwcGV0IHNob3VsZCBiZSBjbGFz
c2lmaWVkIGFzIG1pbmlmaWVkLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9pcy10ZXh0LWxpa2VseS1taW5pZmllZC5odG1sIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWE1NDhmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQuaHRt
bApAQCAtMCwwICsxLDEyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9pbnNwZWN0b3It
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgord2luZG93Lm9ubG9hZCA9IHJ1blRlc3Q7CisK
K2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGxldCBzdWl0ZSA9IEluc3BlY3RvclRlc3QuY3JlYXRl
QXN5bmNTdWl0ZSgiRm9ybWF0dGluZy5pc0xpa2VseU1pbmlmaWVkIik7CisKKyAgICBzdWl0ZS5h
ZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJKYXZhU2NyaXB0U2hvcnRTbmlwcGV0LlVubWlu
aWZpZWQiLAorICAgICAgICB0ZXN0OiAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIWlzVGV4dExpa2VseU1pbmlmaWVkKCJ2YXIgeCA9
IDQyO1xudmFyIHkgPSAyNDtcbiIpLCAiVGhpcyBzbWFsbCBKYXZhU2NyaXB0IHNuaXBwZXQgc2hv
dWxkIGJlIGNsYXNzaWZpZWQgYXMgdW5taW5pZmllZC4iKTsKKyAgICAgICAgICAgIHJlc29sdmUo
KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgbGV0IGpxdWVyeVNvdXJjZUZyYWdtZW50ID0g
YC8qZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMqLworLyohCisgKiBqUXVlcnkgSmF2YVNj
cmlwdCBMaWJyYXJ5IHYzLjEuMAorICogaHR0cHM6Ly9qcXVlcnkuY29tLworICoKKyAqIEluY2x1
ZGVzIFNpenpsZS5qcworICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0
IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVu
ZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisg
KiBEYXRlOiAyMDE2LTA3LTA3VDIxOjQ0WgorICovCisoIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3Rv
cnkgKSB7CisKKwkidXNlIHN0cmljdCI7CisKKwlpZiAoIHR5cGVvZiBtb2R1bGUgPT09ICJvYmpl
Y3QiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7CisKKwkJLy8gRm9y
IENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciB3
aW5kb3cKKwkJLy8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVy
eS4KKwkJLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgd2luZG93IHdpdGgg
YSBkb2N1bWVudAorCQkvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBt
b2R1bGUuZXhwb3J0cy4KKwkJLy8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNy
ZWF0aW9uIG9mIGEgcmVhbCB3aW5kb3cuCisJCS8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUo
ImpxdWVyeSIpKHdpbmRvdyk7CisJCS8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8u
CisJCW1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID8KKwkJCWZhY3RvcnkoIGdsb2Jh
bCwgdHJ1ZSApIDoKKwkJCWZ1bmN0aW9uKCB3ICkgeworCQkJCWlmICggIXcuZG9jdW1lbnQgKSB7
CisJCQkJCXRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEg
ZG9jdW1lbnQiICk7CisJCQkJfQorCQkJCXJldHVybiBmYWN0b3J5KCB3ICk7CisJCQl9OworCX0g
ZWxzZSB7CisJCWZhY3RvcnkoIGdsb2JhbCApOworCX0KKworLy8gUGFzcyB0aGlzIGlmIHdpbmRv
dyBpcyBub3QgZGVmaW5lZCB5ZXQKK30gKSggdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIg
PyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHsKKworLy8gRWRn
ZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4x
IC0gOSssIGlPUyA2IC0gOS4xCisvLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBj
b2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGUKKy8vIGFyZ3VtZW50
cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYp
LCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uCisvLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBh
dHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay4KKyJ1c2Ugc3RyaWN0IjsKKwordmFy
IGFyciA9IFtdOworCit2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CisKK3ZhciBnZXRQ
cm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKKwordmFyIHNsaWNlID0gYXJyLnNsaWNlOwor
Cit2YXIgY29uY2F0ID0gYXJyLmNvbmNhdDsKKwordmFyIHB1c2ggPSBhcnIucHVzaDsKKwordmFy
IGluZGV4T2YgPSBhcnIuaW5kZXhPZjsKKwordmFyIGNsYXNzMnR5cGUgPSB7fTsKKwordmFyIHRv
U3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZzsKKwordmFyIGhhc093biA9IGNsYXNzMnR5cGUu
aGFzT3duUHJvcGVydHk7CisKK3ZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nOworCit2
YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApOworCit2
YXIgc3VwcG9ydCA9IHt9O2A7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5h
bWU6ICJKUXVlcnlTbmlwcGV0LlVubWluaWZpZWQiLAorICAgICAgICB0ZXN0OiAocmVzb2x2ZSwg
cmVqZWN0KSA9PiB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIWlzVGV4
dExpa2VseU1pbmlmaWVkKGpxdWVyeVNvdXJjZUZyYWdtZW50KSwgImpRdWVyeSBzbmlwcGV0IHNo
b3VsZCBiZSBjbGFzc2lmaWVkIGFzIHVubWluaWZpZWQuIik7CisgICAgICAgICAgICByZXNvbHZl
KCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGxldCBqUXVlcnlNaW5pZmllZFNvdXJjZUZy
YWdtZW50ID0gYC8qISBqUXVlcnkgdjMuMS4wIHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1
ZXJ5Lm9yZy9saWNlbnNlICovCishZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7Im9iamVjdCI9
PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4
cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93
IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3Jl
dHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxm
dW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1PYmplY3Qu
Z2V0UHJvdG90eXBlT2YsZj1jLnNsaWNlLGc9Yy5jb25jYXQsaD1jLnB1c2gsaT1jLmluZGV4T2Ys
aj17fSxrPWoudG9TdHJpbmcsbD1qLmhhc093blByb3BlcnR5LG09bC50b1N0cmluZyxuPW0uY2Fs
bChPYmplY3QpLG89e307ZnVuY3Rpb24gcChhLGIpe2I9Ynx8ZDt2YXIgYz1iLmNyZWF0ZUVsZW1l
bnQoInNjcmlwdCIpO2MudGV4dD1hLGIuaGVhZC5hcHBlbmRDaGlsZChjKS5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKGMpfXZhciBxPSIzLjEuMCIscj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgci5m
bi5pbml0KGEsYil9LHM9L15bc++7v8KgXSt8W3Pvu7/CoF0rJC9nLHQ9L14tbXMtLyx1PS8tKFth
LXpdKS9nLHY9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTtyLmZuPXIucHJv
dG90eXBlPXtqcXVlcnk6cSxjb25zdHJ1Y3RvcjpyLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24o
KXtyZXR1cm4gZi5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/YTww
P3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpmLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5j
dGlvbihhKXt2YXIgYj1yLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2
T2JqZWN0PXRoaXMsYn0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gci5lYWNoKHRoaXMsYSl9LG1h
cDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soci5tYXAodGhpcyxmdW5jdGlvbihi
LGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlz
LnB1c2hTdGFjayhmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1
bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKGE8MD9iOjApO3JldHVybiB0aGlzLnB1
c2hTdGFjayhjPj0wJiZjPGI/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOmgsc29ydDpjLnNvcnQsc3Bs
aWNlOmMuc3BsaWNlfSxyLmV4dGVuZD1yLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGIsYyxk
LGUsZixnPWFyZ3VtZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxqPSExO2Zvcigi
Ym9vbGVhbiI9PXR5cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKyspLCJvYmplY3Qi
PT10eXBlb2YgZ3x8ci5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTto
PGk7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2Jd
LGchPT1kJiYoaiYmZCYmKHIuaXNQbGFpbk9iamVjdChkKXx8KGU9ci5pc0FycmF5KGQpKSk/KGU/
KGU9ITEsZj1jJiZyLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZyLmlzUGxhaW5PYmplY3QoYyk/Yzp7
fSxnW2JdPXIuZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxy
LmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisocStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9EL2cs
IiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29w
OmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1y
LnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1
cm4gbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7dmFyIGI9ci50
eXBlKGEpO3JldHVybigibnVtYmVyIj09PWJ8fCJzdHJpbmciPT09YikmJiFpc05hTihhLXBhcnNl
RmxvYXQoYSkpfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiLGM7cmV0dXJuISghYXx8
IltvYmplY3QgT2JqZWN0XSIhPT1rLmNhbGwoYSkpJiYoIShiPWUoYSkpfHwoYz1sLmNhbGwoYiwi
Y29uc3RydWN0b3IiKSYmYi5jb25zdHJ1Y3RvciwiZnVuY3Rpb24iPT10eXBlb2YgYyYmbS5jYWxs
KGMpPT09bikpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0
dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2Jq
ZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2pbay5jYWxsKGEpXXx8Im9iamVj
dCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7cChhKX0sY2FtZWxDYXNlOmZ1bmN0
aW9uKGEpe3JldHVybiBhLnJlcGxhY2UodCwibXMtIikucmVwbGFjZSh1LHYpfSxub2RlTmFtZTpm
dW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9
PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYodyhhKSl7
Zm9yKGM9YS5sZW5ndGg7ZDxjO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWt9
ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1cm4g
YX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShzLCIi
KX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJih3
KE9iamVjdChhKSk/ci5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6aC5jYWxsKGMs
YSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsPT1iPy0xOmkuY2FsbChi
LGEsYyl9LG1lcmdlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPStiLmxlbmd0aCxkPTAsZT1hLmxl
bmd0aDtkPGM7ZCsrKWFbZSsrXT1iW2RdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rp
b24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7ZjxnO2YrKylkPSFi
KGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixj
KXt2YXIgZCxlLGY9MCxoPVtdO2lmKHcoYSkpZm9yKGQ9YS5sZW5ndGg7ZjxkO2YrKyllPWIoYVtm
XSxmLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihmIGluIGEpZT1iKGFbZl0sZixjKSxu
dWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGcuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5j
dGlvbihhLGIpe3ZhciBjLGQsZTtpZigic3RyaW5nIj09dHlwZW9mIGImJihjPWFbYl0sYj1hLGE9
Yyksci5pc0Z1bmN0aW9uKGEpKXJldHVybiBkPWYuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlv
bigpe3JldHVybiBgOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAi
SlF1ZXJ5U25pcHBldC5NaW5pZmllZCIsCisgICAgICAgIHRlc3Q6IChyZXNvbHZlLCByZWplY3Qp
ID0+IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdChpc1RleHRMaWtlbHlN
aW5pZmllZChqUXVlcnlNaW5pZmllZFNvdXJjZUZyYWdtZW50KSwgImpRdWVyeSBzbmlwcGV0IHNo
b3VsZCBiZSBjbGFzc2lmaWVkIGFzIG1pbmlmaWVkLiIpOworICAgICAgICAgICAgcmVzb2x2ZSgp
OworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2go
KTsKK30KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGVzdCBtaW5pZmljYXRp
b24gZGV0ZWN0aW9uLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
CmluZGV4IDQ3ZGY2OWYuLmJlYTkwY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIyIEBACisyMDE2LTA4LTI1ICBOaWtpdGEgVmFzaWx5ZXYgIDxudmFzaWx5ZXZAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1pbmlmaWNhdGlvbiBkZXRlY3Rpb24gcHJv
ZHVjZXMgZmFsc2UgcG9zaXRpdmVzIGZvciBzbWFsbCByZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTE1OQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMjc5OTUzMDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wcm92ZSBtaW5pZmljYXRpb24gZGV0ZWN0aW9uIGFsZ29yaXRobS4gTWlu
aWZpZWQgcmVzb3VyY2VzIHJhcmVseSBoYXZlIHRhYnMgYW5kIHVzdWFsbHkKKyAgICAgICAgaGF2
ZSBhIHZlcnkgZmV3IGxpbmUgYnJlYWtzLiBDb3VudGluZyB0YWJzIGFzIDQgc3BhY2VzIGFuZCBs
aW5lIGJyZWFrcyBhcyA4IG1ha2VzIG1pbmlmaWNhdGlvbgorICAgICAgICBkZXRlY3Rpb24gaGV1
cmlzdGljIG1vcmUgYWNjdXJhdGUuIEluY3JlYXNlIHJhdGlvIHRocmVzaG9sZHMgdG8gYWNjb21t
b2RhdGUgZm9yIHRoZSBjaGFuZ2VzIGluCisgICAgICAgIHdoaXRlc3BhY2VTY29yZS4KKworICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanM6CisgICAgICAgIChpc1RleHRM
aWtlbHlNaW5pZmllZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUuX3ByZXBhcmVFZGl0b3JGb3JJbml0aWFsQ29udGVudCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9pc0xpa2VseU1pbmlm
aWVkKTogRGVsZXRlZC4KKwogMjAxNi0wOC0yNCAgRGV2aW4gUm91c3NvICA8ZGNyb3Vzc28rd2Vi
a2l0QGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTaGlmdC1UYWIgc2hvdWxk
IHVuaW5kZW50IHNlbGVjdGVkIGxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0Jhc2UvVXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9VdGlsaXRpZXMuanMKaW5kZXggN2IwYjZjNi4uYzQ4MDcyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9VdGls
aXRpZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9V
dGlsaXRpZXMuanMKQEAgLTE0MDIsNiArMTQwMiwyOSBAQCBmdW5jdGlvbiBpc0Z1bmN0aW9uU3Ry
aW5nTmF0aXZlQ29kZShzdHIpCiAgICAgcmV0dXJuIHN0ci5lbmRzV2l0aCgie1xuICAgIFtuYXRp
dmUgY29kZV1cbn0iKTsKIH0KIAorZnVuY3Rpb24gaXNUZXh0TGlrZWx5TWluaWZpZWQoY29udGVu
dCkKK3sKKyAgICBjb25zdCBhdXRvRm9ybWF0TWF4Q2hhcmFjdGVyc1RvQ2hlY2sgPSA1MDAwOwor
ICAgIGNvbnN0IGF1dG9Gb3JtYXRXaGl0ZXNwYWNlUmF0aW8gPSAwLjI7IC8vIDIwJQorCisgICAg
bGV0IHdoaXRlc3BhY2VTY29yZSA9IDA7CisgICAgbGV0IHNpemUgPSBNYXRoLm1pbihhdXRvRm9y
bWF0TWF4Q2hhcmFjdGVyc1RvQ2hlY2ssIGNvbnRlbnQubGVuZ3RoKTsKKworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGxldCBjaGFyID0gY29udGVudFtpXTsK
KworICAgICAgICBpZiAoY2hhciA9PT0gIiAiKQorICAgICAgICAgICAgd2hpdGVzcGFjZVNjb3Jl
Kys7CisgICAgICAgIGVsc2UgaWYgKGNoYXIgPT09ICJcdCIpCisgICAgICAgICAgICB3aGl0ZXNw
YWNlU2NvcmUgKz0gNDsKKyAgICAgICAgZWxzZSBpZiAoY2hhciA9PT0gIlxuIikKKyAgICAgICAg
ICAgIHdoaXRlc3BhY2VTY29yZSArPSA4OworICAgIH0KKworICAgIGxldCByYXRpbyA9IHdoaXRl
c3BhY2VTY29yZSAvIHNpemU7CisgICAgcmV0dXJuIHJhdGlvIDwgYXV0b0Zvcm1hdFdoaXRlc3Bh
Y2VSYXRpbzsKK30KKwogZnVuY3Rpb24gZG91YmxlUXVvdGVkU3RyaW5nKHN0cikKIHsKICAgICBy
ZXR1cm4gIlwiIiArIHN0ci5yZXBsYWNlKC9cXC9nLCAiXFxcXCIpLnJlcGxhY2UoLyIvZywgIlxc
XCIiKSArICJcIiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCmluZGV4IDE1ZjZk
YjA1Li40MjMwZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwpAQCAtMzY0
LDI2ICszNjQsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFzcyBT
b3VyY2VDb2RlVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3BlYwogICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUluZm8ubGluZU51bWJlcl07CiAgICAgfQogCi0gICAg
X2lzTGlrZWx5TWluaWZpZWQoY29udGVudCkKLSAgICB7Ci0gICAgICAgIGxldCB3aGl0ZVNwYWNl
Q291bnQgPSAwOwotICAgICAgICBsZXQgcmF0aW8gPSAwOwotCi0gICAgICAgIGZvciAobGV0IGkg
PSAwLCBzaXplID0gTWF0aC5taW4oNTAwMCwgY29udGVudC5sZW5ndGgpOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICBsZXQgY2hhciA9IGNvbnRlbnRbaV07Ci0gICAgICAgICAgICBpZiAo
Y2hhciA9PT0gIiAiIHx8IGNoYXIgPT09ICJcbiIgfHwgY2hhciA9PT0gIlx0IikKLSAgICAgICAg
ICAgICAgICB3aGl0ZVNwYWNlQ291bnQrKzsKLQotICAgICAgICAgICAgaWYgKGkgPj0gNTAwKSB7
Ci0gICAgICAgICAgICAgICAgcmF0aW8gPSB3aGl0ZVNwYWNlQ291bnQgLyBpOwotICAgICAgICAg
ICAgICAgIGlmIChyYXRpbyA8IDAuMDUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJhdGlvIDwgMC4x
OwotICAgIH0KLQogICAgIF9wb3B1bGF0ZVdpdGhDb250ZW50KGNvbnRlbnQpCiAgICAgewogICAg
ICAgICBjb250ZW50ID0gY29udGVudCB8fCAiIjsKQEAgLTQ2NCw3ICs0NDQsNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFzcyBTb3VyY2VDb2RlVGV4dEVkaXRvciBl
eHRlbmRzIFdlYkluc3BlYwogCiAgICAgICAgIC8vIERlY2lkZSB0byBhdXRvbWF0aWNhbGx5IGZv
cm1hdCB0aGUgY29udGVudCBpZiBpdCBsb29rcyBtaW5pZmllZCBhbmQgaXQgY2FuIGJlIGZvcm1h
dHRlZC4KICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuZm9ybWF0dGVkKTsKLSAgICAgICAg
aWYgKHRoaXMuY2FuQmVGb3JtYXR0ZWQoKSAmJiB0aGlzLl9pc0xpa2VseU1pbmlmaWVkKGNvbnRl
bnQpKSB7CisgICAgICAgIGlmICh0aGlzLmNhbkJlRm9ybWF0dGVkKCkgJiYgaXNUZXh0TGlrZWx5
TWluaWZpZWQoY29udGVudCkpIHsKICAgICAgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXQgPSB0cnVl
OwogICAgICAgICAgICAgdGhpcy5faXNQcm9iYWJseU1pbmlmaWVkID0gdHJ1ZTsKICAgICAgICAg
fQo=
</data>
<flag name="review"
          id="310629"
          type_id="1"
          status="+"
          setter="bburg"
    />
    <flag name="commit-queue"
          id="310630"
          type_id="3"
          status="-"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287671</attachid>
            <date>2016-09-01 13:45:49 -0700</date>
            <delta_ts>2016-09-01 14:06:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12747</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2NGZjODkwLi41OTQzZDRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDkt
MDEgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogTWluaWZpY2F0aW9uIGRldGVjdGlvbiBwcm9kdWNlcyBmYWxzZSBwb3NpdGl2
ZXMgZm9yIHNtYWxsIHJlc291cmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYxMTU5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzk5NTMwNj4K
KworICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBCdXJnLgorCisgICAgICAgICogaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9pcy10ZXh0LWxpa2VseS1taW5pZmllZC5o
dG1sOiBBZGRlZC4KKwogMjAxNi0wOC0yNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0ZSBleHBlY3RhdGlvbnMgb2YgaU9TIHNp
bXVsYXRvciBXSzEgY3NzMyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvaXMtdGV4dC1saWtlbHktbWluaWZpZWQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZTQwNjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9pcy10ZXh0LWxp
a2VseS1taW5pZmllZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBtaW5pZmlj
YXRpb24gZGV0ZWN0aW9uLgorCisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogRm9ybWF0dGluZy5p
c0xpa2VseU1pbmlmaWVkCistLSBSdW5uaW5nIHRlc3QgY2FzZTogSmF2YVNjcmlwdFNob3J0U25p
cHBldC5Vbm1pbmlmaWVkCitQQVNTOiBUaGlzIHNtYWxsIEphdmFTY3JpcHQgc25pcHBldCBzaG91
bGQgYmUgY2xhc3NpZmllZCBhcyB1bm1pbmlmaWVkLgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTog
SlF1ZXJ5U25pcHBldC5Vbm1pbmlmaWVkCitQQVNTOiBqUXVlcnkgc25pcHBldCBzaG91bGQgYmUg
Y2xhc3NpZmllZCBhcyB1bm1pbmlmaWVkLgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogSlF1ZXJ5
U25pcHBldC5NaW5pZmllZAorUEFTUzogalF1ZXJ5IHNuaXBwZXQgc2hvdWxkIGJlIGNsYXNzaWZp
ZWQgYXMgbWluaWZpZWQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3Jt
YXR0aW5nL2lzLXRleHQtbGlrZWx5LW1pbmlmaWVkLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9pcy10ZXh0LWxpa2VseS1taW5pZmllZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYmZiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9pcy10ZXh0LWxpa2VseS1taW5pZmllZC5odG1sCkBA
IC0wLDAgKzEsMTE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3Vp
dGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZUFzeW5jU3VpdGUoIkZvcm1hdHRpbmcuaXNMaWtlbHlN
aW5pZmllZCIpOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiSmF2
YVNjcmlwdFNob3J0U25pcHBldC5Vbm1pbmlmaWVkIiwKKyAgICAgICAgdGVzdDogKHJlc29sdmUs
IHJlamVjdCkgPT4geworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFpc1Rl
eHRMaWtlbHlNaW5pZmllZCgidmFyIHggPSA0MjtcbnZhciB5ID0gMjQ7XG4iKSwgIlRoaXMgc21h
bGwgSmF2YVNjcmlwdCBzbmlwcGV0IHNob3VsZCBiZSBjbGFzc2lmaWVkIGFzIHVubWluaWZpZWQu
Iik7CisgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGxl
dCBqcXVlcnlTb3VyY2VGcmFnbWVudCA9IGAvKmVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJz
Ki8KKy8qIQorICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My4xLjAKKyAqIGh0dHBzOi8v
anF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHBzOi8vc2l6emxl
anMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29u
dHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHBzOi8v
anF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogMjAxNi0wNy0wN1QyMTo0NFoKKyAqLwor
KCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkgeworCisJInVzZSBzdHJpY3QiOworCisJaWYg
KCB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09
ICJvYmplY3QiICkgeworCisJCS8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZp
cm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgd2luZG93CisJCS8vIGlzIHByZXNlbnQsIGV4ZWN1dGUg
dGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCisJCS8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBk
byBub3QgaGF2ZSBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQKKwkJLy8gKHN1Y2ggYXMgTm9kZS5q
cyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuCisJCS8vIFRoaXMgYWNjZW50
dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgd2luZG93LgorCQkvLyBl
LmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKCJqcXVlcnkiKSh3aW5kb3cpOworCQkvLyBTZWUgdGlj
a2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLgorCQltb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1
bWVudCA/CisJCQlmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6CisJCQlmdW5jdGlvbiggdyApIHsK
KwkJCQlpZiAoICF3LmRvY3VtZW50ICkgeworCQkJCQl0aHJvdyBuZXcgRXJyb3IoICJqUXVlcnkg
cmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50IiApOworCQkJCX0KKwkJCQlyZXR1cm4g
ZmFjdG9yeSggdyApOworCQkJfTsKKwl9IGVsc2UgeworCQlmYWN0b3J5KCBnbG9iYWwgKTsKKwl9
CisKKy8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0Cit9ICkoIHR5cGVv
ZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRv
dywgbm9HbG9iYWwgKSB7CisKKy8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1
KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMQorLy8gdGhyb3cgZXhj
ZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2Vz
IHN0cmljdCBtb2RlCisvLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1
dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vbgor
Ly8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxv
Y2suCisidXNlIHN0cmljdCI7CisKK3ZhciBhcnIgPSBbXTsKKwordmFyIGRvY3VtZW50ID0gd2lu
ZG93LmRvY3VtZW50OworCit2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CisK
K3ZhciBzbGljZSA9IGFyci5zbGljZTsKKwordmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7CisKK3Zh
ciBwdXNoID0gYXJyLnB1c2g7CisKK3ZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7CisKK3ZhciBj
bGFzczJ0eXBlID0ge307CisKK3ZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7CisK
K3ZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5OworCit2YXIgZm5Ub1N0cmlu
ZyA9IGhhc093bi50b1N0cmluZzsKKwordmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0
cmluZy5jYWxsKCBPYmplY3QgKTsKKwordmFyIHN1cHBvcnQgPSB7fTtgOworCisgICAgc3VpdGUu
YWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiSlF1ZXJ5U25pcHBldC5Vbm1pbmlmaWVkIiwK
KyAgICAgICAgdGVzdDogKHJlc29sdmUsIHJlamVjdCkgPT4geworICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5leHBlY3RUaGF0KCFpc1RleHRMaWtlbHlNaW5pZmllZChqcXVlcnlTb3VyY2VGcmFn
bWVudCksICJqUXVlcnkgc25pcHBldCBzaG91bGQgYmUgY2xhc3NpZmllZCBhcyB1bm1pbmlmaWVk
LiIpOworICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBs
ZXQgalF1ZXJ5TWluaWZpZWRTb3VyY2VGcmFnbWVudCA9IGAvKiEgalF1ZXJ5IHYzLjEuMCB8IChj
KSBqUXVlcnkgRm91bmRhdGlvbiB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLworIWZ1bmN0aW9uKGEs
Yil7InVzZSBzdHJpY3QiOyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9m
IG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlv
bihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdp
bmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5
cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9
W10sZD1hLmRvY3VtZW50LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGY9Yy5zbGljZSxnPWMuY29u
Y2F0LGg9Yy5wdXNoLGk9Yy5pbmRleE9mLGo9e30saz1qLnRvU3RyaW5nLGw9ai5oYXNPd25Qcm9w
ZXJ0eSxtPWwudG9TdHJpbmcsbj1tLmNhbGwoT2JqZWN0KSxvPXt9O2Z1bmN0aW9uIHAoYSxiKXti
PWJ8fGQ7dmFyIGM9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtjLnRleHQ9YSxiLmhlYWQuYXBw
ZW5kQ2hpbGQoYykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKX12YXIgcT0iMy4xLjAiLHI9ZnVu
Y3Rpb24oYSxiKXtyZXR1cm4gbmV3IHIuZm4uaW5pdChhLGIpfSxzPS9eW3Pvu7/CoF0rfFtz77u/
wqBdKyQvZyx0PS9eLW1zLS8sdT0vLShbYS16XSkvZyx2PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIu
dG9VcHBlckNhc2UoKX07ci5mbj1yLnByb3RvdHlwZT17anF1ZXJ5OnEsY29uc3RydWN0b3I6cixs
ZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGYuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0
aW9uKGEpe3JldHVybiBudWxsIT1hP2E8MD90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06Zi5j
YWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9ci5tZXJnZSh0aGlzLmNvbnN0
cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGJ9LGVhY2g6ZnVuY3Rpb24oYSl7
cmV0dXJuIHIuZWFjaCh0aGlzLGEpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0
YWNrKHIubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xp
Y2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5hcHBseSh0aGlzLGFyZ3VtZW50
cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSth
KyhhPDA/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYzxiP1t0aGlzW2NdXTpbXSl9
LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3Io
KX0scHVzaDpoLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sci5leHRlbmQ9ci5mbi5leHRl
bmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFy
Z3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3Vt
ZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fHIuaXNGdW5jdGlvbihnKXx8KGc9
e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aDxpO2grKylpZihudWxsIT0oYT1hcmd1bWVudHNbaF0p
KWZvcihiIGluIGEpYz1nW2JdLGQ9YVtiXSxnIT09ZCYmKGomJmQmJihyLmlzUGxhaW5PYmplY3Qo
ZCl8fChlPXIuaXNBcnJheShkKSkpPyhlPyhlPSExLGY9YyYmci5pc0FycmF5KGMpP2M6W10pOmY9
YyYmci5pc1BsYWluT2JqZWN0KGMpP2M6e30sZ1tiXT1yLmV4dGVuZChqLGYsZCkpOnZvaWQgMCE9
PWQmJihnW2JdPWQpKTtyZXR1cm4gZ30sci5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHErTWF0
aC5yYW5kb20oKSkucmVwbGFjZSgvRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGEp
e3Rocm93IG5ldyBFcnJvcihhKX0sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlv
bihhKXtyZXR1cm4iZnVuY3Rpb24iPT09ci50eXBlKGEpfSxpc0FycmF5OkFycmF5LmlzQXJyYXks
aXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1l
cmljOmZ1bmN0aW9uKGEpe3ZhciBiPXIudHlwZShhKTtyZXR1cm4oIm51bWJlciI9PT1ifHwic3Ry
aW5nIj09PWIpJiYhaXNOYU4oYS1wYXJzZUZsb2F0KGEpKX0saXNQbGFpbk9iamVjdDpmdW5jdGlv
bihhKXt2YXIgYixjO3JldHVybiEoIWF8fCJbb2JqZWN0IE9iamVjdF0iIT09ay5jYWxsKGEpKSYm
KCEoYj1lKGEpKXx8KGM9bC5jYWxsKGIsImNvbnN0cnVjdG9yIikmJmIuY29uc3RydWN0b3IsImZ1
bmN0aW9uIj09dHlwZW9mIGMmJm0uY2FsbChjKT09PW4pKX0saXNFbXB0eU9iamVjdDpmdW5jdGlv
bihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEp
e3JldHVybiBudWxsPT1hP2ErIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBl
b2YgYT9qW2suY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9u
KGEpe3AoYSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHQsIm1zLSIp
LnJlcGxhY2UodSx2KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYm
YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9u
KGEsYil7dmFyIGMsZD0wO2lmKHcoYSkpe2ZvcihjPWEubGVuZ3RoO2Q8YztkKyspaWYoYi5jYWxs
KGFbZF0sZCxhW2RdKT09PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxk
LGFbZF0pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9
PWE/IiI6KGErIiIpLnJlcGxhY2UocywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBj
PWJ8fFtdO3JldHVybiBudWxsIT1hJiYodyhPYmplY3QoYSkpP3IubWVyZ2UoYywic3RyaW5nIj09
dHlwZW9mIGE/W2FdOmEpOmguY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXty
ZXR1cm4gbnVsbD09Yj8tMTppLmNhbGwoYixhLGMpfSxtZXJnZTpmdW5jdGlvbihhLGIpe2Zvcih2
YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7ZDxjO2QrKylhW2UrK109YltkXTtyZXR1cm4g
YS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1h
Lmxlbmd0aCxoPSFjO2Y8ZztmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0
dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPTAsaD1bXTtpZih3KGEpKWZvcihk
PWEubGVuZ3RoO2Y8ZDtmKyspZT1iKGFbZl0sZixjKSxudWxsIT1lJiZoLnB1c2goZSk7ZWxzZSBm
b3IoZiBpbiBhKWU9YihhW2ZdLGYsYyksbnVsbCE9ZSYmaC5wdXNoKGUpO3JldHVybiBnLmFwcGx5
KFtdLGgpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7aWYoInN0cmluZyI9
PXR5cGVvZiBiJiYoYz1hW2JdLGI9YSxhPWMpLHIuaXNGdW5jdGlvbihhKSlyZXR1cm4gZD1mLmNh
bGwoYXJndW1lbnRzLDIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gYDsKKworICAgIHN1aXRlLmFkZFRl
c3RDYXNlKHsKKyAgICAgICAgbmFtZTogIkpRdWVyeVNuaXBwZXQuTWluaWZpZWQiLAorICAgICAg
ICB0ZXN0OiAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmV4cGVjdFRoYXQoaXNUZXh0TGlrZWx5TWluaWZpZWQoalF1ZXJ5TWluaWZpZWRTb3VyY2VGcmFn
bWVudCksICJqUXVlcnkgc25pcHBldCBzaG91bGQgYmUgY2xhc3NpZmllZCBhcyBtaW5pZmllZC4i
KTsKKyAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3Vp
dGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7Cit9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPHA+VGVzdCBtaW5pZmljYXRpb24gZGV0ZWN0aW9u
LjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDQ3ZGY2
OWYuLjU2NzdiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisy
MDE2LTA5LTAxICBOaWtpdGEgVmFzaWx5ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IE1pbmlmaWNhdGlvbiBkZXRlY3Rpb24gcHJvZHVjZXMgZmFsc2Ug
cG9zaXRpdmVzIGZvciBzbWFsbCByZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTE1OQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjc5
OTUzMDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKworICAgICAgICBJbXBy
b3ZlIG1pbmlmaWNhdGlvbiBkZXRlY3Rpb24gYWxnb3JpdGhtLiBNaW5pZmllZCByZXNvdXJjZXMg
cmFyZWx5IGhhdmUgdGFicyBhbmQgdXN1YWxseQorICAgICAgICBoYXZlIGEgdmVyeSBmZXcgbGlu
ZSBicmVha3MuIENvdW50aW5nIHRhYnMgYXMgNCBzcGFjZXMgYW5kIGxpbmUgYnJlYWtzIGFzIDgg
bWFrZXMgbWluaWZpY2F0aW9uCisgICAgICAgIGRldGVjdGlvbiBoZXVyaXN0aWMgbW9yZSBhY2N1
cmF0ZS4gSW5jcmVhc2UgcmF0aW8gdGhyZXNob2xkcyB0byBhY2NvbW1vZGF0ZSBmb3IgdGhlIGNo
YW5nZXMgaW4KKyAgICAgICAgd2hpdGVzcGFjZVNjb3JlLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9CYXNlL1V0aWxpdGllcy5qczoKKyAgICAgICAgKGlzVGV4dExpa2VseU1pbmlmaWVkKToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcHJl
cGFyZUVkaXRvckZvckluaXRpYWxDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2lzTGlrZWx5TWluaWZpZWQpOiBEZWxldGVkLgor
CiAyMDE2LTA4LTI0ICBEZXZpbiBSb3Vzc28gIDxkY3JvdXNzbyt3ZWJraXRAZ21haWwuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNoaWZ0LVRhYiBzaG91bGQgdW5pbmRlbnQgc2VsZWN0
ZWQgbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9VdGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9C
YXNlL1V0aWxpdGllcy5qcwppbmRleCA3YjBiNmM2Li4xZDg5ZWJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1V0aWxpdGllcy5qcwpAQCAt
MTQwMiw2ICsxNDAyLDI5IEBAIGZ1bmN0aW9uIGlzRnVuY3Rpb25TdHJpbmdOYXRpdmVDb2RlKHN0
cikKICAgICByZXR1cm4gc3RyLmVuZHNXaXRoKCJ7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwog
fQogCitmdW5jdGlvbiBpc1RleHRMaWtlbHlNaW5pZmllZChjb250ZW50KQoreworICAgIGNvbnN0
IGF1dG9Gb3JtYXRNYXhDaGFyYWN0ZXJzVG9DaGVjayA9IDUwMDA7CisgICAgY29uc3QgYXV0b0Zv
cm1hdFdoaXRlc3BhY2VSYXRpbyA9IDAuMjsKKworICAgIGxldCB3aGl0ZXNwYWNlU2NvcmUgPSAw
OworICAgIGxldCBzaXplID0gTWF0aC5taW4oYXV0b0Zvcm1hdE1heENoYXJhY3RlcnNUb0NoZWNr
LCBjb250ZW50Lmxlbmd0aCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBsZXQgY2hhciA9IGNvbnRlbnRbaV07CisKKyAgICAgICAgaWYgKGNoYXIgPT09
ICIgIikKKyAgICAgICAgICAgIHdoaXRlc3BhY2VTY29yZSsrOworICAgICAgICBlbHNlIGlmIChj
aGFyID09PSAiXHQiKQorICAgICAgICAgICAgd2hpdGVzcGFjZVNjb3JlICs9IDQ7CisgICAgICAg
IGVsc2UgaWYgKGNoYXIgPT09ICJcbiIpCisgICAgICAgICAgICB3aGl0ZXNwYWNlU2NvcmUgKz0g
ODsKKyAgICB9CisKKyAgICBsZXQgcmF0aW8gPSB3aGl0ZXNwYWNlU2NvcmUgLyBzaXplOworICAg
IHJldHVybiByYXRpbyA8IGF1dG9Gb3JtYXRXaGl0ZXNwYWNlUmF0aW87Cit9CisKIGZ1bmN0aW9u
IGRvdWJsZVF1b3RlZFN0cmluZyhzdHIpCiB7CiAgICAgcmV0dXJuICJcIiIgKyBzdHIucmVwbGFj
ZSgvXFwvZywgIlxcXFwiKS5yZXBsYWNlKC8iL2csICJcXFwiIikgKyAiXCIiOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRl
eHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
b3VyY2VDb2RlVGV4dEVkaXRvci5qcwppbmRleCAxNWY2ZGIwNS4uNDIzMGVhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRl
eHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKQEAgLTM2NCwyNiArMzY0LDYgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3IgZXh0
ZW5kcyBXZWJJbnNwZWMKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50TWFwW2xp
bmVJbmZvLmxpbmVOdW1iZXJdOwogICAgIH0KIAotICAgIF9pc0xpa2VseU1pbmlmaWVkKGNvbnRl
bnQpCi0gICAgewotICAgICAgICBsZXQgd2hpdGVTcGFjZUNvdW50ID0gMDsKLSAgICAgICAgbGV0
IHJhdGlvID0gMDsKLQotICAgICAgICBmb3IgKGxldCBpID0gMCwgc2l6ZSA9IE1hdGgubWluKDUw
MDAsIGNvbnRlbnQubGVuZ3RoKTsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgbGV0IGNo
YXIgPSBjb250ZW50W2ldOwotICAgICAgICAgICAgaWYgKGNoYXIgPT09ICIgIiB8fCBjaGFyID09
PSAiXG4iIHx8IGNoYXIgPT09ICJcdCIpCi0gICAgICAgICAgICAgICAgd2hpdGVTcGFjZUNvdW50
Kys7Ci0KLSAgICAgICAgICAgIGlmIChpID49IDUwMCkgewotICAgICAgICAgICAgICAgIHJhdGlv
ID0gd2hpdGVTcGFjZUNvdW50IC8gaTsKLSAgICAgICAgICAgICAgICBpZiAocmF0aW8gPCAwLjA1
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiByYXRpbyA8IDAuMTsKLSAgICB9Ci0KICAgICBfcG9wdWxh
dGVXaXRoQ29udGVudChjb250ZW50KQogICAgIHsKICAgICAgICAgY29udGVudCA9IGNvbnRlbnQg
fHwgIiI7CkBAIC00NjQsNyArNDQ0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3IgZXh0ZW5kcyBXZWJJbnNwZWMKIAogICAg
ICAgICAvLyBEZWNpZGUgdG8gYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIGNvbnRlbnQgaWYgaXQg
bG9va3MgbWluaWZpZWQgYW5kIGl0IGNhbiBiZSBmb3JtYXR0ZWQuCiAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KCF0aGlzLmZvcm1hdHRlZCk7Ci0gICAgICAgIGlmICh0aGlzLmNhbkJlRm9ybWF0dGVk
KCkgJiYgdGhpcy5faXNMaWtlbHlNaW5pZmllZChjb250ZW50KSkgeworICAgICAgICBpZiAodGhp
cy5jYW5CZUZvcm1hdHRlZCgpICYmIGlzVGV4dExpa2VseU1pbmlmaWVkKGNvbnRlbnQpKSB7CiAg
ICAgICAgICAgICB0aGlzLl9hdXRvRm9ybWF0ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuX2lz
UHJvYmFibHlNaW5pZmllZCA9IHRydWU7CiAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>