<?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>53880</bug_id>
          
          <creation_ts>2011-02-06 10:14:57 -0800</creation_ts>
          <short_desc>Use bloom filter for descendant selector filtering</short_desc>
          <delta_ts>2011-02-06 14:29:09 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>hyatt</cc>
    
    <cc>mathias</cc>
    
    <cc>mihaip</cc>
    
    <cc>mjs</cc>
    
    <cc>peter</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346330</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-06 10:14:57 -0800</bug_when>
    <thetext>Bloom filter is faster than a hash set in this kind of use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346339</commentid>
    <comment_count>1</comment_count>
      <attachid>81415</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-06 10:44:46 -0800</bug_when>
    <thetext>Created attachment 81415
implement a bloom filter and use it for selector filtering

Shark thinks this speeds up style matching by ~30% on sites with lots of descendant selectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346342</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-06 10:58:50 -0800</bug_when>
    <thetext>Attachment 81415 did not build on chromium:
Build output: http://queues.webkit.org/results/7701641</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346343</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-06 10:59:29 -0800</bug_when>
    <thetext>Attachment 81415 did not build on qt:
Build output: http://queues.webkit.org/results/7708114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346347</commentid>
    <comment_count>4</comment_count>
      <attachid>81416</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-06 11:18:10 -0800</bug_when>
    <thetext>Created attachment 81416
attempted build fixes for various build systems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346348</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-06 11:29:15 -0800</bug_when>
    <thetext>Attachment 81415 did not build on chromium:
Build output: http://queues.webkit.org/results/7699787</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346366</commentid>
    <comment_count>6</comment_count>
      <attachid>81416</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-02-06 12:07:30 -0800</bug_when>
    <thetext>Comment on attachment 81416
attempted build fixes for various build systems

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

r=me with one minor comment

&gt; Source/JavaScriptCore/wtf/BloomFilter.h:77
&gt; +    char m_table[tableSize];

I&apos;d suggest using &quot;unsigned char&quot; or uint8_t for this, since it&apos;s using char as a byte, not a character, and this avoids pain on platforms where char is signed by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346368</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-06 12:11:27 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 81416 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81416&amp;action=review
&gt; 
&gt; r=me with one minor comment
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/BloomFilter.h:77
&gt; &gt; +    char m_table[tableSize];
&gt; 
&gt; I&apos;d suggest using &quot;unsigned char&quot; or uint8_t for this, since it&apos;s using char as a byte, not a character, and this avoids pain on platforms where char is signed by default.

Pls don&apos;t land as is -- breaks Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346369</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-06 12:12:01 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 81416 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81416&amp;action=review
&gt; &gt; 
&gt; &gt; r=me with one minor comment
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wtf/BloomFilter.h:77
&gt; &gt; &gt; +    char m_table[tableSize];
&gt; &gt; 
&gt; &gt; I&apos;d suggest using &quot;unsigned char&quot; or uint8_t for this, since it&apos;s using char as a byte, not a character, and this avoids pain on platforms where char is signed by default.
&gt; 
&gt; Pls don&apos;t land as is -- breaks Chromium.

