<?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>75114</bug_id>
          
          <creation_ts>2011-12-22 12:46:53 -0800</creation_ts>
          <short_desc>Refactored String.prototype.replace</short_desc>
          <delta_ts>2011-12-23 07:39:01 -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>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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>526454</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-22 12:46:53 -0800</bug_when>
    <thetext>Refactored String.prototype.replace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526463</commentid>
    <comment_count>1</comment_count>
      <attachid>120368</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-22 13:00:44 -0800</bug_when>
    <thetext>Created attachment 120368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526539</commentid>
    <comment_count>2</comment_count>
      <attachid>120368</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-22 14:48:33 -0800</bug_when>
    <thetext>Comment on attachment 120368
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        * runtime/JSString.h: Removed the single-character case because it&apos;s no
&gt; +        different from the normal case. (If we do come up with a single-character
&gt; +        optimization in future, it probably doesn&apos;t belong in JSString, anyway.)

What do you mean by no different from the normal case? Isn’t the find for a single character a different, faster function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526851</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-23 07:32:23 -0800</bug_when>
    <thetext>&gt; What do you mean by no different from the normal case? Isn’t the find for a single character a different, faster function?

Find for a single character is faster, but the general find knows to delegate to the single-character find if possible. So, we were just duplicating logic in the general find. I&apos;ll make the ChangeLog clearer on this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526853</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-23 07:39:01 -0800</bug_when>
    <thetext>Committed r103626: &lt;http://trac.webkit.org/changeset/103626&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120368</attachid>
            <date>2011-12-22 13:00:44 -0800</date>
            <delta_ts>2011-12-22 14:48:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75114-20111222160044.patch</filename>
            <type>text/plain</type>
            <size>25124</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAzNTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDExLTEyLTIyICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVmYWN0b3JlZCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MTE0CisgICAgICAgIAorICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBwZXJmb3JtYW5jZSBkaWZm
