<?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>195870</bug_id>
          
          <creation_ts>2019-03-17 18:42:40 -0700</creation_ts>
          <short_desc>Cut down on use of StringBuffer, possibly leading toward removing it entirely</short_desc>
          <delta_ts>2019-03-18 17:28:19 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1517593</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-03-17 18:42:40 -0700</bug_when>
    <thetext>Cut down on use of StringBuffer, possibly leading toward removing it entirely</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517596</commentid>
    <comment_count>1</comment_count>
      <attachid>364995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-03-17 19:04:48 -0700</bug_when>
    <thetext>Created attachment 364995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1517919</commentid>
    <comment_count>2</comment_count>
      <attachid>364995</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-03-18 14:20:50 -0700</bug_when>
    <thetext>Comment on attachment 364995
Patch

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

&gt; Source/WebCore/dom/Document.cpp:1509
&gt; +static String canonicalizedTitle(Document&amp; document, const String&amp; title)

Just a thought for the future, take a StringView.

&gt; Source/WebCore/dom/Document.cpp:1534
&gt; +    return builder == title ? title : builder.toString();

Nice.

&gt; Source/WebCore/platform/Length.cpp:89
&gt;  UniqueArray&lt;Length&gt; newCoordsArray(const String&amp; string, int&amp; len)

OK as-is. You didn&apos;t touch this. Just a thought for the future, fix the argument names.

&gt; Source/WebCore/platform/Length.cpp:92
&gt; +    UChar* spacified;

OK as-is. I get the name. Each time I see it though I keep thinking &quot;specified&quot;. Haha.

