<?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>5974</bug_id>
          
          <creation_ts>2005-12-06 04:20:40 -0800</creation_ts>
          <short_desc>&lt;foreignObject&gt; is unimplemented</short_desc>
          <delta_ts>2006-01-15 00:23:48 -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>SVG</component>
          <version>420+</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>25623</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-06 04:20:40 -0800</bug_when>
    <thetext>&lt;foreignObject&gt; is unimplemented

This would be trivial to implement (given our already working CDF support), I just haven&apos;t found the 
time.

To fix this, one would have to do the following:

1.  Implement a simple SVGForeignObjectElementImpl which returns a standard RenderBlock as its 
renderer.
2.  Find all the places in the code where SVGNames::foreignObjectTag has been commented out, and 
add those back.
3.  One may also need to exten the standard RenderBlock just a bit in order to have it support applying 
arbitrary filters or other svg specific properties (if those are required by the spec, you&apos;ll have to check).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27977</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-08 02:16:44 -0800</bug_when>
    <thetext>This should be no harder than &lt;text&gt; which maciej just landed. ( http://bugzilla.opendarwin.org/
show_bug.cgi?id=4883 )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28354</commentid>
    <comment_count>2</comment_count>
      <attachid>5641</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-13 03:52:40 -0800</bug_when>
    <thetext>Created attachment 5641
