<?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>95416</bug_id>
          
          <creation_ts>2012-08-29 18:32:58 -0700</creation_ts>
          <short_desc>Replace uses of WTF::String::operator+= with StringBuilder</short_desc>
          <delta_ts>2012-08-30 10:16:59 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>benjamin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>708171</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-29 18:32:58 -0700</bug_when>
    <thetext>Replace uses of WTF::String::operator+= with StringBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708174</commentid>
    <comment_count>1</comment_count>
      <attachid>161384</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-29 18:34:26 -0700</bug_when>
    <thetext>Created attachment 161384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708214</commentid>
    <comment_count>2</comment_count>
      <attachid>161384</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-29 19:09:39 -0700</bug_when>
    <thetext>Comment on attachment 161384
Patch

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

Looks good. Just one comment:

&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:377
&gt; -        result.iterator-&gt;second += &quot;,&quot; + value;
&gt; +        result.iterator-&gt;second.append(&quot;,&quot; + value);

This change will cause 2 concatenation:
1) the string operators will create a new String for (&quot;,&quot; + value), then String::append() will create a new string for the result.

If you do (result.iterator-&gt;second = result.iterator-&gt;second + &apos;,&apos; + value), you only get one &quot;operation&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708398</commentid>
    <comment_count>3</comment_count>
      <attachid>161422</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 01:01:58 -0700</bug_when>
    <thetext>Created attachment 161422
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708404</commentid>
    <comment_count>4</comment_count>
      <attachid>161422</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 01:19:40 -0700</bug_when>
    <thetext>Comment on attachment 161422
Patch for landing

Clearing flags on attachment: 161422

Committed r127112: &lt;http://trac.webkit.org/changeset/127112&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708405</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 01:19:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708738</commentid>
    <comment_count>6</comment_count>
      <attachid>161422</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-30 09:50:10 -0700</bug_when>
    <thetext>Comment on attachment 161422
Patch for landing

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        StringBuilder. Eventually, I&apos;d like to remove operator+= so that more
&gt; +        code doesn&apos;t fall into this trap.

A great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708743</commentid>
    <comment_count>7</comment_count>
      <attachid>161422</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-30 09:53:00 -0700</bug_when>
    <thetext>Comment on attachment 161422
Patch for landing

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

&gt; Source/WebCore/html/HTMLAnchorElement.cpp:148
&gt; +    url.append(String::number(x));

StringBuilder should offer a way to do this operation without creating and destroying a StringImpl.

&gt; Source/WebCore/html/HTMLAnchorElement.cpp:514
&gt; -    String url = stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr));
&gt; +    StringBuilder url;
&gt; +    url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr)));
&gt;      appendServerMapMousePosition(url, event);
&gt; -    KURL kurl = document()-&gt;completeURL(url);
&gt; +    KURL kurl = document()-&gt;completeURL(url.toString());

The by-far-most-common case is to not append a mouse position. I wonder if StringBuilder adds unwanted overhead here.

&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:377
&gt; -        result.iterator-&gt;second += &quot;,&quot; + value;
&gt; +        result.iterator-&gt;second = result.iterator-&gt;second + &apos;,&apos; + value;

This case is interesting, because in theory we could change the String class so that this idiom generated efficient code. I don’t think the new form reads better than the old.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708756</commentid>
    <comment_count>8</comment_count>
      <attachid>161422</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-30 10:01:26 -0700</bug_when>
    <thetext>Comment on attachment 161422
Patch for landing

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

&gt;&gt; Source/WebCore/html/HTMLAnchorElement.cpp:148
&gt;&gt; +    url.append(String::number(x));
&gt; 
&gt; StringBuilder should offer a way to do this operation without creating and destroying a StringImpl.

Yes!

&gt;&gt; Source/WebCore/html/HTMLAnchorElement.cpp:514
&gt;&gt; +    KURL kurl = document()-&gt;completeURL(url.toString());
&gt; 
&gt; The by-far-most-common case is to not append a mouse position. I wonder if StringBuilder adds unwanted overhead here.

Take a look at line 60 and onwards of StringBuilder::append:

http://trac.webkit.org/browser/trunk/Source/WTF/wtf/text/StringBuilder.h#L53

My understanding is that in this case, we&apos;ll just retain the string and then return it, so the overhead looks akin to storing the string in a local variable.  I might not be completely understanding how StringBuilder works however.

&gt;&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:377
&gt;&gt; +        result.iterator-&gt;second = result.iterator-&gt;second + &apos;,&apos; + value;
&gt; 
&gt; This case is interesting, because in theory we could change the String class so that this idiom generated efficient code. I don’t think the new form reads better than the old.

Yeah, the new code is kind of ugly.  I wasn&apos;t sure exactly what to do in this case, which is why I originally changed it to call append().  I can revert this part of the patch if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708780</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-30 10:16:59 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:377
&gt; &gt;&gt; +        result.iterator-&gt;second = result.iterator-&gt;second + &apos;,&apos; + value;
&gt; &gt; 
&gt; &gt; This case is interesting, because in theory we could change the String class so that this idiom generated efficient code. I don’t think the new form reads better than the old.
&gt; 
&gt; Yeah, the new code is kind of ugly.  I wasn&apos;t sure exactly what to do in this case, which is why I originally changed it to call append().  I can revert this part of the patch if you like.

I also considered this when checking the patch.

We could have operator+=() taking a StringAppend. But I think removing String::operator+=() is a good goal. Removing the slow operations will force future patches to consider string operations more carefully.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161384</attachid>
            <date>2012-08-29 18:34:26 -0700</date>
            <delta_ts>2012-08-30 01:01:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95416-20120829183419.patch</filename>
            <type>text/plain</type>
            <size>13575</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjNzQ5ZTE0OGFiNTUz