&gt; Source/WebCore/platform/Length.cpp:94
&gt;      for (unsigned i = 0; i &lt; length; i++) {

OK as-is. Just a thought, StringView.codeUnit() this loop.

&gt; Source/WebCore/platform/Length.cpp:109
&gt;      auto r = makeUniqueArray&lt;Length&gt;(len);
&gt;  
&gt;      int i = 0;
&gt;      unsigned pos = 0;
&gt;      size_t pos2;

Ok as-is. This code could use more love, maybe even better variable names :D

&gt; Source/WebCore/platform/text/TextCodecUTF16.cpp:73
&gt; +    size_t numCodeUnits = numBytes / 2;

OK as-is. 2 is not memorable in my opinion, but I can figure out why. sizeof(UChar) or something compile-time computable?

&gt; Source/WebCore/rendering/RenderText.cpp:158
&gt; +    for (unsigned i = 1; i &lt; length + 1; i++)

OK as-is. ++i just for the laughs or the compiler goes dumb :D

&gt; Source/WebCore/rendering/RenderText.cpp:177
&gt; +    return result == string ? string : result.toString();

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518023</commentid>
    <comment_count>3</comment_count>
      <attachid>364995</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-03-18 17:00:27 -0700</bug_when>
    <thetext>Comment on attachment 364995
Patch

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

&gt;&gt; Source/WebCore/dom/Document.cpp:1509
&gt;&gt; +static String canonicalizedTitle(Document&amp; document, const String&amp; title)
&gt; 
&gt; Just a thought for the future, take a StringView.

I did consider that. I kept it as a String because of that last line of code below (the one you commented &quot;Nice&quot; on!).

&gt;&gt; Source/WebCore/platform/Length.cpp:89
&gt;&gt;  UniqueArray&lt;Length&gt; newCoordsArray(const String&amp; string, int&amp; len)
&gt; 
&gt; OK as-is. You didn&apos;t touch this. Just a thought for the future, fix the argument names.

I did that and then undid it.

&gt;&gt; Source/WebCore/platform/Length.cpp:92
&gt;&gt; +    UChar* spacified;
&gt; 
&gt; OK as-is. I get the name. Each time I see it though I keep thinking &quot;specified&quot;. Haha.

I did consider making this better as well but decided to leave it alone.

&gt;&gt; Source/WebCore/platform/Length.cpp:94
&gt;&gt;      for (unsigned i = 0; i &lt; length; i++) {
&gt; 
&gt; OK as-is. Just a thought, StringView.codeUnit() this loop.

Because &quot;I&quot; is used to index into both the input string and the &quot;spacified&quot; string I could only do that if I was changing more.

&gt;&gt; Source/WebCore/platform/Length.cpp:109
&gt;&gt;      size_t pos2;
&gt; 
&gt; Ok as-is. This code could use more love, maybe even better variable names :D

Yes, what it really needs is a completely different implementation. No reason we have to copy things just to skip over all the illegal characters.

&gt;&gt; Source/WebCore/platform/text/TextCodecUTF16.cpp:73
&gt;&gt; +    size_t numCodeUnits = numBytes / 2;
&gt; 
&gt; OK as-is. 2 is not memorable in my opinion, but I can figure out why. sizeof(UChar) or something compile-time computable?

Yes, could say sizeof(UChar). I’d like to use the commit queue, so I’ll come back to do it later.

&gt;&gt; Source/WebCore/rendering/RenderText.cpp:158
&gt;&gt; +    for (unsigned i = 1; i &lt; length + 1; i++)
&gt; 
&gt; OK as-is. ++i just for the laughs or the compiler goes dumb :D

Sure, I’d do that, but I’d like to use the commit queue so I won’t for now at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518029</commentid>
    <comment_count>4</comment_count>
      <attachid>364995</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-18 17:27:16 -0700</bug_when>
    <thetext>Comment on attachment 364995
Patch

Clearing flags on attachment: 364995

Committed r243118: &lt;https://trac.webkit.org/changeset/243118&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518030</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-18 17:27:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518031</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-18 17:28:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/49001348&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364995</attachid>
            <date>2019-03-17 19:04:48 -0700</date>
            <delta_ts>2019-03-18 17:27:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195870-20190317190448.patch</filename>
            <type>text/plain</type>
            <size>17308</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzMDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNlY2IyMjg0MDRhYzkzZGRhY2I4NzZk
MDU4YjljNmYwYTQ1NGZkZTguLmViYTIwMzNmZjM2ZWFkZTcyM2MyYWE3YTg4N2RjMWRkNTkwMjYz
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDMtMTcgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIEN1dCBkb3duIG9uIHVzZSBvZiBTdHJpbmdCdWZmZXIsIHBv
c3NpYmx5IGxlYWRpbmcgdG93YXJkIHJlbW92aW5nIGl0IGVudGlyZWx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU4NzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9VUkwuY3BwOiBSZW1vdmUg
YSBub3ctaW5hY2N1cmF0ZSBjb21tZW50IG1lbnRpb25pbmcgU3RyaW5nQnVmZmVyLgorCisgICAg
ICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5jcHA6CisgICAgICAgIChXVEY6OmNvbnZlcnRBU0NJ
SUNhc2UpOiBVc2UgY3JlYXRlVW5pbml0aWFsaXplZCBpbnN0ZWFkIG9mIFN0cmluZ0J1ZmZlci4K
KwogMjAxOS0wMy0xNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
SW1wcm92ZSBub3JtYWxpemF0aW9uIGNvZGUsIGluY2x1ZGluZyBtb3ZpbmcgZnJvbSB1bm9ybS5o
IHRvIHVub3JtMi5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDcwYTJlN2NjOTdjMzgyMzE3N2RmMGI3YTFiMTBi
ZTM5MjAwMmIxMC4uYTNmN2Y5ZGEwYmVkYjEwZDJiMTM2ZGMxYWJkNzY5MWQ2ZmMxNTRkZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE5LTAzLTE3ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBDdXQgZG93biBvbiB1c2Ugb2YgU3RyaW5nQnVmZmVyLCBw
b3NzaWJseSBsZWFkaW5nIHRvd2FyZCByZW1vdmluZyBpdCBlbnRpcmVseQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1ODcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsaXplZFRpdGxlKTogRml4ZWQgYWxsIHRoZSBwcm9i
bGVtcyBtZW50aW9uZWQgaW4gIkZJWE1FIi4KKyAgICAgICAgTWFkZSB0aGlzIGEgc2luZ2xlIGZ1
bmN0aW9uIHJhdGhlciB0aGFuIGEgZnVuY3Rpb24gdGVtcGxhdGUuIFN3aXRjaCB0bworICAgICAg
ICBTdHJpbmdCdWlsZGVyIGluc3RlYWQgb2YgU3RyaW5nQnVmZmVyLiBSZXR1cm4gdGhlIG9yaWdp
bmFsIHN0cmluZyBpZiB0aGUKKyAgICAgICAgY2Fub25pY2FsaXplIG9wZXJhdGlvbiBkb2Vzbid0
IGNoYW5nZSBhbnl0aGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVUaXRs
ZSk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2UgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9M
ZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV3Q29vcmRzQXJyYXkpOiBVc2UgY3JlYXRl
VW5pbml0aWFsaXplZCBpbnN0ZWFkIG9mIFN0cmluZ0J1ZmZlci4KKyAgICAgICAgQWxzbyBnb3Qg
cmlkIG9mIHVubmVlZGVkIHVzZSBvZiB1cGNvbnZlcnRlZENoYXJhY3RlcnMgb24gYSB0ZW1wb3Jh
cnkgc3RyaW5nCisgICAgICAgIHRoYXQgd2UgZXhwbGljaXRseSBjcmVhdGVkIHdpdGggMTYtYml0
IGNoYXJhY3RlcnMuIFRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzCisgICAgICAgIGZ1bmN0aW9uIGNv
dWxkIGJlIGNvbnNpZGVyYWJseSBzaW1wbGlmaWVkIGJ5IG5vdCBjb3B5aW5nIHRoZSBvcmlnaW5h
bCBzdHJpbmcKKyAgICAgICAgYXQgYWxsLCBidXQgZGlkbid0IGRvIHRoYXQgYXQgdGhpcyB0aW1l
LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKTogVXNlIGNyZWF0ZVVuaW5pdGlhbGl6
ZWQgaW5zdGVhZCBvZgorICAgICAgICBTdHJpbmdCdWZmZXIuIEFsc28gcmVuYW1lZCBudW1DaGFy
cyB0byBudW1Db2RlVW5pdHMgdG8gYm90aCBzd2l0Y2ggdG8gY29tcGxldGUKKyAgICAgICAgd29y
ZHMgYW5kIHRvIGJlIHNsaWdodGx5IG1vcmUgYWNjdXJhdGUuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0Tm9CcmVha1NwYWNl
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYXBpdGFsaXplKTogVXNlIFZlY3RvciBpbnN0
ZWFkIG9mIFN0cmluZ0J1ZmZlci4gU2ltcGxpZnkgY29kZSBieQorICAgICAgICB1c2luZyBjb252
ZXJ0Tm9CcmVha1NwYWNlIGZ1bmN0aW9uLiBSZW1vdmVkIGNvZGUgdGhhdCB3YXMgdXNpbmcgU3Ry
aW5nSW1wbAorICAgICAgICBkaXJlY3RseSBmb3IgYSB0aW55IHNwZWVkIGJvb3N0OyBpZiB3ZSB3
YW50IHRvIG9wdGltaXplIHRoZSBwZXJmb3JtYW5jZSBvZgorICAgICAgICB0aGlzIGZ1bmN0aW9u
IHdlIHdvdWxkIG5lZWQgdG8gZG8gbW9yZSB0aGFuIHRoYXQuIFJldHVybiB0aGUgb3JpZ2luYWwg
c3RyaW5nCisgICAgICAgIGlmIGl0IGhhcHBlbnMgdG8gYWxyZWFkeSBiZSBjYXBpdGFsaXplZC4K
KwogMjAxOS0wMy0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT046ICF2bS5pc0luaXRpYWxpemluZ09iamVjdCgpIHZvaWQqIEpTQzo6dHJ5
QWxsb2NhdGVDZWxsSGVscGVyPEpTQzo6U3RydWN0dXJlPiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VUkwuY3BwIGIvU291cmNlL1dURi93dGYvVVJM
LmNwcAppbmRleCBmYTAwMWE4NTFiODQ5NzY3MmVjZTM0ZWRkOGIxNTg2NTEwZTI1NzllLi42N2Q2
MWMwOTcyNDViODdiNmI0Nzc4MThkOGZkNzRmY2Q4MWE4YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9VUkwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1VSTC5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LTIwMDgsIDIwMTEtMjAxMywgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwLDExICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotLy8gRklY
TUU6IFRoaXMgZmlsZSBtYWtlcyB0b28gbXVjaCB1c2Ugb2YgdGhlICsgb3BlcmF0b3Igb24gU3Ry
aW5nLgotLy8gV2UgZWl0aGVyIGhhdmUgdG8gb3B0aW1pemUgdGhhdCBvcGVyYXRvciBzbyBpdCBk
b2Vzbid0IGludm9sdmUKLS8vIHNvIG1hbnkgYWxsb2NhdGlvbnMsIG9yIGNoYW5nZSB0aGlzIHRv
IHVzZSBTdHJpbmdCdWZmZXIgaW5zdGVhZC4KLQotCiBuYW1lc3BhY2UgV1RGIHsKIAogdHlwZWRl
ZiBWZWN0b3I8Y2hhciwgNTEyPiBDaGFyQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdWaWV3LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmlldy5j
cHAKaW5kZXggNDIzODVlMDNlMjgzY2FhYzNjNTM4YjE1OTI2ZDMyODcxMzJhNTMxYS4uZWUxNmI5
Y2QwMTIyYzQ0NjljZTIzZmM3MTRiYzY2MGQ0ZDg2YzYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1ZpZXcuY3BwCkBAIC0zNCw3ICszNCw2IEBAIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dEJyZWFrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Q29udmVyc2lv
bi5oPgogCkBAIC0yMjAsMTEgKzIxOSwxMSBAQCBTdHJpbmcgY29udmVydEFTQ0lJQ2FzZShjb25z
dCBDaGFyYWN0ZXJUeXBlKiBpbnB1dCwgdW5zaWduZWQgbGVuZ3RoKQogICAgIGlmICghaW5wdXQp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTdHJpbmdCdWZmZXI8Q2hhcmFjdGVyVHlwZT4g
YnVmZmVyKGxlbmd0aCk7Ci0gICAgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycyA9IGJ1ZmZlci5j
aGFyYWN0ZXJzKCk7CisgICAgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVyczsKKyAgICBhdXRvIHJl
c3VsdCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGNoYXJhY3RlcnMpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgY2hhcmFj
dGVyc1tpXSA9IHR5cGUgPT0gQVNDSUlDYXNlOjpMb3dlciA/IHRvQVNDSUlMb3dlcihpbnB1dFtp
XSkgOiB0b0FTQ0lJVXBwZXIoaW5wdXRbaV0pOwotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KFdU
Rk1vdmUoYnVmZmVyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3RyaW5nIFN0cmluZ1Zp
ZXc6OmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDVmYTJjNzdlYTk3MmZjODVkZGEzMzkzNDc4NWQxM2EwOTNkNWY1OGEuLjc3ZDA2MzFm
ZTk3YWIyNTk4ZDAyY2RhNTA5MTM0MjVjOWUyOWQ4NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKQEAgLTE1MDYsNDQgKzE1MDYsMzIg
QEAgRWxlbWVudCogRG9jdW1lbnQ6OnNjcm9sbGluZ0VsZW1lbnQoKQogICAgIHJldHVybiBib2R5
KCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHN0YXRpYyBpbmxpbmUg
U3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCitzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgLy8gRklYTUU6IENvbXBpbGluZyBh
IHNlcGFyYXRlIGNvcHkgb2YgdGhpcyBmb3IgTENoYXIgYW5kIFVDaGFyIGlzIGxpa2VseSB1bm5l
Y2Vzc2FyeS4KLSAgICAvLyBGSVhNRTogTWlzc2luZyBhbiBvcHRpbWl6ZWQgY2FzZSBmb3Igd2hl
biB0aXRsZSBpcyBmaW5lIGFzLWlzLiBUaGlzIHVubmVjZXNzYXJpbHkgYWxsb2NhdGVzCi0gICAg
Ly8gYW5kIGtlZXBzIGFyb3VuZCBhIG5ldyBjb3B5LCBhbmQgaXQncyBldmVuIHRoZSBsZXNzIG9w
dGltYWwgdHlwZSBvZiBTdHJpbmdJbXBsIHdpdGggYSBzZXBhcmF0ZSBidWZmZXIuCi0gICAgLy8g
Q291bGQgcHJvYmFibHkganVzdCB1c2UgU3RyaW5nQnVpbGRlciBpbnN0ZWFkLgotCi0gICAgYXV0
byogY2hhcmFjdGVycyA9IHRpdGxlLmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aXRsZS5sZW5ndGgoKTsKKyAgICAvLyBDb2xsYXBzZSBydW5zIG9m
IEhUTUwgc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlIGNoYXJhY3RlcnMuCisgICAgLy8gU3RyaXAg
bGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorICAgIC8vIFJlcGxhY2UgYmFja3NsYXNoZXMg
d2l0aCBjdXJyZW5jeSBzeW1ib2xzLgogCi0gICAgU3RyaW5nQnVmZmVyPENoYXJhY3RlclR5cGU+
IGJ1ZmZlciB7IGxlbmd0aCB9OwotICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCA9IDA7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwogCiAgICAgYXV0byogZGVjb2RlciA9IGRvY3VtZW50LmRl
Y29kZXIoKTsKICAgICBhdXRvIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wgPSBkZWNvZGVyID8g
ZGVjb2Rlci0+ZW5jb2RpbmcoKS5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgOiAnXFwnOwog
Ci0gICAgLy8gQ29sbGFwc2UgcnVucyBvZiBIVE1MIHNwYWNlcyBpbnRvIHNpbmdsZSBzcGFjZSBj
aGFyYWN0ZXJzLgotICAgIC8vIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy4KLSAg
ICAvLyBSZXBsYWNlIGJhY2tzbGFzaGVzIHdpdGggY3VycmVuY3kgc3ltYm9scy4KICAgICBib29s
IHByZXZpb3VzQ2hhcmFjdGVyV2FzSFRNTFNwYWNlID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gY2hhcmFjdGVyID0gY2hh
cmFjdGVyc1tpXTsKKyAgICBmb3IgKGF1dG8gY2hhcmFjdGVyIDogU3RyaW5nVmlldyB7IHRpdGxl
IH0uY29kZVVuaXRzKCkpIHsKICAgICAgICAgaWYgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcikpCiAg
ICAgICAgICAgICBwcmV2aW91c0NoYXJhY3Rlcldhc0hUTUxTcGFjZSA9IHRydWU7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnXFwnKQogICAgICAgICAgICAg
ICAgIGNoYXJhY3RlciA9IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2w7Ci0gICAgICAgICAgICBp
ZiAocHJldmlvdXNDaGFyYWN0ZXJXYXNIVE1MU3BhY2UgJiYgYnVmZmVyTGVuZ3RoKQotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSAnICc7Ci0gICAgICAgICAgICBidWZm
ZXJbYnVmZmVyTGVuZ3RoKytdID0gY2hhcmFjdGVyOworICAgICAgICAgICAgaWYgKHByZXZpb3Vz
Q2hhcmFjdGVyV2FzSFRNTFNwYWNlICYmICFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY2hh
cmFjdGVyKTsKICAgICAgICAgICAgIHByZXZpb3VzQ2hhcmFjdGVyV2FzSFRNTFNwYWNlID0gZmFs
c2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFidWZmZXJMZW5ndGgpCi0gICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBidWZmZXIuc2hyaW5rKGJ1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsKKyAgICByZXR1cm4gYnVpbGRlciA9PSB0
aXRsZSA/IHRpdGxlIDogYnVpbGRlci50b1N0cmluZygpOwogfQogCiB2b2lkIERvY3VtZW50Ojp1
cGRhdGVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKQEAgLTE1NTIsMTQg
KzE1NDAsOSBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGly
ZWN0aW9uJiB0aXRsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9yYXdUaXRsZSA9IHRpdGxl
OwotICAgIG1fdGl0bGUgPSB0aXRsZTsKIAotICAgIGlmICghbV90aXRsZS5zdHJpbmcuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChtX3RpdGxlLnN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgICAg
IG1fdGl0bGUuc3RyaW5nID0gY2Fub25pY2FsaXplZFRpdGxlPExDaGFyPigqdGhpcywgbV90aXRs
ZS5zdHJpbmcpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3RpdGxlLnN0cmluZyA9IGNh
bm9uaWNhbGl6ZWRUaXRsZTxVQ2hhcj4oKnRoaXMsIG1fdGl0bGUuc3RyaW5nKTsKLSAgICB9Cisg
ICAgbV90aXRsZS5zdHJpbmcgPSBjYW5vbmljYWxpemVkVGl0bGUoKnRoaXMsIHRpdGxlLnN0cmlu
Zyk7CisgICAgbV90aXRsZS5kaXJlY3Rpb24gPSB0aXRsZS5kaXJlY3Rpb247CiAKICAgICBpZiAo
YXV0byogbG9hZGVyID0gdGhpcy0+bG9hZGVyKCkpCiAgICAgICAgIGxvYWRlci0+c2V0VGl0bGUo
bV90aXRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAppbmRleCAxZDA0OGY1YTZhMjIx
Mjc0ZTk0YWE2MTE2NjQyNWMwZTM2MDcxZGExLi5jZTljOTQ1OGRjMjBmOWU3MjZiYTQzOWVhZWFi
N2MyMDYyOTBjM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKQEAgLTIsNyArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKCBtdWVsbGVyQGtkZS5vcmcgKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBB
bmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBwZWQubmV0KQogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTMxLDExICszMSw5IEBACiAjaW5jbHVkZSA8d3RmL01hbGxvY1B0ci5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIExlbmd0aCBwYXJzZUxlbmd0aChjb25zdCBVQ2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQpAQCAtOTEsNyArODksOCBAQCBzdGF0aWMgdW5zaWduZWQgY291bnRD
aGFyYWN0ZXIoU3RyaW5nSW1wbCYgc3RyaW5nLCBVQ2hhciBjaGFyYWN0ZXIpCiBVbmlxdWVBcnJh
eTxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbikK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgU3RyaW5nQnVm
ZmVyPFVDaGFyPiBzcGFjaWZpZWQobGVuZ3RoKTsKKyAgICBVQ2hhciogc3BhY2lmaWVkOworICAg
IGF1dG8gc3RyID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNwYWNp
ZmllZCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAg
ICAgIFVDaGFyIGNjID0gc3RyaW5nW2ldOwogICAgICAgICBpZiAoY2MgPiAnOScgfHwgKGNjIDwg
JzAnICYmIGNjICE9ICctJyAmJiBjYyAhPSAnKicgJiYgY2MgIT0gJy4nKSkKQEAgLTk5LDIzICs5
OCwyMSBAQCBVbmlxdWVBcnJheTxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBpbnQmIGxlbikKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3BhY2lmaWVkW2ld
ID0gY2M7CiAgICAgfQotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBzdHIgPSBTdHJpbmdJbXBsOjph
ZG9wdChXVEZNb3ZlKHNwYWNpZmllZCkpOwogCiAgICAgc3RyID0gc3RyLT5zaW1wbGlmeVdoaXRl
U3BhY2UoKTsKIAotICAgIGxlbiA9IGNvdW50Q2hhcmFjdGVyKCpzdHIsICcgJykgKyAxOworICAg
IGxlbiA9IGNvdW50Q2hhcmFjdGVyKHN0ciwgJyAnKSArIDE7CiAgICAgYXV0byByID0gbWFrZVVu
aXF1ZUFycmF5PExlbmd0aD4obGVuKTsKIAogICAgIGludCBpID0gMDsKICAgICB1bnNpZ25lZCBw
b3MgPSAwOwogICAgIHNpemVfdCBwb3MyOwogCi0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3Rl
cnMgPSBTdHJpbmdWaWV3KHN0ci5nZXQoKSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CiAgICAg
d2hpbGUgKChwb3MyID0gc3RyLT5maW5kKCcgJywgcG9zKSkgIT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgcltpKytdID0gcGFyc2VMZW5ndGgodXBjb252ZXJ0ZWRDaGFyYWN0ZXJzICsgcG9zLCBwb3My
IC0gcG9zKTsKKyAgICAgICAgcltpKytdID0gcGFyc2VMZW5ndGgoc3RyLT5jaGFyYWN0ZXJzMTYo
KSArIHBvcywgcG9zMiAtIHBvcyk7CiAgICAgICAgIHBvcyA9IHBvczIrMTsKICAgICB9Ci0gICAg
cltpXSA9IHBhcnNlTGVuZ3RoKHVwY29udmVydGVkQ2hhcmFjdGVycyArIHBvcywgc3RyLT5sZW5n
dGgoKSAtIHBvcyk7CisgICAgcltpXSA9IHBhcnNlTGVuZ3RoKHN0ci0+Y2hhcmFjdGVyczE2KCkg
KyBwb3MsIHN0ci0+bGVuZ3RoKCkgLSBwb3MpOwogCiAgICAgQVNTRVJUKGkgPT0gbGVuIC0gMSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRG
MTYuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAK
aW5kZXggMzg2YTE3ODI2MjcyNmQ4MTEzNDRiN2ZkYjJmYzkyNWZjYzg5Nzg0OS4uYmUwMDY1NjQ0
NjQ4ZmNlMGMzNzlkM2M3NDNlZTIyN2VhOWVkYTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiVGV4dENvZGVjVVRGMTYuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzEsMTAgKzcwLDExIEBAIFN0
cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVu
Z3RoLCBib29sLCBib29sLCBib29sCiAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYnl0ZXMpOwogICAgIHNpemVfdCBu
dW1CeXRlcyA9IGxlbmd0aCArIG1faGF2ZUJ1ZmZlcmVkQnl0ZTsKLSAgICBzaXplX3QgbnVtQ2hh
cnMgPSBudW1CeXRlcyAvIDI7CisgICAgc2l6ZV90IG51bUNvZGVVbml0cyA9IG51bUJ5dGVzIC8g
MjsKKyAgICBSRUxFQVNFX0FTU0VSVChudW1Db2RlVW5pdHMgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpKTsKIAotICAgIFN0cmluZ0J1ZmZlcjxVQ2hhcj4gYnVmZmVyKG51
bUNoYXJzKTsKLSAgICBVQ2hhciogcSA9IGJ1ZmZlci5jaGFyYWN0ZXJzKCk7CisgICAgVUNoYXIq
IHE7CisgICAgYXV0byByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQ29k
ZVVuaXRzLCBxKTsKIAogICAgIGlmIChtX2hhdmVCdWZmZXJlZEJ5dGUpIHsKICAgICAgICAgVUNo
YXIgYzsKQEAgLTg1LDE3ICs4NSwxNyBAQCBTdHJpbmcgVGV4dENvZGVjVVRGMTY6OmRlY29kZShj
b25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCwgYm9vbCwgYm9vbAogICAgICAg
ICAqcSsrID0gYzsKICAgICAgICAgbV9oYXZlQnVmZmVyZWRCeXRlID0gZmFsc2U7CiAgICAgICAg
IHAgKz0gMTsKLSAgICAgICAgbnVtQ2hhcnMgLT0gMTsKKyAgICAgICAgbnVtQ29kZVVuaXRzIC09
IDE7CiAgICAgfQogCiAgICAgaWYgKG1fbGl0dGxlRW5kaWFuKSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtQ2hhcnM7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUNvZGVVbml0czsgKytpKSB7CiAgICAgICAgICAgICBVQ2hhciBjID0gcFswXSB8
IChwWzFdIDw8IDgpOwogICAgICAgICAgICAgcCArPSAyOwogICAgICAgICAgICAgKnErKyA9IGM7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUNoYXJzOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Db2Rl
VW5pdHM7ICsraSkgewogICAgICAgICAgICAgVUNoYXIgYyA9IChwWzBdIDw8IDgpIHwgcFsxXTsK
ICAgICAgICAgICAgIHAgKz0gMjsKICAgICAgICAgICAgICpxKysgPSBjOwpAQCAtMTA4LDkgKzEw
OCw3IEBAIFN0cmluZyBUZXh0Q29kZWNVVEYxNjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoLCBib29sLCBib29sLCBib29sCiAgICAgICAgIG1fYnVmZmVyZWRCeXRlID0g
cFswXTsKICAgICB9CiAKLSAgICBidWZmZXIuc2hyaW5rKHEgLSBidWZmZXIuY2hhcmFjdGVycygp
KTsKLQotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KFdURk1vdmUoYnVmZmVyKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogVmVjdG9yPHVpbnQ4X3Q+IFRleHRDb2RlY1VURjE2OjplbmNvZGUo
U3RyaW5nVmlldyBzdHJpbmcsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggYjJlMDdmMjJkMjc3NTRmMDhhYmRiNGY0OGYzNTU5
ZDgyZDhjZGNkMy4uNDQzNzNiNmI4ZDcwMzlkNDJkZmFmYzhkZWNhNWE1YWI5N2E0NzEwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNywg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBwZWQubmV0KQogICog
Q29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29t
KQogICoKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVy
YXRvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CkBAIC0xNDEs
MzAgKzE0MCwyNSBAQCBzdGF0aWMgSGFzaE1hcDxjb25zdCBSZW5kZXJUZXh0KiwgV2Vha1B0cjxS
ZW5kZXJJbmxpbmU+PiYgaW5saW5lV3JhcHBlckZvckRpc3BsYQogICAgIHJldHVybiBtYXA7CiB9
CiAKLVN0cmluZyBjYXBpdGFsaXplKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBVQ2hhciBwcmV2aW91
c0NoYXJhY3RlcikKK3N0YXRpYyBpbmxpbmUgVUNoYXIgY29udmVydE5vQnJlYWtTcGFjZShVQ2hh
ciBjaGFyYWN0ZXIpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gdXNl
IHVfc3RyVG9UaXRsZSBpbnN0ZWFkIG9mIHVfdG90aXRsZSBhbmQgdG8gY29uc2lkZXIgbG9jYWxl
LgorICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gbm9CcmVha1NwYWNlID8gJyAnIDogY2hhcmFjdGVy
OworfQogCi0gICAgaWYgKHN0cmluZy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsK
K1N0cmluZyBjYXBpdGFsaXplKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBVQ2hhciBwcmV2aW91c0No
YXJhY3RlcikKK3sKKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gdXNlIHVfc3RyVG9UaXRs
ZSBpbnN0ZWFkIG9mIHVfdG90aXRsZSBhbmQgdG8gY29uc2lkZXIgbG9jYWxlLgogCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGF1dG8mIHN0cmluZ0ltcGwgPSAq
c3RyaW5nLmltcGwoKTsKLQotICAgIGlmIChsZW5ndGggPj0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKQotICAgICAgICBDUkFTSCgpOwogCi0gICAgU3RyaW5nQnVmZmVyPFVD
aGFyPiBzdHJpbmdXaXRoUHJldmlvdXMobGVuZ3RoICsgMSk7Ci0gICAgc3RyaW5nV2l0aFByZXZp
b3VzWzBdID0gcHJldmlvdXNDaGFyYWN0ZXIgPT0gbm9CcmVha1NwYWNlID8gJyAnIDogcHJldmlv
dXNDaGFyYWN0ZXI7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGxlbmd0aCArIDE7IGkr
KykgewotICAgICAgICAvLyBSZXBsYWNlIE5PIEJSRUFLIFNQQUNFIHdpdGggYSByZWFsIHNwYWNl
IHNpbmNlIElDVSBkb2VzIG5vdCB0cmVhdCBpdCBhcyBhIHdvcmQgc2VwYXJhdG9yLgotICAgICAg
ICBpZiAoc3RyaW5nSW1wbFtpIC0gMV0gPT0gbm9CcmVha1NwYWNlKQotICAgICAgICAgICAgc3Ry
aW5nV2l0aFByZXZpb3VzW2ldID0gJyAnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHJp
bmdXaXRoUHJldmlvdXNbaV0gPSBzdHJpbmdJbXBsW2kgLSAxXTsKLSAgICB9CisgICAgLy8gUHJl
cGVuZCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyLCBhbmQgY29udmVydCBOTyBCUkVBSyBTUEFDRSB0
byBTUEFDRSBzbyBJQ1Ugd2lsbCBzZWUgYSB3b3JkIHNlcGFyYXRvci4KKyAgICBWZWN0b3I8VUNo
YXI+IHdvcmRCcmVha0NoYXJhY3RlcnM7CisgICAgd29yZEJyZWFrQ2hhcmFjdGVycy5ncm93KGxl
bmd0aCArIDEpOworICAgIHdvcmRCcmVha0NoYXJhY3RlcnNbMF0gPSBjb252ZXJ0Tm9CcmVha1Nw
YWNlKHByZXZpb3VzQ2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbGVu
Z3RoICsgMTsgaSsrKQorICAgICAgICB3b3JkQnJlYWtDaGFyYWN0ZXJzW2ldID0gY29udmVydE5v
QnJlYWtTcGFjZShzdHJpbmdbaSAtIDFdKTsKIAotICAgIGF1dG8qIGJvdW5kYXJ5ID0gd29yZEJy
ZWFrSXRlcmF0b3IoU3RyaW5nVmlldyhzdHJpbmdXaXRoUHJldmlvdXMuY2hhcmFjdGVycygpLCBs
ZW5ndGggKyAxKSk7CisgICAgYXV0byogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJp
bmdWaWV3IHsgd29yZEJyZWFrQ2hhcmFjdGVycy5kYXRhKCksIGxlbmd0aCArIDEgfSk7CiAgICAg
aWYgKCFib3VuZGFyeSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIApAQCAtMTc1LDEyICsxNjks
MTIgQEAgU3RyaW5nIGNhcGl0YWxpemUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIFVDaGFyIHByZXZp
b3VzQ2hhcmFjdGVyKQogICAgIGludDMyX3Qgc3RhcnRPZldvcmQgPSB1YnJrX2ZpcnN0KGJvdW5k
YXJ5KTsKICAgICBmb3IgKGVuZE9mV29yZCA9IHVicmtfbmV4dChib3VuZGFyeSk7IGVuZE9mV29y
ZCAhPSBVQlJLX0RPTkU7IHN0YXJ0T2ZXb3JkID0gZW5kT2ZXb3JkLCBlbmRPZldvcmQgPSB1YnJr
X25leHQoYm91bmRhcnkpKSB7CiAgICAgICAgIGlmIChzdGFydE9mV29yZCkgLy8gSWdub3JlIGZp
cnN0IGNoYXIgb2YgcHJldmlvdXMgc3RyaW5nCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0
cmluZ0ltcGxbc3RhcnRPZldvcmQgLSAxXSA9PSBub0JyZWFrU3BhY2UgPyBub0JyZWFrU3BhY2Ug
OiB1X3RvdGl0bGUoc3RyaW5nV2l0aFByZXZpb3VzW3N0YXJ0T2ZXb3JkXSkpOworICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChzdHJpbmdbc3RhcnRPZldvcmQgLSAxXSA9PSBub0JyZWFrU3BhY2Ug
PyBub0JyZWFrU3BhY2UgOiB1X3RvdGl0bGUod29yZEJyZWFrQ2hhcmFjdGVyc1tzdGFydE9mV29y
ZF0pKTsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0T2ZXb3JkICsgMTsgaSA8IGVuZE9mV29y
ZDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdHJpbmdJbXBsW2kgLSAxXSk7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0cmluZ1tpIC0gMV0pOwogICAgIH0KIAotICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0ID09IHN0cmluZyA/IHN0
cmluZyA6IHJlc3VsdC50b1N0cmluZygpOwogfQogCiBpbmxpbmUgUmVuZGVyVGV4dDo6UmVuZGVy
VGV4dChOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIHRleHQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>