Implements foreignObject (and makes a couple other fixes to related code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28355</commentid>
    <comment_count>3</comment_count>
      <attachid>5641</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-13 03:53:29 -0800</bug_when>
    <thetext>Comment on attachment 5641
Implements foreignObject (and makes a couple other fixes to related code)

This is still woefully in need of some test cases.  But the patch works and
thus can stand for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28359</commentid>
    <comment_count>4</comment_count>
      <attachid>5641</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-13 07:44:23 -0800</bug_when>
    <thetext>Comment on attachment 5641
Implements foreignObject (and makes a couple other fixes to related code)

Do lines like this one:

+    totalTransform.invert().map((double)_x, (double)_y, &amp;localX, &amp;localY);

really need type casts?

Looks good, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28471</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-15 00:23:48 -0800</bug_when>
    <thetext>Landed w/ a bunch of test cases.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5641</attachid>
            <date>2006-01-13 03:52:40 -0800</date>
            <delta_ts>2006-01-13 07:44:23 -0800</delta_ts>
            <desc>Implements foreignObject (and makes a couple other fixes to related code)</desc>
            <filename>foreign.patch</filename>
            <type>text/plain</type>
            <size>26828</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaAkocmV2aXNpb24gMTIwNjMpCisrKyBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUVJlY3RGIHJlbGF0aXZlQkJveChib29sIGluY2x1ZGVT
dHJva2UgPSB0cnVlKSBjb25zdCB7IHJldHVybiBRUmVjdEYoKTsgfQogICAgIC8vIFdlIG1heSBl
dmVudHVhbGx5IHdhbnQgdG8gbWFrZSB0aGVzZSBub24tdmlydHVhbAogICAgIHZpcnR1YWwgUU1h
dHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIFFNYXRyaXgoMSwgMCwgMCwgMSwg
eFBvcygpLCB5UG9zKCkpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldExvY2FsVHJhbnNmb3JtKGNv
bnN0IFFNYXRyaXgmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYWxUcmFuc2Zvcm0oY29u
c3QgUU1hdHJpeCYpIHsgYXNzZXJ0KGZhbHNlKTsgfQogICAgIHZpcnR1YWwgUU1hdHJpeCBhYnNv
bHV0ZVRyYW5zZm9ybSgpIGNvbnN0OwogI2VuZGlmCiAgICAgCkluZGV4OiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjA2MykKKysrIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjkzLDYgKzY5MywxMCBAQAogCQlBODE4NUY0
NjA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb25JbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjM2MDk3NjU3NjUwMDU4
MjZEOSAvKiBET01JbXBsZW1lbnRhdGlvbkltcGwuY3BwICovOyB9OwogCQlBODE4NUY0NzA5NzY1
NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODVGMzcwOTc2NTc2NTAwNTgyNkQ5IC8q
IERvY3VtZW50RnJhZ21lbnRJbXBsLmNwcCAqLzsgfTsKIAkJQTgxODVGNDgwOTc2NTc2NjAwNTgy
NkQ5IC8qIERvY3VtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgxODVGMzgwOTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50SW1wbC5oICov
OyB9OworCQlBODE4NjZEQzA5NzY4MzQxMDA1ODI2RDkgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODY2REEw
OTc2ODM0MTAwNTgyNkQ5IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuaCAqLzsgfTsKKwkJQTgxODY2
REQwOTc2ODM0MTAwNTgyNkQ5IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODY2REIwOTc2ODM0MTAwNTgy
NkQ5IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovOyB9OworCQlBODE4NjZFMzA5NzY4MzZF
MDA1ODI2RDkgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg2NkUxMDk3NjgzNkUwMDU4MjZE
OSAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuY3BwICovOyB9OworCQlBODE4NjZFNDA5
NzY4MzZFMDA1ODI2RDkgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NjZFMjA5NzY4MzZFMDA1
ODI2RDkgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsLmggKi87IH07CiAJCUE4MkI4Q0FD
MDk3MTJDMkMwMDI3RTNERSAvKiBSZW5kZXJUZXh0RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MkI4Q0E2MDk3MTJDMkMwMDI3RTNERSAv
KiBSZW5kZXJUZXh0RnJhZ21lbnQuaCAqLzsgfTsKIAkJQTgyQjhDQUQwOTcxMkMyQzAwMjdFM0RF
IC8qIFJlbmRlclRleHRGcmFnbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODJCOENBNzA5NzEyQzJDMDAyN0UzREUgLyogUmVuZGVyVGV4dEZy
YWdtZW50LmNwcCAqLzsgfTsKIAkJQTgyQjhDQUUwOTcxMkMyQzAwMjdFM0RFIC8qIFJlbmRlclRl
eHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MkI4
Q0E4MDk3MTJDMkMwMDI3RTNERSAvKiBSZW5kZXJUZXh0LmggKi87IH07CkBAIC0yMDU2LDYgKzIw
NjAsMTAgQEAKIAkJQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9u
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NSW1wbGVt
ZW50YXRpb25JbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODVGMzcw
OTc2NTc2NTAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21lbnRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudEZyYWdtZW50SW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTg1RjM4MDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1
bWVudEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50SW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODE4NjZEQTA5NzY4MzQxMDA1ODI2
RDkgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyRm9yZWlnbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBODE4NjZEQjA5NzY4MzQxMDA1ODI2RDkgLyogUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRm9yZWlnbk9iamVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MTg2NkUxMDk3NjgzNkUwMDU4MjZE
OSAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MTg2NkUyMDk3NjgzNkUwMDU4MjZEOSAvKiBTVkdG
b3JlaWduT2JqZWN0RWxlbWVudEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODIzMzZCMTA5NEMyM0JFMDA4NUEyOTYgLyogRGF0YVJlZi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFSZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4MkI4
Q0E2MDk3MTJDMkMwMDI3RTNERSAvKiBSZW5kZXJUZXh0RnJhZ21lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRGcmFnbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODJCOENBNzA5NzEyQzJDMDAyN0UzREUgLyogUmVuZGVyVGV4dEZy
YWdtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJU
ZXh0RnJhZ21lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM0OSw2ICsz
MzU3LDggQEAKIAkJCQlBOEMwRjg2QTA4OTcwMUYzMDBCQTUxMTQgLyogU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzSW1wbC5oICovLAogCQkJCUE4QzBGODZCMDg5NzAxRjMwMEJB
NTExNCAvKiBTVkdGaXRUb1ZpZXdCb3hJbXBsLmNwcCAqLywKIAkJCQlBOEMwRjg2QzA4OTcwMUYz
MDBCQTUxMTQgLyogU1ZHRml0VG9WaWV3Qm94SW1wbC5oICovLAorCQkJCUE4MTg2NkUxMDk3Njgz
NkUwMDU4MjZEOSAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuY3BwICovLAorCQkJCUE4
MTg2NkUyMDk3NjgzNkUwMDU4MjZEOSAvKiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuaCAq
LywKIAkJCQlBOEMwRjg2RDA4OTcwMUYzMDBCQTUxMTQgLyogU1ZHR0VsZW1lbnRJbXBsLmNwcCAq
LywKIAkJCQlBOEMwRjg2RTA4OTcwMUYzMDBCQTUxMTQgLyogU1ZHR0VsZW1lbnRJbXBsLmggKi8s
CiAJCQkJQThDMEY4NkYwODk3MDFGMzAwQkE1MTE0IC8qIFNWR0dyYWRpZW50RWxlbWVudEltcGwu
Y3BwICovLApAQCAtMzQ5Miw2ICszNTAyLDggQEAKIAkJCQk2NTc0M0I1MTA5NzA3NkY4MDAxRTdD
RUYgLyogUmVuZGVyU1ZHVGV4dC5oICovLAogCQkJCUZBRTA0MTg5MDk3NTk2OTQwMDA1NDBCRSAv
KiBSZW5kZXJTVkdJbWFnZS5oICovLAogCQkJCUZBRTA0MThBMDk3NTk2OTQwMDA1NDBCRSAvKiBS
ZW5kZXJTVkdJbWFnZS5jcHAgKi8sCisJCQkJQTgxODY2REEwOTc2ODM0MTAwNTgyNkQ5IC8qIFJl
bmRlckZvcmVpZ25PYmplY3QuaCAqLywKKwkJCQlBODE4NjZEQjA5NzY4MzQxMDA1ODI2RDkgLyog
UmVuZGVyRm9yZWlnbk9iamVjdC5jcHAgKi8sCiAJCQkJQThDMEZCNTMwODk3MDFGNzAwQkE1MTE0
IC8qIGRldmljZSAqLywKIAkJCQlBOEMwRkI3QTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0Nv
bnRhaW5lci5jcHAgKi8sCiAJCQkJQThDMEZCN0IwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXND
b250YWluZXIuaCAqLywKQEAgLTQ5MDQsNiArNDkxNiw4IEBACiAJCQkJQTgxODVGM0IwOTc2NTc2
NjAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTgxODVGM0QwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50RnJhZ21lbnRJbXBsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODE4NUY0MDA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRJbXBsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBODE4NjZEQzA5NzY4MzQxMDA1ODI2RDkgLyogUmVuZGVyRm9y
ZWlnbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgxODY2RTQwOTc2ODM2RTAwNTgyNkQ5
IC8qIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC02Nzcy
LDYgKzY3ODYsOCBAQAogCQkJCUE4MTg1RjNDMDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxODVGM0UwOTc2NTc2NjAwNTgyNkQ5IC8qIERP
TUltcGxlbWVudGF0aW9uSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODE4NUYzRjA5NzY1
NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTgxODY2REQwOTc2ODM0MTAwNTgyNkQ5IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTgxODY2RTMwOTc2ODM2RTAwNTgyNkQ5IC8qIFNWR0ZvcmVpZ25P
YmplY3RFbGVtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtjYW52YXMvUmVuZGVy
U1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCShy
ZXZpc2lvbiAxMjA2NSkKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OSwxNyArNTksMTkgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJ
bmZvJiBwYQogCiAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSBRUGFpbnRl
cjo6cmVuZGVyaW5nRGV2aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7CiAgICAgY29udGV4dC0+Y29u
Y2F0Q1RNKFFNYXRyaXgoKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOworICAgIGNvbnRl
eHQtPmNvbmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKICAgICB0cmFuc2xhdGVGb3JBdHRyaWJ1
dGVzKCk7CiAgICAgCiAgICAgUVJlY3RGIGJvdW5kaW5nQm94KDAsIDAsIHdpZHRoKCksIGhlaWdo
dCgpKTsKKyAgICBjb25zdCBLU1ZHOjpTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUgPSBzdHlsZSgp
LT5zdmdTdHlsZSgpOwogICAgICAgICAgICAgCi0gICAgaWYgKEtDYW52YXNDbGlwcGVyICpjbGlw
cGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2xp
cFBhdGgoKS5taWQoMSkpKQorICAgIGlmIChLQ2FudmFzQ2xpcHBlciAqY2xpcHBlciA9IGdldENs
aXBwZXJCeUlkKGRvY3VtZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0aCgpLm1pZCgxKSkpCiAgICAg
ICAgIGNsaXBwZXItPmFwcGx5Q2xpcChib3VuZGluZ0JveCk7CiAKLSAgICBpZiAoS0NhbnZhc01h
c2tlciAqbWFza2VyID0gZ2V0TWFza2VyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdTdHls
ZSgpLT5tYXNrRWxlbWVudCgpLm1pZCgxKSkpCisgICAgaWYgKEtDYW52YXNNYXNrZXIgKm1hc2tl
ciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkubWlk
KDEpKSkKICAgICAgICAgbWFza2VyLT5hcHBseU1hc2soYm91bmRpbmdCb3gpOwogCi0gICAgS0Nh
bnZhc0ZpbHRlciAqZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5z
dmdTdHlsZSgpLT5maWx0ZXIoKS5taWQoMSkpOworICAgIEtDYW52YXNGaWx0ZXIgKmZpbHRlciA9
IGdldEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmZpbHRlcigpLm1pZCgxKSk7CiAg
ICAgaWYgKGZpbHRlcikKICAgICAgICAgZmlsdGVyLT5wcmVwYXJlRmlsdGVyKGJvdW5kaW5nQm94
KTsKICAgICAKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTIwNjMpCisrKyBrY2FudmFzL1Jl
bmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyNCArMzMsMjAgQEAgUmVuZGVy
U1ZHVGV4dDo6UmVuZGVyU1ZHVGV4dChLU1ZHOjpTVkdUZQogewogfQogCi12b2lkIFJlbmRlclNW
R1RleHQ6OnRyYW5zbGF0ZVRvcFRvQmFzZWxpbmUoKQorUU1hdHJpeCBSZW5kZXJTVkdUZXh0Ojp0
cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUoKQogewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4dCgp
OwotCiAgICAgaW50IG9mZnNldCA9IGJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgdHJ1ZSk7Ci0gICAg
Y29udGV4dC0+Y29uY2F0Q1RNKFFNYXRyaXgoKS50cmFuc2xhdGUoMCwgLW9mZnNldCkpOworICAg
IHJldHVybiBRTWF0cml4KCkudHJhbnNsYXRlKDAsIC1vZmZzZXQpOwogfQogCi12b2lkIFJlbmRl
clNWR1RleHQ6OnRyYW5zbGF0ZUZvckF0dHJpYnV0ZXMoKQorUU1hdHJpeCBSZW5kZXJTVkdUZXh0
Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQogewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0ICpjb250ZXh0ID0gUVBhaW50ZXI6OnJlbmRlcmluZ0RldmljZSgpLT5jdXJyZW50Q29udGV4
dCgpOwotCiAgICAgS1NWRzo6U1ZHVGV4dEVsZW1lbnRJbXBsICp0ZXh0ID0gc3RhdGljX2Nhc3Q8
S1NWRzo6U1ZHVGV4dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICBmbG9hdCB4T2Zm
c2V0ID0gdGV4dC0+eCgpLT5iYXNlVmFsKCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmJhc2VW
YWwoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CiAgICAgZmxvYXQgeU9mZnNldCA9IHRleHQt
PnkoKS0+YmFzZVZhbCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgpLT5iYXNlVmFsKCktPmdldEZp
cnN0KCktPnZhbHVlKCkgOiAwOwogCi0gICAgY29udGV4dC0+Y29uY2F0Q1RNKFFNYXRyaXgoKS50
cmFuc2xhdGUoeE9mZnNldCwgeU9mZnNldCkpOworICAgIHJldHVybiBRTWF0cml4KCkudHJhbnNs
YXRlKHhPZmZzZXQsIHlPZmZzZXQpOwogfQogCiB2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCkBAIC02MiwxMCAr
NTgsMzggQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaQogCiAgICAg
S1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2
aWNlKCktPmN1cnJlbnRDb250ZXh0KCk7CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKFFNYXRyaXgo
KS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwotICAgIHRyYW5zbGF0ZUZvckF0dHJpYnV0
ZXMoKTsKLSAgICB0cmFuc2xhdGVUb3BUb0Jhc2VsaW5lKCk7CisgICAgY29udGV4dC0+Y29uY2F0
Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOworICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlv
bkZvckF0dHJpYnV0ZXMoKSk7CisgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zbGF0aW9uVG9w
VG9CYXNlbGluZSgpKTsKICAgICAKKyAgICBRUmVjdEYgYm91bmRpbmdCb3goMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0KCkpOworICAgIGNvbnN0IEtTVkc6OlNWR1JlbmRlclN0eWxlICpzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7CisgICAgICAgICAgICAKKyAgICBpZiAoS0NhbnZhc0NsaXBw
ZXIgKmNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+Y2xpcFBh
dGgoKS5taWQoMSkpKQorICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAoYm91bmRpbmdCb3gpOwor
CisgICAgaWYgKEtDYW52YXNNYXNrZXIgKm1hc2tlciA9IGdldE1hc2tlckJ5SWQoZG9jdW1lbnQo
KSwgc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkubWlkKDEpKSkKKyAgICAgICAgbWFza2VyLT5hcHBs
eU1hc2soYm91bmRpbmdCb3gpOworCisgICAgS0NhbnZhc0ZpbHRlciAqZmlsdGVyID0gZ2V0Rmls
dGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+ZmlsdGVyKCkubWlkKDEpKTsKKyAgICBpZiAo
ZmlsdGVyKQorICAgICAgICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOworICAg
ICAgICAKICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCAwLCAwKTsKKyAgICAKKyAg
ICBpZiAoZmlsdGVyKQorICAgICAgICBmaWx0ZXItPmFwcGx5RmlsdGVyKGJvdW5kaW5nQm94KTsK
IAogICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7CiB9CisKK2Jvb2wgUmVuZGVyU1ZHVGV4dDo6
bm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQg
X3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgUU1hdHJpeCB0b3RhbFRy
YW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgdG90YWxUcmFuc2Zvcm0gKj0gbG9j
YWxUcmFuc2Zvcm0oKTsKKyAgICB0b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvbkZvckF0dHJp
YnV0ZXMoKTsKKyAgICB0b3RhbFRyYW5zZm9ybSAqPSB0cmFuc2xhdGlvblRvcFRvQmFzZWxpbmUo
KTsKKyAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CisgICAgdG90YWxUcmFuc2Zvcm0uaW52ZXJ0
KCkubWFwKChkb3VibGUpX3gsIChkb3VibGUpX3ksICZsb2NhbFgsICZsb2NhbFkpOworICAgIHJl
dHVybiBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoaW5mbywgKGludClsb2NhbFgsIChpbnQpbG9j
YWxZLCBfdHgsIF90eSwgaGl0VGVzdEFjdGlvbik7Cit9CkluZGV4OiBrY2FudmFzL1JlbmRlclNW
R0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lv
biAxMjA2MykKKysrIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOSArMzIsMTMgQEAgbmFtZXNwYWNlIEtTVkcKICAgICAgICAgUmVuZGVyU1ZHSW1hZ2UoU1ZH
SW1hZ2VFbGVtZW50SW1wbCAqaW1wbCk7CiAgICAgICAgIHZpcnR1YWwgflJlbmRlclNWR0ltYWdl
KCk7CiAgICAgICAgIAorICAgICAgICB2aXJ0dWFsIFFNYXRyaXggbG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9j
YWxUcmFuc2Zvcm0oY29uc3QgUU1hdHJpeCYgdHJhbnNmb3JtKSB7IG1fdHJhbnNmb3JtID0gdHJh
bnNmb3JtOyB9CisgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCB0cmFuc2xhdGVGb3JBdHRyaWJ1dGVzKCk7CisgICAgICAgIFFNYXRyaXggbV90
cmFuc2Zvcm07CiAgICAgfTsKIH07CiAKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCShyZXZpc2lvbiAxMjA2MykKKysr
IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTcg
QEAgcHVibGljOgogICAgIFJlbmRlclNWR1RleHQoS1NWRzo6U1ZHVGV4dEVsZW1lbnRJbXBsICpu
b2RlKTsKIAogICAgIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHVGV4dCI7IH0KLSAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
cGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBh
cmVudFgsIGludCBwYXJlbnRZKTsKKyAgICAKKyAgICB2aXJ0dWFsIFFNYXRyaXggbG9jYWxUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRMb2NhbFRyYW5zZm9ybShjb25zdCBRTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0g
PSB0cmFuc2Zvcm07IH0KKyAgICAKKyAgICBib29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50
IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24pOwogCiAgcHJpdmF0
ZToKLSAgICB2b2lkIHRyYW5zbGF0ZVRvcFRvQmFzZWxpbmUoKTsKLSAgICB2b2lkIHRyYW5zbGF0
ZUZvckF0dHJpYnV0ZXMoKTsKKyAgICBRTWF0cml4IHRyYW5zbGF0aW9uVG9wVG9CYXNlbGluZSgp
OworICAgIFFNYXRyaXggdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CisgICAgUU1hdHJpeCBt
X3RyYW5zZm9ybTsKIH07CiAKICNlbmRpZgpJbmRleDoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShy
ZXZpc2lvbiAwKQorKysga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckZvcmVpZ25PYmplY3QuaCIK
KyNpbmNsdWRlICJTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJTVkdB
bmltYXRlZExlbmd0aEltcGwuaCIKKworI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZS5oIgorI2lt
cG9ydCAiS0NhbnZhc01hdHJpeC5oIgorCitSZW5kZXJGb3JlaWduT2JqZWN0OjpSZW5kZXJGb3Jl
aWduT2JqZWN0KEtTVkc6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbCAqbm9kZSkgCisgICAg
OiBSZW5kZXJCbG9jayhub2RlKQoreworfQorCitRTWF0cml4IFJlbmRlckZvcmVpZ25PYmplY3Q6
OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpCit7CisgICAgS1NWRzo6U1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnRJbXBsICpmb3JlaWduID0gc3RhdGljX2Nhc3Q8S1NWRzo6U1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CisgICAgcmV0dXJuIFFNYXRyaXgoKS50cmFuc2xh
dGUoZm9yZWlnbi0+eCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIGZvcmVpZ24tPnkoKS0+YmFzZVZh
bCgpLT52YWx1ZSgpKTsKK30KKwordm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQoreworICAgIGlmIChw
YWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBL
UmVuZGVyaW5nRGV2aWNlICpkZXZpY2UgPSBRUGFpbnRlcjo6cmVuZGVyaW5nRGV2aWNlKCk7Cisg
ICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250
ZXh0KCk7CisgICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7CisgICAgaWYgKCFjb250
ZXh0KSB7CisgICAgICAgIC8vIE9ubHkgbmVlZCB0byBzZXR1cCBmb3IgS0NhbnZhcyByZW5kZXJp
bmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgorICAgICAgICBjb250ZXh0ID0gcGFp
bnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKKyAgICAgICAgZGV2aWNl
LT5wdXNoQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7
CisgICAgfSBlbHNlCisgICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisKKyAgICBjb250ZXh0
LT5jb25jYXRDVE0oUU1hdHJpeCgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7CisgICAg
Y29udGV4dC0+Y29uY2F0Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOworICAgIGNvbnRleHQtPmNvbmNh
dENUTSh0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKSk7CisgICAgCisgICAgUmVuZGVyQmxvY2s6
OnBhaW50KHBhaW50SW5mbywgMCwgMCk7CisKKyAgICBpZiAoc2hvdWxkUG9wQ29udGV4dCkgewor
ICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKKyAgICAgICAgZGVsZXRlIGNvbnRleHQ7Cisg
ICAgfSBlbHNlCisgICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyRm9yZWlnbk9iamVjdDo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIGluZm8sIGludCBfeCwgaW50
IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7Cisg
ICAgUU1hdHJpeCB0b3RhbFRyYW5zZm9ybSA9IGFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgdG90
YWxUcmFuc2Zvcm0gKj0gdHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCk7CisgICAgZG91YmxlIGxv
Y2FsWCwgbG9jYWxZOworICAgIHRvdGFsVHJhbnNmb3JtLmludmVydCgpLm1hcCgoZG91YmxlKV94
LCAoZG91YmxlKV95LCAmbG9jYWxYLCAmbG9jYWxZKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6
Om5vZGVBdFBvaW50KGluZm8sIChpbnQpbG9jYWxYLCAoaW50KWxvY2FsWSwgX3R4LCBfdHksIGhp
dFRlc3RBY3Rpb24pOworfQpJbmRleDoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmgJKHJldmlzaW9uIDApCisr
KyBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJGb3JlaWduT2JqZWN0X0gKKyNkZWZpbmUgUmVuZGVyRm9yZWlnbk9iamVjdF9ICisKKyNpbmNs
dWRlICJraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgiCisKK25hbWVzcGFjZSBLU1ZHIHsK
KyAgICBjbGFzcyBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGw7Cit9CisKK2NsYXNzIFJlbmRl
ckZvcmVpZ25PYmplY3QgOiBwdWJsaWMga2h0bWw6OlJlbmRlckJsb2NrCit7CitwdWJsaWM6Cisg
ICAgUmVuZGVyRm9yZWlnbk9iamVjdChLU1ZHOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwg
Km5vZGUpOworICAgIAorICAgIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVy
biAiUmVuZGVyRm9yZWlnbk9iamVjdCI7IH0KKyAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIAorICAgIHZpcnR1YWwgUU1h
dHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldExvY2FsVHJhbnNmb3JtKGNvbnN0IFFNYXRyaXgmIHRyYW5zZm9ybSkg
eyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQorICAgIAorICAgIGJvb2wgbm9kZUF0UG9pbnQo
Tm9kZUluZm8mIGluZm8sIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pOworCisgcHJpdmF0ZToKKyAgICBRTWF0cml4IHRyYW5zbGF0
aW9uRm9yQXR0cmlidXRlcygpOworICAgIFFNYXRyaXggbV90cmFuc2Zvcm07Cit9OworCisjZW5k
aWYKSW5kZXg6IGtzdmcyL3N2Zy9zdmd0YWdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9z
dmd0YWdzLmluCShyZXZpc2lvbiAxMjA2MykKKysrIGtzdmcyL3N2Zy9zdmd0YWdzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIGZpbHRlcgogI2ZvbnRfZmFjZV9uYW1lCiAjZm9u
dF9mYWNlX3NyYwogI2ZvbnRfZmFjZV91cmkKLSNmb3JlaWduT2JqZWN0Citmb3JlaWduT2JqZWN0
CiBnCiAjZ2x5cGgKICNnbHlwaFJlZgpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudEltcGwuaAkocmV2aXNpb24gMCkKKysrIGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudEltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKworICAgIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgcHJvamVjdAorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorKi8KKworI2lmbmRlZiBLU1ZHX1NWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50SW1wbF9ICisjZGVmaW5lIEtTVkdfU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsX0gKKwor
I2luY2x1ZGUgIlNWR1Rlc3RzSW1wbC5oIgorI2luY2x1ZGUgIlNWR0xhbmdTcGFjZUltcGwuaCIK
KyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2VJbXBsLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEltcGwuaCIKKworbmFtZXNwYWNlIEtTVkcKK3sKKyAgICBjbGFzcyBTVkdBbmltYXRl
ZExlbmd0aEltcGw7CisgICAgY2xhc3MgU1ZHRG9jdW1lbnRJbXBsOworCisgICAgY2xhc3MgU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsIDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50SW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rl
c3RzSW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZUltcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkSW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZUltcGwKKyAgICB7CisgICAgcHVibGljOgorICAgICAg
ICBTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwoY29uc3QgS0RPTTo6UXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgS0RPTTo6RG9jdW1lbnRJbXBsICpkb2MpOworICAgICAgICB2aXJ0dWFsIH5TVkdG
b3JlaWduT2JqZWN0RWxlbWVudEltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHNJbXBsOjppc1ZhbGlkKCk7IH0KKwor
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aEltcGwgKngoKSBjb25zdDsKKyAgICAgICAgU1ZHQW5p
bWF0ZWRMZW5ndGhJbXBsICp5KCkgY29uc3Q7CisKKyAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGhJ
bXBsICp3aWR0aCgpIGNvbnN0OworICAgICAgICBTVkdBbmltYXRlZExlbmd0aEltcGwgKmhlaWdo
dCgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShL
RE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoRE9NOjpOb2RlSW1wbCAqY2hp
bGQpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwga2h0bWw6OlJlbmRlclN0eWxlICpzdHlsZSk7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aElt
cGw+IG1feDsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGhJbXBsPiBt
X3k7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoSW1wbD4gbV93aWR0
aDsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGhJbXBsPiBtX2hlaWdo
dDsKKyAgICB9OworfTsKKworI2VuZGlmCisKKy8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdJbWFnZUVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
SW1hZ2VFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMDYzKQorKysga3N2ZzIvc3ZnL1NWR0lt
YWdlRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAga2h0
bWw6OlJlbmRlck9iamVjdCAqU1ZHSW1hZ2VFbGVtZW50SW1wbAogdm9pZCBTVkdJbWFnZUVsZW1l
bnRJbXBsOjphdHRhY2goKQogewogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50SW1w
bDo6YXR0YWNoKCk7Ci0gICAgaWYgKGtodG1sOjpSZW5kZXJJbWFnZSogaW1hZ2VPYmogPSBzdGF0
aWNfY2FzdDxraHRtbDo6UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKSkKKyAgICBpZiAoS1NWRzo6
UmVuZGVyU1ZHSW1hZ2UqIGltYWdlT2JqID0gc3RhdGljX2Nhc3Q8S1NWRzo6UmVuZGVyU1ZHSW1h
Z2UqPihyZW5kZXJlcigpKSkKICAgICAgICAgaW1hZ2VPYmotPnNldEltYWdlKG1faW1hZ2VMb2Fk
ZXIuaW1hZ2UoKSk7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVu
dEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50SW1wbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJTVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwuaCIKKworI2luY2x1ZGUgIlNWR05hbWVzLmgi
CisjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCisjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhJbXBs
LmgiCisjaW5jbHVkZSAiUmVuZGVyRm9yZWlnbk9iamVjdC5oIgorCisjaW5jbHVkZSA8a3htbGNv
cmUvQXNzZXJ0aW9ucy5oPgorCisjaW5jbHVkZSAiY3NzcHJvcGVydGllcy5oIgorCituYW1lc3Bh
Y2UgS1NWRyB7CisKK1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbDo6U1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnRJbXBsKGNvbnN0IEtET006OlF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIEtET006OkRv
Y3VtZW50SW1wbCAqZG9jKQorOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGwodGFn
TmFtZSwgZG9jKSwgU1ZHVGVzdHNJbXBsKCksIFNWR0xhbmdTcGFjZUltcGwoKSwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEltcGwoKQoreworfQorCitTVkdGb3JlaWduT2JqZWN0RWxlbWVu
dEltcGw6On5TVkdGb3JlaWduT2JqZWN0RWxlbWVudEltcGwoKQoreworfQorCitTVkdBbmltYXRl
ZExlbmd0aEltcGwgKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbDo6eCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoSW1wbD4obV94LCB0aGlzLCBM
TV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOworfQorCitTVkdBbmltYXRlZExlbmd0aEltcGwg
KlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50SW1wbDo6eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoSW1wbD4obV95LCB0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKTsKK30KKworU1ZHQW5pbWF0ZWRMZW5ndGhJbXBsICpTVkdGb3JlaWdu
T2JqZWN0RWxlbWVudEltcGw6OndpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGhJbXBsPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3Bv
cnRFbGVtZW50KCkpOworfQorCitTVkdBbmltYXRlZExlbmd0aEltcGwgKlNWR0ZvcmVpZ25PYmpl
Y3RFbGVtZW50SW1wbDo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGhJbXBsPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9y
dEVsZW1lbnQoKSk7Cit9CisKK3ZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShLRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQoreworICAg
IGNvbnN0IEtET006OkF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQorICAgICAgICB4KCktPmJhc2VWYWwo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCisgICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp3aWR0aEF0dHIpIHsKKyAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX1dJRFRILCB2YWx1ZSk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmhlaWdodEF0dHIpIHsKKyAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9IRUlHSFQsIHZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoU1ZHVGVz
dHNJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKFNWR0xhbmdTcGFjZUltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudEltcGw6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgIH0KK30KKwora2h0bWw6OlJlbmRlck9iamVjdCAqU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnRJbXBsOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJl
bmEsIGtodG1sOjpSZW5kZXJTdHlsZSAqc3R5bGUpCit7CisgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlckZvcmVpZ25PYmplY3QodGhpcyk7Cit9CisKK2Jvb2wgU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnRJbXBsOjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKERPTTo6Tm9kZUltcGwgKmNoaWxk
KSBjb25zdAoreworICAgIC8vIFNraXAgb3ZlciBTVkcgcnVsZXMgd2hpY2ggZGlzYWxsb3cgbm9u
LVNWRyBraWRzCisgICAgcmV0dXJuIFN0eWxlZEVsZW1lbnRJbXBsOjpjaGlsZFNob3VsZENyZWF0
ZVJlbmRlcmVyKGNoaWxkKTsKK30KKworfTsKKworLy8gdmltOnRzPTQ6bm9ldApJbmRleDoga3N2
ZzIvc3ZnL1NWR0xvY2F0YWJsZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdM
b2NhdGFibGVJbXBsLmNwcAkocmV2aXNpb24gMTIwNjMpCisrKyBrc3ZnMi9zdmcvU1ZHTG9jYXRh
YmxlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgU1ZHRWxlbWVudElt
cGwgKlNWR0xvY2F0YWJsZUltcGw6Om5lYXJlcwogICAgIEtET006Ok5vZGVJbXBsICpuID0gZS0+
cGFyZW50Tm9kZSgpOwogICAgIHdoaWxlIChuICYmICFuLT5pc0RvY3VtZW50Tm9kZSgpKSB7CiAg
ICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpIHx8IG4tPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykgfHwKLSAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmltYWdlVGFnKSkgLy8gRklYTUU6IHx8IG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZv
cmVpZ25PYmplY3RUYWcpCisgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFn
ZVRhZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCiAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudEltcGwgKj4obik7CiAKICAgICAg
ICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKQEAgLTY0LDcgKzY0LDcgQEAgU1ZHRWxlbWVudEltcGwg
KlNWR0xvY2F0YWJsZUltcGw6OmZhcnRoZQogICAgIEtET006Ok5vZGVJbXBsICpuID0gZS0+cGFy
ZW50Tm9kZSgpOwogICAgIHdoaWxlIChuICYmICFuLT5pc0RvY3VtZW50Tm9kZSgpKSB7CiAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdmdUYWcpIHx8IG4tPmhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnN5bWJvbFRhZykgfHwKLSAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OmltYWdlVGFnKSkgLy8gRklYTUU6IHx8IG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZvcmVp
Z25PYmplY3RUYWcpCisgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRh
ZykgfHwgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zm9yZWlnbk9iamVjdFRhZykpCiAgICAgICAg
ICAgICBmYXJ0aGVzdCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbXBsICo+KG4pOwogCiAgICAg
ICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CkluZGV4OiBrc3ZnMi9jc3Mvc3ZnLmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9jc3Mvc3ZnLmNzcwkocmV2aXNpb24gMTIwNjMpCisrKyBrc3ZnMi9jc3Mv
c3ZnLmNzcwkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBzdmcsIHN5bWJvbCwgbWFy
a2VyLCBwYXR0ZXJuLCBmb3JlaWduT2JqCiAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKIH0KIAotdGV4
dAordGV4dCwgZm9yZWlnbk9iamVjdAogewotICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGRpc3Bs
YXk6IGJsb2NrICFpbXBvcnRhbnQ7CiB9CkluZGV4OiBrd3EvS1dRV01hdHJpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3dxL0tXUVdNYXRyaXguY3BwCShyZXZpc2lvbiAxMjA2MykKKysrIGt3cS9LV1FX
TWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIGRvdWJsZSBRV01h
dHJpeDo6ZGV0KCkgY29uc3QKIAogYm9vbCBRV01hdHJpeDo6aXNJbnZlcnRpYmxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZGV0KCkgPT0gMC4wOworICAgIHJldHVybiBkZXQoKSAhPSAwLjA7CiB9
CiAKIFFXTWF0cml4IFFXTWF0cml4OjppbnZlcnQoKSBjb25zdAo=
</data>
<flag name="review"
          id="1258"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>