<?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>143366</bug_id>
          
          <creation_ts>2015-04-03 04:43:23 -0700</creation_ts>
          <short_desc>Add non-counting Bloom filter implementation</short_desc>
          <delta_ts>2015-04-03 10:24:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1082515</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-03 04:43:23 -0700</bug_when>
    <thetext>We only have a counting bloom filter implementation. A more compact single-bit filter would be good to have too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082519</commentid>
    <comment_count>1</comment_count>
      <attachid>250061</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-03 05:08:01 -0700</bug_when>
    <thetext>Created attachment 250061
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082526</commentid>
    <comment_count>2</comment_count>
      <attachid>250065</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-03 05:19:52 -0700</bug_when>
    <thetext>Created attachment 250065
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082546</commentid>
    <comment_count>3</comment_count>
      <attachid>250068</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-03 07:01:32 -0700</bug_when>
    <thetext>Created attachment 250068
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082615</commentid>
    <comment_count>4</comment_count>
      <attachid>250068</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-03 10:24:30 -0700</bug_when>
    <thetext>Comment on attachment 250068
patch

Clearing flags on attachment: 250068

Committed r182321: &lt;http://trac.webkit.org/changeset/182321&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082616</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-03 10:24:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250061</attachid>
            <date>2015-04-03 05:08:01 -0700</date>
            <delta_ts>2015-04-03 05:19:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bloom-filter-non-counting.patch</filename>
            <type>text/plain</type>
            <size>23510</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODIzMTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50aW5nIEJsb29tIGZpbHRlciBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGEgdHJhZGl0aW9uYWwgc2luZ2xlLWJpdC1wZXItYnVja2V0IEJsb29tIGZpbHRl
ciBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgY291bnRpbmcgaW1wbGVtZW50YXRpb24uCisK
KyAgICAgICAgLSByZW5hbWUgQmxvb21GaWx0ZXIgLT4gQ291bnRpbmdCbG9vbUZpbHRlci4KKyAg
ICAgICAgLSBhZGQgYSBuZXcgYmFzaWMgQmxvb21GaWx0ZXIgdHlwZS4KKyAgICAgICAgLSB1cGRh
dGUgc29tZSB0ZXJtaW5vbG9neSB0byBtYXRjaCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0Jsb29tX2ZpbHRlciBhbmQgbW9kZXJuaXplIHRoZSBjb2RlIGEgYml0LgorICAgICAgICAtIGFk
ZCBBUEkgdGVzdHMuCisKKyAgICAgICAgKiB3dGYvQmxvb21GaWx0ZXIuaDoKKyAgICAgICAgKFdU
Rjo6Qmxvb21GaWx0ZXI6OkJsb29tRmlsdGVyKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6
OmFkZCk6CisKKyAgICAgICAgICAgIEFsc28gc3VwcG9ydCBtZXJnaW5nLgorCisgICAgICAgIChX
VEY6OkJsb29tRmlsdGVyOjptYXlDb250YWluKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6
OmFycmF5SW5kZXgpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6Yml0TWFzayk6CisgICAg
ICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+OjptYXlDb250YWluKToKKyAgICAgICAgKFdU
Rjo6Qmxvb21GaWx0ZXI8a2V5Qml0cz46OmFkZCk6CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVy
PGtleUJpdHM+Ojppc0JpdFNldCk6CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+
OjpzZXRCaXQpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjxrZXlCaXRzPjo6Y2xlYXIpOgor
ICAgICAgICAoV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVyOjpDb3VudGluZ0Jsb29tRmlsdGVyKToK
KyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9vbUZpbHRlcjo6bWF5Q29udGFpbik6CisgICAgICAg
IChXVEY6OkNvdW50aW5nQmxvb21GaWx0ZXI6OmZpcnN0QnVja2V0KToKKyAgICAgICAgKFdURjo6
Q291bnRpbmdCbG9vbUZpbHRlcjo6c2Vjb25kQnVja2V0KToKKyAgICAgICAgKFdURjo6Q291bnRp
bmdCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9v
bUZpbHRlcjxrZXlCaXRzPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVy
PGtleUJpdHM+OjpsaWtlbHlFbXB0eSk6CisgICAgICAgIChXVEY6OkNvdW50aW5nQmxvb21GaWx0
ZXI8a2V5Qml0cz46OmlzQ2xlYXIpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6bWF4aW11
bUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OmZpcnN0U2xvdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyOjpzZWNvbmRTbG90KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI8a2V5Qml0cz46OnJlbW92ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+OjpsaWtlbHlFbXB0eSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+Ojppc0NsZWFyKTogRGVsZXRl
ZC4KKwogMDE1LTA0LTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBWYWx1ZSBhc3NpZ25tZW50IG9wZXJhdG9yIG9mIE9wdGlvbmFsIHNob3VsZCBiZSBzdHJp
Y3RlcgpJbmRleDogU291cmNlL1dURi93dGYvQmxvb21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CbG9vbUZpbHRlci5oCShyZXZpc2lvbiAxODIyNzApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CbG9vbUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyOSArMjYsMTE2IEBACiAj
aWZuZGVmIEJsb29tRmlsdGVyX2gKICNkZWZpbmUgQmxvb21GaWx0ZXJfaAogCisjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCi0vLyBDb3VudGluZyBibG9vbSBmaWx0ZXIgd2l0aCBrPTIgYW5kIDggYml0IGNvdW50
ZXJzLiBVc2VzIDJea2V5Qml0cyBieXRlcyBvZiBtZW1vcnkuCisvLyBCbG9vbSBmaWx0ZXIgd2l0
aCBrPTIuIFVzZXMgMl5rZXlCaXRzLzggYnl0ZXMgb2YgbWVtb3J5LgogLy8gRmFsc2UgcG9zaXRp
dmUgcmF0ZSBpcyBhcHByb3hpbWF0ZWx5ICgxLWVeKC0ybi9tKSleMiwgd2hlcmUgbiBpcyB0aGUg
bnVtYmVyIG9mIHVuaXF1ZSAKIC8vIGtleXMgYW5kIG0gaXMgdGhlIHRhYmxlIHNpemUgKD09Ml5r
ZXlCaXRzKS4KKy8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jsb29tX2ZpbHRl
cgogdGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CiBjbGFzcyBCbG9vbUZpbHRlciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCB0YWJsZVNpemUgPSAxIDw8IGtleUJpdHM7CisKKyAgICBCbG9vbUZpbHRlcigpOworCisgICAg
dm9pZCBhZGQodW5zaWduZWQgaGFzaCk7CisgICAgdm9pZCBhZGQoY29uc3QgQmxvb21GaWx0ZXIm
KTsKKworICAgIC8vIFRoZSBmaWx0ZXIgbWF5IGdpdmUgZmFsc2UgcG9zaXRpdmVzIChjbGFpbSBp
dCBtYXkgY29udGFpbiBhIGtleSBpdCBkb2Vzbid0KQorICAgIC8vIGJ1dCBuZXZlciBmYWxzZSBu
ZWdhdGl2ZXMgKGNsYWltIGl0IGRvZXNuJ3QgY29udGFpbiBhIGtleSBpdCBkb2VzKS4KKyAgICBi
b29sIG1heUNvbnRhaW4odW5zaWduZWQgaGFzaCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBjbGVh
cigpOworCisgICAgdm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpIHsgYWRkKHN0
cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIHZvaWQgYWRkKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKSB7IGFkZChzdHJpbmcuaW1wbCgpLT5oYXNoKCkpOyB9CisgICAgYm9vbCBtYXlD
b250YWluKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtYXlDb250
YWluKHN0cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIGJvb2wgbWF5Q29udGFp
bihjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbWF5Q29udGFpbihzdHJpbmcu
aW1wbCgpLT5oYXNoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGJpdHNQZXJQb3NpdGlvbiA9IDggKiBzaXplb2YodW5zaWduZWQpOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBrZXlNYXNrID0gKDEgPDwga2V5Qml0cykgLSAxOwotICAgIHN0YXRpYyB1aW50
OF90IG1heGltdW1Db3VudCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46
Om1heCgpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGFycmF5SW5kZXgodW5zaWduZWQga2V5KSB7
IHJldHVybiBrZXkgLyBiaXRzUGVyUG9zaXRpb247IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgYml0
TWFzayh1bnNpZ25lZCBrZXkpIHsgcmV0dXJuIDEgPDwgKGtleSAlIGJpdHNQZXJQb3NpdGlvbik7
IH0KKworICAgIGJvb2wgaXNCaXRTZXQodW5zaWduZWQga2V5KSBjb25zdDsKKyAgICB2b2lkIHNl
dEJpdCh1bnNpZ25lZCBrZXkpOworCisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgdGFibGVTaXpl
IC8gYml0c1BlclBvc2l0aW9uPiBtX2JpdEFycmF5OworfTsKKwordGVtcGxhdGUgPHVuc2lnbmVk
IGtleUJpdHM+CitpbmxpbmUgQmxvb21GaWx0ZXI8a2V5Qml0cz46OkJsb29tRmlsdGVyKCkKKyAg
ICA6IG1fYml0QXJyYXkoKQoreworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQga2V5Qml0cz4KK2lu
bGluZSBib29sIEJsb29tRmlsdGVyPGtleUJpdHM+OjptYXlDb250YWluKHVuc2lnbmVkIGhhc2gp
IGNvbnN0Cit7CisgICAgLy8gVGhlIHRvcCBhbmQgYm90dG9tIGJpdHMgb2YgdGhlIGluY29taW5n
IGhhc2ggYXJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgYmxvb20gZmlsdGVyIGhhc2ggZnVuY3Rp
b25zLgorICAgIC8vIFRoaXMgd29ya3Mgd2VsbCBhcyBsb25nIGFzIHRoZSBmaWx0ZXIgc2l6ZSBp
cyBub3QgbXVjaCBhYm92ZSAyXjE2LgorICAgIHJldHVybiBpc0JpdFNldChoYXNoKSAmJiBpc0Jp
dFNldChoYXNoID4+IDE2KTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citpbmxp
bmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKHVuc2lnbmVkIGhhc2gpCit7CisgICAg
c2V0Qml0KGhhc2gpOworICAgIHNldEJpdChoYXNoID4+IDE2KTsKK30KKwordGVtcGxhdGUgPHVu
c2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKGNv
bnN0IEJsb29tRmlsdGVyJiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Yml0QXJyYXkuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYml0QXJyYXlbaV0gfD0gb3RoZXIubV9i
aXRBcnJheVtpXTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citib29sIEJsb29t
RmlsdGVyPGtleUJpdHM+Ojppc0JpdFNldCh1bnNpZ25lZCBrZXkpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgbWFza2VkS2V5ID0ga2V5ICYga2V5TWFzazsKKyAgICBBU1NFUlQoYXJyYXlJbmRleCht
YXNrZWRLZXkpIDwgbV9iaXRBcnJheS5zaXplKCkpOworICAgIHJldHVybiBtX2JpdEFycmF5W2Fy
cmF5SW5kZXgobWFza2VkS2V5KV0gJiBiaXRNYXNrKG1hc2tlZEtleSk7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBrZXlCaXRzPgordm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6c2V0Qml0KHVu
c2lnbmVkIGtleSkKK3sKKyAgICB1bnNpZ25lZCBtYXNrZWRLZXkgPSBrZXkgJiBrZXlNYXNrOwor
ICAgIEFTU0VSVChhcnJheUluZGV4KG1hc2tlZEtleSkgPCBtX2JpdEFycmF5LnNpemUoKSk7Cisg
ICAgbV9iaXRBcnJheVthcnJheUluZGV4KG1hc2tlZEtleSldIHw9IGJpdE1hc2sobWFza2VkS2V5
KTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6Y2xlYXIoKQoreworICAgIG1fYml0QXJyYXkuZmlsbCgwKTsKK30KKwor
Ly8gQ291bnRpbmcgYmxvb20gZmlsdGVyIHdpdGggOCBiaXQgY291bnRlcnMgYW5kIHRoZSBzYW1l
IGVycm9yIHJhdGVzIGFzIGFib3ZlLgorLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvQmxvb21fZmlsdGVyI0NvdW50aW5nX2ZpbHRlcnMKK3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlC
aXRzPgorY2xhc3MgQ291bnRpbmdCbG9vbUZpbHRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZVNpemUgPSAxIDw8
IGtleUJpdHM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1Db3VudCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpOwogICAgIAotICAgIEJsb29tRmlsdGVyKCkg
eyBjbGVhcigpOyB9CisgICAgQ291bnRpbmdCbG9vbUZpbHRlcigpOwogCiAgICAgdm9pZCBhZGQo
dW5zaWduZWQgaGFzaCk7CiAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaGFzaCk7CiAKICAgICAv
LyBUaGUgZmlsdGVyIG1heSBnaXZlIGZhbHNlIHBvc2l0aXZlcyAoY2xhaW0gaXQgbWF5IGNvbnRh
aW4gYSBrZXkgaXQgZG9lc24ndCkKICAgICAvLyBidXQgbmV2ZXIgZmFsc2UgbmVnYXRpdmVzIChj
bGFpbSBpdCBkb2Vzbid0IGNvbnRhaW4gYSBrZXkgaXQgZG9lcykuCi0gICAgYm9vbCBtYXlDb250
YWluKHVuc2lnbmVkIGhhc2gpIGNvbnN0IHsgcmV0dXJuIGZpcnN0U2xvdChoYXNoKSAmJiBzZWNv
bmRTbG90KGhhc2gpOyB9CisgICAgYm9vbCBtYXlDb250YWluKHVuc2lnbmVkIGhhc2gpIGNvbnN0
IHsgcmV0dXJuIGZpcnN0QnVja2V0KGhhc2gpICYmIHNlY29uZEJ1Y2tldChoYXNoKTsgfQogICAg
IAogICAgIC8vIFRoZSBmaWx0ZXIgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZXVzZSBldmVuIGlm
IGFsbCBrZXlzIGFyZSByZW1vdmVkLgogICAgIC8vIE90aGVyd2lzZSBvdmVyZmxvd2VkIGtleXMg
d2lsbCBzdGljayBhcm91bmQuCkBAIC02OSw2MSArMTU2LDY5IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHVpbnQ4X3QmIGZpcnN0U2xvdCh1bnNpZ25lZCBoYXNoKSB7IHJldHVy
biBtX3RhYmxlW2hhc2ggJiBrZXlNYXNrXTsgfQotICAgIHVpbnQ4X3QmIHNlY29uZFNsb3QodW5z
aWduZWQgaGFzaCkgeyByZXR1cm4gbV90YWJsZVsoaGFzaCA+PiAxNikgJiBrZXlNYXNrXTsgfQot
ICAgIGNvbnN0IHVpbnQ4X3QmIGZpcnN0U2xvdCh1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVy
biBtX3RhYmxlW2hhc2ggJiBrZXlNYXNrXTsgfQotICAgIGNvbnN0IHVpbnQ4X3QmIHNlY29uZFNs
b3QodW5zaWduZWQgaGFzaCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVsoaGFzaCA+PiAxNikgJiBr
ZXlNYXNrXTsgfQorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrZXlNYXNrID0gKDEgPDwga2V5
Qml0cykgLSAxOwogCi0gICAgdWludDhfdCBtX3RhYmxlW3RhYmxlU2l6ZV07CisgICAgdWludDhf
dCYgZmlyc3RCdWNrZXQodW5zaWduZWQgaGFzaCkgeyByZXR1cm4gbV9idWNrZXRzW2hhc2ggJiBr
ZXlNYXNrXTsgfQorICAgIHVpbnQ4X3QmIHNlY29uZEJ1Y2tldCh1bnNpZ25lZCBoYXNoKSB7IHJl
dHVybiBtX2J1Y2tldHNbKGhhc2ggPj4gMTYpICYga2V5TWFza107IH0KKyAgICBjb25zdCB1aW50
OF90JiBmaXJzdEJ1Y2tldCh1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVybiBtX2J1Y2tldHNb
aGFzaCAmIGtleU1hc2tdOyB9CisgICAgY29uc3QgdWludDhfdCYgc2Vjb25kQnVja2V0KHVuc2ln
bmVkIGhhc2gpIGNvbnN0IHsgcmV0dXJuIG1fYnVja2V0c1soaGFzaCA+PiAxNikgJiBrZXlNYXNr
XTsgfQorCisgICAgc3RkOjphcnJheTx1aW50OF90LCB0YWJsZVNpemU+IG1fYnVja2V0czsKIH07
Ci0gICAgCisKIHRlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotaW5saW5lIHZvaWQgQmxvb21G
aWx0ZXI8a2V5Qml0cz46OmFkZCh1bnNpZ25lZCBoYXNoKQoraW5saW5lIENvdW50aW5nQmxvb21G
aWx0ZXI8a2V5Qml0cz46OkNvdW50aW5nQmxvb21GaWx0ZXIoKQorICAgIDogbV9idWNrZXRzKCkK
IHsKLSAgICB1aW50OF90JiBmaXJzdCA9IGZpcnN0U2xvdChoYXNoKTsKLSAgICB1aW50OF90JiBz
ZWNvbmQgPSBzZWNvbmRTbG90KGhhc2gpOwotICAgIGlmIChMSUtFTFkoZmlyc3QgPCBtYXhpbXVt
Q291bnQoKSkpCit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgoraW5saW5lIHZvaWQg
Q291bnRpbmdCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKHVuc2lnbmVkIGhhc2gpCit7CisgICAg
YXV0byYgZmlyc3QgPSBmaXJzdEJ1Y2tldChoYXNoKTsKKyAgICBhdXRvJiBzZWNvbmQgPSBzZWNv
bmRCdWNrZXQoaGFzaCk7CisgICAgaWYgKExJS0VMWShmaXJzdCA8IG1heGltdW1Db3VudCkpCiAg
ICAgICAgICsrZmlyc3Q7Ci0gICAgaWYgKExJS0VMWShzZWNvbmQgPCBtYXhpbXVtQ291bnQoKSkp
CisgICAgaWYgKExJS0VMWShzZWNvbmQgPCBtYXhpbXVtQ291bnQpKQogICAgICAgICArK3NlY29u
ZDsKIH0KIAogdGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Ci1pbmxpbmUgdm9pZCBCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6cmVtb3ZlKHVuc2lnbmVkIGhhc2gpCitpbmxpbmUgdm9pZCBDb3VudGlu
Z0Jsb29tRmlsdGVyPGtleUJpdHM+OjpyZW1vdmUodW5zaWduZWQgaGFzaCkKIHsKLSAgICB1aW50
OF90JiBmaXJzdCA9IGZpcnN0U2xvdChoYXNoKTsKLSAgICB1aW50OF90JiBzZWNvbmQgPSBzZWNv
bmRTbG90KGhhc2gpOworICAgIGF1dG8mIGZpcnN0ID0gZmlyc3RCdWNrZXQoaGFzaCk7CisgICAg
YXV0byYgc2Vjb25kID0gc2Vjb25kQnVja2V0KGhhc2gpOwogICAgIEFTU0VSVChmaXJzdCk7CiAg
ICAgQVNTRVJUKHNlY29uZCk7Ci0gICAgLy8gSW4gY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhlIHNs
b3Qgc3RpY2tzIGluIHRoZSB0YWJsZSB1bnRpbCBjbGVhcigpLgotICAgIGlmIChMSUtFTFkoZmly
c3QgPCBtYXhpbXVtQ291bnQoKSkpCisgICAgLy8gSW4gY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhl
IGJ1Y2tldCBzdGlja3MgaW4gdGhlIHRhYmxlIHVudGlsIGNsZWFyKCkuCisgICAgaWYgKExJS0VM
WShmaXJzdCA8IG1heGltdW1Db3VudCkpCiAgICAgICAgIC0tZmlyc3Q7Ci0gICAgaWYgKExJS0VM
WShzZWNvbmQgPCBtYXhpbXVtQ291bnQoKSkpCisgICAgaWYgKExJS0VMWShzZWNvbmQgPCBtYXhp
bXVtQ291bnQpKQogICAgICAgICAtLXNlY29uZDsKIH0KICAgICAKIHRlbXBsYXRlIDx1bnNpZ25l
ZCBrZXlCaXRzPgotaW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5Qml0cz46OmNsZWFyKCkKK2lu
bGluZSB2b2lkIENvdW50aW5nQmxvb21GaWx0ZXI8a2V5Qml0cz46OmNsZWFyKCkKIHsKLSAgICBt
ZW1zZXQobV90YWJsZSwgMCwgdGFibGVTaXplKTsKKyAgICBtX2J1Y2tldHMuZmlsbCgwKTsKIH0K
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKIHRlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotYm9v
bCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6bGlrZWx5RW1wdHkoKSBjb25zdAorYm9vbCBDb3VudGlu
Z0Jsb29tRmlsdGVyPGtleUJpdHM+OjpsaWtlbHlFbXB0eSgpIGNvbnN0CiB7Ci0gICAgZm9yIChz
aXplX3QgbiA9IDA7IG4gPCB0YWJsZVNpemU7ICsrbikgewotICAgICAgICBpZiAobV90YWJsZVtu
XSAmJiBtX3RhYmxlW25dICE9IG1heGltdW1Db3VudCgpKQorICAgIGZvciAoYXV0byYgYnVja2V0
IDogbV9idWNrZXRzKSB7CisgICAgICAgIGlmIChidWNrZXQgJiYgYnVja2V0ICE9IG1heGltdW1D
b3VudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHRlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotYm9vbCBCbG9vbUZpbHRlcjxrZXlC
aXRzPjo6aXNDbGVhcigpIGNvbnN0Citib29sIENvdW50aW5nQmxvb21GaWx0ZXI8a2V5Qml0cz46
OmlzQ2xlYXIoKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgdGFibGVTaXpl
OyArK24pIHsKLSAgICAgICAgaWYgKG1fdGFibGVbbl0pCisgICAgZm9yIChhdXRvJiBidWNrZXQg
OiBtX2J1Y2tldHMpIHsKKyAgICAgICAgaWYgKGJ1Y2tldCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzMsNSArMjI4LDYgQEAgYm9vbCBC
bG9vbUZpbHRlcjxrZXlCaXRzPjo6aXNDbGVhcigpIGNvbgogfQogCiB1c2luZyBXVEY6OkJsb29t
RmlsdGVyOwordXNpbmcgV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVyOwogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4MjMxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50aW5nIGJsb29tIGZp
bHRlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JG
aWx0ZXI6OnNldHVwUGFyZW50U3RhY2spOgorICAgICAgICAqIGNzcy9TZWxlY3RvckZpbHRlci5o
OgorCisgICAgICAgIFVwZGF0ZSBuYW1lcy4KKwogMjAxNS0wNC0wMSBYYWJpZXIgUm9kcmlndWV6
IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgPHlvdWVubi5m
YWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gU3BsaXQgUmVhZGFi
bGVTdHJlYW0vUmVhZGVyIGltcGxlbWVudGF0aW9uIGFjY29yZGluZyBzb3VyY2UgdHlwZSAoSlMg
dnMgbmF0aXZlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCShyZXZp
c2lvbiAxODIyNzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU2VsZWN0b3JGaWx0ZXI6OnNldHVw
UGFyZW50U3RhY2soRWwKICAgICBBU1NFUlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1f
YW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKICAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3Jl
ZCBiZWZvcmUuCiAgICAgbV9wYXJlbnRTdGFjay5zaHJpbmsoMCk7Ci0gICAgbV9hbmNlc3Rvcklk
ZW50aWZpZXJGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb29tRmlsdGVyPGJsb29tRmlsdGVy
S2V5Qml0cz4+KCk7CisgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENvdW50aW5nQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPj4oKTsKICAgICAv
LyBGYXN0IHZlcnNpb24gaWYgcGFyZW50IGlzIGEgcm9vdCBlbGVtZW50OgogICAgIGlmICghcGFy
ZW50LT5wYXJlbnROb2RlKCkgJiYgIXBhcmVudC0+aXNTaGFkb3dSb290KCkpIHsKICAgICAgICAg
cHVzaFBhcmVudFN0YWNrRnJhbWUocGFyZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckZpbHRlci5oCShyZXZpc2lvbiAxODIyNzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogCiAg
ICAgLy8gV2l0aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRh
YmxlIGhhcyBmYWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmxv
b21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPj4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENvdW50aW5nQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlC
aXRzPj4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7CiB9OwogCiB0ZW1wbGF0ZSA8dW5zaWdu
ZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudD4KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjMxMykKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA0LTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50aW5nIGJs
b29tIGZpbHRlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5j
cHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21IYXNoZXMp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDQtMDEgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgZmlsdGVyLXdlYmtpdC1idWls
ZCBzaG91bGQgZmlsdGVyIG91dCAiY3JlYXRlZCBieSBhbiB1bnN1cHBvcnRlZCBYQ0RlcGVuZGVu
Y3lHcmFwaCBidWlsZCIgbGluZXMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxODIyNzApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4Miw3IEBACiAJCUNF
QTZDRjI4MTlDQ0Y2OUQwMDY0RjVBNyAvKiBvcGVuLWFuZC1jbG9zZS13aW5kb3cuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUE2Q0Yy
NzE5Q0NGNjlEMDA2NEY1QTcgLyogb3Blbi1hbmQtY2xvc2Utd2luZG93Lmh0bWwgKi87IH07CiAJ
CUUxMjIwRENBMTU1QjI4QUEwMDEzRTJGQyAvKiBNZW1vcnlDYWNoZURpc2FibGVXaXRoaW5SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjIwREM5MTU1QjI4N0QwMDEzRTJGQyAvKiBNZW1vcnlDYWNo
ZURpc2FibGVXaXRoaW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sICovOyB9OwogCQlFMTk0RTFC
RDE3N0U1M0M3MDA5QzRENEUgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE5NEUxQkMxNzdFNTM0QTAwOUM0RDRFIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2VpdmVSZXNw
b25zZS5odG1sICovOyB9OworCQlFNDAwMTkzMzFBQ0U5Qjg4MDAxQjBBMkEgLyogQmxvb21GaWx0
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQw
MDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJsb29tRmlsdGVyLmNwcCAqLzsgfTsKIAkJRjY2MEFB
MTExNUE1RjYzMTAwM0ExMjQzIC8qIEdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YUNhbGxiYWNrX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNjYwQUEwRjE1QTVGNjI0MDAzQTEyNDMgLyogR2V0SW5qZWN0ZWRCdW5k
bGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsKIAkJRjY2
MEFBMTUxNUE2MUFCRjAwM0ExMjQzIC8qIEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YUNhbGxiYWNrV2luc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjY2MEFBMTQxNUE2MUFCRjAwM0ExMjQzIC8qIEluamVjdGVkQnVu
ZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2luc19CdW5kbGUuY3BwICovOyB9Owog
CQlGNkI3QkU5NTE3NDY5MjEyMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NkI3QkU5MjE3NDY5MUVGMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRs
ZS5jcHAgKi87IH07CkBAIC02ODcsNiArNjg4LDcgQEAKIAkJRTEyMjBEQzkxNTVCMjg3RDAwMTNF
MkZDIC8qIE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9hZERlbGVnYXRlLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBNZW1vcnlDYWNoZURpc2FibGVXaXRoaW5SZXNv
dXJjZUxvYWREZWxlZ2F0ZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk0
RTFCQTE3N0U1MTQ1MDA5QzRENEUgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RvcExvYWRpbmdG
cm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTk0RTFCQzE3N0U1MzRBMDA5QzRENEUgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3Bv
bnNlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSBTdG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UuaHRt
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJB
IC8qIEJsb29tRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJsb29tRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5MDI5Njcx
NEUyRTNBNDAwMkJFREQxIC8qIFR5cGluZ1N0eWxlQ3Jhc2gubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUeXBpbmdTdHlsZUNyYXNoLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGVxdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGM0ZDM0VFMjEzNjc4QjczMDAxMjZBNjUgLyogbGliZ3Rlc3QuYSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJn
dGVzdC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTAyNSw2ICsx
MDI3LDcgQEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3RyaW5nLmNw
cCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNP
cGVyYXRpb25zLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmlu
Zy5jcHAgKi8sCisJCQkJRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJsb29tRmlsdGVyLmNw
cCAqLywKIAkJCQk3QUEwMjFCQTFBQjA5RUE3MDA1Mjk1M0YgLyogRGF0ZU1hdGguY3BwICovLAog
CQkJCUU0QTc1N0QzMTc4QUVBNUIwMEI1RDdBNCAvKiBEZXF1ZS5jcHAgKi8sCiAJCQkJMUFBOUU1
NTcxNDk4MEE5OTAwMDAxQThBIC8qIEZ1bmN0aW9uYWwuY3BwICovLApAQCAtMTUxOCw2ICsxNTIx
LDcgQEAKIAkJCQk3Q0NFN0YxNjFBNDExQUU2MDA0NDdDNEMgLyogVGVybWluYXRlVHdpY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTkxQTQxMUExRDAwNDQ3QzRDIC8qIFRlc3RCcm93
c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VBQTFB
NDExQTI0MDA0NDdDNEMgLyogVGVzdFByb3RvY29sLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTQw
MDE5MzMxQUNFOUI4ODAwMUIwQTJBIC8qIEJsb29tRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RUFFMUE0MTFBMzQwMDQ0N0M0QyAvKiBUZXN0c0NvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDRTdFREQxQTQxMUE5MjAwNDQ3QzRDIC8qIFRpbWVSYW5nZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDMxQTQxMUE3RTAwNDQ3QzRDIC8qIFR5cGluZ1N0
eWxlQ3Jhc2gubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx3
dGYvQmxvb21GaWx0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CisKK25hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gZ2VuZXJhdGVS
YW5kb21IYXNoZXMoc2l6ZV90IGhhc2hDb3VudCkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGhh
c2hlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kpCisgICAg
ICAgIGhhc2hlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICog
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CisgICAgcmV0dXJuIGhhc2hl
czsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIEJhc2ljKQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGhhc2hDb3VudCA9IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhh
c2hlcyhoYXNoQ291bnQpOworCisgICAgQmxvb21GaWx0ZXI8MTY+IGZpbHRlcjsKKyAgICBmb3Ig
KGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKworICAgIGZv
ciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29u
dGFpbihoYXNoKSk7CisKKyAgICBhdXRvIG1vcmVIYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhhc2hl
cyhoYXNoQ291bnQpOworICAgIHVuc2lnbmVkIG1heUNvbnRhaW5Db3VudCA9IDA7CisgICAgZm9y
IChhdXRvIGhhc2ggOiBtb3JlSGFzaGVzKQorICAgICAgICBtYXlDb250YWluQ291bnQgKz0gZmls
dGVyLm1heUNvbnRhaW4oaGFzaCkgPyAxIDogMDsKKyAgICAvLyBGYWxzZSBwb3NpdGl2ZSByYXRl
IHNob3VsZCBiZSB+MC4wOSUgc28gdGhpcyBzaHVsZCBiZSBhbHdheXMgdHJ1ZS4KKyAgICBFWFBF
Q1RfVFJVRShtYXlDb250YWluQ291bnQgPCBoYXNoQ291bnQgLyAxMCk7CisKKyAgICBmb3IgKGF1
dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisgICAgICAgIGZpbHRlci5hZGQoaGFzaCk7CisKKyAgICBm
b3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RSVUUoZmlsdGVyLm1heUNv
bnRhaW4oaGFzaCkpOworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAg
RVhQRUNUX1RSVUUoZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworfQorCitURVNUKFdURl9CbG9v
bUZpbHRlciwgQmFzaWNDb3VudGluZykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBoYXNoQ291bnQg
PSAxMDAwOworICAgIGF1dG8gaGFzaGVzID0gZ2VuZXJhdGVSYW5kb21IYXNoZXMoaGFzaENvdW50
KTsKKworICAgIENvdW50aW5nQmxvb21GaWx0ZXI8MTY+IGZpbHRlcjsKKyAgICBmb3IgKGF1dG8g
aGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKworICAgIGZvciAoYXV0
byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbiho
YXNoKSk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFk
ZChoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBFQ1Rf
VFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhh
c2hlcykKKyAgICAgICAgZmlsdGVyLnJlbW92ZShoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNo
IDogaGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7
CisKKyAgICBhdXRvIG1vcmVIYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhhc2hlcyhoYXNoQ291bnQp
OworICAgIHVuc2lnbmVkIG1heUNvbnRhaW5Db3VudCA9IDA7CisgICAgZm9yIChhdXRvIGhhc2gg
OiBtb3JlSGFzaGVzKQorICAgICAgICBtYXlDb250YWluQ291bnQgKz0gZmlsdGVyLm1heUNvbnRh
aW4oaGFzaCkgPyAxIDogMDsKKyAgICAvLyBGYWxzZSBwb3NpdGl2ZSByYXRlIGlzIH4wLjA5JSBz
byB0aGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZS4KKyAgICBFWFBFQ1RfVFJVRShtYXlDb250YWlu
Q291bnQgPCBoYXNoQ291bnQgLyAxMCk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNo
ZXMpCisgICAgICAgIGZpbHRlci5hZGQoaGFzaCk7CisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNo
ZXMpCisgICAgICAgIGZpbHRlci5yZW1vdmUoaGFzaCk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6
IG1vcmVIYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gp
KTsKKworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgZmlsdGVyLnJl
bW92ZShoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBF
Q1RfVFJVRSghZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworICAgIGZvciAoYXV0byBoYXNoIDog
bW9yZUhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RSVUUoIWZpbHRlci5tYXlDb250YWluKGhhc2gp
KTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIENsZWFyKQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGhhc2hDb3VudCA9IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhh
c2hlcyhoYXNoQ291bnQpOworCisgICAgQmxvb21GaWx0ZXI8MTY+IGZpbHRlcjsKKyAgICBmb3Ig
KGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKworICAgIGZp
bHRlci5jbGVhcigpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIEVY
UEVDVF9UUlVFKCFmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7Cit9CisKK1RFU1QoV1RGX0Jsb29t
RmlsdGVyLCBDbGVhckNvdW50aW5nKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGhhc2hDb3VudCA9
IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhhc2hlcyhoYXNoQ291bnQp
OworCisgICAgQ291bnRpbmdCbG9vbUZpbHRlcjwxNj4gZmlsdGVyOworICAgIGZvciAoYXV0byBo
YXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gpOworICAgIGZvciAoYXV0byBo
YXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gpOworCisgICAgZmlsdGVyLmNs
ZWFyKCk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RS
VUUoIWZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIs
IENvdW50aW5nT3ZlcmZsb3cpCit7CisgICAgY29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAw
MDsKKyAgICBhdXRvIGhhc2hlcyA9IGdlbmVyYXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisK
KyAgICBDb3VudGluZ0Jsb29tRmlsdGVyPDE2PiBmaWx0ZXI7CisgICAgZm9yIChhdXRvIGhhc2gg
OiBoYXNoZXMpCisgICAgICAgIGZpbHRlci5hZGQoaGFzaCk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmlsdGVyLm1heGltdW1Db3VudCArIDEwMDsgKytpKQorICAgICAgICBmaWx0
ZXIuYWRkKGhhc2hlc1swXSk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAg
ICAgRVhQRUNUX1RSVUUoZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworCisgICAgZm9yIChhdXRv
IGhhc2ggOiBoYXNoZXMpCisgICAgICAgIGZpbHRlci5yZW1vdmUoaGFzaCk7CisKKyAgICB1bnNp
Z25lZCBtYXlDb250YWluQ291bnQgPSAwOworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKSB7
CisgICAgICAgIGlmIChoYXNoID09IGhhc2hlc1swXSkKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWF5
Q29udGFpbkNvdW50ICs9IGZpbHRlci5tYXlDb250YWluKGhhc2gpID8gMSA6IDA7CisgICAgfQor
ICAgIC8vIEZhbHNlIHBvc2l0aXZlIHJhdGUgc2hvdWxkIGJlIHZlcnkgbG93LgorICAgIEVYUEVD
VF9UUlVFKG1heUNvbnRhaW5Db3VudCA8IGhhc2hDb3VudCAvIDEwMCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyLm1heGltdW1Db3VudCArIDEwMDsgKytpKQorICAgICAg
ICBmaWx0ZXIucmVtb3ZlKGhhc2hlc1swXSk7CisKKyAgICAvLyBUaGUgYnVja2V0IGhhcyBvdmVy
Zmxvd2VkIGFuZCBpcyBzdHVjay4KKyAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbiho
YXNoZXNbMF0pKTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIENvbWJpbmUpCit7CisgICAg
Y29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAwMDsKKyAgICBhdXRvIGhhc2hlcyA9IGdlbmVy
YXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisKKyAgICBCbG9vbUZpbHRlcjwxNj4gZmlsdGVy
OworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gp
OworCisgICAgYXV0byBtb3JlSGFzaGVzID0gZ2VuZXJhdGVSYW5kb21IYXNoZXMoaGFzaENvdW50
KTsKKworICAgIEJsb29tRmlsdGVyPDE2PiBhbm90aGVyRmlsdGVyOworICAgIGZvciAoYXV0byBo
YXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgYW5vdGhlckZpbHRlci5hZGQoaGFzaCk7CisKKyAg
ICBmaWx0ZXIuYWRkKGFub3RoZXJGaWx0ZXIpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNo
ZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKyAgICBm
b3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5t
YXlDb250YWluKGhhc2gpKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250065</attachid>
            <date>2015-04-03 05:19:52 -0700</date>
            <delta_ts>2015-04-03 07:01:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bloom-filter-non-counting-2.patch</filename>
            <type>text/plain</type>
            <size>24650</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODIzMTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50aW5nIEJsb29tIGZpbHRlciBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGEgdHJhZGl0aW9uYWwgc2luZ2xlLWJpdC1wZXItYnVja2V0IEJsb29tIGZpbHRl
ciBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgY291bnRpbmcgaW1wbGVtZW50YXRpb24uCisK
KyAgICAgICAgLSByZW5hbWUgQmxvb21GaWx0ZXIgLT4gQ291bnRpbmdCbG9vbUZpbHRlci4KKyAg
ICAgICAgLSBhZGQgYSBuZXcgYmFzaWMgQmxvb21GaWx0ZXIgdHlwZS4KKyAgICAgICAgLSB1cGRh
dGUgc29tZSB0ZXJtaW5vbG9neSB0byBtYXRjaCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0Jsb29tX2ZpbHRlciBhbmQgbW9kZXJuaXplIHRoZSBjb2RlIGEgYml0LgorICAgICAgICAtIGFk
ZCBBUEkgdGVzdHMuCisKKyAgICAgICAgKiB3dGYvQmxvb21GaWx0ZXIuaDoKKyAgICAgICAgKFdU
Rjo6Qmxvb21GaWx0ZXI6OkJsb29tRmlsdGVyKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6
OmFkZCk6CisKKyAgICAgICAgICAgIEFsc28gc3VwcG9ydCBtZXJnaW5nLgorCisgICAgICAgIChX
VEY6OkJsb29tRmlsdGVyOjptYXlDb250YWluKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6
OmFycmF5SW5kZXgpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6Yml0TWFzayk6CisgICAg
ICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+OjptYXlDb250YWluKToKKyAgICAgICAgKFdU
Rjo6Qmxvb21GaWx0ZXI8a2V5Qml0cz46OmFkZCk6CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVy
PGtleUJpdHM+Ojppc0JpdFNldCk6CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+
OjpzZXRCaXQpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjxrZXlCaXRzPjo6Y2xlYXIpOgor
ICAgICAgICAoV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVyOjpDb3VudGluZ0Jsb29tRmlsdGVyKToK
KyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9vbUZpbHRlcjo6bWF5Q29udGFpbik6CisgICAgICAg
IChXVEY6OkNvdW50aW5nQmxvb21GaWx0ZXI6OmZpcnN0QnVja2V0KToKKyAgICAgICAgKFdURjo6
Q291bnRpbmdCbG9vbUZpbHRlcjo6c2Vjb25kQnVja2V0KToKKyAgICAgICAgKFdURjo6Q291bnRp
bmdCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9v
bUZpbHRlcjxrZXlCaXRzPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVy
PGtleUJpdHM+OjpsaWtlbHlFbXB0eSk6CisgICAgICAgIChXVEY6OkNvdW50aW5nQmxvb21GaWx0
ZXI8a2V5Qml0cz46OmlzQ2xlYXIpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6bWF4aW11
bUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OmZpcnN0U2xvdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyOjpzZWNvbmRTbG90KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI8a2V5Qml0cz46OnJlbW92ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+OjpsaWtlbHlFbXB0eSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+Ojppc0NsZWFyKTogRGVsZXRl
ZC4KKwogMDE1LTA0LTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBWYWx1ZSBhc3NpZ25tZW50IG9wZXJhdG9yIG9mIE9wdGlvbmFsIHNob3VsZCBiZSBzdHJp
Y3RlcgpJbmRleDogU291cmNlL1dURi93dGYvQmxvb21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CbG9vbUZpbHRlci5oCShyZXZpc2lvbiAxODIyNzApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CbG9vbUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyOSArMjYsMTE2IEBACiAj
aWZuZGVmIEJsb29tRmlsdGVyX2gKICNkZWZpbmUgQmxvb21GaWx0ZXJfaAogCisjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCi0vLyBDb3VudGluZyBibG9vbSBmaWx0ZXIgd2l0aCBrPTIgYW5kIDggYml0IGNvdW50
ZXJzLiBVc2VzIDJea2V5Qml0cyBieXRlcyBvZiBtZW1vcnkuCisvLyBCbG9vbSBmaWx0ZXIgd2l0
aCBrPTIuIFVzZXMgMl5rZXlCaXRzLzggYnl0ZXMgb2YgbWVtb3J5LgogLy8gRmFsc2UgcG9zaXRp
dmUgcmF0ZSBpcyBhcHByb3hpbWF0ZWx5ICgxLWVeKC0ybi9tKSleMiwgd2hlcmUgbiBpcyB0aGUg
bnVtYmVyIG9mIHVuaXF1ZSAKIC8vIGtleXMgYW5kIG0gaXMgdGhlIHRhYmxlIHNpemUgKD09Ml5r
ZXlCaXRzKS4KKy8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jsb29tX2ZpbHRl
cgogdGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CiBjbGFzcyBCbG9vbUZpbHRlciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCB0YWJsZVNpemUgPSAxIDw8IGtleUJpdHM7CisKKyAgICBCbG9vbUZpbHRlcigpOworCisgICAg
dm9pZCBhZGQodW5zaWduZWQgaGFzaCk7CisgICAgdm9pZCBhZGQoY29uc3QgQmxvb21GaWx0ZXIm
KTsKKworICAgIC8vIFRoZSBmaWx0ZXIgbWF5IGdpdmUgZmFsc2UgcG9zaXRpdmVzIChjbGFpbSBp
dCBtYXkgY29udGFpbiBhIGtleSBpdCBkb2Vzbid0KQorICAgIC8vIGJ1dCBuZXZlciBmYWxzZSBu
ZWdhdGl2ZXMgKGNsYWltIGl0IGRvZXNuJ3QgY29udGFpbiBhIGtleSBpdCBkb2VzKS4KKyAgICBi
b29sIG1heUNvbnRhaW4odW5zaWduZWQgaGFzaCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBjbGVh
cigpOworCisgICAgdm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpIHsgYWRkKHN0
cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIHZvaWQgYWRkKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKSB7IGFkZChzdHJpbmcuaW1wbCgpLT5oYXNoKCkpOyB9CisgICAgYm9vbCBtYXlD
b250YWluKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtYXlDb250
YWluKHN0cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIGJvb2wgbWF5Q29udGFp
bihjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbWF5Q29udGFpbihzdHJpbmcu
aW1wbCgpLT5oYXNoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGJpdHNQZXJQb3NpdGlvbiA9IDggKiBzaXplb2YodW5zaWduZWQpOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBrZXlNYXNrID0gKDEgPDwga2V5Qml0cykgLSAxOwotICAgIHN0YXRpYyB1aW50
OF90IG1heGltdW1Db3VudCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46
Om1heCgpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGFycmF5SW5kZXgodW5zaWduZWQga2V5KSB7
IHJldHVybiBrZXkgLyBiaXRzUGVyUG9zaXRpb247IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgYml0
TWFzayh1bnNpZ25lZCBrZXkpIHsgcmV0dXJuIDEgPDwgKGtleSAlIGJpdHNQZXJQb3NpdGlvbik7
IH0KKworICAgIGJvb2wgaXNCaXRTZXQodW5zaWduZWQga2V5KSBjb25zdDsKKyAgICB2b2lkIHNl
dEJpdCh1bnNpZ25lZCBrZXkpOworCisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgdGFibGVTaXpl
IC8gYml0c1BlclBvc2l0aW9uPiBtX2JpdEFycmF5OworfTsKKwordGVtcGxhdGUgPHVuc2lnbmVk
IGtleUJpdHM+CitpbmxpbmUgQmxvb21GaWx0ZXI8a2V5Qml0cz46OkJsb29tRmlsdGVyKCkKKyAg
ICA6IG1fYml0QXJyYXkoKQoreworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQga2V5Qml0cz4KK2lu
bGluZSBib29sIEJsb29tRmlsdGVyPGtleUJpdHM+OjptYXlDb250YWluKHVuc2lnbmVkIGhhc2gp
IGNvbnN0Cit7CisgICAgLy8gVGhlIHRvcCBhbmQgYm90dG9tIGJpdHMgb2YgdGhlIGluY29taW5n
IGhhc2ggYXJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgYmxvb20gZmlsdGVyIGhhc2ggZnVuY3Rp
b25zLgorICAgIC8vIFRoaXMgd29ya3Mgd2VsbCBhcyBsb25nIGFzIHRoZSBmaWx0ZXIgc2l6ZSBp
cyBub3QgbXVjaCBhYm92ZSAyXjE2LgorICAgIHJldHVybiBpc0JpdFNldChoYXNoKSAmJiBpc0Jp
dFNldChoYXNoID4+IDE2KTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citpbmxp
bmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKHVuc2lnbmVkIGhhc2gpCit7CisgICAg
c2V0Qml0KGhhc2gpOworICAgIHNldEJpdChoYXNoID4+IDE2KTsKK30KKwordGVtcGxhdGUgPHVu
c2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKGNv
bnN0IEJsb29tRmlsdGVyJiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Yml0QXJyYXkuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYml0QXJyYXlbaV0gfD0gb3RoZXIubV9i
aXRBcnJheVtpXTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citib29sIEJsb29t
RmlsdGVyPGtleUJpdHM+Ojppc0JpdFNldCh1bnNpZ25lZCBrZXkpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgbWFza2VkS2V5ID0ga2V5ICYga2V5TWFzazsKKyAgICBBU1NFUlQoYXJyYXlJbmRleCht
YXNrZWRLZXkpIDwgbV9iaXRBcnJheS5zaXplKCkpOworICAgIHJldHVybiBtX2JpdEFycmF5W2Fy
cmF5SW5kZXgobWFza2VkS2V5KV0gJiBiaXRNYXNrKG1hc2tlZEtleSk7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBrZXlCaXRzPgordm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6c2V0Qml0KHVu
c2lnbmVkIGtleSkKK3sKKyAgICB1bnNpZ25lZCBtYXNrZWRLZXkgPSBrZXkgJiBrZXlNYXNrOwor
ICAgIEFTU0VSVChhcnJheUluZGV4KG1hc2tlZEtleSkgPCBtX2JpdEFycmF5LnNpemUoKSk7Cisg
ICAgbV9iaXRBcnJheVthcnJheUluZGV4KG1hc2tlZEtleSldIHw9IGJpdE1hc2sobWFza2VkS2V5
KTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6Y2xlYXIoKQoreworICAgIG1fYml0QXJyYXkuZmlsbCgwKTsKK30KKwor
Ly8gQ291bnRpbmcgYmxvb20gZmlsdGVyIHdpdGggOCBiaXQgY291bnRlcnMgYW5kIHRoZSBzYW1l
IGVycm9yIHJhdGVzIGFzIGFib3ZlLgorLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvQmxvb21fZmlsdGVyI0NvdW50aW5nX2ZpbHRlcnMKK3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlC
aXRzPgorY2xhc3MgQ291bnRpbmdCbG9vbUZpbHRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZVNpemUgPSAxIDw8
IGtleUJpdHM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1Db3VudCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpOwogICAgIAotICAgIEJsb29tRmlsdGVyKCkg
eyBjbGVhcigpOyB9CisgICAgQ291bnRpbmdCbG9vbUZpbHRlcigpOwogCiAgICAgdm9pZCBhZGQo
dW5zaWduZWQgaGFzaCk7CiAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaGFzaCk7CiAKICAgICAv
LyBUaGUgZmlsdGVyIG1heSBnaXZlIGZhbHNlIHBvc2l0aXZlcyAoY2xhaW0gaXQgbWF5IGNvbnRh
aW4gYSBrZXkgaXQgZG9lc24ndCkKICAgICAvLyBidXQgbmV2ZXIgZmFsc2UgbmVnYXRpdmVzIChj
bGFpbSBpdCBkb2Vzbid0IGNvbnRhaW4gYSBrZXkgaXQgZG9lcykuCi0gICAgYm9vbCBtYXlDb250
YWluKHVuc2lnbmVkIGhhc2gpIGNvbnN0IHsgcmV0dXJuIGZpcnN0U2xvdChoYXNoKSAmJiBzZWNv
bmRTbG90KGhhc2gpOyB9CisgICAgYm9vbCBtYXlDb250YWluKHVuc2lnbmVkIGhhc2gpIGNvbnN0
IHsgcmV0dXJuIGZpcnN0QnVja2V0KGhhc2gpICYmIHNlY29uZEJ1Y2tldChoYXNoKTsgfQogICAg
IAogICAgIC8vIFRoZSBmaWx0ZXIgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZSByZXVzZSBldmVuIGlm
IGFsbCBrZXlzIGFyZSByZW1vdmVkLgogICAgIC8vIE90aGVyd2lzZSBvdmVyZmxvd2VkIGtleXMg
d2lsbCBzdGljayBhcm91bmQuCkBAIC02OSw2MSArMTU2LDY5IEBAIHB1YmxpYzoKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIHVpbnQ4X3QmIGZpcnN0U2xvdCh1bnNpZ25lZCBoYXNoKSB7IHJldHVy
biBtX3RhYmxlW2hhc2ggJiBrZXlNYXNrXTsgfQotICAgIHVpbnQ4X3QmIHNlY29uZFNsb3QodW5z
aWduZWQgaGFzaCkgeyByZXR1cm4gbV90YWJsZVsoaGFzaCA+PiAxNikgJiBrZXlNYXNrXTsgfQot
ICAgIGNvbnN0IHVpbnQ4X3QmIGZpcnN0U2xvdCh1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVy
biBtX3RhYmxlW2hhc2ggJiBrZXlNYXNrXTsgfQotICAgIGNvbnN0IHVpbnQ4X3QmIHNlY29uZFNs
b3QodW5zaWduZWQgaGFzaCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVsoaGFzaCA+PiAxNikgJiBr
ZXlNYXNrXTsgfQorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrZXlNYXNrID0gKDEgPDwga2V5
Qml0cykgLSAxOwogCi0gICAgdWludDhfdCBtX3RhYmxlW3RhYmxlU2l6ZV07CisgICAgdWludDhf
dCYgZmlyc3RCdWNrZXQodW5zaWduZWQgaGFzaCkgeyByZXR1cm4gbV9idWNrZXRzW2hhc2ggJiBr
ZXlNYXNrXTsgfQorICAgIHVpbnQ4X3QmIHNlY29uZEJ1Y2tldCh1bnNpZ25lZCBoYXNoKSB7IHJl
dHVybiBtX2J1Y2tldHNbKGhhc2ggPj4gMTYpICYga2V5TWFza107IH0KKyAgICBjb25zdCB1aW50
OF90JiBmaXJzdEJ1Y2tldCh1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVybiBtX2J1Y2tldHNb
aGFzaCAmIGtleU1hc2tdOyB9CisgICAgY29uc3QgdWludDhfdCYgc2Vjb25kQnVja2V0KHVuc2ln
bmVkIGhhc2gpIGNvbnN0IHsgcmV0dXJuIG1fYnVja2V0c1soaGFzaCA+PiAxNikgJiBrZXlNYXNr
XTsgfQorCisgICAgc3RkOjphcnJheTx1aW50OF90LCB0YWJsZVNpemU+IG1fYnVja2V0czsKIH07
Ci0gICAgCisKIHRlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotaW5saW5lIHZvaWQgQmxvb21G
aWx0ZXI8a2V5Qml0cz46OmFkZCh1bnNpZ25lZCBoYXNoKQoraW5saW5lIENvdW50aW5nQmxvb21G
aWx0ZXI8a2V5Qml0cz46OkNvdW50aW5nQmxvb21GaWx0ZXIoKQorICAgIDogbV9idWNrZXRzKCkK
IHsKLSAgICB1aW50OF90JiBmaXJzdCA9IGZpcnN0U2xvdChoYXNoKTsKLSAgICB1aW50OF90JiBz
ZWNvbmQgPSBzZWNvbmRTbG90KGhhc2gpOwotICAgIGlmIChMSUtFTFkoZmlyc3QgPCBtYXhpbXVt
Q291bnQoKSkpCit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgoraW5saW5lIHZvaWQg
Q291bnRpbmdCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKHVuc2lnbmVkIGhhc2gpCit7CisgICAg
YXV0byYgZmlyc3QgPSBmaXJzdEJ1Y2tldChoYXNoKTsKKyAgICBhdXRvJiBzZWNvbmQgPSBzZWNv
bmRCdWNrZXQoaGFzaCk7CisgICAgaWYgKExJS0VMWShmaXJzdCA8IG1heGltdW1Db3VudCkpCiAg
ICAgICAgICsrZmlyc3Q7Ci0gICAgaWYgKExJS0VMWShzZWNvbmQgPCBtYXhpbXVtQ291bnQoKSkp
CisgICAgaWYgKExJS0VMWShzZWNvbmQgPCBtYXhpbXVtQ291bnQpKQogICAgICAgICArK3NlY29u
ZDsKIH0KIAogdGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Ci1pbmxpbmUgdm9pZCBCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6cmVtb3ZlKHVuc2lnbmVkIGhhc2gpCitpbmxpbmUgdm9pZCBDb3VudGlu
Z0Jsb29tRmlsdGVyPGtleUJpdHM+OjpyZW1vdmUodW5zaWduZWQgaGFzaCkKIHsKLSAgICB1aW50
OF90JiBmaXJzdCA9IGZpcnN0U2xvdChoYXNoKTsKLSAgICB1aW50OF90JiBzZWNvbmQgPSBzZWNv
bmRTbG90KGhhc2gpOworICAgIGF1dG8mIGZpcnN0ID0gZmlyc3RCdWNrZXQoaGFzaCk7CisgICAg
YXV0byYgc2Vjb25kID0gc2Vjb25kQnVja2V0KGhhc2gpOwogICAgIEFTU0VSVChmaXJzdCk7CiAg
ICAgQVNTRVJUKHNlY29uZCk7Ci0gICAgLy8gSW4gY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhlIHNs
b3Qgc3RpY2tzIGluIHRoZSB0YWJsZSB1bnRpbCBjbGVhcigpLgotICAgIGlmIChMSUtFTFkoZmly
c3QgPCBtYXhpbXVtQ291bnQoKSkpCisgICAgLy8gSW4gY2FzZSBvZiBhbiBvdmVyZmxvdywgdGhl
IGJ1Y2tldCBzdGlja3MgaW4gdGhlIHRhYmxlIHVudGlsIGNsZWFyKCkuCisgICAgaWYgKExJS0VM
WShmaXJzdCA8IG1heGltdW1Db3VudCkpCiAgICAgICAgIC0tZmlyc3Q7Ci0gICAgaWYgKExJS0VM
WShzZWNvbmQgPCBtYXhpbXVtQ291bnQoKSkpCisgICAgaWYgKExJS0VMWShzZWNvbmQgPCBtYXhp
bXVtQ291bnQpKQogICAgICAgICAtLXNlY29uZDsKIH0KICAgICAKIHRlbXBsYXRlIDx1bnNpZ25l
ZCBrZXlCaXRzPgotaW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5Qml0cz46OmNsZWFyKCkKK2lu
bGluZSB2b2lkIENvdW50aW5nQmxvb21GaWx0ZXI8a2V5Qml0cz46OmNsZWFyKCkKIHsKLSAgICBt
ZW1zZXQobV90YWJsZSwgMCwgdGFibGVTaXplKTsKKyAgICBtX2J1Y2tldHMuZmlsbCgwKTsKIH0K
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKIHRlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotYm9v
bCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6bGlrZWx5RW1wdHkoKSBjb25zdAorYm9vbCBDb3VudGlu
Z0Jsb29tRmlsdGVyPGtleUJpdHM+OjpsaWtlbHlFbXB0eSgpIGNvbnN0CiB7Ci0gICAgZm9yIChz
aXplX3QgbiA9IDA7IG4gPCB0YWJsZVNpemU7ICsrbikgewotICAgICAgICBpZiAobV90YWJsZVtu
XSAmJiBtX3RhYmxlW25dICE9IG1heGltdW1Db3VudCgpKQorICAgIGZvciAoYXV0byYgYnVja2V0
IDogbV9idWNrZXRzKSB7CisgICAgICAgIGlmIChidWNrZXQgJiYgYnVja2V0ICE9IG1heGltdW1D
b3VudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHRlbXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotYm9vbCBCbG9vbUZpbHRlcjxrZXlC
aXRzPjo6aXNDbGVhcigpIGNvbnN0Citib29sIENvdW50aW5nQmxvb21GaWx0ZXI8a2V5Qml0cz46
OmlzQ2xlYXIoKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgdGFibGVTaXpl
OyArK24pIHsKLSAgICAgICAgaWYgKG1fdGFibGVbbl0pCisgICAgZm9yIChhdXRvJiBidWNrZXQg
OiBtX2J1Y2tldHMpIHsKKyAgICAgICAgaWYgKGJ1Y2tldCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMzMsNSArMjI4LDYgQEAgYm9vbCBC
bG9vbUZpbHRlcjxrZXlCaXRzPjo6aXNDbGVhcigpIGNvbgogfQogCiB1c2luZyBXVEY6OkJsb29t
RmlsdGVyOwordXNpbmcgV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVyOwogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE4MjMxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50aW5nIGJsb29tIGZp
bHRlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBjc3MvU2VsZWN0b3JGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JG
aWx0ZXI6OnNldHVwUGFyZW50U3RhY2spOgorICAgICAgICAqIGNzcy9TZWxlY3RvckZpbHRlci5o
OgorCisgICAgICAgIFVwZGF0ZSBuYW1lcy4KKwogMjAxNS0wNC0wMSBYYWJpZXIgUm9kcmlndWV6
IENhbHZhciA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4gYW5kIFlvdWVubiBGYWJsZXQgPHlvdWVubi5m
YWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIFtTdHJlYW1zIEFQSV0gU3BsaXQgUmVhZGFi
bGVTdHJlYW0vUmVhZGVyIGltcGxlbWVudGF0aW9uIGFjY29yZGluZyBzb3VyY2UgdHlwZSAoSlMg
dnMgbmF0aXZlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmlsdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCShyZXZp
c2lvbiAxODIyNzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgU2VsZWN0b3JGaWx0ZXI6OnNldHVw
UGFyZW50U3RhY2soRWwKICAgICBBU1NFUlQobV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgPT0gIW1f
YW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyKTsKICAgICAvLyBLaWxsIHdoYXRldmVyIHdlIHN0b3Jl
ZCBiZWZvcmUuCiAgICAgbV9wYXJlbnRTdGFjay5zaHJpbmsoMCk7Ci0gICAgbV9hbmNlc3Rvcklk
ZW50aWZpZXJGaWx0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEJsb29tRmlsdGVyPGJsb29tRmlsdGVy
S2V5Qml0cz4+KCk7CisgICAgbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENvdW50aW5nQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPj4oKTsKICAgICAv
LyBGYXN0IHZlcnNpb24gaWYgcGFyZW50IGlzIGEgcm9vdCBlbGVtZW50OgogICAgIGlmICghcGFy
ZW50LT5wYXJlbnROb2RlKCkgJiYgIXBhcmVudC0+aXNTaGFkb3dSb290KCkpIHsKICAgICAgICAg
cHVzaFBhcmVudFN0YWNrRnJhbWUocGFyZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckZpbHRlci5oCShyZXZpc2lvbiAxODIyNzApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgogCiAg
ICAgLy8gV2l0aCAxMDAgdW5pcXVlIHN0cmluZ3MgaW4gdGhlIGZpbHRlciwgMl4xMiBzbG90IHRh
YmxlIGhhcyBmYWxzZSBwb3NpdGl2ZSByYXRlIG9mIH4wLjIlLgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBibG9vbUZpbHRlcktleUJpdHMgPSAxMjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmxv
b21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlCaXRzPj4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENvdW50aW5nQmxvb21GaWx0ZXI8Ymxvb21GaWx0ZXJLZXlC
aXRzPj4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7CiB9OwogCiB0ZW1wbGF0ZSA8dW5zaWdu
ZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjMx
MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEyIEBACisyMDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgbm9uLWNvdW50aW5nIEJsb29tIGZpbHRlciBpbXBsZW1lbnRhdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMzY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmg6CisKIDIwMTUtMDQtMDMgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIEdU
SyBidWlsZCBmaXguCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oCShyZXZpc2lvbiAxODIyNzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBwcml2YXRlOgogCiAgICAgc2l6
ZV90IG1fbWF4aW11bVNpemUgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIH07
CiAKLSAgICBCbG9vbUZpbHRlcjwyMD4gbV9jb250ZW50c0ZpbHRlcjsKKyAgICBDb3VudGluZ0Js
b29tRmlsdGVyPDIwPiBtX2NvbnRlbnRzRmlsdGVyOwogICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1f
aGFzUG9wdWxhdGVkQ29udGVudHNGaWx0ZXIgeyBmYWxzZSB9OwogCiAgICAgc3RkOjphdG9taWM8
c2l6ZV90PiBtX2FwcHJveGltYXRlU2l6ZSB7IDAgfTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjMxMykKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA0LTAzICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50
aW5nIGJsb29tIGZpbHRlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZp
bHRlci5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Z2VuZXJhdGVSYW5kb21I
YXNoZXMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDQtMDEgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgZmlsdGVyLXdlYmtp
dC1idWlsZCBzaG91bGQgZmlsdGVyIG91dCAiY3JlYXRlZCBieSBhbiB1bnN1cHBvcnRlZCBYQ0Rl
cGVuZGVuY3lHcmFwaCBidWlsZCIgbGluZXMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODIyNzApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4Miw3IEBA
CiAJCUNFQTZDRjI4MTlDQ0Y2OUQwMDY0RjVBNyAvKiBvcGVuLWFuZC1jbG9zZS13aW5kb3cuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RUE2Q0YyNzE5Q0NGNjlEMDA2NEY1QTcgLyogb3Blbi1hbmQtY2xvc2Utd2luZG93Lmh0bWwgKi87
IH07CiAJCUUxMjIwRENBMTU1QjI4QUEwMDEzRTJGQyAvKiBNZW1vcnlDYWNoZURpc2FibGVXaXRo
aW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjIwREM5MTU1QjI4N0QwMDEzRTJGQyAvKiBNZW1v
cnlDYWNoZURpc2FibGVXaXRoaW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sICovOyB9OwogCQlF
MTk0RTFCRDE3N0U1M0M3MDA5QzRENEUgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3Bv
bnNlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTE5NEUxQkMxNzdFNTM0QTAwOUM0RDRFIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2Vp
dmVSZXNwb25zZS5odG1sICovOyB9OworCQlFNDAwMTkzMzFBQ0U5Qjg4MDAxQjBBMkEgLyogQmxv
b21GaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJsb29tRmlsdGVyLmNwcCAqLzsgfTsKIAkJ
RjY2MEFBMTExNUE1RjYzMTAwM0ExMjQzIC8qIEdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRp
b25Vc2VyRGF0YUNhbGxiYWNrX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNjYwQUEwRjE1QTVGNjI0MDAzQTEyNDMgLyogR2V0SW5qZWN0
ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsK
IAkJRjY2MEFBMTUxNUE2MUFCRjAwM0ExMjQzIC8qIEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRp
b25Vc2VyRGF0YUNhbGxiYWNrV2luc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY2MEFBMTQxNUE2MUFCRjAwM0ExMjQzIC8qIEluamVj
dGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2luc19CdW5kbGUuY3BwICov
OyB9OwogCQlGNkI3QkU5NTE3NDY5MjEyMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNkI3QkU5MjE3NDY5MUVGMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
X0J1bmRsZS5jcHAgKi87IH07CkBAIC02ODcsNiArNjg4LDcgQEAKIAkJRTEyMjBEQzkxNTVCMjg3
RDAwMTNFMkZDIC8qIE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9hZERlbGVnYXRl
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBNZW1vcnlDYWNoZURpc2FibGVXaXRo
aW5SZXNvdXJjZUxvYWREZWxlZ2F0ZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMTk0RTFCQTE3N0U1MTQ1MDA5QzRENEUgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJl
c3BvbnNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU3RvcExv
YWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMTk0RTFCQzE3N0U1MzRBMDA5QzRENEUgLyogU3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2
ZVJlc3BvbnNlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBTdG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9u
c2UuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQwMDE5MzAxQUNFOUI1QzAw
MUIwQTJBIC8qIEJsb29tRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJsb29tRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ5
MDI5NjcxNEUyRTNBNDAwMkJFREQxIC8qIFR5cGluZ1N0eWxlQ3Jhc2gubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUeXBpbmdTdHlsZUNyYXNoLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVxdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGM0ZDM0VFMjEzNjc4QjczMDAxMjZBNjUgLyogbGliZ3Rlc3QuYSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGgg
PSBsaWJndGVzdC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTAy
NSw2ICsxMDI3LDcgQEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3Ry
aW5nLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRo
bWV0aWNPcGVyYXRpb25zLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyog
Q1N0cmluZy5jcHAgKi8sCisJCQkJRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJsb29tRmls
dGVyLmNwcCAqLywKIAkJCQk3QUEwMjFCQTFBQjA5RUE3MDA1Mjk1M0YgLyogRGF0ZU1hdGguY3Bw
ICovLAogCQkJCUU0QTc1N0QzMTc4QUVBNUIwMEI1RDdBNCAvKiBEZXF1ZS5jcHAgKi8sCiAJCQkJ
MUFBOUU1NTcxNDk4MEE5OTAwMDAxQThBIC8qIEZ1bmN0aW9uYWwuY3BwICovLApAQCAtMTUxOCw2
ICsxNTIxLDcgQEAKIAkJCQk3Q0NFN0YxNjFBNDExQUU2MDA0NDdDNEMgLyogVGVybWluYXRlVHdp
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQTkxQTQxMUExRDAwNDQ3QzRDIC8qIFRl
c3RCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VBQTFBNDExQTI0MDA0NDdDNEMgLyogVGVzdFByb3RvY29sLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJRTQwMDE5MzMxQUNFOUI4ODAwMUIwQTJBIC8qIEJsb29tRmlsdGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUFFMUE0MTFBMzQwMDQ0N0M0QyAvKiBUZXN0c0NvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFREQxQTQxMUE5MjAwNDQ3QzRDIC8qIFRpbWVSYW5n
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDMxQTQxMUE3RTAwNDQ3QzRDIC8qIFR5
cGluZ1N0eWxlQ3Jhc2gubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9CbG9vbUZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlIDx3dGYvQmxvb21GaWx0ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CisK
K25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gZ2Vu
ZXJhdGVSYW5kb21IYXNoZXMoc2l6ZV90IGhhc2hDb3VudCkKK3sKKyAgICBWZWN0b3I8dW5zaWdu
ZWQ+IGhhc2hlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaGFzaENvdW50OyArK2kp
CisgICAgICAgIGhhc2hlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJl
cigpICogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7CisgICAgcmV0dXJu
IGhhc2hlczsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIEJhc2ljKQoreworICAgIGNvbnN0
IHVuc2lnbmVkIGhhc2hDb3VudCA9IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0ZVJh
bmRvbUhhc2hlcyhoYXNoQ291bnQpOworCisgICAgQmxvb21GaWx0ZXI8MTY+IGZpbHRlcjsKKyAg
ICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKwor
ICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIu
bWF5Q29udGFpbihoYXNoKSk7CisKKyAgICBhdXRvIG1vcmVIYXNoZXMgPSBnZW5lcmF0ZVJhbmRv
bUhhc2hlcyhoYXNoQ291bnQpOworICAgIHVuc2lnbmVkIG1heUNvbnRhaW5Db3VudCA9IDA7Cisg
ICAgZm9yIChhdXRvIGhhc2ggOiBtb3JlSGFzaGVzKQorICAgICAgICBtYXlDb250YWluQ291bnQg
Kz0gZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkgPyAxIDogMDsKKyAgICAvLyBGYWxzZSBwb3NpdGl2
ZSByYXRlIGlzIH4wLjA5JSBzbyB0aGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZS4KKyAgICBFWFBF
Q1RfVFJVRShtYXlDb250YWluQ291bnQgPCBoYXNoQ291bnQgLyAxMCk7CisKKyAgICBmb3IgKGF1
dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisgICAgICAgIGZpbHRlci5hZGQoaGFzaCk7CisKKyAgICBm
b3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RSVUUoZmlsdGVyLm1heUNv
bnRhaW4oaGFzaCkpOworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAg
RVhQRUNUX1RSVUUoZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworfQorCitURVNUKFdURl9CbG9v
bUZpbHRlciwgQmFzaWNDb3VudGluZykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBoYXNoQ291bnQg
PSAxMDAwOworICAgIGF1dG8gaGFzaGVzID0gZ2VuZXJhdGVSYW5kb21IYXNoZXMoaGFzaENvdW50
KTsKKworICAgIENvdW50aW5nQmxvb21GaWx0ZXI8MTY+IGZpbHRlcjsKKyAgICBmb3IgKGF1dG8g
aGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKworICAgIGZvciAoYXV0
byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbiho
YXNoKSk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFk
ZChoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBFQ1Rf
VFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhh
c2hlcykKKyAgICAgICAgZmlsdGVyLnJlbW92ZShoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNo
IDogaGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7
CisKKyAgICBhdXRvIG1vcmVIYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhhc2hlcyhoYXNoQ291bnQp
OworICAgIHVuc2lnbmVkIG1heUNvbnRhaW5Db3VudCA9IDA7CisgICAgZm9yIChhdXRvIGhhc2gg
OiBtb3JlSGFzaGVzKQorICAgICAgICBtYXlDb250YWluQ291bnQgKz0gZmlsdGVyLm1heUNvbnRh
aW4oaGFzaCkgPyAxIDogMDsKKyAgICAvLyBGYWxzZSBwb3NpdGl2ZSByYXRlIGlzIH4wLjA5JSBz
byB0aGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZS4KKyAgICBFWFBFQ1RfVFJVRShtYXlDb250YWlu
Q291bnQgPCBoYXNoQ291bnQgLyAxMCk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNo
ZXMpCisgICAgICAgIGZpbHRlci5hZGQoaGFzaCk7CisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNo
ZXMpCisgICAgICAgIGZpbHRlci5yZW1vdmUoaGFzaCk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6
IG1vcmVIYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gp
KTsKKworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgZmlsdGVyLnJl
bW92ZShoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBFWFBF
Q1RfVFJVRSghZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworICAgIGZvciAoYXV0byBoYXNoIDog
bW9yZUhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RSVUUoIWZpbHRlci5tYXlDb250YWluKGhhc2gp
KTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIENsZWFyKQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGhhc2hDb3VudCA9IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhh
c2hlcyhoYXNoQ291bnQpOworCisgICAgQmxvb21GaWx0ZXI8MTY+IGZpbHRlcjsKKyAgICBmb3Ig
KGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKworICAgIGZp
bHRlci5jbGVhcigpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIEVY
UEVDVF9UUlVFKCFmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7Cit9CisKK1RFU1QoV1RGX0Jsb29t
RmlsdGVyLCBDbGVhckNvdW50aW5nKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGhhc2hDb3VudCA9
IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0ZVJhbmRvbUhhc2hlcyhoYXNoQ291bnQp
OworCisgICAgQ291bnRpbmdCbG9vbUZpbHRlcjwxNj4gZmlsdGVyOworICAgIGZvciAoYXV0byBo
YXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gpOworICAgIGZvciAoYXV0byBo
YXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gpOworCisgICAgZmlsdGVyLmNs
ZWFyKCk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RS
VUUoIWZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIs
IENvdW50aW5nT3ZlcmZsb3cpCit7CisgICAgY29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAw
MDsKKyAgICBhdXRvIGhhc2hlcyA9IGdlbmVyYXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisK
KyAgICBDb3VudGluZ0Jsb29tRmlsdGVyPDE2PiBmaWx0ZXI7CisgICAgZm9yIChhdXRvIGhhc2gg
OiBoYXNoZXMpCisgICAgICAgIGZpbHRlci5hZGQoaGFzaCk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmlsdGVyLm1heGltdW1Db3VudCArIDEwMDsgKytpKQorICAgICAgICBmaWx0
ZXIuYWRkKGhhc2hlc1swXSk7CisKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAg
ICAgRVhQRUNUX1RSVUUoZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworCisgICAgZm9yIChhdXRv
IGhhc2ggOiBoYXNoZXMpCisgICAgICAgIGZpbHRlci5yZW1vdmUoaGFzaCk7CisKKyAgICB1bnNp
Z25lZCBtYXlDb250YWluQ291bnQgPSAwOworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKSB7
CisgICAgICAgIGlmIChoYXNoID09IGhhc2hlc1swXSkKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWF5
Q29udGFpbkNvdW50ICs9IGZpbHRlci5tYXlDb250YWluKGhhc2gpID8gMSA6IDA7CisgICAgfQor
ICAgIC8vIEZhbHNlIHBvc2l0aXZlIHJhdGUgc2hvdWxkIGJlIHZlcnkgbG93LgorICAgIEVYUEVD
VF9UUlVFKG1heUNvbnRhaW5Db3VudCA8IGhhc2hDb3VudCAvIDEwMCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyLm1heGltdW1Db3VudCArIDEwMDsgKytpKQorICAgICAg
ICBmaWx0ZXIucmVtb3ZlKGhhc2hlc1swXSk7CisKKyAgICAvLyBUaGUgYnVja2V0IGhhcyBvdmVy
Zmxvd2VkIGFuZCBpcyBzdHVjay4KKyAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbiho
YXNoZXNbMF0pKTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIENvbWJpbmUpCit7CisgICAg
Y29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAwMDsKKyAgICBhdXRvIGhhc2hlcyA9IGdlbmVy
YXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisKKyAgICBCbG9vbUZpbHRlcjwxNj4gZmlsdGVy
OworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gp
OworCisgICAgYXV0byBtb3JlSGFzaGVzID0gZ2VuZXJhdGVSYW5kb21IYXNoZXMoaGFzaENvdW50
KTsKKworICAgIEJsb29tRmlsdGVyPDE2PiBhbm90aGVyRmlsdGVyOworICAgIGZvciAoYXV0byBo
YXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgYW5vdGhlckZpbHRlci5hZGQoaGFzaCk7CisKKyAg
ICBmaWx0ZXIuYWRkKGFub3RoZXJGaWx0ZXIpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNo
ZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKyAgICBm
b3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5t
YXlDb250YWluKGhhc2gpKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250068</attachid>
            <date>2015-04-03 07:01:32 -0700</date>
            <delta_ts>2015-04-03 10:24:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bloom-filter-non-counting-4.patch</filename>
            <type>text/plain</type>
            <size>24620</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODIzMTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTA0LTAzICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbm9uLWNvdW50aW5nIEJsb29tIGZpbHRlciBp
bXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQzMzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIGEgdHJhZGl0aW9uYWwgc2luZ2xlLWJpdC1wZXItYnVja2V0IEJsb29tIGZpbHRl
ciBpbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgY291bnRpbmcgaW1wbGVtZW50YXRpb24uCisK
KyAgICAgICAgLSByZW5hbWUgQmxvb21GaWx0ZXIgLT4gQ291bnRpbmdCbG9vbUZpbHRlci4KKyAg
ICAgICAgLSBhZGQgYSBuZXcgYmFzaWMgQmxvb21GaWx0ZXIgdHlwZS4KKyAgICAgICAgLSB1cGRh
dGUgc29tZSB0ZXJtaW5vbG9neSB0byBtYXRjaCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0Jsb29tX2ZpbHRlciBhbmQgbW9kZXJuaXplIHRoZSBjb2RlIGEgYml0LgorICAgICAgICAtIGFk
ZCBBUEkgdGVzdHMuCisKKyAgICAgICAgKiB3dGYvQmxvb21GaWx0ZXIuaDoKKyAgICAgICAgKFdU
Rjo6Qmxvb21GaWx0ZXI6OkJsb29tRmlsdGVyKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6
OmFkZCk6CisKKyAgICAgICAgICAgIEFsc28gc3VwcG9ydCBtZXJnaW5nLgorCisgICAgICAgIChX
VEY6OkJsb29tRmlsdGVyOjptYXlDb250YWluKToKKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6
OmFycmF5SW5kZXgpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6Yml0TWFzayk6CisgICAg
ICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+OjptYXlDb250YWluKToKKyAgICAgICAgKFdU
Rjo6Qmxvb21GaWx0ZXI8a2V5Qml0cz46OmFkZCk6CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVy
PGtleUJpdHM+Ojppc0JpdFNldCk6CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+
OjpzZXRCaXQpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjxrZXlCaXRzPjo6Y2xlYXIpOgor
ICAgICAgICAoV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVyOjpDb3VudGluZ0Jsb29tRmlsdGVyKToK
KyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9vbUZpbHRlcjo6bWF5Q29udGFpbik6CisgICAgICAg
IChXVEY6OkNvdW50aW5nQmxvb21GaWx0ZXI6OmZpcnN0QnVja2V0KToKKyAgICAgICAgKFdURjo6
Q291bnRpbmdCbG9vbUZpbHRlcjo6c2Vjb25kQnVja2V0KToKKyAgICAgICAgKFdURjo6Q291bnRp
bmdCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKToKKyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9v
bUZpbHRlcjxrZXlCaXRzPjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6Q291bnRpbmdCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpDb3VudGluZ0Jsb29tRmlsdGVy
PGtleUJpdHM+OjpsaWtlbHlFbXB0eSk6CisgICAgICAgIChXVEY6OkNvdW50aW5nQmxvb21GaWx0
ZXI8a2V5Qml0cz46OmlzQ2xlYXIpOgorICAgICAgICAoV1RGOjpCbG9vbUZpbHRlcjo6bWF4aW11
bUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI6OmZpcnN0U2xvdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyOjpzZWNvbmRTbG90KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6Qmxvb21GaWx0ZXI8a2V5Qml0cz46OnJlbW92ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+OjpsaWtlbHlFbXB0eSk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OkJsb29tRmlsdGVyPGtleUJpdHM+Ojppc0NsZWFyKTogRGVsZXRl
ZC4KKwogMDE1LTA0LTAxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBWYWx1ZSBhc3NpZ25tZW50IG9wZXJhdG9yIG9mIE9wdGlvbmFsIHNob3VsZCBiZSBzdHJp
Y3RlcgpJbmRleDogU291cmNlL1dURi93dGYvQmxvb21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CbG9vbUZpbHRlci5oCShyZXZpc2lvbiAxODIyNzApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9CbG9vbUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyOSArMjYsMTE2IEBACiAj
aWZuZGVmIEJsb29tRmlsdGVyX2gKICNkZWZpbmUgQmxvb21GaWx0ZXJfaAogCisjaW5jbHVkZSA8
YXJyYXk+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCi0vLyBDb3VudGluZyBibG9vbSBmaWx0ZXIgd2l0aCBrPTIgYW5kIDggYml0IGNvdW50
ZXJzLiBVc2VzIDJea2V5Qml0cyBieXRlcyBvZiBtZW1vcnkuCisvLyBCbG9vbSBmaWx0ZXIgd2l0
aCBrPTIuIFVzZXMgMl5rZXlCaXRzLzggYnl0ZXMgb2YgbWVtb3J5LgogLy8gRmFsc2UgcG9zaXRp
dmUgcmF0ZSBpcyBhcHByb3hpbWF0ZWx5ICgxLWVeKC0ybi9tKSleMiwgd2hlcmUgbiBpcyB0aGUg
bnVtYmVyIG9mIHVuaXF1ZSAKIC8vIGtleXMgYW5kIG0gaXMgdGhlIHRhYmxlIHNpemUgKD09Ml5r
ZXlCaXRzKS4KKy8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jsb29tX2ZpbHRl
cgogdGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CiBjbGFzcyBCbG9vbUZpbHRlciB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCB0YWJsZVNpemUgPSAxIDw8IGtleUJpdHM7CisKKyAgICBCbG9vbUZpbHRlcigpOworCisgICAg
dm9pZCBhZGQodW5zaWduZWQgaGFzaCk7CisgICAgdm9pZCBhZGQoY29uc3QgQmxvb21GaWx0ZXIm
KTsKKworICAgIC8vIFRoZSBmaWx0ZXIgbWF5IGdpdmUgZmFsc2UgcG9zaXRpdmVzIChjbGFpbSBp
dCBtYXkgY29udGFpbiBhIGtleSBpdCBkb2Vzbid0KQorICAgIC8vIGJ1dCBuZXZlciBmYWxzZSBu
ZWdhdGl2ZXMgKGNsYWltIGl0IGRvZXNuJ3QgY29udGFpbiBhIGtleSBpdCBkb2VzKS4KKyAgICBi
b29sIG1heUNvbnRhaW4odW5zaWduZWQgaGFzaCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBjbGVh
cigpOworCisgICAgdm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpIHsgYWRkKHN0
cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIHZvaWQgYWRkKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKSB7IGFkZChzdHJpbmcuaW1wbCgpLT5oYXNoKCkpOyB9CisgICAgYm9vbCBtYXlD
b250YWluKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKSBjb25zdCB7IHJldHVybiBtYXlDb250
YWluKHN0cmluZy5pbXBsKCktPmV4aXN0aW5nSGFzaCgpKTsgfQorICAgIGJvb2wgbWF5Q29udGFp
bihjb25zdCBTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbWF5Q29udGFpbihzdHJpbmcu
aW1wbCgpLT5oYXNoKCkpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGJpdHNQZXJQb3NpdGlvbiA9IDggKiBzaXplb2YodW5zaWduZWQpOwogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBrZXlNYXNrID0gKDEgPDwga2V5Qml0cykgLSAxOwotICAgIHN0YXRpYyB1aW50
OF90IG1heGltdW1Db3VudCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46
Om1heCgpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGFycmF5SW5kZXgodW5zaWduZWQga2V5KSB7
IHJldHVybiBrZXkgLyBiaXRzUGVyUG9zaXRpb247IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgYml0
TWFzayh1bnNpZ25lZCBrZXkpIHsgcmV0dXJuIDEgPDwgKGtleSAlIGJpdHNQZXJQb3NpdGlvbik7
IH0KKworICAgIGJvb2wgaXNCaXRTZXQodW5zaWduZWQga2V5KSBjb25zdDsKKyAgICB2b2lkIHNl
dEJpdCh1bnNpZ25lZCBrZXkpOworCisgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgdGFibGVTaXpl
IC8gYml0c1BlclBvc2l0aW9uPiBtX2JpdEFycmF5OworfTsKKwordGVtcGxhdGUgPHVuc2lnbmVk
IGtleUJpdHM+CitpbmxpbmUgQmxvb21GaWx0ZXI8a2V5Qml0cz46OkJsb29tRmlsdGVyKCkKKyAg
ICA6IG1fYml0QXJyYXkoKQoreworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQga2V5Qml0cz4KK2lu
bGluZSBib29sIEJsb29tRmlsdGVyPGtleUJpdHM+OjptYXlDb250YWluKHVuc2lnbmVkIGhhc2gp
IGNvbnN0Cit7CisgICAgLy8gVGhlIHRvcCBhbmQgYm90dG9tIGJpdHMgb2YgdGhlIGluY29taW5n
IGhhc2ggYXJlIHRyZWF0ZWQgYXMgaW5kZXBlbmRlbnQgYmxvb20gZmlsdGVyIGhhc2ggZnVuY3Rp
b25zLgorICAgIC8vIFRoaXMgd29ya3Mgd2VsbCBhcyBsb25nIGFzIHRoZSBmaWx0ZXIgc2l6ZSBp
cyBub3QgbXVjaCBhYm92ZSAyXjE2LgorICAgIHJldHVybiBpc0JpdFNldChoYXNoKSAmJiBpc0Jp
dFNldChoYXNoID4+IDE2KTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citpbmxp
bmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKHVuc2lnbmVkIGhhc2gpCit7CisgICAg
c2V0Qml0KGhhc2gpOworICAgIHNldEJpdChoYXNoID4+IDE2KTsKK30KKwordGVtcGxhdGUgPHVu
c2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKGNv
bnN0IEJsb29tRmlsdGVyJiBvdGhlcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Yml0QXJyYXkuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYml0QXJyYXlbaV0gfD0gb3RoZXIubV9i
aXRBcnJheVtpXTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+Citib29sIEJsb29t
RmlsdGVyPGtleUJpdHM+Ojppc0JpdFNldCh1bnNpZ25lZCBrZXkpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgbWFza2VkS2V5ID0ga2V5ICYga2V5TWFzazsKKyAgICBBU1NFUlQoYXJyYXlJbmRleCht
YXNrZWRLZXkpIDwgbV9iaXRBcnJheS5zaXplKCkpOworICAgIHJldHVybiBtX2JpdEFycmF5W2Fy
cmF5SW5kZXgobWFza2VkS2V5KV0gJiBiaXRNYXNrKG1hc2tlZEtleSk7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBrZXlCaXRzPgordm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6c2V0Qml0KHVu
c2lnbmVkIGtleSkKK3sKKyAgICB1bnNpZ25lZCBtYXNrZWRLZXkgPSBrZXkgJiBrZXlNYXNrOwor
ICAgIEFTU0VSVChhcnJheUluZGV4KG1hc2tlZEtleSkgPCBtX2JpdEFycmF5LnNpemUoKSk7Cisg
ICAgbV9iaXRBcnJheVthcnJheUluZGV4KG1hc2tlZEtleSldIHw9IGJpdE1hc2sobWFza2VkS2V5
KTsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBCbG9vbUZp
bHRlcjxrZXlCaXRzPjo6Y2xlYXIoKQoreworICAgIG1fYml0QXJyYXkuZmlsbCgwKTsKK30KKwor
Ly8gQ291bnRpbmcgYmxvb20gZmlsdGVyIHdpdGggOCBiaXQgY291bnRlcnMuIFVzZXMgMl5rZXlC
aXRzIGJ5dGVzIG9mIG1lbW9yeS4gRXJyb3IgcmF0ZXMgYXMgYWJvdmUuCisvLyBTZWUgaHR0cDov
L2VuLndpa2lwZWRpYS5vcmcvd2lraS9CbG9vbV9maWx0ZXIjQ291bnRpbmdfZmlsdGVycwordGVt
cGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CitjbGFzcyBDb3VudGluZ0Jsb29tRmlsdGVyIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHRhYmxlU2l6ZSA9IDEgPDwga2V5Qml0czsKKyAgICBzdGF0aWMgdW5zaWduZWQgbWF4aW11
bUNvdW50KCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCk7IH0K
ICAgICAKLSAgICBCbG9vbUZpbHRlcigpIHsgY2xlYXIoKTsgfQorICAgIENvdW50aW5nQmxvb21G
aWx0ZXIoKTsKIAogICAgIHZvaWQgYWRkKHVuc2lnbmVkIGhhc2gpOwogICAgIHZvaWQgcmVtb3Zl
KHVuc2lnbmVkIGhhc2gpOwogCiAgICAgLy8gVGhlIGZpbHRlciBtYXkgZ2l2ZSBmYWxzZSBwb3Np
dGl2ZXMgKGNsYWltIGl0IG1heSBjb250YWluIGEga2V5IGl0IGRvZXNuJ3QpCiAgICAgLy8gYnV0
IG5ldmVyIGZhbHNlIG5lZ2F0aXZlcyAoY2xhaW0gaXQgZG9lc24ndCBjb250YWluIGEga2V5IGl0
IGRvZXMpLgotICAgIGJvb2wgbWF5Q29udGFpbih1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVy
biBmaXJzdFNsb3QoaGFzaCkgJiYgc2Vjb25kU2xvdChoYXNoKTsgfQorICAgIGJvb2wgbWF5Q29u
dGFpbih1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVybiBmaXJzdEJ1Y2tldChoYXNoKSAmJiBz
ZWNvbmRCdWNrZXQoaGFzaCk7IH0KICAgICAKICAgICAvLyBUaGUgZmlsdGVyIG11c3QgYmUgY2xl
YXJlZCBiZWZvcmUgcmV1c2UgZXZlbiBpZiBhbGwga2V5cyBhcmUgcmVtb3ZlZC4KICAgICAvLyBP
dGhlcndpc2Ugb3ZlcmZsb3dlZCBrZXlzIHdpbGwgc3RpY2sgYXJvdW5kLgpAQCAtNjksMTkgKzE1
NiwyNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB1aW50OF90JiBmaXJzdFNs
b3QodW5zaWduZWQgaGFzaCkgeyByZXR1cm4gbV90YWJsZVtoYXNoICYga2V5TWFza107IH0KLSAg
ICB1aW50OF90JiBzZWNvbmRTbG90KHVuc2lnbmVkIGhhc2gpIHsgcmV0dXJuIG1fdGFibGVbKGhh
c2ggPj4gMTYpICYga2V5TWFza107IH0KLSAgICBjb25zdCB1aW50OF90JiBmaXJzdFNsb3QodW5z
aWduZWQgaGFzaCkgY29uc3QgeyByZXR1cm4gbV90YWJsZVtoYXNoICYga2V5TWFza107IH0KLSAg
ICBjb25zdCB1aW50OF90JiBzZWNvbmRTbG90KHVuc2lnbmVkIGhhc2gpIGNvbnN0IHsgcmV0dXJu
IG1fdGFibGVbKGhhc2ggPj4gMTYpICYga2V5TWFza107IH0KKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQga2V5TWFzayA9ICgxIDw8IGtleUJpdHMpIC0gMTsKIAotICAgIHVpbnQ4X3QgbV90YWJs
ZVt0YWJsZVNpemVdOworICAgIHVpbnQ4X3QmIGZpcnN0QnVja2V0KHVuc2lnbmVkIGhhc2gpIHsg
cmV0dXJuIG1fYnVja2V0c1toYXNoICYga2V5TWFza107IH0KKyAgICB1aW50OF90JiBzZWNvbmRC
dWNrZXQodW5zaWduZWQgaGFzaCkgeyByZXR1cm4gbV9idWNrZXRzWyhoYXNoID4+IDE2KSAmIGtl
eU1hc2tdOyB9CisgICAgY29uc3QgdWludDhfdCYgZmlyc3RCdWNrZXQodW5zaWduZWQgaGFzaCkg
Y29uc3QgeyByZXR1cm4gbV9idWNrZXRzW2hhc2ggJiBrZXlNYXNrXTsgfQorICAgIGNvbnN0IHVp
bnQ4X3QmIHNlY29uZEJ1Y2tldCh1bnNpZ25lZCBoYXNoKSBjb25zdCB7IHJldHVybiBtX2J1Y2tl
dHNbKGhhc2ggPj4gMTYpICYga2V5TWFza107IH0KKworICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
dGFibGVTaXplPiBtX2J1Y2tldHM7CiB9OwotICAgIAorCiB0ZW1wbGF0ZSA8dW5zaWduZWQga2V5
Qml0cz4KLWlubGluZSB2b2lkIEJsb29tRmlsdGVyPGtleUJpdHM+OjphZGQodW5zaWduZWQgaGFz
aCkKK2lubGluZSBDb3VudGluZ0Jsb29tRmlsdGVyPGtleUJpdHM+OjpDb3VudGluZ0Jsb29tRmls
dGVyKCkKKyAgICA6IG1fYnVja2V0cygpCiB7Ci0gICAgdWludDhfdCYgZmlyc3QgPSBmaXJzdFNs
b3QoaGFzaCk7Ci0gICAgdWludDhfdCYgc2Vjb25kID0gc2Vjb25kU2xvdChoYXNoKTsKK30KKwor
dGVtcGxhdGUgPHVuc2lnbmVkIGtleUJpdHM+CitpbmxpbmUgdm9pZCBDb3VudGluZ0Jsb29tRmls
dGVyPGtleUJpdHM+OjphZGQodW5zaWduZWQgaGFzaCkKK3sKKyAgICBhdXRvJiBmaXJzdCA9IGZp
cnN0QnVja2V0KGhhc2gpOworICAgIGF1dG8mIHNlY29uZCA9IHNlY29uZEJ1Y2tldChoYXNoKTsK
ICAgICBpZiAoTElLRUxZKGZpcnN0IDwgbWF4aW11bUNvdW50KCkpKQogICAgICAgICArK2ZpcnN0
OwogICAgIGlmIChMSUtFTFkoc2Vjb25kIDwgbWF4aW11bUNvdW50KCkpKQpAQCAtODksMTMgKzE4
NCwxMyBAQCBpbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6YWRkKHVuCiB9CiAKIHRl
bXBsYXRlIDx1bnNpZ25lZCBrZXlCaXRzPgotaW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5Qml0
cz46OnJlbW92ZSh1bnNpZ25lZCBoYXNoKQoraW5saW5lIHZvaWQgQ291bnRpbmdCbG9vbUZpbHRl
cjxrZXlCaXRzPjo6cmVtb3ZlKHVuc2lnbmVkIGhhc2gpCiB7Ci0gICAgdWludDhfdCYgZmlyc3Qg
PSBmaXJzdFNsb3QoaGFzaCk7Ci0gICAgdWludDhfdCYgc2Vjb25kID0gc2Vjb25kU2xvdChoYXNo
KTsKKyAgICBhdXRvJiBmaXJzdCA9IGZpcnN0QnVja2V0KGhhc2gpOworICAgIGF1dG8mIHNlY29u
ZCA9IHNlY29uZEJ1Y2tldChoYXNoKTsKICAgICBBU1NFUlQoZmlyc3QpOwogICAgIEFTU0VSVChz
ZWNvbmQpOwotICAgIC8vIEluIGNhc2Ugb2YgYW4gb3ZlcmZsb3csIHRoZSBzbG90IHN0aWNrcyBp
biB0aGUgdGFibGUgdW50aWwgY2xlYXIoKS4KKyAgICAvLyBJbiBjYXNlIG9mIGFuIG92ZXJmbG93
LCB0aGUgYnVja2V0IHN0aWNrcyBpbiB0aGUgdGFibGUgdW50aWwgY2xlYXIoKS4KICAgICBpZiAo
TElLRUxZKGZpcnN0IDwgbWF4aW11bUNvdW50KCkpKQogICAgICAgICAtLWZpcnN0OwogICAgIGlm
IChMSUtFTFkoc2Vjb25kIDwgbWF4aW11bUNvdW50KCkpKQpAQCAtMTAzLDI3ICsxOTgsMjcgQEAg
aW5saW5lIHZvaWQgQmxvb21GaWx0ZXI8a2V5Qml0cz46OnJlbW92ZQogfQogICAgIAogdGVtcGxh
dGUgPHVuc2lnbmVkIGtleUJpdHM+Ci1pbmxpbmUgdm9pZCBCbG9vbUZpbHRlcjxrZXlCaXRzPjo6
Y2xlYXIoKQoraW5saW5lIHZvaWQgQ291bnRpbmdCbG9vbUZpbHRlcjxrZXlCaXRzPjo6Y2xlYXIo
KQogewotICAgIG1lbXNldChtX3RhYmxlLCAwLCB0YWJsZVNpemUpOworICAgIG1fYnVja2V0cy5m
aWxsKDApOwogfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdGVtcGxhdGUgPHVuc2lnbmVkIGtl
eUJpdHM+Ci1ib29sIEJsb29tRmlsdGVyPGtleUJpdHM+OjpsaWtlbHlFbXB0eSgpIGNvbnN0Citi
b29sIENvdW50aW5nQmxvb21GaWx0ZXI8a2V5Qml0cz46Omxpa2VseUVtcHR5KCkgY29uc3QKIHsK
LSAgICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IHRhYmxlU2l6ZTsgKytuKSB7Ci0gICAgICAgIGlm
IChtX3RhYmxlW25dICYmIG1fdGFibGVbbl0gIT0gbWF4aW11bUNvdW50KCkpCisgICAgZm9yIChh
dXRvJiBidWNrZXQgOiBtX2J1Y2tldHMpIHsKKyAgICAgICAgaWYgKGJ1Y2tldCAmJiBidWNrZXQg
IT0gbWF4aW11bUNvdW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IHJldHVybiB0cnVlOwogfQogCiB0ZW1wbGF0ZSA8dW5zaWduZWQga2V5Qml0cz4KLWJvb2wgQmxv
b21GaWx0ZXI8a2V5Qml0cz46OmlzQ2xlYXIoKSBjb25zdAorYm9vbCBDb3VudGluZ0Jsb29tRmls
dGVyPGtleUJpdHM+Ojppc0NsZWFyKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBuID0gMDsg
biA8IHRhYmxlU2l6ZTsgKytuKSB7Ci0gICAgICAgIGlmIChtX3RhYmxlW25dKQorICAgIGZvciAo
YXV0byYgYnVja2V0IDogbV9idWNrZXRzKSB7CisgICAgICAgIGlmIChidWNrZXQpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTMzLDUgKzIy
OCw2IEBAIGJvb2wgQmxvb21GaWx0ZXI8a2V5Qml0cz46OmlzQ2xlYXIoKSBjb24KIH0KIAogdXNp
bmcgV1RGOjpCbG9vbUZpbHRlcjsKK3VzaW5nIFdURjo6Q291bnRpbmdCbG9vbUZpbHRlcjsKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODIzMTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wNC0wMyAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIG5vbi1jb3Vu
dGluZyBibG9vbSBmaWx0ZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MzM2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogY3NzL1NlbGVjdG9yRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yRmlsdGVyOjpzZXR1cFBhcmVudFN0YWNrKToKKyAgICAgICAgKiBjc3MvU2Vs
ZWN0b3JGaWx0ZXIuaDoKKworICAgICAgICBVcGRhdGUgbmFtZXMuCisKIDIwMTUtMDQtMDEgWGFi
aWVyIFJvZHJpZ3VleiBDYWx2YXIgPGNhbHZhcmlzQGlnYWxpYS5jb20+IGFuZCBZb3Vlbm4gRmFi
bGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBbU3RyZWFtcyBBUEld
IFNwbGl0IFJlYWRhYmxlU3RyZWFtL1JlYWRlciBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmcgc291
cmNlIHR5cGUgKEpTIHZzIG5hdGl2ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yRmls
dGVyLmNwcAkocmV2aXNpb24gMTgyMjcwKQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
RmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIFNlbGVjdG9y
RmlsdGVyOjpzZXR1cFBhcmVudFN0YWNrKEVsCiAgICAgQVNTRVJUKG1fcGFyZW50U3RhY2suaXNF
bXB0eSgpID09ICFtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CiAgICAgLy8gS2lsbCB3aGF0
ZXZlciB3ZSBzdG9yZWQgYmVmb3JlLgogICAgIG1fcGFyZW50U3RhY2suc2hyaW5rKDApOwotICAg
IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyID0gc3RkOjptYWtlX3VuaXF1ZTxCbG9vbUZpbHRl
cjxibG9vbUZpbHRlcktleUJpdHM+PigpOworICAgIG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxDb3VudGluZ0Jsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0
cz4+KCk7CiAgICAgLy8gRmFzdCB2ZXJzaW9uIGlmIHBhcmVudCBpcyBhIHJvb3QgZWxlbWVudDoK
ICAgICBpZiAoIXBhcmVudC0+cGFyZW50Tm9kZSgpICYmICFwYXJlbnQtPmlzU2hhZG93Um9vdCgp
KSB7CiAgICAgICAgIHB1c2hQYXJlbnRTdGFja0ZyYW1lKHBhcmVudCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JGaWx0ZXIuaAkocmV2aXNpb24gMTgyMjcwKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFdpdGggMTAwIHVuaXF1ZSBzdHJpbmdzIGluIHRoZSBmaWx0ZXIs
IDJeMTIgc2xvdCB0YWJsZSBoYXMgZmFsc2UgcG9zaXRpdmUgcmF0ZSBvZiB+MC4yJS4KICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgYmxvb21GaWx0ZXJLZXlCaXRzID0gMTI7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEJsb29tRmlsdGVyPGJsb29tRmlsdGVyS2V5Qml0cz4+IG1fYW5jZXN0b3JJZGVu
dGlmaWVyRmlsdGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb3VudGluZ0Jsb29tRmlsdGVyPGJs
b29tRmlsdGVyS2V5Qml0cz4+IG1fYW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyOwogfTsKIAogdGVt
cGxhdGUgPHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQ+CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODIzMTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wNC0wMyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIG5vbi1jb3VudGluZyBCbG9vbSBmaWx0ZXIgaW1wbGVt
ZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MzM2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5oOgorCiAyMDE1LTA0
LTAzICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXgg
dGhlIEVGTCBhbmQgR1RLIGJ1aWxkIGFmdGVyIHIxODIyNDMKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdl
LmgJKHJldmlzaW9uIDE4MjI3MSkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3
IEBAIHByaXZhdGU6CiAKICAgICBzaXplX3QgbV9tYXhpbXVtU2l6ZSB7IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgfTsKIAotICAgIEJsb29tRmlsdGVyPDIwPiBtX2NvbnRlbnRz
RmlsdGVyOworICAgIENvdW50aW5nQmxvb21GaWx0ZXI8MjA+IG1fY29udGVudHNGaWx0ZXI7CiAg
ICAgc3RkOjphdG9taWM8Ym9vbD4gbV9oYXNQb3B1bGF0ZWRDb250ZW50c0ZpbHRlciB7IGZhbHNl
IH07CiAKICAgICBzdGQ6OmF0b21pYzxzaXplX3Q+IG1fYXBwcm94aW1hdGVTaXplIHsgMCB9OwpJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTgyMzEzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTUtMDQtMDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBub24tY291bnRpbmcgYmxvb20gZmlsdGVyIGNsYXNzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMzNjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpnZW5lcmF0ZVJhbmRvbUhhc2hlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKwogMjAxNS0wNC0wMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
IAogICAgICAgICBmaWx0ZXItd2Via2l0LWJ1aWxkIHNob3VsZCBmaWx0ZXIgb3V0ICJjcmVhdGVk
IGJ5IGFuIHVuc3VwcG9ydGVkIFhDRGVwZW5kZW5jeUdyYXBoIGJ1aWxkIiBsaW5lcwpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MjI3MCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yODIsNiArMjgyLDcgQEAKIAkJQ0VBNkNGMjgxOUNDRjY5RDAwNjRGNUE3IC8qIG9w
ZW4tYW5kLWNsb3NlLXdpbmRvdy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQTZDRjI3MTlDQ0Y2OUQwMDY0RjVBNyAvKiBvcGVuLWFu
ZC1jbG9zZS13aW5kb3cuaHRtbCAqLzsgfTsKIAkJRTEyMjBEQ0ExNTVCMjhBQTAwMTNFMkZDIC8q
IE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9hZERlbGVnYXRlLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyMjBEQzkx
NTVCMjg3RDAwMTNFMkZDIC8qIE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9hZERl
bGVnYXRlLmh0bWwgKi87IH07CiAJCUUxOTRFMUJEMTc3RTUzQzcwMDlDNEQ0RSAvKiBTdG9wTG9h
ZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk0RTFCQzE3N0U1MzRBMDA5QzRENEUgLyog
U3RvcExvYWRpbmdGcm9tRGlkUmVjZWl2ZVJlc3BvbnNlLmh0bWwgKi87IH07CisJCUU0MDAxOTMz
MUFDRTlCODgwMDFCMEEyQSAvKiBCbG9vbUZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxv
b21GaWx0ZXIuY3BwICovOyB9OwogCQlGNjYwQUExMTE1QTVGNjMxMDAzQTEyNDMgLyogR2V0SW5q
ZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NjBBQTBGMTVBNUY2
MjQwMDNBMTI0MyAvKiBHZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxs
YmFja19CdW5kbGUuY3BwICovOyB9OwogCQlGNjYwQUExNTE1QTYxQUJGMDAzQTEyNDMgLyogSW5q
ZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tXaW5zX0J1bmRsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjYwQUExNDE1
QTYxQUJGMDAzQTEyNDMgLyogSW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2Fs
bGJhY2tXaW5zX0J1bmRsZS5jcHAgKi87IH07CiAJCUY2QjdCRTk1MTc0NjkyMTIwMDhBMzQ0NSAv
KiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2QjdCRTkyMTc0NjkxRUYwMDhBMzQ0NSAvKiBE
aWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcCAqLzsgfTsKQEAgLTY4Nyw2ICs2ODgs
NyBAQAogCQlFMTIyMERDOTE1NUIyODdEMDAxM0UyRkMgLyogTWVtb3J5Q2FjaGVEaXNhYmxlV2l0
aGluUmVzb3VyY2VMb2FkRGVsZWdhdGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9
IE1lbW9yeUNhY2hlRGlzYWJsZVdpdGhpblJlc291cmNlTG9hZERlbGVnYXRlLmh0bWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTRFMUJBMTc3RTUxNDUwMDlDNEQ0RSAvKiBTdG9w
TG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBTdG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTRFMUJDMTc3RTUzNEEwMDlDNEQ0RSAvKiBT
dG9wTG9hZGluZ0Zyb21EaWRSZWNlaXZlUmVzcG9uc2UuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFN0b3BMb2Fk
aW5nRnJvbURpZFJlY2VpdmVSZXNwb25zZS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvb21GaWx0ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDkwMjk2NzE0RTJFM0E0MDAyQkVERDEgLyogVHlwaW5nU3R5
bGVDcmFzaC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFR5cGlu
Z1N0eWxlQ3Jhc2gubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTc1N0QzMTc4
QUVBNUIwMEI1RDdBNCAvKiBEZXF1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXF1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRkMzRUUyMTM2NzhCNzMwMDEyNkE2NSAv
KiBsaWJndGVzdC5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmd0ZXN0LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CkBAIC0xMDI1LDYgKzEwMjcsNyBAQAogCQkJCTI2RjFCNDQyMTVDQTQz
NEYwMEQxRTRCRiAvKiBBdG9taWNTdHJpbmcuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgw
MDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCTI2QTJD
NzJFMTVFMkU3M0MwMDVCMUExNCAvKiBDU3RyaW5nLmNwcCAqLywKKwkJCQlFNDAwMTkzMDFBQ0U5
QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAogCQkJCTdBQTAyMUJBMUFCMDlFQTcw
MDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgKi8sCiAJCQkJRTRBNzU3RDMxNzhBRUE1QjAwQjVEN0E0
IC8qIERlcXVlLmNwcCAqLywKIAkJCQkxQUE5RTU1NzE0OTgwQTk5MDAwMDFBOEEgLyogRnVuY3Rp
b25hbC5jcHAgKi8sCkBAIC0xNTE4LDYgKzE1MjEsNyBAQAogCQkJCTdDQ0U3RjE2MUE0MTFBRTYw
MDQ0N0M0QyAvKiBUZXJtaW5hdGVUd2ljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VB
OTFBNDExQTFEMDA0NDdDNEMgLyogVGVzdEJyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUFBMUE0MTFBMjQwMDQ0N0M0QyAvKiBUZXN0UHJvdG9j
b2wubW0gaW4gU291cmNlcyAqLywKKwkJCQlFNDAwMTkzMzFBQ0U5Qjg4MDAxQjBBMkEgLyogQmxv
b21GaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQUUxQTQxMUEzNDAwNDQ3QzRD
IC8qIFRlc3RzQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VERDFBNDEx
QTkyMDA0NDdDNEMgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VE
MzFBNDExQTdFMDA0NDdDNEMgLyogVHlwaW5nU3R5bGVDcmFzaC5tbSBpbiBTb3VyY2VzICovLApJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQmxvb21GaWx0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0Jsb29tRmlsdGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHd0Zi9CbG9vbUZpbHRlci5oPgorI2luY2x1ZGUg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitzdGF0
aWMgVmVjdG9yPHVuc2lnbmVkPiBnZW5lcmF0ZVJhbmRvbUhhc2hlcyhzaXplX3QgaGFzaENvdW50
KQoreworICAgIFZlY3Rvcjx1bnNpZ25lZD4gaGFzaGVzOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBoYXNoQ291bnQ7ICsraSkKKyAgICAgICAgaGFzaGVzLmFwcGVuZChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpKTsKKyAgICByZXR1cm4gaGFzaGVzOworfQorCitURVNUKFdURl9CbG9vbUZpbHRl
ciwgQmFzaWMpCit7CisgICAgY29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAwMDsKKyAgICBh
dXRvIGhhc2hlcyA9IGdlbmVyYXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisKKyAgICBCbG9v
bUZpbHRlcjwxNj4gZmlsdGVyOworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAg
ICBmaWx0ZXIuYWRkKGhhc2gpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAg
ICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKworICAgIGF1dG8gbW9y
ZUhhc2hlcyA9IGdlbmVyYXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisgICAgdW5zaWduZWQg
bWF5Q29udGFpbkNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisg
ICAgICAgIG1heUNvbnRhaW5Db3VudCArPSBmaWx0ZXIubWF5Q29udGFpbihoYXNoKSA/IDEgOiAw
OworICAgIC8vIEZhbHNlIHBvc2l0aXZlIHJhdGUgaXMgfjAuMDklIHNvIHRoaXMgc2hvdWxkIGFs
d2F5cyBiZSB0cnVlLgorICAgIEVYUEVDVF9UUlVFKG1heUNvbnRhaW5Db3VudCA8IGhhc2hDb3Vu
dCAvIDEwKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgZmls
dGVyLmFkZChoYXNoKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBF
WFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisgICAgZm9yIChhdXRvIGhhc2gg
OiBtb3JlSGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNo
KSk7Cit9CisKK1RFU1QoV1RGX0Jsb29tRmlsdGVyLCBCYXNpY0NvdW50aW5nKQoreworICAgIGNv
bnN0IHVuc2lnbmVkIGhhc2hDb3VudCA9IDEwMDA7CisgICAgYXV0byBoYXNoZXMgPSBnZW5lcmF0
ZVJhbmRvbUhhc2hlcyhoYXNoQ291bnQpOworCisgICAgQ291bnRpbmdCbG9vbUZpbHRlcjwxNj4g
ZmlsdGVyOworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIuYWRk
KGhhc2gpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIEVYUEVDVF9U
UlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFz
aGVzKQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBo
YXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKKwor
ICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIucmVtb3ZlKGhhc2gp
OworCisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZp
bHRlci5tYXlDb250YWluKGhhc2gpKTsKKworICAgIGF1dG8gbW9yZUhhc2hlcyA9IGdlbmVyYXRl
UmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisgICAgdW5zaWduZWQgbWF5Q29udGFpbkNvdW50ID0g
MDsKKyAgICBmb3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisgICAgICAgIG1heUNvbnRhaW5D
b3VudCArPSBmaWx0ZXIubWF5Q29udGFpbihoYXNoKSA/IDEgOiAwOworICAgIC8vIEZhbHNlIHBv
c2l0aXZlIHJhdGUgaXMgfjAuMDklIHNvIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLgorICAg
IEVYUEVDVF9UUlVFKG1heUNvbnRhaW5Db3VudCA8IGhhc2hDb3VudCAvIDEwKTsKKworICAgIGZv
ciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoKTsKKyAg
ICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLnJlbW92ZShoYXNoKTsK
KworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RSVUUo
ZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworCisgICAgZm9yIChhdXRvIGhhc2ggOiBtb3JlSGFz
aGVzKQorICAgICAgICBmaWx0ZXIucmVtb3ZlKGhhc2gpOworCisgICAgZm9yIChhdXRvIGhhc2gg
OiBoYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKCFmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7
CisgICAgZm9yIChhdXRvIGhhc2ggOiBtb3JlSGFzaGVzKQorICAgICAgICBFWFBFQ1RfVFJVRSgh
ZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworfQorCitURVNUKFdURl9CbG9vbUZpbHRlciwgQ2xl
YXIpCit7CisgICAgY29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAwMDsKKyAgICBhdXRvIGhh
c2hlcyA9IGdlbmVyYXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisKKyAgICBCbG9vbUZpbHRl
cjwxNj4gZmlsdGVyOworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0
ZXIuYWRkKGhhc2gpOworCisgICAgZmlsdGVyLmNsZWFyKCk7CisKKyAgICBmb3IgKGF1dG8gaGFz
aCA6IGhhc2hlcykKKyAgICAgICAgRVhQRUNUX1RSVUUoIWZpbHRlci5tYXlDb250YWluKGhhc2gp
KTsKK30KKworVEVTVChXVEZfQmxvb21GaWx0ZXIsIENsZWFyQ291bnRpbmcpCit7CisgICAgY29u
c3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAwMDsKKyAgICBhdXRvIGhhc2hlcyA9IGdlbmVyYXRl
UmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisKKyAgICBDb3VudGluZ0Jsb29tRmlsdGVyPDE2PiBm
aWx0ZXI7CisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIGZpbHRlci5hZGQo
aGFzaCk7CisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIGZpbHRlci5hZGQo
aGFzaCk7CisKKyAgICBmaWx0ZXIuY2xlYXIoKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFz
aGVzKQorICAgICAgICBFWFBFQ1RfVFJVRSghZmlsdGVyLm1heUNvbnRhaW4oaGFzaCkpOworfQor
CitURVNUKFdURl9CbG9vbUZpbHRlciwgQ291bnRpbmdPdmVyZmxvdykKK3sKKyAgICBjb25zdCB1
bnNpZ25lZCBoYXNoQ291bnQgPSAxMDAwOworICAgIGF1dG8gaGFzaGVzID0gZ2VuZXJhdGVSYW5k
b21IYXNoZXMoaGFzaENvdW50KTsKKworICAgIENvdW50aW5nQmxvb21GaWx0ZXI8MTY+IGZpbHRl
cjsKKyAgICBmb3IgKGF1dG8gaGFzaCA6IGhhc2hlcykKKyAgICAgICAgZmlsdGVyLmFkZChoYXNo
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXIubWF4aW11bUNvdW50KCkg
KyAxMDA7ICsraSkKKyAgICAgICAgZmlsdGVyLmFkZChoYXNoZXNbMF0pOworCisgICAgZm9yIChh
dXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWlu
KGhhc2gpKTsKKworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVzKQorICAgICAgICBmaWx0ZXIu
cmVtb3ZlKGhhc2gpOworCisgICAgdW5zaWduZWQgbWF5Q29udGFpbkNvdW50ID0gMDsKKyAgICBm
b3IgKGF1dG8gaGFzaCA6IGhhc2hlcykgeworICAgICAgICBpZiAoaGFzaCA9PSBoYXNoZXNbMF0p
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1heUNvbnRhaW5Db3VudCArPSBmaWx0ZXIubWF5Q29udGFp
bihoYXNoKSA/IDEgOiAwOworICAgIH0KKyAgICAvLyBGYWxzZSBwb3NpdGl2ZSByYXRlIHNob3Vs
ZCBiZSB2ZXJ5IGxvdy4KKyAgICBFWFBFQ1RfVFJVRShtYXlDb250YWluQ291bnQgPCBoYXNoQ291
bnQgLyAxMDApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlci5tYXhpbXVt
Q291bnQoKSArIDEwMDsgKytpKQorICAgICAgICBmaWx0ZXIucmVtb3ZlKGhhc2hlc1swXSk7CisK
KyAgICAvLyBUaGUgYnVja2V0IGhhcyBvdmVyZmxvd2VkIGFuZCBpcyBzdHVjay4KKyAgICBFWFBF
Q1RfVFJVRShmaWx0ZXIubWF5Q29udGFpbihoYXNoZXNbMF0pKTsKK30KKworVEVTVChXVEZfQmxv
b21GaWx0ZXIsIENvbWJpbmUpCit7CisgICAgY29uc3QgdW5zaWduZWQgaGFzaENvdW50ID0gMTAw
MDsKKyAgICBhdXRvIGhhc2hlcyA9IGdlbmVyYXRlUmFuZG9tSGFzaGVzKGhhc2hDb3VudCk7CisK
KyAgICBCbG9vbUZpbHRlcjwxNj4gZmlsdGVyOworICAgIGZvciAoYXV0byBoYXNoIDogaGFzaGVz
KQorICAgICAgICBmaWx0ZXIuYWRkKGhhc2gpOworCisgICAgYXV0byBtb3JlSGFzaGVzID0gZ2Vu
ZXJhdGVSYW5kb21IYXNoZXMoaGFzaENvdW50KTsKKworICAgIEJsb29tRmlsdGVyPDE2PiBhbm90
aGVyRmlsdGVyOworICAgIGZvciAoYXV0byBoYXNoIDogbW9yZUhhc2hlcykKKyAgICAgICAgYW5v
dGhlckZpbHRlci5hZGQoaGFzaCk7CisKKyAgICBmaWx0ZXIuYWRkKGFub3RoZXJGaWx0ZXIpOwor
CisgICAgZm9yIChhdXRvIGhhc2ggOiBoYXNoZXMpCisgICAgICAgIEVYUEVDVF9UUlVFKGZpbHRl
ci5tYXlDb250YWluKGhhc2gpKTsKKyAgICBmb3IgKGF1dG8gaGFzaCA6IG1vcmVIYXNoZXMpCisg
ICAgICAgIEVYUEVDVF9UUlVFKGZpbHRlci5tYXlDb250YWluKGhhc2gpKTsKK30KKworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>