<?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>15339</bug_id>
          
          <creation_ts>2007-10-02 00:26:08 -0700</creation_ts>
          <short_desc>Use Vector&lt;UChar&gt; instead of DeprecatedString for innerHTML, for 35% speedup on CK DOM test</short_desc>
          <delta_ts>2007-10-02 20:48:57 -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>DOM</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://celtickane.com/projects/jsspeed2007.php</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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>57615</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-02 00:26:08 -0700</bug_when>
    <thetext>createMarkup() is the guts of innerHTML - the way it is implemented now leads to lots of conversion between DeprecatedString and String, and lots of random concatenation. It could be much faster to use a Vector&lt;UChar&gt; and build the whole string in that, and then use String::adopt to do the whole operation without excess conversions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57617</commentid>
    <comment_count>1</comment_count>
      <attachid>16498</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-02 00:58:35 -0700</bug_when>
    <thetext>Created attachment 16498
the speedup described plus a few more micro-optimizations to innerHTML</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16498</attachid>
            <date>2007-10-02 00:58:35 -0700</date>
            <delta_ts>2007-10-02 02:55:01 -0700</delta_ts>
            <desc>the speedup described plus a few more micro-optimizations to innerHTML</desc>
            <filename>innerHTML-no-DeprecatedString.patch.txt</filename>
            <type>text/plain</type>
            <size>35705</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTkxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDctMTAtMDIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IFVzZSBWZWN0b3I8VUNoYXI+IGluc3RlYWQgb2YgRGVwcmVjYXRlZFN0cmluZyBmb3IgaW5uZXJI
