<?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>176044</bug_id>
          
          <creation_ts>2017-08-28 19:55:09 -0700</creation_ts>
          <short_desc>[JSC] Use table based approach for JSON.stringify&apos;s Quote</short_desc>
          <delta_ts>2017-08-29 18:23:17 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>mark.lam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1343036</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 19:55:09 -0700</bug_when>
    <thetext>Now, V8 and SpiderMonkey both use table based approach. And according to arewefastyet data, it seems promising.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343044</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 20:17:54 -0700</bug_when>
    <thetext>https://bugzilla.mozilla.org/show_bug.cgi?id=1343005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343045</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 20:19:16 -0700</bug_when>
    <thetext>Note that JSON.stringify takes 3.8% of Ember.js Speedometer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343056</commentid>
    <comment_count>3</comment_count>
      <attachid>319240</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 21:27:42 -0700</bug_when>
    <thetext>Created attachment 319240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343057</commentid>
    <comment_count>4</comment_count>
      <attachid>319241</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 21:29:54 -0700</bug_when>
    <thetext>Created attachment 319241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343058</commentid>
    <comment_count>5</comment_count>
      <attachid>319242</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-28 21:33:48 -0700</bug_when>
    <thetext>Created attachment 319242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343107</commentid>
    <comment_count>6</comment_count>
      <attachid>319242</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-08-29 09:27:51 -0700</bug_when>
    <thetext>Comment on attachment 319242
Patch

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

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:2
&gt; + * Copyright (C) 2010, 2013, 2016 Apple Inc.