NTVhOGJlYTBkZmU3Y2U5OTZjOTJlMmNiZi4uMWEyZTA3MjFkM2M0ZmFkYmNmZjJjY2M3YzFmYjAw
OWZkYzc1NjcyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA4LTI5ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIFdU
Rjo6U3RyaW5nOjpvcGVyYXRvcis9IHdpdGggU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXVEY6OlN0cmluZzo6b3BlcmF0b3IrPSBh
cHBlYXJzIHRvIGJlIGEgc2FuZHRyYXAgZm9yIGNvbnRyaWJ1dG9ycy4gVGhlCisgICAgICAgIHZh
c3QgbWFqb3JpdHkgb2YgdGhlIGNhbGxlcnMgYXJlIHVzaW5nIHZlcnkgaW5lZmZpY2llbnQgc3Ry
aW5nCisgICAgICAgIHBhdHRlcm5zLiBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIHVzZSBvZiBvcGVy
YXRvcis9IGluIGZhdm9yIG9mCisgICAgICAgIFN0cmluZ0J1aWxkZXIuIEV2ZW50dWFsbHksIEkn
ZCBsaWtlIHRvIHJlbW92ZSBvcGVyYXRvcis9IHNvIHRoYXQgbW9yZQorICAgICAgICBjb2RlIGRv
ZXNuJ3QgZmFsbCBpbnRvIHRoaXMgdHJhcC4KKworICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb3VyY2VOYW1l
KToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpmb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6
YWRkSFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bmFtZUZvckxh
eWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpub2RlUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0Q29udGVudCk6
CisKIDIwMTItMDgtMjkgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW2Nocm9taXVtXSBSZW1vdmUgSFVEIGxheWVyIHdoZW4gcm9vdExheWVyIGlzIHNldCB0
byBudWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCmluZGV4IGNhZGRiOWI1ODQwOGNhYjgyM2JiY2Q2MWEyNWJm
ZDBjNTEzYTQ0YjEuLjFiYTE1ZmI0ZTY0NTFhOTEyZGUxMzc3ZmRlZGRiM2IyNjQ1ODZmMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRIYW5kc2hha2UuY3BwCkBAIC02NCwxNCArNjQsMTggQEAgc3RhdGljIGNvbnN0IGNoYXIgcmFu
ZG9tQ2hhcmFjdGVySW5TZWNXZWJTb2NrZXRLZXlbXSA9ICIhXCIjJCUmJygpKissLS4vOjs8PT4/
QEEKIAogc3RhdGljIFN0cmluZyByZXNvdXJjZU5hbWUoY29uc3QgS1VSTCYgdXJsKQogewotICAg
IFN0cmluZyBuYW1lID0gdXJsLnBhdGgoKTsKKyAgICBTdHJpbmdCdWlsZGVyIG5hbWU7CisgICAg
bmFtZS5hcHBlbmQodXJsLnBhdGgoKSk7CiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAg
ICBuYW1lID0gIi8iOwotICAgIGlmICghdXJsLnF1ZXJ5KCkuaXNOdWxsKCkpCi0gICAgICAgIG5h
bWUgKz0gIj8iICsgdXJsLnF1ZXJ5KCk7Ci0gICAgQVNTRVJUKCFuYW1lLmlzRW1wdHkoKSk7Ci0g
ICAgQVNTRVJUKCFuYW1lLmNvbnRhaW5zKCcgJykpOwotICAgIHJldHVybiBuYW1lOworICAgICAg
ICBuYW1lLmFwcGVuZCgnLycpOworICAgIGlmICghdXJsLnF1ZXJ5KCkuaXNOdWxsKCkpIHsKKyAg
ICAgICAgbmFtZS5hcHBlbmQoJz8nKTsKKyAgICAgICAgbmFtZS5hcHBlbmQodXJsLnF1ZXJ5KCkp
OworICAgIH0KKyAgICBTdHJpbmcgcmVzdWx0ID0gbmFtZS50b1N0cmluZygpOworICAgIEFTU0VS
VCghcmVzdWx0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKCFyZXN1bHQuY29udGFpbnMoJyAnKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBL
VVJMJiB1cmwsIGJvb2wgc2VjdXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmNwcAppbmRleCA2NDc3NTU4ODJmNWZiYThlNmExMDVlYmQ3NmY2NTUyN2E1Yjg2NmEwLi5j
MzI5OWZjNmVkNjMwZTNmMzBjODExYWE3MjBjODkyZmQ0NGVkMTkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMjAsNyArMTIxLDcgQEAgYm9vbCBIVE1MQW5jaG9yRWxl
bWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKICAg
ICByZXR1cm4gaGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBl
bmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZyYgdXJsLCBFdmVudCogZXZlbnQpCitzdGF0
aWMgdm9pZCBhcHBlbmRTZXJ2ZXJNYXBNb3VzZVBvc2l0aW9uKFN0cmluZ0J1aWxkZXImIHVybCwg
RXZlbnQqIGV2ZW50KQogewogICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNDMsMTAgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTZXJ2ZXJN
YXBNb3VzZVBvc2l0aW9uKFN0cmluZyYgdXJsLCBFdmVudCogZXZlbnQpCiAgICAgRmxvYXRQb2lu
dCBhYnNvbHV0ZVBvc2l0aW9uID0gcmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChGbG9hdFBvaW50
KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPnBhZ2VYKCksIHN0YXRpY19jYXN0PE1v
dXNlRXZlbnQqPihldmVudCktPnBhZ2VZKCkpKTsKICAgICBpbnQgeCA9IGFic29sdXRlUG9zaXRp
b24ueCgpOwogICAgIGludCB5ID0gYWJzb2x1dGVQb3NpdGlvbi55KCk7Ci0gICAgdXJsICs9ICI/
IjsKLSAgICB1cmwgKz0gU3RyaW5nOjpudW1iZXIoeCk7Ci0gICAgdXJsICs9ICIsIjsKLSAgICB1
cmwgKz0gU3RyaW5nOjpudW1iZXIoeSk7CisgICAgdXJsLmFwcGVuZCgnPycpOworICAgIHVybC5h
cHBlbmQoU3RyaW5nOjpudW1iZXIoeCkpOworICAgIHVybC5hcHBlbmQoJywnKTsKKyAgICB1cmwu
YXBwZW5kKFN0cmluZzo6bnVtYmVyKHkpKTsKIH0KIAogdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCkBAIC01MDcsOSArNTA4LDEwIEBAIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW50KiBldmVudCkKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdXJsID0gc3RyaXBMZWFkaW5n
QW5kVHJhaWxpbmdIVE1MU3BhY2VzKGZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKKyAgICBT
dHJpbmdCdWlsZGVyIHVybDsKKyAgICB1cmwuYXBwZW5kKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhmYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKSkpOwogICAgIGFwcGVuZFNlcnZl
ck1hcE1vdXNlUG9zaXRpb24odXJsLCBldmVudCk7Ci0gICAgS1VSTCBrdXJsID0gZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwodXJsKTsKKyAgICBLVVJMIGt1cmwgPSBkb2N1bWVudCgpLT5jb21wbGV0
ZVVSTCh1cmwudG9TdHJpbmcoKSk7CiAKICNpZiBFTkFCTEUoRE9XTkxPQURfQVRUUklCVVRFKQog
ICAgIGlmIChoYXNBdHRyaWJ1dGUoZG93bmxvYWRBdHRyKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXgg
YzZiNzczMjJiODAwNTQxN2I3NzAzNWMxY2Q1OWVjOGQ2NGRiY2FjOS4uYTk2MDQ4OTk0M2I2YWFi
ZjUyODVlYjZlMGFjODZmNjA4MjZhYzE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC03Miw2ICs3Miw3
IEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIFVTRShDRykKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KQEAgLTE5OTIsMzEgKzE5OTMsMzQgQEAgU3Ry
aW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udCgpIGNvbnN0CiAgICAgaWYgKCFzdGF0
ZSgpLm1fcmVhbGl6ZWRGb250KQogICAgICAgICByZXR1cm4gZGVmYXVsdEZvbnQ7CiAKLSAgICBT
dHJpbmcgc2VyaWFsaXplZEZvbnQ7CisgICAgU3RyaW5nQnVpbGRlciBzZXJpYWxpemVkRm9udDsK
ICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlKCkubV9m
b250LmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMo
KSkKLSAgICAgICAgc2VyaWFsaXplZEZvbnQgKz0gIml0YWxpYyAiOworICAgICAgICBzZXJpYWxp
emVkRm9udC5hcHBlbmRMaXRlcmFsKCJpdGFsaWMgIik7CiAgICAgaWYgKGZvbnREZXNjcmlwdGlv
bi5zbWFsbENhcHMoKSA9PSBGb250U21hbGxDYXBzT24pCi0gICAgICAgIHNlcmlhbGl6ZWRGb250
ICs9ICJzbWFsbC1jYXBzICI7CisgICAgICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZExpdGVyYWwo
InNtYWxsLWNhcHMgIik7CiAKLSAgICBzZXJpYWxpemVkRm9udCArPSBTdHJpbmc6Om51bWJlcihm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkgKyAicHgiOworICAgIHNlcmlhbGl6
ZWRGb250LmFwcGVuZChTdHJpbmc6Om51bWJlcihmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhl
bFNpemUoKSkpOworICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZExpdGVyYWwoInB4Iik7CiAKICAg
ICBjb25zdCBGb250RmFtaWx5JiBmaXJzdEZvbnRGYW1pbHkgPSBmb250RGVzY3JpcHRpb24uZmFt
aWx5KCk7CiAgICAgZm9yIChjb25zdCBGb250RmFtaWx5KiBmb250RmFtaWx5ID0gJmZpcnN0Rm9u
dEZhbWlseTsgZm9udEZhbWlseTsgZm9udEZhbWlseSA9IGZvbnRGYW1pbHktPm5leHQoKSkgewog
ICAgICAgICBpZiAoZm9udEZhbWlseSAhPSAmZmlyc3RGb250RmFtaWx5KQotICAgICAgICAgICAg
c2VyaWFsaXplZEZvbnQgKz0gIiwiOworICAgICAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5k
KCcsJyk7CiAKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhcHBlbmQgZmFtaWx5IGRpcmVj
dGx5IHRvIHNlcmlhbGl6ZWRGb250IHJhdGhlciB0aGFuIGJ1aWxkaW5nIGEgdGVtcG9yYXJ5IHN0
cmluZy4KICAgICAgICAgU3RyaW5nIGZhbWlseSA9IGZvbnRGYW1pbHktPmZhbWlseSgpOwogICAg
ICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCiAgICAgICAgICAgICBmYW1p
bHkgPSBmYW1pbHkuc3Vic3RyaW5nKDgpOwogICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCcg
JykpCiAgICAgICAgICAgICBmYW1pbHkgPSBtYWtlU3RyaW5nKCciJywgZmFtaWx5LCAnIicpOwog
Ci0gICAgICAgIHNlcmlhbGl6ZWRGb250ICs9ICIgIiArIGZhbWlseTsKKyAgICAgICAgc2VyaWFs
aXplZEZvbnQuYXBwZW5kKCcgJyk7CisgICAgICAgIHNlcmlhbGl6ZWRGb250LmFwcGVuZChmYW1p
bHkpOwogICAgIH0KIAotICAgIHJldHVybiBzZXJpYWxpemVkRm9udDsKKyAgICByZXR1cm4gc2Vy
aWFsaXplZEZvbnQudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggNjRl
YmMxOGM4YTc0NTBkZjY0YTYyMGE2NmQzZTM2ODMxN2UxYzk2OS4uMDJlMjJmMzFlMDIxZjIyOGEw
YmMzNDhlODIwYzE2NDRlZmQ5ZmQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC0zNzQsNyArMzc0LDcg
QEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBjb25zdCBTdHIKICAgICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsK
ICAgICBIVFRQSGVhZGVyTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9odHRwSGVhZGVyRmllbGRz
LmFkZChuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgKz0gIiwiICsgdmFsdWU7CisgICAgICAgIHJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kLmFwcGVuZCgiLCIgKyB2YWx1ZSk7CiAKICAgICBpZiAodXJsKCkucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKQogICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQg
PSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKaW5kZXggZDI2ZWVmMWUzNGU4ZTQ1NWYyNGJjYWI0ZDJhYzIyY2YyOWVjM2RmNS4uNTE4
Y2MyOTlmM2Y0MjVjZGNmMTJjODRlNWY1ZThhZGU4YTViNGQwNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTU1LDggKzU1LDggQEAK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlICJUaWxlZEJhY2tpbmcuaCIKLQogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJlci5oIgpAQCAtMTcxMCwyOSArMTcxMCwz
NSBAQCBBbmltYXRlZFByb3BlcnR5SUQgUmVuZGVyTGF5ZXJCYWNraW5nOjpjc3NUb0dyYXBoaWNz
TGF5ZXJQcm9wZXJ0eShDU1NQcm9wZXJ0eUlECiAKIFN0cmluZyBSZW5kZXJMYXllckJhY2tpbmc6
Om5hbWVGb3JMYXllcigpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIG5hbWUgPSByZW5kZXJlcigpLT5y
ZW5kZXJOYW1lKCk7CisgICAgU3RyaW5nQnVpbGRlciBuYW1lOworICAgIG5hbWUuYXBwZW5kKHJl
bmRlcmVyKCktPnJlbmRlck5hbWUoKSk7CiAgICAgaWYgKE5vZGUqIG5vZGUgPSByZW5kZXJlcigp
LT5ub2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ICAgIG5hbWUgKz0gIiAiICsgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT50YWdOYW1lKCk7
Ci0gICAgICAgIGlmIChub2RlLT5oYXNJRCgpKQotICAgICAgICAgICAgbmFtZSArPSAiIGlkPVwn
IiArIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SWRBdHRyaWJ1dGUoKSArICJcJyI7
CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIG5hbWUu
YXBwZW5kKCcgJyk7CisgICAgICAgICAgICBuYW1lLmFwcGVuZChzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSktPnRhZ05hbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vZGUtPmhhc0lE
KCkpIHsKKyAgICAgICAgICAgIG5hbWUuYXBwZW5kTGl0ZXJhbCgiIGlkPVwnIik7CisgICAgICAg
ICAgICBuYW1lLmFwcGVuZChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldElkQXR0cmli
dXRlKCkpOworICAgICAgICAgICAgbmFtZS5hcHBlbmQoJ1wnJyk7CisgICAgICAgIH0KIAogICAg
ICAgICBpZiAobm9kZS0+aGFzQ2xhc3MoKSkgeworICAgICAgICAgICAgbmFtZS5hcHBlbmRMaXRl
cmFsKCIgY2xhc3M9XCciKTsKICAgICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBTdHJp
bmcgY2xhc3NlczsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3R5bGVkRWxl
bWVudC0+Y2xhc3NOYW1lcygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGkg
PiAwKQotICAgICAgICAgICAgICAgICAgICBjbGFzc2VzICs9ICIgIjsKLSAgICAgICAgICAgICAg
ICBjbGFzc2VzICs9IHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXTsKKyAgICAgICAgICAg
ICAgICAgICAgbmFtZS5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICBuYW1lLmFwcGVuZChz
dHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV0pOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbmFtZSArPSAiIGNsYXNzPVwnIiArIGNsYXNzZXMgKyAiXCciOworICAgICAgICAgICAgbmFt
ZS5hcHBlbmQoJ1wnJyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9vd25pbmdMYXll
ci0+aXNSZWZsZWN0aW9uKCkpCi0gICAgICAgIG5hbWUgKz0gIiAocmVmbGVjdGlvbikiOworICAg
ICAgICBuYW1lLmFwcGVuZExpdGVyYWwoIiAocmVmbGVjdGlvbikiKTsKIAotICAgIHJldHVybiBu
YW1lOworICAgIHJldHVybiBuYW1lLnRvU3RyaW5nKCk7CiB9CiAKIENvbXBvc2l0aW5nTGF5ZXJU
eXBlIFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRpbmdMYXllclR5cGUoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGMxNTg1
YjE2OGM0ZWYyNzVjMGUwNjU3ODAxZjc2MmM1OTQzZDY4YjAuLmIyNDM4NzJlYWJkMTU1YzUyZjkz
YjBjYjMzZmZmMTgxMTVhYWViY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ0NSwxNCArNDQ1LDE0IEBAIHZvaWQgUmVuZGVyVHJlZUFz
VGV4dDo6d3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVj
dCYgbywKICAgICAgICAgICAgICAgICB0cyA8PCAiIGlkPVwiIiArIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+Z2V0SWRBdHRyaWJ1dGUoKSArICJcIiI7CiAKICAgICAgICAgICAgIGlmIChu
b2RlLT5oYXNDbGFzcygpKSB7CisgICAgICAgICAgICAgICAgdHMgPDwgIiBjbGFzcz1cIiI7CiAg
ICAgICAgICAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY2xhc3NlczsK
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0eWxlZEVsZW1lbnQtPmNs
YXNzTmFtZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzICs9ICIgIjsKLSAgICAgICAgICAgICAg
ICAgICAgY2xhc3NlcyArPSBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV07CisgICAgICAg
ICAgICAgICAgICAgICAgICB0cyA8PCAiICI7CisgICAgICAgICAgICAgICAgICAgIHRzIDw8IHN0
eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgdHMgPDwgIiBjbGFzcz1cIiIgKyBjbGFzc2VzICsgIlwiIjsKKyAgICAgICAgICAg
ICAgICB0cyA8PCAiXCIiOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNzg5
LDI5ICs3ODksMzYgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWUKIAogc3RhdGljIFN0cmluZyBu
b2RlUG9zaXRpb24oTm9kZSogbm9kZSkKIHsKLSAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmlu
Z0J1aWxkZXIgcmVzdWx0OwogCiAgICAgRWxlbWVudCogYm9keSA9IG5vZGUtPmRvY3VtZW50KCkt
PmJvZHkoKTsKICAgICBOb2RlKiBwYXJlbnQ7CiAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbjsg
biA9IHBhcmVudCkgewogICAgICAgICBwYXJlbnQgPSBuLT5wYXJlbnRPckhvc3ROb2RlKCk7CiAg
ICAgICAgIGlmIChuICE9IG5vZGUpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiBvZiAiOworICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiBvZiAiKTsKICAgICAgICAgaWYgKHBhcmVu
dCkgewogICAgICAgICAgICAgaWYgKGJvZHkgJiYgbiA9PSBib2R5KSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgZG9uJ3QgY2FyZSB3aGF0IG9mZnNldCBib2R5IG1heSBiZSBpbiB0aGUgZG9jdW1l
bnQuCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJib2R5IjsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiYm9keSIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4tPmlzU2hhZG93Um9vdCgpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAieyIgKyBnZXRUYWdOYW1lKG4pICsgIn0iOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiY2hpbGQgIiArIFN0cmluZzo6bnVtYmVy
KG4tPm5vZGVJbmRleCgpKSArICIgeyIgKyBnZXRUYWdOYW1lKG4pICsgIn0iOworICAgICAgICAg
ICAgaWYgKG4tPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgneycpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZ2V0VGFnTmFtZShuKSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfScpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiY2hpbGQgIik7CisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChTdHJpbmc6Om51bWJlcihuLT5ub2RlSW5kZXgoKSkpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgeyIpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoZ2V0VGFnTmFtZShuKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnfScpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHJlc3VsdCArPSAiZG9jdW1lbnQiOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwo
ImRvY3VtZW50Iik7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlU2VsZWN0aW9uKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCBhM2NkMDJlYzgzMDJhYmNhMGMwZTgyZDg3
YjkzZTg3OTViNGZmMTJmLi42MjM0M2NhNWY3OTE2OGIxZWMxMGE4OTVmMDUxMzhjODA1ODA5NmMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
QEAgLTc3OCw5ICs3NzgsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRDb250ZW50KGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIGFkZCkKICAgICAgICAgICAgIC8vIFdlIGF0dGVtcHQgdG8gbWVy
Z2Ugd2l0aCB0aGUgbGFzdCBDb250ZW50RGF0YSBpZiBwb3NzaWJsZS4KICAgICAgICAgICAgIGlm
IChsYXN0Q29udGVudC0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgICAgICBUZXh0Q29udGVudERh
dGEqIHRleHRDb250ZW50ID0gc3RhdGljX2Nhc3Q8VGV4dENvbnRlbnREYXRhKj4obGFzdENvbnRl
bnQpOwotICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gdGV4dENvbnRlbnQtPnRleHQoKTsK
LSAgICAgICAgICAgICAgICB0ZXh0ICs9IHN0cmluZzsKLSAgICAgICAgICAgICAgICB0ZXh0Q29u
dGVudC0+c2V0VGV4dCh0ZXh0KTsKKyAgICAgICAgICAgICAgICB0ZXh0Q29udGVudC0+c2V0VGV4
dCh0ZXh0Q29udGVudC0+dGV4dCgpICsgc3RyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIGxhc3RDb250ZW50LT5zZXROZXh0KENvbnRlbnREYXRhOjpjcmVhdGUoc3Ry
aW5nKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161422</attachid>
            <date>2012-08-30 01:01:58 -0700</date>
            <delta_ts>2012-08-30 10:01:26 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-95416-20120830010147.patch</filename>
            <type>text/plain</type>
            <size>13597</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFjNzQ5ZTE0OGFiNTUz
