<?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>68500</bug_id>
          
          <creation_ts>2011-09-20 20:32:23 -0700</creation_ts>
          <short_desc>DFG does not support compiling functions as constructors</short_desc>
          <delta_ts>2011-09-22 11:05:04 -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>All</rep_platform>
          <op_sys>All</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>
          <dependson>68642</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470574</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 20:32:23 -0700</bug_when>
    <thetext>The optimizing compiler in JavaScriptCore can&apos;t compile constructors.  That should be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471157</commentid>
    <comment_count>1</comment_count>
      <attachid>108234</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 14:28:24 -0700</bug_when>
    <thetext>Created attachment 108234
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471168</commentid>
    <comment_count>2</comment_count>
      <attachid>108234</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-21 14:46:10 -0700</bug_when>
    <thetext>Comment on attachment 108234
the patch

r=me

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1538
&gt; +        SpeculateCellOperand proto(this, node.child1());

&apos;this&apos; is always a cell. Does the DFG know that? Something good to fix in a follow-up patch, if not. (SpeculateCellOperand here is fine, but you should make sure the branch gets elided under the covers.)

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1563
&gt; +        // Need to verify that the prototype is an object. If we have reason to believe
&gt; +        // that it&apos;s a FinalObject then we speculate on that directly. Otherwise we
&gt; +        // do the slow (structure-based) check.
&gt; +        if (shouldSpeculateFinalObject(node.child1()))
&gt; +            speculationCheck(m_jit.branchPtr(MacroAssembler::NotEqual, MacroAssembler::Address(protoGPR), MacroAssembler::TrustedImmPtr(m_jit.globalData()-&gt;jsFinalObjectVPtr)));
&gt; +        else {
&gt; +            m_jit.loadPtr(MacroAssembler::Address(protoGPR, JSCell::structureOffset()), scratchGPR);
&gt; +            slowPath.append(m_jit.branch8(MacroAssembler::Below, MacroAssembler::Address(scratchGPR, Structure::typeInfoTypeOffset()), MacroAssembler::TrustedImm32(ObjectType)));
&gt; +        }
&gt; +        
&gt; +        // Load the inheritorID (the Structure that objects who have protoGPR as the prototype
&gt; +        // use to refer to that prototype). If the inheritorID is not set, go to slow path.
&gt; +        m_jit.loadPtr(MacroAssembler::Address(protoGPR, JSObject::offsetOfInheritorID()), scratchGPR);
&gt; +        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, scratchGPR));

You could remove all of this loading and  branching in a follow-up patch if you made assignments to function.prototype eagerly jettison the function&apos;s constructor code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471184</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 14:58:05 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1538
&gt; &gt; +        SpeculateCellOperand proto(this, node.child1());
&gt; 
&gt; &apos;this&apos; is always a cell. Does the DFG know that? Something good to fix in a follow-up patch, if not. (SpeculateCellOperand here is fine, but you should make sure the branch gets elided under the covers.)

The code you&apos;re referring to is speculating that the function.prototype is a cell.  Is that guaranteed?

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1563
&gt; &gt; +        // Need to verify that the prototype is an object. If we have reason to believe
&gt; &gt; +        // that it&apos;s a FinalObject then we speculate on that directly. Otherwise we
&gt; &gt; +        // do the slow (structure-based) check.
&gt; &gt; +        if (shouldSpeculateFinalObject(node.child1()))
&gt; &gt; +            speculationCheck(m_jit.branchPtr(MacroAssembler::NotEqual, MacroAssembler::Address(protoGPR), MacroAssembler::TrustedImmPtr(m_jit.globalData()-&gt;jsFinalObjectVPtr)));
&gt; &gt; +        else {
&gt; &gt; +            m_jit.loadPtr(MacroAssembler::Address(protoGPR, JSCell::structureOffset()), scratchGPR);
&gt; &gt; +            slowPath.append(m_jit.branch8(MacroAssembler::Below, MacroAssembler::Address(scratchGPR, Structure::typeInfoTypeOffset()), MacroAssembler::TrustedImm32(ObjectType)));
&gt; &gt; +        }
&gt; &gt; +        
&gt; &gt; +        // Load the inheritorID (the Structure that objects who have protoGPR as the prototype
&gt; &gt; +        // use to refer to that prototype). If the inheritorID is not set, go to slow path.
&gt; &gt; +        m_jit.loadPtr(MacroAssembler::Address(protoGPR, JSObject::offsetOfInheritorID()), scratchGPR);
&gt; &gt; +        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, scratchGPR));
&gt; 
&gt; You could remove all of this loading and  branching in a follow-up patch if you made assignments to function.prototype eagerly jettison the function&apos;s constructor code.