Nevermind -- haven&apos;t seen the second patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346370</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-06 12:46:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77777 (!!!!1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346372</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-02-06 13:22:50 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; http://trac.webkit.org/changeset/77777 (!!!!1)

!!!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346374</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-06 13:41:09 -0800</bug_when>
    <thetext>I think I just won the webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346382</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-06 14:29:09 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77777 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81415</attachid>
            <date>2011-02-06 10:44:46 -0800</date>
            <delta_ts>2011-02-06 11:18:10 -0800</delta_ts>
            <desc>implement a bloom filter and use it for selector filtering</desc>
            <filename>bloom-filter-5.patch</filename>
            <type>text/plain</type>
            <size>17580</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3NzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAK
KzIwMTEtMDItMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBibG9vbSBmaWx0ZXIg
Zm9yIGRlc2NlbmRhbnQgc2VsZWN0b3IgZmlsdGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg4MAorICAgICAgICAKKyAgICAgICAgSW1wbGVt
ZW50IGEgYmxvb20gZmlsdGVyIHdpdGggaz0yIGFuZCA4IGJpdCBjb3VudGluZy4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
d3RmL0Jsb29tRmlsdGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6bWF4
aW11bUNvdW50KToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OkJsb29tRmlsdGVyKToKKyAg
ICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6Om1heUNvbnRhaW4pOgorICAgICAgICAoV1RGOjpCbG9v
bUZpbHRlcjo6YWRkKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OnJlbW92ZSk6CisgICAg
ICAgIChXVEY6OkJsb29tRmlsdGVyOjpmaXJzdFNsb3QpOgorICAgICAgICAoV1RGOjpCbG9vbUZp
bHRlcjo6c2Vjb25kU2xvdCk6CisgICAgICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6
OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6OjpsaWtl
bHlFbXB0eSk6CisgICAgICAgIChXVEY6Ojo6aXNDbGVhcik6CisKIDIwMTEtMDItMDQgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIgSHVudC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3Nzcz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NzgsNiArNTc4LDcgQEAKIAkJRTQ5REMx
NkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNTUxMkVGMjc3MjAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwICovOyB9OwogCQlFNDlEQzE2QzEyRUYyOTRF
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5REMxNTExMkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJj
ZVByb3ZpZGVyQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oICovOyB9
OworCQlFNEQ4Q0VGQjEyRkM0Mzk2MDBCQzlGNUEgLyogQmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDhDRTlCMTJGQzQyRTEwMEJD
OUY1QSAvKiBCbG9vbUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzQkQzMUQw
MTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGREExNUMxRTEyQjAzMDVDMDAzQTU4M0EgLyog
Q29tcGxleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRBMTVDMTYxMkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTFCNDQ3QTBFQ0NENzNCMDA0RjRERDEg
LyogU3RkTGliRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTFCNDQ3OTBFQ0NENzNCMDA0RjRERDEgLyogU3RkTGliRXh0cmFzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExOTcsNiArMTE5
OCw3IEBACiAJCUU0OURDMTQ5MTJFRjI2MUEwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hl
SXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDlEQzE1MTEyRUYyNzIy
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb3VyY2VQcm92aWRlckNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0OURDMTU1MTJFRjI3NzIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ4Q0U5QjEyRkM0MkUxMDBC
QzlGNUEgLyogQmxvb21GaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qmxvb21GaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjNCRDMxRDAxMjY3
MzAxODAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBUZXh0UG9zaXRpb24uaDsgcGF0aCA9IHRleHQvVGV4dFBvc2l0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21w
bGV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbXBsZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9
OwogCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNj
cmlwdENvcmVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9
OwpAQCAtMTU5NSw2ICsxNTk3LDcgQEAKIAkJCQk2NTgwRjc5NTA5NDA3MDU2MDA4MkMyMTkgLyog
UGFzc1JlZlB0ci5oICovLAogCQkJCTY1RDZEODdFMDlCNUEzMkUwMDAyRTRENyAvKiBQbGF0Zm9y
bS5oICovLAogCQkJCUE3RDY0OUE5MTAxNTIyNEUwMDlCMkUxQiAvKiBQb3NzaWJseU51bGwuaCAq
LywKKwkJCQlFNEQ4Q0U5QjEyRkM0MkUxMDBCQzlGNUEgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJ
CQkwODhGQTVCOTBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmNwcCAqLywKIAkJCQkw
ODhGQTVCQTBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmggKi8sCiAJCQkJMDhFMjc5
RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLywKQEAgLTI0NDQsNiAr
MjQ0Nyw3IEBACiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDODI0QUQxMkY3
Qzc4NTAwOEYzNUUwIC8qIE1hcmtlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4Q0VG
QjEyRkM0Mzk2MDBCQzlGNUEgLyogQmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CbG9vbUZpbHRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvb21GaWx0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvb21GaWx0ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb29tRmlsdGVyX2gKKyNkZWZpbmUg
Qmxvb21GaWx0ZXJfaAorCisjaW5jbHVkZSAiQWx3YXlzSW5saW5lLmgiCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBDb3VudGluZyBibG9vbSBmaWx0
ZXIgd2l0aCBrPTIgYW5kIDggYml0IGNvdW50ZXJzLiBVc2VzIDJea2V5Qml0cyBieXRlcyBvZiBt
ZW1vcnkuCisvLyBGYWxzZSBwb3NpdGl2ZSByYXRlIGlzIGFwcHJveGltYXRlbHkgKDEtZV4oLTJu
L20pKV4yLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgdW5pcXVlIAorLy8ga2V5cyBhbmQgbSBp
cyB0aGUgdGFibGUgc2l6ZSAoPT0yXmtleUJpdHMpLgordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJp
dHM+CitjbGFzcyBCbG9vbUZpbHRlciB7CitwdWJsaWM6CisgICAgQ09NUElMRV9BU1NFUlQoa2V5
Qml0cyA8PSAxNiwgYmxvb21fZmlsdGVyX2tleV9zaXplKTsKKworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgdGFibGVTaXplID0gMSA8PCBrZXlCaXRzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBrZXlNYXNrID0gKDEgPDwga2V5Qml0cykgLSAxOworICAgIHN0YXRpYyBjaGFyIG1heGltdW1D
b3VudCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8Y2hhcj46Om1heCgpOyB9CisgICAg
CisgICAgQmxvb21GaWx0ZXIoKSB7IGNsZWFyKCk7IH0KKworICAgIHZvaWQgYWRkKHVuc2lnbmVk
IGhhc2gpOworICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGhhc2gpOworCisgICAgLy8gVGhlIGZp
bHRlciBtYXkgZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgKGNsYWltIGl0IG1heSBjb250YWluIGEga2V5
IGl0IGRvZXNuJ3QpCisgICAgLy8gYnV0IG5ldmVyIGZhbHNlIG5lZ2F0aXZlcyAoY2xhaW0gaXQg
ZG9lc24ndCBjb250YWluIGEga2V5IGl0IGRvZXMpLgorICAgIGJvb2wgbWF5Q29udGFpbih1bnNp
Z25lZCBoYXNoKSBjb25zdCB7IHJldHVybiBmaXJzdFNsb3QoaGFzaCkgJiYgc2Vjb25kU2xvdCho
YXNoKTsgfQorICAgIAorICAgIC8vIFRoZSBmaWx0ZXIgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSBy
ZXVzZSBldmVuIGlmIGFsbCBrZXlzIGFyZSByZW1vdmVkLgorICAgIC8vIE90aGVyd2lzZSBvdmVy
Zmxvd2VkIGtleXMgd2lsbCBzdGljayBhcm91bmQuCisgICAgdm9pZCBjbGVhcigpOworCisgICAg
dm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpIHsgYWRkKHN0cmluZy5pbXBsKCkt
PmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7
IGFkZChzdHJpbmcuaW1wbCgpLT5oYXNoKCkpOyB9CisgICAgdm9pZCByZW1vdmUoY29uc3QgQXRv
bWljU3RyaW5nJiBzdHJpbmcpIHsgcmVtb3ZlKHN0cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgp
KTsgfQorICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7IHJlbW92ZShzdHJp
bmcuaW1wbCgpLT5oYXNoKCkpOyB9CisKKyAgICBib29sIG1heUNvbnRhaW4oY29uc3QgQXRvbWlj
U3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1heUNvbnRhaW4oc3RyaW5nLmltcGwoKS0+
ZXhpc3RpbmdIYXNoKCkpOyB9CisgICAgYm9vbCBtYXlDb250YWluKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKSBjb25zdCB7IHJldHVybiBtYXlDb250YWluKHN0cmluZy5pbXBsKCktPmhhc2goKSk7IH0K
KworICAgIC8vIFNsb3csIGZvciB1c2UgaW4gYXNzZXJ0cyBvbmx5LgorICAgIGJvb2wgbGlrZWx5
RW1wdHkoKSBjb25zdDsKKyAgICBib29sIGlzQ2xlYXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBjaGFyJiBmaXJzdFNsb3QodW5zaWduZWQgaGFzaCkgeyByZXR1cm4gbV90YWJsZVtoYXNoICYg
a2V5TWFza107IH0KKyAgICBjaGFyJiBzZWNvbmRTbG90KHVuc2lnbmVkIGhhc2gpIHsgcmV0dXJu
IG1fdGFibGVbKGhhc2ggPj4gMTYpICYga2V5TWFza107IH0KKyAgICBjb25zdCBjaGFyJiBmaXJz
dFNsb3QodW5zaWduZWQgaGFzaCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVtoYXNoICYga2V5TWFz
a107IH0KKyAgICBjb25zdCBjaGFyJiBzZWNvbmRTbG90KHVuc2lnbmVkIGhhc2gpIGNvbnN0IHsg
cmV0dXJuIG1fdGFibGVbKGhhc2ggPj4gMTYpICYga2V5TWFza107IH0KKworICAgIGNoYXIgbV90
YWJsZVt0YWJsZVNpemVdOworfTsKKyAgICAKK3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgor
aW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5Qml0cz46OmFkZCh1bnNpZ25lZCBoYXNoKQorewor
ICAgIGNoYXImIGZpcnN0ID0gZmlyc3RTbG90KGhhc2gpOworICAgIGNoYXImIHNlY29uZCA9IHNl
Y29uZFNsb3QoaGFzaCk7CisgICAgaWYgKExJS0VMWShmaXJzdCA8IG1heGltdW1Db3VudCgpKSkK
KyAgICAgICAgKytmaXJzdDsKKyAgICBpZiAoTElLRUxZKHNlY29uZCA8IG1heGltdW1Db3VudCgp
KSkKKyAgICAgICAgKytzZWNvbmQ7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgor
aW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5Qml0cz46OnJlbW92ZSh1bnNpZ25lZCBoYXNoKQor
eworICAgIGNoYXImIGZpcnN0ID0gZmlyc3RTbG90KGhhc2gpOworICAgIGNoYXImIHNlY29uZCA9
IHNlY29uZFNsb3QoaGFzaCk7CisgICAgQVNTRVJUKGZpcnN0KTsKKyAgICBBU1NFUlQoc2Vjb25k
KTsKKyAgICAvLyBJbiBjYXNlIG9mIGFuIG92ZXJmbG93LCB0aGUgc2xvdCBzdGlja3MgaW4gdGhl
IHRhYmxlIHVudGlsIGNsZWFyKCkuCisgICAgaWYgKExJS0VMWShmaXJzdCA8IG1heGltdW1Db3Vu
dCgpKSkKKyAgICAgICAgLS1maXJzdDsKKyAgICBpZiAoTElLRUxZKHNlY29uZCA8IG1heGltdW1D
b3VudCgpKSkKKyAgICAgICAgLS1zZWNvbmQ7Cit9CisgICAgCit0ZW1wbGF0ZSA8dW5zaWduZWQg
a2V5Qml0cz4KK2lubGluZSB2b2lkIEJsb29tRmlsdGVyPGtleUJpdHM+OjpjbGVhcigpCit7Cisg
ICAgbWVtc2V0KG1fdGFibGUsIDAsIHRhYmxlU2l6ZSk7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25l
ZCBrZXlCaXRzPgorYm9vbCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6bGlrZWx5RW1wdHkoKSBjb25z
dAoreworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgdGFibGVTaXplOyArK24pIHsKKyAgICAg
ICAgaWYgKG1fdGFibGVbbl0gJiYgbV90YWJsZVtuXSAhPSBtYXhpbXVtQ291bnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDx1bnNpZ25lZCBrZXlCaXRzPgorYm9vbCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6aXNDbGVh
cigpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0YWJsZVNpemU7ICsrbikg
eworICAgICAgICBpZiAobV90YWJsZVtuXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKwordXNpbmcgV1RGOjpCbG9vbUZpbHRlcjsK
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3Nzc3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDExLTAyLTA2
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYmxvb20gZmlsdGVyIGZvciBkZXNjZW5k
YW50IHNlbGVjdG9yIGZpbHRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTM4ODAKKyAgICAgICAgCisgICAgICAgIEJsb29tIGZpbHRlciBpcyBm
YXN0ZXIgdGhhbiBhIGhhc2ggc2V0IGluIHRoaXMga2luZCBvZiB1c2UuCisgICAgICAgIAorICAg
ICAgICBTaGFyayB0aGlua3MgdGhpcyBzcGVlZHMgdXAgc3R5bGUgbWF0Y2hpbmcgYnkgfjMwJSBv
biBzaXRlcworICAgICAgICB3aXRoIGxvdHMgb2YgZGVzY2VuZGFudCBzZWxlY3RvcnMuCisKKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvQmxvb21GaWx0ZXIuaDogQWRkZWQuCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVj
dEVsZW1lbnRJZGVudGlmaWVySGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnB1c2hQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
cG9wUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmZhc3RSZWpl
Y3RTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6Y29sbGVjdERlc2NlbmRh
bnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVj
dG9yLmg6CisKIDIwMTEtMDItMDYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CbG9vbUZpbHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CbG9vbUZpbHRlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Jsb29tRmls
dGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9C
bG9vbUZpbHRlcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0Jsb29tRmlsdGVyX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9CbG9vbUZpbHRlci5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA3Nzc0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUxLDMy
ICs2NTEsMzYgQEAgc3RhdGljIHZvaWQgbG9hZFZpZXdTb3VyY2VTdHlsZSgpCiAgICAgZGVmYXVs
dFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHNvdXJjZVVz
ZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNj
cmVlbkV2YWwoKSk7CiB9CiAgICAgCi1zdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEVsZW1lbnRJ
ZGVudGlmaWVySGFzaGVzKEVsZW1lbnQqIGVsZW1lbnQsIFZlY3Rvcjx1bnNpZ25lZCwgND4mIGlk
ZW50aWZpZXJIYXNoZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEVsZW1lbnRJZGVudGlm
aWVySGFzaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZlY3Rvcjx1bnNpZ25lZCwgND4mIGlk
ZW50aWZpZXJIYXNoZXMpCiB7CiAgICAgaWRlbnRpZmllckhhc2hlcy5hcHBlbmQoZWxlbWVudC0+
bG9jYWxOYW1lKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSk7CiAgICAgaWYgKGVsZW1lbnQtPmhh
c0lEKCkpCiAgICAgICAgIGlkZW50aWZpZXJIYXNoZXMuYXBwZW5kKGVsZW1lbnQtPmlkRm9yU3R5
bGVSZXNvbHV0aW9uKCkuaW1wbCgpLT5leGlzdGluZ0hhc2goKSk7Ci0gICAgU3R5bGVkRWxlbWVu
dCogc3R5bGVkRWxlbWVudCA9IGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpIDogMDsKKyAgICBjb25zdCBTdHlsZWRFbGVtZW50
KiBzdHlsZWRFbGVtZW50ID0gZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBzdGF0aWNfY2Fz
dDxjb25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkgOiAwOwogICAgIGlmIChzdHlsZWRFbGVt
ZW50ICYmIHN0eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKLSAgICAgICAgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgY2xhc3NOYW1lcyA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KS0+Y2xhc3NOYW1lcygpOworICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFz
c05hbWVzID0gc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaXplX3QgY291
bnQgPSBjbGFzc05hbWVzLnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQogICAgICAgICAgICAgaWRlbnRpZmllckhhc2hlcy5hcHBlbmQoY2xhc3NOYW1l
c1tpXS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsKICAgICB9CiB9Ci0gICAgCisKIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudChFbGVtZW50KiBwYXJlbnQpCiB7CiAgICAgLy8gSWYg
d2UgYXJlIG5vdCBpbnZva2VkIGNvbnNpc3RlbnRseSBmb3IgZWFjaCBwYXJlbnQsIGp1c3QgcGF1
c2UgbWFpbnRhaW5pbmcgdGhlIHN0YWNrLgogICAgIC8vIFRoZXJlIGFyZSBhbGwga2luZHMgb2Yg
d2Fja3kgc3BlY2lhbCBjYXNlcyB3aGVyZSB0aGUgc3R5bGUgcmVjYWxjIG1heSB0ZW1wb3Jhcmls
eSBicmFuY2ggdG8gc29tZSByYW5kb20gZWxlbWVudHMuCiAgICAgLy8gRklYTUU6IFBlcmhhcHMg
d2Ugc2hvdWxkIGZpeCB1cCB0aGUgc3RhY2sgaW5zdGVhZD8gVGhlcmUgaXMgc29tZSBkYW5nZXIg
b2YgZ2V0dGluZyBpbnRvIE8obl4yKSBzaXR1YXRpb25zIGRvaW5nIHRoYXQuCiAgICAgaWYgKG1f
cGFyZW50U3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRp
ZmllckZpbHRlci5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoIW1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyKTsKICAgICAgICAgLy8gV2UgbXVzdCBzdGFydCBmcm9tIHRoZSByb290LgogICAg
ICAgICBpZiAocGFyZW50LT5wYXJlbnRFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgfSBlbHNlIGlmIChtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudC0+cGFy
ZW50RWxlbWVudCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIG1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyID0gYWRvcHRQdHIobmV3IEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4p
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRl
cik7CisgICAgICAgIGlmIChtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudC0+
cGFyZW50RWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIG1fcGFy
ZW50U3RhY2suYXBwZW5kKFBhcmVudFN0YWNrRnJhbWUocGFyZW50KSk7CiAgICAgUGFyZW50U3Rh
Y2tGcmFtZSYgcGFyZW50RnJhbWUgPSBtX3BhcmVudFN0YWNrLmxhc3QoKTsKQEAgLTY4NSwyMCAr
Njg5LDI0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudChFbGVtZW4KICAgICBj
b2xsZWN0RWxlbWVudElkZW50aWZpZXJIYXNoZXMocGFyZW50LCBwYXJlbnRGcmFtZS5pZGVudGlm
aWVySGFzaGVzKTsKICAgICBzaXplX3QgY291bnQgPSBwYXJlbnRGcmFtZS5pZGVudGlmaWVySGFz
aGVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgIG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLmFkZChwYXJlbnRGcmFtZS5pZGVudGlmaWVy
SGFzaGVzW2ldKTsKKyAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPmFkZChwYXJl
bnRGcmFtZS5pZGVudGlmaWVySGFzaGVzW2ldKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9y
Ojpwb3BQYXJlbnQoRWxlbWVudCogcGFyZW50KQogewogICAgIGlmIChtX3BhcmVudFN0YWNrLmlz
RW1wdHkoKSB8fCBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ICE9IHBhcmVudCkKICAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CiAKICAg
ICBjb25zdCBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50U3RhY2subGFz
dCgpOwogICAgIHNpemVfdCBjb3VudCA9IHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgbV9h
bmNlc3RvcklkZW50aWZpZXJGaWx0ZXIucmVtb3ZlKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNo
ZXNbaV0pOworICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci0+cmVtb3ZlKHBhcmVu
dEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOwogICAgIG1fcGFyZW50U3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgIEFTU0VSVCghbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgbV9hbmNlc3Rvcklk
ZW50aWZpZXJGaWx0ZXIuaXNFbXB0eSgpKTsKKyAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5
KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLT5saWtlbHlF
bXB0eSgpKTsKKyAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIuY2xlYXIoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQpAQCAtNzUzLDkgKzc2MSwxMCBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNlCiAKIGlubGluZSBib29sIENTU1N0
eWxlU2VsZWN0b3I6OmZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEp
IGNvbnN0CiB7CisgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKICAgICBj
b25zdCB1bnNpZ25lZCogZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcyA9IHJ1bGVE
YXRhLmRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKTsKICAgICBmb3IgKHVuc2ln
bmVkIG4gPSAwOyBuIDwgUnVsZURhdGE6Om1heGltdW1JZGVudGlmaWVyQ291bnQgJiYgZGVzY2Vu
ZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1tuXTsgKytuKSB7Ci0gICAgICAgIGlmICghbV9h
bmNlc3RvcklkZW50aWZpZXJGaWx0ZXIuY29udGFpbnMoZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRp
Zmllckhhc2hlc1tuXSkpCisgICAgICAgIGlmICghbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIt
Pm1heUNvbnRhaW4oZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlc1tuXSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjkzNyw3
ICsyOTQ2LDcgQEAgaW5saW5lIHZvaWQgUnVsZURhdGE6OmNvbGxlY3REZXNjZW5kYW50UwogICAg
IH0KICAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rvcnko
KSkgewogICAgICAgICAvLyBPbmx5IGNvbGxlY3QgaWRlbnRpZmllcnMgdGhhdCBtYXRjaCBkaXJl
Y3QgYW5jZXN0b3JzLgotICAgICAgICAvLyBGSVhNRTogSW50ZWFkIG9mIGp1c3Qgc3RvcHBpbmcs
IHRoaXMgc2hvdWxkIHNraXAgb3ZlciBzaWJsaW5nIHNlbGVjdG9ycy4KKyAgICAgICAgLy8gRklY
TUU6IEluc3RlYWQgb2YganVzdCBzdG9wcGluZywgdGhpcyBzaG91bGQgc2tpcCBvdmVyIHNpYmxp
bmcgc2VsZWN0b3JzLgogICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2Nl
bmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkICYmIHJlbGF0aW9uICE9IENT
U1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAo
KHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCB8fCBzZWxlY3Rvci0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpICYmICFzZWxlY3Rvci0+dmFsdWUoKS5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDc3NzQw
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiTWVk
aWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0Jsb29tRmlsdGVyLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KQEAgLTIxNiw4ICsyMTYsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgVmVjdG9y
PHVuc2lnbmVkLCA0PiBpZGVudGlmaWVySGFzaGVzOwogICAgICAgICB9OwogICAgICAgICBWZWN0
b3I8UGFyZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRTdGFjazsKLSAgICAgICAgLy8gRklYTUU6IFJl
cGxhY2UgdGhpcyB3aXRoIGEgYmxvb20gZmlsdGVyLgotICAgICAgICBIYXNoQ291bnRlZFNldDx1
bnNpZ25lZCwgQWxyZWFkeUhhc2hlZD4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7CisgICAg
ICAgIAorICAgICAgICAvLyBXaXRoIDEwMCB1bmlxdWUgc3RyaW5ncyBpbiB0aGUgZmlsdGVyLCAy
XjEyIHNsb3QgdGFibGUgaGFzIGZhbHNlIHBvc2l0aXZlIHJhdGUgb2YgfjAuMiUuCisgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKKyAgICAgICAg
T3duUHRyPEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4gPiBtX2FuY2VzdG9ySWRlbnRp
ZmllckZpbHRlcjsKIAogICAgICAgICBib29sIG1faGFzVUFBcHBlYXJhbmNlOwogICAgICAgICBC
b3JkZXJEYXRhIG1fYm9yZGVyRGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81416</attachid>
            <date>2011-02-06 11:18:10 -0800</date>
            <delta_ts>2011-02-06 12:07:30 -0800</delta_ts>
            <desc>attempted build fixes for various build systems</desc>
            <filename>bloom-filter-6.patch</filename>
            <type>text/plain</type>
            <size>19253</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzc3NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAK
KzIwMTEtMDItMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBibG9vbSBmaWx0ZXIg
Zm9yIGRlc2NlbmRhbnQgc2VsZWN0b3IgZmlsdGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg4MAorICAgICAgICAKKyAgICAgICAgSW1wbGVt
ZW50IGEgYmxvb20gZmlsdGVyIHdpdGggaz0yIGFuZCA4IGJpdCBjb3VudGluZy4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0Js
b29tRmlsdGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6bWF4aW11bUNv
dW50KToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OkJsb29tRmlsdGVyKToKKyAgICAgICAg
KFdURjo6Qmxvb21GaWx0ZXI6Om1heUNvbnRhaW4pOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRl
cjo6YWRkKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OnJlbW92ZSk6CisgICAgICAgIChX
VEY6OkJsb29tRmlsdGVyOjpmaXJzdFNsb3QpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6
c2Vjb25kU2xvdCk6CisgICAgICAgIChXVEY6Ojo6YWRkKToKKyAgICAgICAgKFdURjo6OjpyZW1v
dmUpOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6OjpsaWtlbHlFbXB0
eSk6CisgICAgICAgIChXVEY6Ojo6aXNDbGVhcik6CisKIDIwMTEtMDItMDQgIEdlb2ZmcmV5IEdh
cmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVu
dC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDc3NzM3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC00MzgsNiArNDM4LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQVZMVHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdG1hcC5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9CeXRlQXJyYXkuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVB
cnJheS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CShyZXZpc2lvbiA3NzczNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAKICAgICAgICAgICAgICd3
dGYvQXRvbWljcy5oJywKICAgICAgICAgICAgICd3dGYvQVZMVHJlZS5oJywKICAgICAgICAgICAg
ICd3dGYvQml0bWFwLmgnLAorICAgICAgICAgICAgJ3d0Zi9CbG9vbUZpbHRlci5oJywKICAgICAg
ICAgICAgICd3dGYvQnl0ZUFycmF5LmNwcCcsCiAgICAgICAgICAgICAnd3RmL0J5dGVBcnJheS5o
JywKICAgICAgICAgICAgICd3dGYvY2hyb21pdW0vQ2hyb21pdW1UaHJlYWRpbmcuaCcsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDc3NzM3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtNTM3LDYgKzUzNywxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxCbG9vbUZpbHRlci5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxG
aWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxCdW1wUG9pbnRlckFsbG9jYXRvci5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNzc3MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTc4LDYgKzU3OCw3IEBACiAJ
CUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTU1MTJFRjI3
NzIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCAqLzsgfTsKIAkJRTQ5REMxNkMx
MkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4NEExRiAv
KiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0u
aCAqLzsgfTsKKwkJRTREOENFRkIxMkZDNDM5NjAwQkM5RjVBIC8qIEJsb29tRmlsdGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ4Q0U5QjEyRkM0
MkUxMDBCQzlGNUEgLyogQmxvb21GaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlGM0JEMzFFRDEyNjczNTc3MDA2NTQ2N0YgLyogVGV4dFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
M0JEMzFEMDEyNjczMDE4MDA2NTQ2N0YgLyogVGV4dFBvc2l0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkRBMTVDMUUxMkIwMzA1QzAwM0E1
ODNBIC8qIENvbXBsZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZEQTE1QzE2MTJCMDMwMjgwMDNBNTgzQSAvKiBDb21wbGV4LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUxQjQ0N0EwRUNDRDczQjAw
NEY0REQxIC8qIFN0ZExpYkV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUxQjQ0NzkwRUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTk3
LDYgKzExOTgsNyBAQAogCQlFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5REMxNTEx
MkVGMjcyMjAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU291cmNlUHJvdmlkZXJDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDlEQzE1NTEyRUYyNzcyMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJD
YWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92
aWRlckNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTREOENFOUIxMkZD
NDJFMTAwQkM5RjVBIC8qIEJsb29tRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJsb29tRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzQkQz
MUQwMTI2NzMwMTgwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gVGV4dFBvc2l0aW9uLmg7IHBhdGggPSB0ZXh0L1RleHRQb3NpdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQg
LyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3JpcHRDb3JlUHJl
Zml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgfTsKQEAgLTE1OTUsNiArMTU5Nyw3IEBACiAJCQkJNjU4MEY3OTUwOTQwNzA1NjAwODJD
MjE5IC8qIFBhc3NSZWZQdHIuaCAqLywKIAkJCQk2NUQ2RDg3RTA5QjVBMzJFMDAwMkU0RDcgLyog
UGxhdGZvcm0uaCAqLywKIAkJCQlBN0Q2NDlBOTEwMTUyMjRFMDA5QjJFMUIgLyogUG9zc2libHlO
dWxsLmggKi8sCisJCQkJRTREOENFOUIxMkZDNDJFMTAwQkM5RjVBIC8qIEJsb29tRmlsdGVyLmgg
Ki8sCiAJCQkJMDg4RkE1QjkwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi8s
CiAJCQkJMDg4RkE1QkEwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5oICovLAogCQkJ
CTA4RTI3OUU4MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8sCkBAIC0y
NDQ0LDYgKzI0NDcsNyBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Qzgy
NEFEMTJGN0M3ODUwMDhGMzVFMCAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTREOENFRkIxMkZDNDM5NjAwQkM5RjVBIC8qIEJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvb21GaWx0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9vbUZpbHRlcl9oCisj
ZGVmaW5lIEJsb29tRmlsdGVyX2gKKworI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IENvdW50aW5nIGJsb29tIGZpbHRlciB3aXRoIGs9MiBhbmQgOCBiaXQgY291bnRlcnMuIFVzZXMg
Ml5rZXlCaXRzIGJ5dGVzIG9mIG1lbW9yeS4KKy8vIEZhbHNlIHBvc2l0aXZlIHJhdGUgaXMgYXBw
cm94aW1hdGVseSAoMS1lXigtMm4vbSkpXjIsIHdoZXJlIG4gaXMgdGhlIG51bWJlciBvZiB1bmlx
dWUgCisvLyBrZXlzIGFuZCBtIGlzIHRoZSB0YWJsZSBzaXplICg9PTJea2V5Qml0cykuCit0ZW1w
bGF0ZSA8dW5zaWduZWQga2V5Qml0cz4KK2NsYXNzIEJsb29tRmlsdGVyIHsKK3B1YmxpYzoKKyAg
ICBDT01QSUxFX0FTU0VSVChrZXlCaXRzIDw9IDE2LCBibG9vbV9maWx0ZXJfa2V5X3NpemUpOwor
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZVNpemUgPSAxIDw8IGtleUJpdHM7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGtleU1hc2sgPSAoMSA8PCBrZXlCaXRzKSAtIDE7CisgICAg
c3RhdGljIGNoYXIgbWF4aW11bUNvdW50KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxj
aGFyPjo6bWF4KCk7IH0KKyAgICAKKyAgICBCbG9vbUZpbHRlcigpIHsgY2xlYXIoKTsgfQorCisg
ICAgdm9pZCBhZGQodW5zaWduZWQgaGFzaCk7CisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaGFz
aCk7CisKKyAgICAvLyBUaGUgZmlsdGVyIG1heSBnaXZlIGZhbHNlIHBvc2l0aXZlcyAoY2xhaW0g
aXQgbWF5IGNvbnRhaW4gYSBrZXkgaXQgZG9lc24ndCkKKyAgICAvLyBidXQgbmV2ZXIgZmFsc2Ug
bmVnYXRpdmVzIChjbGFpbSBpdCBkb2Vzbid0IGNvbnRhaW4gYSBrZXkgaXQgZG9lcykuCisgICAg
Ym9vbCBtYXlDb250YWluKHVuc2lnbmVkIGhhc2gpIGNvbnN0IHsgcmV0dXJuIGZpcnN0U2xvdCho
YXNoKSAmJiBzZWNvbmRTbG90KGhhc2gpOyB9CisgICAgCisgICAgLy8gVGhlIGZpbHRlciBtdXN0
IGJlIGNsZWFyZWQgYmVmb3JlIHJldXNlIGV2ZW4gaWYgYWxsIGtleXMgYXJlIHJlbW92ZWQuCisg
ICAgLy8gT3RoZXJ3aXNlIG92ZXJmbG93ZWQga2V5cyB3aWxsIHN0aWNrIGFyb3VuZC4KKyAgICB2
b2lkIGNsZWFyKCk7CisKKyAgICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykg
eyBhZGQoc3RyaW5nLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkpOyB9CisgICAgdm9pZCBhZGQoY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsgYWRkKHN0cmluZy5pbXBsKCktPmhhc2goKSk7IH0KKyAgICB2
b2lkIHJlbW92ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykgeyByZW1vdmUoc3RyaW5nLmlt
cGwoKS0+ZXhpc3RpbmdIYXNoKCkpOyB9CisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBz
dHJpbmcpIHsgcmVtb3ZlKHN0cmluZy5pbXBsKCktPmhhc2goKSk7IH0KKworICAgIGJvb2wgbWF5
Q29udGFpbihjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbWF5Q29u
dGFpbihzdHJpbmcuaW1wbCgpLT5leGlzdGluZ0hhc2goKSk7IH0KKyAgICBib29sIG1heUNvbnRh
aW4oY29uc3QgU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1heUNvbnRhaW4oc3RyaW5n
LmltcGwoKS0+aGFzaCgpKTsgfQorCisgICAgLy8gU2xvdywgZm9yIHVzZSBpbiBhc3NlcnRzIG9u
bHkuCisgICAgYm9vbCBsaWtlbHlFbXB0eSgpIGNvbnN0OworICAgIGJvb2wgaXNDbGVhcigpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGNoYXImIGZpcnN0U2xvdCh1bnNpZ25lZCBoYXNoKSB7IHJl
dHVybiBtX3RhYmxlW2hhc2ggJiBrZXlNYXNrXTsgfQorICAgIGNoYXImIHNlY29uZFNsb3QodW5z
aWduZWQgaGFzaCkgeyByZXR1cm4gbV90YWJsZVsoaGFzaCA+PiAxNikgJiBrZXlNYXNrXTsgfQor
ICAgIGNvbnN0IGNoYXImIGZpcnN0U2xvdCh1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVybiBt
X3RhYmxlW2hhc2ggJiBrZXlNYXNrXTsgfQorICAgIGNvbnN0IGNoYXImIHNlY29uZFNsb3QodW5z
aWduZWQgaGFzaCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVsoaGFzaCA+PiAxNikgJiBrZXlNYXNr
XTsgfQorCisgICAgY2hhciBtX3RhYmxlW3RhYmxlU2l6ZV07Cit9OworICAgIAordGVtcGxhdGUg
PHVuc2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRk
KHVuc2lnbmVkIGhhc2gpCit7CisgICAgY2hhciYgZmlyc3QgPSBmaXJzdFNsb3QoaGFzaCk7Cisg
ICAgY2hhciYgc2Vjb25kID0gc2Vjb25kU2xvdChoYXNoKTsKKyAgICBpZiAoTElLRUxZKGZpcnN0
IDwgbWF4aW11bUNvdW50KCkpKQorICAgICAgICArK2ZpcnN0OworICAgIGlmIChMSUtFTFkoc2Vj
b25kIDwgbWF4aW11bUNvdW50KCkpKQorICAgICAgICArK3NlY29uZDsKK30KKwordGVtcGxhdGUg
PHVuc2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6cmVt
b3ZlKHVuc2lnbmVkIGhhc2gpCit7CisgICAgY2hhciYgZmlyc3QgPSBmaXJzdFNsb3QoaGFzaCk7
CisgICAgY2hhciYgc2Vjb25kID0gc2Vjb25kU2xvdChoYXNoKTsKKyAgICBBU1NFUlQoZmlyc3Qp
OworICAgIEFTU0VSVChzZWNvbmQpOworICAgIC8vIEluIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRo
ZSBzbG90IHN0aWNrcyBpbiB0aGUgdGFibGUgdW50aWwgY2xlYXIoKS4KKyAgICBpZiAoTElLRUxZ
KGZpcnN0IDwgbWF4aW11bUNvdW50KCkpKQorICAgICAgICAtLWZpcnN0OworICAgIGlmIChMSUtF
TFkoc2Vjb25kIDwgbWF4aW11bUNvdW50KCkpKQorICAgICAgICAtLXNlY29uZDsKK30KKyAgICAK
K3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgoraW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5
Qml0cz46OmNsZWFyKCkKK3sKKyAgICBtZW1zZXQobV90YWJsZSwgMCwgdGFibGVTaXplKTsKK30K
KwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citib29sIEJsb29tRmlsdGVyPGtleUJpdHM+
OjpsaWtlbHlFbXB0eSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0YWJs
ZVNpemU7ICsrbikgeworICAgICAgICBpZiAobV90YWJsZVtuXSAmJiBtX3RhYmxlW25dICE9IG1h
eGltdW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citib29sIEJsb29tRmls
dGVyPGtleUJpdHM+Ojppc0NsZWFyKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBuID0gMDsg
biA8IHRhYmxlU2l6ZTsgKytuKSB7CisgICAgICAgIGlmIChtX3RhYmxlW25dKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit1c2lu
ZyBXVEY6OkJsb29tRmlsdGVyOworCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3
NzcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjQgQEAKKzIwMTEtMDItMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBibG9v
bSBmaWx0ZXIgZm9yIGRlc2NlbmRhbnQgc2VsZWN0b3IgZmlsdGVyaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg4MAorICAgICAgICAKKyAgICAg
ICAgQmxvb20gZmlsdGVyIGlzIGZhc3RlciB0aGFuIGEgaGFzaCBzZXQgaW4gdGhpcyBraW5kIG9m
IHVzZS4KKyAgICAgICAgCisgICAgICAgIFNoYXJrIHRoaW5rcyB0aGlzIHNwZWVkcyB1cCBzdHls
ZSBtYXRjaGluZyBieSB+MzAlIG9uIHNpdGVzCisgICAgICAgIHdpdGggbG90cyBvZiBkZXNjZW5k
YW50IHNlbGVjdG9ycy4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CbG9vbUZp
bHRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb2xsZWN0RWxlbWVudElkZW50aWZpZXJIYXNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpwb3BQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6ZmFzdFJlamVjdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVE
YXRhOjpjb2xsZWN0RGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hlcyk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKwogMjAxMS0wMi0wNiAgUGF0cmljayBHYW5zdGVy
ZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEts
aW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Jsb29tRmls
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L0Jsb29tRmlsdGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvQmxvb21GaWx0ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisj
aWZuZGVmIFdlYkNvcmVfRldEX0Jsb29tRmlsdGVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfQmxv
b21GaWx0ZXJfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Jsb29tRmlsdGVyLmg+CisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9u
IDc3NzQwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NTEsMzIgKzY1MSwzNiBAQCBzdGF0aWMgdm9pZCBsb2FkVmlld1NvdXJj
ZVN0eWxlKCkKICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChw
YXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJB
Z2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKIH0KICAgICAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBjb2xsZWN0RWxlbWVudElkZW50aWZpZXJIYXNoZXMoRWxlbWVudCogZWxlbWVudCwgVmVj
dG9yPHVuc2lnbmVkLCA0PiYgaWRlbnRpZmllckhhc2hlcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBj
b2xsZWN0RWxlbWVudElkZW50aWZpZXJIYXNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmVj
dG9yPHVuc2lnbmVkLCA0PiYgaWRlbnRpZmllckhhc2hlcykKIHsKICAgICBpZGVudGlmaWVySGFz
aGVzLmFwcGVuZChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsK
ICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKICAgICAgICAgaWRlbnRpZmllckhhc2hlcy5hcHBl
bmQoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCktPmV4aXN0aW5nSGFzaCgp
KTsKLSAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gZWxlbWVudC0+aXNTdHlsZWRF
bGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCkgOiAwOworICAg
IGNvbnN0IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBlbGVtZW50LT5pc1N0eWxlZEVs
ZW1lbnQoKSA/IHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KSA6IDA7
CiAgICAgaWYgKHN0eWxlZEVsZW1lbnQgJiYgc3R5bGVkRWxlbWVudC0+aGFzQ2xhc3MoKSkgewot
ICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7CisgICAgICAgIGNvbnN0IFNw
YWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMgPSBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCk7
CiAgICAgICAgIHNpemVfdCBjb3VudCA9IGNsYXNzTmFtZXMuc2l6ZSgpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgICAgICBpZGVudGlmaWVySGFz
aGVzLmFwcGVuZChjbGFzc05hbWVzW2ldLmltcGwoKS0+ZXhpc3RpbmdIYXNoKCkpOwogICAgIH0K
IH0KLSAgICAKKwogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50KEVsZW1lbnQqIHBh
cmVudCkKIHsKICAgICAvLyBJZiB3ZSBhcmUgbm90IGludm9rZWQgY29uc2lzdGVudGx5IGZvciBl
YWNoIHBhcmVudCwganVzdCBwYXVzZSBtYWludGFpbmluZyB0aGUgc3RhY2suCiAgICAgLy8gVGhl
cmUgYXJlIGFsbCBraW5kcyBvZiB3YWNreSBzcGVjaWFsIGNhc2VzIHdoZXJlIHRoZSBzdHlsZSBy
ZWNhbGMgbWF5IHRlbXBvcmFyaWx5IGJyYW5jaCB0byBzb21lIHJhbmRvbSBlbGVtZW50cy4KICAg
ICAvLyBGSVhNRTogUGVyaGFwcyB3ZSBzaG91bGQgZml4IHVwIHRoZSBzdGFjayBpbnN0ZWFkPyBU
aGVyZSBpcyBzb21lIGRhbmdlciBvZiBnZXR0aW5nIGludG8gTyhuXjIpIHNpdHVhdGlvbnMgZG9p
bmcgdGhhdC4KICAgICBpZiAobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNT
RVJUKG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VS
VCghbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIpOwogICAgICAgICAvLyBXZSBtdXN0IHN0YXJ0
IGZyb20gdGhlIHJvb3QuCiAgICAgICAgIGlmIChwYXJlbnQtPnBhcmVudEVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKG1fcGFyZW50U3RhY2subGFzdCgpLmVs
ZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBhZG9wdFB0cihuZXcgQmxvb21GaWx0ZXI8
Ymxvb21GaWx0ZXJLZXlCaXRzPik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fYW5j
ZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKKyAgICAgICAgaWYgKG1fcGFyZW50U3RhY2subGFzdCgp
LmVsZW1lbnQgIT0gcGFyZW50LT5wYXJlbnRFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQogCiAgICAgbV9wYXJlbnRTdGFjay5hcHBlbmQoUGFyZW50U3RhY2tGcmFtZShwYXJl
bnQpKTsKICAgICBQYXJlbnRTdGFja0ZyYW1lJiBwYXJlbnRGcmFtZSA9IG1fcGFyZW50U3RhY2su
bGFzdCgpOwpAQCAtNjg1LDIwICs2ODksMjQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwdXNo
UGFyZW50KEVsZW1lbgogICAgIGNvbGxlY3RFbGVtZW50SWRlbnRpZmllckhhc2hlcyhwYXJlbnQs
IHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXMpOwogICAgIHNpemVfdCBjb3VudCA9IHBhcmVu
dEZyYW1lLmlkZW50aWZpZXJIYXNoZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkKLSAgICAgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIuYWRkKHBh
cmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOworICAgICAgICBtX2FuY2VzdG9ySWRlbnRp
ZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOwogfQogCiB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnBvcFBhcmVudChFbGVtZW50KiBwYXJlbnQpCiB7CiAgICAg
aWYgKG1fcGFyZW50U3RhY2suaXNFbXB0eSgpIHx8IG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1l
bnQgIT0gcGFyZW50KQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fYW5jZXN0b3JJZGVu
dGlmaWVyRmlsdGVyKTsKIAogICAgIGNvbnN0IFBhcmVudFN0YWNrRnJhbWUmIHBhcmVudEZyYW1l
ID0gbV9wYXJlbnRTdGFjay5sYXN0KCk7CiAgICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUu
aWRlbnRpZmllckhhc2hlcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQotICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci5yZW1vdmUocGFyZW50
RnJhbWUuaWRlbnRpZmllckhhc2hlc1tpXSk7CisgICAgICAgIG1fYW5jZXN0b3JJZGVudGlmaWVy
RmlsdGVyLT5yZW1vdmUocGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlc1tpXSk7CiAgICAgbV9w
YXJlbnRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgQVNTRVJUKCFtX3BhcmVudFN0YWNrLmlzRW1w
dHkoKSB8fCBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci5pc0VtcHR5KCkpOworICAgIGlmICht
X3BhcmVudFN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50
aWZpZXJGaWx0ZXItPmxpa2VseUVtcHR5KCkpOworICAgICAgICBtX2FuY2VzdG9ySWRlbnRpZmll
ckZpbHRlci5jbGVhcigpOworICAgIH0KIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRN
YXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCkBAIC03
NTMsOSArNzYxLDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2UK
IAogaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6ZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0
IFJ1bGVEYXRhJiBydWxlRGF0YSkgY29uc3QKIHsKKyAgICBBU1NFUlQobV9hbmNlc3RvcklkZW50
aWZpZXJGaWx0ZXIpOwogICAgIGNvbnN0IHVuc2lnbmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVu
dGlmaWVySGFzaGVzID0gcnVsZURhdGEuZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmllckhhc2hl
cygpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBSdWxlRGF0YTo6bWF4aW11bUlkZW50
aWZpZXJDb3VudCAmJiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW25dOyArK24p
IHsKLSAgICAgICAgaWYgKCFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci5jb250YWlucyhkZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW25dKSkKKyAgICAgICAgaWYgKCFtX2FuY2Vz
dG9ySWRlbnRpZmllckZpbHRlci0+bWF5Q29udGFpbihkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlm
aWVySGFzaGVzW25dKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yOTM3LDcgKzI5NDYsNyBAQCBpbmxpbmUgdm9pZCBSdWxlRGF0YTo6Y29s
bGVjdERlc2NlbmRhbnRTCiAgICAgfQogICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBz
ZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgIC8vIE9ubHkgY29sbGVjdCBpZGVudGlm
aWVycyB0aGF0IG1hdGNoIGRpcmVjdCBhbmNlc3RvcnMuCi0gICAgICAgIC8vIEZJWE1FOiBJbnRl
YWQgb2YganVzdCBzdG9wcGluZywgdGhpcyBzaG91bGQgc2tpcCBvdmVyIHNpYmxpbmcgc2VsZWN0
b3JzLgorICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBqdXN0IHN0b3BwaW5nLCB0aGlzIHNo
b3VsZCBza2lwIG92ZXIgc2libGluZyBzZWxlY3RvcnMuCiAgICAgICAgIGlmIChyZWxhdGlvbiAh
PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hp
bGQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGlmICgoc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Oklk
IHx8IHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgJiYgIXNlbGVjdG9y
LT52YWx1ZSgpLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaAkocmV2aXNpb24gNzc3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiTGlua0hh
c2guaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvQmxvb21G
aWx0ZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjE2LDggKzIxNiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7CiAgICAg
ICAgIH07CiAgICAgICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwot
ICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGlzIHdpdGggYSBibG9vbSBmaWx0ZXIuCi0gICAg
ICAgIEhhc2hDb3VudGVkU2V0PHVuc2lnbmVkLCBBbHJlYWR5SGFzaGVkPiBtX2FuY2VzdG9ySWRl
bnRpZmllckZpbHRlcjsKKyAgICAgICAgCisgICAgICAgIC8vIFdpdGggMTAwIHVuaXF1ZSBzdHJp
bmdzIGluIHRoZSBmaWx0ZXIsIDJeMTIgc2xvdCB0YWJsZSBoYXMgZmFsc2UgcG9zaXRpdmUgcmF0
ZSBvZiB+MC4yJS4KKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsb29tRmlsdGVyS2V5
Qml0cyA9IDEyOworICAgICAgICBPd25QdHI8Qmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRz
PiA+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOwogCiAgICAgICAgIGJvb2wgbV9oYXNVQUFw
cGVhcmFuY2U7CiAgICAgICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwo=
</data>
<flag name="review"
          id="72984"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>