<?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>148353</bug_id>
          
          <creation_ts>2015-08-21 20:57:16 -0700</creation_ts>
          <short_desc>[JSC] Reduce the memory usage of BytecodeLivenessAnalysis</short_desc>
          <delta_ts>2015-08-23 23:18:52 -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>New Bugs</component>
          <version>WebKit 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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1120076</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-21 20:57:16 -0700</bug_when>
    <thetext>[JSC] Reduce the memory usage of BytecodeLivenessAnalysis</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120080</commentid>
    <comment_count>1</comment_count>
      <attachid>259709</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-21 21:08:05 -0700</bug_when>
    <thetext>Created attachment 259709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120186</commentid>
    <comment_count>2</comment_count>
      <attachid>259709</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-08-23 09:31:15 -0700</bug_when>
    <thetext>Comment on attachment 259709
Patch

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

&gt; Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp:113
&gt; +void computeBytecodeBasicBlocks(CodeBlock* codeBlock, Vector&lt;std::unique_ptr&lt;BytecodeBasicBlock&gt; &gt;&amp; basicBlocks)

No need for the space between the &quot;&gt;&quot; characters.

&gt; Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp:122
&gt; +    std::unique_ptr&lt;BytecodeBasicBlock&gt; entry(new BytecodeBasicBlock(BytecodeBasicBlock::EntryBlock));
&gt; +    std::unique_ptr&lt;BytecodeBasicBlock&gt; firstBlock(new BytecodeBasicBlock(0, 0));

WebKit coding style is to make_unique so there’s no separate “new”:

   auto entry = std::make_unique&lt;BytecodeBasicBlock&gt;(BytecodeBasicBlock::EntryBlock);
   auto firstBlock = std::make_unique&lt;BytecodeBasicBlock&gt;(0, 0);

&gt; Source/JavaScriptCore/bytecode/BytecodeBasicBlock.cpp:143
&gt; +            std::unique_ptr&lt;BytecodeBasicBlock&gt; newBlock(new BytecodeBasicBlock(bytecodeOffset, opcodeLength));

auto newBlock = std::make_unique&lt;BytecodeBasicBlock&gt;(bytecodeOffset, opcodeLength);

&gt; Source/JavaScriptCore/bytecode/BytecodeBasicBlock.h:40
&gt; +class BytecodeBasicBlock {
&gt; +    WTF_MAKE_FAST_ALLOCATED;

Since there’s no polymorphism involved, why are we allocating these on the heap at all? Can we just use Vector&lt;BytecodeBasicBlock&gt; instead? I suppose the problem there is that the blocks will be moved so we can’t use pointers in m_successors?

&gt; Source/JavaScriptCore/bytecode/BytecodeBasicBlock.h:73
&gt; +void computeBytecodeBasicBlocks(CodeBlock*, Vector&lt;std::unique_ptr&lt;BytecodeBasicBlock&gt; &gt;&amp;);

No need for the space between the &gt; characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120230</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-23 22:52:50 -0700</bug_when>
    <thetext>Thanks for the review!

&gt; WebKit coding style is to make_unique so there’s no separate “new”:

You are not making it easy on my dislike for auto :)