ZXJlbmNlLgorICAgICAgICAKKyAgICAgICAgSSB0aGluayB0aGlzIGlzIGEgc3RlcCB0b3dhcmQg
cmVtb3ZpbmcgLWZvbWl0LWZyYW1lLXBvaW50ZXIuCisKKyAgICAgICAgKiBydW50aW1lL0pTU3Ry
aW5nLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6IFJlbW92ZWQgdGhlIHNpbmds
ZS1jaGFyYWN0ZXIgY2FzZSBiZWNhdXNlIGl0J3Mgbm8KKyAgICAgICAgZGlmZmVyZW50IGZyb20g
dGhlIG5vcm1hbCBjYXNlLiAoSWYgd2UgZG8gY29tZSB1cCB3aXRoIGEgc2luZ2xlLWNoYXJhY3Rl
cgorICAgICAgICBvcHRpbWl6YXRpb24gaW4gZnV0dXJlLCBpdCBwcm9iYWJseSBkb2Vzbid0IGJl
bG9uZyBpbiBKU1N0cmluZywgYW55d2F5LikKKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFjZSk6IFNwbGl0
IHRoaXMgbWVnYS1zaXplZCBmdW5jdGlvbiBpbnRvOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNp
bmdTdHJpbmdTZWFyY2gpOiAtIFRoaXMgcmVhc29uYWJseSBzaXplZCBmdW5jdGlvbiwgYW5kCisg
ICAgICAgIChKU0M6OnJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaCk6IC0gVGhpcyBzdGlsbCBtZWdh
LXNpemVkIGZ1bmN0aW9uLgorCiAyMDExLTEyLTIyICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNA
d2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggZGVidWcgYnVpbGQgd2l0aCBhc3NlcnRpb25zIGRp
c2FibGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3Bw
CShyZXZpc2lvbiAxMDM1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSwxNCArMTk1LDYgQEAgdm9pZCBKU1N0cmlu
Zzo6b3V0T2ZNZW1vcnkoRXhlY1N0YXRlKiBleAogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZXhlYyk7CiB9CiAKLUpTVmFsdWUgSlNTdHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1N0
YXRlKiBleGVjLCBVQ2hhciBjaGFyYWN0ZXIsIGNvbnN0IFVTdHJpbmcmIHJlcGxhY2VtZW50KQot
ewotICAgIHNpemVfdCBtYXRjaFBvc2l0aW9uID0gdmFsdWUoZXhlYykuZmluZChjaGFyYWN0ZXIp
OwotICAgIGlmIChtYXRjaFBvc2l0aW9uID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZSh0aGlzKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbV92YWx1ZS5zdWJzdHJpbmdT
aGFyaW5nSW1wbCgwLCBtYXRjaFBvc2l0aW9uKSwgcmVwbGFjZW1lbnQsIHZhbHVlKGV4ZWMpLnN1
YnN0cmluZ1NoYXJpbmdJbXBsKG1hdGNoUG9zaXRpb24gKyAxKSk7Ci19Ci0KIEpTU3RyaW5nKiBK
U1N0cmluZzo6Z2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7
CiAgICAgQVNTRVJUKGlzUm9wZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTAzNTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDggKzIyOCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRlKiwgdW5z
aWduZWQpOwogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqLCB1
bnNpZ25lZCk7CiAKLSAgICAgICAgSlNWYWx1ZSByZXBsYWNlQ2hhcmFjdGVyKEV4ZWNTdGF0ZSos
IFVDaGFyLCBjb25zdCBVU3RyaW5nJiByZXBsYWNlbWVudCk7Ci0KICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
cHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCks
ICZzX2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDM1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgs
MjE3ICszOTgsMTU1IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTcGxpY2VTdWIK
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgaW1wbC5yZWxlYXNlKCkpOwogfQogCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBl
eGVjKQorc3RhdGljIE5FVkVSX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdSZWdF
eHBTZWFyY2goRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogc3RyaW5nLCBKU1ZhbHVlIHNlYXJj
aFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMpOwotICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwgPSB0aGlzVmFsdWUuaXNTdHJp
bmcoKSA/IGFzU3RyaW5nKHRoaXNWYWx1ZSkgOiBqc1N0cmluZyhleGVjLCB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYykpOwotICAgIEpTVmFsdWUgcGF0dGVybiA9IGV4ZWMtPmFyZ3VtZW50KDApOwot
ICAgIEpTVmFsdWUgcmVwbGFjZW1lbnQgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIFVTdHJpbmcgcmVw
bGFjZW1lbnRTdHJpbmc7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxEYXRhKTsKKyAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxh
Y2VWYWx1ZS50b1N0cmluZyhleGVjKTsKIAotICAgIGlmIChwYXR0ZXJuLmluaGVyaXRzKCZSZWdF
eHBPYmplY3Q6OnNfaW5mbykpIHsKLSAgICAgICAgVVN0cmluZyByZXBsYWNlbWVudFN0cmluZzsK
LSAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnQsIGNhbGxEYXRhKTsKLSAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFj
ZW1lbnQudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0cmluZyYgc291cmNlID0gc3RyaW5n
LT52YWx1ZShleGVjKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChz
ZWFyY2hWYWx1ZSktPnJlZ0V4cCgpOworICAgIGJvb2wgZ2xvYmFsID0gcmVnRXhwLT5nbG9iYWwo
KTsKIAotICAgICAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2UgPSBzb3VyY2VWYWwtPnZhbHVlKGV4
ZWMpOwotICAgICAgICB1bnNpZ25lZCBzb3VyY2VMZW4gPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICAgICAgUmVnRXhwKiByZWcgPSBhc1JlZ0V4cE9iamVj
dChwYXR0ZXJuKS0+cmVnRXhwKCk7Ci0gICAgICAgIGJvb2wgZ2xvYmFsID0gcmVnLT5nbG9iYWwo
KTsKLQotICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7Ci0KLSAgICAgICAg
Ly8gT3B0aW1pemF0aW9uIGZvciBzdWJzdHJpbmcgcmVtb3ZhbCAocmVwbGFjZSB3aXRoIGVtcHR5
KS4KLSAgICAgICAgaWYgKGdsb2JhbCAmJiBjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUgJiYgIXJl
cGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBpbnQgbGFzdEluZGV4ID0g
MDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOworICAgIFJlZ0V4cENv
bnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKIAotICAgICAgICAgICAgVmVjdG9yPFN0cmluZ1Jhbmdl
LCAxNj4gc291cmNlUmFuZ2VzOworICAgIC8vIE9wdGltaXphdGlvbiBmb3Igc3Vic3RyaW5nIHJl
bW92YWwgKHJlcGxhY2Ugd2l0aCBlbXB0eSkuCisgICAgaWYgKGdsb2JhbCAmJiBjYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUgJiYgIXJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAg
IGludCBsYXN0SW5kZXggPSAwOworICAgICAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gMDsK
IAotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBpbnQgbWF0Y2hJ
bmRleDsKLSAgICAgICAgICAgICAgICBpbnQgbWF0Y2hMZW4gPSAwOwotICAgICAgICAgICAgICAg
IGludCogb3ZlY3RvcjsKLSAgICAgICAgICAgICAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9y
bU1hdGNoKCpnbG9iYWxEYXRhLCByZWcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgbWF0Y2hJbmRl
eCwgbWF0Y2hMZW4sICZvdmVjdG9yKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hJbmRleCA8
IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBWZWN0b3I8U3RyaW5nUmFu
Z2UsIDE2PiBzb3VyY2VSYW5nZXM7CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICBpbnQgbWF0Y2hJbmRleDsKKyAgICAgICAgICAgIGludCBtYXRjaExlbiA9IDA7CisgICAgICAg
ICAgICBpbnQqIG92ZWN0b3I7CisgICAgICAgICAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9y
bU1hdGNoKCpnbG9iYWxEYXRhLCByZWdFeHAsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgbWF0Y2hJ
bmRleCwgbWF0Y2hMZW4sICZvdmVjdG9yKTsKKyAgICAgICAgICAgIGlmIChtYXRjaEluZGV4IDwg
MCkKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGlmIChsYXN0SW5k
ZXggPCBtYXRjaEluZGV4KQotICAgICAgICAgICAgICAgICAgICBzb3VyY2VSYW5nZXMuYXBwZW5k
KFN0cmluZ1JhbmdlKGxhc3RJbmRleCwgbWF0Y2hJbmRleCAtIGxhc3RJbmRleCkpOworICAgICAg
ICAgICAgaWYgKGxhc3RJbmRleCA8IG1hdGNoSW5kZXgpCisgICAgICAgICAgICAgICAgc291cmNl
UmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5k
ZXgpKTsKIAotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExl
bjsKLSAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdEluZGV4OworICAgICAgICAg
ICAgbGFzdEluZGV4ID0gbWF0Y2hJbmRleCArIG1hdGNoTGVuOworICAgICAgICAgICAgc3RhcnRQ
b3NpdGlvbiA9IGxhc3RJbmRleDsKIAotICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBv
ZiBlbXB0eSBtYXRjaAotICAgICAgICAgICAgICAgIGlmICghbWF0Y2hMZW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
cnRQb3NpdGlvbiA+IHNvdXJjZUxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBvZiBlbXB0eSBt
YXRjaAorICAgICAgICAgICAgaWYgKCFtYXRjaExlbikgeworICAgICAgICAgICAgICAgIHN0YXJ0
UG9zaXRpb24rKzsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJjZUxl
bikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKCFsYXN0SW5kZXgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzb3VyY2VWYWwpOwotCi0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pCi0gICAgICAgICAgICAgICAgc291cmNl
UmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIHNvdXJjZUxlbiAtIGxhc3RJbmRl
eCkpOworICAgICAgICBpZiAoIWxhc3RJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoc3RyaW5nKTsKIAotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1NwbGljZVN1YnN0cmluZ3MoZXhlYywgc291cmNlVmFsLCBzb3VyY2UsIHNvdXJjZVJhbmdlcy5k
YXRhKCksIHNvdXJjZVJhbmdlcy5zaXplKCkpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pCisgICAgICAgICAgICBz
b3VyY2VSYW5nZXMuYXBwZW5kKFN0cmluZ1JhbmdlKGxhc3RJbmRleCwgc291cmNlTGVuIC0gbGFz
dEluZGV4KSk7CiAKLSAgICAgICAgaW50IGxhc3RJbmRleCA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24gPSAwOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Bs
aWNlU3Vic3RyaW5ncyhleGVjLCBzdHJpbmcsIHNvdXJjZSwgc291cmNlUmFuZ2VzLmRhdGEoKSwg
c291cmNlUmFuZ2VzLnNpemUoKSkpOworICAgIH0KIAotICAgICAgICBWZWN0b3I8U3RyaW5nUmFu
Z2UsIDE2PiBzb3VyY2VSYW5nZXM7Ci0gICAgICAgIFZlY3RvcjxVU3RyaW5nLCAxNj4gcmVwbGFj
ZW1lbnRzOworICAgIGludCBsYXN0SW5kZXggPSAwOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24gPSAwOwogCi0gICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbG9vcCAoaWYgZ2xvYmFsIGlz
IHNldCkgb3IgYSBvbmUtd2F5IChpZiBub3QpLgotICAgICAgICBpZiAoZ2xvYmFsICYmIGNhbGxU
eXBlID09IENhbGxUeXBlSlMpIHsKLSAgICAgICAgICAgIC8vIHJlZy0+bnVtU3VicGF0dGVybnMo
KSArIDEgZm9yIHBhdHRlcm4gYXJncywgKyAyIGZvciBtYXRjaCBzdGFydCBhbmQgc291cmNlVmFs
dWUKLSAgICAgICAgICAgIGludCBhcmdDb3VudCA9IHJlZy0+bnVtU3VicGF0dGVybnMoKSArIDEg
KyAyOwotICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGFzRnVuY3Rpb24ocmVwbGFjZW1l
bnQpOwotICAgICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1bmMsIGFyZ0Nv
dW50KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLSAgICAgICAgICAgIGlmIChz
b3VyY2UuaXM4Qml0KCkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgICAgICAgICAgICBpbnQgbWF0Y2hJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgaW50IG1h
dGNoTGVuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW50KiBvdmVjdG9yOwotICAgICAgICAg
ICAgICAgICAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKCpnbG9iYWxEYXRhLCBy
ZWcsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgbWF0Y2hJbmRleCwgbWF0Y2hMZW4sICZvdmVjdG9y
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoSW5kZXggPCAwKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgVmVjdG9yPFN0cmluZ1JhbmdlLCAxNj4gc291cmNlUmFu
Z2VzOworICAgIFZlY3RvcjxVU3RyaW5nLCAxNj4gcmVwbGFjZW1lbnRzOwogCi0gICAgICAgICAg
ICAgICAgICAgIHNvdXJjZVJhbmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4LCBtYXRj
aEluZGV4IC0gbGFzdEluZGV4KSk7CisgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBsb29wIChpZiBn
bG9iYWwgaXMgc2V0KSBvciBhIG9uZS13YXkgKGlmIG5vdCkuCisgICAgaWYgKGdsb2JhbCAmJiBj
YWxsVHlwZSA9PSBDYWxsVHlwZUpTKSB7CisgICAgICAgIC8vIHJlZ0V4cC0+bnVtU3VicGF0dGVy
bnMoKSArIDEgZm9yIHBhdHRlcm4gYXJncywgKyAyIGZvciBtYXRjaCBzdGFydCBhbmQgc3RyaW5n
CisgICAgICAgIGludCBhcmdDb3VudCA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEgKyAy
OworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gYXNGdW5jdGlvbihyZXBsYWNlVmFsdWUpOwor
ICAgICAgICBDYWNoZWRDYWxsIGNhY2hlZENhbGwoZXhlYywgZnVuYywgYXJnQ291bnQpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSkgeworICAg
ICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpbnQgbWF0Y2hJbmRleDsK
KyAgICAgICAgICAgICAgICBpbnQgbWF0Y2hMZW4gPSAwOworICAgICAgICAgICAgICAgIGludCog
b3ZlY3RvcjsKKyAgICAgICAgICAgICAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNo
KCpnbG9iYWxEYXRhLCByZWdFeHAsIHNvdXJjZSwgc3RhcnRQb3NpdGlvbiwgbWF0Y2hJbmRleCwg
bWF0Y2hMZW4sICZvdmVjdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hJbmRleCA8IDAp
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGludCBj
b21wbGV0ZU1hdGNoU3RhcnQgPSBvdmVjdG9yWzBdOwotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByZWctPm51bVN1YnBh
dHRlcm5zKCkgKyAxOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRjaFN0
YXJ0ID0gb3ZlY3RvcltpICogMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0Y2hM
ZW4gPSBvdmVjdG9yW2kgKiAyICsgMV0gLSBtYXRjaFN0YXJ0OwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hTdGFydCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNl
dEFyZ3VtZW50KGksIGpzU3Vic3RyaW5nOChnbG9iYWxEYXRhLCBzb3VyY2UsIG1hdGNoU3RhcnQs
IG1hdGNoTGVuKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KGkrKywganNOdW1iZXIoY29tcGxldGVNYXRjaFN0YXJ0
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSsrLCBzb3Vy
Y2VWYWwpOwotCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxs
LmNhbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKExJS0VMWShyZXN1bHQuaXNTdHJpbmco
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGFzU3RyaW5n
KHJlc3VsdCktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChyZXN1bHQudG9TdHJpbmcoY2Fj
aGVkQ2FsbC5uZXdDYWxsRnJhbWUoZXhlYykpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1h
dGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKIAotICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXgg
PSBtYXRjaEluZGV4ICsgbWF0Y2hMZW47Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBsYXN0SW5kZXg7CisgICAgICAgICAgICAgICAgaW50IGNvbXBsZXRlTWF0Y2hTdGFydCA9
IG92ZWN0b3JbMF07CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgICAg
ICAgICAgZm9yICg7IGkgPCByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IG1hdGNoU3RhcnQgPSBvdmVjdG9yW2kgKiAyXTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50IG1hdGNoTGVuID0gb3ZlY3RvcltpICogMiArIDFdIC0gbWF0Y2hT
dGFydDsKIAotICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgZW1wdHkgbWF0
Y2gKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaExlbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRQb3NpdGlvbisrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0UG9zaXRpb24gPiBzb3VyY2VMZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNo
U3RhcnQgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVu
dChpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpLCBqc1N1YnN0cmluZzgoZ2xv
YmFsRGF0YSwgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IG1hdGNoSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAg
IGludCBtYXRjaExlbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGludCogb3ZlY3RvcjsKLSAg
ICAgICAgICAgICAgICAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFs
RGF0YSwgcmVnLCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24sIG1hdGNoSW5kZXgsIG1hdGNoTGVuLCAm
b3ZlY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaEluZGV4IDwgMCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVJh
bmdlcy5hcHBlbmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4LCBtYXRjaEluZGV4IC0gbGFzdEluZGV4
KSk7CisgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIGpzTnVtYmVy
KGNvbXBsZXRlTWF0Y2hTdGFydCkpOworICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoaSsrLCBzdHJpbmcpOwogCi0gICAgICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZU1h
dGNoU3RhcnQgPSBvdmVjdG9yWzBdOwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByZWctPm51bVN1YnBhdHRlcm5zKCkg
KyAxOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRjaFN0YXJ0ID0gb3Zl
Y3RvcltpICogMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0Y2hMZW4gPSBvdmVj
dG9yW2kgKiAyICsgMV0gLSBtYXRjaFN0YXJ0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobWF0Y2hTdGFydCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2Fs
bC5zZXRBcmd1bWVudChpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50
KGksIGpzU3Vic3RyaW5nKGdsb2JhbERhdGEsIHNvdXJjZSwgbWF0Y2hTdGFydCwgbWF0Y2hMZW4p
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlZENh
bGwuc2V0QXJndW1lbnQoaSsrLCBqc051bWJlcihjb21wbGV0ZU1hdGNoU3RhcnQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIHNvdXJjZVZhbCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoYXNTdHJpbmcocmVzdWx0KS0+
dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3VsdC50b1N0cmluZyhjYWNoZWRDYWxsLm5l
d0NhbGxGcmFtZShleGVjKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoTElL
RUxZKHJlc3VsdC5pc1N0cmluZygpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRz
LmFwcGVuZChhc1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKHJlc3VsdC50b1N0
cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpOworICAgICAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2hJbmRleCArIG1hdGNoTGVuOwotICAg
ICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdEluZGV4OworICAgICAgICAgICAg
ICAgIGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExlbjsKKyAgICAgICAgICAgICAgICBz
dGFydFBvc2l0aW9uID0gbGFzdEluZGV4OwogCi0gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNp
YWwgY2FzZSBvZiBlbXB0eSBtYXRjaAotICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoTGVu
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJjZUxlbikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIC8vIHNwZWNpYWwgY2FzZSBvZiBlbXB0eSBtYXRjaAorICAgICAgICAgICAgICAgIGlm
ICghbWF0Y2hMZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJjZUxlbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgICAgICAgICAgaW50IG1hdGNoSW5kZXg7CiAgICAgICAgICAgICAgICAg
aW50IG1hdGNoTGVuID0gMDsKICAgICAgICAgICAgICAgICBpbnQqIG92ZWN0b3I7Ci0gICAgICAg
ICAgICAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFsRGF0YSwgcmVn
LCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24sIG1hdGNoSW5kZXgsIG1hdGNoTGVuLCAmb3ZlY3Rvcik7
CisgICAgICAgICAgICAgICAgcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCgqZ2xvYmFs
RGF0YSwgcmVnRXhwLCBzb3VyY2UsIHN0YXJ0UG9zaXRpb24sIG1hdGNoSW5kZXgsIG1hdGNoTGVu
LCAmb3ZlY3Rvcik7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoSW5kZXggPCAwKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBD
YWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChT
dHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBzb3VyY2VSYW5nZXMuYXBwZW5kKFN0cmluZ1JhbmdlKGxhc3RJbmRleCwgbWF0Y2hJ
bmRleCAtIGxhc3RJbmRleCkpOwogCi0gICAgICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZU1h
dGNoU3RhcnQgPSBvdmVjdG9yWzBdOwotICAgICAgICAgICAgICAgICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOworICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZU1hdGNoU3RhcnQgPSBv
dmVjdG9yWzBdOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICAgICAg
ICAgIGZvciAoOyBpIDwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGludCBtYXRjaFN0YXJ0ID0gb3ZlY3RvcltpICogMl07CisgICAgICAg
ICAgICAgICAgICAgIGludCBtYXRjaExlbiA9IG92ZWN0b3JbaSAqIDIgKyAxXSAtIG1hdGNoU3Rh
cnQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZy0+
bnVtU3VicGF0dGVybnMoKSArIDE7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1hdGNoU3RhcnQgPSBvdmVjdG9yW2kgKiAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBtYXRjaExlbiA9IG92ZWN0b3JbaSAqIDIgKyAxXSAtIG1hdGNoU3RhcnQ7Ci0gCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobWF0Y2hTdGFydCA8IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncy5hcHBlbmQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoanNTdWJz
dHJpbmcoZXhlYywgc291cmNlLCBtYXRjaFN0YXJ0LCBtYXRjaExlbikpOwotICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0IDwgMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNVbmRlZmluZWQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
Y2hlZENhbGwuc2V0QXJndW1lbnQoaSwganNTdWJzdHJpbmcoZ2xvYmFsRGF0YSwgc291cmNlLCBt
YXRjaFN0YXJ0LCBtYXRjaExlbikpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihjb21wbGV0ZU1hdGNoU3RhcnQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoc291cmNlVmFsKTsKKyAgICAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldEFyZ3VtZW50KGkrKywganNOdW1iZXIoY29tcGxldGVNYXRjaFN0YXJ0KSk7
CisgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudChpKyssIHN0cmluZyk7CiAK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChjYWxsKGV4ZWMsIHJlcGxh
Y2VtZW50LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5n
KGV4ZWMpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IHJlcGxMZW4gPSByZXBsYWNlbWVudFN0cmluZy5sZW5n
dGgoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IG1hdGNoSW5kZXggfHwg
cmVwbExlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlUmFuZ2VzLmFwcGVuZChT
dHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsKLSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXBsTGVuKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2Vt
ZW50U3RyaW5nLCBzb3VyY2UsIG92ZWN0b3IsIHJlZykpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQo
VVN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoTElLRUxZKHJlc3VsdC5pc1N0cmluZygpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLmFwcGVuZChhc1N0cmluZyhyZXN1bHQpLT52YWx1ZShleGVjKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5k
KHJlc3VsdC50b1N0cmluZyhjYWNoZWRDYWxsLm5ld0NhbGxGcmFtZShleGVjKSkpOworICAgICAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBtYXRjaEluZGV4ICsgbWF0Y2hM
ZW47CiAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RJbmRleDsKQEAgLTYxOSw1
NiArNTU3LDEyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gc291cmNlTGVuKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSB3aGlsZSAoZ2xvYmFsKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGludCBtYXRjaEluZGV4OworICAgICAgICAgICAg
aW50IG1hdGNoTGVuID0gMDsKKyAgICAgICAgICAgIGludCogb3ZlY3RvcjsKKyAgICAgICAgICAg
IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2goKmdsb2JhbERhdGEsIHJlZ0V4cCwgc291
cmNlLCBzdGFydFBvc2l0aW9uLCBtYXRjaEluZGV4LCBtYXRjaExlbiwgJm92ZWN0b3IpOworICAg
ICAgICAgICAgaWYgKG1hdGNoSW5kZXggPCAwKQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIGlmICghbGFzdEluZGV4ICYmIHJlcGxhY2VtZW50cy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNvdXJjZVZhbCk7CisgICAgICAgICAgICBpZiAo
Y2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgICAgICAgICAgc291cmNlUmFuZ2Vz
LmFwcGVuZChTdHJpbmdSYW5nZShsYXN0SW5kZXgsIG1hdGNoSW5kZXggLSBsYXN0SW5kZXgpKTsK
IAotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VM
ZW4pCi0gICAgICAgICAgICBzb3VyY2VSYW5nZXMuYXBwZW5kKFN0cmluZ1JhbmdlKGxhc3RJbmRl
eCwgc291cmNlTGVuIC0gbGFzdEluZGV4KSk7CisgICAgICAgICAgICAgICAgaW50IGNvbXBsZXRl
TWF0Y2hTdGFydCA9IG92ZWN0b3JbMF07CisgICAgICAgICAgICAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
aW50IG1hdGNoU3RhcnQgPSBvdmVjdG9yW2kgKiAyXTsKKyAgICAgICAgICAgICAgICAgICAgaW50
IG1hdGNoTGVuID0gb3ZlY3RvcltpICogMiArIDFdIC0gbWF0Y2hTdGFydDsKIAotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0b3JzKGV4
ZWMsIHNvdXJjZVZhbCwgc291cmNlLCBzb3VyY2VSYW5nZXMuZGF0YSgpLCBzb3VyY2VSYW5nZXMu
c2l6ZSgpLCByZXBsYWNlbWVudHMuZGF0YSgpLCByZXBsYWNlbWVudHMuc2l6ZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtYXRjaFN0YXJ0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChqc1N1YnN0cmluZyhleGVjLCBz
b3VyY2UsIG1hdGNoU3RhcnQsIG1hdGNoTGVuKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoY29tcGxldGVNYXRjaFN0YXJ0KSk7Cisg
ICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoc3RyaW5nKTsKKworICAgICAgICAgICAgICAgIHJl
cGxhY2VtZW50cy5hcHBlbmQoY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxs
RGF0YSwganNVbmRlZmluZWQoKSwgYXJncykudG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCByZXBsTGVuID0gcmVw
bGFjZW1lbnRTdHJpbmcubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8
IG1hdGNoSW5kZXggfHwgcmVwbExlbikgeworICAgICAgICAgICAgICAgICAgICBzb3VyY2VSYW5n
ZXMuYXBwZW5kKFN0cmluZ1JhbmdlKGxhc3RJbmRleCwgbWF0Y2hJbmRleCAtIGxhc3RJbmRleCkp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXBsTGVuKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVwbGFj
ZW1lbnRTdHJpbmcsIHNvdXJjZSwgb3ZlY3RvciwgcmVnRXhwKSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoVVN0
cmluZygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGxhc3RJbmRleCA9IG1hdGNoSW5kZXggKyBtYXRjaExlbjsKKyAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBsYXN0SW5kZXg7CisKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBvZiBlbXB0
eSBtYXRjaAorICAgICAgICAgICAgaWYgKCFtYXRjaExlbikgeworICAgICAgICAgICAgICAgIHN0
YXJ0UG9zaXRpb24rKzsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IHNvdXJj
ZUxlbikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKGdsb2JhbCk7CiAgICAgfQogCi0gICAgLy8gTm90IGEgcmVndWxhciBleHByZXNz
aW9uLCBzbyB0cmVhdCB0aGUgcGF0dGVybiBhcyBhIHN0cmluZy4KKyAgICBpZiAoIWxhc3RJbmRl
eCAmJiByZXBsYWNlbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHN0cmluZyk7CiAKLSAgICAvLyAncGF0dGVyblN0cmluZycgKG9yICdzZWFyY2hWYWx1ZScs
IGFzIGl0IGlzIHJlZmVycmVkIHRvIGluIHRoZSBzcGVjKSBpcyBjb252ZXJ0ZWQgYmVmb3JlIHRo
ZSByZXBsYWNlbWVudC4KLSAgICBVU3RyaW5nIHBhdHRlcm5TdHJpbmcgPSBwYXR0ZXJuLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGxhc3RJbmRleCkgPCBzb3VyY2VMZW4pCisgICAgICAgIHNvdXJjZVJhbmdlcy5hcHBl
bmQoU3RyaW5nUmFuZ2UobGFzdEluZGV4LCBzb3VyY2VMZW4gLSBsYXN0SW5kZXgpKTsKIAotICAg
IFVTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmc7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXBsYWNlbWVudCwgY2FsbERhdGEpOwot
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCi0gICAgICAgIHJlcGxhY2VtZW50U3Ry
aW5nID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1NwbGljZVN1YnN0cmluZ3NXaXRoU2VwYXJhdG9ycyhleGVjLCBzdHJpbmcsIHNvdXJj
ZSwgc291cmNlUmFuZ2VzLmRhdGEoKSwgc291cmNlUmFuZ2VzLnNpemUoKSwgcmVwbGFjZW1lbnRz
LmRhdGEoKSwgcmVwbGFjZW1lbnRzLnNpemUoKSkpOworfQorCitzdGF0aWMgTkVWRVJfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNl
VmFsdWUpCit7CisgICAgY29uc3QgVVN0cmluZyYgc3RyaW5nID0ganNTdHJpbmctPnZhbHVlKGV4
ZWMpOworICAgIFVTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhl
Yyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgLy8gU3BlY2lhbCBjYXNlIGZvciBzaW5n
bGUgY2hhcmFjdGVyIHBhdHRlcm5zIHdpdGhvdXQgYmFjayByZWZlcmVuY2UgcmVwbGFjZW1lbnQK
LSAgICBpZiAocGF0dGVyblN0cmluZy5sZW5ndGgoKSA9PSAxICYmIGNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSAmJiByZXBsYWNlbWVudFN0cmluZy5maW5kKCckJywgMCkgPT0gbm90Rm91bmQpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc291cmNlVmFsLT5yZXBsYWNlQ2hhcmFjdGVy
KGV4ZWMsIHBhdHRlcm5TdHJpbmdbMF0sIHJlcGxhY2VtZW50U3RyaW5nKSk7Ci0KLSAgICBjb25z
dCBVU3RyaW5nJiBzb3VyY2UgPSBzb3VyY2VWYWwtPnZhbHVlKGV4ZWMpOwotICAgIHNpemVfdCBt
YXRjaFBvcyA9IHNvdXJjZS5maW5kKHBhdHRlcm5TdHJpbmcpOworICAgIHNpemVfdCBtYXRjaFN0
YXJ0ID0gc3RyaW5nLmZpbmQoc2VhcmNoU3RyaW5nKTsKKyAgICBpZiAobWF0Y2hTdGFydCA9PSBu
b3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyk7CiAKLSAg
ICBpZiAobWF0Y2hQb3MgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc291cmNlVmFsKTsKLQotICAgIGludCBtYXRjaExlbiA9IHBhdHRlcm5TdHJpbmcubGVuZ3Ro
KCk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShyZXBsYWNlVmFsdWUsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgIT0gQ2Fs
bFR5cGVOb25lKSB7CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAg
IGFyZ3MuYXBwZW5kKGpzU3Vic3RyaW5nKGV4ZWMsIHNvdXJjZSwgbWF0Y2hQb3MsIG1hdGNoTGVu
KSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKG1hdGNoUG9zKSk7Ci0gICAgICAgIGFy
Z3MuYXBwZW5kKHNvdXJjZVZhbCk7Ci0KLSAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBjYWxs
KGV4ZWMsIHJlcGxhY2VtZW50LCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFy
Z3MpLnRvU3RyaW5nKGV4ZWMpOworICAgICAgICBhcmdzLmFwcGVuZChqc1N1YnN0cmluZyhleGVj
LCBzdHJpbmcsIG1hdGNoU3RhcnQsIHNlYXJjaFN0cmluZy5sZW5ndGgoKSkpOworICAgICAgICBh
cmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0KSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKGpz
U3RyaW5nKTsKKyAgICAgICAgcmVwbGFjZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUs
IGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQotICAgIAotICAgIHNpemVfdCBtYXRjaEVuZCA9IG1hdGNo
UG9zICsgbWF0Y2hMZW47Ci0gICAgaW50IG92ZWN0b3JbMl0gPSB7IG1hdGNoUG9zLCBtYXRjaEVu
ZCB9OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgc291cmNlLnN1
YnN0cmluZ1NoYXJpbmdJbXBsKDAsIG1hdGNoUG9zKSwgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2Vz
KHJlcGxhY2VtZW50U3RyaW5nLCBzb3VyY2UsIG92ZWN0b3IsIDApLCBzb3VyY2Uuc3Vic3RyaW5n
U2hhcmluZ0ltcGwobWF0Y2hFbmQpKSk7CisKKyAgICBVU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSBy
ZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAg
c2l6ZV90IG1hdGNoRW5kID0gbWF0Y2hTdGFydCArIHNlYXJjaFN0cmluZy5sZW5ndGgoKTsKKyAg
ICBpbnQgb3ZlY3RvclsyXSA9IHsgbWF0Y2hTdGFydCwgIG1hdGNoRW5kfTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNTdHJpbmcoZXhlYywgc3RyaW5nLnN1YnN0cmluZ1NoYXJp
bmdJbXBsKDAsIG1hdGNoU3RhcnQpLCBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMocmVwbGFjZVN0
cmluZywgc3RyaW5nLCBvdmVjdG9yLCAwKSwgc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKG1h
dGNoRW5kKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmlzU3RyaW5nKCkpIHsK
KyAgICAgICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVj
dENvZXJjaWJsZQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Cisg
ICAgICAgIHRoaXNWYWx1ZSA9IGpzU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KSk7CisgICAgfQorICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyh0aGlzVmFsdWUpOwor
ICAgIEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworCisgICAgaWYgKHNlYXJjaFZhbHVl
LmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpCisgICAgICAgIHJldHVybiByZXBsYWNl
VXNpbmdSZWdFeHBTZWFyY2goZXhlYywgc3RyaW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVl
KTsKKyAgICByZXR1cm4gcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKGV4ZWMsIHN0cmluZywgc2Vh
cmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQo=
</data>
<flag name="review"
          id="120626"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>