<?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>144754</bug_id>
          
          <creation_ts>2015-05-07 13:18:46 -0700</creation_ts>
          <short_desc>Optimize serialization of quoted JSON strings.</short_desc>
          <delta_ts>2015-05-09 18:55:03 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>144784</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1092709</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-07 13:18:46 -0700</bug_when>
    <thetext>JSON.stringify() can do better than calling StringBuilder::append() over and over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092720</commentid>
    <comment_count>1</comment_count>
      <attachid>252615</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-07 13:34:39 -0700</bug_when>
    <thetext>Created attachment 252615
Patch idea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092799</commentid>
    <comment_count>2</comment_count>
      <attachid>252615</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-07 15:32:12 -0700</bug_when>
    <thetext>Comment on attachment 252615
Patch idea

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

I guess I like this. No big deal to build the JSON logic into StringBuilder. We could always refactor to deal with that later if we like.

&gt; Source/WTF/wtf/text/StringBuilder.cpp:364
&gt; +template &lt;typename OutputCharType, typename InputCharType&gt;

We should write out CharacterType and not use CharType.

&gt; Source/WTF/wtf/text/StringBuilder.cpp:369
&gt; +            *(output++) = input[i++];

I don’t get why this is a separate loop. Why can’t we just do one character at a time and use continue and avoid the extra break below?

    if (input[i] &gt; 0x1F &amp;&amp; input[i] != &apos;&quot;&apos; &amp;&amp; input[i] != &apos;\\&apos;) {
        *output++ = input[i];
        continue;
    }

Is there something I’m missing that would make this super slow?

It’s also a little strange that we use indexing for input but pointer math for output.

&gt; Source/WTF/wtf/text/StringBuilder.cpp:374
&gt; +            *(output++) = &apos;\\&apos;;

I think that idiomatically it’s always been *output++ for me, without parentheses.

&gt; Source/WTF/wtf/text/StringBuilder.cpp:402
&gt; +            static const char hexDigits[] = &quot;0123456789abcdef&quot;;

It’s a little strange to use a different approach here than lowerNibbleToASCIIHexDigit does in ASCIICType.h. But this is lowercase hex and that is uppercase, and maybe this way of doing things is faster than what that does.

&gt; Source/WTF/wtf/text/StringBuilder.cpp:407
&gt; +            *(output++) = static_cast&lt;LChar&gt;(hexDigits[(ch &gt;&gt; 12) &amp; 0xF]);
&gt; +            *(output++) = static_cast&lt;LChar&gt;(hexDigits[(ch &gt;&gt; 8) &amp; 0xF]);

I think these are always &apos;0&apos;; we can’t get here unless the character is &lt;= 0x1F;

&gt; Source/WTF/wtf/text/StringBuilder.cpp:417
&gt; +    size_t minimumNewCapacity = length() + 2 + (string.length() * 6);

This could be a much lower value when string.is8Bit() is true. I think it’s worth optimizing that. I don’t think you need parentheses. I think you should explain in a comment both what the 2 and the 6 here mean.

I think the word “minimum” here seems a little strange. As far as I can tell, this is a maximum size, not a minimum. I guess minimum means “before rounding up”?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092883</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-07 17:19:09 -0700</bug_when>
    <thetext>Committed r183961: &lt;http://trac.webkit.org/changeset/183961&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092964</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-05-07 18:36:57 -0700</bug_when>
    <thetext>s/dom/JSON-stringify.html starting timing out after this:
https://build.webkit.org/results/Apple%20Mavericks%20Release%20WK1%20(Tests)/r183961%20(14539)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093014</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-07 20:10:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; s/dom/JSON-stringify.html starting timing out after this:
&gt; https://build.webkit.org/results/Apple%20Mavericks%20Release%20WK1%20(Tests)/
&gt; r183961%20(14539)/results.html

Investigating..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093018</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-07 20:22:18 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 144784</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093057</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-07 23:32:46 -0700</bug_when>
    <thetext>Also this: https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r183976%20(11594)/storage/indexeddb/list-ordering-crash-log.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093097</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-08 00:30:50 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; s/dom/JSON-stringify.html starting timing out after this:
&gt; &gt; https://build.webkit.org/results/Apple%20Mavericks%20Release%20WK1%20(Tests)/
&gt; &gt; r183961%20(14539)/results.html
&gt; 
&gt; Investigating..

Hah, this was happening because I inadvertently made the \uNNNN output be uppercase hexadecimal, and this test was stringifying a JSON object containing all the unicode characters between \u0000 and \uFFFF.

The timeout happened because WebKit spent eons going back and forth with fontd to find a fallback font for every single character in the &quot;Expected \uabcd but got \uABCD etc&quot; message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093099</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-08 00:34:43 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Also this:
&gt; https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/
&gt; r183976%20(11594)/storage/indexeddb/list-ordering-crash-log.txt

This was happening because I integrated the suggestion about a lower (than 6x) fudge factor for 8-bit strings. &quot;\x00&quot; is a valid 8-bit string, and encodes to &quot;\u0000&quot;, so needs 6 characters, not 2. :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093103</commentid>
    <comment_count>10</comment_count>
      <attachid>252697</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-08 00:52:21 -0700</bug_when>
    <thetext>Created attachment 252697
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093105</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-08 00:53:59 -0700</bug_when>
    <thetext>Attachment 252697 did not pass style-queue:


ERROR: Source/WTF/wtf/text/StringBuilder.cpp:402:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WTF/wtf/text/StringBuilder.cpp:408:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093118</commentid>
    <comment_count>12</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-08 01:45:48 -0700</bug_when>
    <thetext>Committed r183988: &lt;http://trac.webkit.org/changeset/183988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093294</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-05-08 13:50:19 -0700</bug_when>
    <thetext>Potential 0.6% regression on JetStream according to the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093384</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-08 19:33:06 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; This was happening because I integrated the suggestion about a lower (than
&gt; 6x) fudge factor for 8-bit strings. &quot;\x00&quot; is a valid 8-bit string, and
&gt; encodes to &quot;\u0000&quot;, so needs 6 characters, not 2. :/

Damn, I realized that was wrong, but only after the fact!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093385</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-08 19:33:21 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Potential 0.6% regression on JetStream according to the bots.

Uh oh!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093473</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-09 18:24:29 -0700</bug_when>
    <thetext>Maybe it was my “continue” suggestion that caused the problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093478</commentid>
    <comment_count>17</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-05-09 18:55:03 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Maybe it was my “continue” suggestion that caused the problem?

I don&apos;t think so. The loop was originally structured that way because it wanted to find the longest possible range to pass to StringBuilder::append(characters, length). The &quot;continue&quot; change was actually a speedup according to run-jsc-benchmarks :)