Missing “All rights reserved.” Not sure why it was omitted but someone should add it.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:20
&gt; +static const constexpr LChar EscapeTable[256] = {

The name of this doesn’t seem specific enough. Maybe escapedFormsForJSON?

Does having this table contain 256 entries make the LChar version faster than it would be if it was 128? Because for UChar clearly there is no value to having the table larger than 128.

The code below uses hex when referring to this table, masking and such, so I would write the size as 0x100, not 256 (or 0x80).

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:55
&gt; +template &lt;typename OutputCharacterType, typename InputCharacterType&gt;

We should get consistent about whether to include a space before &quot;&lt;&quot; in cases like this. O prefer not to.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:58
&gt; +    for (const InputCharacterType* end = input + length; input != end; ++input) {

I think auto* reads way better in places like this.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:59
&gt; +        const InputCharacterType character = *input;

And like this.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:60
&gt; +        const LChar escaped = EscapeTable[character &amp; 0xFF];

The use of const here is OK but a bit peculiar. We have many local variables that are never changed and actually writing const seems like overkill.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:61
&gt; +        if (LIKELY(!escaped || character &gt; 0xFF)) {

Is this faster than having a separate UNLIKELY(character &gt; 0xFF) check before looking up the character in the table.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:69
&gt; +            ASSERT(!(character &amp; 0xFF00));

To me it seems overkill to assert this since it’s so firmly guaranteed by the way the code is designed. Also seems there are clearer ways to write this assertion. For me I would write one of these:

    ASSERT(character &lt;= 0xFF);
    ASSERT(character == (character &amp; 0xFF));

But really I would not write any assertion at all.

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:83
&gt; +    // Make sure we have enough buffer space to append this string without having
&gt; +    // to worry about reallocating in the middle.
&gt; +    // The 2 is for the &apos;&quot;&apos; quotes on each end.
&gt; +    // The 6 is for characters that need to be \uNNNN encoded.

This computation is a great way to figure out the maximum buffer size needed but is there some opportunity to optimize memory use better for the common case where we need much, much less space than this?

To me it seems that for smaller strings we might want to use a stack buffer instead so we don’t resize the result to be unnecessarily large. I think this depends on how we are measuring the performance of this function (performance in the sense of both speed and memory use).

&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:89
&gt; +    // This max() is here to allow us to allocate sizes between the range [2^31, 2^32 - 2] because roundUpToPowerOfTwo(1&lt;&lt;31 + some int smaller than 1&lt;&lt;31) == 0.
&gt; +    allocationSize = std::max(allocationSize, roundUpToPowerOfTwo(allocationSize));

Not new code, but why are we rounding up to a power of two?

Seems like this std::max trick belongs inside a variant of the roundUpToPowerOfTwo function instead of here. I think it’s not good that roundUpToPowerOfTwo can turn a large number into zero and we should figure out how to fix that in the definition of that function rather than working around it here. Like define the function do nothing if it can’t round up? Or make a variant that does that? Maybe even consider making a variant that takes Checked&lt;unsigned&gt; too to help make clear the code is safe. But I guess that version would abort if we can’t round up and we just want to round up &quot;only if we can&quot;. But wait, why round up at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343362</commentid>
    <comment_count>7</comment_count>
      <attachid>319242</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-29 18:17:47 -0700</bug_when>
    <thetext>Comment on attachment 319242
Patch

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

Thank you!

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:2
&gt;&gt; + * Copyright (C) 2010, 2013, 2016 Apple Inc.
&gt; 
&gt; Missing “All rights reserved.” Not sure why it was omitted but someone should add it.

Fixed.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:20
&gt;&gt; +static const constexpr LChar EscapeTable[256] = {
&gt; 
&gt; The name of this doesn’t seem specific enough. Maybe escapedFormsForJSON?
&gt; 
&gt; Does having this table contain 256 entries make the LChar version faster than it would be if it was 128? Because for UChar clearly there is no value to having the table larger than 128.
&gt; 
&gt; The code below uses hex when referring to this table, masking and such, so I would write the size as 0x100, not 256 (or 0x80).

Yes, why this has 256 entries is to eliminate 256 mask and &gt; 0xff check in LChar cases in compiler.
OK, I&apos;ve changed this to 0x100. And rename it to escapedFormsForJSON.
And it seems 0x80 is super slightly slower (~2.0%). The data is a bit fluctuated, but I think using this code for now is ok since it can remove the above check.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:55
&gt;&gt; +template &lt;typename OutputCharacterType, typename InputCharacterType&gt;
&gt; 
&gt; We should get consistent about whether to include a space before &quot;&lt;&quot; in cases like this. O prefer not to.

It seems that a bit old code uses this form (`template&lt;space&gt;&lt;`). I&apos;ve changed this to `template&lt;`.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:58
&gt;&gt; +    for (const InputCharacterType* end = input + length; input != end; ++input) {
&gt; 
&gt; I think auto* reads way better in places like this.

Changed.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:59
&gt;&gt; +        const InputCharacterType character = *input;
&gt; 
&gt; And like this.

Changed.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:60
&gt;&gt; +        const LChar escaped = EscapeTable[character &amp; 0xFF];
&gt; 
&gt; The use of const here is OK but a bit peculiar. We have many local variables that are never changed and actually writing const seems like overkill.

OK, changed this to auto.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:61
&gt;&gt; +        if (LIKELY(!escaped || character &gt; 0xFF)) {
&gt; 
&gt; Is this faster than having a separate UNLIKELY(character &gt; 0xFF) check before looking up the character in the table.

It seems that UChar shows not so much difference (or super slightly slower). I think the current one is OK.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:69
&gt;&gt; +            ASSERT(!(character &amp; 0xFF00));
&gt; 
&gt; To me it seems overkill to assert this since it’s so firmly guaranteed by the way the code is designed. Also seems there are clearer ways to write this assertion. For me I would write one of these:
&gt; 
&gt;     ASSERT(character &lt;= 0xFF);
&gt;     ASSERT(character == (character &amp; 0xFF));
&gt; 
&gt; But really I would not write any assertion at all.

OK, I&apos;ve dropped this assertion. Yeah, now the code clearly states this invariant is ensured.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:83
&gt;&gt; +    // The 6 is for characters that need to be \uNNNN encoded.
&gt; 
&gt; This computation is a great way to figure out the maximum buffer size needed but is there some opportunity to optimize memory use better for the common case where we need much, much less space than this?
&gt; 
&gt; To me it seems that for smaller strings we might want to use a stack buffer instead so we don’t resize the result to be unnecessarily large. I think this depends on how we are measuring the performance of this function (performance in the sense of both speed and memory use).

I think this is OK. This is StringBuilder&apos;s JSON quoting code. So we expect that this StringBuilder will accept more strings after this function.
Even if we allocate a bit large space, this space will be filled after this function.

&gt;&gt; Source/WTF/wtf/text/StringBuilderJSON.cpp:89
&gt;&gt; +    allocationSize = std::max(allocationSize, roundUpToPowerOfTwo(allocationSize));
&gt; 
&gt; Not new code, but why are we rounding up to a power of two?
&gt; 
&gt; Seems like this std::max trick belongs inside a variant of the roundUpToPowerOfTwo function instead of here. I think it’s not good that roundUpToPowerOfTwo can turn a large number into zero and we should figure out how to fix that in the definition of that function rather than working around it here. Like define the function do nothing if it can’t round up? Or make a variant that does that? Maybe even consider making a variant that takes Checked&lt;unsigned&gt; too to help make clear the code is safe. But I guess that version would abort if we can’t round up and we just want to round up &quot;only if we can&quot;. But wait, why round up at all?

This is because this code is StringBuilder. What we are doing is we are reserving capacity for the StringBuilder&apos;s internal bufffer which capacity is &gt;= the worst quoting result case.
So, after this function, this StringBuilder will accept the following strings. So, we should take the policy resizing the buffer to a power of two. (As the same to Vector).

In the case of roundUpToPowerOfTwo, I think this is OK for now since this behavior is actually tested in TestWTF (MathExtras.cpp).
But the cleaner interface should be taking Checked&lt;unsigned&gt; and abort if rounding up fails.
I&apos;ve opened the bug for this. https://bugs.webkit.org/show_bug.cgi?id=176086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343365</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-29 18:22:39 -0700</bug_when>
    <thetext>Committed r221330: &lt;http://trac.webkit.org/changeset/221330&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343366</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-29 18:23:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/34149386&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319240</attachid>
            <date>2017-08-28 21:27:42 -0700</date>
            <delta_ts>2017-08-28 21:29:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176044-20170829132741.patch</filename>
            <type>text/plain</type>
            <size>15204</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI0NjhiMDFiZGYzNzQ2ZDg4M2NjZjA4
ODBlZTkyMmFmZDdjNTU5MDguLmM0MDYyZmM3Y2Q1ZDUyZjhjYTg4ZmU4NWRjMzhmOTYzZjE3ZWE0
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTctMDgtMjggIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRhYmxlIGJhc2VkIGFwcHJv
YWNoIGZvciBKU09OLnN0cmluZ2lmeSdzIFF1b3RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZSBjaGFuZ2UgZXNjYXBlIG9wZXJhdGlvbiBvZiBKU09O
IFF1b3RlIGZyb20gYnJhbmNoLWJhc2VkIHRvIHRhYmxlLWJhc2VkLgorICAgICAgICBUaGlzIHBh
dGNoIHBhcnRpYWxseSBhZG9wdHMgU3BpZGVyTW9ua2V5J3MgY2hhbmdlIHRvIFN0cmluZ0J1aWxk
ZXJKU09OLmNwcAorICAgICAgICB0byBvcHRpbWl6ZSB0aGlzIGVzY2FwaW5nIG9wZXJhdGlvbi4g
V2Ugc2VwYXJhdGUgY2hhbmdlcyBmcm9tIFN0cmluZ0J1aWxkZXIuY3BwCisgICAgICAgIHRvIGFw
cGx5IE1QTCB0byBTdHJpbmdCdWlsZGVySlNPTi5jcHAgZmlsZS4gU2luY2UgV2ViS2l0IGFscmVh
ZHkgYWRvcHRzIE1QTCBpbgorICAgICAgICBzb21lIGZpbGVzIChsaWtlLCBEYXRlTWF0aC5oKSwg
aXQgaXMgYWNjZXB0YWJsZS4KKworICAgICAgICBLcmFrZW4ganNvbi1zdHJpbmdpZnktdGluZGVy
Ym94IHNob3dzIDcuMiUgaW1wcm92ZW1lbnQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZSAgICAgICAgICAgICAgICAgIHBhdGNoZWQKKworICAg
ICAgICBqc29uLXN0cmluZ2lmeS10aW5kZXJib3ggICAgICAgIDQwLjQyOSstMC43NzEgICAgICBe
ICAgICAgMzcuNjkzKy0wLjg2MiAgICAgICAgIF4gZGVmaW5pdGVseSAxLjA3MjZ4IGZhc3Rlcgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgor
ICAgICAgICAoV1RGOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWxTbG93KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6CisKIDIwMTct
MDgtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
VXBzdHJlYW0gV0tHZXRXZWJEZWZhdWx0Q0ZTdHJpbmdFbmNvZGluZygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMTU2M2FhYjYwMzYyYzcxYjNkMTJiYTgz
OTQ5YTk1ZDk2ODQ3ZmFhLi5jOTIxOGY1MDZhYWVkYjhkMThjYWNmNWFkNjYwYjIxMWI5Y2Q5Zjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOCw2ICsx
MzgsNyBAQAogCQlFMzExRkIxNzFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxMUZCMTUxRjBB
NTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNwcCAqLzsgfTsKIAkJRTM4QzQxMjUxRUI0RTA0
QzAwNDI5NTdEIC8qIENQVVRpbWVDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEM0MTI0MUVCNEUwNEMwMDQyOTU3RCAvKiBDUFVUaW1lQ29j
b2EubW0gKi87IH07CiAJCUUzOEM0MTI4MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEM0MTI2MUVC
NEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLzsgfTsKKwkJRTM4RDZFMjcxRjU1MjJFMzAw
QTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEQ2RTI2MUY1NTIyRTMwMEE3NUNDNCAvKiBTdHJpbmdC
dWlsZGVySlNPTi5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3Jr
UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CiAJCUU0QTBB
RDNEMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEwQUQzQzFBOTYyNTNDMDA1MzZERjYg
LyogV29ya1F1ZXVlQ29jb2EuY3BwICovOyB9OwogCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQg
LyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi87IH07
CkBAIC01NjMsNiArNTY0LDcgQEAKIAkJRTM4QzQxMjQxRUI0RTA0QzAwNDI5NTdEIC8qIENQVVRp
bWVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENQVVRp
bWVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4QzQxMjYxRUI0RTA2
ODAwNDI5NTdEIC8qIENQVVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1BVVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOEM0MTI3
MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENQVVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM4RDZFMjYx
RjU1MjJFMzAwQTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0J1aWxkZXJKU09OLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1
ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1
ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDEsNyArOTQzLDYgQEAKIAkJ
CQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2
OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5
NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAotCQkJCTc5NTIx
MjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290R3JhcGguaCAqLywKIAkJCQkxQTM1MjRB
QTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVDODRCMDFCREFDRDM5MDA4
MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCiAJCQkJMEY2NkIyODQxREM5N0JBQjAwNEExRDNG
IC8qIFNlY29uZHMuY3BwICovLApAQCAtOTUzLDYgKzk1NCw3IEBACiAJCQkJQThBNDczMDkxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCAqLywKIAkJCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQg
LyogU2hhcmVkVGFzay5oICovLAogCQkJCUE4QTQ3MzBBMTUxQTgyNUIwMDQxMjNGRiAvKiBTaW1w
bGVTdGF0cy5oICovLAorCQkJCTc5NTIxMjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290
R3JhcGguaCAqLywKIAkJCQlBOEE0NzMwQjE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlua2Vk
TGlzdC5oICovLAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJI
YXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVy
SGFzaC5oICovLApAQCAtMTA3OSw2ICsxMDgxLDcgQEAKIAkJCQlBOEE0NzMyMzE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nQnVmZmVyLmggKi8sCiAJCQkJQThBNDczMjQxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdHJpbmdCdWlsZGVyLmggKi8sCisJCQkJRTM4RDZFMjYxRjU1MjJFMzAwQTc1Q0M0IC8qIFN0
cmluZ0J1aWxkZXJKU09OLmNwcCAqLywKIAkJCQk0MzBCNDc4NzFBQUFBQzFBMDAxMjIzREEgLyog
U3RyaW5nQ29tbW9uLmggKi8sCiAJCQkJQThBNDczMjYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmlu
Z0NvbmNhdGVuYXRlLmggKi8sCiAJCQkJN0NENEMyNkYxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oICovLApAQCAtMTM5Myw2ICsxMzk2LDcgQEAKIAkJCQlGRURB
Q0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMzM3REI5Q0U3NDM0MTBGQUYwNzZFMTcgLyogU3RhY2tUcmFjZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzhENkUyNzFGNTUyMkUzMDBBNzVDQzQgLyogU3RyaW5nQnVpbGRl
ckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgyRTY5IC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQwMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZDMTgyNDM1QTYw
MEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDMwZDRmYTlmMDFhMDhkYjUzZDgwNGU3ZWI0NDU4ZTM3OTMwMDEwMTUuLjQ5MDk2
MDIyYjI0MTIyZWI3Mzc2YWNiNjYyOWIyZmY4NjM4MGEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CkBAIC0yODQsNiArMjg0LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgdGV4dC9CYXNlNjQuY3Bw
CiAgICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5jcHAKKyAgICB0
ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNwcAogICAgIHRleHQvU3RyaW5nSW1wbC5jcHAKICAgICB0
ZXh0L1N0cmluZ1ZpZXcuY3BwCiAgICAgdGV4dC9TeW1ib2xJbXBsLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggNDM2MDE1YTQzYmFhOTBmMjdhNDA3Y2Y5ZGE5ZThl
ZDg0NGYyZTMxNS4uODViMGMyMWU3Y2IzMjY4OGFkYjE5YzgwYWQxZWJlYWU0ZmM1ZDMwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0zODUsOTkgKzM4NSw0IEBAIHZv
aWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogICAgIH0KIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbFNsb3coT3V0cHV0Q2hh
cmFjdGVyVHlwZSomIG91dHB1dCwgY29uc3QgSW5wdXRDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikK
LXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewotICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgKm91
dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1dCsrID0gJ3QnOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICdccic6Ci0gICAgICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRw
dXQrKyA9ICdyJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnXG4nOgotICAgICAgICAqb3V0
cHV0KysgPSAnXFwnOwotICAgICAgICAqb3V0cHV0KysgPSAnbic7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgJ1xmJzoKLSAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1
dCsrID0gJ2YnOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdcYic6Ci0gICAgICAgICpvdXRw
dXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICdiJzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKCEoY2hhcmFjdGVyICYgMHhGRjAwKSk7Ci0gICAg
ICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICd1JzsKLSAgICAgICAg
Km91dHB1dCsrID0gJzAnOwotICAgICAgICAqb3V0cHV0KysgPSAnMCc7Ci0gICAgICAgICpvdXRw
dXQrKyA9IHVwcGVyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7Ci0g
ICAgICAgICpvdXRwdXQrKyA9IGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNo
YXJhY3Rlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4KLXN0YXRp
YyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBl
KiYgb3V0cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsg
bGVuZ3RoOyBpbnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKLSAgICAgICAgY29uc3QgSW5wdXRDaGFy
YWN0ZXJUeXBlIGNoYXJhY3RlciA9ICppbnB1dDsKLSAgICAgICAgaWYgKExJS0VMWShjaGFyYWN0
ZXIgIT0gJyInICYmIGNoYXJhY3RlciAhPSAnXFwnICYmIGNoYXJhY3RlciA+IDB4MUYpKSB7Ci0g
ICAgICAgICAgICAqb3V0cHV0KysgPSBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyInIHx8IGNoYXJhY3RlciA9
PSAnXFwnKSB7Ci0gICAgICAgICAgICAqb3V0cHV0KysgPSAnXFwnOwotICAgICAgICAgICAgKm91
dHB1dCsrID0gY2hhcmFjdGVyOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWxTbG93KG91dHB1dCwgY2hhcmFj
dGVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBl
bm91Z2ggYnVmZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZwot
ICAgIC8vIHRvIHdvcnJ5IGFib3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgotICAgIC8v
IFRoZSAyIGlzIGZvciB0aGUgJyInIHF1b3RlcyBvbiBlYWNoIGVuZC4KLSAgICAvLyBUaGUgNiBp
cyBmb3IgY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgXHVOTk5OIGVuY29kZWQuCi0gICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIENoZWNr
ZWQ8dW5zaWduZWQ+IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7Ci0gICAgbWF4
aW11bUNhcGFjaXR5UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7Ci0gICAgdW5zaWdu
ZWQgYWxsb2NhdGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsK
LSAgICAvLyBUaGlzIG1heCgpIGlzIGhlcmUgdG8gYWxsb3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMg
YmV0d2VlbiB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAyXSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2Vy
T2ZUd28oMTw8MzEgKyBzb21lIGludCBzbWFsbGVyIHRoYW4gMTw8MzEpID09IDAuCi0gICAgYWxs
b2NhdGlvblNpemUgPSBzdGQ6Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3
byhhbGxvY2F0aW9uU2l6ZSkpOwotCi0gICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0
KCkpCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgs
IGFsbG9jYXRpb25TaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxv
Y2F0aW9uU2l6ZSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBhbGxvY2F0aW9u
U2l6ZSk7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgQVNTRVJUKHN0cmluZy5pczhC
aXQoKSk7Ci0gICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9s
ZW5ndGg7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgYXBwZW5kUXVvdGVkSlNP
TlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgbV9sZW5ndGggPSBvdXRw
dXQgLSBtX2J1ZmZlckNoYXJhY3RlcnM4OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBv
dXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoOwotICAgICAgICAqb3V0cHV0
KysgPSAnIic7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBl
bmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kUXVvdGVk
SlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAgICAgIG1fbGVuZ3RoID0g
b3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0ZXJzMTY7Ci0gICAgfQotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY0NGY2NTkx
NjIwNmI0YzdjYmZjMDNjOTg4NTA4NWNiZGJkM2RjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCkBAIC0wLDAgKzEsMTE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTW96
aWxsYSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0
IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4g
SWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAqIGZp
bGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKwor
I2luY2x1ZGUgIldURlN0cmluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIGNvbnN0
IGNvbnN0ZXhwciBzdGQ6OmFycmF5PExDaGFyLCAyNTY+IEVzY2FwZVRhYmxlID0geworICAgICd1
JywgJ3UnLCAndScsICd1JywgJ3UnLCAndScsICd1JywgJ3UnLAorICAgICdiJywgJ3QnLCAnbics
ICd1JywgJ2YnLCAncicsICd1JywgJ3UnLAorICAgICd1JywgJ3UnLCAndScsICd1JywgJ3UnLCAn
dScsICd1JywgJ3UnLAorICAgICd1JywgJ3UnLCAndScsICd1JywgJ3UnLCAndScsICd1JywgJ3Un
LAorICAgIDAsICAgMCwgICdcIicsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgJ1xcJywgMCwgICAwLCAg
IDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRDaGFyYWN0ZXJUeXBlLCB0
eXBlbmFtZSBJbnB1dENoYXJhY3RlclR5cGU+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGFw
cGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBlKiYgb3V0cHV0
LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsgbGVuZ3RoOyBp
bnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKKyAgICAgICAgY29uc3QgSW5wdXRDaGFyYWN0ZXJUeXBl
IGNoYXJhY3RlciA9ICppbnB1dDsKKyAgICAgICAgY29uc3QgTENoYXIgZXNjYXBlZCA9IEVzY2Fw
ZVRhYmxlW2NoYXJhY3RlciAmIDB4RkZdOworICAgICAgICBpZiAoTElLRUxZKCFlc2NhcGVkIHx8
IGNoYXJhY3RlciA+IDB4RkYpKSB7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBjaGFyYWN0ZXI7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXRwdXQrKyA9
ICdcXCc7CisgICAgICAgICpvdXRwdXQrKyA9IGVzY2FwZWQ7CisgICAgICAgIGlmIChVTkxJS0VM
WShlc2NhcGVkID09ICd1JykpIHsKKyAgICAgICAgICAgIEFTU0VSVCghKGNoYXJhY3RlciAmIDB4
RkYwMCkpOworICAgICAgICAgICAgKm91dHB1dCsrID0gJzAnOworICAgICAgICAgICAgKm91dHB1
dCsrID0gJzAnOworICAgICAgICAgICAgKm91dHB1dCsrID0gdXBwZXJOaWJibGVUb0xvd2VyY2Fz
ZUFTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9IGxvd2Vy
TmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggYnVm
ZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZworICAgIC8vIHRv
IHdvcnJ5IGFib3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgorICAgIC8vIFRoZSAyIGlz
IGZvciB0aGUgJyInIHF1b3RlcyBvbiBlYWNoIGVuZC4KKyAgICAvLyBUaGUgNiBpcyBmb3IgY2hh
cmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgXHVOTk5OIGVuY29kZWQuCisgICAgQ2hlY2tlZDx1bnNp
Z25lZD4gc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIENoZWNrZWQ8dW5zaWdu
ZWQ+IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7CisgICAgbWF4aW11bUNhcGFj
aXR5UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7CisgICAgdW5zaWduZWQgYWxsb2Nh
dGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsKKyAgICAvLyBU
aGlzIG1heCgpIGlzIGhlcmUgdG8gYWxsb3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMgYmV0d2VlbiB0
aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAyXSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2VyT2ZUd28oMTw8
MzEgKyBzb21lIGludCBzbWFsbGVyIHRoYW4gMTw8MzEpID09IDAuCisgICAgYWxsb2NhdGlvblNp
emUgPSBzdGQ6Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3byhhbGxvY2F0
aW9uU2l6ZSkpOworCisgICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCisgICAg
ICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGFsbG9jYXRp
b25TaXplKTsKKyAgICBlbHNlCisgICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxvY2F0aW9uU2l6
ZSk7CisgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBhbGxvY2F0aW9uU2l6ZSk7CisK
KyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7Cisg
ICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9sZW5ndGg7Cisg
ICAgICAgICpvdXRwdXQrKyA9ICciJzsKKyAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0lu
dGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgICAgICpvdXRwdXQrKyA9ICciJzsKKyAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBtX2J1
ZmZlckNoYXJhY3RlcnM4OworICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyKiBvdXRwdXQgPSBt
X2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoOworICAgICAgICAqb3V0cHV0KysgPSAnIic7
CisgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICBhcHBlbmRRdW90ZWRK
U09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxl
bmd0aCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmlu
Z0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkp
OworICAgICAgICAqb3V0cHV0KysgPSAnIic7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0g
bV9idWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgfQorICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3Ro
KCkgPj0gbV9sZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319241</attachid>
            <date>2017-08-28 21:29:54 -0700</date>
            <delta_ts>2017-08-28 21:33:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176044-20170829132953.patch</filename>
            <type>text/plain</type>
            <size>15264</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI0NjhiMDFiZGYzNzQ2ZDg4M2NjZjA4
ODBlZTkyMmFmZDdjNTU5MDguLmM0MDYyZmM3Y2Q1ZDUyZjhjYTg4ZmU4NWRjMzhmOTYzZjE3ZWE0
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTctMDgtMjggIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRhYmxlIGJhc2VkIGFwcHJv
YWNoIGZvciBKU09OLnN0cmluZ2lmeSdzIFF1b3RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZSBjaGFuZ2UgZXNjYXBlIG9wZXJhdGlvbiBvZiBKU09O
IFF1b3RlIGZyb20gYnJhbmNoLWJhc2VkIHRvIHRhYmxlLWJhc2VkLgorICAgICAgICBUaGlzIHBh
dGNoIHBhcnRpYWxseSBhZG9wdHMgU3BpZGVyTW9ua2V5J3MgY2hhbmdlIHRvIFN0cmluZ0J1aWxk
ZXJKU09OLmNwcAorICAgICAgICB0byBvcHRpbWl6ZSB0aGlzIGVzY2FwaW5nIG9wZXJhdGlvbi4g
V2Ugc2VwYXJhdGUgY2hhbmdlcyBmcm9tIFN0cmluZ0J1aWxkZXIuY3BwCisgICAgICAgIHRvIGFw
cGx5IE1QTCB0byBTdHJpbmdCdWlsZGVySlNPTi5jcHAgZmlsZS4gU2luY2UgV2ViS2l0IGFscmVh
ZHkgYWRvcHRzIE1QTCBpbgorICAgICAgICBzb21lIGZpbGVzIChsaWtlLCBEYXRlTWF0aC5oKSwg
aXQgaXMgYWNjZXB0YWJsZS4KKworICAgICAgICBLcmFrZW4ganNvbi1zdHJpbmdpZnktdGluZGVy
Ym94IHNob3dzIDcuMiUgaW1wcm92ZW1lbnQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZSAgICAgICAgICAgICAgICAgIHBhdGNoZWQKKworICAg
ICAgICBqc29uLXN0cmluZ2lmeS10aW5kZXJib3ggICAgICAgIDQwLjQyOSstMC43NzEgICAgICBe
ICAgICAgMzcuNjkzKy0wLjg2MiAgICAgICAgIF4gZGVmaW5pdGVseSAxLjA3MjZ4IGZhc3Rlcgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgor
ICAgICAgICAoV1RGOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWxTbG93KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6CisKIDIwMTct
MDgtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
VXBzdHJlYW0gV0tHZXRXZWJEZWZhdWx0Q0ZTdHJpbmdFbmNvZGluZygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMTU2M2FhYjYwMzYyYzcxYjNkMTJiYTgz
OTQ5YTk1ZDk2ODQ3ZmFhLi5jOTIxOGY1MDZhYWVkYjhkMThjYWNmNWFkNjYwYjIxMWI5Y2Q5Zjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOCw2ICsx
MzgsNyBAQAogCQlFMzExRkIxNzFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxMUZCMTUxRjBB
NTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNwcCAqLzsgfTsKIAkJRTM4QzQxMjUxRUI0RTA0
QzAwNDI5NTdEIC8qIENQVVRpbWVDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEM0MTI0MUVCNEUwNEMwMDQyOTU3RCAvKiBDUFVUaW1lQ29j
b2EubW0gKi87IH07CiAJCUUzOEM0MTI4MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEM0MTI2MUVC
NEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLzsgfTsKKwkJRTM4RDZFMjcxRjU1MjJFMzAw
QTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEQ2RTI2MUY1NTIyRTMwMEE3NUNDNCAvKiBTdHJpbmdC
dWlsZGVySlNPTi5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3Jr
UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CiAJCUU0QTBB
RDNEMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEwQUQzQzFBOTYyNTNDMDA1MzZERjYg
LyogV29ya1F1ZXVlQ29jb2EuY3BwICovOyB9OwogCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQg
LyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi87IH07
CkBAIC01NjMsNiArNTY0LDcgQEAKIAkJRTM4QzQxMjQxRUI0RTA0QzAwNDI5NTdEIC8qIENQVVRp
bWVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENQVVRp
bWVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4QzQxMjYxRUI0RTA2
ODAwNDI5NTdEIC8qIENQVVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1BVVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOEM0MTI3
MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENQVVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM4RDZFMjYx
RjU1MjJFMzAwQTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0J1aWxkZXJKU09OLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1
ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1
ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDEsNyArOTQzLDYgQEAKIAkJ
CQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2
OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5
NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAotCQkJCTc5NTIx
MjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290R3JhcGguaCAqLywKIAkJCQkxQTM1MjRB
QTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVDODRCMDFCREFDRDM5MDA4
MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCiAJCQkJMEY2NkIyODQxREM5N0JBQjAwNEExRDNG
IC8qIFNlY29uZHMuY3BwICovLApAQCAtOTUzLDYgKzk1NCw3IEBACiAJCQkJQThBNDczMDkxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCAqLywKIAkJCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQg
LyogU2hhcmVkVGFzay5oICovLAogCQkJCUE4QTQ3MzBBMTUxQTgyNUIwMDQxMjNGRiAvKiBTaW1w
bGVTdGF0cy5oICovLAorCQkJCTc5NTIxMjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290
R3JhcGguaCAqLywKIAkJCQlBOEE0NzMwQjE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlua2Vk
TGlzdC5oICovLAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJI
YXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVy
SGFzaC5oICovLApAQCAtMTA3OSw2ICsxMDgxLDcgQEAKIAkJCQlBOEE0NzMyMzE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nQnVmZmVyLmggKi8sCiAJCQkJQThBNDczMjQxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdHJpbmdCdWlsZGVyLmggKi8sCisJCQkJRTM4RDZFMjYxRjU1MjJFMzAwQTc1Q0M0IC8qIFN0
cmluZ0J1aWxkZXJKU09OLmNwcCAqLywKIAkJCQk0MzBCNDc4NzFBQUFBQzFBMDAxMjIzREEgLyog
U3RyaW5nQ29tbW9uLmggKi8sCiAJCQkJQThBNDczMjYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmlu
Z0NvbmNhdGVuYXRlLmggKi8sCiAJCQkJN0NENEMyNkYxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oICovLApAQCAtMTM5Myw2ICsxMzk2LDcgQEAKIAkJCQlGRURB
Q0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMzM3REI5Q0U3NDM0MTBGQUYwNzZFMTcgLyogU3RhY2tUcmFjZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzhENkUyNzFGNTUyMkUzMDBBNzVDQzQgLyogU3RyaW5nQnVpbGRl
ckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgyRTY5IC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQwMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZDMTgyNDM1QTYw
MEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDMwZDRmYTlmMDFhMDhkYjUzZDgwNGU3ZWI0NDU4ZTM3OTMwMDEwMTUuLjQ5MDk2
MDIyYjI0MTIyZWI3Mzc2YWNiNjYyOWIyZmY4NjM4MGEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CkBAIC0yODQsNiArMjg0LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgdGV4dC9CYXNlNjQuY3Bw
CiAgICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5jcHAKKyAgICB0
ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNwcAogICAgIHRleHQvU3RyaW5nSW1wbC5jcHAKICAgICB0
ZXh0L1N0cmluZ1ZpZXcuY3BwCiAgICAgdGV4dC9TeW1ib2xJbXBsLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggNDM2MDE1YTQzYmFhOTBmMjdhNDA3Y2Y5ZGE5ZThl
ZDg0NGYyZTMxNS4uODViMGMyMWU3Y2IzMjY4OGFkYjE5YzgwYWQxZWJlYWU0ZmM1ZDMwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0zODUsOTkgKzM4NSw0IEBAIHZv
aWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogICAgIH0KIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbFNsb3coT3V0cHV0Q2hh
cmFjdGVyVHlwZSomIG91dHB1dCwgY29uc3QgSW5wdXRDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikK
LXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewotICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgKm91
dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1dCsrID0gJ3QnOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICdccic6Ci0gICAgICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRw
dXQrKyA9ICdyJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnXG4nOgotICAgICAgICAqb3V0
cHV0KysgPSAnXFwnOwotICAgICAgICAqb3V0cHV0KysgPSAnbic7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgJ1xmJzoKLSAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1
dCsrID0gJ2YnOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdcYic6Ci0gICAgICAgICpvdXRw
dXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICdiJzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKCEoY2hhcmFjdGVyICYgMHhGRjAwKSk7Ci0gICAg
ICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICd1JzsKLSAgICAgICAg
Km91dHB1dCsrID0gJzAnOwotICAgICAgICAqb3V0cHV0KysgPSAnMCc7Ci0gICAgICAgICpvdXRw
dXQrKyA9IHVwcGVyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7Ci0g
ICAgICAgICpvdXRwdXQrKyA9IGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNo
YXJhY3Rlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4KLXN0YXRp
YyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBl
KiYgb3V0cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsg
bGVuZ3RoOyBpbnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKLSAgICAgICAgY29uc3QgSW5wdXRDaGFy
YWN0ZXJUeXBlIGNoYXJhY3RlciA9ICppbnB1dDsKLSAgICAgICAgaWYgKExJS0VMWShjaGFyYWN0
ZXIgIT0gJyInICYmIGNoYXJhY3RlciAhPSAnXFwnICYmIGNoYXJhY3RlciA+IDB4MUYpKSB7Ci0g
ICAgICAgICAgICAqb3V0cHV0KysgPSBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyInIHx8IGNoYXJhY3RlciA9
PSAnXFwnKSB7Ci0gICAgICAgICAgICAqb3V0cHV0KysgPSAnXFwnOwotICAgICAgICAgICAgKm91
dHB1dCsrID0gY2hhcmFjdGVyOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWxTbG93KG91dHB1dCwgY2hhcmFj
dGVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBl
bm91Z2ggYnVmZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZwot
ICAgIC8vIHRvIHdvcnJ5IGFib3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgotICAgIC8v
IFRoZSAyIGlzIGZvciB0aGUgJyInIHF1b3RlcyBvbiBlYWNoIGVuZC4KLSAgICAvLyBUaGUgNiBp
cyBmb3IgY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgXHVOTk5OIGVuY29kZWQuCi0gICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIENoZWNr
ZWQ8dW5zaWduZWQ+IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7Ci0gICAgbWF4
aW11bUNhcGFjaXR5UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7Ci0gICAgdW5zaWdu
ZWQgYWxsb2NhdGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsK
LSAgICAvLyBUaGlzIG1heCgpIGlzIGhlcmUgdG8gYWxsb3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMg
YmV0d2VlbiB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAyXSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2Vy
T2ZUd28oMTw8MzEgKyBzb21lIGludCBzbWFsbGVyIHRoYW4gMTw8MzEpID09IDAuCi0gICAgYWxs
b2NhdGlvblNpemUgPSBzdGQ6Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3
byhhbGxvY2F0aW9uU2l6ZSkpOwotCi0gICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0
KCkpCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgs
IGFsbG9jYXRpb25TaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxv
Y2F0aW9uU2l6ZSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBhbGxvY2F0aW9u
U2l6ZSk7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgQVNTRVJUKHN0cmluZy5pczhC
aXQoKSk7Ci0gICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9s
ZW5ndGg7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgYXBwZW5kUXVvdGVkSlNP
TlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgbV9sZW5ndGggPSBvdXRw
dXQgLSBtX2J1ZmZlckNoYXJhY3RlcnM4OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBv
dXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoOwotICAgICAgICAqb3V0cHV0
KysgPSAnIic7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBl
bmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kUXVvdGVk
SlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAgICAgIG1fbGVuZ3RoID0g
b3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0ZXJzMTY7Ci0gICAgfQotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDFkN2RiZDdl
MzcyNjhhMjhhNzllZTJhZGU3YjNlYjRkMGE4NWNhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCkBAIC0wLDAgKzEsMTE3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTW96
aWxsYSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0
IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4g
SWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAqIGZp
bGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKwor
I2luY2x1ZGUgIldURlN0cmluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyB0YWJs
ZSBkcml2ZW4gZXNjYXBpbmcgaXMgcG9ydGVkIGZyb20gU3BpZGVyTW9ua2V5Lgorc3RhdGljIGNv
bnN0IGNvbnN0ZXhwciBzdGQ6OmFycmF5PExDaGFyLCAyNTY+IEVzY2FwZVRhYmxlID0geworICAg
ICd1JywgJ3UnLCAndScsICd1JywgJ3UnLCAndScsICd1JywgJ3UnLAorICAgICdiJywgJ3QnLCAn
bicsICd1JywgJ2YnLCAncicsICd1JywgJ3UnLAorICAgICd1JywgJ3UnLCAndScsICd1JywgJ3Un
LCAndScsICd1JywgJ3UnLAorICAgICd1JywgJ3UnLCAndScsICd1JywgJ3UnLCAndScsICd1Jywg
J3UnLAorICAgIDAsICAgMCwgICdcIicsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgJ1xcJywgMCwgICAw
LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRDaGFyYWN0ZXJUeXBl
LCB0eXBlbmFtZSBJbnB1dENoYXJhY3RlclR5cGU+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lk
IGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBlKiYgb3V0
cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsgbGVuZ3Ro
OyBpbnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKKyAgICAgICAgY29uc3QgSW5wdXRDaGFyYWN0ZXJU
eXBlIGNoYXJhY3RlciA9ICppbnB1dDsKKyAgICAgICAgY29uc3QgTENoYXIgZXNjYXBlZCA9IEVz
Y2FwZVRhYmxlW2NoYXJhY3RlciAmIDB4RkZdOworICAgICAgICBpZiAoTElLRUxZKCFlc2NhcGVk
IHx8IGNoYXJhY3RlciA+IDB4RkYpKSB7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBjaGFyYWN0
ZXI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXRwdXQr
KyA9ICdcXCc7CisgICAgICAgICpvdXRwdXQrKyA9IGVzY2FwZWQ7CisgICAgICAgIGlmIChVTkxJ
S0VMWShlc2NhcGVkID09ICd1JykpIHsKKyAgICAgICAgICAgIEFTU0VSVCghKGNoYXJhY3RlciAm
IDB4RkYwMCkpOworICAgICAgICAgICAgKm91dHB1dCsrID0gJzAnOworICAgICAgICAgICAgKm91
dHB1dCsrID0gJzAnOworICAgICAgICAgICAgKm91dHB1dCsrID0gdXBwZXJOaWJibGVUb0xvd2Vy
Y2FzZUFTQ0lJSGV4RGlnaXQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9IGxv
d2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2gg
YnVmZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZworICAgIC8v
IHRvIHdvcnJ5IGFib3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgorICAgIC8vIFRoZSAy
IGlzIGZvciB0aGUgJyInIHF1b3RlcyBvbiBlYWNoIGVuZC4KKyAgICAvLyBUaGUgNiBpcyBmb3Ig
Y2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgXHVOTk5OIGVuY29kZWQuCisgICAgQ2hlY2tlZDx1
bnNpZ25lZD4gc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIENoZWNrZWQ8dW5z
aWduZWQ+IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7CisgICAgbWF4aW11bUNh
cGFjaXR5UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7CisgICAgdW5zaWduZWQgYWxs
b2NhdGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsKKyAgICAv
LyBUaGlzIG1heCgpIGlzIGhlcmUgdG8gYWxsb3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMgYmV0d2Vl
biB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAyXSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2VyT2ZUd28o
MTw8MzEgKyBzb21lIGludCBzbWFsbGVyIHRoYW4gMTw8MzEpID09IDAuCisgICAgYWxsb2NhdGlv
blNpemUgPSBzdGQ6Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3byhhbGxv
Y2F0aW9uU2l6ZSkpOworCisgICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCisg
ICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGFsbG9j
YXRpb25TaXplKTsKKyAgICBlbHNlCisgICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxvY2F0aW9u
U2l6ZSk7CisgICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBhbGxvY2F0aW9uU2l6ZSk7
CisKKyAgICBpZiAoaXM4Qml0KCkpIHsKKyAgICAgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7
CisgICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9sZW5ndGg7
CisgICAgICAgICpvdXRwdXQrKyA9ICciJzsKKyAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmlu
Z0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7
CisgICAgICAgICpvdXRwdXQrKyA9ICciJzsKKyAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBt
X2J1ZmZlckNoYXJhY3RlcnM4OworICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyKiBvdXRwdXQg
PSBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoOworICAgICAgICAqb3V0cHV0KysgPSAn
Iic7CisgICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICBhcHBlbmRRdW90
ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5n
Lmxlbmd0aCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0
cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3Ro
KCkpOworICAgICAgICAqb3V0cHV0KysgPSAnIic7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0
IC0gbV9idWZmZXJDaGFyYWN0ZXJzMTY7CisgICAgfQorICAgIEFTU0VSVChtX2J1ZmZlci0+bGVu
Z3RoKCkgPj0gbV9sZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319242</attachid>
            <date>2017-08-28 21:33:48 -0700</date>
            <delta_ts>2017-08-29 09:27:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176044-20170829133347.patch</filename>
            <type>text/plain</type>
            <size>15252</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI0NjhiMDFiZGYzNzQ2ZDg4M2NjZjA4
ODBlZTkyMmFmZDdjNTU5MDguLmM0MDYyZmM3Y2Q1ZDUyZjhjYTg4ZmU4NWRjMzhmOTYzZjE3ZWE0
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTctMDgtMjggIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gVXNlIHRhYmxlIGJhc2VkIGFwcHJv
YWNoIGZvciBKU09OLnN0cmluZ2lmeSdzIFF1b3RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYwNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZSBjaGFuZ2UgZXNjYXBlIG9wZXJhdGlvbiBvZiBKU09O
IFF1b3RlIGZyb20gYnJhbmNoLWJhc2VkIHRvIHRhYmxlLWJhc2VkLgorICAgICAgICBUaGlzIHBh
dGNoIHBhcnRpYWxseSBhZG9wdHMgU3BpZGVyTW9ua2V5J3MgY2hhbmdlIHRvIFN0cmluZ0J1aWxk
ZXJKU09OLmNwcAorICAgICAgICB0byBvcHRpbWl6ZSB0aGlzIGVzY2FwaW5nIG9wZXJhdGlvbi4g
V2Ugc2VwYXJhdGUgY2hhbmdlcyBmcm9tIFN0cmluZ0J1aWxkZXIuY3BwCisgICAgICAgIHRvIGFw
cGx5IE1QTCB0byBTdHJpbmdCdWlsZGVySlNPTi5jcHAgZmlsZS4gU2luY2UgV2ViS2l0IGFscmVh
ZHkgYWRvcHRzIE1QTCBpbgorICAgICAgICBzb21lIGZpbGVzIChsaWtlLCBEYXRlTWF0aC5oKSwg
aXQgaXMgYWNjZXB0YWJsZS4KKworICAgICAgICBLcmFrZW4ganNvbi1zdHJpbmdpZnktdGluZGVy
Ym94IHNob3dzIDcuMiUgaW1wcm92ZW1lbnQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYXNlbGluZSAgICAgICAgICAgICAgICAgIHBhdGNoZWQKKworICAg
ICAgICBqc29uLXN0cmluZ2lmeS10aW5kZXJib3ggICAgICAgIDQwLjQyOSstMC43NzEgICAgICBe
ICAgICAgMzcuNjkzKy0wLjg2MiAgICAgICAgIF4gZGVmaW5pdGVseSAxLjA3MjZ4IGZhc3Rlcgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOgor
ICAgICAgICAoV1RGOjphcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWxTbG93KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyk6CisKIDIwMTct
MDgtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
VXBzdHJlYW0gV0tHZXRXZWJEZWZhdWx0Q0ZTdHJpbmdFbmNvZGluZygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyMTU2M2FhYjYwMzYyYzcxYjNkMTJiYTgz
OTQ5YTk1ZDk2ODQ3ZmFhLi5jOTIxOGY1MDZhYWVkYjhkMThjYWNmNWFkNjYwYjIxMWI5Y2Q5Zjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzOCw2ICsx
MzgsNyBAQAogCQlFMzExRkIxNzFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxMUZCMTUxRjBB
NTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNwcCAqLzsgfTsKIAkJRTM4QzQxMjUxRUI0RTA0
QzAwNDI5NTdEIC8qIENQVVRpbWVDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEM0MTI0MUVCNEUwNEMwMDQyOTU3RCAvKiBDUFVUaW1lQ29j
b2EubW0gKi87IH07CiAJCUUzOEM0MTI4MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEM0MTI2MUVC
NEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmNwcCAqLzsgfTsKKwkJRTM4RDZFMjcxRjU1MjJFMzAw
QTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOEQ2RTI2MUY1NTIyRTMwMEE3NUNDNCAvKiBTdHJpbmdC
dWlsZGVySlNPTi5jcHAgKi87IH07CiAJCUU0QTBBRDM5MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3Jr
UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBMEFEMzcxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07CiAJCUU0QTBB
RDNEMUE5NjI1M0MwMDUzNkRGNiAvKiBXb3JrUXVldWVDb2NvYS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEEwQUQzQzFBOTYyNTNDMDA1MzZERjYg
LyogV29ya1F1ZXVlQ29jb2EuY3BwICovOyB9OwogCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQg
LyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRURBQ0QzQjE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgKi87IH07
CkBAIC01NjMsNiArNTY0LDcgQEAKIAkJRTM4QzQxMjQxRUI0RTA0QzAwNDI5NTdEIC8qIENQVVRp
bWVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENQVVRp
bWVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4QzQxMjYxRUI0RTA2
ODAwNDI5NTdEIC8qIENQVVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1BVVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzOEM0MTI3
MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENQVVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM4RDZFMjYx
RjU1MjJFMzAwQTc1Q0M0IC8qIFN0cmluZ0J1aWxkZXJKU09OLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ0J1aWxkZXJKU09OLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTNFMTU4MjUxRUFEQTUzQzAwNEEwNzlEIC8qIFN5c3RlbUZyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtRnJlZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1
ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTBBRDM4MUE5NjI0NTUwMDUzNkRG
NiAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1
ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDEsNyArOTQzLDYgQEAKIAkJ
CQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2
OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5
NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAotCQkJCTc5NTIx
MjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290R3JhcGguaCAqLywKIAkJCQkxQTM1MjRB
QTFENjNBMkZGMDAzMTcyOUIgLyogU2NvcGUuaCAqLywKIAkJCQkwRkVDODRCMDFCREFDRDM5MDA4
MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8sCiAJCQkJMEY2NkIyODQxREM5N0JBQjAwNEExRDNG
IC8qIFNlY29uZHMuY3BwICovLApAQCAtOTUzLDYgKzk1NCw3IEBACiAJCQkJQThBNDczMDkxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCAqLywKIAkJCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQg
LyogU2hhcmVkVGFzay5oICovLAogCQkJCUE4QTQ3MzBBMTUxQTgyNUIwMDQxMjNGRiAvKiBTaW1w
bGVTdGF0cy5oICovLAorCQkJCTc5NTIxMjAyMUY0MjU4ODgwMEJENjQyMSAvKiBTaW5nbGVSb290
R3JhcGguaCAqLywKIAkJCQlBOEE0NzMwQjE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlua2Vk
TGlzdC5oICovLAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJI
YXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVy
SGFzaC5oICovLApAQCAtMTA3OSw2ICsxMDgxLDcgQEAKIAkJCQlBOEE0NzMyMzE1MUE4MjVCMDA0
MTIzRkYgLyogU3RyaW5nQnVmZmVyLmggKi8sCiAJCQkJQThBNDczMjQxNTFBODI1QjAwNDEyM0ZG
IC8qIFN0cmluZ0J1aWxkZXIuY3BwICovLAogCQkJCUE4QTQ3MzI1MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdHJpbmdCdWlsZGVyLmggKi8sCisJCQkJRTM4RDZFMjYxRjU1MjJFMzAwQTc1Q0M0IC8qIFN0
cmluZ0J1aWxkZXJKU09OLmNwcCAqLywKIAkJCQk0MzBCNDc4NzFBQUFBQzFBMDAxMjIzREEgLyog
U3RyaW5nQ29tbW9uLmggKi8sCiAJCQkJQThBNDczMjYxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmlu
Z0NvbmNhdGVuYXRlLmggKi8sCiAJCQkJN0NENEMyNkYxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oICovLApAQCAtMTM5Myw2ICsxMzk2LDcgQEAKIAkJCQlGRURB
Q0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMzM3REI5Q0U3NDM0MTBGQUYwNzZFMTcgLyogU3RhY2tUcmFjZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMzhENkUyNzFGNTUyMkUzMDBBNzVDQzQgLyogU3RyaW5nQnVpbGRl
ckpTT04uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgyRTY5IC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQwMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZDMTgyNDM1QTYw
MEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDMwZDRmYTlmMDFhMDhkYjUzZDgwNGU3ZWI0NDU4ZTM3OTMwMDEwMTUuLjQ5MDk2
MDIyYjI0MTIyZWI3Mzc2YWNiNjYyOWIyZmY4NjM4MGEzZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CkBAIC0yODQsNiArMjg0LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgdGV4dC9CYXNlNjQuY3Bw
CiAgICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5jcHAKKyAgICB0
ZXh0L1N0cmluZ0J1aWxkZXJKU09OLmNwcAogICAgIHRleHQvU3RyaW5nSW1wbC5jcHAKICAgICB0
ZXh0L1N0cmluZ1ZpZXcuY3BwCiAgICAgdGV4dC9TeW1ib2xJbXBsLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAKaW5kZXggNDM2MDE1YTQzYmFhOTBmMjdhNDA3Y2Y5ZGE5ZThl
ZDg0NGYyZTMxNS4uODViMGMyMWU3Y2IzMjY4OGFkYjE5YzgwYWQxZWJlYWU0ZmM1ZDMwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0zODUsOTkgKzM4NSw0IEBAIHZv
aWQgU3RyaW5nQnVpbGRlcjo6c2hyaW5rVG9GaXQoKQogICAgIH0KIH0KIAotdGVtcGxhdGUgPHR5
cGVuYW1lIE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4K
LXN0YXRpYyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbFNsb3coT3V0cHV0Q2hh
cmFjdGVyVHlwZSomIG91dHB1dCwgY29uc3QgSW5wdXRDaGFyYWN0ZXJUeXBlIGNoYXJhY3RlcikK
LXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewotICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgKm91
dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1dCsrID0gJ3QnOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICdccic6Ci0gICAgICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRw
dXQrKyA9ICdyJzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnXG4nOgotICAgICAgICAqb3V0
cHV0KysgPSAnXFwnOwotICAgICAgICAqb3V0cHV0KysgPSAnbic7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgJ1xmJzoKLSAgICAgICAgKm91dHB1dCsrID0gJ1xcJzsKLSAgICAgICAgKm91dHB1
dCsrID0gJ2YnOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdcYic6Ci0gICAgICAgICpvdXRw
dXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICdiJzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKCEoY2hhcmFjdGVyICYgMHhGRjAwKSk7Ci0gICAg
ICAgICpvdXRwdXQrKyA9ICdcXCc7Ci0gICAgICAgICpvdXRwdXQrKyA9ICd1JzsKLSAgICAgICAg
Km91dHB1dCsrID0gJzAnOwotICAgICAgICAqb3V0cHV0KysgPSAnMCc7Ci0gICAgICAgICpvdXRw
dXQrKyA9IHVwcGVyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7Ci0g
ICAgICAgICpvdXRwdXQrKyA9IGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KGNo
YXJhY3Rlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IE91dHB1dENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIElucHV0Q2hhcmFjdGVyVHlwZT4KLXN0YXRp
YyB2b2lkIGFwcGVuZFF1b3RlZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBl
KiYgb3V0cHV0LCBjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgZm9yIChjb25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsg
bGVuZ3RoOyBpbnB1dCAhPSBlbmQ7ICsraW5wdXQpIHsKLSAgICAgICAgY29uc3QgSW5wdXRDaGFy
YWN0ZXJUeXBlIGNoYXJhY3RlciA9ICppbnB1dDsKLSAgICAgICAgaWYgKExJS0VMWShjaGFyYWN0
ZXIgIT0gJyInICYmIGNoYXJhY3RlciAhPSAnXFwnICYmIGNoYXJhY3RlciA+IDB4MUYpKSB7Ci0g
ICAgICAgICAgICAqb3V0cHV0KysgPSBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gJyInIHx8IGNoYXJhY3RlciA9
PSAnXFwnKSB7Ci0gICAgICAgICAgICAqb3V0cHV0KysgPSAnXFwnOwotICAgICAgICAgICAgKm91
dHB1dCsrID0gY2hhcmFjdGVyOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWxTbG93KG91dHB1dCwgY2hhcmFj
dGVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBl
bm91Z2ggYnVmZmVyIHNwYWNlIHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZwot
ICAgIC8vIHRvIHdvcnJ5IGFib3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgotICAgIC8v
IFRoZSAyIGlzIGZvciB0aGUgJyInIHF1b3RlcyBvbiBlYWNoIGVuZC4KLSAgICAvLyBUaGUgNiBp
cyBmb3IgY2hhcmFjdGVycyB0aGF0IG5lZWQgdG8gYmUgXHVOTk5OIGVuY29kZWQuCi0gICAgQ2hl
Y2tlZDx1bnNpZ25lZD4gc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIENoZWNr
ZWQ8dW5zaWduZWQ+IG1heGltdW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7Ci0gICAgbWF4
aW11bUNhcGFjaXR5UmVxdWlyZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7Ci0gICAgdW5zaWdu
ZWQgYWxsb2NhdGlvblNpemUgPSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsK
LSAgICAvLyBUaGlzIG1heCgpIGlzIGhlcmUgdG8gYWxsb3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMg
YmV0d2VlbiB0aGUgcmFuZ2UgWzJeMzEsIDJeMzIgLSAyXSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2Vy
T2ZUd28oMTw8MzEgKyBzb21lIGludCBzbWFsbGVyIHRoYW4gMTw8MzEpID09IDAuCi0gICAgYWxs
b2NhdGlvblNpemUgPSBzdGQ6Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3
byhhbGxvY2F0aW9uU2l6ZSkpOwotCi0gICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0
KCkpCi0gICAgICAgIGFsbG9jYXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgs
IGFsbG9jYXRpb25TaXplKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxv
Y2F0aW9uU2l6ZSk7Ci0gICAgQVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBhbGxvY2F0aW9u
U2l6ZSk7Ci0KLSAgICBpZiAoaXM4Qml0KCkpIHsKLSAgICAgICAgQVNTRVJUKHN0cmluZy5pczhC
aXQoKSk7Ci0gICAgICAgIExDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9s
ZW5ndGg7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgYXBwZW5kUXVvdGVkSlNP
TlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5n
dGgoKSk7Ci0gICAgICAgICpvdXRwdXQrKyA9ICciJzsKLSAgICAgICAgbV9sZW5ndGggPSBvdXRw
dXQgLSBtX2J1ZmZlckNoYXJhY3RlcnM4OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVDaGFyKiBv
dXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnMxNiArIG1fbGVuZ3RoOwotICAgICAgICAqb3V0cHV0
KysgPSAnIic7Ci0gICAgICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgICAgICBhcHBl
bmRRdW90ZWRKU09OU3RyaW5nSW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwg
c3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwZW5kUXVvdGVk
SlNPTlN0cmluZ0ludGVybmFsKG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICAqb3V0cHV0KysgPSAnIic7Ci0gICAgICAgIG1fbGVuZ3RoID0g
b3V0cHV0IC0gbV9idWZmZXJDaGFyYWN0ZXJzMTY7Ci0gICAgfQotICAgIEFTU0VSVChtX2J1ZmZl
ci0+bGVuZ3RoKCkgPj0gbV9sZW5ndGgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdCdWlsZGVySlNPTi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJlOTlmMDc4
ZTY2NzIyMjcwMzk3MGFmMmViYzRlZDk1MmRiOGRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQnVpbGRlckpTT04uY3BwCkBAIC0wLDAgKzEsMTE3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTW96
aWxsYSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0
IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAqIExpY2Vuc2UsIHYuIDIuMC4g
SWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAqIGZp
bGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKwor
I2luY2x1ZGUgIldURlN0cmluZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyB0YWJs
ZSBkcml2ZW4gZXNjYXBpbmcgaXMgcG9ydGVkIGZyb20gU3BpZGVyTW9ua2V5Lgorc3RhdGljIGNv
bnN0IGNvbnN0ZXhwciBMQ2hhciBFc2NhcGVUYWJsZVsyNTZdID0geworICAgICd1JywgJ3UnLCAn
dScsICd1JywgJ3UnLCAndScsICd1JywgJ3UnLAorICAgICdiJywgJ3QnLCAnbicsICd1JywgJ2Yn
LCAncicsICd1JywgJ3UnLAorICAgICd1JywgJ3UnLCAndScsICd1JywgJ3UnLCAndScsICd1Jywg
J3UnLAorICAgICd1JywgJ3UnLCAndScsICd1JywgJ3UnLCAndScsICd1JywgJ3UnLAorICAgIDAs
ICAgMCwgICdcIicsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgJ1xcJywgMCwgICAwLCAgIDAsCisgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAor
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwK
K307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPdXRwdXRDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBJ
bnB1dENoYXJhY3RlclR5cGU+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGFwcGVuZFF1b3Rl
ZEpTT05TdHJpbmdJbnRlcm5hbChPdXRwdXRDaGFyYWN0ZXJUeXBlKiYgb3V0cHV0LCBjb25zdCBJ
bnB1dENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgZm9yIChj
b25zdCBJbnB1dENoYXJhY3RlclR5cGUqIGVuZCA9IGlucHV0ICsgbGVuZ3RoOyBpbnB1dCAhPSBl
bmQ7ICsraW5wdXQpIHsKKyAgICAgICAgY29uc3QgSW5wdXRDaGFyYWN0ZXJUeXBlIGNoYXJhY3Rl
ciA9ICppbnB1dDsKKyAgICAgICAgY29uc3QgTENoYXIgZXNjYXBlZCA9IEVzY2FwZVRhYmxlW2No
YXJhY3RlciAmIDB4RkZdOworICAgICAgICBpZiAoTElLRUxZKCFlc2NhcGVkIHx8IGNoYXJhY3Rl
ciA+IDB4RkYpKSB7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBjaGFyYWN0ZXI7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXRwdXQrKyA9ICdcXCc7Cisg
ICAgICAgICpvdXRwdXQrKyA9IGVzY2FwZWQ7CisgICAgICAgIGlmIChVTkxJS0VMWShlc2NhcGVk
ID09ICd1JykpIHsKKyAgICAgICAgICAgIEFTU0VSVCghKGNoYXJhY3RlciAmIDB4RkYwMCkpOwor
ICAgICAgICAgICAgKm91dHB1dCsrID0gJzAnOworICAgICAgICAgICAgKm91dHB1dCsrID0gJzAn
OworICAgICAgICAgICAgKm91dHB1dCsrID0gdXBwZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4
RGlnaXQoY2hhcmFjdGVyKTsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9IGxvd2VyTmliYmxlVG9M
b3dlcmNhc2VBU0NJSUhleERpZ2l0KGNoYXJhY3Rlcik7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kUXVvdGVkSlNPTlN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggYnVmZmVyIHNwYWNl
IHRvIGFwcGVuZCB0aGlzIHN0cmluZyB3aXRob3V0IGhhdmluZworICAgIC8vIHRvIHdvcnJ5IGFi
b3V0IHJlYWxsb2NhdGluZyBpbiB0aGUgbWlkZGxlLgorICAgIC8vIFRoZSAyIGlzIGZvciB0aGUg
JyInIHF1b3RlcyBvbiBlYWNoIGVuZC4KKyAgICAvLyBUaGUgNiBpcyBmb3IgY2hhcmFjdGVycyB0
aGF0IG5lZWQgdG8gYmUgXHVOTk5OIGVuY29kZWQuCisgICAgQ2hlY2tlZDx1bnNpZ25lZD4gc3Ry
aW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIENoZWNrZWQ8dW5zaWduZWQ+IG1heGlt
dW1DYXBhY2l0eVJlcXVpcmVkID0gbGVuZ3RoKCk7CisgICAgbWF4aW11bUNhcGFjaXR5UmVxdWly
ZWQgKz0gMiArIHN0cmluZ0xlbmd0aCAqIDY7CisgICAgdW5zaWduZWQgYWxsb2NhdGlvblNpemUg
PSBtYXhpbXVtQ2FwYWNpdHlSZXF1aXJlZC51bnNhZmVHZXQoKTsKKyAgICAvLyBUaGlzIG1heCgp
IGlzIGhlcmUgdG8gYWxsb3cgdXMgdG8gYWxsb2NhdGUgc2l6ZXMgYmV0d2VlbiB0aGUgcmFuZ2Ug
WzJeMzEsIDJeMzIgLSAyXSBiZWNhdXNlIHJvdW5kVXBUb1Bvd2VyT2ZUd28oMTw8MzEgKyBzb21l
IGludCBzbWFsbGVyIHRoYW4gMTw8MzEpID09IDAuCisgICAgYWxsb2NhdGlvblNpemUgPSBzdGQ6
Om1heChhbGxvY2F0aW9uU2l6ZSwgcm91bmRVcFRvUG93ZXJPZlR3byhhbGxvY2F0aW9uU2l6ZSkp
OworCisgICAgaWYgKGlzOEJpdCgpICYmICFzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIGFsbG9j
YXRlQnVmZmVyVXBDb252ZXJ0KG1fYnVmZmVyQ2hhcmFjdGVyczgsIGFsbG9jYXRpb25TaXplKTsK
KyAgICBlbHNlCisgICAgICAgIHJlc2VydmVDYXBhY2l0eShhbGxvY2F0aW9uU2l6ZSk7CisgICAg
QVNTRVJUKG1fYnVmZmVyLT5sZW5ndGgoKSA+PSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBpZiAo
aXM4Qml0KCkpIHsKKyAgICAgICAgQVNTRVJUKHN0cmluZy5pczhCaXQoKSk7CisgICAgICAgIExD
aGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNoYXJhY3RlcnM4ICsgbV9sZW5ndGg7CisgICAgICAgICpv
dXRwdXQrKyA9ICciJzsKKyAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFsKG91
dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgICpv
dXRwdXQrKyA9ICciJzsKKyAgICAgICAgbV9sZW5ndGggPSBvdXRwdXQgLSBtX2J1ZmZlckNoYXJh
Y3RlcnM4OworICAgIH0gZWxzZSB7CisgICAgICAgIFVDaGFyKiBvdXRwdXQgPSBtX2J1ZmZlckNo
YXJhY3RlcnMxNiArIG1fbGVuZ3RoOworICAgICAgICAqb3V0cHV0KysgPSAnIic7CisgICAgICAg
IGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgICAgICBhcHBlbmRRdW90ZWRKU09OU3RyaW5n
SW50ZXJuYWwob3V0cHV0LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkSlNPTlN0cmluZ0ludGVybmFs
KG91dHB1dCwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAg
ICAqb3V0cHV0KysgPSAnIic7CisgICAgICAgIG1fbGVuZ3RoID0gb3V0cHV0IC0gbV9idWZmZXJD
aGFyYWN0ZXJzMTY7CisgICAgfQorICAgIEFTU0VSVChtX2J1ZmZlci0+bGVuZ3RoKCkgPj0gbV9s
ZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
</data>
<flag name="review"
          id="339549"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>