<?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>171262</bug_id>
          
          <creation_ts>2017-04-25 00:22:10 -0700</creation_ts>
          <short_desc>[JSC] Handle PhantomSpread in LoadVarargs as the same to the others</short_desc>
          <delta_ts>2017-04-27 01:59:19 -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>
          <dependson>171057</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>buildbot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1300926</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-25 00:22:10 -0700</bug_when>
    <thetext>[JSC] Handle PhantomSpread in LoadVarargs as the same to the others</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300927</commentid>
    <comment_count>1</comment_count>
      <attachid>308074</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-25 00:23:25 -0700</bug_when>
    <thetext>Created attachment 308074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300985</commentid>
    <comment_count>2</comment_count>
      <attachid>308074</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-25 05:49:43 -0700</bug_when>
    <thetext>Comment on attachment 308074
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:880
&gt;                          InlineCallFrame* inlineCallFrame = candidate-&gt;origin.semantic.inlineCallFrame;

This is buggy part of this patch. But we cannot test it since the following code,

function a(...args)
{
    return b(args);
}

function b(args)
{
    return c(...args);
}

function c(a0, a1, a2, a3, a4)
{
    return a2;
}

a(0, 1, 2, 3, 4, 5);

will emit PutStack for args, and make it usual Spread &amp; CreateRest instead of PhantomSpread.
Thus, we cannot observe this bug fixed in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301243</commentid>
    <comment_count>3</comment_count>
      <attachid>308074</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-25 14:29:43 -0700</bug_when>
    <thetext>Comment on attachment 308074
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:880
&gt;&gt;                          InlineCallFrame* inlineCallFrame = candidate-&gt;origin.semantic.inlineCallFrame;
&gt; 
&gt; This is buggy part of this patch. But we cannot test it since the following code,
&gt; 
&gt; function a(...args)
&gt; {
&gt;     return b(args);
&gt; }
&gt; 
&gt; function b(args)
&gt; {
&gt;     return c(...args);
&gt; }
&gt; 
&gt; function c(a0, a1, a2, a3, a4)
&gt; {
&gt;     return a2;
&gt; }
&gt; 
&gt; a(0, 1, 2, 3, 4, 5);
&gt; 
&gt; will emit PutStack for args, and make it usual Spread &amp; CreateRest instead of PhantomSpread.
&gt; Thus, we cannot observe this bug fixed in this patch.

I&apos;m confused. There exists no test for this? How is that possible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301569</commentid>
    <comment_count>4</comment_count>
      <attachid>308074</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-26 07:15:04 -0700</bug_when>
    <thetext>Comment on attachment 308074
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGArgumentsEliminationPhase.cpp:880
&gt;&gt;&gt;                          InlineCallFrame* inlineCallFrame = candidate-&gt;origin.semantic.inlineCallFrame;
&gt;&gt; 
&gt;&gt; This is buggy part of this patch. But we cannot test it since the following code,
&gt;&gt; 
&gt;&gt; function a(...args)
&gt;&gt; {
&gt;&gt;     return b(args);
&gt;&gt; }
&gt;&gt; 
&gt;&gt; function b(args)
&gt;&gt; {
&gt;&gt;     return c(...args);
&gt;&gt; }
&gt;&gt; 
&gt;&gt; function c(a0, a1, a2, a3, a4)
&gt;&gt; {
&gt;&gt;     return a2;
&gt;&gt; }
&gt;&gt; 
&gt;&gt; a(0, 1, 2, 3, 4, 5);
&gt;&gt; 
&gt;&gt; will emit PutStack for args, and make it usual Spread &amp; CreateRest instead of PhantomSpread.
&gt;&gt; Thus, we cannot observe this bug fixed in this patch.
&gt; 
&gt; I&apos;m confused. There exists no test for this? How is that possible?

The problem is that `spread-&gt;child1()-&gt;origin.semantic.inlineCallFrame` could be different from `spread-&gt;origin.semantic.inlineCallFrame`.
If it happens with LoadVarargs, the observable bug occurs.
However, currently, this case does not occur. This is just because PutStack always escapes the spread in this case. So it is not testable.
But it&apos;s not logically correct and it breaks things if this phase is merged into Object Allocation Sinking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301729</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-26 12:52:05 -0700</bug_when>
    <thetext>Oh I see, this is because we run putStackSinkingPhase after arguments elimination :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301730</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-26 12:54:29 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Oh I see, this is because we run putStackSinkingPhase after arguments