That would be interesting.  It would have to be done carefully, like making sure that there is no way any other JS code can execute in the prologue of the constructor.  I think that this should be trivially true once you know that .prototype is not insane.

For now though, I&apos;m going for softer targets.  Like all of the insanity on the put_by_id&apos;s that follow create_this.  We don&apos;t do anything special for them right now in DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471199</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 15:16:32 -0700</bug_when>
    <thetext>Landed in r95672.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471688</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-22 10:49:23 -0700</bug_when>
    <thetext>It appears that this patch caused hundreds of tests to fail:
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Tests%29/builds/33283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471689</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-22 10:49:35 -0700</bug_when>
    <thetext>It appears that this patch caused hundreds of tests to fail:
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Tests%29/builds/33283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471697</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-22 10:52:29 -0700</bug_when>
    <thetext>I&apos;m sorry but I have to roll out this patch for now. We&apos;re losing the entire test coverage due to this failure.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108234</attachid>
            <date>2011-09-21 14:28:24 -0700</date>
            <delta_ts>2011-09-21 14:46:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>constructors_patch_1.diff</filename>
            <type>text/plain</type>
            <size>17250</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDktMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZG9lcyBub3Qgc3VwcG9ydCBjb21waWxpbmcgZnVuY3Rpb25zIGFzIGNvbnN0cnVjdG9ycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1MDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgYWRkcyBzdXBwb3J0IGZvciBjb21waWxpbmcgY29uc3RydWN0b3JzIHRvIHRoZSBERkcuIEl0
