<?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>113145</bug_id>
          
          <creation_ts>2013-03-23 20:16:35 -0700</creation_ts>
          <short_desc>HandleSet should use HeapBlocks for storing handles</short_desc>
          <delta_ts>2013-03-24 15:48:07 -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>JavaScriptCore</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="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>862298</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-23 20:16:35 -0700</bug_when>
    <thetext>Currently it uses WTF::BlockStack, which is malloc-ed memory. Let&apos;s use the BlockAllocator. By doing this we can also get rid of the pointer to the HandleSet from each Handle, making them 24 bytes rather than 32 bytes. This change will also enable us to return HandleBlocks back to the OS and reduce the fragmentation of Handles in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862299</commentid>
    <comment_count>1</comment_count>
      <attachid>194731</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-23 20:32:01 -0700</bug_when>
    <thetext>Created attachment 194731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862425</commentid>
    <comment_count>2</comment_count>
      <attachid>194731</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-24 15:29:34 -0700</bug_when>
    <thetext>Comment on attachment 194731
Patch

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

r=me

&gt; Source/JavaScriptCore/heap/HandleBlockInlines.h:53
&gt; +    return reinterpret_cast&lt;char*&gt;(this) + ((sizeof(HandleBlock) + 7) &amp; ~7);

Let&apos;s use roundUpToMultipleOf&lt;sizeof(double)&gt;() here, to make it a little less mysterious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862428</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-24 15:48:07 -0700</bug_when>
    <thetext>Committed r146734: &lt;http://trac.webkit.org/changeset/146734&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194731</attachid>
            <date>2013-03-23 20:32:01 -0700</date>
            <delta_ts>2013-03-24 15:29:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113145-20130323202746.patch</filename>
            <type>text/plain</type>
            <size>26216</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ2NzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEzLTAzLTIzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSGFuZGxlU2V0IHNob3VsZCB1c2UgSGVhcEJsb2NrcyBmb3Igc3RvcmluZyBoYW5k
bGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTMx
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06IEJ1aWxkIHByb2plY3QgY2hhbmdlcy4KKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6IERpdHRvLgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzOiBEaXR0by4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcDogUmVuYW1l
IHRoZSBSZWdpb25TZXQgdG8gbV9mb3VyS0JCbG9ja1JlZ2lvblNldCBiZWNhdXNlIHRoZXJlIGFy
ZSAKKyAgICAgICAgdG9vIG1hbnkgYmxvY2sgdHlwZXMgdG8gaW5jbHVkZSB0aGVtIGFsbCBpbiB0
aGUgbmFtZSBub3cuCisgICAgICAgIChKU0M6OkJsb2NrQWxsb2NhdG9yOjpCbG9ja0FsbG9jYXRv
cik6CisgICAgICAgICogaGVhcC9CbG9ja0FsbG9jYXRvci5oOgorICAgICAgICAoQmxvY2tBbGxv
Y2F0b3IpOiBBZGQgdGhlIGFwcHJvcHJpYXRlIG92ZXJyaWRlIGZvciByZWdpb25TZXRGb3IuCisg
ICAgICAgIChKU0M6OldlYWtCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnQp
OgorICAgICAgICAoSlNDOjpIYW5kbGVCbG9jayk6CisgICAgICAgICogaGVhcC9IYW5kbGVCbG9j
ay5oOiBBZGRlZC4KKyAgICAgICAgKEhhbmRsZUJsb2NrKTogTmV3IGNsYXNzIGZvciBIYW5kbGVC
bG9ja3MuCisgICAgICAgIChKU0M6OkhhbmRsZUJsb2NrOjpibG9ja0Zvcik6IFN0YXRpYyBtZXRo
b2QgdG8gZ2V0IHRoZSBibG9jayBvZiB0aGUgZ2l2ZW4gSGFuZGxlTm9kZSBwb2ludGVyLiBBbGxv
d3MKKyAgICAgICAgdXMgdG8gcXVpY2tseSBmaWd1cmUgb3V0IHdoaWNoIEhhbmRsZVNldCB0aGUg
SGFuZGxlTm9kZSBiZWxvbmdzIHRvIHdpdGhvdXQgc3RvcmluZyB0aGUgcG9pbnRlciB0byBpdAor
ICAgICAgICBpbiB0aGUgSGFuZGxlTm9kZS4KKyAgICAgICAgKEpTQzo6SGFuZGxlQmxvY2s6Omhh
bmRsZVNldCk6IEdldHRlci4KKyAgICAgICAgKiBoZWFwL0hhbmRsZUJsb2NrSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6SGFuZGxlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
OkhhbmRsZUJsb2NrOjpIYW5kbGVCbG9jayk6CisgICAgICAgIChKU0M6OkhhbmRsZUJsb2NrOjpw
YXlsb2FkRW5kKToKKyAgICAgICAgKEpTQzo6SGFuZGxlQmxvY2s6OnBheWxvYWQpOgorICAgICAg
ICAoSlNDOjpIYW5kbGVCbG9jazo6bm9kZXMpOgorICAgICAgICAoSlNDOjpIYW5kbGVCbG9jazo6
bm9kZUF0SW5kZXgpOgorICAgICAgICAoSlNDOjpIYW5kbGVCbG9jazo6bm9kZUNhcGFjaXR5KToK
KyAgICAgICAgKiBoZWFwL0hhbmRsZVNldC5jcHA6CisgICAgICAgIChKU0M6OkhhbmRsZVNldDo6
fkhhbmRsZVNldCk6IAorICAgICAgICAoSlNDOjpIYW5kbGVTZXQ6Omdyb3cpOgorICAgICAgICAq
IGhlYXAvSGFuZGxlU2V0Lmg6CisgICAgICAgIChIYW5kbGVOb2RlKTogTW92ZSB0aGUgaW50ZXJu
YWwgTm9kZSBjbGFzcyBmcm9tIEhhbmRsZVNldCB0byBiZSBpdHMgb3duIHB1YmxpYyBjbGFzcyBz
byBpdCBjYW4gYmUgCisgICAgICAgIHVzZWQgYnkgSGFuZGxlQmxvY2suCisgICAgICAgIChIYW5k
bGVTZXQpOiBBZGQgYSB0eXBlZGVmIHNvIHRoYXQgTm9kZSByZWZlcnMgdG8gdGhlIG5ldyBIYW5k
bGVOb2RlIGNsYXNzLgorICAgICAgICAoSlNDOjpIYW5kbGVTZXQ6OnRvSGFuZGxlKToKKyAgICAg
ICAgKEpTQzo6SGFuZGxlU2V0Ojp0b05vZGUpOgorICAgICAgICAoSlNDOjpIYW5kbGVTZXQ6OmFs
bG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0OjpkZWFsbG9jYXRlKToKKyAgICAgICAg
KEpTQzo6SGFuZGxlTm9kZTo6SGFuZGxlTm9kZSk6CisgICAgICAgIChKU0M6OkhhbmRsZU5vZGU6
OnNsb3QpOgorICAgICAgICAoSlNDOjpIYW5kbGVOb2RlOjpoYW5kbGVTZXQpOiBVc2UgdGhlIG5l
dyBibG9ja0ZvciBzdGF0aWMgZnVuY3Rpb24gdG8gZ2V0IHRoZSByaWdodCBIYW5kbGVCbG9jayBh
bmQgbG9va3VwIAorICAgICAgICB0aGUgSGFuZGxlU2V0LgorICAgICAgICAoSlNDOjpIYW5kbGVO
b2RlOjpzZXRQcmV2KToKKyAgICAgICAgKEpTQzo6SGFuZGxlTm9kZTo6cHJldik6CisgICAgICAg
IChKU0M6OkhhbmRsZU5vZGU6OnNldE5leHQpOgorICAgICAgICAoSlNDOjpIYW5kbGVOb2RlOjpu
ZXh0KToKKyAgICAgICAgKEpTQzo6SGFuZGxlU2V0Ojpmb3JFYWNoU3Ryb25nSGFuZGxlKToKKyAg
ICAgICAgKiBoZWFwL0hlYXAuaDogRnJpZW5kIEhhbmRsZVNldCBzbyB0aGF0IGl0IGNhbiBhY2Nl
c3MgdGhlIEJsb2NrQWxsb2NhdG9yIHdoZW4gYWxsb2NhdGluZyBIYW5kbGVCbG9ja3MuCisKIDIw
MTMtMDMtMjIgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBC
VUlMRCBGSVggKHIxNDUxMTkpOiBNYWtlIEpTVmFsdWUqIHByb3BlcnRpZXMgZGVmYXVsdCB0byAo
YXNzaWduKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDE0NjcyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNiArMzExLDggQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZUJsb2NrLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hh
bmRsZUJsb2NrSW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVT
ZXQuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTZXQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEJsb2NrLmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDE0NjcyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTgsNiArMzU4LDggQEAKICAgICAgICAgICAgICdoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAn
LAogICAgICAgICAgICAgJ2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgnLAogICAgICAgICAgICAg
J2hlYXAvSGFuZGxlLmgnLAorICAgICAgICAgICAgJ2hlYXAvSGFuZGxlQmxvY2suaCcsCisgICAg
ICAgICAgICAnaGVhcC9IYW5kbGVCbG9ja0lubGluZXMuaCcsCiAgICAgICAgICAgICAnaGVhcC9I
YW5kbGVTZXQuY3BwJywKICAgICAgICAgICAgICdoZWFwL0hhbmRsZVNldC5oJywKICAgICAgICAg
ICAgICdoZWFwL0hhbmRsZVN0YWNrLmNwcCcsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTQ2NzIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2NTQsNiAr
MjY1NCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxoZWFwXEhhbmRsZUJsb2NrLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFuZGxlQmxvY2tJbmxpbmVzLmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcSGFu
ZGxlU2V0LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE0NjcyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTUwNyw2ICs1MDcsOCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1RocmVhZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWRTaGFyZWREYXRhLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxI
YW5kbGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZUJsb2Nr
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVCbG9ja0lubGlu
ZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVNldC5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU3RhY2suaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVR5cGVzLmgiIC8+DQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2
aXNpb24gMTQ2NzIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcwLDYgKzEwNzAsMTIgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxl
LmgiPg0KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KICAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZUJsb2NrLmgiPg0KKyAgICAgIDxG
aWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXEhhbmRsZUJsb2NrSW5saW5lcy5oIj4NCisgICAgICA8RmlsdGVyPmhl
YXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxIYW5kbGVTZXQuaCI+DQogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQogICAg
IDwvQ2xJbmNsdWRlPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNDY3MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODM3LDYgKzgzNyw4IEBACiAJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI1RDcwOUExNkRFOTlGNDAwRkNB
NkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwogCQlDMjVGOEJDRDE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxT
d2VlcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovOyB9
OwogCQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjVGOEJDQzE1NzU0
NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzI4MzE5MDAxNkZFNEI3RDAwMTU3QkZEIC8q
IEhhbmRsZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjgzMThGRjE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxlQmxvY2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjgzMTkwMjE2RkU1MzNF
MDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjgzMTkwMTE2RkU1MzNFMDAxNTdCRkQgLyogSGFuZGxl
QmxvY2tJbmxpbmVzLmggKi87IH07CiAJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rl
c3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJC
OTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJC
OTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgKi87IH07CkBAIC0x
NzM5LDYgKzE3NDEsOCBAQAogCQlDMjVENzA5QTE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2Vk
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYW5hZ2VkVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1Qjcx
IC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluY3JlbWVudGFsU3dlZXBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjgzMThGRjE2RkU0QjdEMDAxNTdCRkQgLyogSGFu
ZGxlQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFuZGxlQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI4MzE5MDExNkZFNTMzRTAwMTU3QkZE
IC8qIEhhbmRsZUJsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIYW5kbGVCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJB
N0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQjkxNkMxMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRB
bGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQWxsb2Nh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQjkxNkM0MTREQTA0MEMwMENC
QUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxNTcsNiArMjE2MSw4IEBACiAJCQkJMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdl
YWtTZXRJbmxpbmVzLmggKi8sCiAJCQkJMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRl
QmFycmllclN1cHBvcnQuY3BwICovLAogCQkJCTBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBX
cml0ZUJhcnJpZXJTdXBwb3J0LmggKi8sCisJCQkJQzI4MzE4RkYxNkZFNEI3RDAwMTU3QkZEIC8q
IEhhbmRsZUJsb2NrLmggKi8sCisJCQkJQzI4MzE5MDExNkZFNTMzRTAwMTU3QkZEIC8qIEhhbmRs
ZUJsb2NrSW5saW5lcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBoZWFwOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTI5NTYsNiArMjk2Miw3IEBACiAJCQkJMEZCN0YzOTUxNUVEOEU0
NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5
NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQzI4MzE5MDAxNkZFNEI3RDAwMTU3QkZEIC8qIEhhbmRsZUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1h
Y2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAwQjM0
NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzczLDYgKzMz
ODAsNyBAQAogCQkJCTg2NjczOUQzMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNv
bmRpdGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I2MDE4MjE2MzlGRDJB
MDAzNzJCQTMgLyogVW5saW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUMyODMx
OTAyMTZGRTUzM0UwMDE1N0JGRCAvKiBIYW5kbGVCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0FsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE0NjcyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIEJsb2NrQWxsb2NhdG9yOjpCbG9ja0FsbG9jYXRv
cigpCiAgICAgOiBtX2NvcGllZFJlZ2lvblNldChDb3BpZWRCbG9jazo6YmxvY2tTaXplKQogICAg
ICwgbV9tYXJrZWRSZWdpb25TZXQoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSkKLSAgICAsIG1fd2Vh
a0FuZE1hcmtTdGFja1JlZ2lvblNldChXZWFrQmxvY2s6OmJsb2NrU2l6ZSkKKyAgICAsIG1fZm91
cktCQmxvY2tSZWdpb25TZXQoV2Vha0Jsb2NrOjpibG9ja1NpemUpCiAgICAgLCBtX3dvcmtMaXN0
UmVnaW9uU2V0KENvcHlXb3JrTGlzdFNlZ21lbnQ6OmJsb2NrU2l6ZSkKICAgICAsIG1fbnVtYmVy
T2ZFbXB0eVJlZ2lvbnMoMCkKICAgICAsIG1faXNDdXJyZW50bHlBbGxvY2F0aW5nKGZhbHNlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0FsbG9jYXRvci5oCShyZXZp
c2lvbiAxNDY3MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0FsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xh
c3MgQmxvY2tBbGxvY2F0b3I7CiBjbGFzcyBDb3BpZWRCbG9jazsKIGNsYXNzIENvcHlXb3JrTGlz
dFNlZ21lbnQ7CitjbGFzcyBIYW5kbGVCbG9jazsKIGNsYXNzIE1hcmtTdGFja1NlZ21lbnQ7CiBj
bGFzcyBNYXJrZWRCbG9jazsKIGNsYXNzIFJlZ2lvbjsKQEAgLTE5MSw3ICsxOTIsNyBAQCBwcml2
YXRlOgogICAgIFJlZ2lvblNldCBtX2NvcGllZFJlZ2lvblNldDsKICAgICBSZWdpb25TZXQgbV9t
YXJrZWRSZWdpb25TZXQ7CiAgICAgLy8gV2Vha0Jsb2NrcyBhbmQgTWFya1N0YWNrU2VnbWVudHMg
dXNlIHRoZSBzYW1lIFJlZ2lvblNldCBzaW5jZSB0aGV5J3JlIHRoZSBzYW1lIHNpemUuCi0gICAg
UmVnaW9uU2V0IG1fd2Vha0FuZE1hcmtTdGFja1JlZ2lvblNldDsKKyAgICBSZWdpb25TZXQgbV9m
b3VyS0JCbG9ja1JlZ2lvblNldDsKICAgICBSZWdpb25TZXQgbV93b3JrTGlzdFJlZ2lvblNldDsK
IAogICAgIERvdWJseUxpbmtlZExpc3Q8UmVnaW9uPiBtX2VtcHR5UmVnaW9uczsKQEAgLTMyMywx
MyArMzI0LDEzIEBAIGlubGluZSBCbG9ja0FsbG9jYXRvcjo6UmVnaW9uU2V0JiBCbG9ja0EKIHRl
bXBsYXRlIDw+CiBpbmxpbmUgQmxvY2tBbGxvY2F0b3I6OlJlZ2lvblNldCYgQmxvY2tBbGxvY2F0
b3I6OnJlZ2lvblNldEZvcjxXZWFrQmxvY2s+KCkKIHsKLSAgICByZXR1cm4gbV93ZWFrQW5kTWFy
a1N0YWNrUmVnaW9uU2V0OworICAgIHJldHVybiBtX2ZvdXJLQkJsb2NrUmVnaW9uU2V0OwogfQog
CiB0ZW1wbGF0ZSA8PgogaW5saW5lIEJsb2NrQWxsb2NhdG9yOjpSZWdpb25TZXQmIEJsb2NrQWxs
b2NhdG9yOjpyZWdpb25TZXRGb3I8TWFya1N0YWNrU2VnbWVudD4oKQogewotICAgIHJldHVybiBt
X3dlYWtBbmRNYXJrU3RhY2tSZWdpb25TZXQ7CisgICAgcmV0dXJuIG1fZm91cktCQmxvY2tSZWdp
b25TZXQ7CiB9CiAKIHRlbXBsYXRlIDw+CkBAIC0zMzksNiArMzQwLDEyIEBAIGlubGluZSBCbG9j
a0FsbG9jYXRvcjo6UmVnaW9uU2V0JiBCbG9ja0EKIH0KIAogdGVtcGxhdGUgPD4KK2lubGluZSBC
bG9ja0FsbG9jYXRvcjo6UmVnaW9uU2V0JiBCbG9ja0FsbG9jYXRvcjo6cmVnaW9uU2V0Rm9yPEhh
bmRsZUJsb2NrPigpCit7CisgICAgcmV0dXJuIG1fZm91cktCQmxvY2tSZWdpb25TZXQ7Cit9CisK
K3RlbXBsYXRlIDw+CiBpbmxpbmUgQmxvY2tBbGxvY2F0b3I6OlJlZ2lvblNldCYgQmxvY2tBbGxv
Y2F0b3I6OnJlZ2lvblNldEZvcjxIZWFwQmxvY2s8Q29waWVkQmxvY2s+ID4oKQogewogICAgIHJl
dHVybiBtX2NvcGllZFJlZ2lvblNldDsKQEAgLTM1MywxMyArMzYwLDEzIEBAIGlubGluZSBCbG9j
a0FsbG9jYXRvcjo6UmVnaW9uU2V0JiBCbG9ja0EKIHRlbXBsYXRlIDw+CiBpbmxpbmUgQmxvY2tB
bGxvY2F0b3I6OlJlZ2lvblNldCYgQmxvY2tBbGxvY2F0b3I6OnJlZ2lvblNldEZvcjxIZWFwQmxv
Y2s8V2Vha0Jsb2NrPiA+KCkKIHsKLSAgICByZXR1cm4gbV93ZWFrQW5kTWFya1N0YWNrUmVnaW9u
U2V0OworICAgIHJldHVybiBtX2ZvdXJLQkJsb2NrUmVnaW9uU2V0OwogfQogCiB0ZW1wbGF0ZSA8
PgogaW5saW5lIEJsb2NrQWxsb2NhdG9yOjpSZWdpb25TZXQmIEJsb2NrQWxsb2NhdG9yOjpyZWdp
b25TZXRGb3I8SGVhcEJsb2NrPE1hcmtTdGFja1NlZ21lbnQ+ID4oKQogewotICAgIHJldHVybiBt
X3dlYWtBbmRNYXJrU3RhY2tSZWdpb25TZXQ7CisgICAgcmV0dXJuIG1fZm91cktCQmxvY2tSZWdp
b25TZXQ7CiB9CiAKIHRlbXBsYXRlIDw+CkBAIC0zNjgsNiArMzc1LDEyIEBAIGlubGluZSBCbG9j
a0FsbG9jYXRvcjo6UmVnaW9uU2V0JiBCbG9ja0EKICAgICByZXR1cm4gbV93b3JrTGlzdFJlZ2lv
blNldDsKIH0KIAordGVtcGxhdGUgPD4KK2lubGluZSBCbG9ja0FsbG9jYXRvcjo6UmVnaW9uU2V0
JiBCbG9ja0FsbG9jYXRvcjo6cmVnaW9uU2V0Rm9yPEhlYXBCbG9jazxIYW5kbGVCbG9jaz4gPigp
Cit7CisgICAgcmV0dXJuIG1fZm91cktCQmxvY2tSZWdpb25TZXQ7Cit9CisKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgogaW5saW5lIEJsb2NrQWxsb2NhdG9yOjpSZWdpb25TZXQmIEJsb2NrQWxsb2Nh
dG9yOjpyZWdpb25TZXRGb3IoKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBIYW5kbGVCbG9ja19oCisjZGVmaW5lIEhhbmRsZUJsb2NrX2gKKworI2luY2x1
ZGUgIkhlYXBCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGVhZEJsb2NrOwor
Y2xhc3MgSGFuZGxlU2V0OworY2xhc3MgSGFuZGxlTm9kZTsKKworY2xhc3MgSGFuZGxlQmxvY2sg
OiBwdWJsaWMgSGVhcEJsb2NrPEhhbmRsZUJsb2NrPiB7CitwdWJsaWM6CisgICAgc3RhdGljIEhh
bmRsZUJsb2NrKiBjcmVhdGUoRGVhZEJsb2NrKiwgSGFuZGxlU2V0Kik7CisgICAgc3RhdGljIEhh
bmRsZUJsb2NrKiBibG9ja0ZvcihIYW5kbGVOb2RlKik7CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGJsb2NrU2l6ZSA9IDQgKiBLQjsKKworICAgIEhhbmRsZVNldCogaGFuZGxlU2V0KCk7CisK
KyAgICBIYW5kbGVOb2RlKiBub2RlcygpOworICAgIEhhbmRsZU5vZGUqIG5vZGVBdEluZGV4KHVu
c2lnbmVkKTsKKyAgICB1bnNpZ25lZCBub2RlQ2FwYWNpdHkoKTsKKworcHJpdmF0ZToKKyAgICBI
YW5kbGVCbG9jayhSZWdpb24qLCBIYW5kbGVTZXQqKTsKKworICAgIGNoYXIqIHBheWxvYWQoKTsK
KyAgICBjaGFyKiBwYXlsb2FkRW5kKCk7CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxv
Y2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsKKworICAgIEhhbmRsZVNldCogbV9oYW5kbGVTZXQ7
Cit9OworCitpbmxpbmUgSGFuZGxlQmxvY2sqIEhhbmRsZUJsb2NrOjpibG9ja0ZvcihIYW5kbGVO
b2RlKiBub2RlKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEhhbmRsZUJsb2NrKj4o
cmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KG5vZGUpICYgc19ibG9ja01hc2spOworfQorCitpbmxp
bmUgSGFuZGxlU2V0KiBIYW5kbGVCbG9jazo6aGFuZGxlU2V0KCkKK3sKKyAgICByZXR1cm4gbV9o
YW5kbGVTZXQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGFuZGxlQmxv
Y2tfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlQmxvY2tJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlQmxvY2tJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBIYW5kbGVCbG9ja0lubGluZXNfaAorI2RlZmluZSBIYW5kbGVCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQmxvY2tBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJIYW5kbGVC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIEhhbmRsZUJsb2NrKiBIYW5kbGVC
bG9jazo6Y3JlYXRlKERlYWRCbG9jayogYmxvY2ssIEhhbmRsZVNldCogaGFuZGxlU2V0KQorewor
ICAgIFJlZ2lvbiogcmVnaW9uID0gYmxvY2stPnJlZ2lvbigpOworICAgIHJldHVybiBuZXcgKE5v
dE51bGwsIGJsb2NrKSBIYW5kbGVCbG9jayhyZWdpb24sIGhhbmRsZVNldCk7Cit9CisKK2lubGlu
ZSBIYW5kbGVCbG9jazo6SGFuZGxlQmxvY2soUmVnaW9uKiByZWdpb24sIEhhbmRsZVNldCogaGFu
ZGxlU2V0KQorICAgIDogSGVhcEJsb2NrPEhhbmRsZUJsb2NrPihyZWdpb24pCisgICAgLCBtX2hh
bmRsZVNldChoYW5kbGVTZXQpCit7Cit9CisKK2lubGluZSBjaGFyKiBIYW5kbGVCbG9jazo6cGF5
bG9hZEVuZCgpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsg
cmVnaW9uKCktPmJsb2NrU2l6ZSgpOworfQorCitpbmxpbmUgY2hhciogSGFuZGxlQmxvY2s6OnBh
eWxvYWQoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSArICgo
c2l6ZW9mKEhhbmRsZUJsb2NrKSArIDcpICYgfjcpOworfQorCitpbmxpbmUgSGFuZGxlTm9kZSog
SGFuZGxlQmxvY2s6Om5vZGVzKCkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxIYW5k
bGVOb2RlKj4ocGF5bG9hZCgpKTsKK30KKworaW5saW5lIEhhbmRsZU5vZGUqIEhhbmRsZUJsb2Nr
Ojpub2RlQXRJbmRleCh1bnNpZ25lZCBpKQoreworICAgIEFTU0VSVChpIDwgbm9kZUNhcGFjaXR5
KCkpOworICAgIHJldHVybiAmbm9kZXMoKVtpXTsKK30KKworaW5saW5lIHVuc2lnbmVkIEhhbmRs
ZUJsb2NrOjpub2RlQ2FwYWNpdHkoKQoreworICAgIHJldHVybiAocGF5bG9hZEVuZCgpIC0gcGF5
bG9hZCgpKSAvIHNpemVvZihIYW5kbGVOb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisg
ICAgCisjZW5kaWYgLy8gSGFuZGxlQmxvY2tJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkocmV2aXNpb24gMTQ2NzIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogCisj
aW5jbHVkZSAiSGFuZGxlQmxvY2suaCIKKyNpbmNsdWRlICJIYW5kbGVCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTM5LDEyICs0MSwyMCBAQCBIYW5kbGVTZXQ6OkhhbmRs
ZVNldChKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgZ3JvdygpOwogfQogCitIYW5kbGVTZXQ6On5I
YW5kbGVTZXQoKQoreworICAgIHdoaWxlICghbV9ibG9ja0xpc3QuaXNFbXB0eSgpKQorICAgICAg
ICBtX2dsb2JhbERhdGEtPmhlYXAuYmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKEhhbmRsZUJs
b2NrOjpkZXN0cm95KG1fYmxvY2tMaXN0LnJlbW92ZUhlYWQoKSkpOworfQorCiB2b2lkIEhhbmRs
ZVNldDo6Z3JvdygpCiB7Ci0gICAgTm9kZSogYmxvY2sgPSBtX2Jsb2NrU3RhY2suZ3JvdygpOwot
ICAgIGZvciAoaW50IGkgPSBtX2Jsb2NrU3RhY2suYmxvY2tMZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgICBOb2RlKiBub2RlID0gJmJsb2NrW2ldOwotICAgICAgICBuZXcgKE5vdE51
bGwsIG5vZGUpIE5vZGUodGhpcyk7CisgICAgSGFuZGxlQmxvY2sqIG5ld0Jsb2NrID0gSGFuZGxl
QmxvY2s6OmNyZWF0ZShtX2dsb2JhbERhdGEtPmhlYXAuYmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0
ZTxIYW5kbGVCbG9jaz4oKSwgdGhpcyk7CisgICAgbV9ibG9ja0xpc3QuYXBwZW5kKG5ld0Jsb2Nr
KTsKKworICAgIGZvciAoaW50IGkgPSBuZXdCbG9jay0+bm9kZUNhcGFjaXR5KCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICBOb2RlKiBub2RlID0gbmV3QmxvY2stPm5vZGVBdEluZGV4KGkp
OworICAgICAgICBuZXcgKE5vdE51bGwsIG5vZGUpIE5vZGU7CiAgICAgICAgIG1fZnJlZUxpc3Qu
cHVzaChub2RlKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
YW5kbGVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVTZXQuaAkocmV2aXNpb24gMTQ2NzIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiw1MCBAQAogI2lmbmRlZiBI
YW5kbGVTZXRfaAogI2RlZmluZSBIYW5kbGVTZXRfaAogCi0jaW5jbHVkZSA8d3RmL0Jsb2NrU3Rh
Y2suaD4KICNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNsdWRlICJIYW5kbGVCbG9jay5oIgorI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9TaW5nbHlMaW5rZWRMaXN0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIYW5kbGVC
bG9jazsKIGNsYXNzIEhhbmRsZVNldDsKIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKIGNsYXNzIEpT
R2xvYmFsRGF0YTsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBTbG90VmlzaXRvcjsKIAorY2xhc3Mg
SGFuZGxlTm9kZSB7CitwdWJsaWM6CisgICAgSGFuZGxlTm9kZShXVEY6OlNlbnRpbmVsVGFnKTsK
KyAgICBIYW5kbGVOb2RlKCk7CisgICAgCisgICAgSGFuZGxlU2xvdCBzbG90KCk7CisgICAgSGFu
ZGxlU2V0KiBoYW5kbGVTZXQoKTsKKworICAgIHZvaWQgc2V0UHJldihIYW5kbGVOb2RlKik7Cisg
ICAgSGFuZGxlTm9kZSogcHJldigpOworCisgICAgdm9pZCBzZXROZXh0KEhhbmRsZU5vZGUqKTsK
KyAgICBIYW5kbGVOb2RlKiBuZXh0KCk7CisKK3ByaXZhdGU6CisgICAgSlNWYWx1ZSBtX3ZhbHVl
OworICAgIEhhbmRsZU5vZGUqIG1fcHJldjsKKyAgICBIYW5kbGVOb2RlKiBtX25leHQ7Cit9Owor
CiBjbGFzcyBIYW5kbGVTZXQgeworICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVCbG9jazsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgSGFuZGxlU2V0KiBoZWFwRm9yKEhhbmRsZVNsb3QpOwogCiAgICAgSGFu
ZGxlU2V0KEpTR2xvYmFsRGF0YSopOwotICAgIAorICAgIH5IYW5kbGVTZXQoKTsKKwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSgpOwogCiAgICAgSGFuZGxlU2xvdCBhbGxvY2F0ZSgpOwpA
QCAtNjAsMjcgKzg0LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaFN0cm9uZ0hhbmRsZShGdW5jdG9yJiwgY29uc3QgSGFzaENvdW50ZWRTZXQ8
SlNDZWxsKj4mIHNraXBTZXQpOwogCiBwcml2YXRlOgotICAgIGNsYXNzIE5vZGUgewotICAgIHB1
YmxpYzoKLSAgICAgICAgTm9kZShXVEY6OlNlbnRpbmVsVGFnKTsKLSAgICAgICAgTm9kZShIYW5k
bGVTZXQqKTsKLSAgICAgICAgCi0gICAgICAgIEhhbmRsZVNsb3Qgc2xvdCgpOwotICAgICAgICBI
YW5kbGVTZXQqIGhhbmRsZVNldCgpOwotCi0gICAgICAgIHZvaWQgc2V0UHJldihOb2RlKik7Ci0g
ICAgICAgIE5vZGUqIHByZXYoKTsKLQotICAgICAgICB2b2lkIHNldE5leHQoTm9kZSopOwotICAg
ICAgICBOb2RlKiBuZXh0KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBKU1ZhbHVlIG1fdmFs
dWU7Ci0gICAgICAgIEhhbmRsZVNldCogbV9oYW5kbGVTZXQ7Ci0gICAgICAgIE5vZGUqIG1fcHJl
djsKLSAgICAgICAgTm9kZSogbV9uZXh0OwotICAgIH07Ci0KKyAgICB0eXBlZGVmIEhhbmRsZU5v
ZGUgTm9kZTsKICAgICBzdGF0aWMgSGFuZGxlU2xvdCB0b0hhbmRsZShOb2RlKik7CiAgICAgc3Rh
dGljIE5vZGUqIHRvTm9kZShIYW5kbGVTbG90KTsKIApAQCAtOTEsNyArOTUsNyBAQCBwcml2YXRl
OgogI2VuZGlmCiAKICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAgICBCbG9ja1N0
YWNrPE5vZGU+IG1fYmxvY2tTdGFjazsKKyAgICBEb3VibHlMaW5rZWRMaXN0PEhhbmRsZUJsb2Nr
PiBtX2Jsb2NrTGlzdDsKIAogICAgIFNlbnRpbmVsTGlua2VkTGlzdDxOb2RlPiBtX3N0cm9uZ0xp
c3Q7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+IG1faW1tZWRpYXRlTGlzdDsKQEAgLTEw
OSwxNCArMTEzLDE0IEBAIGlubGluZSBKU0dsb2JhbERhdGEqIEhhbmRsZVNldDo6Z2xvYmFsRGEK
ICAgICByZXR1cm4gbV9nbG9iYWxEYXRhOwogfQogCi1pbmxpbmUgSGFuZGxlU2xvdCBIYW5kbGVT
ZXQ6OnRvSGFuZGxlKE5vZGUqIG5vZGUpCitpbmxpbmUgSGFuZGxlU2xvdCBIYW5kbGVTZXQ6OnRv
SGFuZGxlKEhhbmRsZVNldDo6Tm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxIYW5kbGVTbG90Pihub2RlKTsKIH0KIAogaW5saW5lIEhhbmRsZVNldDo6Tm9kZSogSGFu
ZGxlU2V0Ojp0b05vZGUoSGFuZGxlU2xvdCBoYW5kbGUpCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Tm9kZSo+KGhhbmRsZSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SGFu
ZGxlU2V0OjpOb2RlKj4oaGFuZGxlKTsKIH0KIAogaW5saW5lIEhhbmRsZVNsb3QgSGFuZGxlU2V0
OjphbGxvY2F0ZSgpCkBAIC0xMjgsNzIgKzEzMiw3MCBAQCBpbmxpbmUgSGFuZGxlU2xvdCBIYW5k
bGVTZXQ6OmFsbG9jYXRlKCkKICAgICBpZiAobV9mcmVlTGlzdC5pc0VtcHR5KCkpCiAgICAgICAg
IGdyb3coKTsKIAotICAgIE5vZGUqIG5vZGUgPSBtX2ZyZWVMaXN0LnBvcCgpOwotICAgIG5ldyAo
Tm90TnVsbCwgbm9kZSkgTm9kZSh0aGlzKTsKKyAgICBIYW5kbGVTZXQ6Ok5vZGUqIG5vZGUgPSBt
X2ZyZWVMaXN0LnBvcCgpOworICAgIG5ldyAoTm90TnVsbCwgbm9kZSkgSGFuZGxlU2V0OjpOb2Rl
KCk7CiAgICAgbV9pbW1lZGlhdGVMaXN0LnB1c2gobm9kZSk7CiAgICAgcmV0dXJuIHRvSGFuZGxl
KG5vZGUpOwogfQogCiBpbmxpbmUgdm9pZCBIYW5kbGVTZXQ6OmRlYWxsb2NhdGUoSGFuZGxlU2xv
dCBoYW5kbGUpCiB7Ci0gICAgTm9kZSogbm9kZSA9IHRvTm9kZShoYW5kbGUpOworICAgIEhhbmRs
ZVNldDo6Tm9kZSogbm9kZSA9IHRvTm9kZShoYW5kbGUpOwogICAgIGlmIChub2RlID09IG1fbmV4
dFRvRmluYWxpemUpIHsKICAgICAgICAgQVNTRVJUKG1fbmV4dFRvRmluYWxpemUtPm5leHQoKSk7
CiAgICAgICAgIG1fbmV4dFRvRmluYWxpemUgPSBtX25leHRUb0ZpbmFsaXplLT5uZXh0KCk7CiAg
ICAgfQogCi0gICAgU2VudGluZWxMaW5rZWRMaXN0PE5vZGU+OjpyZW1vdmUobm9kZSk7CisgICAg
U2VudGluZWxMaW5rZWRMaXN0PEhhbmRsZVNldDo6Tm9kZT46OnJlbW92ZShub2RlKTsKICAgICBt
X2ZyZWVMaXN0LnB1c2gobm9kZSk7CiB9CiAKLWlubGluZSBIYW5kbGVTZXQ6Ok5vZGU6Ok5vZGUo
SGFuZGxlU2V0KiBoYW5kbGVTZXQpCi0gICAgOiBtX2hhbmRsZVNldChoYW5kbGVTZXQpCi0gICAg
LCBtX3ByZXYoMCkKK2lubGluZSBIYW5kbGVOb2RlOjpIYW5kbGVOb2RlKCkKKyAgICA6IG1fcHJl
digwKQogICAgICwgbV9uZXh0KDApCiB7CiB9CiAKLWlubGluZSBIYW5kbGVTZXQ6Ok5vZGU6Ok5v
ZGUoV1RGOjpTZW50aW5lbFRhZykKLSAgICA6IG1faGFuZGxlU2V0KDApCi0gICAgLCBtX3ByZXYo
MCkKK2lubGluZSBIYW5kbGVOb2RlOjpIYW5kbGVOb2RlKFdURjo6U2VudGluZWxUYWcpCisgICAg
OiBtX3ByZXYoMCkKICAgICAsIG1fbmV4dCgwKQogewogfQogCi1pbmxpbmUgSGFuZGxlU2xvdCBI
YW5kbGVTZXQ6Ok5vZGU6OnNsb3QoKQoraW5saW5lIEhhbmRsZVNsb3QgSGFuZGxlTm9kZTo6c2xv
dCgpCiB7CiAgICAgcmV0dXJuICZtX3ZhbHVlOwogfQogCi1pbmxpbmUgSGFuZGxlU2V0KiBIYW5k
bGVTZXQ6Ok5vZGU6OmhhbmRsZVNldCgpCitpbmxpbmUgSGFuZGxlU2V0KiBIYW5kbGVOb2RlOjpo
YW5kbGVTZXQoKQogewotICAgIHJldHVybiBtX2hhbmRsZVNldDsKKyAgICByZXR1cm4gSGFuZGxl
QmxvY2s6OmJsb2NrRm9yKHRoaXMpLT5oYW5kbGVTZXQoKTsKIH0KIAotaW5saW5lIHZvaWQgSGFu
ZGxlU2V0OjpOb2RlOjpzZXRQcmV2KE5vZGUqIHByZXYpCitpbmxpbmUgdm9pZCBIYW5kbGVOb2Rl
OjpzZXRQcmV2KEhhbmRsZU5vZGUqIHByZXYpCiB7CiAgICAgbV9wcmV2ID0gcHJldjsKIH0KIAot
aW5saW5lIEhhbmRsZVNldDo6Tm9kZSogSGFuZGxlU2V0OjpOb2RlOjpwcmV2KCkKK2lubGluZSBI
YW5kbGVOb2RlKiBIYW5kbGVOb2RlOjpwcmV2KCkKIHsKICAgICByZXR1cm4gbV9wcmV2OwogfQog
Ci1pbmxpbmUgdm9pZCBIYW5kbGVTZXQ6Ok5vZGU6OnNldE5leHQoTm9kZSogbmV4dCkKK2lubGlu
ZSB2b2lkIEhhbmRsZU5vZGU6OnNldE5leHQoSGFuZGxlTm9kZSogbmV4dCkKIHsKICAgICBtX25l
eHQgPSBuZXh0OwogfQogCi1pbmxpbmUgSGFuZGxlU2V0OjpOb2RlKiBIYW5kbGVTZXQ6Ok5vZGU6
Om5leHQoKQoraW5saW5lIEhhbmRsZU5vZGUqIEhhbmRsZU5vZGU6Om5leHQoKQogewogICAgIHJl
dHVybiBtX25leHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgSGFuZGxl
U2V0Ojpmb3JFYWNoU3Ryb25nSGFuZGxlKEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IEhhc2hDb3Vu
dGVkU2V0PEpTQ2VsbCo+JiBza2lwU2V0KQogewotICAgIE5vZGUqIGVuZCA9IG1fc3Ryb25nTGlz
dC5lbmQoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX3N0cm9uZ0xpc3QuYmVnaW4oKTsgbm9k
ZSAhPSBlbmQ7IG5vZGUgPSBub2RlLT5uZXh0KCkpIHsKKyAgICBIYW5kbGVTZXQ6Ok5vZGUqIGVu
ZCA9IG1fc3Ryb25nTGlzdC5lbmQoKTsKKyAgICBmb3IgKEhhbmRsZVNldDo6Tm9kZSogbm9kZSA9
IG1fc3Ryb25nTGlzdC5iZWdpbigpOyBub2RlICE9IGVuZDsgbm9kZSA9IG5vZGUtPm5leHQoKSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gKm5vZGUtPnNsb3QoKTsKICAgICAgICAgaWYgKCF2
YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE0NjcyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAg
ICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJl
SklUU3R1YlJvdXRpbmU7CisgICAgICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZFNwYWNlOwo=
</data>
<flag name="review"
          id="216506"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>