VE1MLCBmb3IgMzUlIHNwZWVkdXAgb24gQ0sgRE9NIHRlc3QKKyAgICAgICAgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMzkKKworICAgICAgICBSZXdyb3RlIGJvdGgg
dmVyc2lvbnMgb2YgY3JlYXRlTWFya3VwIHRvIGJ1aWxkIGJhc2VkIG9uCisgICAgICAgIFZlY3Rv
cjxVQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmcuIEFsc28gb3RoZXIgbWlzY2VsbGFuZW91cworICAg
ICAgICBzcGVlZHVwcyAobWFpbmx5IGNvbnRlbnQgc3RyaW5ncyBhcmUgbm93IGVuY29kZWQgaW4g
YSB3YXkgdGhhdAorICAgICAgICBkb2Vzbid0IHRha2UgYSBmdW5jdGlvbiBjYWxsIHBlciBjaGFy
YWN0ZXIsIGFuZCBzd2l0Y2ggaXMgYXZvaWRlZCkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFs
c28gY2F1c2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgLSB3ZSBubyBsb25nZXIgZXNjYXBlICc+JyBz
aW5jZSB0aGlzIHdhcyB1bm5lY2Vzc2FyeSBhbmQgaXQncyBmYXN0ZXIKKyAgICAgICAgdG8gYXZv
aWQgdGVzdGluZyBmb3IgaXQuIFNlZSB1cGRhdGVkIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgCisg
ICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OmVzY2FwZUNvbnRlbnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEVz
Y2FwZWRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZERlcHJlY2F0ZWRTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6c3RyaW5nVmFsdWVGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp1
Y2hhclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFVDaGFyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFN0
YXJ0TWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0YXJ0TWFya3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OmFwcGVuZEVuZE1hcmt1cCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRFbmRNYXJr
dXApOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6
OmpvaW5NYXJrdXBzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6CisgICAgICAg
ICogZWRpdGluZy9tYXJrdXAuaDoKKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlk
Z2UubW06CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBtYXJrdXBTdHJpbmdGcm9tTm9k
ZTpub2RlczpdKToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIG1hcmt1cFN0cmluZ0Zy
b21SYW5nZTpub2RlczpdKToKKwogMjAwNy0xMC0wMSAgTGFycyBLbm9sbCAgPGxhcnNAdHJvbGx0
ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHJldmlzaW9uIDI1ODEwKQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg2LDcxICs4NiwxNjMgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV92YWx1ZTsK
IH07CiAKLXN0YXRpYyBEZXByZWNhdGVkU3RyaW5nIGVzY2FwZVRleHRGb3JNYXJrdXAoY29uc3Qg
U3RyaW5nJiBpbiwgYm9vbCBpc0F0dHJpYnV0ZVZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGFw
cGVuZFN0cmluZyhWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgc3RyKQogewot
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcyA9ICIiOworICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJh
Y3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIGFwcGVuZEF0dHJp
YnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyKQorewor
ICAgIGNvbnN0IFVDaGFyKiB1Y2hhcnMgPSBhdHRyLmNoYXJhY3RlcnMoKTsKKyAgICB1bnNpZ25l
ZCBsZW4gPSBhdHRyLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxhc3RDb3BpZWRGcm9tID0gMDsK
IAotICAgIHVuc2lnbmVkIGxlbiA9IGluLmxlbmd0aCgpOworICAgIHN0YXRpYyBjb25zdCBTdHJp
bmcgYW1wRW50aXR5KCImYW1wOyIpOworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgbHRFbnRpdHko
IiZsdDsiKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHF1b3RFbnRpdHkoIiZxdW90OyIpOwor
ICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBz
d2l0Y2ggKGluW2ldKSB7CisgICAgICAgIFVDaGFyIGMgPSB1Y2hhcnNbaV07CisgICAgICAgIHN3
aXRjaCAoYykgewogICAgICAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICAgICAgcyArPSAi
JmFtcDsiOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsgbGFzdENvcGll
ZEZyb20sIGkgLSBsYXN0Q29waWVkRnJvbSk7CisgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5n
KHJlc3VsdCwgYW1wRW50aXR5KTsKKyAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkg
KyAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnPCc6Ci0gICAg
ICAgICAgICAgICAgcyArPSAiJmx0OyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgICAgICBzICs9ICImZ3Q7IjsKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGll
ZEZyb20pOworICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIGx0RW50aXR5KTsK
KyAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkgKyAxOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAgICAgaWYgKGlzQXR0
cmlidXRlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcyArPSAiJnF1b3Q7IjsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IC8vIGZhbGwgdGhyb3VnaAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBz
ICs9IERlcHJlY2F0ZWRDaGFyKGluW2ldKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOworICAgICAgICAg
ICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHF1b3RFbnRpdHkpOworICAgICAgICAgICAgICAg
IGxhc3RDb3BpZWRGcm9tID0gaSArIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmVz
dWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgbGVuIC0gbGFzdENvcGllZEZyb20p
OworfQorICAgIAorc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgZXNjYXBlQ29udGVudFRleHQoY29u
c3QgU3RyaW5nJiBpbikKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHMgPSAiIjsKKworICAgIHVu
c2lnbmVkIGxlbiA9IGluLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxhc3RDb3BpZWRGcm9tID0g
MDsKKworICAgIGNvbnN0IFVDaGFyKiB1Y2hhcnMgPSBpbi5jaGFyYWN0ZXJzKCk7CisgICAgY29u
c3QgRGVwcmVjYXRlZENoYXIqIGRjaGFycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGVwcmVj
YXRlZENoYXIqPih1Y2hhcnMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsg
KytpKSB7CisgICAgICAgIFVDaGFyIGMgPSB1Y2hhcnNbaV07CisgICAgICAgIGlmIChjID09ICcm
JyB8IGMgPT0gJzwnKSB7CisgICAgICAgICAgICBzLmFwcGVuZChkY2hhcnMgKyBsYXN0Q29waWVk
RnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKKyAgICAgICAgICAgIGlmIChjID09ICcmJykKKyAg
ICAgICAgICAgICAgICBzICs9ICImYW1wOyI7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgICAgIHMgKz0gIiZsdDsiOworICAgICAgICAgICAgbGFzdENvcGllZEZyb20gPSBpICsgMTsK
ICAgICAgICAgfQogICAgIH0KIAorICAgIHMuYXBwZW5kKGRjaGFycyArIGxhc3RDb3BpZWRGcm9t
LCBsZW4gLSBsYXN0Q29waWVkRnJvbSk7CisKICAgICByZXR1cm4gczsKIH0KKworICAgIAorc3Rh
dGljIHZvaWQgYXBwZW5kRXNjYXBlZENvbnRlbnQoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBwYWly
PGNvbnN0IFVDaGFyKiwgc2l6ZV90PiByYW5nZSkKK3sKKyAgICBjb25zdCBVQ2hhciogdWNoYXJz
ID0gcmFuZ2UuZmlyc3Q7CisgICAgdW5zaWduZWQgbGVuID0gcmFuZ2Uuc2Vjb25kOworICAgIHVu
c2lnbmVkIGxhc3RDb3BpZWRGcm9tID0gMDsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5n
IGFtcEVudGl0eSgiJmFtcDsiKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGx0RW50aXR5KCIm
bHQ7Iik7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Cisg
ICAgICAgIFVDaGFyIGMgPSB1Y2hhcnNbaV07CisgICAgICAgIGlmIChjID09ICcmJyB8IGMgPT0g
JzwnKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9t
LCBpIC0gbGFzdENvcGllZEZyb20pOworICAgICAgICAgICAgaWYgKGMgPT0gJyYnKQorICAgICAg
ICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIGFtcEVudGl0eSk7CisgICAgICAgICAgICBl
bHNlIAorICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIGx0RW50aXR5KTsKKyAg
ICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgbGVuIC0gbGFzdENv
cGllZEZyb20pOworfSAgICAKKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZERlcHJlY2F0ZWRT
dHJpbmcoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHIp
Cit7CisgICAgcmVzdWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3Ry
LnVuaWNvZGUoKSksIHN0ci5sZW5ndGgoKSk7Cit9ICAgIAogICAgIAotc3RhdGljIFN0cmluZyB1
cmxBdHRyaWJ1dGVUb1F1b3RlZFN0cmluZyhTdHJpbmcgdXJsU3RyaW5nKQorc3RhdGljIHZvaWQg
YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBTdHJp
bmcgdXJsU3RyaW5nKQogewotICAgIFVDaGFyIHF1b3RlQ2hhciA9ICciJzsKKyAgICBVQ2hhciBx
dW90ZUNoYXIgPSAnXCInOwogICAgIGlmICh1cmxTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCkuc3Rh
cnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKICAgICAgICAgLy8gbWluaW1hbCBlc2Nh
cGluZyBmb3IgamF2YXNjcmlwdCB1cmxzCi0gICAgICAgIGlmICh1cmxTdHJpbmcuY29udGFpbnMo
JyInKSkgeworICAgICAgICBpZiAodXJsU3RyaW5nLmNvbnRhaW5zKCdcIicpKSB7CiAgICAgICAg
ICAgICBpZiAodXJsU3RyaW5nLmNvbnRhaW5zKCdcJycpKQotICAgICAgICAgICAgICAgIHVybFN0
cmluZy5yZXBsYWNlKCciJywgIiZxdW90OyIpOworICAgICAgICAgICAgICAgIHVybFN0cmluZy5y
ZXBsYWNlKCdcIicsICImcXVvdDsiKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBxdW90ZUNoYXIgPSAnXCcnOwogICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIC8vIEZJ
WE1FIHRoaXMgZG9lcyBub3QgZnVsbHkgbWF0Y2ggb3RoZXIgYnJvd3NlcnMuIEZpcmVmb3ggZXNj
YXBlcyBzcGFjZXMgYW5kIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycy4KLSAgICAgICAgdXJsU3Ry
aW5nID0gZXNjYXBlVGV4dEZvck1hcmt1cCh1cmxTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0
cnVlKTsKLQotICAgIFN0cmluZyByZXM7Ci0gICAgcmVzLmFwcGVuZChxdW90ZUNoYXIpOwotICAg
IHJlcy5hcHBlbmQodXJsU3RyaW5nKTsKLSAgICByZXMuYXBwZW5kKHF1b3RlQ2hhcik7Ci0gICAg
cmV0dXJuIHJlczsKLX0KKyAgICAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOworICAgICAg
ICBhcHBlbmRTdHJpbmcocmVzdWx0LCB1cmxTdHJpbmcpOworICAgICAgICByZXN1bHQuYXBwZW5k
KHF1b3RlQ2hhcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKKyAgICAvLyBGSVhNRSB0aGlz
IGRvZXMgbm90IGZ1bGx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLiBGaXJlZm94IGVzY2FwZXMgc3Bh
Y2VzIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMuCisgICAgcmVzdWx0LmFwcGVuZChxdW90
ZUNoYXIpOworICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgdXJsU3RyaW5nKTsKKyAg
ICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7ICAgIAorfQorICAgIAogc3RhdGljIFN0cmluZyBz
dHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpyYW5nZSkK
IHsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisK
ICAgICBTdHJpbmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCkuY29weSgpOworICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CisgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYykpCisgICAg
ICAgIHN0ci50cnVuY2F0ZShyYW5nZS0+ZW5kT2Zmc2V0KGVjKSk7CisgICAgaWYgKG5vZGUgPT0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSkKKyAgICAgICAgc3RyLnJlbW92ZSgwLCByYW5nZS0+
c3RhcnRPZmZzZXQoZWMpKTsKKyAgICByZXR1cm4gc3RyOworfQorCitzdGF0aWMgaW5saW5lIHBh
aXI8Y29uc3QgVUNoYXIqLCBzaXplX3Q+IHVjaGFyUmFuZ2UoY29uc3QgTm9kZSAqbm9kZSwgY29u
c3QgUmFuZ2UgKnJhbmdlKQoreworICAgIFN0cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKTsK
KyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0ci5jaGFyYWN0ZXJzKCk7CisgICAgc2l6
ZV90IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKKwogICAgIGlmIChyYW5nZSkgewogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjOwogICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVy
KGVjKSkKLSAgICAgICAgICAgIHN0ci50cnVuY2F0ZShyYW5nZS0+ZW5kT2Zmc2V0KGVjKSk7Ci0g
ICAgICAgIGlmIChub2RlID09IHJhbmdlLT5zdGFydENvbnRhaW5lcihlYykpCi0gICAgICAgICAg
ICBzdHIucmVtb3ZlKDAsIHJhbmdlLT5zdGFydE9mZnNldChlYykpOworICAgICAgICAgICAgbGVu
Z3RoID0gcmFuZ2UtPmVuZE9mZnNldChlYyk7CisgICAgICAgIGlmIChub2RlID09IHJhbmdlLT5z
dGFydENvbnRhaW5lcihlYykpIHsKKyAgICAgICAgICAgIHNpemVfdCBzdGFydCA9IHJhbmdlLT5z
dGFydE9mZnNldChlYyk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzICs9IHN0YXJ0OworICAgICAg
ICAgICAgbGVuZ3RoIC09IHN0YXJ0OworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzdHI7
CisgICAgCisgICAgcmV0dXJuIG1ha2VfcGFpcihjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQotCisg
ICAgCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kVUNoYXJSYW5nZShWZWN0b3I8VUNoYXI+JiBy
ZXN1bHQsIGNvbnN0IHBhaXI8Y29uc3QgVUNoYXIqLCBzaXplX3Q+IHJhbmdlKQoreworICAgIHJl
c3VsdC5hcHBlbmQocmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCk7Cit9CisgICAgCiBzdGF0aWMg
U3RyaW5nIHJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2Up
CiB7CiAgICAgaWYgKCFub2RlLT5pc1RleHROb2RlKCkpCkBAIC0yMjcsMTEzICszMTksMTU2IEBA
IHN0YXRpYyBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHIoY29uc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIFN0cmluZyBhZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbnMsIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IEF0b21pY1N0cmluZ0ltcGwqPiYgbmFtZXNwYWNlcykKK3N0YXRpYyB2b2lkIGFwcGVuZE5hbWVz
cGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIG5zLCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNT
dHJpbmdJbXBsKj4mIG5hbWVzcGFjZXMpCiB7CiAgICAgaWYgKG5zLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuICIiOwotICAgIAorICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIC8vIFVz
ZSBlbXB0eUF0b21zJ3MgaW1wbCgpIGZvciBib3RoIG51bGwgYW5kIGVtcHR5IHN0cmluZ3Mgc2lu
Y2UgdGhlIEhhc2hNYXAgY2FuJ3QgaGFuZGxlIDAgYXMgYSBrZXkKICAgICBBdG9taWNTdHJpbmdJ
bXBsKiBwcmUgPSBwcmVmaXguaXNFbXB0eSgpID8gZW1wdHlBdG9tLmltcGwoKSA6IHByZWZpeC5p
bXBsKCk7CiAgICAgQXRvbWljU3RyaW5nSW1wbCogZm91bmROUyA9IG5hbWVzcGFjZXMuZ2V0KHBy
ZSk7CiAgICAgaWYgKGZvdW5kTlMgIT0gbnMuaW1wbCgpKSB7CiAgICAgICAgIG5hbWVzcGFjZXMu
c2V0KHByZSwgbnMuaW1wbCgpKTsKLSAgICAgICAgcmV0dXJuICIgeG1sbnMiICsgKCFwcmVmaXgu
aXNFbXB0eSgpID8gIjoiICsgcHJlZml4IDogIiIpICsgIj1cIiIgKyBlc2NhcGVUZXh0Rm9yTWFy
a3VwKG5zLCB0cnVlKSArICJcIiI7CisgICAgICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgeG1sbnMo
InhtbG5zIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgYXBwZW5kU3Ry
aW5nKHJlc3VsdCwgeG1sbnMpOworICAgICAgICBpZiAoIXByZWZpeC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIGFwcGVuZFN0cmluZyhy
ZXN1bHQsIHByZWZpeCk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQuYXBwZW5kKCc9Jyk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKKyAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFs
dWUocmVzdWx0LCBucyk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKICAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuICIiOwogfQotCi1zdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBzdGFydE1hcmt1
cChjb25zdCBOb2RlICpub2RlLCBjb25zdCBSYW5nZSAqcmFuZ2UsIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlIGFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxzZSwgSGFz
aE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3BhY2VzID0g
MCkKKyAgICAKK3N0YXRpYyB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJl
c3VsdCwgY29uc3QgTm9kZSAqbm9kZSwgY29uc3QgUmFuZ2UgKnJhbmdlLCBFQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2Us
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZ0ltcGwqPiogbmFtZXNwYWNl
cyA9IDApCiB7CiAgICAgYm9vbCBkb2N1bWVudElzSFRNTCA9IG5vZGUtPmRvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCk7CiAgICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgTm9kZTo6VEVYVF9OT0RFOiB7CiAgICAgICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0g
bm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFn
TmFtZShsaXN0aW5nVGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50LT5oYXNU
YWdOYW1lKHNjcmlwdFRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFz
VGFnTmFtZShzdHlsZVRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFz
VGFnTmFtZSh0ZXh0YXJlYVRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+
aGFzVGFnTmFtZSh4bXBUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFs
dWVGb3JSYW5nZShub2RlLCByYW5nZSkuZGVwcmVjYXRlZFN0cmluZygpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSBhbm5vdGF0ZSAmJiAhZW5jbG9z
aW5nTm9kZVdpdGhUYWcoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHNlbGVjdFRhZyk7Ci0gICAg
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG1hcmt1cCA9IGVzY2FwZVRleHRGb3JNYXJrdXAodXNl
UmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KG5vZGUsIHJhbmdlKSA6IHN0cmluZ1ZhbHVlRm9y
UmFuZ2Uobm9kZSwgcmFuZ2UpLCBmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gYW5ub3RhdGUg
PyBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KG1hcmt1cCwgc3RhdGljX2Nhc3Q8
Y29uc3QgVGV4dCo+KG5vZGUpKSA6IG1hcmt1cDsKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFy
ZW50LT5oYXNUYWdOYW1lKHNjcmlwdFRhZykKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50
LT5oYXNUYWdOYW1lKHN0eWxlVGFnKQorICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnQtPmhh
c1RhZ05hbWUodGV4dGFyZWFUYWcpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFz
VGFnTmFtZSh4bXBUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFVDaGFyUmFuZ2Uo
cmVzdWx0LCB1Y2hhclJhbmdlKG5vZGUsIHJhbmdlKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh
YW5ub3RhdGUpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRFc2NhcGVkQ29udGVudChyZXN1bHQs
IHVjaGFyUmFuZ2Uobm9kZSwgcmFuZ2UpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCB1c2VSZW5kZXJlZFRleHQg
PSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHNlbGVjdFRh
Zyk7CisgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG1hcmt1cCA9IGVzY2FwZUNvbnRlbnRU
ZXh0KHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRlcmVkVGV4dChub2RlLCByYW5nZSkgOiBzdHJpbmdW
YWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKSk7CisgICAgICAgICAgICBpZiAoYW5ub3RhdGUpCisg
ICAgICAgICAgICAgICAgbWFya3VwID0gY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1h
dChtYXJrdXAsIHN0YXRpY19jYXN0PGNvbnN0IFRleHQqPihub2RlKSk7CisgICAgICAgICAgICBh
cHBlbmREZXByZWNhdGVkU3RyaW5nKHJlc3VsdCwgbWFya3VwKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKS0+dG9TdHJpbmcoKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBzdGF0
aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSktPnRvU3RyaW5nKCkpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERTogeworICAgICAgICAgICAg
Ly8gRklYTUU6IEkgdGhpbmsgdGhlIGNvbW1lbnQgYmVsb3cgKGFuZCB0aGVyZWZvcmUgdGhpcyBj
b2RlKSBpcyB3cm9uZyBub3cKICAgICAgICAgICAgIC8vIERvY3VtZW50cyBkbyBub3Qgbm9ybWFs
bHkgY29udGFpbiBhIGRvY1R5cGUgYXMgYSBjaGlsZCBub2RlLCBmb3JjZSBpdCB0byBwcmludCBo
ZXJlIGluc3RlYWQuCiAgICAgICAgICAgICBjb25zdCBEb2N1bWVudFR5cGUqIGRvY1R5cGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5vZGUpLT5kb2N0eXBlKCk7CiAgICAgICAgICAg
ICBpZiAoZG9jVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZG9jVHlwZS0+dG9TdHJpbmco
KS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAg
ICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgZG9jVHlwZS0+dG9TdHJpbmcoKSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdN
RU5UX05PREU6Ci0gICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Ci0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRUeXBlKj4obm9kZSktPnRvU3RyaW5nKCkuZGVwcmVj
YXRlZFN0cmluZygpOworICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgc3RhdGljX2Nh
c3Q8Y29uc3QgRG9jdW1lbnRUeXBlKj4obm9kZSktPnRvU3RyaW5nKCkpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlv
bio+KG5vZGUpLT50b1N0cmluZygpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIGFw
cGVuZFN0cmluZyhyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlv
bio+KG5vZGUpLT50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE5vZGU6OkVMRU1FTlRfTk9ERTogewotICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBtYXJr
dXAgPSBEZXByZWNhdGVkQ2hhcignPCcpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPCcp
OwogICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVt
ZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICY9IGlzQmxv
Y2soY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpOwotICAgICAgICAgICAgbWFya3VwICs9IGVsLT5u
b2RlTmFtZVByZXNlcnZpbmdDYXNlKCkuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAg
Ym9vbCBjb252ZXJ0ID0gY29udmVydEJsb2Nrc1RvSW5saW5lcyAmIGlzQmxvY2soY29uc3RfY2Fz
dDxOb2RlKj4obm9kZSkpOworICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgZWwtPm5v
ZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CiAgICAgICAgICAgICBOYW1lZEF0dHJNYXAgKmF0dHJz
ID0gZWwtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJz
LT5sZW5ndGgoKTsKICAgICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNwYWNl
cyAmJiBzaG91bGRBZGROYW1lc3BhY2VFbGVtKGVsKSkKLSAgICAgICAgICAgICAgICBtYXJrdXAg
Kz0gYWRkTmFtZXNwYWNlKGVsLT5wcmVmaXgoKSwgZWwtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNw
YWNlcykuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgICAgIGFwcGVuZE5hbWVzcGFj
ZShyZXN1bHQsIGVsLT5wcmVmaXgoKSwgZWwtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7
CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgKmF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRl
bShpKTsKICAgICAgICAgICAgICAgICAvLyBXZSdsbCBoYW5kbGUgdGhlIHN0eWxlIGF0dHJpYnV0
ZSBzZXBhcmF0ZWx5LCBiZWxvdy4KLSAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IHN0eWxlQXR0ciAmJiBlbC0+aXNIVE1MRWxlbWVudCgpICYmIChhbm5vdGF0ZSB8fCBjb252ZXJ0
QmxvY2tzVG9JbmxpbmVzKSkKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHN0
eWxlQXR0ciAmJiBlbC0+aXNIVE1MRWxlbWVudCgpICYmIChhbm5vdGF0ZSB8fCBjb252ZXJ0KSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICcpOworCiAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SXNIVE1MKQotICAgICAg
ICAgICAgICAgICAgICBtYXJrdXAgKz0gIiAiICsgYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3Vs
dCwgYXR0ci0+bmFtZSgpLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiICIgKyBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1
bHQsIGF0dHItPm5hbWUoKS50b1N0cmluZygpKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJz0nKTsKKwogICAgICAgICAgICAgICAgIGlmIChlbC0+aXNVUkxBdHRyaWJ1dGUoYXR0
cikpCi0gICAgICAgICAgICAgICAgICAgIG1hcmt1cCArPSAiPSIgKyB1cmxBdHRyaWJ1dGVUb1F1
b3RlZFN0cmluZyhhdHRyLT52YWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtYXJrdXAgKz0gIj1cIiIgKyBlc2NhcGVU
ZXh0Rm9yTWFya3VwKGF0dHItPnZhbHVlKCksIHRydWUpICsgIlwiIjsKKyAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUocmVzdWx0LCBhdHRyLT52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnXCInKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUocmVz
dWx0LCBhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
XCInKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50
SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cihhdHRyLCAqbmFt
ZXNwYWNlcykpCi0gICAgICAgICAgICAgICAgICAgIG1hcmt1cCArPSBhZGROYW1lc3BhY2UoYXR0
ci0+cHJlZml4KCksIGF0dHItPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcykuZGVwcmVjYXRl
ZFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmROYW1lc3BhY2UocmVzdWx0LCBh
dHRyLT5wcmVmaXgoKSwgYXR0ci0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGVsLT5pc0hUTUxFbGVtZW50
KCkgJiYgKGFubm90YXRlIHx8IGNvbnZlcnRCbG9ja3NUb0lubGluZXMpKSB7CisgICAgICAgICAg
ICBpZiAoZWwtPmlzSFRNTEVsZW1lbnQoKSAmJiAoYW5ub3RhdGUgfHwgY29udmVydCkpIHsKICAg
ICAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxFbGVtZW50Kj4oZWwp
OwogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5nZXRJbmxpbmVTdHlsZURl
Y2woKS0+Y29weSgpOwogICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0ZSkgewogICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlRnJvbU1h
dGNoZWRSdWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoY29uc3RfY2FzdDxF
bGVtZW50Kj4oZWwpKTsKICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPm1lcmdlKHN0eWxlRnJv
bU1hdGNoZWRSdWxlcy5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChjb252ZXJ0QmxvY2tzVG9JbmxpbmVzKQorICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0
KQogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfRElTUExB
WSwgQ1NTX1ZBTF9JTkxJTkUsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+bGVu
Z3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBtYXJrdXAgKz0gIiBzdHlsZT1cIiIgKyBl
c2NhcGVUZXh0Rm9yTWFya3VwKHN0eWxlLT5jc3NUZXh0KCksIHRydWUpICsgIlwiIjsKKyAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUtPmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0eWxlUHJlZml4KCIgc3R5bGU9XCIiKTsKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgc3R5bGVQcmVmaXgpOworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIHN0eWxlLT5jc3NUZXh0KCkp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcIicpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHNob3Vs
ZFNlbGZDbG9zZShlbCkpIHsKICAgICAgICAgICAgICAgICBpZiAoZWwtPmlzSFRNTEVsZW1lbnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgbWFya3VwICs9ICIgIjsgLy8gWEhUTUwgMS4wIDwtPiBI
VE1MIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICAgICAgbWFya3VwICs9ICIvPiI7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYXJrdXAgKz0gIj4iOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXR1cm4gbWFya3VwOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgJyk7IC8vIFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmlsaXR5LgorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IENEQVRBU2VjdGlvbio+KG5vZGUpLT50b1N0cmluZygpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHN0YXRpY19j
YXN0PGNvbnN0IENEQVRBU2VjdGlvbio+KG5vZGUpLT50b1N0cmluZygpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RFOgogICAgICAgICBjYXNl
IE5vZGU6OkVOVElUWV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9SRUZFUkVOQ0Vf
Tk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgogICAgICAgICBjYXNlIE5v
ZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuICIiOworfQorCitzdGF0
aWMgU3RyaW5nIGdldFN0YXJ0TWFya3VwKGNvbnN0IE5vZGUgKm5vZGUsIGNvbnN0IFJhbmdlICpy
YW5nZSwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgYW5ub3RhdGUsIGJvb2wgY29udmVydEJsb2Nr
c1RvSW5saW5lcyA9IGZhbHNlLCBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJp
bmdJbXBsKj4qIG5hbWVzcGFjZXMgPSAwKQoreworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0Owor
ICAgIGFwcGVuZFN0YXJ0TWFya3VwKHJlc3VsdCwgbm9kZSwgcmFuZ2UsIGFubm90YXRlLCBjb252
ZXJ0QmxvY2tzVG9JbmxpbmVzLCBuYW1lc3BhY2VzKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChyZXN1bHQpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZG9lc0hUTUxGb3JiaWRFbmRUYWco
Y29uc3QgTm9kZSAqbm9kZSkKQEAgLTM2MSwzNSArNDk2LDQ0IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRTZWxmQ2xvc2UoY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIERl
cHJlY2F0ZWRTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGUgKm5vZGUpCitzdGF0aWMgdm9pZCBh
cHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlKQor
eworICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IHNob3VsZFNlbGZDbG9zZShub2Rl
KSB8fCAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSAmJiBkb2VzSFRNTEZvcmJpZEVuZFRhZyhub2Rl
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdC5hcHBlbmQoJzwnKTsKKyAgICByZXN1
bHQuYXBwZW5kKCcvJyk7CisgICAgYXBwZW5kU3RyaW5nKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29u
c3QgRWxlbWVudCo+KG5vZGUpLT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOworICAgIHJlc3Vs
dC5hcHBlbmQoJz4nKTsKK30KKworc3RhdGljIFN0cmluZyBnZXRFbmRNYXJrdXAoY29uc3QgTm9k
ZSAqbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFzaG91bGRTZWxm
Q2xvc2Uobm9kZSkgJiYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCAhZG9lc0hUTUxGb3JiaWRF
bmRUYWcobm9kZSkpKQotICAgICAgICByZXR1cm4gIjwvIiArIHN0YXRpY19jYXN0PGNvbnN0IEVs
ZW1lbnQqPihub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpLmRlcHJlY2F0ZWRTdHJpbmco
KSArICI+IjsKLSAgICByZXR1cm4gIiI7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAg
YXBwZW5kRW5kTWFya3VwKHJlc3VsdCwgbm9kZSk7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQo
cmVzdWx0KTsKIH0KIAotc3RhdGljIERlcHJlY2F0ZWRTdHJpbmcgbWFya3VwKE5vZGUqIHN0YXJ0
Tm9kZSwgYm9vbCBvbmx5SW5jbHVkZUNoaWxkcmVuLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgY29u
c3QgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1wbCo+KiBuYW1lc3Bh
Y2VzID0gMCkKK3N0YXRpYyB2b2lkIGFwcGVuZE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IE5vZGUqIHN0YXJ0Tm9kZSwgYm9vbCBvbmx5SW5jbHVkZUNoaWxkcmVuLCBWZWN0b3I8Tm9kZSo+
KiBub2RlcywgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQXRvbWljU3RyaW5nSW1w
bCo+KiBuYW1lc3BhY2VzID0gMCkKIHsKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBB
dG9taWNTdHJpbmdJbXBsKj4gbmFtZXNwYWNlSGFzaDsKICAgICBpZiAobmFtZXNwYWNlcykKICAg
ICAgICAgbmFtZXNwYWNlSGFzaCA9ICpuYW1lc3BhY2VzOwogICAgIAotICAgIERlcHJlY2F0ZWRT
dHJpbmcgbWUgPSAiIjsKICAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pIHsKICAgICAgICAg
aWYgKG5vZGVzKQogICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChzdGFydE5vZGUpOwotICAgICAg
ICBtZSArPSBzdGFydE1hcmt1cChzdGFydE5vZGUsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSwgZmFsc2UsICZuYW1lc3BhY2VIYXNoKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZFN0
YXJ0TWFya3VwKHJlc3VsdCxzdGFydE5vZGUsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSwgZmFsc2UsICZuYW1lc3BhY2VIYXNoKTsKICAgICB9CiAgICAgLy8gcHJpbnQgY2hpbGRyZW4K
ICAgICBpZiAoIShzdGFydE5vZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgJiYgZG9l
c0hUTUxGb3JiaWRFbmRUYWcoc3RhcnROb2RlKSkpCiAgICAgICAgIGZvciAoTm9kZSogY3VycmVu
dCA9IHN0YXJ0Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIG1lICs9IG1hcmt1cChjdXJyZW50LCBmYWxzZSwg
bm9kZXMsICZuYW1lc3BhY2VIYXNoKTsKKyAgICAgICAgICAgIGFwcGVuZE1hcmt1cChyZXN1bHQs
IGN1cnJlbnQsIGZhbHNlLCBub2RlcywgJm5hbWVzcGFjZUhhc2gpOwogICAgIAogICAgIC8vIFBy
aW50IG15IGVuZGluZyB0YWcKICAgICBpZiAoIW9ubHlJbmNsdWRlQ2hpbGRyZW4pCi0gICAgICAg
IG1lICs9IGVuZE1hcmt1cChzdGFydE5vZGUpOwotICAgIAotICAgIHJldHVybiBtZTsKKyAgICAg
ICAgYXBwZW5kRW5kTWFya3VwKHJlc3VsdCwgc3RhcnROb2RlKTsKIH0KIAogc3RhdGljIHZvaWQg
Y29tcGxldGVVUkxzKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCkKQEAgLTQ2MCwx
MSArNjA0LDM1IEBAIHN0YXRpYyBib29sIGVsZW1lbnRIYXNUZXh0RGVjb3JhdGlvblByb3AKICAg
ICByZXR1cm4gIXByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUuZ2V0KCksIENTU19Q
Uk9QX1RFWFRfREVDT1JBVElPTik7CiB9CiAKK1N0cmluZyBqb2luTWFya3Vwcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiBwcmVNYXJrdXBzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcG9zdE1hcmt1cHMp
Cit7CisgICAgc2l6ZV90IGxlbmd0aCA9IDA7CisKKyAgICBzaXplX3QgcHJlQ291bnQgPSBwcmVN
YXJrdXBzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZUNvdW50OyArK2kp
CisgICAgICAgIGxlbmd0aCArPSBwcmVNYXJrdXBzW2ldLmxlbmd0aCgpOworCisgICAgc2l6ZV90
IHBvc3RDb3VudCA9IHBvc3RNYXJrdXBzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBvc3RDb3VudDsgKytpKQorICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1cHNbaV0ubGVu
Z3RoKCk7CisKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gcHJlQ291bnQ7IGkgPiAwOyAt
LWkpCisgICAgICAgIGFwcGVuZFN0cmluZyhyZXN1bHQsIHByZU1hcmt1cHNbaSAtIDFdKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgIGFwcGVu
ZFN0cmluZyhyZXN1bHQsIHBvc3RNYXJrdXBzW2ldKTsKKworICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7Cit9CisKIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZv
IHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1F
OiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBhbmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90
IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1hcmt1cFN0cmluZygpCi1EZXByZWNhdGVkU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVz
KQorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4q
IG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSwgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzKQogewotICAgIHN0YXRpYyBjb25zdCBEZXByZWNhdGVkU3RyaW5nIGludGVy
Y2hhbmdlTmV3bGluZVN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmcoIjxiciBjbGFzcz1cIiIpICsg
QXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgKyAiXCI+IjsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5n
IGludGVyY2hhbmdlTmV3bGluZVN0cmluZyA9IFN0cmluZygiPGJyIGNsYXNzPVwiIikgKyBBcHBs
ZUludGVyY2hhbmdlTmV3bGluZSArICJcIj4iOwogCiAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+
aXNEZXRhY2hlZCgpKQogICAgICAgICByZXR1cm4gIiI7CkBAIC00OTMsNyArNjYxLDggQEAgRGVw
cmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogCiAgICAgZG9jdW1lbnQtPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgRGVwcmVjYXRlZFN0
cmluZ0xpc3QgbWFya3VwczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtYXJrdXBzOworICAgIFZlY3Rv
cjxTdHJpbmc+IHByZU1hcmt1cHM7CiAgICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+
cGFzdEVuZE5vZGUoKTsKICAgICBOb2RlKiBsYXN0Q2xvc2VkID0gMDsKICAgICBWZWN0b3I8Tm9k
ZSo+IGFuY2VzdG9yc1RvQ2xvc2U7CkBAIC01MzMsNyArNzAyLDcgQEAgRGVwcmVjYXRlZFN0cmlu
ZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAgICAgICAKICAgICAgICAgLy8gQWRkIHRoZSBu
b2RlIHRvIHRoZSBtYXJrdXAuCiAgICAgICAgIGlmIChhZGRNYXJrdXBGb3JOb2RlKSB7Ci0gICAg
ICAgICAgICBtYXJrdXBzLmFwcGVuZChzdGFydE1hcmt1cChuLCB1cGRhdGVkUmFuZ2UuZ2V0KCks
IGFubm90YXRlKSk7CisgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChnZXRTdGFydE1hcmt1cChu
LCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlKSk7CiAgICAgICAgICAgICBpZiAobm9kZXMp
CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChuKTsKICAgICAgICAgfQpAQCAtNTQxLDcg
KzcxMCw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAg
ICAgaWYgKG4tPmZpcnN0Q2hpbGQoKSA9PSAwIHx8IHNraXBEZXNjZW5kYW50cykgewogICAgICAg
ICAgICAgLy8gTm9kZSBoYXMgbm8gY2hpbGRyZW4sIG9yIHdlIGFyZSBza2lwcGluZyBpdCdzIGRl
c2NlbmRhbnRzLCBhZGQgaXRzIGNsb3NlIHRhZyBub3cuCiAgICAgICAgICAgICBpZiAoYWRkTWFy
a3VwRm9yTm9kZSkgewotICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChu
KSk7CisgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKG4pKTsKICAg
ICAgICAgICAgICAgICBsYXN0Q2xvc2VkID0gbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtNTU0LDcgKzcyMyw3IEBAIERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IFJhbmcKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICE9IHBhc3RFbmQgJiYgbmV4
dC0+aXNEZXNjZW5kYW50T2YoYW5jZXN0b3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IGF0IHRoZSBlbmQgb2YgdGhl
IHJhbmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGluZyBvZiBuZXh0IG5vZGUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXJrdXBzLmFwcGVuZChlbmRNYXJrdXAoYW5jZXN0b3IpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGdldEVuZE1hcmt1cChhbmNl
c3RvcikpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9IGFuY2VzdG9yOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3JzVG9DbG9zZS5yZW1vdmVMYXN0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFhbmNlc3RvcnNUb0Nsb3NlLmlzRW1wdHkoKSk7
CkBAIC01NzAsOCArNzM5LDggQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3Qg
UmFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gb3IgYikgYW5jZXN0b3JzIHRoYXQgd2UgbmV2ZXIgZW5jb3VudGVyZWQg
ZHVyaW5nIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBzdGFydGluZyBhdCBzdGFydE5vZGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJl
bnQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1
cChwYXJlbnQsIHVwZGF0ZWRSYW5nZS5nZXQoKSwgYW5ub3RhdGUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChwYXJlbnQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKGdldFN0YXJ0TWFya3VwKHBhcmVudCwgdXBk
YXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFy
a3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKHBhcmVudCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQo
cGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBwYXJlbnQ7CkBA
IC02MzMsMTIgKzgwMiwyMCBAQCBEZXByZWNhdGVkU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBS
YW5nCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CQUNL
R1JPVU5EX0lNQUdFLCAidXJsKCciICsgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZ1bGx5U2VsZWN0
ZWRSb290KS0+Z2V0QXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSArICInKSIpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKCI8ZGl2IHN0eWxlPVwiIiArIGVzY2FwZVRleHRG
b3JNYXJrdXAoc3R5bGUtPmNzc1RleHQoKSwgdHJ1ZSkgKyAiXCI+Iik7Ci0gICAgICAgICAgICAg
ICAgICAgIG1hcmt1cHMuYXBwZW5kKCI8L2Rpdj4iKTsKKyAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPFVDaGFyPiBvcGVuVGFnOworICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgU3Ry
aW5nIGRpdlN0eWxlKCI8ZGl2IHN0eWxlPVwiIik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFN0cmluZyhvcGVuVGFnLCBkaXZTdHlsZSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKG9wZW5UYWcsIHN0eWxlLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgICAg
ICAgICBvcGVuVGFnLmFwcGVuZCgnXCInKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlblRhZy5h
cHBlbmQoJz4nKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlTWFya3Vwcy5hcHBlbmQoU3RyaW5n
OjphZG9wdChvcGVuVGFnKSk7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IFN0
cmluZyBkaXZDbG9zZVRhZygiPC9kaXY+Iik7CisgICAgICAgICAgICAgICAgICAgIG1hcmt1cHMu
YXBwZW5kKGRpdkNsb3NlVGFnKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChhbmNlc3Rv
ciwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSwgY29udmVydEJsb2Nrc1RvSW5saW5lcykp
OwotICAgICAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOwor
ICAgICAgICAgICAgICAgIHByZU1hcmt1cHMuYXBwZW5kKGdldFN0YXJ0TWFya3VwKGFuY2VzdG9y
LCB1cGRhdGVkUmFuZ2UuZ2V0KCksIGFubm90YXRlLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzKSk7
CisgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFya3VwKGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAg
bm9kZXMtPmFwcGVuZChhbmNlc3Rvcik7CkBAIC02NjcsOSArODQ0LDE2IEBAIERlcHJlY2F0ZWRT
dHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmcKICAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVC
bG9ja1Byb3BlcnRpZXMoKTsKIAogICAgICAgICBpZiAoc3R5bGUtPmxlbmd0aCgpID4gMCkgewot
ICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBvcGVuVGFnID0gRGVwcmVjYXRlZFN0cmluZygi
PHNwYW4gY2xhc3M9XCIiKSArIEFwcGxlU3R5bGVTcGFuQ2xhc3MgKyAiXCIgc3R5bGU9XCIiICsg
ZXNjYXBlVGV4dEZvck1hcmt1cChzdHlsZS0+Y3NzVGV4dCgpLCB0cnVlKSArICJcIj4iOwotICAg
ICAgICAgICAgbWFya3Vwcy5wcmVwZW5kKG9wZW5UYWcpOwotICAgICAgICAgICAgbWFya3Vwcy5h
cHBlbmQoIjwvc3Bhbj4iKTsKKyAgICAgICAgICAgIFZlY3RvcjxVQ2hhcj4gb3BlblRhZzsKKyAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyBzcGFuQ2xhc3NTdHlsZSA9IFN0cmluZygiPHNwYW4gY2xh
c3M9XCIiIEFwcGxlU3R5bGVTcGFuQ2xhc3MgIlwiIHN0eWxlPVwiIik7CisgICAgICAgICAgICBh
cHBlbmRTdHJpbmcob3BlblRhZywgc3BhbkNsYXNzU3R5bGUpOworICAgICAgICAgICAgYXBwZW5k
QXR0cmlidXRlVmFsdWUob3BlblRhZywgc3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAgICAgICBv
cGVuVGFnLmFwcGVuZCgnXCInKTsKKyAgICAgICAgICAgIG9wZW5UYWcuYXBwZW5kKCc+Jyk7Cisg
ICAgICAgICAgICBwcmVNYXJrdXBzLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBzcGFuQ2xvc2VUYWco
Ijwvc3Bhbj4iKTsKKyAgICAgICAgICAgIG1hcmt1cHMuYXBwZW5kKHNwYW5DbG9zZVRhZyk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTY4NCw4ICs4NjgsOCBAQCBEZXByZWNhdGVkU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nCiAgICAgaWYgKGxhc3RDbG9zZWQgJiYgYW5ub3RhdGUgJiYg
c2VsZWN0ZWRPbmVPck1vcmVQYXJhZ3JhcGhzKSB7CiAgICAgICAgIGZvciAoTm9kZSAqYW5jZXN0
b3IgPSBsYXN0Q2xvc2VkLT5wYXJlbnROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChpc01haWxCbG9ja3F1b3RlKGFu
Y2VzdG9yKSkgewotICAgICAgICAgICAgICAgIG1hcmt1cHMucHJlcGVuZChzdGFydE1hcmt1cChh
bmNlc3RvciwgdXBkYXRlZFJhbmdlLmdldCgpLCBhbm5vdGF0ZSkpOwotICAgICAgICAgICAgICAg
IG1hcmt1cHMuYXBwZW5kKGVuZE1hcmt1cChhbmNlc3RvcikpOworICAgICAgICAgICAgICAgIHBy
ZU1hcmt1cHMuYXBwZW5kKGdldFN0YXJ0TWFya3VwKGFuY2VzdG9yLCB1cGRhdGVkUmFuZ2UuZ2V0
KCksIGFubm90YXRlKSk7CisgICAgICAgICAgICAgICAgbWFya3Vwcy5hcHBlbmQoZ2V0RW5kTWFy
a3VwKGFuY2VzdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02OTMs
NyArODc3LDcgQEAgRGVwcmVjYXRlZFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZwogICAg
IGlmIChkZWxldGVCdXR0b24pCiAgICAgICAgIGRlbGV0ZUJ1dHRvbi0+ZW5hYmxlKCk7CiAKLSAg
ICByZXR1cm4gbWFya3Vwcy5qb2luKCIiKTsKKyAgICByZXR1cm4gam9pbk1hcmt1cHMocHJlTWFy
a3VwcywgbWFya3Vwcyk7CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJr
dXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCkKQEAgLTcxMCwxMCArODk0LDkgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5v
ZGUsIEVDaGlsZHJlbk9ubHkgaW5jbHVkZUNoaWxkcmVuLAotICAgIFZlY3RvcjxOb2RlKj4qIG5v
ZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBhbm5vdGF0ZSkKK1N0cmluZyBjcmVhdGVNYXJr
dXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxkcmVuT25seSBpbmNsdWRlQ2hpbGRyZW4sIFZlY3Rv
cjxOb2RlKj4qIG5vZGVzKQogewotICAgIEFTU0VSVChhbm5vdGF0ZSA9PSBEb05vdEFubm90YXRl
Rm9ySW50ZXJjaGFuZ2UpOyAvLyBhbm5vdGF0aW9uIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRo
aXMgY29kZSBwYXRoCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CiAKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiAiIjsKQEAgLTczMCwxMiArOTEzLDEyIEBAIERlcHJlY2F0ZWRTdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUKICAgICB9CiAKICAgICBkb2N1bWVudC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBy
ZXN1bHQobWFya3VwKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCBpbmNsdWRlQ2hpbGRyZW4sIG5v
ZGVzKSk7CisgICAgYXBwZW5kTWFya3VwKHJlc3VsdCwgY29uc3RfY2FzdDxOb2RlKj4obm9kZSks
IGluY2x1ZGVDaGlsZHJlbiwgbm9kZXMpOwogCiAgICAgaWYgKGRlbGV0ZUJ1dHRvbikKICAgICAg
ICAgZGVsZXRlQnV0dG9uLT5lbmFibGUoKTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KIAogc3RhdGljIHZvaWQgZmlsbENvbnRhaW5l
ckZyb21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBEZXByZWNhdGVkU3Ry
aW5nJiBzdHJpbmcpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCShyZXZpc2lvbiAyNTgxMCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0
cmluZyYgYmFzZVVSTCk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVG
cmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNvbnN0IFZlY3RvcjxOb2RlKj4mKTsKIAotICAg
IERlcHJlY2F0ZWRTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiwKKyAgICBTdHJpbmcg
Y3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiwKICAgICAgICAgVmVjdG9yPE5vZGUqPiogPSAwLCBF
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgYm9v
bCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcg
Y3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqLCBFQ2hpbGRyZW5Pbmx5ID0gSW5jbHVkZU5vZGUsCi0g
ICAgICAgIFZlY3RvcjxOb2RlKj4qID0gMCwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgPSBEb05v
dEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOworICAgIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3Qg
Tm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRlTm9kZSwgVmVjdG9yPE5vZGUqPiogPSAwKTsK
IAogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNp
b24gMjU4MTApCisrKyBXZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1l
QnJpZGdlICpicmlkZ2UKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZXZlciAiZm9yIGludGVy
Y2hhbmdlIi4gSXMgdGhhdCByaWdodD8gU2VlIHRoZSBuZXh0IG1ldGhvZC4KICAgICBWZWN0b3I8
Tm9kZSo+IG5vZGVMaXN0OwotICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJr
dXAoW25vZGUgX25vZGVdLCBJbmNsdWRlTm9kZSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwKS5nZXRO
U1N0cmluZygpOworICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoW25v
ZGUgX25vZGVdLCBJbmNsdWRlTm9kZSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwKTsKICAgICBpZiAo
bm9kZXMpCiAgICAgICAgICpub2RlcyA9IFtzZWxmIG5vZGVzRnJvbUxpc3Q6Jm5vZGVMaXN0XTsK
IApAQCAtMzU0LDcgKzM1NCw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZUZyYW1lQnJpZGdlICpi
cmlkZ2UKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIu
IElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgcHJldmlvdXMgbWV0aG9kLgogICAgIFZlY3RvcjxOb2Rl
Kj4gbm9kZUxpc3Q7Ci0gICAgTlNTdHJpbmcgKm1hcmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1cChb
cmFuZ2UgX3JhbmdlXSwgbm9kZXMgPyAmbm9kZUxpc3QgOiAwLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlKS5nZXROU1N0cmluZygpOworICAgIE5TU3RyaW5nICptYXJrdXBTdHJpbmcgPSBjcmVhdGVN
YXJrdXAoW3JhbmdlIF9yYW5nZV0sIG5vZGVzID8gJm5vZGVMaXN0IDogMCwgQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSk7CiAgICAgaWYgKG5vZGVzKQogICAgICAgICAqbm9kZXMgPSBbc2VsZiBub2Rl
c0Zyb21MaXN0OiZub2RlTGlzdF07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1OTEwKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDct
MTAtMDIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHRlc3QgdXBkYXRlcyBmb3IgImZp
bGU6Ly8vVm9sdW1lcy9EYXRhL21qcy9Xb3JrL3NyYy9TYWZhcmkvT3BlblNvdXJjZS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zZXJpYWxpemUtYXR0cmlidXRlLnhodG1sIgorICAgICAgICBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMzOQorCisgICAgICAgIFdlIG5vIGxv
bmdlciBlbnRpdHktZXNjYXBlIHRoZSAnPicgY2hhcmFjdGVyIGluIGNvbnRlbnQgb3IgYXR0cmli
dXRlIHZhbHVlcyBzaW5jZSB0aGlzIGlzIHVubmVjZXNzYXJ5LgorICAgICAgICAKKyAgICAgICAg
KiBmYXN0L2RvbS9kb20tcGFyc2Utc2VyaWFsaXplLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2RvbS9zZXJpYWxpemUtYXR0cmlidXRlLnhodG1sOgorICAgICAgICAqIGZhc3QveHNsL3hz
bHQtcHJvY2Vzc29yLWV4cGVjdGVkLnR4dDoKKwogMjAwNy0xMC0wMSAgSnVzdGluIEdhcmNpYSAg
PGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhhcnJpc29u
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlhbGl6ZS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tLXBhcnNlLXNlcmlh
bGl6ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI1ODEwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vZG9tLXBhcnNlLXNlcmlhbGl6ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDQgKzU3LDQgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICAgICAgICB0ZXh0
IHJ1biBhdCAoNTM2LDE1KSB3aWR0aCAwOiAiICIKICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgw
LDMwKSB3aWR0aCAxODQ6ICIgIDxkIGlkPVwiaWQzXCI+VGhyZWU8L2Q+IgogICAgICAgICAgICAg
dGV4dCBydW4gYXQgKDE4NCwzMCkgd2lkdGggMDogIiAiCi0gICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCw0NSkgd2lkdGggNTIwOiAiPGYgaWQ9XCImYW1wOyZsdDsmZ3Q7XCI+Rm91ciZhbXA7Jmx0
OyZndDs8L2Y+PGVtcHR5Lz48ZW1wdHkvPjwvZG9jPiIKKyAgICAgICAgICAgIHRleHQgcnVuIGF0
ICgwLDQ1KSB3aWR0aCA0NzI6ICI8ZiBpZD1cIiZhbXA7Jmx0Oz5cIj5Gb3VyJmFtcDsmbHQ7Pjwv
Zj48ZW1wdHkvPjxlbXB0eS8+PC9kb2M+IgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vc2Vy
aWFsaXplLWF0dHJpYnV0ZS54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zZXJpYWxpemUtYXR0cmlidXRlLnhodG1sCShyZXZpc2lvbiAyNTgxMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL3NlcmlhbGl6ZS1hdHRyaWJ1dGUueGh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTExLDcgKzExLDkgQEAgZnVuY3Rpb24gdGVzdCgpIHsKICAgdHJ5IHsKICAgICBzZXJpYWxpemVk
ID0gKG5ldyBYTUxTZXJpYWxpemVyKCkpLnNlcmlhbGl6ZVRvU3RyaW5nKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0ZXN0RGl2XCInJjw+IikpOwogICAgIGlmIChzZXJpYWxpemVkID09ICI8ZGl2
IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIGlkPVwidGVzdERpdiZxdW90
OycmYW1wOyZsdDsmZ3Q7XCIvPiIgfHwKLSAgICAgICAgc2VyaWFsaXplZCA9PSAiPGRpdiB4bWxu
cz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiBpZD1cInRlc3REaXYmcXVvdDsnJmFt
cDsmbHQ7Jmd0O1wiPjwvZGl2PiIpCisgICAgICAgIHNlcmlhbGl6ZWQgPT0gIjxkaXYgeG1sbnM9
XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgaWQ9XCJ0ZXN0RGl2JnF1b3Q7JyZhbXA7
Jmx0OyZndDtcIj48L2Rpdj4iIHx8CisgICAgICAgIHNlcmlhbGl6ZWQgPT0gIjxkaXYgeG1sbnM9
XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgaWQ9XCJ0ZXN0RGl2JnF1b3Q7JyZhbXA7
Jmx0Oz5cIi8+IiB8fAorICAgICAgICBzZXJpYWxpemVkID09ICI8ZGl2IHhtbG5zPVwiaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbFwiIGlkPVwidGVzdERpdiZxdW90OycmYW1wOyZsdDs+XCI+
PC9kaXY+IikKICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS50ZXh0Q29u
dGVudCA9ICJTVUNDRVNTIjsKICAgICBlbHNlCiAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVzdWx0IikudGV4dENvbnRlbnQgPSAiRkFJTDogIiArIChuZXcgWE1MU2VyaWFsaXplcigp
KS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2Jylb
MV0pOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94c2wveHNsdC1wcm9jZXNzb3ItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveHNsL3hzbHQtcHJvY2Vzc29yLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMjU4MTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hzbC94c2x0
LXByb2Nlc3Nvci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAK
IDAuMSBvcmlnaW5hbCB4bWw6Ci08P3htbC1zdHlsZXNoZWV0IHR5cGU9InRleHQveHNsIiBocmVm
PSJ4c2x0LXRleHQueHNsIj8+PFRFU1Q+U09VUkNFIFhNTDogJmx0OyZsdDsmbHQ7JmFtcDvRgtC1
0YHRgiZhbXA7Jmd0OyZndDsmZ3Q7PC9URVNUPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0
L3hzbCIgaHJlZj0ieHNsdC10ZXh0LnhzbCI/PjxURVNUPlNPVVJDRSBYTUw6ICZsdDsmbHQ7Jmx0
OyZhbXA70YLQtdGB0YImYW1wOz4+PjwvVEVTVD4KIDAuMiB4c2wxOgogPHhzbDpzdHlsZXNoZWV0
IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIiB2ZXJzaW9u
PSIxLjAiPgogCiA8eHNsOm91dHB1dCBtZXRob2Q9InRleHQiIGVuY29kaW5nPSJLT0k4LVIiLz4K
LTx4c2w6dGVtcGxhdGUgbWF0Y2g9IlRFU1QiPkNIQVJBQ1RFUlMgSU4gWFNMVDogJmx0OyZsdDsm
bHQ7JmFtcDvRgtC10YHRgiZhbXA7Jmd0OyZndDsmZ3Q7Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJU
RVNUIj5DSEFSQUNURVJTIElOIFhTTFQ6ICZsdDsmbHQ7Jmx0OyZhbXA70YLQtdGB0YImYW1wOz4+
PgogPHhzbDphcHBseS10ZW1wbGF0ZXMvPjx4c2w6dGV4dD4KIDwveHNsOnRleHQ+PC94c2w6dGVt
cGxhdGU+CiAKQEAgLTM3LDE0ICszNywxNCBAQAogCiAxLjEgSW1wb3J0IHR3byBkaWZmZXJlbnQg
c3R5bGVzaGVldHM6CiA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+
PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9VVRGLTgiPjwvaGVhZD48Ym9keT4KLSAgICAgICAgICAgICAgQ0hBUkFDVEVSUyBJ
TiBYU0xUOiDDqcOpw6nDqcOpw6nDqcOpw6nDqcOpIDxicj48YnI+U09VUkNFIFhNTDogJmx0OyZs
dDsmbHQ7JmFtcDvRgtC10YHRgiZhbXA7Jmd0OyZndDsmZ3Q7CisgICAgICAgICAgICAgIENIQVJB
Q1RFUlMgSU4gWFNMVDogw6nDqcOpw6nDqcOpw6nDqcOpw6nDqSA8YnI+PGJyPlNPVVJDRSBYTUw6
ICZsdDsmbHQ7Jmx0OyZhbXA70YLQtdGB0YImYW1wOz4+PgogPC9ib2R5PjwvaHRtbD4KIDEuMiBJ
bXBvcnQgc2FtZSBzdHlsZXNoZWV0IHR3aWNlOgogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9X
M0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1s
MS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIj4KIDxoZWFkPjx0aXRsZT48L3RpdGxlPjwvaGVhZD4KIDxib2R5PgotPHByZT5D
SEFSQUNURVJTIElOIFhTTFQ6ICZsdDsmbHQ7Jmx0OyZhbXA70YLQtdGB0YImYW1wOyZndDsmZ3Q7
Jmd0OwotU09VUkNFIFhNTDogJmx0OyZsdDsmbHQ7JmFtcDvRgtC10YHRgiZhbXA7Jmd0OyZndDsm
Z3Q7Cis8cHJlPkNIQVJBQ1RFUlMgSU4gWFNMVDogJmx0OyZsdDsmbHQ7JmFtcDvRgtC10YHRgiZh
bXA7Pj4+CitTT1VSQ0UgWE1MOiAmbHQ7Jmx0OyZsdDsmYW1wO9GC0LXRgdGCJmFtcDs+Pj4KIDwv
cHJlPgogPC9ib2R5PgogPC9odG1sPgo=
</data>
<flag name="review"
          id="6954"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>