J3MgYQorICAgICAgICAxJSBzcGVlZC11cCBvbiBWOCwgbW9zdGx5IGR1ZSB0byBhIDYlIHNwZWVk
LXVwIG9uIGVhcmx5LWJveWVyLgorICAgICAgICBJdCdzIGFsc28gYSAxMyUgd2luIG9uIGFjY2Vz
cy1iaW5hcnktdHJlZXMsIGJ1dCBpdCdzIG5ldXRyYWwgaW4KKyAgICAgICAgdGhlIFN1blNwaWRl
ciBhbmQgS3Jha2VuIGF2ZXJhZ2VzLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0
Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21w
aWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdP
cGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAq
IGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpw
cm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCk6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXpl
ZEZvcik6CisKIDIwMTEtMDktMjEgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UganNGdW5jdGlvblZQdHIgY29tcGFyZXMgd2l0aCBh
IHR5cGUgY2hlY2sgb24gdGhlIFN0cnVjdHVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTY2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MzAsNiArNzMwLDE3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnZlcnRfdGhpcyk7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CisgICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ3Jl
YXRlVGhpcywgb3AxKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfdGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2dldF9jYWxsZWU6IHsK
KyAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dy
YXBoKEdldENhbGxlZSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2NhbGxlZSk7
CisgICAgICAgIH0KKwogICAgICAgICAvLyA9PT0gQml0d2lzZSBvcGVyYXRpb25zID09PQogCiAg
ICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDk1NjY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBpbmxpbmUgYm9vbCBtaWdodENv
bXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBib29sIG1pZ2h0
Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wg
bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0K
LWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayop
IHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNv
bnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9CiAKIC8vIE9wY29kZSBjaGVja2lu
Zy4KIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC00
NSw2ICs0NSw4IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3AKICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF9lbnRlcjoKICAgICBjYXNlIG9wX2Nv
bnZlcnRfdGhpczoKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAgIGNhc2Ugb3BfZ2V0X2Nh
bGxlZToKICAgICBjYXNlIG9wX2JpdGFuZDoKICAgICBjYXNlIG9wX2JpdG9yOgogICAgIGNhc2Ug
b3BfYml0eG9yOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDk1NjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMSw3ICsyMTEsMTEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0
aE5vZGVGbGFncwogI2RlZmluZSBGT1JfRUFDSF9ERkdfT1AobWFjcm8pIFwKICAgICAvKiBOb2Rl
cyBmb3IgY29uc3RhbnRzLiAqL1wKICAgICBtYWNybyhKU0NvbnN0YW50LCBOb2RlUmVzdWx0SlMp
IFwKKyAgICBcCisgICAgLyogTm9kZXMgZm9yIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYm90aCBhcyBj
YWxsIGFuZCBhcyBjb25zdHJ1Y3QpLiAqL1wKICAgICBtYWNybyhDb252ZXJ0VGhpcywgTm9kZVJl
c3VsdEpTKSBcCisgICAgbWFjcm8oQ3JlYXRlVGhpcywgTm9kZVJlc3VsdEpTKSAvKiBOb3RlIHRo
aXMgaXMgbm90IE11c3RHZW5lcmF0ZSBzaW5jZSB3ZSdyZSByZXR1cm5pbmcgaXQgYW55d2F5LiAq
LyBcCisgICAgbWFjcm8oR2V0Q2FsbGVlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyog
Tm9kZXMgZm9yIGxvY2FsIHZhcmlhYmxlIGFjY2Vzcy4gKi9cCiAgICAgbWFjcm8oR2V0TG9jYWws
IE5vZGVSZXN1bHRKUykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5NTY2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksMjcgQEAg
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQ29udmVydFRoaXMoRXhlYwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcCkudG9UaGlzT2JqZWN0KGV4ZWMp
KTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKK3sKKyAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1
Y3RvciA9IGFzRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CisgICAgQVNTRVJUKGNvbnN0
cnVjdG9yLT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVK
Uyk7CisjZW5kaWYKKyAgICAKKyAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgSlNWYWx1
ZSBwcm90byA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApOworICAgIGlmIChwcm90by5pc09i
amVjdCgpKQorICAgICAgICBzdHJ1Y3R1cmUgPSBhc09iamVjdChwcm90byktPmluaGVyaXRvcklE
KGdsb2JhbERhdGEpOworICAgIGVsc2UKKyAgICAgICAgc3RydWN0dXJlID0gY29uc3RydWN0b3It
PnNjb3BlKCktPmdsb2JhbE9iamVjdC0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsKKyAgICAKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVj
dHVyZSkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDIpCiB7CiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24g
OTU2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCB0eXBlZGVmIHZvaWQgKigqUF9ERkdPcGVyYXRp
b25fRSkoRXhlY1N0CiAKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBv
dXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJ
VC4KIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZlcnRUaGlzKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQ3JlYXRlVGhp
cyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKTsKIEVuY29kZWRKU1ZhbHVl
IG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVmFs
dWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aEFk
ZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2
aXNpb24gOTU2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzMsNiArNTMzLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQxKCksIFByZWRpY3RPYmplY3RVbmtu
b3duIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOiB7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE9iamVjdE90aGVy
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0T2JqZWN0VW5rbm93biB8IFN0cm9u
Z1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RGaW5hbE9iamVjdCwgU3Ryb25nUHJlZGljdGlvbikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8g
VGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KQEAg
LTEwMTgsNiArMTAyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAg
ICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICBjYXNl
IEdldENhbGxlZToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTY2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTI3LDYgKzE1MjcsOTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ3Jl
YXRlVGhpczogeworICAgICAgICAvLyBOb3RlIHRoYXQgdGhlcmUgaXMgbm90IHNvIG11Y2ggcHJv
Zml0IHRvIHNwZWN1bGF0ZSBoZXJlLiBUaGUgb25seSB0aGluZ3Mgd2UKKyAgICAgICAgLy8gc3Bl
Y3VsYXRlIG9uIGFyZSAoMSkgdGhhdCBpdCdzIGEgY2VsbCwgc2luY2UgdGhhdCBlbGltaW5hdGVz
IGNlbGwgY2hlY2tzCisgICAgICAgIC8vIGxhdGVyIGlmIHRoZSBwcm90byBpcyByZXVzZWQsIGFu
ZCAoMikgaWYgd2UgaGF2ZSBhIEZpbmFsT2JqZWN0IHByZWRpY3Rpb24KKyAgICAgICAgLy8gdGhl
biB3ZSBzcGVjdWxhdGUgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCByZWNvbXBpbGVkIGlmIGl0IGlz
bid0IChzaW5jZQorICAgICAgICAvLyBvdGhlcndpc2Ugd2UnZCBzdGFydCB0YWtpbmcgc2xvdyBw
YXRoIGEgbG90KS4KKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3Rv
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgCisgICAgICAg
IEdQUlJlZyBwcm90b0dQUiA9IHByb3RvLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgIAorICAgICAgICBwcm90by51c2UoKTsKKyAgICAgICAgCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgCisgICAgICAgIC8vIE5l
ZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUg
cmVhc29uIHRvIGJlbGlldmUKKyAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhl
biB3ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCisgICAgICAgIC8v
IGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgorICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlRmluYWxPYmplY3Qobm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBy
b3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIExvYWQgdGhlIGluaGVyaXRvcklEICh0
aGUgU3RydWN0dXJlIHRoYXQgb2JqZWN0cyB3aG8gaGF2ZSBwcm90b0dQUiBhcyB0aGUgcHJvdG90
eXBlCisgICAgICAgIC8vIHVzZSB0byByZWZlciB0byB0aGF0IHByb3RvdHlwZSkuIElmIHRoZSBp
bmhlcml0b3JJRCBpcyBub3Qgc2V0LCBnbyB0byBzbG93IHBhdGguCisgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZkluaGVyaXRvcklEKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAg
ICAgICAgCisgICAgICAgIE1hcmtlZFNwYWNlOjpTaXplQ2xhc3MqIHNpemVDbGFzcyA9ICZtX2pp
dC5nbG9iYWxEYXRhKCktPmhlYXAuc2l6ZUNsYXNzRm9yT2JqZWN0KHNpemVvZihKU0ZpbmFsT2Jq
ZWN0KSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKCZzaXplQ2xhc3MtPmZpcnN0
RnJlZUNlbGwsIHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBvYmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBr
bm93IGlzIGEgZnJlc2ggb2JqZWN0LCBidXQKKyAgICAgICAgLy8gaXQncyBzdGlsbCBvbiB0aGUg
R0MncyBmcmVlIGxpc3QuCisgICAgICAgIAorICAgICAgICAvLyBEaXRjaCB0aGUgaW5oZXJpdG9y
SUQgYnkgcGxhY2luZyBpdCBpbnRvIHRoZSBzdHJ1Y3R1cmUsIHNvIHRoYXQgd2UgY2FuIHJldXNl
CisgICAgICAgIC8vIHNjcmF0Y2hHUFIuCisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OnN0cnVjdHVy
ZU9mZnNldCgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHNjcmF0
Y2hHUFIgYmFjaywgcmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0CisgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZzaXplQ2xhc3MtPmZp
cnN0RnJlZUNlbGwpOworICAgICAgICAKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgb2JqZWN0
J3MgdnRhYmxlCisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEluaXRpYWxp
emUgdGhlIG9iamVjdCdzIGluaGVyaXRvcklELgorICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSk7CisgICAgICAgIAorICAg
ICAgICAvLyBJbml0aWFsaXplIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIu
CisgICAgICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVv
ZihKU09iamVjdCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTRmlu
YWxPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpKTsKKyAgICAgICAgCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAorICAg
ICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKHByb3RvR1BSLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNyZWF0ZVRoaXMpOworICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICAgICAgCisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldENhbGxlZTogeworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oUmVnaXN0ZXJGaWxlOjpDYWxsZWUp
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBHZXRCeUlkOiB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gOTU2NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwLDEzICszNzAsMTMgQEAgSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0
YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2Fs
bGVlQXJnc0V4ZWMpCiB7CiAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xv
YmFsT2JqZWN0KTsKICAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAg
SlNPYmplY3QqIGVycm9yID0gMDsKICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdl
dEpJVFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkpCi0gICAgICAgIGVycm9yID0gY29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpu
ZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUVHlwZSgpKSk7CisgICAg
ICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5O
b2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmdldEpJVFR5cGUoKSkpOwogICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkBAIC00NTksNyArNDU5LDcgQEAgSlNPYmpl
Y3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCi1K
U09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSkKK0pTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29w
ZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlKQogewogICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKICAgICAKQEAgLTQ5OCw3ICs0
OTgsOCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjaWYgRU5B
QkxFKEpJVCkKICAgICBpZiAoZXhlYy0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7CiAgICAg
ICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBmYWxzZTsKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgaXQg
cG9zc2libGUgdG8gY29tcGlsZSBjb25zdHJ1Y3RvcnMgd2l0aCBERkcuCisgICAgICAgIGlmIChq
aXRUeXBlID09IEpJVENvZGU6OkRGR0pJVCkKKyAgICAgICAgICAgIGRmZ0NvbXBpbGVkID0gREZH
Ojp0cnlDb21waWxlRnVuY3Rpb24oZXhlYywgY2FsbGVlQXJnc0V4ZWMsIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LmdldCgpLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0
cnVjdFdpdGhBcml0eUNoZWNrKTsKICAgICAgICAgaWYgKGRmZ0NvbXBpbGVkKSB7CiAgICAgICAg
ICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpCiAgICAgICAg
ICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCktPnVubGlua0lu
Y29taW5nQ2FsbHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDk1NjY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsMTcgKzQ4NywxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JDYWxsOwogICAg
ICAgICB9CiAKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCisgICAgICAgIEpTT2JqZWN0
KiBjb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjID0gMCkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7CiAgICAgICAgICAgICBpZiAoIW1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KQotICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZv
ckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBKSVRDb2RlOjpib3R0b21U
aWVySklUKCkpOworICAgICAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVjdElu
dGVybmFsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6Ym90
dG9tVGllckpJVCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICAgIH0KIAot
ICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZv
ckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVl
QXJnc0V4ZWMgPSAwKTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkg
Y29uc3QKICAgICAgICAgewpAQCAtNTIxLDcgKzUyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbXBpbGVGb3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBleGVjKTsKICAgICAgICAgICAg
IEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAgICAgcmV0dXJuIGNv
bXBpbGVGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgcmV0
dXJuIGNvbXBpbGVGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUsIGV4ZWMpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvcihF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQpAQCAtNTM1LDcgKzUzNSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCBleGVjKTsK
ICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICAg
ICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5v
ZGUpOworICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhl
Yywgc2NvcGVDaGFpbk5vZGUsIGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTU4Nyw3
ICs1ODcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29s
IGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCk7CiAKICAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBKSVRDb2RlOjpKSVRUeXBlKTsKLSAg
ICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSosIEpJVENvZGU6OkpJVFR5cGUpOworICAgICAgICBKU09iamVjdCogY29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhl
Y1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgSklUQ29kZTo6SklUVHlwZSk7CiAgICAgICAgIAogICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNp
dENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVu
c2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsK
</data>
<flag name="review"
          id="105151"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>