&gt; elimination :(

I wonder if we should run putStackSinkingPhase first, then run argumentsElimination, and then run putStackSinkingPhase again but only if argumentsElimination did anything.

We should obviously be able to transform your example program to not allocate Createrest/Spread.

Fil, Yusuke, any thoughts on this proposal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301732</commentid>
    <comment_count>7</comment_count>
      <attachid>308074</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-26 12:57:45 -0700</bug_when>
    <thetext>Comment on attachment 308074
Patch

r=me. I agree with this change even if we have the PutStack issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301733</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-26 13:00:07 -0700</bug_when>
    <thetext>I applied your change locally, along with this change to Plan:

```
        if (Options::usePutStackSinking())
            RUN_PHASE(performPutStackSinking);
        changed = false;
        RUN_PHASE(performArgumentsElimination);
        if (changed &amp;&amp; Options::usePutStackSinking())
            RUN_PHASE(performPutStackSinking);
```

And ran this program:
```
&quot;use strict&quot;;

function assert(b) {
    if (!b)
        throw new Error(&quot;Bad&quot;);
}

function foo(...args) {
    return bar(args);
}
noInline(foo);

function bar(args) {
    return baz(...args);
}

function baz(a, b) {
    return a + b;
}

for (let i = 0; i &lt; 10000; ++i) {
    assert(foo(i, i+1) === (i + (i + 1)));
}
```

And your patch fixes the crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301750</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-26 13:33:31 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #6)
&gt; (In reply to Saam Barati from comment #5)
&gt; &gt; Oh I see, this is because we run putStackSinkingPhase after arguments
&gt; &gt; elimination :(
&gt; 
&gt; I wonder if we should run putStackSinkingPhase first, then run
&gt; argumentsElimination, and then run putStackSinkingPhase again but only if
&gt; argumentsElimination did anything.
&gt; 
&gt; We should obviously be able to transform your example program to not
&gt; allocate Createrest/Spread.
&gt; 
&gt; Fil, Yusuke, any thoughts on this proposal?

I think that we need to combine the PutStack, ArgumentsElimination, and ObjectAllocationSinking phases should in the long term be combined into one phase, that assumes that nothing escapes as its initial bottom result and then builds up from there.

Otherwise trying to fixpoint these phases means we start at top and incremnetally optimize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301999</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-27 01:55:24 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #9)
&gt; (In reply to Saam Barati from comment #6)
&gt; &gt; (In reply to Saam Barati from comment #5)
&gt; &gt; &gt; Oh I see, this is because we run putStackSinkingPhase after arguments
&gt; &gt; &gt; elimination :(
&gt; &gt; 
&gt; &gt; I wonder if we should run putStackSinkingPhase first, then run
&gt; &gt; argumentsElimination, and then run putStackSinkingPhase again but only if
&gt; &gt; argumentsElimination did anything.
&gt; &gt; 
&gt; &gt; We should obviously be able to transform your example program to not
&gt; &gt; allocate Createrest/Spread.
&gt; &gt; 
&gt; &gt; Fil, Yusuke, any thoughts on this proposal?
&gt; 
&gt; I think that we need to combine the PutStack, ArgumentsElimination, and
&gt; ObjectAllocationSinking phases should in the long term be combined into one
&gt; phase, that assumes that nothing escapes as its initial bottom result and
&gt; then builds up from there.
&gt; 
&gt; Otherwise trying to fixpoint these phases means we start at top and
&gt; incremnetally optimize.

Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302000</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-27 01:57:00 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #8)
&gt; I applied your change locally, along with this change to Plan:
&gt; 
&gt; ```
&gt;         if (Options::usePutStackSinking())
&gt;             RUN_PHASE(performPutStackSinking);
&gt;         changed = false;
&gt;         RUN_PHASE(performArgumentsElimination);
&gt;         if (changed &amp;&amp; Options::usePutStackSinking())
&gt;             RUN_PHASE(performPutStackSinking);
&gt; ```
&gt; 
&gt; And ran this program:
&gt; ```
&gt; &quot;use strict&quot;;
&gt; 
&gt; function assert(b) {
&gt;     if (!b)
&gt;         throw new Error(&quot;Bad&quot;);
&gt; }
&gt; 
&gt; function foo(...args) {
&gt;     return bar(args);
&gt; }
&gt; noInline(foo);
&gt; 
&gt; function bar(args) {
&gt;     return baz(...args);
&gt; }
&gt; 
&gt; function baz(a, b) {
&gt;     return a + b;
&gt; }
&gt; 
&gt; for (let i = 0; i &lt; 10000; ++i) {
&gt;     assert(foo(i, i+1) === (i + (i + 1)));
&gt; }
&gt; ```
&gt; 
&gt; And your patch fixes the crash.

Yeah. I&apos;ve added the above code to the test too to ensure this works if PutStack sinking phase is merged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302002</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-27 01:59:19 -0700</bug_when>
    <thetext>Committed r215860: &lt;http://trac.webkit.org/changeset/215860&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308074</attachid>
            <date>2017-04-25 00:23:25 -0700</date>
            <delta_ts>2017-04-26 12:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171262-20170425162324.patch</filename>
            <type>text/plain</type>
            <size>12243</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NzIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
Njc1NDk1MThhNDJhNzJhZjFiNzNjY2NiYzRjYjdjOTI3OTZjMDliLi4wMzViMTA0YTdhZjNlYTVl
NTM5ZDc5NmQxNjRiZDkzMjk5Y2RlOTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNy0wNC0yNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBIYW5kbGUgUGhhbnRvbVNwcmVhZCBpbiBMb2FkVmFyYXJn
cyBhcyB0aGUgc2FtZSB0byB0aGUgb3RoZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEyNjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGZvbGxvdy11cCBwYXRjaCBhZnRlciByMjE1NzIw
LiBJbiB0aGF0IHBhdGNoLCBhY2NpZGVudGFsbHkKKyAgICAgICAgd2UgZGlkIG5vdCBhcHBseSB0
aGUgc2FtZSBjaGFuZ2UgdG8gTG9hZFZhcmFyZ3MgaW4gYXJndW1lbnQgZWxpbWluYXRpb24KKyAg
ICAgICAgcGhhc2UuIFRoaXMgcGF0Y2gganVzdCBkb2VzIHRoZSBzYW1lIHJld3JpdGluZyB0byBo
YW5kbGUgUGhhbnRvbVNwcmVhZAorICAgICAgICBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBkZmcv
REZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisKIDIwMTctMDQtMjQgIEFuZHkgVmFu
V2Fnb25lciAgPHRoZXRhbGVjcmFmdGVyQGdtYWlsLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBJ
Q1UgaGVhZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKaW5kZXggNDY2MzA4MGU0YjA1YWJlZDE4MmM4
ZmMzOGMwNWYxZmI3MzE0Y2Y1OS4uNjczOTIwZTBkMWQ4MGNlNDU4MjFmYTEwODU5NzkwZGU5YzFk
YWUwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNF
bGltaW5hdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCkBAIC03NzAsNDEgKzc3MCw1MiBAQCBjbGFzcyBB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFsdWUpKTsKICAgICAgICAgICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBo
YW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS0+b3AoKSA9PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGNhbmRpZGF0ZS0+b3Ao
KSA9PSBQaGFudG9tU3ByZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkNv
bnZlcnRUb1N0YXRpY0xvYWRTdG9yZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
Qml0VmVjdG9yKiBiaXRWZWN0b3IgPSBjYW5kaWRhdGUtPmJpdFZlY3RvcigpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FuZGlkYXRlLT5udW1D
aGlsZHJlbigpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0VmVj
dG9yLT5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogY2hp
bGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgaSkubm9kZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPm9wKCkgPT0gUGhhbnRvbVNwcmVh
ZCAmJiBjaGlsZC0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNoaWxkLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwgaW5s
aW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXNGb3JTcHJlYWQgPSBbXSAoTm9kZSog
c3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHNwcmVhZC0+b3Ao
KSA9PSBQaGFudG9tU3ByZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
c3ByZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJl
YWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxG
cmFtZS0+aXNWYXJhcmdzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLT5vcCgpID09IFBoYW50b21OZXdBcnJheVdp
dGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRWZWN0b3IqIGJpdFZl
Y3RvciA9IGNhbmRpZGF0ZS0+Yml0VmVjdG9yKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0ZS0+bnVtQ2hpbGRyZW4oKTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5Db252ZXJ0
VG9TdGF0aWNMb2FkU3RvcmVzRm9yU3ByZWFkKG1fZ3JhcGgudmFyQXJnQ2hpbGQoY2FuZGlkYXRl
LCBpKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FuQ29udmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQ29u
dmVydFRvU3RhdGljTG9hZFN0b3JlcyA9IGNhbkNvbnZlcnRUb1N0YXRpY0xvYWRTdG9yZXNGb3JT
cHJlYWQoY2FuZGlkYXRlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkNvbnZl
cnRUb1N0YXRpY0xvYWRTdG9yZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IDE7IC8vIHx0aGlzfAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51
bUNoaWxkcmVuKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Yml0VmVjdG9yLT5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+b3AoKSA9
PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRl
UmVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNoaWxkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2hpbGQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZyYW1lQXJndW1lbnRDb3VudCA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNwcmVhZEFyZ3Vt
ZW50cyA9IGZyYW1lQXJndW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU3ByZWFkQXJndW1lbnRzID0gMDsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgKz0gbnVtYmVyT2ZTcHJlYWRBcmd1bWVudHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKythcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb3VudE51bWJlck9mU3ByZWFkQXJndW1l
bnRzID0gW10gKE5vZGUqIHNwcmVhZCkgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3ByZWFkLT5vcCgpID09IFBoYW50b21TcHJlYWQgJiYgc3By
ZWFkLT5jaGlsZDEoKS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gc3By
ZWFkLT5jaGlsZDEoKS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJl
YWQtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZnJhbWVBcmd1bWVudENvdW50ID49IG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lQXJn
dW1lbnRDb3VudCAtIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFu
dG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJpdFZlY3RvciogYml0VmVjdG9yID0gY2FuZGlkYXRlLT5iaXRWZWN0b3IoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbmRpZGF0
ZS0+bnVtQ2hpbGRyZW4oKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKz0gY291bnROdW1iZXJPZlNw
cmVhZEFyZ3VtZW50cyhtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwgaSkubm9kZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArK2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICs9IGNvdW50TnVtYmVyT2ZTcHJlYWRBcmd1bWVudHMoY2FuZGlkYXRl
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyk7CkBAIC04MTMsMjggKzgyNCwzNyBAQCBjbGFzcyBBcmd1bWVudHNFbGltaW5h
dGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRGVmaW5lIG91ciBsaW1pdCB0byBleGNsdWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEg
Yml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxpbWl0ID0gdmFyYXJnc0RhdGEtPmxpbWl0IC0gMTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RvcmVJbmRleCA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUt
Pm51bUNoaWxkcmVuKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJpdFZlY3Rvci0+Z2V0KGkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKGNhbmRpZGF0ZSwg
aSkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIGNoaWxkLT5jaGlsZDEoKS0+b3AoKSA9
PSBQaGFudG9tQ3JlYXRlUmVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBjaGlsZC0+Y2hpbGQxKCkt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjaGlsZC0+Y2hp
bGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBmcmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChsb2FkSW5kZXggKyAxKSAr
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFj
a0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNh
bkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKGRhdGEpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGZv
cndhcmRTcHJlYWQgPSBbJl0gKE5vZGUqIHNwcmVhZCwgdW5zaWduZWQgc3RvcmVJbmRleCkgLT4g
dW5zaWduZWQgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHNw
cmVhZC0+b3AoKSA9PSBQaGFudG9tU3ByZWFkICYmIHNwcmVhZC0+Y2hpbGQxKCktPm9wKCkgPT0g
UGhhbnRvbUNyZWF0ZVJlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBzcHJlYWQtPmNoaWxkMSgpLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBzcHJlYWQtPmNoaWxkMSgpLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbG9hZEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGxv
YWRJbmRleCA8IGZyYW1lQXJndW1lbnRDb3VudDsgKytsb2FkSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQobG9hZEluZGV4ICsgMSkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
QWNjZXNzRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1
c2hlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBu
b2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKHZhbHVlLCBzdG9yZUluZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3N0b3JlSW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RvcmVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRl
LT5vcCgpID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0gY2FuZGlkYXRlLT5iaXRW
ZWN0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjYW5kaWRhdGUtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRWZWN0b3ItPmdldChpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVJbmRleCA9IGZv
cndhcmRTcHJlYWQobV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKSwgc3Rv
cmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZSwgc3RvcmVJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3Rv
cmVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gbV9ncmFwaC52YXJBcmdDaGls
ZChjYW5kaWRhdGUsIGkpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdG9yZVZhbHVlKHZhbHVlLCBzdG9yZUluZGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICArK3N0b3JlSW5kZXg7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gZm9yd2FyZFNwcmVhZChjYW5kaWRhdGUsIHN0
b3JlSW5kZXgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0b3JlSW5kZXggPD0gbGltaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiB1bmRlZmluZWQgPSBudWxscHRyOwpAQCAtODU1LDEwICs4NzUsNiBAQCBjbGFzcyBB
cmd1bWVudHNFbGltaW5hdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3Qp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBj
YW5kaWRhdGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYW5kaWRhdGUtPmNoaWxkMSgpLT5vcCgpID09
IFBoYW50b21DcmVhdGVSZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGNhbmRpZGF0ZS0+Y2hpbGQxKCktPm51bWJlck9mQXJndW1lbnRz
VG9Ta2lwKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJhcmdzRGF0YS0+b2Zmc2V0ICs9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGNhbmRpZGF0ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsK
</data>
<flag name="review"
          id="329265"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>