<?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>101667</bug_id>
          
          <creation_ts>2012-11-08 16:57:21 -0800</creation_ts>
          <short_desc>Improve effectiveness of function-level caching</short_desc>
          <delta_ts>2012-11-08 18:43:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>762332</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-08 16:57:21 -0800</bug_when>
    <thetext>Improve effectiveness of function-level caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762334</commentid>
    <comment_count>1</comment_count>
      <attachid>173150</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-08 17:01:25 -0800</bug_when>
    <thetext>Created attachment 173150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762344</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-08 17:13:08 -0800</bug_when>
    <thetext>Committed r133975: &lt;http://trac.webkit.org/changeset/133975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762388</commentid>
    <comment_count>3</comment_count>
      <attachid>173150</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-08 18:03:58 -0800</bug_when>
    <thetext>Comment on attachment 173150
Patch

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

&gt; Source/JavaScriptCore/runtime/CodeCache.h:55
&gt; +template &lt;typename KeyType, typename EntryType, int CacheSize&gt; class Thingy {

Thingy? No, please use a real name. RandomEvictionCache maybe?

&gt; Source/JavaScriptCore/runtime/CodeCache.h:59
&gt; +    : m_randomGenerator((static_cast&lt;uint32_t&gt;(randomNumber() * UINT32_MAX)))

Incorrect indentation here.

&gt; Source/JavaScriptCore/runtime/CodeCache.h:76
&gt; +        size_t newIndex = m_randomGenerator.getUint32() % CacheSize;

This is not an even distribution across the cache; it will be slightly biased towards lower numbers unless the cache size is a power of 2. It would be better to make WeakRandom have a function to help you get even distribution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762423</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-11-08 18:43:21 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 173150 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173150&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CodeCache.h:55
&gt; &gt; +template &lt;typename KeyType, typename EntryType, int CacheSize&gt; class Thingy {
&gt; 
&gt; Thingy? No, please use a real name. RandomEvictionCache maybe?

Doh!

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CodeCache.h:59
&gt; &gt; +    : m_randomGenerator((static_cast&lt;uint32_t&gt;(randomNumber() * UINT32_MAX)))
&gt; 
&gt; Incorrect indentation here.
Whoops
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/CodeCache.h:76
&gt; &gt; +        size_t newIndex = m_randomGenerator.getUint32() % CacheSize;
&gt; 
&gt; This is not an even distribution across the cache; it will be slightly biased towards lower numbers unless the cache size is a power of 2. It would be better to make WeakRandom have a function to help you get even distribution.

The bias is not the worst thing in the world, adding the branches to get unbiased behaviour seems overkill.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173150</attachid>
            <date>2012-11-08 17:01:25 -0800</date>
            <delta_ts>2012-11-08 18:03:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101667-20121108165934.patch</filename>
            <type>text/plain</type>
            <size>16773</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZDI4Y2ZiMDJlNDUzYjVlYjVhY2ViNGVkNTJjZjg5MDllMTFjNDliLi5lNzMyODM0MTQ4YTEwNmRk
OWM4MWZhYWMyMmM1MmU4NzI5MzUzYzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxMi0xMS0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEltcHJvdmUgZWZmZWN0aXZlbmVzcyBvZiBmdW5jdGlvbi1sZXZlbCBjYWNoaW5n
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE2NjcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBh
IHJhbmRvbS1ldmljdGlvbiBiYXNlZCBjYWNoZSBmb3IgdW5saW5rZWQgZnVuY3Rpb25zLCBhbmQg
c3dpdGNoCisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlJ3MgY29kZSByZWZlcmVu
Y2VzIHRvIFdlYWs8PiwgdGhlcmVieSBsZXR0aW5nCisgICAgICAgIHVzIHJlbW92ZSB0aGUgZXhw
bGljaXQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpIGNhbGxzIHRoYXQK
KyAgICAgICAgd2VyZSBiZWluZyB0cmlnZ2VyZWQgYnkgR0MuCisKKyAgICAgICAgUmVmYWN0b3Jl
ZCB0aGUgcmFuZG9tIGV2aWN0aW9uIHBhcnQgb2YgdGhlIENvZGVDYWNoZSBpbnRvIGEgc2VwYXJh
dGUgZGF0YQorICAgICAgICBzdHJ1Y3R1cmUgc28gdGhhdCBJIGRpZG4ndCBoYXZlIHRvIGR1cGxp
Y2F0ZSB0aGUgY29kZSBhZ2FpbiwgYW5kIHRoZW4gdXNlZAorICAgICAgICB0aGF0IGZvciB0aGUg
bmV3IGZ1bmN0aW9uIGNhY2hlLgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjb2Rl
QmxvY2tGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGVGb3JSZWNvbXBp
bGF0aW9uKToKKyAgICAgICAgKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAg
KiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgICogcnVudGltZS9Db2RlQ2FjaGUuY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVDYWNoZTo6Z2VuZXJhdGVGdW5jdGlvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNv
ZGVDYWNoZTo6Z2V0RnVuY3Rpb25FeGVjdXRhYmxlRnJvbUdsb2JhbENvZGUpOgorICAgICAgICAo
SlNDOjpDb2RlQ2FjaGU6OnVzZWRGdW5jdGlvbkNvZGUpOgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OmNsZWFyVW5saW5rZWRDb2RlRm9yUmVjb21waWxhdGlvbklmTm90Q29tcGlsaW5nKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGUpOgorICAgICAgICAq
IHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxlKToKKwog
MjAxMi0xMS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERG
RyBjb25zdGFudCBmb2xkaW5nIGFuZCBDRkcgc2ltcGxpZmljYXRpb24gc2hvdWxkIGJlIHNtYXJ0
IGVub3VnaCB0byBrbm93IHRoYXQgaWYgYSBsb2dpY2FsIG9wJ3Mgb3BlcmFuZCBpcyBwcm92ZW4g
dG8gaGF2ZSBhIG5vbi1tYXNxdWVyYWRpbmcgc3RydWN0dXJlIHRoZW4gaXQgYWx3YXlzIGV2YWx1
YXRlcyB0byB0cnVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAppbmRleCAzMDc2ZWJhZjU3YmUxZTg1ZjFhYjRmNzg5YmIyZWNm
ZGQ5YWU5NWM0Li5lOThkNGRlMGFhOGJhNWMzNDhjNTRlZTI0YWZmZTBlOTk0NzE2Zjk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKQEAgLTgwLDggKzgwLDYgQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG8KICAgICBDT01Q
SUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1lVmFsdWUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX3N5bWJvbFRhYmxlRm9yQ2FsbCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QpOwpAQCAtMTEyLDEyICsxMTAsMTYg
QEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvZGVCbG9ja0ZvcihKU0dsb2JhbERhdGEKIHsKICAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9u
S2luZCkgewogICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0gICAgICAgIGlmIChtX2NvZGVCbG9ja0Zv
ckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAg
ICAgICBpZiAoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxv
Y2tGb3JDYWxsLmdldCgpKSB7CisgICAgICAgICAgICBnbG9iYWxEYXRhLmNvZGVDYWNoZSgpLT51
c2VkRnVuY3Rpb25Db2RlKGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgICAgICAgICByZXR1
cm4gY29kZUJsb2NrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29kZUZv
ckNvbnN0cnVjdDoKLSAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQotICAgICAg
ICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOworICAgICAgICBpZiAo
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuZ2V0KCkpIHsKKyAgICAgICAgICAgIGdsb2JhbERhdGEuY29kZUNhY2hlKCktPnVzZWRG
dW5jdGlvbkNvZGUoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBj
b2RlQmxvY2s7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMjgsMTEg
KzEzMCwxMSBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6Y29kZUJsb2NrRm9yKEpTR2xvYmFsRGF0YQogCiAgICAgc3dpdGNoIChzcGVjaWFs
aXphdGlvbktpbmQpIHsKICAgICBjYXNlIENvZGVGb3JDYWxsOgotICAgICAgICBtX2NvZGVCbG9j
a0ZvckNhbGwuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdCk7CisgICAgICAgIG1fY29kZUJs
b2NrRm9yQ2FsbCA9IFBhc3NXZWFrPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHJlc3VsdCk7
CiAgICAgICAgIG1fc3ltYm9sVGFibGVGb3JDYWxsLnNldChnbG9iYWxEYXRhLCB0aGlzLCByZXN1
bHQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvZGVGb3JDb25z
dHJ1Y3Q6Ci0gICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnNldChnbG9iYWxEYXRhLCB0
aGlzLCByZXN1bHQpOworICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IFBhc3NXZWFr
PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+KHJlc3VsdCk7CiAgICAgICAgIG1fc3ltYm9sVGFi
bGVGb3JDb25zdHJ1Y3Quc2V0KGdsb2JhbERhdGEsIHRoaXMsIHJlc3VsdC0+c3ltYm9sVGFibGUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggY2ZlMzJkYjQyNWRmODJjOTljMWZh
ODM3ZTdiZTkwMmU4MGRlYmZiZS4uMjM5MzdkNzczZWIwOTBjNGI2OTViNGJiY2UyNmUyNGJkZjYx
ODJmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1
ZGUgIlJlZ0V4cC5oIgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCisjaW5jbHVkZSAiV2Vh
ay5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTEwOCw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGxpbmsoSlNHbG9iYWxEYXRhJiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBsaW5l
T2Zmc2V0LCBzaXplX3Qgc291cmNlT2Zmc2V0KTsKIAotICAgIHZvaWQgY2xlYXJDb2RlKCkKKyAg
ICB2b2lkIGNsZWFyQ29kZUZvclJlY29tcGlsYXRpb24oKQogICAgIHsKICAgICAgICAgbV9zeW1i
b2xUYWJsZUZvckNhbGwuY2xlYXIoKTsKICAgICAgICAgbV9zeW1ib2xUYWJsZUZvckNvbnN0cnVj
dC5jbGVhcigpOwpAQCAtMTM2LDggKzEzNyw4IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25z
dCBTb3VyY2VDb2RlJiwgRnVuY3Rpb25Cb2R5Tm9kZSopOwotICAgIFdyaXRlQmFycmllcjxVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7Ci0gICAgV3JpdGVCYXJy
aWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0Owor
ICAgIFdlYWs8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwor
ICAgIFdlYWs8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3Q7CiAKICAgICB1bnNpZ25lZCBtX251bUNhcHR1cmVkVmFyaWFibGVzIDogMjk7CiAgICAgYm9v
bCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyLmNwcAppbmRleCBiMTQ3MjkxNDY4YTJiMDUwOTg0MjFiOGQyYjcwZWVmMDk0
NTY2ZmRkLi43ZWRhNTJkYzhiYWI3NWY4NmMzMTQzNzgwMGQ5ZWUwZWNkOWY2NTI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKQEAgLTgwLDcgKzgwLDcg
QEAgaW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCiAKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCktPkpT
R2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAgICAgZXhlY3V0YWJsZS0+Y2xlYXJDb2RlSWZO
b3RDb21waWxpbmcoKTsKLSAgICBleGVjdXRhYmxlLT5jbGVhclVubGlua2VkQ29kZUlmTm90Q29t
cGlsaW5nKCk7CisgICAgZXhlY3V0YWJsZS0+Y2xlYXJVbmxpbmtlZENvZGVGb3JSZWNvbXBpbGF0
aW9uSWZOb3RDb21waWxpbmcoKTsKICAgICBpZiAobV9kZWJ1Z2dlciA9PSBmdW5jdGlvbi0+c2Nv
cGUoKS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCiAgICAgICAgIG1fc291cmNlUHJvdmlk
ZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuY3BwCmluZGV4IDRkZTc2MGU0OWRj
MDhlY2E4ZmNkZTFiNDRmYTA3NjE1OGI5YzM3NWQuLjA2ODkxOTUyODc1YTIxYWI3OTBlMGFjNDZm
ZThjNWJmZTI1NGJhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcApAQCAtMzYsNyArMzYsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvZGVDYWNoZTo6
Q29kZUNhY2hlKCkKLSAgICA6IG1fcmFuZG9tR2VuZXJhdG9yKHN0YXRpY19jYXN0PHVpbnQzMl90
PihyYW5kb21OdW1iZXIoKSAqIFVJTlQzMl9NQVgpKQogewogfQogCkBAIC02Nyw5ICs2Niw5IEBA
IFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhCiAgICAgQ29kZUJsb2NrS2V5IGtleSA9IG1ha2VDb2Rl
QmxvY2tLZXkoc291cmNlLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OmNvZGVU
eXBlLCBzdHJpY3RuZXNzKTsKICAgICBib29sIHN0b3JlSW5DYWNoZSA9IGZhbHNlOwogICAgIGlm
IChkZWJ1Z2dlck1vZGUgPT0gRGVidWdnZXJPZmYgJiYgcHJvZmlsZXJNb2RlID09IFByb2ZpbGVy
T2ZmKSB7Ci0gICAgICAgIENvZGVCbG9ja0luZGljZXNNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
Y2FjaGVkQ29kZUJsb2NrSW5kaWNlcy5maW5kKGtleSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0g
bV9jYWNoZWRDb2RlQmxvY2tJbmRpY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIHVubGlua2VkQ29kZSA9IGpzQ2FzdDxVbmxpbmtlZENvZGVCbG9ja1R5cGUq
PihtX2NhY2hlZENvZGVCbG9ja3NbcmVzdWx0LT52YWx1ZV0uc2Vjb25kLmdldCgpKTsKKyAgICAg
ICAgY29uc3QgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiogcmVzdWx0ID0gbV9jYWNoZWRDb2Rl
QmxvY2tzLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2tUeXBlKiB1bmxpbmtlZENvZGUgPSBqc0Nhc3Q8VW5saW5rZWRDb2RlQmxv
Y2tUeXBlKj4ocmVzdWx0LT5nZXQoKSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUg
PSBzb3VyY2UuZmlyc3RMaW5lKCkgKyB1bmxpbmtlZENvZGUtPmZpcnN0TGluZSgpOwogICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UodW5saW5rZWRDb2RlLT5jb2RlRmVhdHVyZXMo
KSwgdW5saW5rZWRDb2RlLT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBmaXJzdExpbmUsIGZpcnN0
TGluZSArIHVubGlua2VkQ29kZS0+bGluZUNvdW50KCkpOwogICAgICAgICAgICAgcmV0dXJuIHVu
bGlua2VkQ29kZTsKQEAgLTkxLDE0ICs5MCw4IEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29k
ZUNhY2hlOjpnZXRDb2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhCiAg
ICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGlmIChzdG9yZUluQ2FjaGUpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4
ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJSBrTWF4Q29kZUJsb2NrRW50cmllczsK
LSAgICAgICAgaWYgKG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0uc2Vjb25kKQotICAgICAgICAg
ICAgbV9jYWNoZWRDb2RlQmxvY2tJbmRpY2VzLnJlbW92ZShtX2NhY2hlZENvZGVCbG9ja3NbaW5k
ZXhdLmZpcnN0KTsKLSAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tJbmRpY2VzLnNldChrZXksIGlu
ZGV4KTsKLSAgICAgICAgbV9jYWNoZWRDb2RlQmxvY2tzW2luZGV4XS5zZWNvbmQuc2V0KGdsb2Jh
bERhdGEsIHVubGlua2VkQ29kZSk7Ci0gICAgICAgIG1fY2FjaGVkQ29kZUJsb2Nrc1tpbmRleF0u
Zmlyc3QgPSBrZXk7Ci0gICAgfQorICAgIGlmIChzdG9yZUluQ2FjaGUpCisgICAgICAgIG1fY2Fj
aGVkQ29kZUJsb2Nrcy5hZGQoa2V5LCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KGdsb2JhbERh
dGEsIHVubGlua2VkQ29kZSkpOwogCiAgICAgcmV0dXJuIHVubGlua2VkQ29kZTsKIH0KQEAgLTEz
Myw2ICsxMjYsNyBAQCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdlbmVy
YXRlRnVuY3Rpb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbAogICAgIGJvZHktPmRlc3Ryb3lE
YXRhKCk7CiAgICAgaWYgKGVycm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQog
ICAgICAgICByZXR1cm4gMDsKKyAgICBtX2NhY2hlZEZ1bmN0aW9uQ29kZS5hZGQocmVzdWx0LCBT
dHJvbmc8VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4oZ2xvYmFsRGF0YSwgcmVzdWx0KSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTQ5LDkgKzE0Myw5IEBAIENvZGVDYWNoZTo6R2xv
YmFsRnVuY3Rpb25LZXkgQ29kZUNhY2hlOjptYWtlR2xvYmFsRnVuY3Rpb25LZXkoY29uc3QgU291
cmNlQ29kZSYKIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0
aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgR2xvYmFsRnVuY3Rpb25LZXkga2V5ID0gbWFrZUdsb2JhbEZ1bmN0
aW9uS2V5KHNvdXJjZSwgbmFtZS5zdHJpbmcoKSk7Ci0gICAgR2xvYmFsRnVuY3Rpb25JbmRpY2Vz
TWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5maW5k
KGtleSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVkR2xvYmFsRnVuY3Rpb25zW3Jlc3VsdC0+dmFs
dWVdLnNlY29uZC5nZXQoKTsKKyAgICBjb25zdCBTdHJvbmc8VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU+KiByZXN1bHQgPSBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9ucy5maW5kKGtleSk7CisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+Z2V0KCk7CiAKICAgICBSZWZQdHI8
UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBwYXJzZTxQcm9ncmFtTm9kZT4oJmdsb2JhbERhdGEsIHNv
dXJjZSwgMCwgSWRlbnRpZmllcigpLCBKU1BhcnNlTm9ybWFsLCBKU1BhcnNlUHJvZ3JhbUNvZGUs
IGVycm9yKTsKICAgICBpZiAoIXByb2dyYW0pIHsKQEAgLTE3MywxNCArMTY3LDEzIEBAIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZy
b21HbG9iYWxDb2RlKEpTR2xvCiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJmdsb2Jh
bERhdGEsIHNvdXJjZSwgYm9keSk7CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlLT5tX25hbWVWYWx1
ZS5zZXQoZ2xvYmFsRGF0YSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBqc1N0cmluZygmZ2xvYmFsRGF0
YSwgbmFtZS5zdHJpbmcoKSkpOwogCi0gICAgc2l6ZV90IGluZGV4ID0gbV9yYW5kb21HZW5lcmF0
b3IuZ2V0VWludDMyKCkgJSBrTWF4R2xvYmFsRnVuY3Rpb25FbnRyaWVzOwotICAgIGlmIChtX2Nh
Y2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRleF0uc2Vjb25kKQotICAgICAgICBtX2NhY2hlZEdsb2Jh
bEZ1bmN0aW9uSW5kaWNlcy5yZW1vdmUobV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLmZp
cnN0KTsKLSAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uSW5kaWNlcy5zZXQoa2V5LCBpbmRleCk7
Ci0gICAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnNbaW5kZXhdLnNlY29uZC5zZXQoZ2xvYmFsRGF0
YSwgZnVuY3Rpb25FeGVjdXRhYmxlKTsKLSAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9uc1tpbmRl
eF0uZmlyc3QgPSBrZXk7Ci0KKyAgICBtX2NhY2hlZEdsb2JhbEZ1bmN0aW9ucy5hZGQoa2V5LCBT
dHJvbmc8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEsIGZ1bmN0aW9uRXhl
Y3V0YWJsZSkpOwogICAgIHJldHVybiBmdW5jdGlvbkV4ZWN1dGFibGU7CiB9CiAKK3ZvaWQgQ29k
ZUNhY2hlOjp1c2VkRnVuY3Rpb25Db2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIG1fY2FjaGVkRnVuY3Rpb25D
b2RlLmFkZChjb2RlQmxvY2ssIFN0cm9uZzxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPihnbG9i
YWxEYXRhLCBjb2RlQmxvY2spKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db2RlQ2FjaGUuaAppbmRleCA0ZDQ2MTcxODllYzRlNjg5NDc2MTcxMjFlMmE4NmYwOTNjOWZk
Yzc1Li43NDBhYWE2ZGY2MjE1ZmVjZmFiN2U2N2YxNDY5ZTgwNWU1ZjU3OWJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01MSw2
ICs1Miw0MSBAQCBzdHJ1Y3QgUGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VDb2RlOwogY2xhc3Mg
U291cmNlUHJvdmlkZXI7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBF
bnRyeVR5cGUsIGludCBDYWNoZVNpemU+IGNsYXNzIFRoaW5neSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBIYXNoTWFwPEtleVR5cGUsIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlcmF0b3I7CitwdWJs
aWM6CisgICAgVGhpbmd5KCkKKyAgICA6IG1fcmFuZG9tR2VuZXJhdG9yKChzdGF0aWNfY2FzdDx1
aW50MzJfdD4ocmFuZG9tTnVtYmVyKCkgKiBVSU5UMzJfTUFYKSkpCisgICAgeworICAgIH0KKyAg
ICBjb25zdCBFbnRyeVR5cGUqIGZpbmQoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAg
ICAgaXRlcmF0b3IgcmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOworICAgICAgICBpZiAocmVzdWx0
ID09IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAm
bV9kYXRhW3Jlc3VsdC0+dmFsdWVdLnNlY29uZDsKKyAgICB9CisgICAgdm9pZCBhZGQoY29uc3Qg
S2V5VHlwZSYga2V5LCBjb25zdCBFbnRyeVR5cGUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaXRl
cmF0b3IgcmVzdWx0ID0gbV9tYXAuZmluZChrZXkpOworICAgICAgICBpZiAocmVzdWx0ICE9IG1f
bWFwLmVuZCgpKSB7CisgICAgICAgICAgICBtX2RhdGFbcmVzdWx0LT52YWx1ZV0uc2Vjb25kID0g
dmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2l6ZV90IG5l
d0luZGV4ID0gbV9yYW5kb21HZW5lcmF0b3IuZ2V0VWludDMyKCkgJSBDYWNoZVNpemU7CisgICAg
ICAgIGlmIChtX2RhdGFbbmV3SW5kZXhdLnNlY29uZCkKKyAgICAgICAgICAgIG1fbWFwLnJlbW92
ZShtX2RhdGFbbmV3SW5kZXhdLmZpcnN0KTsKKyAgICAgICAgbV9tYXAuYWRkKGtleSwgbmV3SW5k
ZXgpOworICAgICAgICBtX2RhdGFbbmV3SW5kZXhdLmZpcnN0ID0ga2V5OworICAgICAgICBtX2Rh
dGFbbmV3SW5kZXhdLnNlY29uZCA9IHZhbHVlOworICAgICAgICBBU1NFUlQobV9tYXAuc2l6ZSgp
IDw9IENhY2hlU2l6ZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBIYXNoTWFwPEtleVR5cGUsIHVu
c2lnbmVkPiBtX21hcDsKKyAgICBGaXhlZEFycmF5PHN0ZDo6cGFpcjxLZXlUeXBlLCBFbnRyeVR5
cGU+LCBDYWNoZVNpemU+IG1fZGF0YTsKKyAgICBXZWFrUmFuZG9tIG1fcmFuZG9tR2VuZXJhdG9y
OworfTsKKwogY2xhc3MgQ29kZUNhY2hlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxDb2RlQ2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb2RlQ2FjaGUpOyB9
CkBAIC01OSwxMyArOTUsMTIgQEAgcHVibGljOgogICAgIFVubGlua2VkRXZhbENvZGVCbG9jayog
Z2V0RXZhbENvZGVCbG9jayhKU0dsb2JhbERhdGEmLCBFdmFsRXhlY3V0YWJsZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
LCBQYXJzZXJFcnJvciYpOwogICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdldEZ1bmN0
aW9uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwg
Y29uc3QgU291cmNlQ29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwg
UHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOwogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShKU0dsb2JhbERhdGEmLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29kZSYsIFBhcnNlckVycm9yJik7CisgICAg
dm9pZCB1c2VkRnVuY3Rpb25Db2RlKEpTR2xvYmFsRGF0YSYsIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqKTsKICAgICB+Q29kZUNhY2hlKCk7CiAKICAgICBlbnVtIENvZGVUeXBlIHsgRXZhbFR5
cGUsIFByb2dyYW1UeXBlLCBGdW5jdGlvblR5cGUgfTsKICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxT
dHJpbmcsIHVuc2lnbmVkPiBDb2RlQmxvY2tLZXk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvZGVC
bG9ja0tleSwgdW5zaWduZWQ+IENvZGVCbG9ja0luZGljZXNNYXA7CiAgICAgdHlwZWRlZiBzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+IEdsb2JhbEZ1bmN0aW9uS2V5OwotICAgIHR5cGVkZWYgSGFz
aE1hcDxHbG9iYWxGdW5jdGlvbktleSwgdW5zaWduZWQ+IEdsb2JhbEZ1bmN0aW9uSW5kaWNlc01h
cDsKIAogcHJpdmF0ZToKICAgICBDb2RlQ2FjaGUoKTsKQEAgLTc0LDE4ICsxMDksMTcgQEAgcHJp
dmF0ZToKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBVbmxpbmtlZENvZGVCbG9ja1R5cGUsIGNsYXNz
IEV4ZWN1dGFibGVUeXBlPiBpbmxpbmUgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRDb2RlQmxv
Y2soSlNHbG9iYWxEYXRhJiwgRXhlY3V0YWJsZVR5cGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQ
YXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3Im
KTsKICAgICBDb2RlQmxvY2tLZXkgbWFrZUNvZGVCbG9ja0tleShjb25zdCBTb3VyY2VDb2RlJiwg
Q29kZVR5cGUsIEpTUGFyc2VyU3RyaWN0bmVzcyk7Ci0gICAgQ29kZUJsb2NrSW5kaWNlc01hcCBt
X2NhY2hlZENvZGVCbG9ja0luZGljZXM7CiAgICAgR2xvYmFsRnVuY3Rpb25LZXkgbWFrZUdsb2Jh
bEZ1bmN0aW9uS2V5KGNvbnN0IFNvdXJjZUNvZGUmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBHbG9i
YWxGdW5jdGlvbkluZGljZXNNYXAgbV9jYWNoZWRHbG9iYWxGdW5jdGlvbkluZGljZXM7CiAKICAg
ICBlbnVtIHsKICAgICAgICAga01heENvZGVCbG9ja0VudHJpZXMgPSAxMDI0LAotICAgICAgICBr
TWF4R2xvYmFsRnVuY3Rpb25FbnRyaWVzID0gMTAyNAorICAgICAgICBrTWF4R2xvYmFsRnVuY3Rp
b25FbnRyaWVzID0gMTAyNCwKKyAgICAgICAga01heEZ1bmN0aW9uQ29kZUJsb2NrcyA9IDEwMjQK
ICAgICB9OwogCi0gICAgRml4ZWRBcnJheTxzdGQ6OnBhaXI8Q29kZUJsb2NrS2V5LCBTdHJvbmc8
VW5saW5rZWRDb2RlQmxvY2s+ID4sIGtNYXhDb2RlQmxvY2tFbnRyaWVzPiBtX2NhY2hlZENvZGVC
bG9ja3M7Ci0gICAgRml4ZWRBcnJheTxzdGQ6OnBhaXI8R2xvYmFsRnVuY3Rpb25LZXksIFN0cm9u
ZzxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gPiwga01heEdsb2JhbEZ1bmN0aW9uRW50cmll
cz4gbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnM7Ci0gICAgV2Vha1JhbmRvbSBtX3JhbmRvbUdlbmVy
YXRvcjsKKyAgICBUaGluZ3k8Q29kZUJsb2NrS2V5LCBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+
LCBrTWF4Q29kZUJsb2NrRW50cmllcz4gbV9jYWNoZWRDb2RlQmxvY2tzOworICAgIFRoaW5neTxH
bG9iYWxGdW5jdGlvbktleSwgU3Ryb25nPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiwga01h
eEdsb2JhbEZ1bmN0aW9uRW50cmllcz4gbV9jYWNoZWRHbG9iYWxGdW5jdGlvbnM7CisgICAgVGhp
bmd5PFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqLCBTdHJvbmc8VW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jaz4sIGtNYXhGdW5jdGlvbkNvZGVCbG9ja3M+IG1fY2FjaGVkRnVuY3Rpb25Db2RlOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApp
bmRleCAyMGEyZTJhY2I5NzQ2MjRmNjY2YzdkYmQ5ZDBmZjRhNGQ3YTVmYWU2Li40OWEwZTI1NmQ1
MDVjYTBkYzhiYjljOWViZGQ5MjA3YjFmYWI3YWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtNjIwLDE4ICs2MjAsMTcgQEAgdm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCkKICAgICBjbGVhckNvZGUo
KTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyVW5saW5rZWRDb2RlSWZOb3RD
b21waWxpbmcoKQordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFyVW5saW5rZWRDb2RlRm9y
UmVjb21waWxhdGlvbklmTm90Q29tcGlsaW5nKCkKIHsKICAgICBpZiAoaXNDb21waWxpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGVhckNvZGUoKTsK
KyAgICBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y2xlYXJDb2RlRm9yUmVjb21waWxhdGlvbigpOwog
fQogCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsKICAgICBtX2NvZGVC
bG9ja0ZvckNhbGwuY2xlYXIoKTsKICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigp
OwotICAgIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jbGVhckNvZGUoKTsKICAgICBCYXNlOjpjbGVh
ckNvZGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CmluZGV4IDc0YjRhZGQ3NWMzMmYzODZkNDRjYWUyNDg4YjE5MjRkZTJjODBjNzUuLjk4NDcxYjg1
YmUyY2I5NTRlYmYxOTIzZDFiZTIwNmQyMjFkMWQ4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTcwNCw3ICs3MDQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnN5bWJv
bFRhYmxlKGtpbmQpOyB9CiAKICAgICAgICAgdm9pZCBjbGVhckNvZGVJZk5vdENvbXBpbGluZygp
OwotICAgICAgICB2b2lkIGNsZWFyVW5saW5rZWRDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICAg
ICAgdm9pZCBjbGVhclVubGlua2VkQ29kZUZvclJlY29tcGlsYXRpb25JZk5vdENvbXBpbGluZygp
OwogICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG8pCiAgICAgICAgIHsK
</data>
<flag name="review"
          id="187740"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>