<?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>20065</bug_id>
          
          <creation_ts>2008-07-16 15:31:29 -0700</creation_ts>
          <short_desc>Remove UChar* accessors from StringImpl</short_desc>
          <delta_ts>2008-12-16 13:48:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>86119</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-16 15:31:29 -0700</bug_when>
    <thetext>Remove UChar* accessors from StringImpl

We should instead replace them with use of inline
UChar charAt(unsigned) -like
functions.

This will promote better logic encapsulation and allow us to play with alternative string storage (for memory savings) w/o having to change several hundred call sites.

If I find time I&apos;ll post a patch to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86222</commentid>
    <comment_count>1</comment_count>
      <attachid>22340</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-07-17 09:27:00 -0700</bug_when>
    <thetext>Created attachment 22340
First attempt, push logic from String.cpp into StringImpl.cpp

 WebCore/ChangeLog                      |   26 ++++++++
 WebCore/platform/text/PlatformString.h |    2 +
 WebCore/platform/text/String.cpp       |   79 ++++++-------------------
 WebCore/platform/text/StringImpl.cpp   |  104 +++++++++++++++++++++++++++++---
 WebCore/platform/text/StringImpl.h     |   12 ++++-
 5 files changed, 153 insertions(+), 70 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89045</commentid>
    <comment_count>2</comment_count>
      <attachid>22340</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-21 17:51:13 -0700</bug_when>
    <thetext>Comment on attachment 22340
First attempt, push logic from String.cpp into StringImpl.cpp

These changes are OK, but I don&apos;t think they really free us up to change the implementation. There are clients of String::characters() and for good reason.

 102     // String::append and insert are extremely in-efficient, if you&apos;re doing many
 103     // appends and inserts, consider using a Vector&lt;UChar&gt; or SegmetedString

inefficient doesn&apos;t have a &quot;-&quot; in it.

SegmentedString has an &quot;n&quot; in it.

 162     m_impl = m_impl-&gt;insert(charactersToInsert, lengthToInsert, position);

Why did you remove the ASSERT(m_impl) from this function?

I noticed that StringImpl::append(StringImpl*) does not optimize the zero-length case. The old code didn&apos;t either, but that&apos;s not good.

I also think it&apos;s a bit strange to use codePointAt everywhere instead of the [] operator.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95114</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-12 17:34:33 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/37538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95115</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-12 17:34:48 -0700</bug_when>
    <thetext>Closed the wrong bug by accident.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101032</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-02 11:36:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 22340 [review])
&gt; These changes are OK, but I don&apos;t think they really free us up to change the
&gt; implementation. There are clients of String::characters() and for good reason.

Yeah, I kinda lost interest in this change after making it.  But I&apos;m finally cleaning it up today to land.  I think there were some nice clean-ups in it, making it worth landing.

&gt;  102     // String::append and insert are extremely in-efficient, if you&apos;re
&gt; doing many
&gt;  103     // appends and inserts, consider using a Vector&lt;UChar&gt; or
&gt; SegmetedString
&gt; 
&gt; inefficient doesn&apos;t have a &quot;-&quot; in it.
&gt; SegmentedString has an &quot;n&quot; in it.

Fixed.

&gt;  162     m_impl = m_impl-&gt;insert(charactersToInsert, lengthToInsert, position);
&gt; 
&gt; Why did you remove the ASSERT(m_impl) from this function?

Shouldn&apos;t have.  Fixed.

&gt; I noticed that StringImpl::append(StringImpl*) does not optimize the
&gt; zero-length case. The old code didn&apos;t either, but that&apos;s not good.

Fixed.

&gt; I also think it&apos;s a bit strange to use codePointAt everywhere instead of the []
&gt; operator.

Felt clearer in my head at the time at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102701</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-12-16 13:48:06 -0800</bug_when>
    <thetext>I&apos;ve decided this is not worth pursuing at this time.  Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22340</attachid>
            <date>2008-07-17 09:27:00 -0700</date>
            <delta_ts>2008-08-21 17:51:13 -0700</delta_ts>
            <desc>First attempt, push logic from String.cpp into StringImpl.cpp</desc>
            <filename>First-attempt-push-logic-from-String.cpp-into-StringImpl.cpp.patch</filename>
            <type>text/plain</type>
            <size>15281</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2RiZDRjOGU3OTdhNzRjZDAyYjBkMTMxMDc2OWJhMjdmZDc1NGViOApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjg5ODM3Li45OWEzNmFh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDA4LTA3LTE3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEb24n