I can&apos;t reproduce any slowdown on any of the JetStream subtests, nor can I understand what would get slower from this change.

Given that the JetStream bot has quickly gone back up to the &quot;pre-regression&quot; level without reverting this change, I&apos;m inclined to believe that what we saw was a bot hiccup.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252615</attachid>
            <date>2015-05-07 13:34:39 -0700</date>
            <delta_ts>2015-05-08 00:52:21 -0700</delta_ts>
            <desc>Patch idea</desc>
            <filename>bug-144754.diff</filename>
            <type>text/plain</type>
            <size>14498</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDI0M2E5M2QuLjQ2YzA4YjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE1LTA1LTA3ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBzZXJpYWxpemF0aW9uIG9m
IHF1b3RlZCBKU09OIHN0cmluZ3MuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDQ3
NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3B0
aW1pemVkIHRoZSBzZXJpYWxpemF0aW9uIG9mIHF1b3RlZCBzdHJpbmdzIGludG8gSlNPTiBieSBt
b3ZpbmcgdGhlIGxvZ2ljIGludG8KKyAgICAgICAgU3RyaW5nQnVpbGRlciBzbyBpdCBjYW4gbWFr
ZSBzbWFydGVyIGRlY2lzaW9ucyBhYm91dCBidWZmZXJpbmcuCisKKyAgICAgICAgMjUlIHByb2dy
ZXNzaW9uIG9uIEtyYWtlbi9qc29uLXN0cmluZ2lmeS10aW5kZXJib3guCisKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6T2JqZWN0UGF0dGVy
bk5vZGU6OnRvU3RyaW5nKTogVXNlIHRoZSBuZXcgU3RyaW5nQnVpbGRlciBBUEkuCisKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjphcHBlbmRTdHJpbmdUb1N0cmluZ0J1aWxkZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OmFwcGVuZFF1b3RlZFN0cmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKTog
TW92ZWQgdGhlIGJ1bGsgb2YgdGhpcyBsb2dpYworICAgICAgICB0byBTdHJpbmdCdWlsZGVyIGFu
ZCBjYWxsIHRoYXQgZnJvbSBoZXJlLgorCiAyMDE1LTA1LTA1ICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgYnJhbmNoIHdoZW4gYWNjZXNzaW5nIHRo
ZSBjYWxsZWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAppbmRleCAwMjkwYzgxLi4xZTRkOTBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0zMDY5LDcg
KzMwNjksNyBAQCB2b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjp0b1N0cmluZyhTdHJpbmdCdWlsZGVy
JiBidWlsZGVyKSBjb25zdAogICAgIGJ1aWxkZXIuYXBwZW5kKCd7Jyk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlm
IChtX3RhcmdldFBhdHRlcm5zW2ldLndhc1N0cmluZykKLSAgICAgICAgICAgIGFwcGVuZFF1b3Rl
ZEpTT05TdHJpbmdUb0J1aWxkZXIoYnVpbGRlciwgbV90YXJnZXRQYXR0ZXJuc1tpXS5wcm9wZXJ0
eU5hbWUuc3RyaW5nKCkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRRdW90ZWRKU09OU3Ry
aW5nKG1fdGFyZ2V0UGF0dGVybnNbaV0ucHJvcGVydHlOYW1lLnN0cmluZygpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV90YXJnZXRQYXR0ZXJuc1tpXS5wcm9w
ZXJ0eU5hbWUuc3RyaW5nKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnOicpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAppbmRleCA1ODFiZDQ1Li45
OTQwNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cApAQCAtMTA3LDggKzEwNyw2IEBAIHByaXZhdGU6CiAKICAgICBmcmllbmQgY2xhc3MgSG9sZGVy
OwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBj
b25zdCBTdHJpbmcmKTsKLQogICAgIEpTVmFsdWUgdG9KU09OKEpTVmFsdWUsIGNvbnN0IFByb3Bl
cnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYpOwogCiAgICAgZW51bSBTdHJpbmdpZnlSZXN1bHQgeyBT
dHJpbmdpZnlGYWlsZWQsIFN0cmluZ2lmeVN1Y2NlZWRlZCwgU3RyaW5naWZ5RmFpbGVkRHVlVG9V
bmRlZmluZWRWYWx1ZSB9OwpAQCAtMjU1LDcyICsyNTMsNiBAQCBMb2NhbDxVbmtub3duPiBTdHJp
bmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3duPiB2YWx1ZSkKICAgICByZXR1cm4gTG9j
YWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmlu
ZygpKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLXN0YXRpYyB2b2lkIGFw
cGVuZFN0cmluZ1RvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBD
aGFyVHlwZSogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGludCBzdGFydCA9IGk7Ci0gICAgICAgIHdoaWxlIChpIDwg
bGVuZ3RoICYmIChkYXRhW2ldID4gMHgxRiAmJiBkYXRhW2ldICE9ICciJyAmJiBkYXRhW2ldICE9
ICdcXCcpKQotICAgICAgICAgICAgKytpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChkYXRhICsg
c3RhcnQsIGkgLSBzdGFydCk7Ci0gICAgICAgIGlmIChpID49IGxlbmd0aCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBzd2l0Y2ggKGRhdGFbaV0pIHsKLSAgICAgICAgY2FzZSAnXHQnOgot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgndCcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xyJzoKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
J3InKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCduJyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXGYnOgotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnZicpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xiJzoKLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ2InKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcXCcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwn
KTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBoZXhEaWdp
dHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSAgICAgICAgICAgIFVDaGFyIGNoID0gZGF0YVtp
XTsKLSAgICAgICAgICAgIExDaGFyIGhleFtdID0geyAnXFwnLCAndScsIHN0YXRpY19jYXN0PExD
aGFyPihoZXhEaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pLCBzdGF0aWNfY2FzdDxMQ2hhcj4oaGV4
RGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pLCBzdGF0aWNfY2FzdDxMQ2hhcj4oaGV4RGlnaXRzWyhj
aCA+PiA0KSAmIDB4Rl0pLCBzdGF0aWNfY2FzdDxMQ2hhcj4oaGV4RGlnaXRzW2NoICYgMHhGXSkg
fTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGhleCwgV1RGX0FSUkFZX0xFTkdUSChoZXgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIGFwcGVu
ZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7Ci0KLSAgICBpZiAo
bWVzc2FnZS5pczhCaXQoKSkKLSAgICAgICAgYXBwZW5kU3RyaW5nVG9TdHJpbmdCdWlsZGVyKGJ1
aWxkZXIsIG1lc3NhZ2UuY2hhcmFjdGVyczgoKSwgbWVzc2FnZS5sZW5ndGgoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBhcHBlbmRTdHJpbmdUb1N0cmluZ0J1aWxkZXIoYnVpbGRlciwgbWVzc2FnZS5j
aGFyYWN0ZXJzMTYoKSwgbWVzc2FnZS5sZW5ndGgoKSk7Ci0KLSAgICBidWlsZGVyLmFwcGVuZCgn
IicpOwotfQotCi12b2lkIFN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRTdHJpbmcoU3RyaW5nQnVp
bGRlciYgYnVpbGRlciwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBhcHBlbmRRdW90ZWRK
U09OU3RyaW5nVG9CdWlsZGVyKGJ1aWxkZXIsIHZhbHVlKTsKLX0KLQogaW5saW5lIEpTVmFsdWUg
U3RyaW5naWZpZXI6OnRvSlNPTihKU1ZhbHVlIHZhbHVlLCBjb25zdCBQcm9wZXJ0eU5hbWVGb3JG
dW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoIW1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOwpAQCAtMzg1LDcgKzMxNyw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1
bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRlciYKIAog
ICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKICAgICBpZiAodmFsdWUuZ2V0U3RyaW5nKG1fZXhlYywg
c3RyaW5nVmFsdWUpKSB7Ci0gICAgICAgIGFwcGVuZFF1b3RlZFN0cmluZyhidWlsZGVyLCBzdHJp
bmdWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhzdHJpbmdW
YWx1ZSk7CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAgfQogCkBAIC01
NTYsNyArNDg4LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVy
dHkoU3RyaW5naWZpZXImIHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAgICAgc3RyaW5naWZp
ZXIuc3RhcnROZXdMaW5lKGJ1aWxkZXIpOwogCiAgICAgICAgIC8vIEFwcGVuZCB0aGUgcHJvcGVy
dHkgbmFtZS4KLSAgICAgICAgYXBwZW5kUXVvdGVkU3RyaW5nKGJ1aWxkZXIsIHByb3BlcnR5TmFt
ZS5zdHJpbmcoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhwcm9w
ZXJ0eU5hbWUuc3RyaW5nKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgnOicpOwogICAgICAg
ICBpZiAoc3RyaW5naWZpZXIud2lsbEluZGVudCgpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAppbmRl
eCBlYjZkYWFkLi5kNTUwNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5oCkBAIC02Miw4ICs2Miw2IEBAIHByaXZhdGU6CiBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIEpTT05QYXJzZShFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cmluZyBKU09OU3RyaW5naWZ5KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIHVuc2lnbmVk
IGluZGVudCk7CiAKLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kUXVvdGVkSlNPTlN0cmlu
Z1RvQnVpbGRlcihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7Ci0KICAgICAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM4NTBkN2IuLmVlMmNkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTUtMDUtMDcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIE9wdGltaXplIHNlcmlhbGl6YXRpb24gb2YgcXVvdGVkIEpTT04gc3RyaW5ncy4KKyAgICAg
ICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0NDc1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBTdHJpbmdCdWlsZGVyIEFQSSBmb3IgYXBw
ZW5kaW5nIGEgcXVvdGVkIEpTT04gc3RyaW5nLiBUaGlzIGlzIHVzZWQgYnkKKyAgICAgICAgSlNP
Ti5zdHJpbmdpZnkoKSB0byBpbXBsZW1lbnQgZWZmaWNpZW50IGFwcGVuZGluZyBvZiBzdHJpbmdz
IHdoaWxlIGVzY2FwaW5nCisgICAgICAgIHF1b3RlcywgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBc
dTEyMzQtc3R5bGUgY2hhcmFjdGVycy4KKworICAgICAgICBUaGUgbWFpbiBiZW5lZml0IGNvbWVz
IGZyb20gb25seSBkb2luZyBhIHNpbmdsZSBidWZmZXIgZXhwYW5zaW9uIHVwIGZyb250LAorICAg
ICAgICBpbnN0ZWFkIG9mIGRvaW5nIGl0IGV2ZXJ5IHRpbWUgd2UgYXBwZW5kIHNvbWV0aGluZy4g
VGhlIGZ1ZGdlIGZhY3RvciBpcyBwcmV0dHkKKyAgICAgICAgbGFyZ2UsIHNpbmNlIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBvdXRwdXQgY2hhcmFjdGVycyBwZXIgaW5wdXQgY2hhcmFjdGVyIGlzIDYu
CisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdURjo6
YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKToKKyAgICAgICAgKFdURjo6U3RyaW5nQnVp
bGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oOgorCiAyMDE1LTA1LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE5MzE3MTQwPiBbWGNvZGVdIFJlbW92ZSB1c2Fn
ZSBvZiBBc3BlbkZhbWlseS54Y2NvbmZpZyBpbiBTb3VyY2UvCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmNwcAppbmRleCAxNjRiOGMzLi5iMWUyNzU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQnVpbGRlci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkludGVnZXJU
b1N0cmluZ0NvbnZlcnNpb24uaCIKICNpbmNsdWRlICJXVEZTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpAQCAtMzYwLDQgKzM2MSw4NCBAQCB2b2lkIFN0cmluZ0J1aWxkZXI6OnNocmlua1RvRml0KCkK
ICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRDaGFyVHlwZSwgdHlwZW5hbWUg
SW5wdXRDaGFyVHlwZT4KK3N0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5h
bChPdXRwdXRDaGFyVHlwZSomIG91dHB1dCwgY29uc3QgSW5wdXRDaGFyVHlwZSogaW5wdXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgKGlucHV0W2ldID4gMHgxRiAmJiBp
bnB1dFtpXSAhPSAnIicgJiYgaW5wdXRbaV0gIT0gJ1xcJykpCisgICAgICAgICAgICAqKG91dHB1
dCsrKSA9IGlucHV0W2krK107CisgICAgICAgIGlmIChpID49IGxlbmd0aCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzd2l0Y2ggKGlucHV0W2ldKSB7CisgICAgICAgIGNhc2UgJ1x0JzoK
KyAgICAgICAgICAgICoob3V0cHV0KyspID0gJ1xcJzsKKyAgICAgICAgICAgICoob3V0cHV0Kysp
ID0gJ3QnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAg
ICAgICoob3V0cHV0KyspID0gJ1xcJzsKKyAgICAgICAgICAgICoob3V0cHV0KyspID0gJ3InOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgICoob3V0
cHV0KyspID0gJ1xcJzsKKyAgICAgICAgICAgICoob3V0cHV0KyspID0gJ24nOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xmJzoKKyAgICAgICAgICAgICoob3V0cHV0KyspID0g
J1xcJzsKKyAgICAgICAgICAgICoob3V0cHV0KyspID0gJ2YnOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ1xiJzoKKyAgICAgICAgICAgICoob3V0cHV0KyspID0gJ1xcJzsKKyAg
ICAgICAgICAgICoob3V0cHV0KyspID0gJ2InOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJyInOgorICAgICAgICAgICAgKihvdXRwdXQrKykgPSAnXFwnOworICAgICAgICAgICAg
KihvdXRwdXQrKykgPSAnIic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXFwn
OgorICAgICAgICAgICAgKihvdXRwdXQrKykgPSAnXFwnOworICAgICAgICAgICAgKihvdXRwdXQr
KykgPSAnXFwnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzdGF0aWMgY29uc3QgY2hhciBoZXhEaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsK
KyAgICAgICAgICAgIFVDaGFyIGNoID0gaW5wdXRbaV07CisgICAgICAgICAgICAqKG91dHB1dCsr
KSA9ICdcXCc7CisgICAgICAgICAgICAqKG91dHB1dCsrKSA9ICd1JzsKKyAgICAgICAgICAgICoo
b3V0cHV0KyspID0gc3RhdGljX2Nhc3Q8TENoYXI+KGhleERpZ2l0c1soY2ggPj4gMTIpICYgMHhG
XSk7CisgICAgICAgICAgICAqKG91dHB1dCsrKSA9IHN0YXRpY19jYXN0PExDaGFyPihoZXhEaWdp
dHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAqKG91dHB1dCsrKSA9IHN0YXRpY19j
YXN0PExDaGFyPihoZXhEaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7CisgICAgICAgICAgICAqKG91
dHB1dCsrKSA9IHN0YXRpY19jYXN0PExDaGFyPihoZXhEaWdpdHNbY2ggJiAweEZdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN0cmluZ0J1aWxkZXI6
OmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgc2l6
ZV90IG1pbmltdW1OZXdDYXBhY2l0eSA9IGxlbmd0aCgpICsgMiArIChzdHJpbmcubGVuZ3RoKCkg
KiA2KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtaW5pbXVtTmV3Q2FwYWNpdHkgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworCisgICAgaWYgKGlzOEJpdCgpICYmICFzdHJp
bmcuaXM4Qml0KCkpCisgICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hh
cmFjdGVyczgsIHJvdW5kVXBUb1Bvd2VyT2ZUd28obWluaW11bU5ld0NhcGFjaXR5KSk7CisgICAg
ZWxzZQorICAgICAgICByZXNlcnZlQ2FwYWNpdHkocm91bmRVcFRvUG93ZXJPZlR3byhtaW5pbXVt
TmV3Q2FwYWNpdHkpKTsKKworICAgIGlmIChpczhCaXQoKSkgeworICAgICAgICBBU1NFUlQoc3Ry
aW5nLmlzOEJpdCgpKTsKKyAgICAgICAgTENoYXIqIG91dHB1dCA9IG1fYnVmZmVyQ2hhcmFjdGVy
czggKyBtX2xlbmd0aDsKKyAgICAgICAgKihvdXRwdXQrKykgPSAnIic7CisgICAgICAgIGFwcGVu
ZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChvdXRwdXQsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBz
dHJpbmcubGVuZ3RoKCkpOworICAgICAgICAqKG91dHB1dCsrKSA9ICciJzsKKyAgICAgICAgbV9s
ZW5ndGggPSBvdXRwdXQgLSBtX2J1ZmZlckNoYXJhY3RlcnM4OworICAgIH0gZWxzZSB7CisgICAg
ICAgIFVDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoOworICAg
ICAgICAqKG91dHB1dCsrKSA9ICciJzsKKyAgICAgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAg
ICAgICAgICAgIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChvdXRwdXQsIHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVy
czE2KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgICoob3V0cHV0KyspID0gJyInOworICAg
ICAgICBtX2xlbmd0aCA9IG91dHB1dCAtIG1fYnVmZmVyQ2hhcmFjdGVyczE2OworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCmluZGV4
IDkzNDIyYTIuLmJlNWMxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oCkBAIC0x
NTksNiArMTU5LDggQEAgcHVibGljOgogICAgICAgICBhcHBlbmQoVTE2X1RSQUlMKGMpKTsKICAg
ICB9CiAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRRdW90ZWRKU09OU3RyaW5n
KGNvbnN0IFN0cmluZyYpOworCiAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50
PgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFy
YWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKSB7IGFwcGVuZChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJz
Q291bnQgLSAxKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDIyZmJmMy4uNmI1NDYzYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA1LTA3ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFw
cGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBzZXJpYWxpemF0aW9uIG9mIHF1b3RlZCBKU09O
IHN0cmluZ3MuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDQ3NTQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YWNoZTo6RW50cnk6OmFzSlNPTik6IFVzZSB0aGUgbmV3IFN0cmluZ0J1aWxkZXIgQVBJLgorCiAy
MDE1LTA1LTA3ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBh
IGNvdXBsZSBvZiBjYXNlcyB3aGVyZSB0aGUgYmFja0ZvcndhcmRMaXN0U3RhdGUncyBjdXJyZW50
SW5kZXggaXMgbm90IHNldCBjb3JyZWN0bHkgaW4gV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrRm9y
d2FyZExpc3RTdGF0ZSgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCmluZGV4IGMzNGZjNTIuLjczNTBhNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUVudHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVFbnRyeS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJOZXR3b3Jr
Q2FjaGVDb2RlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT05P
YmplY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgpAQCAtMTU5LDcgKzE1OCw3IEBAIHZvaWQgRW50cnk6OmFzSlNPTihTdHJpbmdCdWlsZGVy
JiBqc29uLCBjb25zdCBTdG9yYWdlOjpSZWNvcmRJbmZvJiBpbmZvKSBjb25zdAogewogICAgIGpz
b24uYXBwZW5kTGl0ZXJhbCgie1xuIik7CiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcImhhc2hc
IjogIik7Ci0gICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1f
a2V5Lmhhc2hBc1N0cmluZygpKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcobV9r
ZXkuaGFzaEFzU3RyaW5nKCkpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiLFxuIik7CiAgICAg
anNvbi5hcHBlbmRMaXRlcmFsKCJcImJvZHlTaXplXCI6ICIpOwogICAgIGpzb24uYXBwZW5kTnVt
YmVyKGluZm8uYm9keVNpemUpOwpAQCAtMTY4LDE2ICsxNjcsMTYgQEAgdm9pZCBFbnRyeTo6YXNK
U09OKFN0cmluZ0J1aWxkZXImIGpzb24sIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8mIGluZm8p
IGNvbnN0CiAgICAganNvbi5hcHBlbmROdW1iZXIoaW5mby53b3J0aCk7CiAgICAganNvbi5hcHBl
bmRMaXRlcmFsKCIsXG4iKTsKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwicGFydGl0aW9uXCI6
ICIpOwotICAgIEpTQzo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ1RvQnVpbGRlcihqc29uLCBtX2tl
eS5wYXJ0aXRpb24oKSk7CisgICAganNvbi5hcHBlbmRRdW90ZWRKU09OU3RyaW5nKG1fa2V5LnBh
cnRpdGlvbigpKTsKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIixcbiIpOwogICAgIGpzb24uYXBw
ZW5kTGl0ZXJhbCgiXCJ0aW1lc3RhbXBcIjogIik7CiAgICAganNvbi5hcHBlbmROdW1iZXIoc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4obV90aW1l
U3RhbXAudGltZV9zaW5jZV9lcG9jaCgpKS5jb3VudCgpKTsKICAgICBqc29uLmFwcGVuZExpdGVy
YWwoIixcbiIpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiXCJVUkxcIjogIik7Ci0gICAgSlND
OjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1fcmVzcG9uc2UudXJsKCku
c3RyaW5nKCkpOworICAgIGpzb24uYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhtX3Jlc3BvbnNlLnVy
bCgpLnN0cmluZygpKTsKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIixcbiIpOwogICAgIGpzb24u
YXBwZW5kTGl0ZXJhbCgiXCJib2R5SGFzaFwiOiAiKTsKLSAgICBKU0M6OmFwcGVuZFF1b3RlZEpT
T05TdHJpbmdUb0J1aWxkZXIoanNvbiwgaW5mby5ib2R5SGFzaCk7CisgICAganNvbi5hcHBlbmRR
dW90ZWRKU09OU3RyaW5nKGluZm8uYm9keUhhc2gpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgi
LFxuIik7CiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcImJvZHlTaGFyZUNvdW50XCI6ICIpOwog
ICAgIGpzb24uYXBwZW5kTnVtYmVyKGluZm8uYm9keVNoYXJlQ291bnQpOwpAQCAtMTg5LDkgKzE4
OCw5IEBAIHZvaWQgRW50cnk6OmFzSlNPTihTdHJpbmdCdWlsZGVyJiBqc29uLCBjb25zdCBTdG9y
YWdlOjpSZWNvcmRJbmZvJiBpbmZvKSBjb25zdAogICAgICAgICAgICAganNvbi5hcHBlbmRMaXRl
cmFsKCIsXG4iKTsKICAgICAgICAgZmlyc3RIZWFkZXIgPSBmYWxzZTsKICAgICAgICAganNvbi5h
cHBlbmRMaXRlcmFsKCIgICAgIik7Ci0gICAgICAgIEpTQzo6YXBwZW5kUXVvdGVkSlNPTlN0cmlu
Z1RvQnVpbGRlcihqc29uLCBoZWFkZXIua2V5KTsKKyAgICAgICAganNvbi5hcHBlbmRRdW90ZWRK
U09OU3RyaW5nKGhlYWRlci5rZXkpOwogICAgICAgICBqc29uLmFwcGVuZExpdGVyYWwoIjogIik7
Ci0gICAgICAgIEpTQzo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ1RvQnVpbGRlcihqc29uLCBoZWFk
ZXIudmFsdWUpOworICAgICAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoaGVhZGVyLnZh
bHVlKTsKICAgICB9CiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcbn1cbiIpOwogICAgIGpzb24u
YXBwZW5kTGl0ZXJhbCgifSIpOwo=
</data>
<flag name="review"
          id="277454"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252697</attachid>
            <date>2015-05-08 00:52:21 -0700</date>
            <delta_ts>2015-05-08 00:52:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>land-144754.diff</filename>
            <type>text/plain</type>
            <size>14899</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDAzNDYxYjEuLjAwOGViZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE1LTA1LTA4ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBzZXJpYWxpemF0aW9uIG9m