&gt; &gt; Source/JavaScriptCore/bytecode/BytecodeBasicBlock.h:40
&gt; &gt; +class BytecodeBasicBlock {
&gt; &gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; 
&gt; Since there’s no polymorphism involved, why are we allocating these on the
&gt; heap at all? Can we just use Vector&lt;BytecodeBasicBlock&gt; instead? I suppose
&gt; the problem there is that the blocks will be moved so we can’t use pointers
&gt; in m_successors?

You are right, I explained that in the changelog. I wanted this patch to be simple and mechanical but this can definitely be improved further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120233</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-08-23 23:18:52 -0700</bug_when>
    <thetext>Committed r188849: &lt;http://trac.webkit.org/changeset/188849&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259709</attachid>
            <date>2015-08-21 21:08:05 -0700</date>
            <delta_ts>2015-08-23 09:31:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148353-20150821210758.patch</filename>
            <type>text/plain</type>
            <size>17849</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NjQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
OGMxZTk5ZDNkOTdlZmZiYTJhOGNkY2RjYzYwYjJlY2U5ZDIxYmY5Li40YWQxMDQyMWI4OTljZThh
ZDNkZGE5Y2RiYzU3YWYwMTA3YzFkMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAxNS0wOC0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBSZWR1Y2UgdGhlIG1lbW9yeSB1c2FnZSBvZiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODM1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBlYXNpbHkgdGFrZXMga2lsb2J5dGVz
IG9mIG1lbW9yeSBmb3IKKyAgICAgICAgbm9uIHRyaXZpYWwgYmxvY2tzIGFuZCB0aGF0IG1lbW9y
eSBzdGlja3MgYXJvdW5kIGJlY2F1c2UKKyAgICAgICAgaXQgc3RvcmVkIG9uIENvZGVCbG9jay4K
KworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgdGhhdCBtZW1vcnkgdXNlIGEgYml0LgorCisg
ICAgICAgIE1vc3Qgb2YgdGhlIG1lbW9yeSBpcyBpbiB0aGUgYXJyYXkgb2YgQnl0ZWNvZGVCYXNp
Y0Jsb2NrLgorICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sgaXMgc2hydW5rIGJ5OgorICAgICAg
ICAtTWFraW5nIGl0IG5vdCByZWYtY291bnRlZC4KKyAgICAgICAgLVJlbW92aW5nIG1fcHJlZGVj
ZXNzb3JzLCBpdCB3YXMgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcgYW5kCisgICAgICAgICBpcyB1
c3VhbGx5IGJpZy4KKyAgICAgICAgLUFkZGVkIGEgc2hyaW5rVG9GaXQoKSBwaGFzZSB0byBzaHJp
bmsgdGhlIHZlY3RvcnMgb25jZSB3ZSBhcmUKKyAgICAgICAgIGRvbmUgYnVpbGRpbmcgdGhlIEJ5
dGVjb2RlQmFzaWNCbG9jay4KKworICAgICAgICBUaGVyZSBhcmUgbW9yZSB0aGluZ3Mgd2Ugc2hv
dWxkIGRvIGluIHRoZSBmdXR1cmU6CisgICAgICAgIC1TdG9yZSBhbGwgdGhlIEJ5dGVjb2RlQmFz
aWNCbG9jayBkaXJlY2x0eSBpbiB0aGUgYXJyYXkuCisgICAgICAgICBXZSBrbm93IHRoZSBzaXpl
IGFoZWFkIG9mIHRpbWUsIHRoaXMgd291bGQgYmUgYSBwdXJlIHdpbi4KKyAgICAgICAgIFRoZSBv
bmx5IHRyaWNreSBwYXJ0IGlzIGNoYW5naW5nIG1fc3VjY2Vzc29ycyB0byBoYXZlIHRoZQorICAg
ICAgICAgaW5kZXggb2YgdGhlIHN1Y2Nlc3NvciBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKyAgICAg
ICAgLVN0b3AgcHV0dGluZyBkdXBsaWNhdGVzIGluIG1fc3VjY2Vzc29ycy4KKworICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVC
eXRlY29kZUJhc2ljQmxvY2tzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpz
aHJpbmtUb0ZpdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtCbG9ja3MpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oOgorICAgICAgICAoSlND
OjpCeXRlY29kZUJhc2ljQmxvY2s6OmFkZFN1Y2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
eXRlY29kZUJhc2ljQmxvY2s6OnByZWRlY2Vzc29ycyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0TGVh
ZGVyT2Zmc2V0Rm9yQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OmZpbmRCYXNpY0Jsb2NrV2l0
aExlYWRlck9mZnNldCk6CisgICAgICAgIChKU0M6OmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6
OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaDoKKwogMjAxNS0wOC0yMCAgQmVuamFtaW4gUG91
bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBHZXQgcmlkIG9mIERG
RydzIE1lcmdlTW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAppbmRleCA5NjFlYWRiNmE3ZDY2MWIxYjVlNTdjNTc1Njkx
ZjIzMGUyZGFlOTg4Li4yYjM2NjUzMTk0M2FlMTUwMWU0MDAwYWQ2ZWRlMjEyYzhjNDI4YTY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Js
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsNiArMzIsMTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3ZvaWQgQnl0
ZWNvZGVCYXNpY0Jsb2NrOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9ieXRlY29kZU9mZnNldHMu
c2hyaW5rVG9GaXQoKTsKKyAgICBtX3N1Y2Nlc3NvcnMuc2hyaW5rVG9GaXQoKTsKK30KKwogc3Rh
dGljIGJvb2wgaXNCcmFuY2goT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7CiAgICAgc3dpdGNoIChvcGNv
ZGVJRCkgewpAQCAtOTEsMzggKzk3LDM2IEBAIHN0YXRpYyBib29sIGlzVGhyb3coT3Bjb2RlSUQg
b3Bjb2RlSUQpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBpc0p1bXBUYXJnZXQoT3Bjb2RlSUQg
b3Bjb2RlSUQsIFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBqdW1wVGFyZ2V0cywgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQpCitzdGF0aWMgYm9vbCBpc0p1bXBUYXJnZXQoT3Bjb2RlSUQgb3Bjb2RlSUQs
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMzI+JiBqdW1wVGFyZ2V0cywgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCiB7CiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhdGNoKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqdW1wVGFyZ2V0cy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQgPT0ganVtcFRhcmdldHNbaV0p
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBzdGQ6OmJpbmFyeV9zZWFyY2goanVtcFRhcmdldHMuYmVnaW4oKSwganVtcFRhcmdl
dHMuZW5kKCksIGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgbGlua0Jsb2NrcyhC
eXRlY29kZUJhc2ljQmxvY2sqIHByZWRlY2Vzc29yLCBCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nl
c3NvcikKIHsKICAgICBwcmVkZWNlc3Nvci0+YWRkU3VjY2Vzc29yKHN1Y2Nlc3Nvcik7Ci0gICAg
c3VjY2Vzc29yLT5hZGRQcmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7CiB9CiAKLXZvaWQgY29tcHV0
ZUJ5dGVjb2RlQmFzaWNCbG9ja3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxSZWZQdHI8
Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcykKK3ZvaWQgY29tcHV0ZUJ5dGVjb2Rl
QmFzaWNCbG9ja3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcykKIHsKICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDMyPiBqdW1wVGFyZ2V0czsKICAgICBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKGNvZGVC
bG9jaywganVtcFRhcmdldHMpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeSBhbmQgZXhpdCBi
YXNpYyBibG9ja3MuCi0gICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBlbnRyeSA9IG5ldyBCeXRlY29k
ZUJhc2ljQmxvY2soQnl0ZWNvZGVCYXNpY0Jsb2NrOjpFbnRyeUJsb2NrKTsKLSAgICBiYXNpY0Js
b2Nrcy5hcHBlbmQoYWRvcHRSZWYoZW50cnkpKTsKLSAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGV4
aXQgPSBuZXcgQnl0ZWNvZGVCYXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6RXhpdEJsb2Nr
KTsKKyAgICBiYXNpY0Jsb2Nrcy5yZXNlcnZlQ2FwYWNpdHkoanVtcFRhcmdldHMuc2l6ZSgpICsg
Mik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiBlbnRyeShuZXcg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6RW50cnlCbG9jaykpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUJhc2ljQmxvY2s+IGZpcnN0QmxvY2sobmV3IEJ5dGVj
b2RlQmFzaWNCbG9jaygwLCAwKSk7CisgICAgbGlua0Jsb2NrcyhlbnRyeS5nZXQoKSwgZmlyc3RC
bG9jay5nZXQoKSk7CisKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGVudHJ5KSk7
CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBjdXJyZW50ID0gZmlyc3RCbG9jay5nZXQoKTsKKyAg
ICBiYXNpY0Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGZpcnN0QmxvY2spKTsKIAotICAgIC8vIEZp
bmQgYmFzaWMgYmxvY2sgYm91bmRhcmllcy4KLSAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGN1cnJl
bnQgPSBuZXcgQnl0ZWNvZGVCYXNpY0Jsb2NrKDAsIDApOwotICAgIGxpbmtCbG9ja3MoZW50cnks
IGN1cnJlbnQpOwotICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihjdXJyZW50KSk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4gZXhpdChuZXcgQnl0ZWNvZGVC
YXNpY0Jsb2NrKEJ5dGVjb2RlQmFzaWNCbG9jazo6RXhpdEJsb2NrKSk7CiAKICAgICBib29sIG5l
eHRJbnN0cnVjdGlvbklzTGVhZGVyID0gZmFsc2U7CiAKQEAgLTEzNiw5ICsxNDAsOSBAQCB2b2lk
IGNvbXB1dGVCeXRlY29kZUJhc2ljQmxvY2tzKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8
UmVmUHRyPEJ5dGVjb2RlQmFzaQogICAgICAgICBib29sIGNyZWF0ZWRCbG9jayA9IGZhbHNlOwog
ICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBieXRlY29kZSBpcyBhIGp1bXAgdGFyZ2V0LCB0aGVu
IGl0J3MgdGhlIGxlYWRlciBvZiBpdHMgb3duIGJhc2ljIGJsb2NrLgogICAgICAgICBpZiAoaXNK
dW1wVGFyZ2V0KG9wY29kZUlELCBqdW1wVGFyZ2V0cywgYnl0ZWNvZGVPZmZzZXQpIHx8IG5leHRJ
bnN0cnVjdGlvbklzTGVhZGVyKSB7Ci0gICAgICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJs
b2NrID0gbmV3IEJ5dGVjb2RlQmFzaWNCbG9jayhieXRlY29kZU9mZnNldCwgb3Bjb2RlTGVuZ3Ro
KTsKLSAgICAgICAgICAgIGJhc2ljQmxvY2tzLmFwcGVuZChhZG9wdFJlZihibG9jaykpOwotICAg
ICAgICAgICAgY3VycmVudCA9IGJsb2NrOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlQmFzaWNCbG9jaz4gbmV3QmxvY2sobmV3IEJ5dGVjb2RlQmFzaWNCbG9jayhieXRlY29k
ZU9mZnNldCwgb3Bjb2RlTGVuZ3RoKSk7CisgICAgICAgICAgICBjdXJyZW50ID0gbmV3QmxvY2su
Z2V0KCk7CisgICAgICAgICAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKG5ld0Jsb2Nr
KSk7CiAgICAgICAgICAgICBjcmVhdGVkQmxvY2sgPSB0cnVlOwogICAgICAgICAgICAgbmV4dElu
c3RydWN0aW9uSXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ICs9
IG9wY29kZUxlbmd0aDsKQEAgLTE3MSw3ICsxNzUsNyBAQCB2b2lkIGNvbXB1dGVCeXRlY29kZUJh
c2ljQmxvY2tzKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFz
aQogICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgYSB0ZXJtaW5hbCBieXRlY29kZSwgbGluayB0
byB0aGUgZXhpdCBibG9jay4KICAgICAgICAgICAgIGlmIChpc1Rlcm1pbmFsKG9wY29kZUlEKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVChieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCA9
PSBibG9jay0+bGVhZGVyQnl0ZWNvZGVPZmZzZXQoKSArIGJsb2NrLT50b3RhbEJ5dGVjb2RlTGVu
Z3RoKCkpOwotICAgICAgICAgICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIGV4aXQpOworICAgICAg
ICAgICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIGV4aXQuZ2V0KCkpOwogICAgICAgICAgICAgICAg
IGZhbGxzVGhyb3VnaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtMTg0LDcgKzE4OCw3IEBAIHZvaWQgY29tcHV0ZUJ5dGVjb2RlQmFzaWNCbG9ja3Mo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpCiAgICAgICAg
ICAgICAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBjb2RlQmxvY2stPmhhbmRsZXJGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CiAgICAgICAgICAgICAgICAgZmFsbHNUaHJvdWdo
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmtCbG9ja3MoYmxvY2ssIGV4aXQpOworICAgICAgICAgICAgICAgICAgICBsaW5r
QmxvY2tzKGJsb2NrLCBleGl0LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBiYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewpAQCAtMjI1LDcgKzIyOSwxMCBAQCB2b2lkIGNv
bXB1dGVCeXRlY29kZUJhc2ljQmxvY2tzKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVm
UHRyPEJ5dGVjb2RlQmFzaQogICAgICAgICB9CiAgICAgfQogCi0gICAgYmFzaWNCbG9ja3MuYXBw
ZW5kKGFkb3B0UmVmKGV4aXQpKTsKKyAgICBiYXNpY0Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGV4
aXQpKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGJhc2ljQmxvY2sgOiBiYXNpY0Jsb2NrcykKKyAg
ICAgICAgYmFzaWNCbG9jay0+c2hyaW5rVG9GaXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Js
b2NrLmgKaW5kZXggNzM2YmE4NTQwYzk1ZmE4NTJjOThmZDg0MDQ4NmNlYjk3MWZiY2ZhMC4uMWFl
ZjZhOTI3NTJjNjMwYTBkM2Y5MjhlYmY2MTZkZTdlNDlkOTUwNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTEgKzM2
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7CiAKLWNsYXNzIEJ5dGVj
b2RlQmFzaWNCbG9jayA6IHB1YmxpYyBSZWZDb3VudGVkPEJ5dGVjb2RlQmFzaWNCbG9jaz4gewor
Y2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBlbnVtIFNwZWNpYWxCbG9ja1R5cGUgeyBFbnRyeUJsb2NrLCBFeGl0Qmxv
Y2sgfTsKICAgICBCeXRlY29kZUJhc2ljQmxvY2sodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKFNwZWNpYWxCbG9ja1R5cGUpOworICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKIAogICAgIGJvb2wgaXNFbnRyeUJsb2NrKCkgeyByZXR1cm4gIW1f
bGVhZGVyQnl0ZWNvZGVPZmZzZXQgJiYgIW1fdG90YWxCeXRlY29kZUxlbmd0aDsgfQogICAgIGJv
b2wgaXNFeGl0QmxvY2soKSB7IHJldHVybiBtX2xlYWRlckJ5dGVjb2RlT2Zmc2V0ID09IFVJTlRf
TUFYICYmIG1fdG90YWxCeXRlY29kZUxlbmd0aCA9PSBVSU5UX01BWDsgfQpAQCAtNTEsMTEgKzUz
LDggQEAgcHVibGljOgogICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGJ5dGVjb2RlT2Zmc2V0cygpIHsg
cmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXRzOyB9CiAgICAgdm9pZCBhZGRCeXRlY29kZUxlbmd0aCh1
bnNpZ25lZCk7CiAKLSAgICB2b2lkIGFkZFByZWRlY2Vzc29yKEJ5dGVjb2RlQmFzaWNCbG9jayog
YmxvY2spIHsgbV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrKTsgfQotICAgIHZvaWQgYWRkU3Vj
Y2Vzc29yKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2spIHsgbV9zdWNjZXNzb3JzLmFwcGVuZChi
bG9jayk7IH0KLQotICAgIFZlY3RvcjxCeXRlY29kZUJhc2ljQmxvY2sqPiYgcHJlZGVjZXNzb3Jz
KCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KICAgICBWZWN0b3I8Qnl0ZWNvZGVCYXNpY0Js
b2NrKj4mIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICB2b2lkIGFk
ZFN1Y2Nlc3NvcihCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrKSB7IG1fc3VjY2Vzc29ycy5hcHBl
bmQoYmxvY2spOyB9CiAKICAgICBGYXN0Qml0VmVjdG9yJiBpbigpIHsgcmV0dXJuIG1faW47IH0K
ICAgICBGYXN0Qml0VmVjdG9yJiBvdXQoKSB7IHJldHVybiBtX291dDsgfQpAQCAtNjUsMTUgKzY0
LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV90b3RhbEJ5dGVjb2RlTGVuZ3RoOwogCiAg
ICAgVmVjdG9yPHVuc2lnbmVkPiBtX2J5dGVjb2RlT2Zmc2V0czsKLQotICAgIFZlY3RvcjxCeXRl
Y29kZUJhc2ljQmxvY2sqPiBtX3ByZWRlY2Vzc29yczsKICAgICBWZWN0b3I8Qnl0ZWNvZGVCYXNp
Y0Jsb2NrKj4gbV9zdWNjZXNzb3JzOwogCiAgICAgRmFzdEJpdFZlY3RvciBtX2luOwogICAgIEZh
c3RCaXRWZWN0b3IgbV9vdXQ7CiB9OwogCi12b2lkIGNvbXB1dGVCeXRlY29kZUJhc2ljQmxvY2tz
KENvZGVCbG9jayosIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+Jik7Cit2b2lk
IGNvbXB1dGVCeXRlY29kZUJhc2ljQmxvY2tzKENvZGVCbG9jayosIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+Jik7CiAKIGlubGluZSBCeXRlY29kZUJhc2ljQmxv
Y2s6OkJ5dGVjb2RlQmFzaWNCbG9jayh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQog
ICAgIDogbV9sZWFkZXJCeXRlY29kZU9mZnNldChzdGFydCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAK
aW5kZXggODAxNzNhYzIyNjE2ZmE0MGUxZGJjYWVjNTI1ZTIzZTZjYTA5M2QwNS4uYzc3YWJlYWEy
OTIwOWUzMjk5MTNjZDk0Y2ZhZDc1MTUxOWJkOTlmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAK
QEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVz
cyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50IG9wZXJhbmQpCiAgICAgcmV0dXJuIHZpcnR1YWxS
ZWcuaXNMb2NhbCgpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgZ2V0TGVhZGVyT2Zmc2V0Rm9yQmFz
aWNCbG9jayhSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiogYmFzaWNCbG9jaykKK3N0YXRpYyB1
bnNpZ25lZCBnZXRMZWFkZXJPZmZzZXRGb3JCYXNpY0Jsb2NrKHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUJhc2ljQmxvY2s+KiBiYXNpY0Jsb2NrKQogewogICAgIHJldHVybiAoKmJhc2ljQmxvY2sp
LT5sZWFkZXJCeXRlY29kZU9mZnNldCgpOwogfQogCi1zdGF0aWMgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJh
c2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBsZWFkZXJPZmZzZXQpCitzdGF0aWMg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9ja1dpdGhMZWFkZXJPZmZzZXQoVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUJhc2ljQmxvY2s+PiYgYmFzaWNCbG9ja3MsIHVuc2ln
bmVkIGxlYWRlck9mZnNldCkKIHsKLSAgICByZXR1cm4gKCp0cnlCaW5hcnlTZWFyY2g8UmVmUHRy
PEJ5dGVjb2RlQmFzaWNCbG9jaz4sIHVuc2lnbmVkPihiYXNpY0Jsb2NrcywgYmFzaWNCbG9ja3Mu
c2l6ZSgpLCBsZWFkZXJPZmZzZXQsIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2spKS5nZXQo
KTsKKyAgICByZXR1cm4gKCp0cnlCaW5hcnlTZWFyY2g8c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2Rl
QmFzaWNCbG9jaz4sIHVuc2lnbmVkPihiYXNpY0Jsb2NrcywgYmFzaWNCbG9ja3Muc2l6ZSgpLCBs
ZWFkZXJPZmZzZXQsIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2spKS5nZXQoKTsKIH0KIAog
c3RhdGljIGJvb2wgYmxvY2tDb250YWluc0J5dGVjb2RlT2Zmc2V0KEJ5dGVjb2RlQmFzaWNCbG9j
ayogYmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNjcsNyArNjcsNyBAQCBzdGF0
aWMgYm9vbCBibG9ja0NvbnRhaW5zQnl0ZWNvZGVPZmZzZXQoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBi
bG9jaywgdW5zaWduZWQgYnl0ZQogICAgIHJldHVybiBieXRlY29kZU9mZnNldCA+PSBsZWFkZXJP
ZmZzZXQgJiYgYnl0ZWNvZGVPZmZzZXQgPCBsZWFkZXJPZmZzZXQgKyBibG9jay0+dG90YWxCeXRl
Y29kZUxlbmd0aCgpOwogfQogCi1zdGF0aWMgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBmaW5kQmFzaWNC
bG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiA+
JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCitzdGF0aWMgQnl0ZWNvZGVC
YXNpY0Jsb2NrKiBmaW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCkKIHsKIC8qCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxv
Y2tzLnNpemUoKTsgaSsrKSB7CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBCeXRlY29kZUJhc2lj
QmxvY2sqIGZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFJlZlB0cjxCeXRl
Y29kCiAgICAgfQogICAgIHJldHVybiAwOwogKi8KLSAgICBSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Js
b2NrPiogYmFzaWNCbG9jayA9IGFwcHJveGltYXRlQmluYXJ5U2VhcmNoPFJlZlB0cjxCeXRlY29k
ZUJhc2ljQmxvY2s+LCB1bnNpZ25lZD4oCisgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlQmFz
aWNCbG9jaz4qIGJhc2ljQmxvY2sgPSBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDxzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiwgdW5zaWduZWQ+KAogICAgICAgICBiYXNpY0Jsb2Nr
cywgYmFzaWNCbG9ja3Muc2l6ZSgpLCBieXRlY29kZU9mZnNldCwgZ2V0TGVhZGVyT2Zmc2V0Rm9y
QmFzaWNCbG9jayk7CiAgICAgLy8gV2UgZm91bmQgdGhlIGJsb2NrIHdlIHdlcmUgbG9va2luZyBm
b3IuCiAgICAgaWYgKGJsb2NrQ29udGFpbnNCeXRlY29kZU9mZnNldCgoKmJhc2ljQmxvY2spLmdl
dCgpLCBieXRlY29kZU9mZnNldCkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBCeXRlY29kZUJh
c2ljQmxvY2sqIGZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFJlZlB0cjxC
eXRlY29kCiAvLyBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBieXRlY29kZSB1c2UvZGVmLCB3aGlj
aCBkZXRlcm1pbmVzIGRlZnMgZmlyc3QgYW5kIHRoZW4gdXNlcywgYW5kIGluY2x1ZGVzCiAvLyBl
eGNlcHRpb24gaGFuZGxlcnMgaW4gdGhlIHVzZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBVc2VGdW5j
dG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVjdGlv
bihDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+
PiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9y
JiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKK3N0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29u
c3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgLy8gVGhp
cyBhYnN0cmFjdGx5IGV4ZWN1dGUgdGhlIGluc3RydWN0aW9uIGluIHJldmVyc2UuIEluc3RydWN0
aW9ucyBsb2dpY2FsbHkgZmlyc3QgdXNlIG9wZXJhbmRzIGFuZAogICAgIC8vIHRoZW4gZGVmaW5l
IG9wZXJhbmRzLiBUaGlzIGxvZ2ljYWwgb3JkZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBvcGVyYXRp
b25zIHRoYXQgdXNlIGFuZCBkZWYgdGhlIHNhbWUKQEAgLTEzOCw3ICsxMzgsNyBAQCBzdGF0aWMg
dm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVm
UHRyPEJ5dGVjb2RlQmFzaQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgc3RlcE92ZXJJbnN0cnVj
dGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxv
Y2s+PiYgYmFzaWNCbG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9y
JiBvdXQpCitzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJs
b2NrLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Js
b2NrcywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKAogICAgICAgICBjb2RlQmxvY2ssIGJhc2ljQmxvY2tzLCBi
eXRlY29kZU9mZnNldCwKQEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgdm9pZCBzdGVwT3Zlcklu
c3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFz
aQogICAgICAgICB9KTsKIH0KIAotc3RhdGljIHZvaWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JC
eXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBi
bG9jaywgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJhc2ljQmxvY2s+ID4mIGJhc2ljQmxvY2tzLCB1
bnNpZ25lZCB0YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKK3N0YXRpYyB2b2lk
IGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0
ZWNvZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCB0YXJnZXRPZmZzZXQsIEZh
c3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygp
KTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CkBAIC0xNzAsNyArMTcwLDcg
QEAgc3RhdGljIHZvaWQgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQnl0ZWNvZGUKICAgICByZXN1bHQuc2V0KG91dCk7CiB9CiAKLXN0
YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0ZWNvZGVCYXNp
Y0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcykKK3N0YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ss
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tz
KQogewogICAgIGlmIChibG9jay0+aXNFeGl0QmxvY2soKSB8fCBibG9jay0+aXNFbnRyeUJsb2Nr
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5NCwxMiArMjk0LDYgQEAgdm9pZCBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGkrKykgewogICAgICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9iYXNpY0Jsb2Nrc1tpXS5nZXQoKTsKICAgICAgICAgZGF0YUxvZ0YoIlxu
Qnl0ZWNvZGUgYmFzaWMgYmxvY2sgJXU6ICVwIChvZmZzZXQ6ICV1LCBsZW5ndGg6ICV1KVxuIiwg
aSwgYmxvY2ssIGJsb2NrLT5sZWFkZXJCeXRlY29kZU9mZnNldCgpLCBibG9jay0+dG90YWxCeXRl
Y29kZUxlbmd0aCgpKTsKLSAgICAgICAgZGF0YUxvZ0YoIlByZWRlY2Vzc29yczogIik7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBibG9jay0+cHJlZGVjZXNzb3JzKCkuc2l6ZSgp
OyBqKyspIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBi
bG9jay0+cHJlZGVjZXNzb3JzKClbal07Ci0gICAgICAgICAgICBkYXRhTG9nRigiJXAgIiwgcHJl
ZGVjZXNzb3IpOwotICAgICAgICB9Ci0gICAgICAgIGRhdGFMb2dGKCJcbiIpOwogICAgICAgICBk
YXRhTG9nRigiU3VjY2Vzc29yczogIik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICBCeXRlY29k
ZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3JzKClbal07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgKaW5kZXggMzEzNGU3OWQ4MzA0YTdmZGI2OWE1MTdlYjhjODYyNmYzZTY0MTQ4NC4u
ZWNlMTZmMjFmMDE1MTBhNjQyN2ZkODQxMTQwNzliZWQ4NzBjMDg3NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBGdWxsQnl0ZWNvZGVMaXZlbmVzczsKIAogY2xh
c3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMpOwog
cHVibGljOgogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqKTsKICAgICAK
QEAgLTU2LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKIAog
ICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgVmVjdG9yPFJlZlB0cjxCeXRlY29kZUJh
c2ljQmxvY2s+ID4gbV9iYXNpY0Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlQmFzaWNCbG9jaz4+IG1fYmFzaWNCbG9ja3M7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVy
YW5kSXNBbHdheXNMaXZlKGludCBvcGVyYW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKaW5kZXggNmJiYTQ5MjEyNGRj
NDM0MWI4ZDRkMzk1NjJmZmY3N2RjN2QxY2QyNC4uNDE0ZGZkOTdkM2RlNTk4Y2U5NTAxMDg0NDE1
NzU0ZWMyYjU2Nzc4NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKQEAgLTExOSw2ICsxMTksNyBAQCB2b2lkIGNvbXB1
dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3Rvcjx1bnNpZ25l
ZCwgMzI+JiBvdXQpCiAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlOwogICAgIH0KICAgICBvdXQu
cmVzaXplKHRvSW5kZXgpOworICAgIG91dC5zaHJpbmtUb0ZpdCgpOwogfQogCiB2b2lkIGZpbmRK
dW1wVGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgVmVjdG9yPHVuc2lnbmVkLCAxPiYgb3V0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCmluZGV4IGZi
NjBmOWI5YjFhNDQ5ZmNlYWNjZGYwZjliYzlhNDI3NzY3MWJmNDkuLjg1MjQxM2Q3N2I3OTg5ODRi
MjdjZWYwZWQ2MmJjOTRjNjg5ZTIxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgKQEAgLTMwLDcgKzMwLDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKKy8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIGJ5dGVjb2RlIGluZGV4
IHRoYXQgYXJlIHRoZSBkZXN0aW5hdGlvbiBvZiBhIGp1bXAuCiB2b2lkIGNvbXB1dGVQcmVjaXNl
SnVtcFRhcmdldHMoQ29kZUJsb2NrKiwgVmVjdG9yPHVuc2lnbmVkLCAzMj4mIG91dCk7CisKIHZv
aWQgZmluZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIFZlY3Rvcjx1bnNpZ25lZCwgMT4mIG91dCk7CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwo=
</data>
<flag name="review"
          id="284898"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>