dCBsZXQgU3RyaW5nLmNwcCBrbm93IGhvdyBTdHJpbmdJbXBsLmNwcCBzdG9yZXMgaXRzIGRhdGEK
KyAgICAgICAgUmVtb3ZlIGNhbGxlcnMgb2YgU3RyaW5nSW1wbDo6Y2hhcmFjdGVycygpCisgICAg
ICAgIHNvIHRoYXQgd2UgY2FuIHBsYXkgYXJvdW5kIHdpdGggaG93IFN0cmluZ0ltcGwgc3RvcmVz
IGNoYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAwNjUKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Omluc2VydCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmc6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjp0
cnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OnJlbW92ZSk6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppbnNlcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6cmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdJbXBsOjp0cnVuY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpyZW1v
dmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWxJ
Z25vcmluZ0Nhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOgorCiAy
MDA4LTA3LTE2ICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTjogQ2FuJ3QgY3JlYXRlIHdpbmRvd2xlc3MgcGx1Zy1pbiB3aXRoIEZsYXNo
IDkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggYTJiYzIxMy4uMWEw
OTk2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTk5LDYgKzk5
LDggQEAgcHVibGljOgogICAgIGJvb2wgZW5kc1dpdGgoY29uc3QgU3RyaW5nJiBzLCBib29sIGNh
c2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2lt
cGwtPmVuZHNXaXRoKHMuaW1wbCgpLCBjYXNlU2Vuc2l0aXZlKSA6IHMuaXNFbXB0eSgpOyB9CiAK
KyAgICAvLyBTdHJpbmc6OmFwcGVuZCBhbmQgaW5zZXJ0IGFyZSBleHRyZW1lbHkgaW4tZWZmaWNp
ZW50LCBpZiB5b3UncmUgZG9pbmcgbWFueQorICAgIC8vIGFwcGVuZHMgYW5kIGluc2VydHMsIGNv
bnNpZGVyIHVzaW5nIGEgVmVjdG9yPFVDaGFyPiBvciBTZWdtZXRlZFN0cmluZwogICAgIHZvaWQg
YXBwZW5kKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kKGNoYXIpOwogICAgIHZvaWQg
YXBwZW5kKFVDaGFyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKaW5kZXggMThkNzQwNy4uYzRj
YzBkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKQEAgLTgyLDE1ICs4MiwxMCBAQCB2b2lk
IFN0cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyYgc3RyKQogICAgIC8vIG91dCBvZiBTdHJpbmcn
cyBBUEkuIFdlIGNhbiBtYWtlIGl0IGJldHRlciBieSBvcHRpbWl6aW5nIHRoZSBjYXNlIHdoZXJl
IGV4YWN0bHkKICAgICAvLyBvbmUgU3RyaW5nIGlzIHBvaW50aW5nIGF0IHRoaXMgU3RyaW5nSW1w
bCwgYnV0IGV2ZW4gdGhlbiBpdCdzIGdvaW5nIHRvIHJlcXVpcmUgYQogICAgIC8vIGNhbGwgdG8g
ZmFzdE1hbGxvYyBldmVyeSBzaW5nbGUgdGltZS4KLSAgICBpZiAoc3RyLm1faW1wbCkgewotICAg
ICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKG1faW1w
bC0+bGVuZ3RoKCkgKyBzdHIubGVuZ3RoKCkpOwotICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlci5j
aGFyYWN0ZXJzKCksIG1faW1wbC0+Y2hhcmFjdGVycygpLCBtX2ltcGwtPmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIG1f
aW1wbC0+bGVuZ3RoKCksIHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSAqIHNpemVvZihV
Q2hhcikpOwotICAgICAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ltcGwgPSBzdHIubV9pbXBsOwotICAgIH0K
KyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwgPSBtX2ltcGwtPmFwcGVuZChzdHIuaW1w
bCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1faW1wbCA9IHN0ci5tX2ltcGw7CiB9CiAKIHZvaWQg
U3RyaW5nOjphcHBlbmQoY2hhciBjKQpAQCAtOTksMTIgKzk0LDkgQEAgdm9pZCBTdHJpbmc6OmFw
cGVuZChjaGFyIGMpCiAgICAgLy8gb3V0IG9mIFN0cmluZydzIEFQSS4gV2UgY2FuIG1ha2UgaXQg
YmV0dGVyIGJ5IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUgZXhhY3RseQogICAgIC8vIG9uZSBT
dHJpbmcgaXMgcG9pbnRpbmcgYXQgdGhpcyBTdHJpbmdJbXBsLCBidXQgZXZlbiB0aGVuIGl0J3Mg
Z29pbmcgdG8gcmVxdWlyZSBhCiAgICAgLy8gY2FsbCB0byBmYXN0TWFsbG9jIGV2ZXJ5IHNpbmds
ZSB0aW1lLgotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciht
X2ltcGwtPmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygp
LCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
OwotICAgICAgICBidWZmZXJbbV9pbXBsLT5sZW5ndGgoKV0gPSBjOwotICAgICAgICBtX2ltcGwg
PSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOwotICAgIH0gZWxzZQorICAgIGlmIChtX2ltcGwp
CisgICAgICAgIG1faW1wbCA9IG1faW1wbC0+YXBwZW5kKGMpOworICAgIGVsc2UKICAgICAgICAg
bV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKTsKIH0KIApAQCAtMTE0LDEyICsxMDYs
OSBAQCB2b2lkIFN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgLy8gb3V0IG9mIFN0cmluZydz
IEFQSS4gV2UgY2FuIG1ha2UgaXQgYmV0dGVyIGJ5IG9wdGltaXppbmcgdGhlIGNhc2Ugd2hlcmUg
ZXhhY3RseQogICAgIC8vIG9uZSBTdHJpbmcgaXMgcG9pbnRpbmcgYXQgdGhpcyBTdHJpbmdJbXBs
LCBidXQgZXZlbiB0aGVuIGl0J3MgZ29pbmcgdG8gcmVxdWlyZSBhCiAgICAgLy8gY2FsbCB0byBm
YXN0TWFsbG9jIGV2ZXJ5IHNpbmdsZSB0aW1lLgotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
U3RyaW5nQnVmZmVyIGJ1ZmZlcihtX2ltcGwtPmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIG1lbWNw
eShidWZmZXIuY2hhcmFjdGVycygpLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbV9pbXBsLT5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcikpOwotICAgICAgICBidWZmZXJbbV9pbXBsLT5sZW5ndGgoKV0g
PSBjOwotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOwotICAgIH0g
ZWxzZQorICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbCA9IG1faW1wbC0+YXBwZW5kKGMp
OworICAgIGVsc2UKICAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKCZjLCAxKTsK
IH0KIApAQCAtMTQ2LDE0ICsxMzUsMTEgQEAgU3RyaW5nIG9wZXJhdG9yKyhjb25zdCBjaGFyKiBj
cywgY29uc3QgU3RyaW5nJiBzKQogCiB2b2lkIFN0cmluZzo6aW5zZXJ0KGNvbnN0IFN0cmluZyYg
c3RyLCB1bnNpZ25lZCBwb3MpCiB7Ci0gICAgaWYgKHN0ci5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKHN0ci5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzTnVs
bCgpKQotICAgICAgICAgICAgbV9pbXBsID0gc3RyLmltcGwoKTsKKyAgICBpZiAoIW1faW1wbCkg
eworICAgICAgICBtX2ltcGwgPSBzdHIuaW1wbCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGluc2VydChzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCksIHBvcyk7CisgICAgbV9p
bXBsID0gbV9pbXBsLT5pbnNlcnQoc3RyLmltcGwoKSwgcG9zKTsKIH0KIAogdm9pZCBTdHJpbmc6
OmFwcGVuZChjb25zdCBVQ2hhciogY2hhcmFjdGVyc1RvQXBwZW5kLCB1bnNpZ25lZCBsZW5ndGhU
b0FwcGVuZCkKQEAgLTE2NCwxNSArMTUwLDcgQEAgdm9pZCBTdHJpbmc6OmFwcGVuZChjb25zdCBV
Q2hhciogY2hhcmFjdGVyc1RvQXBwZW5kLCB1bnNpZ25lZCBsZW5ndGhUb0FwcGVuZCkKICAgICAg
ICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3Ro
VG9BcHBlbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCi0gICAgaWYgKCFsZW5ndGhUb0Fw
cGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGNoYXJhY3RlcnNUb0FwcGVuZCk7
Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSArIGxlbmd0aFRvQXBwZW5kKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgY2hhcmFjdGVycygpLCBsZW5ndGgoKSAqIHNp
emVvZihVQ2hhcikpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpICsgbGVuZ3RoKCks
IGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQgKiBzaXplb2YoVUNoYXIpKTsKLSAg
ICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgIG1faW1wbCA9IG1faW1w
bC0+YXBwZW5kKGNoYXJhY3RlcnNUb0FwcGVuZCwgbGVuZ3RoVG9BcHBlbmQpOwogfQogCiB2b2lk
IFN0cmluZzo6aW5zZXJ0KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzVG9JbnNlcnQsIHVuc2lnbmVk
IGxlbmd0aFRvSW5zZXJ0LCB1bnNpZ25lZCBwb3NpdGlvbikKQEAgLTE4MSwyNSArMTU5LDE0IEBA
IHZvaWQgU3RyaW5nOjppbnNlcnQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnNUb0luc2VydCwgdW5z
aWduZWQgbGVuZ3RoVG9JbnNlcnQsIHVuCiAgICAgICAgIGFwcGVuZChjaGFyYWN0ZXJzVG9JbnNl
cnQsIGxlbmd0aFRvSW5zZXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIEFTU0VS
VChtX2ltcGwpOwotCi0gICAgaWYgKCFsZW5ndGhUb0luc2VydCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGNoYXJhY3RlcnNUb0luc2VydCk7Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZl
cihsZW5ndGgoKSArIGxlbmd0aFRvSW5zZXJ0KTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3Rl
cnMoKSwgY2hhcmFjdGVycygpLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikpOwotICAgIG1lbWNw
eShidWZmZXIuY2hhcmFjdGVycygpICsgcG9zaXRpb24sIGNoYXJhY3RlcnNUb0luc2VydCwgbGVu
Z3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3Rl
cnMoKSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9u
LCAobGVuZ3RoKCkgLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKLSAgICBtX2ltcGwgPSBT
dHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgIG1faW1wbCA9IG1faW1wbC0+aW5zZXJ0KGNo
YXJhY3RlcnNUb0luc2VydCwgbGVuZ3RoVG9JbnNlcnQsIHBvc2l0aW9uKTsKIH0KIAogVUNoYXIg
U3RyaW5nOjpvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwg
fHwgaSA+PSBtX2ltcGwtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
bV9pbXBsLT5jaGFyYWN0ZXJzKClbaV07CisgICAgcmV0dXJuIG1faW1wbC0+Y29kZVBvaW50QXQo
aSk7CiB9CiAKIFVDaGFyMzIgU3RyaW5nOjpjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkIGkp
IGNvbnN0CkBAIC0yMjAsMjQgKzE4NywxNCBAQCB2b2lkIFN0cmluZzo6dHJ1bmNhdGUodW5zaWdu
ZWQgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihwb3NpdGlvbik7Ci0gICAgbWVtY3B5KGJ1
ZmZlci5jaGFyYWN0ZXJzKCksIGNoYXJhY3RlcnMoKSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIp
KTsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworICAgIG1faW1wbCA9
IG1faW1wbC0+dHJ1bmNhdGUocG9zaXRpb24pOwogfQogCiB2b2lkIFN0cmluZzo6cmVtb3ZlKHVu
c2lnbmVkIHBvc2l0aW9uLCBpbnQgbGVuZ3RoVG9SZW1vdmUpCiB7Ci0gICAgaWYgKGxlbmd0aFRv
UmVtb3ZlIDw9IDApCi0gICAgICAgIHJldHVybjsKICAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0
aFRvUmVtb3ZlKSA+IGxlbmd0aCgpIC0gcG9zaXRpb24pCi0gICAgICAgIGxlbmd0aFRvUmVtb3Zl
ID0gbGVuZ3RoKCkgLSBwb3NpdGlvbjsKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCgp
IC0gbGVuZ3RoVG9SZW1vdmUpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpLCBjaGFy
YWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci5j
aGFyYWN0ZXJzKCkgKyBwb3NpdGlvbiwgY2hhcmFjdGVycygpICsgcG9zaXRpb24gKyBsZW5ndGhU
b1JlbW92ZSwKLSAgICAgICAgKGxlbmd0aCgpIC0gbGVuZ3RoVG9SZW1vdmUgLSBwb3NpdGlvbikg
KiBzaXplb2YoVUNoYXIpKTsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIp
OworICAgIG1faW1wbCA9IG1faW1wbC0+cmVtb3ZlKHBvc2l0aW9uLCBsZW5ndGhUb1JlbW92ZSk7
CiB9CiAKIFN0cmluZyBTdHJpbmc6OnN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxl
bikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCBmYjhhYzI4Li4x
ODFkMGE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC03NDUsNiArNzQ1
LDcyIEBAIGJvb2wgU3RyaW5nSW1wbDo6ZW5kc1dpdGgoU3RyaW5nSW1wbCogbV9kYXRhLCBib29s
IGNhc2VTZW5zaXRpdmUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmFwcGVuZChTdHJpbmdJbXBsKiBzdHIpCit7CisgICAgLy8gRklY
TUU6IFRoaXMgaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LiBTbyBtdWNoIHNvIHRoYXQgd2UgbWln
aHQgd2FudCB0byB0YWtlIHRoaXMKKyAgICAvLyBvdXQgb2YgU3RyaW5nJ3MgQVBJLiBXZSBjYW4g
bWFrZSBpdCBiZXR0ZXIgYnkgb3B0aW1pemluZyB0aGUgY2FzZSB3aGVyZSBleGFjdGx5CisgICAg
Ly8gb25lIFN0cmluZyBpcyBwb2ludGluZyBhdCB0aGlzIFN0cmluZ0ltcGwsIGJ1dCBldmVuIHRo
ZW4gaXQncyBnb2luZyB0byByZXF1aXJlIGEKKyAgICAvLyBjYWxsIHRvIGZhc3RNYWxsb2MgZXZl
cnkgc2luZ2xlIHRpbWUuCisgICAgaWYgKCFzdHIpCisgICAgICAgIHJldHVybiB0aGlzOworCisg
ICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSArIHN0ci0+bGVuZ3RoKCkpOworICAgIG1l
bWNweShidWZmZXIuY2hhcmFjdGVycygpLCBtX2RhdGEsIGxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KSk7CisgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBsZW5ndGgoKSwgc3RyLT5tX2Rh
dGEsIHN0ci0+bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICByZXR1cm4gU3RyaW5nSW1w
bDo6YWRvcHQoYnVmZmVyKTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBs
OjphcHBlbmQoVUNoYXIgYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBleHRyZW1lbHkgaW5l
ZmZpY2llbnQuIFNvIG11Y2ggc28gdGhhdCB3ZSBtaWdodCB3YW50IHRvIHRha2UgdGhpcworICAg
IC8vIG91dCBvZiBTdHJpbmcncyBBUEkuIFdlIGNhbiBtYWtlIGl0IGJldHRlciBieSBvcHRpbWl6
aW5nIHRoZSBjYXNlIHdoZXJlIGV4YWN0bHkKKyAgICAvLyBvbmUgU3RyaW5nIGlzIHBvaW50aW5n
IGF0IHRoaXMgU3RyaW5nSW1wbCwgYnV0IGV2ZW4gdGhlbiBpdCdzIGdvaW5nIHRvIHJlcXVpcmUg
YQorICAgIC8vIGNhbGwgdG8gZmFzdE1hbGxvYyBldmVyeSBzaW5nbGUgdGltZS4KKyAgICBTdHJp
bmdCdWZmZXIgYnVmZmVyKGxlbmd0aCgpICsgMSk7CisgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0
ZXJzKCksIG1fZGF0YSwgbGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBidWZmZXJbbGVu
Z3RoKCldID0gYzsKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsKK30KKwor
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjphcHBlbmQoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnNUb0FwcGVuZCwgdW5zaWduZWQgbGVuZ3RoVG9BcHBlbmQpCit7CisgICAgaWYgKCFs
ZW5ndGhUb0FwcGVuZCkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICBBU1NFUlQoY2hhcmFj
dGVyc1RvQXBwZW5kKTsKKyAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCgpICsgbGVuZ3Ro
VG9BcHBlbmQpOworICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpLCBtX2RhdGEsIGxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCkgKyBs
ZW5ndGgoKSwgY2hhcmFjdGVyc1RvQXBwZW5kLCBsZW5ndGhUb0FwcGVuZCAqIHNpemVvZihVQ2hh
cikpOworICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworfQorCitQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6Omluc2VydChTdHJpbmdJbXBsKiBzdHIsIHVuc2ln
bmVkIHBvcykKK3sKKyAgICBpZiAoIXN0cikKKyAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICBp
ZiAoIWxlbmd0aCgpKQorICAgICAgICByZXR1cm4gc3RyOworCisgICAgcmV0dXJuIGluc2VydChz
dHItPm1fZGF0YSwgc3RyLT5sZW5ndGgoKSwgcG9zKTsKK30KKworUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjppbnNlcnQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnNUb0luc2VydCwg
dW5zaWduZWQgbGVuZ3RoVG9JbnNlcnQsIHVuc2lnbmVkIHBvc2l0aW9uKQoreworICAgIGlmIChw
b3NpdGlvbiA+PSBsZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZChjaGFyYWN0ZXJzVG9J
bnNlcnQsIGxlbmd0aFRvSW5zZXJ0KTsKKworICAgIGlmICghbGVuZ3RoVG9JbnNlcnQpCisgICAg
ICAgIHJldHVybiB0aGlzOworCisgICAgQVNTRVJUKGNoYXJhY3RlcnNUb0luc2VydCk7CisgICAg
U3RyaW5nQnVmZmVyIGJ1ZmZlcihsZW5ndGgoKSArIGxlbmd0aFRvSW5zZXJ0KTsKKyAgICBtZW1j
cHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9kYXRhLCBwb3NpdGlvbiAqIHNpemVvZihVQ2hhcikp
OworICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVycygpICsgcG9zaXRpb24sIGNoYXJhY3RlcnNU
b0luc2VydCwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoYnVm
ZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIG1fZGF0YSArIHBv
c2l0aW9uLCAobGVuZ3RoKCkgLSBwb3NpdGlvbikgKiBzaXplb2YoVUNoYXIpKTsKKyAgICByZXR1
cm4gU3RyaW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsKK30KKwogUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBTdHJpbmdJbXBsOjpyZXBsYWNlKFVDaGFyIG9sZEMsIFVDaGFyIG5ld0MpCiB7CiAgICAgaWYg
KG9sZEMgPT0gbmV3QykKQEAgLTc3NCwxMCArODQwLDEwIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gU3RyaW5nSW1wbDo6cmVwbGFjZSh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
VG9SCiAgICAgaWYgKCFsZW5ndGhUb1JlcGxhY2UgJiYgIWxlbmd0aFRvSW5zZXJ0KQogICAgICAg
ICByZXR1cm4gdGhpczsKICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGxlbmd0aCgpIC0gbGVuZ3Ro
VG9SZXBsYWNlICsgbGVuZ3RoVG9JbnNlcnQpOwotICAgIG1lbWNweShidWZmZXIuY2hhcmFjdGVy
cygpLCBjaGFyYWN0ZXJzKCksIHBvc2l0aW9uICogc2l6ZW9mKFVDaGFyKSk7CisgICAgbWVtY3B5
KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIG1fZGF0YSwgcG9zaXRpb24gKiBzaXplb2YoVUNoYXIpKTsK
ICAgICBpZiAoc3RyKQotICAgICAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0
aW9uLCBzdHItPmNoYXJhY3RlcnMoKSwgbGVuZ3RoVG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsK
LSAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNl
cnQsIGNoYXJhY3RlcnMoKSArIHBvc2l0aW9uICsgbGVuZ3RoVG9SZXBsYWNlLAorICAgICAgICBt
ZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSArIHBvc2l0aW9uLCBzdHItPm1fZGF0YSwgbGVuZ3Ro
VG9JbnNlcnQgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMo
KSArIHBvc2l0aW9uICsgbGVuZ3RoVG9JbnNlcnQsIG1fZGF0YSArIHBvc2l0aW9uICsgbGVuZ3Ro
VG9SZXBsYWNlLAogICAgICAgICAobGVuZ3RoKCkgLSBwb3NpdGlvbiAtIGxlbmd0aFRvUmVwbGFj
ZSkgKiBzaXplb2YoVUNoYXIpKTsKICAgICByZXR1cm4gYWRvcHQoYnVmZmVyKTsKIH0KQEAgLTg3
NCw2ICs5NDAsMzAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpyZXBsYWNl
KFN0cmluZ0ltcGwqIHBhdHRlcm4sIFN0cmluZ0ltcGwqIHJlcGwKICAgICByZXR1cm4gYWRvcHQo
ZGF0YSk7CiB9CiAKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dHJ1bmNhdGUo
dW5zaWduZWQgcG9zaXRpb24pCit7CisgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCgpKQorICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKHBvc2l0aW9uKTsKKyAg
ICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSwgbV9kYXRhLCBwb3NpdGlvbiAqIHNpemVvZihV
Q2hhcikpOworICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworfQorCitQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlbW92ZSh1bnNpZ25lZCBwb3NpdGlvbiwg
aW50IGxlbmd0aFRvUmVtb3ZlKQoreworICAgIGlmIChsZW5ndGhUb1JlbW92ZSA8PSAwKQorICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiB0aGlzOworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoVG9SZW1v
dmUpID4gbGVuZ3RoKCkgLSBwb3NpdGlvbikKKyAgICAgICAgbGVuZ3RoVG9SZW1vdmUgPSBsZW5n
dGgoKSAtIHBvc2l0aW9uOworICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3RoKCkgLSBsZW5n
dGhUb1JlbW92ZSk7CisgICAgbWVtY3B5KGJ1ZmZlci5jaGFyYWN0ZXJzKCksIG1fZGF0YSwgcG9z
aXRpb24gKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoYnVmZmVyLmNoYXJhY3RlcnMoKSAr
IHBvc2l0aW9uLCBtX2RhdGEgKyBwb3NpdGlvbiArIGxlbmd0aFRvUmVtb3ZlLAorICAgICAgICAo
bGVuZ3RoKCkgLSBsZW5ndGhUb1JlbW92ZSAtIHBvc2l0aW9uKSAqIHNpemVvZihVQ2hhcikpOwor
ICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOworfQorCiBib29sIGVxdWFsKFN0
cmluZ0ltcGwqIGEsIFN0cmluZ0ltcGwqIGIpCiB7CiAgICAgcmV0dXJuIFN0cmluZ0hhc2g6OmVx
dWFsKGEsIGIpOwpAQCAtODg3LDEyICs5NzcsMTEgQEAgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBh
LCBjb25zdCBjaGFyKiBiKQogICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhLT5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogYXMgPSBhLT5jaGFyYWN0ZXJzKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewogICAgICAgICB1
bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKICAgICAgICAgaWYgKCFiYykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGFzW2ldICE9IGJjKQorICAgICAgICBpZiAoYS0+Y29k
ZVBvaW50QXQoaSkgIT0gYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBA
IC05MTIsNyArMTAwMSw2IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogYSwg
Y29uc3QgY2hhciogYikKICAgICAgICAgcmV0dXJuICFhOwogCiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYS0+bGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIGFzID0gYS0+Y2hhcmFjdGVycygpOwog
CiAgICAgLy8gRG8gYSBmYXN0ZXIgbG9vcCBmb3IgdGhlIGNhc2Ugd2hlcmUgYWxsIHRoZSBjaGFy
YWN0ZXJzIGFyZSBBU0NJSS4KICAgICBVQ2hhciBvcmVkID0gMDsKQEAgLTkyMSw3ICsxMDA5LDcg
QEAgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBiKQog
ICAgICAgICBjaGFyIGJjID0gYltpXTsKICAgICAgICAgaWYgKCFiYykKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgVUNoYXIgYWMgPSBhc1tpXTsKKyAgICAgICAgVUNoYXIgYWMg
PSBhLT5jb2RlUG9pbnRBdChpKTsKICAgICAgICAgb3JlZCB8PSBhYzsKICAgICAgICAgZXF1YWwg
PSBlcXVhbCAmJiAodG9BU0NJSUxvd2VyKGFjKSA9PSB0b0FTQ0lJTG93ZXIoYmMpKTsKICAgICB9
CkBAIC05MzEsNyArMTAxOSw3IEBAIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCog
YSwgY29uc3QgY2hhciogYikKICAgICAgICAgZXF1YWwgPSB0cnVlOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGJjID0gYltpXTsKLSAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgKGZvbGRDYXNlKGFz
W2ldKSA9PSBmb2xkQ2FzZShiYykpOworICAgICAgICAgICAgZXF1YWwgPSBlcXVhbCAmJiAoZm9s
ZENhc2UoYS0+Y29kZVBvaW50QXQoaSkpID09IGZvbGRDYXNlKGJjKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IDUxMmU5ZDEuLmRhMTUzMDYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaApAQCAtOTcsNyArOTcsOCBAQCBwdWJsaWM6
CiAKICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVu
c2lnbmVkIGxlbiA9IFVJTlRfTUFYKTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgeyBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsgcmV0dXJuIG1fZGF0YVtpXTsgfQorICAgIFVDaGFy
IG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gY29kZVBvaW50QXQoaSk7IH0KKyAgICBV
Q2hhciBjb2RlUG9pbnRBdCh1bnNpZ25lZCBpKSB7IEFTU0VSVChpIDwgbV9sZW5ndGgpOyByZXR1
cm4gbV9kYXRhW2ldOyB9CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVk
KTsKIAogICAgIExlbmd0aCB0b0xlbmd0aCgpOwpAQCAtMTM5LDExICsxNDAsMjAgQEAgcHVibGlj
OgogICAgIGJvb2wgc3RhcnRzV2l0aChTdHJpbmdJbXBsKiBtX2RhdGEsIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IHRydWUpIHsgcmV0dXJuIGZpbmQobV9kYXRhLCAwLCBjYXNlU2Vuc2l0aXZlKSA9PSAw
OyB9CiAgICAgYm9vbCBlbmRzV2l0aChTdHJpbmdJbXBsKiwgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
dHJ1ZSk7CiAKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFwcGVuZChTdHJpbmdJbXBsKik7
CisgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhcHBlbmQoVUNoYXIpOworICAgIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYXBwZW5kKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGluc2VydChTdHJpbmdJbXBsKiwgdW5zaWduZWQgcG9z
KTsKKyAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGluc2VydChjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgcG9zKTsKKwogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
cmVwbGFjZShVQ2hhciwgVUNoYXIpOwogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFj
ZShVQ2hhciwgU3RyaW5nSW1wbCopOwogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFj
ZShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwogICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
cmVwbGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuLCBTdHJpbmdJbXBsKik7CiAKKyAg
ICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRydW5jYXRlKHVuc2lnbmVkIGxlbik7CisgICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmUodW5zaWduZWQgcG9zLCBpbnQgbGVuID0gMSk7CisK
ICAgICBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHkoKTsKIAogICAgIFZlY3RvcjxjaGFyPiBhc2Np
aSgpOwo=
</data>
<flag name="review"
          id="9845"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>