IHF1b3RlZCBKU09OIHN0cmluZ3MuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDQ3
NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgT3B0aW1p
emVkIHRoZSBzZXJpYWxpemF0aW9uIG9mIHF1b3RlZCBzdHJpbmdzIGludG8gSlNPTiBieSBtb3Zp
bmcgdGhlIGxvZ2ljIGludG8KKyAgICAgICAgU3RyaW5nQnVpbGRlciBzbyBpdCBjYW4gbWFrZSBz
bWFydGVyIGRlY2lzaW9ucyBhYm91dCBidWZmZXJpbmcuCisKKyAgICAgICAgMTIlIHByb2dyZXNz
aW9uIG9uIEtyYWtlbi9qc29uLXN0cmluZ2lmeS10aW5kZXJib3ggKG9uIG15IE1hYyBQcm8uKQor
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6
Ok9iamVjdFBhdHRlcm5Ob2RlOjp0b1N0cmluZyk6IFVzZSB0aGUgbmV3IFN0cmluZ0J1aWxkZXIg
QVBJLgorCisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisgICAgICAgICogcnVudGlt
ZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBw
ZW5kTmV4dFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6YXBwZW5kU3RyaW5nVG9TdHJpbmdCdWls
ZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ1RvQnVp
bGRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRT
dHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5n
aWZpZWRWYWx1ZSk6IE1vdmVkIHRoZSBidWxrIG9mIHRoaXMgbG9naWMKKyAgICAgICAgdG8gU3Ry
aW5nQnVpbGRlciBhbmQgY2FsbCB0aGF0IGZyb20gaGVyZS4KKwogMjAxNS0wNS0wNyAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjE4Mzk2MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA4ZmU1YjI5Li4zOWIwM2NkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CkBAIC0zMDg3LDcgKzMwODcsNyBAQCB2b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjp0b1N0cmluZyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogICAgIGJ1aWxkZXIuYXBwZW5kKCd7Jyk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIGlmIChtX3RhcmdldFBhdHRlcm5zW2ldLndhc1N0cmluZykKLSAgICAgICAgICAg
IGFwcGVuZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoYnVpbGRlciwgbV90YXJnZXRQYXR0ZXJu
c1tpXS5wcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRR
dW90ZWRKU09OU3RyaW5nKG1fdGFyZ2V0UGF0dGVybnNbaV0ucHJvcGVydHlOYW1lLnN0cmluZygp
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV90YXJnZXRQYXR0
ZXJuc1tpXS5wcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgn
OicpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAppbmRl
eCA1ODFiZDQ1Li45OTQwNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09OT2JqZWN0LmNwcApAQCAtMTA3LDggKzEwNyw2IEBAIHByaXZhdGU6CiAKICAgICBmcmllbmQg
Y2xhc3MgSG9sZGVyOwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkU3RyaW5nKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKLQogICAgIEpTVmFsdWUgdG9KU09OKEpTVmFsdWUs
IGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYpOwogCiAgICAgZW51bSBTdHJpbmdp
ZnlSZXN1bHQgeyBTdHJpbmdpZnlGYWlsZWQsIFN0cmluZ2lmeVN1Y2NlZWRlZCwgU3RyaW5naWZ5
RmFpbGVkRHVlVG9VbmRlZmluZWRWYWx1ZSB9OwpAQCAtMjU1LDcyICsyNTMsNiBAQCBMb2NhbDxV
bmtub3duPiBTdHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3duPiB2YWx1ZSkKICAg
ICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJl
c3VsdC50b1N0cmluZygpKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLXN0
YXRpYyB2b2lkIGFwcGVuZFN0cmluZ1RvU3RyaW5nQnVpbGRlcihTdHJpbmdCdWlsZGVyJiBidWls
ZGVyLCBjb25zdCBDaGFyVHlwZSogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGludCBzdGFydCA9IGk7Ci0gICAgICAg
IHdoaWxlIChpIDwgbGVuZ3RoICYmIChkYXRhW2ldID4gMHgxRiAmJiBkYXRhW2ldICE9ICciJyAm
JiBkYXRhW2ldICE9ICdcXCcpKQotICAgICAgICAgICAgKytpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChkYXRhICsgc3RhcnQsIGkgLSBzdGFydCk7Ci0gICAgICAgIGlmIChpID49IGxlbmd0aCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzd2l0Y2ggKGRhdGFbaV0pIHsKLSAgICAgICAg
Y2FzZSAnXHQnOgotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgndCcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
J1xyJzoKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJ3InKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcbic6
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXFwnKTsKLSAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCduJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnXGYnOgotICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xcJyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnZicpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ1xiJzoKLSAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ2In
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnXFwnKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcXCcpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3Qg
Y2hhciBoZXhEaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSAgICAgICAgICAgIFVDaGFy
IGNoID0gZGF0YVtpXTsKLSAgICAgICAgICAgIExDaGFyIGhleFtdID0geyAnXFwnLCAndScsIHN0
YXRpY19jYXN0PExDaGFyPihoZXhEaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pLCBzdGF0aWNfY2Fz
dDxMQ2hhcj4oaGV4RGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pLCBzdGF0aWNfY2FzdDxMQ2hhcj4o
aGV4RGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pLCBzdGF0aWNfY2FzdDxMQ2hhcj4oaGV4RGlnaXRz
W2NoICYgMHhGXSkgfTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGhleCwgV1RGX0FSUkFZ
X0xFTkdUSChoZXgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7
Ci0KLSAgICBpZiAobWVzc2FnZS5pczhCaXQoKSkKLSAgICAgICAgYXBwZW5kU3RyaW5nVG9TdHJp
bmdCdWlsZGVyKGJ1aWxkZXIsIG1lc3NhZ2UuY2hhcmFjdGVyczgoKSwgbWVzc2FnZS5sZW5ndGgo
KSk7Ci0gICAgZWxzZQotICAgICAgICBhcHBlbmRTdHJpbmdUb1N0cmluZ0J1aWxkZXIoYnVpbGRl
ciwgbWVzc2FnZS5jaGFyYWN0ZXJzMTYoKSwgbWVzc2FnZS5sZW5ndGgoKSk7Ci0KLSAgICBidWls
ZGVyLmFwcGVuZCgnIicpOwotfQotCi12b2lkIFN0cmluZ2lmaWVyOjphcHBlbmRRdW90ZWRTdHJp
bmcoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBh
cHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGJ1aWxkZXIsIHZhbHVlKTsKLX0KLQogaW5s
aW5lIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihKU1ZhbHVlIHZhbHVlLCBjb25zdCBQcm9w
ZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQoIW1f
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwpAQCAtMzg1LDcgKzMxNyw3IEBAIFN0cmluZ2lmaWVyOjpT
dHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoU3RyaW5n
QnVpbGRlciYKIAogICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKICAgICBpZiAodmFsdWUuZ2V0U3Ry
aW5nKG1fZXhlYywgc3RyaW5nVmFsdWUpKSB7Ci0gICAgICAgIGFwcGVuZFF1b3RlZFN0cmluZyhi
dWlsZGVyLCBzdHJpbmdWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kUXVvdGVkSlNPTlN0
cmluZyhzdHJpbmdWYWx1ZSk7CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAg
ICAgfQogCkBAIC01NTYsNyArNDg4LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBl
bmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXImIHN0cmluZ2lmaWVyLCBTdHJpbmdCdWkKICAgICAg
ICAgc3RyaW5naWZpZXIuc3RhcnROZXdMaW5lKGJ1aWxkZXIpOwogCiAgICAgICAgIC8vIEFwcGVu
ZCB0aGUgcHJvcGVydHkgbmFtZS4KLSAgICAgICAgYXBwZW5kUXVvdGVkU3RyaW5nKGJ1aWxkZXIs
IHByb3BlcnR5TmFtZS5zdHJpbmcoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kUXVvdGVkSlNP
TlN0cmluZyhwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgn
OicpOwogICAgICAgICBpZiAoc3RyaW5naWZpZXIud2lsbEluZGVudCgpKQogICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJyAnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuaAppbmRleCBlYjZkYWFkLi5kNTUwNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5oCkBAIC02Miw4ICs2Miw2IEBAIHByaXZhdGU6CiBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIEpTT05QYXJzZShFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsK
IEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBKU09OU3RyaW5naWZ5KEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIHVuc2lnbmVkIGluZGVudCk7CiAKLUpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kUXVv
dGVkSlNPTlN0cmluZ1RvQnVpbGRlcihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7Ci0K
ICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDcwNDk0Y2QuLjgyOWRkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTUtMDUtMDggIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIE9wdGltaXplIHNlcmlhbGl6YXRpb24gb2YgcXVvdGVkIEpTT04gc3Ry
aW5ncy4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0NDc1ND4KKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgYSBTdHJpbmdCdWlsZGVyIEFQ
SSBmb3IgYXBwZW5kaW5nIGEgcXVvdGVkIEpTT04gc3RyaW5nLiBUaGlzIGlzIHVzZWQgYnkKKyAg
ICAgICAgSlNPTi5zdHJpbmdpZnkoKSB0byBpbXBsZW1lbnQgZWZmaWNpZW50IGFwcGVuZGluZyBv
ZiBzdHJpbmdzIHdoaWxlIGVzY2FwaW5nCisgICAgICAgIHF1b3RlcywgY29udHJvbCBjaGFyYWN0
ZXJzIGFuZCBcdU5OTk4tc3R5bGUgY2hhcmFjdGVycy4KKworICAgICAgICBUaGUgbWFpbiBiZW5l
Zml0IGNvbWVzIGZyb20gb25seSBkb2luZyBhIHNpbmdsZSBidWZmZXIgZXhwYW5zaW9uIHVwIGZy
b250LAorICAgICAgICBpbnN0ZWFkIG9mIGRvaW5nIGl0IGV2ZXJ5IHRpbWUgd2UgYXBwZW5kIHNv
bWV0aGluZy4gVGhlIGZ1ZGdlIGZhY3RvciBpcyBwcmV0dHkKKyAgICAgICAgbGFyZ2UsIHNpbmNl
IHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRwdXQgY2hhcmFjdGVycyBwZXIgaW5wdXQgY2hhcmFj
dGVyIGlzIDYuCisKKyAgICAgICAgVGhlIGZpcnN0IGxhbmRpbmcgb2YgdGhpcyBwYXRjaCBoYWQg
dHdvIGJ1Z3MgaW4gaXQ6CisKKyAgICAgICAgLSBNYWRlIFx1Tk5OTiBlc2NhcGVzIHVwcGVyY2Fz
ZSBoZXhhZGVjaW1hbCBpbnN0ZWFkIG9mIGxvd2VyY2FzZS4KKyAgICAgICAgLSBEaWRuJ3QgcHJl
YWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciA4LWJpdCBpbnB1dCBzdHJpbmdzLgorCisgICAgICAg
IEJvdGggd2VyZSBjYXVnaHQgYnkgZXhpc3RpbmcgdGVzdHMgb24gb3VyIGJvdHMsIGFuZCBib3Ro
IHdlcmUgZHVlIHRvIGxhc3QtbWludXRlCisgICAgICAgIGNoYW5nZXMgYmVmb3JlIGxhbmRpbmcu
IDovCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdU
Rjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKToKKyAgICAgICAgKFdURjo6U3RyaW5n
QnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6CisgICAgICAgICogd3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oOgorCiAyMDE1LTA1LTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTgzOTYxLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggMTY0YjhjMy4uMzBmMmY2YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgogCiAjaW5jbHVkZSAiSW50ZWdlclRvU3RyaW5nQ29u
dmVyc2lvbi5oIgorI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJXVEZTdHJpbmcu
aCIKICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogCkBAIC0zNjAsNCArMzYxLDg4IEBAIHZvaWQgU3Ry
aW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogICAgIH0KIH0KIAordGVtcGxhdGUgPHR5cGVuYW1l
IE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4KK3N0YXRp
YyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBl
KiYgb3V0cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsg
bGVuZ3RoOyBpbnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKKyAgICAgICAgaWYgKCppbnB1dCA+IDB4
MUYgJiYgKmlucHV0ICE9ICciJyAmJiAqaW5wdXQgIT0gJ1xcJykgeworICAgICAgICAgICAgKm91
dHB1dCsrID0gKmlucHV0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgc3dpdGNoICgqaW5wdXQpIHsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgKm91
dHB1dCsrID0gJ1xcJzsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9ICd0JzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICdccic6CisgICAgICAgICAgICAqb3V0cHV0KysgPSAnXFwn
OworICAgICAgICAgICAgKm91dHB1dCsrID0gJ3InOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgICpvdXRwdXQrKyA9ICdcXCc7CisgICAgICAgICAg
ICAqb3V0cHV0KysgPSAnbic7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXGYn
OgorICAgICAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9
ICdmJzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcYic6CisgICAgICAgICAg
ICAqb3V0cHV0KysgPSAnXFwnOworICAgICAgICAgICAgKm91dHB1dCsrID0gJ2InOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgKm91dHB1dCsrID0g
J1xcJzsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9ICciJzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAqb3V0cHV0KysgPSAnXFwnOworICAgICAg
ICAgICAgKm91dHB1dCsrID0gJ1xcJzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUKCgqaW5wdXQgJiAweEZGMDApID09IDApOworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7
CisgICAgICAgICAgICAqb3V0cHV0KysgPSAnXFwnOworICAgICAgICAgICAgKm91dHB1dCsrID0g
J3UnOworICAgICAgICAgICAgKm91dHB1dCsrID0gJzAnOworICAgICAgICAgICAgKm91dHB1dCsr
ID0gJzAnOworICAgICAgICAgICAgKm91dHB1dCsrID0gc3RhdGljX2Nhc3Q8TENoYXI+KGhleERp
Z2l0c1soKmlucHV0ID4+IDQpICYgMHhGXSk7OworICAgICAgICAgICAgKm91dHB1dCsrID0gc3Rh
dGljX2Nhc3Q8TENoYXI+KGhleERpZ2l0c1sqaW5wdXQgJiAweEZdKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZFF1
b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gTWFrZSBzdXJl
IHdlIGhhdmUgZW5vdWdoIGJ1ZmZlciBzcGFjZSB0byBhcHBlbmQgdGhpcyBzdHJpbmcgd2l0aG91
dCBoYXZpbmcKKyAgICAvLyB0byB3b3JyeSBhYm91dCByZWFsbG9jYXRpbmcgaW4gdGhlIG1pZGRs
ZS4KKyAgICAvLyBUaGUgMiBpcyBmb3IgdGhlICciJyBxdW90ZXMgb24gZWFjaCBlbmQuCisgICAg
Ly8gVGhlIDYgaXMgZm9yIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIFx1Tk5OTiBlbmNvZGVk
LgorICAgIHNpemVfdCBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZCA9IGxlbmd0aCgpICsgMiArIHN0
cmluZy5sZW5ndGgoKSAqIDY7CisgICAgUkVMRUFTRV9BU1NFUlQobWF4aW11bUNhcGFjaXR5UmVx
dWlyZWQgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworCisgICAgaWYg
KGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIGFsbG9jYXRlQnVmZmVyVXBD
b252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIHJvdW5kVXBUb1Bvd2VyT2ZUd28obWF4aW11bUNh
cGFjaXR5UmVxdWlyZWQpKTsKKyAgICBlbHNlCisgICAgICAgIHJlc2VydmVDYXBhY2l0eShyb3Vu
ZFVwVG9Qb3dlck9mVHdvKG1heGltdW1DYXBhY2l0eVJlcXVpcmVkKSk7CisKKyAgICBpZiAoaXM4
Qml0KCkpIHsKKyAgICAgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7CisgICAgICAgIExDaGFy
KiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9sZW5ndGg7CisgICAgICAgICpvdXRw
dXQrKyA9ICciJzsKKyAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91dHB1
dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgICpvdXRw
dXQrKyA9ICciJzsKKyAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBtX2J1ZmZlckNoYXJhY3Rl
cnM4OworICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJh
Y3RlcnMxNiArIG1fbGVuZ3RoOworICAgICAgICAqb3V0cHV0KysgPSAnIic7CisgICAgICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50
ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91
dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAq
b3V0cHV0KysgPSAnIic7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZmZXJDaGFy
YWN0ZXJzMTY7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlci5oIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmgKaW5kZXggOTM0MjJhMi4uYmU1YzExNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmgKQEAgLTE1OSw2ICsxNTksOCBAQCBwdWJsaWM6CiAgICAgICAgIGFwcGVu
ZChVMTZfVFJBSUwoYykpOwogICAgIH0KIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGFw
cGVuZFF1b3RlZEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJik7CisKICAgICB0ZW1wbGF0ZTx1bnNp
Z25lZCBjaGFyYWN0ZXJzQ291bnQ+CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZExpdGVy
YWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pIHsgYXBwZW5kKGNo
YXJhY3RlcnMsIGNoYXJhY3RlcnNDb3VudCAtIDEpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1MzM2NjUx
Li45NDNmMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDUtMDggIEFuZHJl
YXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIHNlcmlhbGl6
YXRpb24gb2YgcXVvdGVkIEpTT04gc3RyaW5ncy4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzE0NDc1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVudHJ5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhY2hlOjpFbnRyeTo6YXNKU09OKTogVXNlIHRoZSBuZXcgU3RyaW5n
QnVpbGRlciBBUEkuCisKIDIwMTUtMDUtMDcgIENvbnJhZCBTaHVsdHogIDxjb25yYWRfc2h1bHR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCByZWdpc3RlciBmb3IgTG9va3VwIG5vdGlmaWNh
dGlvbnMgdW50aWwgbmVlZGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKaW5kZXggYzM0ZmM1Mi4uNzM1MGE1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlRW50cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUVudHJ5LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIk5ldHdv
cmtDYWNoZUNvZGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNP
Tk9iamVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CkBAIC0xNTksNyArMTU4LDcgQEAgdm9pZCBFbnRyeTo6YXNKU09OKFN0cmluZ0J1aWxk
ZXImIGpzb24sIGNvbnN0IFN0b3JhZ2U6OlJlY29yZEluZm8mIGluZm8pIGNvbnN0CiB7CiAgICAg
anNvbi5hcHBlbmRMaXRlcmFsKCJ7XG4iKTsKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiaGFz
aFwiOiAiKTsKLSAgICBKU0M6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoanNvbiwg
bV9rZXkuaGFzaEFzU3RyaW5nKCkpOworICAgIGpzb24uYXBwZW5kUXVvdGVkSlNPTlN0cmluZyht
X2tleS5oYXNoQXNTdHJpbmcoKSk7CiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCIsXG4iKTsKICAg
ICBqc29uLmFwcGVuZExpdGVyYWwoIlwiYm9keVNpemVcIjogIik7CiAgICAganNvbi5hcHBlbmRO
dW1iZXIoaW5mby5ib2R5U2l6ZSk7CkBAIC0xNjgsMTYgKzE2NywxNiBAQCB2b2lkIEVudHJ5Ojph
c0pTT04oU3RyaW5nQnVpbGRlciYganNvbiwgY29uc3QgU3RvcmFnZTo6UmVjb3JkSW5mbyYgaW5m
bykgY29uc3QKICAgICBqc29uLmFwcGVuZE51bWJlcihpbmZvLndvcnRoKTsKICAgICBqc29uLmFw
cGVuZExpdGVyYWwoIixcbiIpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiXCJwYXJ0aXRpb25c
IjogIik7Ci0gICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIG1f
a2V5LnBhcnRpdGlvbigpKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcobV9rZXku
cGFydGl0aW9uKCkpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiLFxuIik7CiAgICAganNvbi5h
cHBlbmRMaXRlcmFsKCJcInRpbWVzdGFtcFwiOiAiKTsKICAgICBqc29uLmFwcGVuZE51bWJlcihz
dGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihtX3Rp
bWVTdGFtcC50aW1lX3NpbmNlX2Vwb2NoKCkpLmNvdW50KCkpOwogICAgIGpzb24uYXBwZW5kTGl0
ZXJhbCgiLFxuIik7CiAgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcIlVSTFwiOiAiKTsKLSAgICBK
U0M6OmFwcGVuZFF1b3RlZEpTT05TdHJpbmdUb0J1aWxkZXIoanNvbiwgbV9yZXNwb25zZS51cmwo
KS5zdHJpbmcoKSk7CisgICAganNvbi5hcHBlbmRRdW90ZWRKU09OU3RyaW5nKG1fcmVzcG9uc2Uu
dXJsKCkuc3RyaW5nKCkpOwogICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiLFxuIik7CiAgICAganNv
bi5hcHBlbmRMaXRlcmFsKCJcImJvZHlIYXNoXCI6ICIpOwotICAgIEpTQzo6YXBwZW5kUXVvdGVk
SlNPTlN0cmluZ1RvQnVpbGRlcihqc29uLCBpbmZvLmJvZHlIYXNoKTsKKyAgICBqc29uLmFwcGVu
ZFF1b3RlZEpTT05TdHJpbmcoaW5mby5ib2R5SGFzaCk7CiAgICAganNvbi5hcHBlbmRMaXRlcmFs
KCIsXG4iKTsKICAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiYm9keVNoYXJlQ291bnRcIjogIik7
CiAgICAganNvbi5hcHBlbmROdW1iZXIoaW5mby5ib2R5U2hhcmVDb3VudCk7CkBAIC0xODksOSAr
MTg4LDkgQEAgdm9pZCBFbnRyeTo6YXNKU09OKFN0cmluZ0J1aWxkZXImIGpzb24sIGNvbnN0IFN0
b3JhZ2U6OlJlY29yZEluZm8mIGluZm8pIGNvbnN0CiAgICAgICAgICAgICBqc29uLmFwcGVuZExp
dGVyYWwoIixcbiIpOwogICAgICAgICBmaXJzdEhlYWRlciA9IGZhbHNlOwogICAgICAgICBqc29u
LmFwcGVuZExpdGVyYWwoIiAgICAiKTsKLSAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3Ry
aW5nVG9CdWlsZGVyKGpzb24sIGhlYWRlci5rZXkpOworICAgICAgICBqc29uLmFwcGVuZFF1b3Rl
ZEpTT05TdHJpbmcoaGVhZGVyLmtleSk7CiAgICAgICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiOiAi
KTsKLSAgICAgICAgSlNDOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nVG9CdWlsZGVyKGpzb24sIGhl
YWRlci52YWx1ZSk7CisgICAgICAgIGpzb24uYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhoZWFkZXIu
dmFsdWUpOwogICAgIH0KICAgICBqc29uLmFwcGVuZExpdGVyYWwoIlxufVxuIik7CiAgICAganNv
bi5hcHBlbmRMaXRlcmFsKCJ9Iik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>