NTVhOGJlYTBkZmU3Y2U5OTZjOTJlMmNiZi4uNjc5YWQ0MTlhZGQxNTRmNWJhYzc0NzhhM2ZjYmNm
MzQxOTNmODUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA4LTI5ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSB1c2VzIG9mIFdU
Rjo6U3RyaW5nOjpvcGVyYXRvcis9IHdpdGggU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAgIFdURjo6U3RyaW5nOjpvcGVyYXRvcis9
IGFwcGVhcnMgdG8gYmUgYSBzYW5kdHJhcCBmb3IgY29udHJpYnV0b3JzLiBUaGUKKyAgICAgICAg
dmFzdCBtYWpvcml0eSBvZiB0aGUgY2FsbGVycyBhcmUgdXNpbmcgdmVyeSBpbmVmZmljaWVudCBz
dHJpbmcKKyAgICAgICAgcGF0dGVybnMuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgdXNlIG9mIG9w
ZXJhdG9yKz0gaW4gZmF2b3Igb2YKKyAgICAgICAgU3RyaW5nQnVpbGRlci4gRXZlbnR1YWxseSwg
SSdkIGxpa2UgdG8gcmVtb3ZlIG9wZXJhdG9yKz0gc28gdGhhdCBtb3JlCisgICAgICAgIGNvZGUg
ZG9lc24ndCBmYWxsIGludG8gdGhpcyB0cmFwLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXNvdXJjZU5h
bWUpOgorICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kU2VydmVyTWFwTW91c2VQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQW5jaG9yRWxlbWVudDo6aGFuZGxlQ2xpY2spOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjphZGRIVFRQSGVhZGVyRmllbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpuYW1lRm9y
TGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om5vZGVQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRDb250ZW50
KToKKwogMjAxMi0wOC0yOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIFJlbW92ZSBIVUQgbGF5ZXIgd2hlbiByb290TGF5ZXIgaXMgc2V0
IHRvIG51bGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXggY2FkZGI5YjU4NDA4Y2FiODIzYmJjZDYxYTI1
YmZkMGM1MTNhNDRiMS4uMWJhMTVmYjRlNjQ1MWE5MTJkZTEzNzdmZGVkZGIzYjI2NDU4NmYxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhh
bmRzaGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldEhhbmRzaGFrZS5jcHAKQEAgLTY0LDE0ICs2NCwxOCBAQCBzdGF0aWMgY29uc3QgY2hhciBy
YW5kb21DaGFyYWN0ZXJJblNlY1dlYlNvY2tldEtleVtdID0gIiFcIiMkJSYnKCkqKywtLi86Ozw9
Pj9AQQogCiBzdGF0aWMgU3RyaW5nIHJlc291cmNlTmFtZShjb25zdCBLVVJMJiB1cmwpCiB7Ci0g
ICAgU3RyaW5nIG5hbWUgPSB1cmwucGF0aCgpOworICAgIFN0cmluZ0J1aWxkZXIgbmFtZTsKKyAg
ICBuYW1lLmFwcGVuZCh1cmwucGF0aCgpKTsKICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAg
ICAgIG5hbWUgPSAiLyI7Ci0gICAgaWYgKCF1cmwucXVlcnkoKS5pc051bGwoKSkKLSAgICAgICAg
bmFtZSArPSAiPyIgKyB1cmwucXVlcnkoKTsKLSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsK
LSAgICBBU1NFUlQoIW5hbWUuY29udGFpbnMoJyAnKSk7Ci0gICAgcmV0dXJuIG5hbWU7CisgICAg
ICAgIG5hbWUuYXBwZW5kKCcvJyk7CisgICAgaWYgKCF1cmwucXVlcnkoKS5pc051bGwoKSkgewor
ICAgICAgICBuYW1lLmFwcGVuZCgnPycpOworICAgICAgICBuYW1lLmFwcGVuZCh1cmwucXVlcnko
KSk7CisgICAgfQorICAgIFN0cmluZyByZXN1bHQgPSBuYW1lLnRvU3RyaW5nKCk7CisgICAgQVNT
RVJUKCFyZXN1bHQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIXJlc3VsdC5jb250YWlucygnICcp
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgU3RyaW5nIGhvc3ROYW1lKGNvbnN0
IEtVUkwmIHVybCwgYm9vbCBzZWN1cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwCmluZGV4IDY0Nzc1NTg4MmY1ZmJhOGU2YTEwNWViZDc2ZjY1NTI3YTViODY2YTAu
LmMzMjk5ZmM2ZWQ2MzBlM2YzMGM4MTFhYTcyMGM4OTJmZDQ0ZWQxOTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEyMCw3ICsxMjEsNyBAQCBib29sIEhUTUxBbmNob3JF
bGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAog
ICAgIHJldHVybiBoYXNOb25FbXB0eUJvdW5kaW5nQm94KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFw
cGVuZFNlcnZlck1hcE1vdXNlUG9zaXRpb24oU3RyaW5nJiB1cmwsIEV2ZW50KiBldmVudCkKK3N0
YXRpYyB2b2lkIGFwcGVuZFNlcnZlck1hcE1vdXNlUG9zaXRpb24oU3RyaW5nQnVpbGRlciYgdXJs
LCBFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE0MywxMCArMTQ0LDEwIEBAIHN0YXRpYyB2b2lkIGFwcGVuZFNlcnZl
ck1hcE1vdXNlUG9zaXRpb24oU3RyaW5nJiB1cmwsIEV2ZW50KiBldmVudCkKICAgICBGbG9hdFBv
aW50IGFic29sdXRlUG9zaXRpb24gPSByZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9p
bnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVgoKSwgc3RhdGljX2Nhc3Q8
TW91c2VFdmVudCo+KGV2ZW50KS0+cGFnZVkoKSkpOwogICAgIGludCB4ID0gYWJzb2x1dGVQb3Np
dGlvbi54KCk7CiAgICAgaW50IHkgPSBhYnNvbHV0ZVBvc2l0aW9uLnkoKTsKLSAgICB1cmwgKz0g
Ij8iOwotICAgIHVybCArPSBTdHJpbmc6Om51bWJlcih4KTsKLSAgICB1cmwgKz0gIiwiOwotICAg
IHVybCArPSBTdHJpbmc6Om51bWJlcih5KTsKKyAgICB1cmwuYXBwZW5kKCc/Jyk7CisgICAgdXJs
LmFwcGVuZChTdHJpbmc6Om51bWJlcih4KSk7CisgICAgdXJsLmFwcGVuZCgnLCcpOworICAgIHVy
bC5hcHBlbmQoU3RyaW5nOjpudW1iZXIoeSkpOwogfQogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKQEAgLTUwNyw5ICs1MDgsMTAgQEAg
dm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6aGFuZGxlQ2xpY2soRXZlbnQqIGV2ZW50KQogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmwgPSBzdHJpcExlYWRp
bmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cikpOworICAg
IFN0cmluZ0J1aWxkZXIgdXJsOworICAgIHVybC5hcHBlbmQoc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdIVE1MU3BhY2VzKGZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKSk7CiAgICAgYXBwZW5kU2Vy
dmVyTWFwTW91c2VQb3NpdGlvbih1cmwsIGV2ZW50KTsKLSAgICBLVVJMIGt1cmwgPSBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTCh1cmwpOworICAgIEtVUkwga3VybCA9IGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHVybC50b1N0cmluZygpKTsKIAogI2lmIEVOQUJMRShET1dOTE9BRF9BVFRSSUJVVEUp
CiAgICAgaWYgKGhhc0F0dHJpYnV0ZShkb3dubG9hZEF0dHIpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRl
eCBjNmI3NzMyMmI4MDA1NDE3Yjc3MDM1YzFjZDU5ZWM4ZDY0ZGJjYWM5Li5hOTYwNDg5OTQzYjZh
YWJmNTI4NWViNmUwYWM4NmY2MDgyNmFjMTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTcyLDYgKzcy
LDcgQEAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgVVNFKENHKQogI2luY2x1ZGUgPEFwcGxpY2F0aW9u
U2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgpAQCAtMTk5MiwzMSArMTk5MywzNCBAQCBT
dHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250KCkgY29uc3QKICAgICBpZiAoIXN0
YXRlKCkubV9yZWFsaXplZEZvbnQpCiAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9udDsKIAotICAg
IFN0cmluZyBzZXJpYWxpemVkRm9udDsKKyAgICBTdHJpbmdCdWlsZGVyIHNlcmlhbGl6ZWRGb250
OwogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3RhdGUoKS5t
X2ZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxp
YygpKQotICAgICAgICBzZXJpYWxpemVkRm9udCArPSAiaXRhbGljICI7CisgICAgICAgIHNlcmlh
bGl6ZWRGb250LmFwcGVuZExpdGVyYWwoIml0YWxpYyAiKTsKICAgICBpZiAoZm9udERlc2NyaXB0
aW9uLnNtYWxsQ2FwcygpID09IEZvbnRTbWFsbENhcHNPbikKLSAgICAgICAgc2VyaWFsaXplZEZv
bnQgKz0gInNtYWxsLWNhcHMgIjsKKyAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0ZXJh
bCgic21hbGwtY2FwcyAiKTsKIAotICAgIHNlcmlhbGl6ZWRGb250ICs9IFN0cmluZzo6bnVtYmVy
KGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKSArICJweCI7CisgICAgc2VyaWFs
aXplZEZvbnQuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpKSk7CisgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kTGl0ZXJhbCgicHgiKTsKIAog
ICAgIGNvbnN0IEZvbnRGYW1pbHkmIGZpcnN0Rm9udEZhbWlseSA9IGZvbnREZXNjcmlwdGlvbi5m
YW1pbHkoKTsKICAgICBmb3IgKGNvbnN0IEZvbnRGYW1pbHkqIGZvbnRGYW1pbHkgPSAmZmlyc3RG
b250RmFtaWx5OyBmb250RmFtaWx5OyBmb250RmFtaWx5ID0gZm9udEZhbWlseS0+bmV4dCgpKSB7
CiAgICAgICAgIGlmIChmb250RmFtaWx5ICE9ICZmaXJzdEZvbnRGYW1pbHkpCi0gICAgICAgICAg
ICBzZXJpYWxpemVkRm9udCArPSAiLCI7CisgICAgICAgICAgICBzZXJpYWxpemVkRm9udC5hcHBl
bmQoJywnKTsKIAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFwcGVuZCBmYW1pbHkgZGly
ZWN0bHkgdG8gc2VyaWFsaXplZEZvbnQgcmF0aGVyIHRoYW4gYnVpbGRpbmcgYSB0ZW1wb3Jhcnkg
c3RyaW5nLgogICAgICAgICBTdHJpbmcgZmFtaWx5ID0gZm9udEZhbWlseS0+ZmFtaWx5KCk7CiAg
ICAgICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKICAgICAgICAgICAgIGZh
bWlseSA9IGZhbWlseS5zdWJzdHJpbmcoOCk7CiAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMo
JyAnKSkKICAgICAgICAgICAgIGZhbWlseSA9IG1ha2VTdHJpbmcoJyInLCBmYW1pbHksICciJyk7
CiAKLSAgICAgICAgc2VyaWFsaXplZEZvbnQgKz0gIiAiICsgZmFtaWx5OworICAgICAgICBzZXJp
YWxpemVkRm9udC5hcHBlbmQoJyAnKTsKKyAgICAgICAgc2VyaWFsaXplZEZvbnQuYXBwZW5kKGZh
bWlseSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHNlcmlhbGl6ZWRGb250OworICAgIHJldHVybiBz
ZXJpYWxpemVkRm9udC50b1N0cmluZygpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCA2
NGViYzE4YzhhNzQ1MGRmNjRhNjIwYTY2ZDNlMzY4MzE3ZTFjOTY5Li4yNmNiODBjODQ2YjM5M2Mz
YWViNTJkODFlN2ZkZDMwZTgxYWQyYjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTM3NCw3ICszNzQs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cgogICAgIHVwZGF0ZVJlc291cmNlUmVxdWVzdCgp
OwogICAgIEhUVFBIZWFkZXJNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2h0dHBIZWFkZXJGaWVs
ZHMuYWRkKG5hbWUsIHZhbHVlKTsKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArPSAiLCIgKyB2YWx1ZTsKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCArICcsJyArIHZhbHVl
OwogCiAgICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKICAgICAgICAgbV9w
bGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGQyNmVlZjFlMzRlOGU0NTVmMjRiY2Fi
NGQyYWMyMmNmMjllYzNkZjUuLjUxOGNjMjk5ZjNmNDI1Y2RjZjEyYzg0ZTVmNWU4YWRlOGE1YjRk
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC01NSw4ICs1NSw4IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCi0KICNpbmNsdWRlIDx3
dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKQEAgLTE3MTAsMjkgKzE3MTAsMzUgQEAgQW5pbWF0ZWRQcm9wZXJ0eUlEIFJlbmRlckxheWVy
QmFja2luZzo6Y3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkoQ1NTUHJvcGVydHlJRAogCiBTdHJp
bmcgUmVuZGVyTGF5ZXJCYWNraW5nOjpuYW1lRm9yTGF5ZXIoKSBjb25zdAogewotICAgIFN0cmlu
ZyBuYW1lID0gcmVuZGVyZXIoKS0+cmVuZGVyTmFtZSgpOworICAgIFN0cmluZ0J1aWxkZXIgbmFt
ZTsKKyAgICBuYW1lLmFwcGVuZChyZW5kZXJlcigpLT5yZW5kZXJOYW1lKCkpOwogICAgIGlmIChO
b2RlKiBub2RlID0gcmVuZGVyZXIoKS0+bm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBuYW1lICs9ICIgIiArIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+dGFnTmFtZSgpOwotICAgICAgICBpZiAobm9kZS0+aGFzSUQoKSkKLSAgICAg
ICAgICAgIG5hbWUgKz0gIiBpZD1cJyIgKyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdl
dElkQXR0cmlidXRlKCkgKyAiXCciOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBuYW1lLmFwcGVuZCgnICcpOworICAgICAgICAgICAgbmFtZS5hcHBl
bmQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT50YWdOYW1lKCkpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChub2RlLT5oYXNJRCgpKSB7CisgICAgICAgICAgICBuYW1lLmFwcGVuZExpdGVy
YWwoIiBpZD1cJyIpOworICAgICAgICAgICAgbmFtZS5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUpLT5nZXRJZEF0dHJpYnV0ZSgpKTsKKyAgICAgICAgICAgIG5hbWUuYXBwZW5kKCdc
JycpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG5vZGUtPmhhc0NsYXNzKCkpIHsKKyAgICAg
ICAgICAgIG5hbWUuYXBwZW5kTGl0ZXJhbCgiIGNsYXNzPVwnIik7CiAgICAgICAgICAgICBTdHls
ZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5v
ZGUpOwotICAgICAgICAgICAgU3RyaW5nIGNsYXNzZXM7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKS5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyAr
PSAiICI7Ci0gICAgICAgICAgICAgICAgY2xhc3NlcyArPSBzdHlsZWRFbGVtZW50LT5jbGFzc05h
bWVzKClbaV07CisgICAgICAgICAgICAgICAgICAgIG5hbWUuYXBwZW5kKCcgJyk7CisgICAgICAg
ICAgICAgICAgbmFtZS5hcHBlbmQoc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpW2ldKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG5hbWUgKz0gIiBjbGFzcz1cJyIgKyBjbGFzc2VzICsg
IlwnIjsKKyAgICAgICAgICAgIG5hbWUuYXBwZW5kKCdcJycpOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKG1fb3duaW5nTGF5ZXItPmlzUmVmbGVjdGlvbigpKQotICAgICAgICBuYW1lICs9
ICIgKHJlZmxlY3Rpb24pIjsKKyAgICAgICAgbmFtZS5hcHBlbmRMaXRlcmFsKCIgKHJlZmxlY3Rp
b24pIik7CiAKLSAgICByZXR1cm4gbmFtZTsKKyAgICByZXR1cm4gbmFtZS50b1N0cmluZygpOwog
fQogCiBDb21wb3NpdGluZ0xheWVyVHlwZSBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0aW5n
TGF5ZXJUeXBlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcAppbmRleCBjMTU4NWIxNjhjNGVmMjc1YzBlMDY1NzgwMWY3NjJjNTk0M2Q2OGIw
Li5iMjQzODcyZWFiZDE1NWM1MmY5M2IwY2IzM2ZmZjE4MTE1YWFlYmNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00NDUsMTQgKzQ0NSwx
NCBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG8sCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBpZD1c
IiIgKyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldElkQXR0cmlidXRlKCkgKyAiXCIi
OwogCiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzQ2xhc3MoKSkgeworICAgICAgICAgICAgICAg
IHRzIDw8ICIgY2xhc3M9XCIiOwogICAgICAgICAgICAgICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxl
ZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIGNsYXNzZXM7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyAr
PSAiICI7Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNzZXMgKz0gc3R5bGVkRWxlbWVudC0+Y2xh
c3NOYW1lcygpW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdHMgPDwgIiAiOworICAgICAg
ICAgICAgICAgICAgICB0cyA8PCBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKClbaV07CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRzIDw8ICIgY2xhc3M9XCIiICsgY2xhc3Nl
cyArICJcIiI7CisgICAgICAgICAgICAgICAgdHMgPDwgIlwiIjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTc4OSwyOSArNzg5LDM2IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5
ZXJzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllCiAKIHN0YXRpYyBTdHJpbmcgbm9kZVBvc2l0aW9uKE5vZGUqIG5vZGUpCiB7Ci0gICAgU3Ry
aW5nIHJlc3VsdDsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIAogICAgIEVsZW1lbnQqIGJv
ZHkgPSBub2RlLT5kb2N1bWVudCgpLT5ib2R5KCk7CiAgICAgTm9kZSogcGFyZW50OwogICAgIGZv
ciAoTm9kZSogbiA9IG5vZGU7IG47IG4gPSBwYXJlbnQpIHsKICAgICAgICAgcGFyZW50ID0gbi0+
cGFyZW50T3JIb3N0Tm9kZSgpOwogICAgICAgICBpZiAobiAhPSBub2RlKQotICAgICAgICAgICAg
cmVzdWx0ICs9ICIgb2YgIjsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgb2Yg
Iik7CiAgICAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgICAgIGlmIChib2R5ICYmIG4gPT0g
Ym9keSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgd2hhdCBvZmZzZXQgYm9k
eSBtYXkgYmUgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiYm9k
eSI7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoImJvZHkiKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuLT5pc1No
YWRvd1Jvb3QoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gInsiICsgZ2V0VGFnTmFtZShu
KSArICJ9IjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gImNo
aWxkICIgKyBTdHJpbmc6Om51bWJlcihuLT5ub2RlSW5kZXgoKSkgKyAiIHsiICsgZ2V0VGFnTmFt
ZShuKSArICJ9IjsKKyAgICAgICAgICAgIGlmIChuLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3snKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGdldFRhZ05hbWUobikpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ30nKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoImNoaWxkICIpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIobi0+bm9kZUluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJh
bCgiIHsiKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGdldFRhZ05hbWUobikpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ30nKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgKz0gImRvY3VtZW50IjsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJkb2N1bWVudCIpOwogICAgIH0KIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBzdGF0aWMgdm9pZCB3
cml0ZVNlbGVjdGlvbihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggYTNj
ZDAyZWM4MzAyYWJjYTBjMGU4MmQ4N2I5M2U4Nzk1YjRmZjEyZi4uNjIzNDNjYTVmNzkxNjhiMWVj
MTBhODk1ZjA1MTM4YzgwNTgwOTZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC03NzgsOSArNzc4LDcgQEAgdm9pZCBSZW5kZXJTdHls
ZTo6c2V0Q29udGVudChjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBhZGQpCiAgICAgICAgICAg
ICAvLyBXZSBhdHRlbXB0IHRvIG1lcmdlIHdpdGggdGhlIGxhc3QgQ29udGVudERhdGEgaWYgcG9z
c2libGUuCiAgICAgICAgICAgICBpZiAobGFzdENvbnRlbnQtPmlzVGV4dCgpKSB7CiAgICAgICAg
ICAgICAgICAgVGV4dENvbnRlbnREYXRhKiB0ZXh0Q29udGVudCA9IHN0YXRpY19jYXN0PFRleHRD
b250ZW50RGF0YSo+KGxhc3RDb250ZW50KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9
IHRleHRDb250ZW50LT50ZXh0KCk7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSBzdHJpbmc7Ci0g
ICAgICAgICAgICAgICAgdGV4dENvbnRlbnQtPnNldFRleHQodGV4dCk7CisgICAgICAgICAgICAg
ICAgdGV4dENvbnRlbnQtPnNldFRleHQodGV4dENvbnRlbnQtPnRleHQoKSArIHN0cmluZyk7CiAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBsYXN0Q29udGVudC0+c2V0TmV4dChD
b250ZW50RGF0YTo6Y3JlYXRlKHN0cmluZykpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>