<?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>109573</bug_id>
          
          <creation_ts>2013-02-12 05:34:25 -0800</creation_ts>
          <short_desc>[Text Autosizing] Process narrow descendants with the same multiplier for the font size.</short_desc>
          <delta_ts>2013-02-14 06:48:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</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>108384</dependson>
    
    <dependson>108411</dependson>
    
    <dependson>109054</dependson>
    
    <dependson>109093</dependson>
          <blocked>107300</blocked>
    
    <blocked>109825</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Vayvod">avayvod</reporter>
          <assigned_to name="Anton Vayvod">avayvod</assigned_to>
          <cc>eric</cc>
    
    <cc>johnme</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>830821</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-12 05:34:25 -0800</bug_when>
    <thetext>[Text Autosizing] Process narrow descendants with the same multiplier for the font size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830850</commentid>
    <comment_count>1</comment_count>
      <attachid>187849</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-12 05:56:21 -0800</bug_when>
    <thetext>Created attachment 187849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831685</commentid>
    <comment_count>2</comment_count>
      <attachid>187849</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-12 23:53:36 -0800</bug_when>
    <thetext>Comment on attachment 187849
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        For example, on sites with a sidebar, sometimes the paragraphs next to the sidebar will have
&gt; +        a large margin individually applied (via a CSS selector), causing them all to individually
&gt; +        appear narrower than their enclosing blockContainingAllText. Rather than making each of
&gt; +        these paragraphs into a separate cluster, we eventually want to be able to merge them back
&gt; +        together into one (or a few) descendant clusters.

Do you have some kind of meta bug on what other kind of adaptations you have planned?

&gt; Source/WebCore/ChangeLog:27
&gt; +            Calculates the text width for a single cluster and if it should be autosized, then calls

s/if/whether/

&gt; Source/WebCore/ChangeLog:28
&gt; +            processCluster() to apply the multiplier and process the cluster&apos;s descendants.

processSingleCluster sounds like a specialized version of processCluster and it is not. Confusing

&gt; Source/WebCore/rendering/TextAutosizer.cpp:161
&gt; +    // Many pages set a max-width on their content. So especially for the
&gt; +    // RenderView, instead of just taking the width of |cluster| we find
&gt; +    // the lowest common ancestor of the first and last descendant text node of
&gt; +    // the cluster (i.e. the deepest wrapper block that contains all the text),
&gt; +    // and use its width instead.

I think it would be fine to make this comment around 100 chars before wrapping.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:168
&gt; +void TextAutosizer::processCompositeCluster(Vector&lt;TextAutosizingClusterInfo&gt;&amp; clusterInfos, const TextAutosizingWindowInfo&amp; windowInfo)
&gt; +{

So no way to avoid iterating the clusterinfos 3 times?

&gt; Source/WebCore/rendering/TextAutosizer.h:65
&gt; +    void processCluster(TextAutosizingClusterInfo&amp;, RenderBlock* container, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;, float textWidth, bool shouldBeAutosized);
&gt; +    void processSingleCluster(TextAutosizingClusterInfo&amp;, RenderBlock* container, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;);

I think processCluster vs processSingleCluster is confusing... Like what is the difference; that is not obvious here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831772</commentid>
    <comment_count>3</comment_count>
      <attachid>187849</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-02-13 03:12:18 -0800</bug_when>
    <thetext>Comment on attachment 187849
Patch

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

Change looks generally good. A couple of comments though.

&gt; Source/WebCore/ChangeLog:14
&gt; +        these paragraphs into a separate cluster, we eventually want to be able to merge them back

s/we eventually want to be able to merge them back together into one (or a few) descendant clusters./we want them all to share the same multiplier, as if they were a single cluster/.

&gt; Source/WebCore/rendering/TextAutosizer.cpp:177
&gt; +    const float minLinesOfText = 4;

I&apos;m not keen on the way this code is duplicated from clusterShouldBeAutosized. Could you not just make clusterShouldBeAutosized accept a list of clusterInfos (using the multi-clusterInfo aware code below)?

&gt; Source/WebCore/rendering/TextAutosizer.cpp:178
&gt; +    float minTextWidth = maxTextWidth * minLinesOfText;

Nit: perhaps rename these to minDescendantTextWidth and totalDescendantTextWidth, to clarify that these are measuring a different type of thing than maxTextWidth (otherwise it seems like minTextWidth..maxTextWidth is some kind of range).

&gt; Source/WebCore/rendering/TextAutosizer.cpp:182
&gt; +        measureDescendantTextWidth(clusterInfos[i].blockContainingAllText, clusterInfos[i], minTextWidth, textWidth);

Shouldn&apos;t you be passing total(Descendant)TextWidth directly to measureDescendantTextWidth instead of textWidth? There is logic in measureDescendantTextWidth to early out once textWidth &gt;= minTextWidth, but by hiding the true total(Descendant)TextWidth from measureDescendantTextWidth that logic won&apos;t be able to work. And since it IIRC just adds to the number passed in by reference, it should be equivalent to let it directly increase total(Descendant)TextWidth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831865</commentid>
    <comment_count>4</comment_count>
      <attachid>187849</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-13 06:34:23 -0800</bug_when>
    <thetext>Comment on attachment 187849
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        these paragraphs into a separate cluster, we eventually want to be able to merge them back
&gt; 
&gt; s/we eventually want to be able to merge them back together into one (or a few) descendant clusters./we want them all to share the same multiplier, as if they were a single cluster/.

Done.

&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt; +        together into one (or a few) descendant clusters.
&gt; 
&gt; Do you have some kind of meta bug on what other kind of adaptations you have planned?

There&apos;s the complete patch I&apos;ve been splitting into smaller ones and submitting over the last week. See wkbug.com/107300.
This should be the penultimate patch.

&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt; +            Calculates the text width for a single cluster and if it should be autosized, then calls
&gt; 
&gt; s/if/whether/

Done.

&gt;&gt; Source/WebCore/ChangeLog:28
&gt;&gt; +            processCluster() to apply the multiplier and process the cluster&apos;s descendants.
&gt; 
&gt; processSingleCluster sounds like a specialized version of processCluster and it is not. Confusing

renamed back to processCluster and renamed the common code holder to processClusterInternal

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:161
&gt;&gt; +    // and use its width instead.
&gt; 
&gt; I think it would be fine to make this comment around 100 chars before wrapping.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:168
&gt;&gt; +{
&gt; 
&gt; So no way to avoid iterating the clusterinfos 3 times?

I could probably move the first loop to the place where we add cluster info to the vector, the second one exits early as soon as we have enough text and the third one is unavoidable.
But the code will do the same amount of work so it shouldn&apos;t matter from the performance point of view. Having this code in the same place makes the code clearer to me.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:177
&gt;&gt; +    const float minLinesOfText = 4;
&gt; 
&gt; I&apos;m not keen on the way this code is duplicated from clusterShouldBeAutosized. Could you not just make clusterShouldBeAutosized accept a list of clusterInfos (using the multi-clusterInfo aware code below)?

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:178
&gt;&gt; +    float minTextWidth = maxTextWidth * minLinesOfText;
&gt; 
&gt; Nit: perhaps rename these to minDescendantTextWidth and totalDescendantTextWidth, to clarify that these are measuring a different type of thing than maxTextWidth (otherwise it seems like minTextWidth..maxTextWidth is some kind of range).

Since I moved it to modified version of shouldClusterBeAutosized, I&apos;ve left the names as they were there.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:182
&gt;&gt; +        measureDescendantTextWidth(clusterInfos[i].blockContainingAllText, clusterInfos[i], minTextWidth, textWidth);
&gt; 
&gt; Shouldn&apos;t you be passing total(Descendant)TextWidth directly to measureDescendantTextWidth instead of textWidth? There is logic in measureDescendantTextWidth to early out once textWidth &gt;= minTextWidth, but by hiding the true total(Descendant)TextWidth from measureDescendantTextWidth that logic won&apos;t be able to work. And since it IIRC just adds to the number passed in by reference, it should be equivalent to let it directly increase total(Descendant)TextWidth.

Done.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:65
&gt;&gt; +    void processSingleCluster(TextAutosizingClusterInfo&amp;, RenderBlock* container, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;);
&gt; 
&gt; I think processCluster vs processSingleCluster is confusing... Like what is the difference; that is not obvious here

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831867</commentid>
    <comment_count>5</comment_count>
      <attachid>188074</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-13 06:38:56 -0800</bug_when>
    <thetext>Created attachment 188074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831870</commentid>
    <comment_count>6</comment_count>
      <attachid>188074</attachid>
    <who name="John Mellor">johnme</who>
    <bug_when>2013-02-13 06:49:19 -0800</bug_when>
    <thetext>Comment on attachment 188074
Patch

Looks good to me. Kenneth, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832195</commentid>
    <comment_count>7</comment_count>
      <attachid>188074</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2013-02-13 12:32:58 -0800</bug_when>
    <thetext>Comment on attachment 188074
Patch

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

r=me

&gt; Source/WebCore/rendering/TextAutosizer.cpp:160
&gt; +    // text), and use its width instead.

As you are touching this comment, why? (explaining the why here would be a nice addition to the previous comment)

&gt; Source/WebCore/rendering/TextAutosizer.h:64
&gt; +    void processClusterInternal(TextAutosizingClusterInfo&amp;, RenderBlock* container, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;, float textWidth, bool shouldBeAutosized);

Usually boolean arguments should be avoided as they make the code less readable. Here you never really use them directly so it&apos;s kinda OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832230</commentid>
    <comment_count>8</comment_count>
      <attachid>188074</attachid>
    <who name="Anton Vayvod">avayvod</who>
    <bug_when>2013-02-13 12:58:51 -0800</bug_when>
    <thetext>Comment on attachment 188074
Patch

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

&gt;&gt; Source/WebCore/rendering/TextAutosizer.cpp:160
&gt;&gt; +    // text), and use its width instead.
&gt; 
&gt; As you are touching this comment, why? (explaining the why here would be a nice addition to the previous comment)

Kenneth asked to rewrap it around 100 characters.

&gt;&gt; Source/WebCore/rendering/TextAutosizer.h:64
&gt;&gt; +    void processClusterInternal(TextAutosizingClusterInfo&amp;, RenderBlock* container, RenderObject* subtreeRoot, const TextAutosizingWindowInfo&amp;, float textWidth, bool shouldBeAutosized);
&gt; 
&gt; Usually boolean arguments should be avoided as they make the code less readable. Here you never really use them directly so it&apos;s kinda OK.

Thanks, I&apos;ll follow with a patch that fixes this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832931</commentid>
    <comment_count>9</comment_count>
      <attachid>188074</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 04:10:58 -0800</bug_when>
    <thetext>Comment on attachment 188074
Patch

Clearing flags on attachment: 188074

Committed r142866: &lt;http://trac.webkit.org/changeset/142866&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832932</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 04:11:02 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187849</attachid>
            <date>2013-02-12 05:56:21 -0800</date>
            <delta_ts>2013-02-13 06:38:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109573-20130212135250.patch</filename>
            <type>text/plain</type>
            <size>13015</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzk5MTNjNWUwMTY0NTc4
NWNhMzBkZjAyODQ2ZDNiM2YzMDVmMDI0Yi4uZTgxM2E3ZWM5ZTZmMjVjOWM0OGJhZDNmNWEwMGE0
NzZmMjUxYzQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTAyLTEyICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVGV4dCBBdXRvc2l6
aW5nXSBQcm9jZXNzIG5hcnJvdyBkZXNjZW5kYW50cyB3aXRoIHRoZSBzYW1lIG11bHRpcGxpZXIg
Zm9yIHRoZSBmb250IHNpemUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDk1NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb21iaW5lIG5hcnJvdyBkZXNjZW5kYW50cyBvZiB0aGUgc2FtZSBhdXRvc2l6
aW5nIGNsdXN0ZXIgaW50byBhIGdyb3VwIHRoYXQgaXMgYXV0b3NpemVkCisgICAgICAgIHdpdGgg
dGhlIHNhbWUgbXVsdGlwbGllci4KKworICAgICAgICBGb3IgZXhhbXBsZSwgb24gc2l0ZXMgd2l0
aCBhIHNpZGViYXIsIHNvbWV0aW1lcyB0aGUgcGFyYWdyYXBocyBuZXh0IHRvIHRoZSBzaWRlYmFy
IHdpbGwgaGF2ZQorICAgICAgICBhIGxhcmdlIG1hcmdpbiBpbmRpdmlkdWFsbHkgYXBwbGllZCAo
dmlhIGEgQ1NTIHNlbGVjdG9yKSwgY2F1c2luZyB0aGVtIGFsbCB0byBpbmRpdmlkdWFsbHkKKyAg
ICAgICAgYXBwZWFyIG5hcnJvd2VyIHRoYW4gdGhlaXIgZW5jbG9zaW5nIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQuIFJhdGhlciB0aGFuIG1ha2luZyBlYWNoIG9mCisgICAgICAgIHRoZXNlIHBhcmFn
cmFwaHMgaW50byBhIHNlcGFyYXRlIGNsdXN0ZXIsIHdlIGV2ZW50dWFsbHkgd2FudCB0byBiZSBh
YmxlIHRvIG1lcmdlIHRoZW0gYmFjaworICAgICAgICB0b2dldGhlciBpbnRvIG9uZSAob3IgYSBm
ZXcpIGRlc2NlbmRhbnQgY2x1c3RlcnMuCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0LWF1dG9z
aXppbmcvbmFycm93LWRlc2NlbmRhbnRzLWNvbWJpbmVkLmh0bWwKKworICAgICAgICAqIHJlbmRl
cmluZy9UZXh0QXV0b3NpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6
OnByb2Nlc3NDbHVzdGVyKToKKworICAgICAgICAgICAgRXh0ZW5kZWQgdG8gYWNjZXB0IHRoZSB0
ZXh0IHdpZHRoIGFuZCBpZiB0aGUgY2x1c3RlciBzaG91bGQgYmUgYXV0b3NpemVkIGFzIHBhcmFt
ZXRlcnMKKyAgICAgICAgICAgIGluc3RlYWQgb2YgY2FsY3VsYXRpbmcgaXQgaW5saW5lLgorCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzU2luZ2xlQ2x1c3Rlcik6CisK
KyAgICAgICAgICAgIENhbGN1bGF0ZXMgdGhlIHRleHQgd2lkdGggZm9yIGEgc2luZ2xlIGNsdXN0
ZXIgYW5kIGlmIGl0IHNob3VsZCBiZSBhdXRvc2l6ZWQsIHRoZW4gY2FsbHMKKyAgICAgICAgICAg
IHByb2Nlc3NDbHVzdGVyKCkgdG8gYXBwbHkgdGhlIG11bHRpcGxpZXIgYW5kIHByb2Nlc3MgdGhl
IGNsdXN0ZXIncyBkZXNjZW5kYW50cy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXpl
cjo6cHJvY2Vzc0NvbXBvc2l0ZUNsdXN0ZXIpOgorCisgICAgICAgICAgICBDYWxjdWxhdGVzIHRo
ZSB0ZXh0IHdpZHRoIGZvciBhIGdyb3VwIG9mIHJlbmRlcmVycyBhbmQgaWYgdGhlIGdyb3VwIHNo
b3VsZCBiZSBhdXRvc2l6ZWQsCisgICAgICAgICAgICB0aGVuIGNhbGxzIHByb2Nlc3NDbHVzdGVy
KCkgcmVwZWF0ZWRseSB3aXRoIHRoZSBzYW1lIG11bHRpcGxpZXIgdG8gYXBwbHkgaXQgYW5kIHBy
b2Nlc3MKKyAgICAgICAgICAgIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgdGhlIGdyb3VwLgorCisg
ICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTdWJ0cmVlKToKKworICAgICAgICAg
ICAgVGhlIG1ldGhvZHMgYWJvdmUgY2FsbCBuZXcgcHJvY2Vzc1NpbmdsZUNsdXN0ZXIgbWV0aG9k
LgorCisgICAgICAgICogcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKworICAgICAgICAgICAg
VXBkYXRlZCBtZXRob2QgZGVjbGFyYXRpb25zLgorCiAyMDEzLTAyLTEyICBBbmRyZXkgS29zeWFr
b3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZml4IGNs
b3N1cmUgY29tcGlsZXIgd2FybmluZ3MgaW4gZXh0ZW5zaW9uIHNlcnZlciBhbmQgQVBJCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKaW5kZXggYjdmMzcxOGE2NWU5
NGY5YjdiODhjYzY4ZTE0ZTU2ZGRlNGQyYjY0OC4uNDYzNDY4NjNmNGU5NTQ4ZGZlZjdkOGU0ODJl
NGQ5YTdkMGUxYTJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRB
dXRvc2l6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcApAQCAtMTI5LDIyICsxMjksMTQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzU3Vi
dHJlZShSZW5kZXJPYmplY3QqIGxheW91dFJvb3QpCiAgICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVy
LT5jb250YWluaW5nQmxvY2soKTsKIAogICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8gY2x1
c3RlckluZm8oY2x1c3Rlcik7Ci0gICAgcHJvY2Vzc0NsdXN0ZXIoY2x1c3RlckluZm8sIGNvbnRh
aW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7CisgICAgcHJvY2Vzc1NpbmdsZUNsdXN0ZXIo
Y2x1c3RlckluZm8sIGNvbnRhaW5lciwgbGF5b3V0Um9vdCwgd2luZG93SW5mbyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoVGV4dEF1
dG9zaXppbmdDbHVzdGVySW5mbyYgY2x1c3RlckluZm8sIFJlbmRlckJsb2NrKiBjb250YWluZXIs
IFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5m
byYgd2luZG93SW5mbykKK3ZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoVGV4dEF1
dG9zaXppbmdDbHVzdGVySW5mbyYgY2x1c3RlckluZm8sIFJlbmRlckJsb2NrKiBjb250YWluZXIs
IFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5m
byYgd2luZG93SW5mbywgZmxvYXQgdGV4dFdpZHRoLCBib29sIHNob3VsZEJlQXV0b3NpemVkKQog
ewotICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdpZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNv
IGVzcGVjaWFsbHkgZm9yIHRoZQotICAgIC8vIFJlbmRlclZpZXcsIGluc3RlYWQgb2YganVzdCB0
YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBmaW5kCi0gICAgLy8gdGhlIGxvd2VzdCBj
b21tb24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGRlc2NlbmRhbnQgdGV4dCBub2Rl
IG9mCi0gICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3JhcHBlciBibG9jayB0
aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCi0gICAgLy8gYW5kIHVzZSBpdHMgd2lkdGggaW5z
dGVhZC4KLSAgICBjbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBl
c3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLnJvb3QpOwotICAgIGZsb2F0IHRl
eHRXaWR0aCA9IGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQtPmNvbnRlbnRMb2dp
Y2FsV2lkdGgoKTsKLQogICAgIGZsb2F0IG11bHRpcGxpZXIgPSAxOwotICAgIGlmIChjbHVzdGVy
U2hvdWxkQmVBdXRvc2l6ZWQoY2x1c3RlckluZm8sIHRleHRXaWR0aCkpIHsKKyAgICBpZiAoc2hv
dWxkQmVBdXRvc2l6ZWQpIHsKICAgICAgICAgaW50IGxvZ2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0
ZXJJbmZvLnJvb3QtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLndpbmRv
d1NpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ud2luZG93U2l6ZS5oZWlnaHQoKTsKICAgICAgICAg
aW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9IGNsdXN0ZXJJbmZvLnJvb3QtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91dFNpemUud2lkdGgoKSA6IHdpbmRvd0lu
Zm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgLy8gSWdub3JlIGJveCB3aWR0aCBp
biBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8gYXZvaWQgZXh0cmVtZSBtdWx0aXBsaWVy
cy4KQEAgLTE1NywxMSArMTQ5LDQ1IEBAIHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0
ZXIoVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgY2x1c3RlckluZm8sIFJlbmRlCiAKICAgICBw
cm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRhaW5lciwgY2x1c3RlckluZm8sIHN1YnRy
ZWVSb290LCB3aW5kb3dJbmZvKTsKIAotICAgIFZlY3RvcjxUZXh0QXV0b3NpemluZ0NsdXN0ZXJJ
bmZvPiYgbmFycm93RGVzY2VuZGFudHMgPSBjbHVzdGVySW5mby5uYXJyb3dEZXNjZW5kYW50czsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hcnJvd0Rlc2NlbmRhbnRzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIGRlc2NlbmRhbnRDbHVzdGVy
SW5mbyA9IG5hcnJvd0Rlc2NlbmRhbnRzW2ldOwotICAgICAgICBwcm9jZXNzQ2x1c3RlcihkZXNj
ZW5kYW50Q2x1c3RlckluZm8sIGRlc2NlbmRhbnRDbHVzdGVySW5mby5yb290LCBkZXNjZW5kYW50
Q2x1c3RlckluZm8ucm9vdCwgd2luZG93SW5mbyk7CisgICAgcHJvY2Vzc0NvbXBvc2l0ZUNsdXN0
ZXIoY2x1c3RlckluZm8ubmFycm93RGVzY2VuZGFudHMsIHdpbmRvd0luZm8pOworfQorCit2b2lk
IFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NTaW5nbGVDbHVzdGVyKFRleHRBdXRvc2l6aW5nQ2x1c3Rl
ckluZm8mIGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8p
Cit7CisgICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGggb24gdGhlaXIgY29udGVudC4g
U28gZXNwZWNpYWxseSBmb3IgdGhlCisgICAgLy8gUmVuZGVyVmlldywgaW5zdGVhZCBvZiBqdXN0
IHRha2luZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQKKyAgICAvLyB0aGUgbG93ZXN0
IGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgZGVzY2VuZGFudCB0ZXh0IG5v
ZGUgb2YKKyAgICAvLyB0aGUgY2x1c3RlciAoaS5lLiB0aGUgZGVlcGVzdCB3cmFwcGVyIGJsb2Nr
IHRoYXQgY29udGFpbnMgYWxsIHRoZSB0ZXh0KSwKKyAgICAvLyBhbmQgdXNlIGl0cyB3aWR0aCBp
bnN0ZWFkLgorICAgIGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQgPSBmaW5kRGVl
cGVzdEJsb2NrQ29udGFpbmluZ0FsbFRleHQoY2x1c3RlckluZm8ucm9vdCk7CisgICAgZmxvYXQg
dGV4dFdpZHRoID0gY2x1c3RlckluZm8uYmxvY2tDb250YWluaW5nQWxsVGV4dC0+Y29udGVudExv
Z2ljYWxXaWR0aCgpOworICAgIHByb2Nlc3NDbHVzdGVyKGNsdXN0ZXJJbmZvLCBjb250YWluZXIs
IHN1YnRyZWVSb290LCB3aW5kb3dJbmZvLCB0ZXh0V2lkdGgsIGNsdXN0ZXJTaG91bGRCZUF1dG9z
aXplZChjbHVzdGVySW5mbywgdGV4dFdpZHRoKSk7Cit9CisKK3ZvaWQgVGV4dEF1dG9zaXplcjo6
cHJvY2Vzc0NvbXBvc2l0ZUNsdXN0ZXIoVmVjdG9yPFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8+
JiBjbHVzdGVySW5mb3MsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5m
bykKK3sKKyAgICBmbG9hdCBtYXhUZXh0V2lkdGggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2x1c3RlckluZm9zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRleHRBdXRvc2l6aW5n
Q2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvID0gY2x1c3RlckluZm9zW2ldOworICAgICAgICBjbHVz
dGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5p
bmdBbGxUZXh0KGNsdXN0ZXJJbmZvLnJvb3QpOworICAgICAgICBtYXhUZXh0V2lkdGggPSBtYXg8
ZmxvYXQ+KG1heFRleHRXaWR0aCwgY2x1c3RlckluZm8uYmxvY2tDb250YWluaW5nQWxsVGV4dC0+
Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKKyAgICB9CisKKyAgICBmbG9hdCB0b3RhbFRleHRXaWR0
aCA9IDA7CisgICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRleHQgPSA0OworICAgIGZsb2F0IG1p
blRleHRXaWR0aCA9IG1heFRleHRXaWR0aCAqIG1pbkxpbmVzT2ZUZXh0OworICAgIGJvb2wgc2hv
dWxkQmVBdXRvc2l6ZWQgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNsdXN0
ZXJJbmZvcy5zaXplKCk7ICsraSkgeworICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOworICAg
ICAgICBtZWFzdXJlRGVzY2VuZGFudFRleHRXaWR0aChjbHVzdGVySW5mb3NbaV0uYmxvY2tDb250
YWluaW5nQWxsVGV4dCwgY2x1c3RlckluZm9zW2ldLCBtaW5UZXh0V2lkdGgsIHRleHRXaWR0aCk7
CisgICAgICAgIHRvdGFsVGV4dFdpZHRoICs9IHRleHRXaWR0aDsKKyAgICAgICAgaWYgKHRvdGFs
VGV4dFdpZHRoID49IG1pblRleHRXaWR0aCkgeworICAgICAgICAgICAgc2hvdWxkQmVBdXRvc2l6
ZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjbHVzdGVySW5mb3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHBy
b2Nlc3NDbHVzdGVyKGNsdXN0ZXJJbmZvc1tpXSwgY2x1c3RlckluZm9zW2ldLnJvb3QsIGNsdXN0
ZXJJbmZvc1tpXS5yb290LCB3aW5kb3dJbmZvLCBtYXhUZXh0V2lkdGgsIHNob3VsZEJlQXV0b3Np
emVkKTsKIH0KIAogdm9pZCBUZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11
bHRpcGxpZXIsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFRleHRBdXRvc2l6aW5nQ2x1c3Rlcklu
Zm8mIGNsdXN0ZXJJbmZvLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCkBAIC0xODIsNyArMjA4LDcgQEAgdm9pZCBU
ZXh0QXV0b3NpemVyOjpwcm9jZXNzQ29udGFpbmVyKGZsb2F0IG11bHRpcGxpZXIsIFJlbmRlckJs
b2NrKiBjb250YWluZXIsIFQKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBkZXNjZW5kYW50Qmxv
Y2sgPSB0b1JlbmRlckJsb2NrKGRlc2NlbmRhbnQpOwogICAgICAgICAgICAgVGV4dEF1dG9zaXpp
bmdDbHVzdGVySW5mbyBkZXNjZW5kYW50Q2x1c3RlckluZm8oZGVzY2VuZGFudEJsb2NrKTsKICAg
ICAgICAgICAgIGlmIChpc1dpZGVyRGVzY2VuZGFudChkZXNjZW5kYW50QmxvY2ssIGNsdXN0ZXJJ
bmZvKSB8fCBpc0luZGVwZW5kZW50RGVzY2VuZGFudChkZXNjZW5kYW50QmxvY2spKQotICAgICAg
ICAgICAgICAgIHByb2Nlc3NDbHVzdGVyKGRlc2NlbmRhbnRDbHVzdGVySW5mbywgZGVzY2VuZGFu
dEJsb2NrLCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOworICAgICAgICAgICAgICAgIHBy
b2Nlc3NTaW5nbGVDbHVzdGVyKGRlc2NlbmRhbnRDbHVzdGVySW5mbywgZGVzY2VuZGFudEJsb2Nr
LCBkZXNjZW5kYW50QmxvY2ssIHdpbmRvd0luZm8pOwogICAgICAgICAgICAgZWxzZSBpZiAoaXNO
YXJyb3dEZXNjZW5kYW50KGRlc2NlbmRhbnRCbG9jaywgY2x1c3RlckluZm8pKSB7CiAgICAgICAg
ICAgICAgICAgLy8gTmFycm93IGRlc2NlbmRhbnRzIGFyZSBwcm9jZXNzZWQgdG9nZXRoZXIgbGF0
ZXIgdG8gYmUgYWJsZSB0byBhcHBseSB0aGUgc2FtZSBtdWx0aXBsaWVyCiAgICAgICAgICAgICAg
ICAgLy8gdG8gZWFjaCBvZiB0aGVtIGlmIG5lY2Vzc2FyeS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dEF1dG9zaXplci5oCmluZGV4IDUzNzE1N2U5MTBiNjhlNWI2Mjk5OThlOTJiNDcyMGYz
Y2VlOGUzNGYuLmYzYmNmMDYzZDJjM2E4NWE1NzNiNTdiN2UxOTQyZTJhMTBlZTlkNTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaApAQCAtNjEsNyArNjEsOSBAQCBw
cml2YXRlOgogCiAgICAgZXhwbGljaXQgVGV4dEF1dG9zaXplcihEb2N1bWVudCopOwogCi0gICAg
dm9pZCBwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiwgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9z
aXppbmdXaW5kb3dJbmZvJik7CisgICAgdm9pZCBwcm9jZXNzQ2x1c3RlcihUZXh0QXV0b3Npemlu
Z0NsdXN0ZXJJbmZvJiwgUmVuZGVyQmxvY2sqIGNvbnRhaW5lciwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJiwgZmxvYXQgdGV4dFdpZHRo
LCBib29sIHNob3VsZEJlQXV0b3NpemVkKTsKKyAgICB2b2lkIHByb2Nlc3NTaW5nbGVDbHVzdGVy
KFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mLCBSZW5kZXJCbG9jayogY29udGFpbmVyLCBSZW5k
ZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsK
KyAgICB2b2lkIHByb2Nlc3NDb21wb3NpdGVDbHVzdGVyKFZlY3RvcjxUZXh0QXV0b3NpemluZ0Ns
dXN0ZXJJbmZvPiYsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwogICAgIHZvaWQg
cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBSZW5kZXJCbG9jayogY29udGFpbmVy
LCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwg
Y29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJbmZvJik7CiAKICAgICB2b2lkIHNldE11bHRpcGxp
ZXIoUmVuZGVyT2JqZWN0KiwgZmxvYXQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ5MmVlMjM5YjAxYjlhMTkyZGEwMTcy
YjMwOWJmMGUxOTYzODU0MzguLmYzNzUzZWFmOWQ2ZDQxNTE2N2YzN2JiZWQ1NzE0ZDM2MWZiYzY1
MjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMi0xMiAgQW50b24gVmF5dm9kICA8YXZh
eXZvZEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1RleHQgQXV0b3NpemluZ10gUHJvY2VzcyBu
YXJyb3cgZGVzY2VuZGFudHMgd2l0aCB0aGUgc2FtZSBtdWx0aXBsaWVyIGZvciB0aGUgZm9udCBz
aXplLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5
NTczCisKKyAgICAgICAgVGVzdCB0byB2ZXJpZnkgdGhhdCBhbGwgbmFycm93IGRlc2NlbmRhbnRz
IG9mIGEgY2x1c3RlciBhcmUgYXV0b3NpemVkIHdpdGggdGhlIHNhbWUKKyAgICAgICAgbXVsdGlw
bGllci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvdGV4dC1hdXRvc2l6aW5nL25hcnJvdy1kZXNjZW5kYW50cy1jb21iaW5lZC1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9uYXJyb3ctZGVz
Y2VuZGFudHMtY29tYmluZWQuaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMTIgIEFuZHJleSBLb3N5
YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIC0tIHN1cHBy
ZXNzIHN0cmF5IGNvbnNvbGUgbWVzc2FnZSB0aGF0IGVtZXJnZWQgYWZ0ZXIgcjE0MjQ4Ni4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL25hcnJvdy1kZXNjZW5k
YW50cy1jb21iaW5lZC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9z
aXppbmcvbmFycm93LWRlc2NlbmRhbnRzLWNvbWJpbmVkLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDhmYzI0YjVkYTg3ZTI1NDAwMDlkYmEwOTM3OGQzNDZkMjhhZmRlZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvdGV4dC1hdXRvc2l6aW5nL25hcnJvdy1kZXNjZW5kYW50
cy1jb21iaW5lZC1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMjcgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKworPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRo
PTgwMCI+Cis8c3R5bGU+CitodG1sIHsgZm9udC1zaXplOiAxNnB4OyB9Citib2R5IHsgd2lkdGg6
IDgwMHB4OyBtYXJnaW46IDA7IG92ZXJmbG93LXk6IGhpZGRlbjsgfQorPC9zdHlsZT4KKworPC9o
ZWFkPgorPGJvZHk+CisKKzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMS4yNXJlbSI+CisgICAgPGRp
diBzdHlsZT0id2lkdGg6IDMyMHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRv
c2l6ZWQgdG8gMjBweCBjb21wdXRlZCBmb250LXNpemUgYXMgaXQgaXMgY29tYmluZWQgd2l0aCBp
dHMgbmFycm93IHNpYmxpbmdzIGFuZCB0aGUgbWF4aW11bSB3aWR0aCBpcyA0MDBweC4KKyAgICA8
L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogNDAwcHgiPgorICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSBhcyBpdCBpcyBj
b21iaW5lZCB3aXRoIGl0cyBuYXJyb3cgc2libGluZ3MgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIGlz
IDQwMHB4LgorICAgIDwvZGl2PgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiAyNDBweCI+CisgICAg
ICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1z
aXplIGFzIGl0IGlzIGNvbWJpbmVkIHdpdGggaXRzIG5hcnJvdyBzaWJsaW5ncyBhbmQgdGhlIG1h
eGltdW0gd2lkdGggaXMgNDAwcHguCisgICAgPC9kaXY+Cis8L2Rpdj4KKworPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvbmFycm93
LWRlc2NlbmRhbnRzLWNvbWJpbmVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy9uYXJyb3ctZGVzY2VuZGFudHMtY29tYmluZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWFjMzZi
NmI2ODIwNTYxNWM5MDcyNjQ5NDM0NjFmNTRkODU4NjA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvbmFycm93LWRlc2NlbmRhbnRzLWNvbWJpbmVk
Lmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
Cis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ODAwIj4KKzxzdHlsZT4KK2h0
bWwgeyBmb250LXNpemU6IDE2cHg7IH0KK2JvZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsg
b3ZlcmZsb3cteTogaGlkZGVuOyB9Cis8L3N0eWxlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5p
bnRlcm5hbHMpIHsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFRleHRBdXRvc2l6
aW5nRW5hYmxlZCh0cnVlKTsKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldFRleHRB
dXRvc2l6aW5nV2luZG93U2l6ZU92ZXJyaWRlKDMyMCwgNDgwKTsKK30gZWxzZSBpZiAod2luZG93
LmNvbnNvbGUgJiYgY29uc29sZS53YXJuKSB7CisgICAgY29uc29sZS53YXJuKCJUaGlzIHRlc3Qg
ZGVwZW5kcyBvbiB0aGUgVGV4dCBBdXRvc2l6aW5nIHNldHRpbmcgYmVpbmcgdHJ1ZSwgc28gcnVu
IGl0IGluIER1bXBSZW5kZXJUcmVlLCBvciBtYW51YWxseSBlbmFibGUgVGV4dCBBdXRvc2l6aW5n
LCBhbmQgZWl0aGVyIHVzZSBhIG1vYmlsZSBkZXZpY2Ugd2l0aCAzMjBweCBkZXZpY2Utd2lkdGgg
KGxpa2UgTmV4dXMgUyBvciBpUGhvbmUpLCBvciBkZWZpbmUgSEFDS19GT1JDRV9URVhUX0FVVE9T
SVpJTkdfT05fREVTS1RPUC4iKTsKK30KKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKwor
PGRpdj4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzIwcHgiPgorICAgICAgICBUaGlzIHRleHQg
c2hvdWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSBhcyBpdCBpcyBj
b21iaW5lZCB3aXRoIGl0cyBuYXJyb3cgc2libGluZ3MgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIGlz
IDQwMHB4LgorICAgIDwvZGl2PgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA0MDBweCI+CisgICAg
ICAgIFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1z
aXplIGFzIGl0IGlzIGNvbWJpbmVkIHdpdGggaXRzIG5hcnJvdyBzaWJsaW5ncyBhbmQgdGhlIG1h
eGltdW0gd2lkdGggaXMgNDAwcHguCisgICAgPC9kaXY+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6
IDI0MHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBj
b21wdXRlZCBmb250LXNpemUgYXMgaXQgaXMgY29tYmluZWQgd2l0aCBpdHMgbmFycm93IHNpYmxp
bmdzIGFuZCB0aGUgbWF4aW11bSB3aWR0aCBpcyA0MDBweC4KKyAgICA8L2Rpdj4KKzwvZGl2Pgor
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188074</attachid>
            <date>2013-02-13 06:38:56 -0800</date>
            <delta_ts>2013-02-14 04:10:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109573-20130213143524.patch</filename>
            <type>text/plain</type>
            <size>13881</size>
            <attacher name="Anton Vayvod">avayvod</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNkMjc4NDM0ZmNmMThk
ZGVjNWFiMWEwNWY4MWEzNGY2MjQ3OGE5ZC4uZTg5MTU1N2Q3NjcyYTZlOWY4ZmU1MmVmYTFlNjM2
OTgzYTMzZjQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTAyLTEyICBBbnRv
biBWYXl2b2QgIDxhdmF5dm9kQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVGV4dCBBdXRvc2l6
aW5nXSBQcm9jZXNzIG5hcnJvdyBkZXNjZW5kYW50cyB3aXRoIHRoZSBzYW1lIG11bHRpcGxpZXIg
Zm9yIHRoZSBmb250IHNpemUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDk1NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb21iaW5lIG5hcnJvdyBkZXNjZW5kYW50cyBvZiB0aGUgc2FtZSBhdXRvc2l6
aW5nIGNsdXN0ZXIgaW50byBhIGdyb3VwIHRoYXQgaXMgYXV0b3NpemVkCisgICAgICAgIHdpdGgg
dGhlIHNhbWUgbXVsdGlwbGllci4KKworICAgICAgICBGb3IgZXhhbXBsZSwgb24gc2l0ZXMgd2l0
aCBhIHNpZGViYXIsIHNvbWV0aW1lcyB0aGUgcGFyYWdyYXBocyBuZXh0IHRvIHRoZSBzaWRlYmFy
IHdpbGwgaGF2ZQorICAgICAgICBhIGxhcmdlIG1hcmdpbiBpbmRpdmlkdWFsbHkgYXBwbGllZCAo
dmlhIGEgQ1NTIHNlbGVjdG9yKSwgY2F1c2luZyB0aGVtIGFsbCB0byBpbmRpdmlkdWFsbHkKKyAg
ICAgICAgYXBwZWFyIG5hcnJvd2VyIHRoYW4gdGhlaXIgZW5jbG9zaW5nIGJsb2NrQ29udGFpbmlu
Z0FsbFRleHQuIFJhdGhlciB0aGFuIG1ha2luZyBlYWNoIG9mCisgICAgICAgIHRoZXNlIHBhcmFn
cmFwaHMgaW50byBhIHNlcGFyYXRlIGNsdXN0ZXIsIHdlIHdhbnQgdGhlbSBhbGwgdG8gc2hhcmUg
dGhlIHNhbWUgbXVsdGlwbGllciwgYXMKKyAgICAgICAgaWYgdGhleSB3ZXJlIGEgc2luZ2xlIGNs
dXN0ZXIuCisKKyAgICAgICAgVGVzdDogZmFzdC90ZXh0LWF1dG9zaXppbmcvbmFycm93LWRlc2Nl
bmRhbnRzLWNvbWJpbmVkLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9UZXh0QXV0b3NpemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVySW50
ZXJuYWwpOgorCisgICAgICAgICAgICBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIHByb2Nlc3ND
bHVzdGVyKCkgYW5kIHByb2Nlc3NDb21wb3NpdGVDbHVzdGVyIHRoYXQgYWNjZXB0cyB0aGUKKyAg
ICAgICAgICAgIHRleHQgd2lkdGggYW5kIHdoZXRoZXIgdGhlIGNsdXN0ZXIgc2hvdWxkIGJlIGF1
dG9zaXplZCBhcyBwYXJhbWV0ZXJzIGluc3RlYWQgb2YKKyAgICAgICAgICAgIGNhbGN1bGF0aW5n
IGl0IGlubGluZS4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0Ns
dXN0ZXIpOgorCisgICAgICAgICAgICBDYWxjdWxhdGVzIHRoZSB0ZXh0IHdpZHRoIGZvciBhIHNp
bmdsZSBjbHVzdGVyIGFuZCB3aGV0aGVyIGl0IHNob3VsZCBiZSBhdXRvc2l6ZWQsIHRoZW4KKyAg
ICAgICAgICAgIGNhbGxzIHByb2Nlc3NDbHVzdGVySW50ZXJuYWwoKSB0byBhcHBseSB0aGUgbXVs
dGlwbGllciBhbmQgcHJvY2VzcyB0aGUgY2x1c3RlcidzCisgICAgICAgICAgICBkZXNjZW5kYW50
cy4KKworICAgICAgICAoV2ViQ29yZTo6VGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbXBvc2l0ZUNs
dXN0ZXIpOgorCisgICAgICAgICAgICBDYWxjdWxhdGVzIHRoZSB0ZXh0IHdpZHRoIGZvciBhIGdy
b3VwIG9mIHJlbmRlcmVycyBhbmQgaWYgdGhlIGdyb3VwIHNob3VsZCBiZSBhdXRvc2l6ZWQsCisg
ICAgICAgICAgICB0aGVuIGNhbGxzIHByb2Nlc3NDbHVzdGVySW50ZXJuYWwoKSByZXBlYXRlZGx5
IHdpdGggdGhlIHNhbWUgbXVsdGlwbGllciB0byBhcHBseSBpdCBhbmQKKyAgICAgICAgICAgIHBy
b2Nlc3MgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgZ3JvdXAuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRBdXRvc2l6ZXI6OmNsdXN0ZXJTaG91bGRCZUF1dG9zaXplZCk6CisKKyAgICAgICAg
ICAgIENhbGxzIHRoZSBtdWx0aXBsZSByZW5kZXJlcnMgdmVyc2lvbiB0byBhdm9pZCBjb2RlIGR1
cGxpY2F0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpUZXh0QXV0b3NpemVyOjpjb21wb3NpdGVD
bHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQpOgorCisgICAgICAgICAgICBUaGUgbXVsdGlwbGUgcmVu
ZGVyZXJzIHZlcnNpb24gb2YgY2x1c3RlclNob3VsZEJlQXV0b3NpemVkLgorCisgICAgICAgICog
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuaDoKKworICAgICAgICAgICAgVXBkYXRlZCBtZXRob2Qg
ZGVjbGFyYXRpb25zLgorCiAyMDEzLTAyLTEyICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgSW1wbGVtZW50IHNjcmlwdCBNSU1FIHJlc3RyaWN0aW9ucyBmb3IgWC1D
b250ZW50LVR5cGUtT3B0aW9uczogbm9zbmlmZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Rl
eHRBdXRvc2l6ZXIuY3BwCmluZGV4IGI3ZjM3MThhNjVlOTRmOWI3Yjg4Y2M2OGUxNGU1NmRkZTRk
MmI2NDguLjM0MjYzN2FhYWJlZmE1YzFkZTYyNTRlZDZhMDM3NWQ5NjEyMzk3MzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1dG9zaXplci5jcHAKQEAgLTEzMywxOCArMTMzLDEw
IEBAIGJvb2wgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc1N1YnRyZWUoUmVuZGVyT2JqZWN0KiBsYXlv
dXRSb290KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nl
c3NDbHVzdGVyKFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvLCBSZW5kZXJC
bG9jayogY29udGFpbmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0
b3NpemluZ1dpbmRvd0luZm8mIHdpbmRvd0luZm8pCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nl
c3NDbHVzdGVySW50ZXJuYWwoVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgY2x1c3RlckluZm8s
IFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRlck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0
IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYgd2luZG93SW5mbywgZmxvYXQgdGV4dFdpZHRoLCBi
b29sIHNob3VsZEJlQXV0b3NpemVkKQogewotICAgIC8vIE1hbnkgcGFnZXMgc2V0IGEgbWF4LXdp
ZHRoIG9uIHRoZWlyIGNvbnRlbnQuIFNvIGVzcGVjaWFsbHkgZm9yIHRoZQotICAgIC8vIFJlbmRl
clZpZXcsIGluc3RlYWQgb2YganVzdCB0YWtpbmcgdGhlIHdpZHRoIG9mIHxjbHVzdGVyfCB3ZSBm
aW5kCi0gICAgLy8gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBs
YXN0IGRlc2NlbmRhbnQgdGV4dCBub2RlIG9mCi0gICAgLy8gdGhlIGNsdXN0ZXIgKGkuZS4gdGhl
IGRlZXBlc3Qgd3JhcHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgdGV4dCksCi0gICAg
Ly8gYW5kIHVzZSBpdHMgd2lkdGggaW5zdGVhZC4KLSAgICBjbHVzdGVySW5mby5ibG9ja0NvbnRh
aW5pbmdBbGxUZXh0ID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJJ
bmZvLnJvb3QpOwotICAgIGZsb2F0IHRleHRXaWR0aCA9IGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFp
bmluZ0FsbFRleHQtPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKLQogICAgIGZsb2F0IG11bHRpcGxp
ZXIgPSAxOwotICAgIGlmIChjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoY2x1c3RlckluZm8sIHRl
eHRXaWR0aCkpIHsKKyAgICBpZiAoc2hvdWxkQmVBdXRvc2l6ZWQpIHsKICAgICAgICAgaW50IGxv
Z2ljYWxXaW5kb3dXaWR0aCA9IGNsdXN0ZXJJbmZvLnJvb3QtPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyB3aW5kb3dJbmZvLndpbmRvd1NpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ud2luZG93
U2l6ZS5oZWlnaHQoKTsKICAgICAgICAgaW50IGxvZ2ljYWxMYXlvdXRXaWR0aCA9IGNsdXN0ZXJJ
bmZvLnJvb3QtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB3aW5kb3dJbmZvLm1pbkxheW91
dFNpemUud2lkdGgoKSA6IHdpbmRvd0luZm8ubWluTGF5b3V0U2l6ZS5oZWlnaHQoKTsKICAgICAg
ICAgLy8gSWdub3JlIGJveCB3aWR0aCBpbiBleGNlc3Mgb2YgdGhlIGxheW91dCB3aWR0aCwgdG8g
YXZvaWQgZXh0cmVtZSBtdWx0aXBsaWVycy4KQEAgLTE1NywxMSArMTQ5LDMyIEBAIHZvaWQgVGV4
dEF1dG9zaXplcjo6cHJvY2Vzc0NsdXN0ZXIoVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgY2x1
c3RlckluZm8sIFJlbmRlCiAKICAgICBwcm9jZXNzQ29udGFpbmVyKG11bHRpcGxpZXIsIGNvbnRh
aW5lciwgY2x1c3RlckluZm8sIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvKTsKIAotICAgIFZlY3Rv
cjxUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvPiYgbmFycm93RGVzY2VuZGFudHMgPSBjbHVzdGVy
SW5mby5uYXJyb3dEZXNjZW5kYW50czsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hcnJv
d0Rlc2NlbmRhbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRleHRBdXRvc2l6aW5nQ2x1c3Rl
ckluZm8mIGRlc2NlbmRhbnRDbHVzdGVySW5mbyA9IG5hcnJvd0Rlc2NlbmRhbnRzW2ldOwotICAg
ICAgICBwcm9jZXNzQ2x1c3RlcihkZXNjZW5kYW50Q2x1c3RlckluZm8sIGRlc2NlbmRhbnRDbHVz
dGVySW5mby5yb290LCBkZXNjZW5kYW50Q2x1c3RlckluZm8ucm9vdCwgd2luZG93SW5mbyk7Cisg
ICAgcHJvY2Vzc0NvbXBvc2l0ZUNsdXN0ZXIoY2x1c3RlckluZm8ubmFycm93RGVzY2VuZGFudHMs
IHdpbmRvd0luZm8pOworfQorCit2b2lkIFRleHRBdXRvc2l6ZXI6OnByb2Nlc3NDbHVzdGVyKFRl
eHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvLCBSZW5kZXJCbG9jayogY29udGFp
bmVyLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVSb290LCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRv
d0luZm8mIHdpbmRvd0luZm8pCit7CisgICAgLy8gTWFueSBwYWdlcyBzZXQgYSBtYXgtd2lkdGgg
b24gdGhlaXIgY29udGVudC4gU28gZXNwZWNpYWxseSBmb3IgdGhlIFJlbmRlclZpZXcsIGluc3Rl
YWQgb2YKKyAgICAvLyBqdXN0IHRha2luZyB0aGUgd2lkdGggb2YgfGNsdXN0ZXJ8IHdlIGZpbmQg
dGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGZpcnN0IGFuZCBsYXN0CisgICAgLy8g
ZGVzY2VuZGFudCB0ZXh0IG5vZGUgb2YgdGhlIGNsdXN0ZXIgKGkuZS4gdGhlIGRlZXBlc3Qgd3Jh
cHBlciBibG9jayB0aGF0IGNvbnRhaW5zIGFsbCB0aGUKKyAgICAvLyB0ZXh0KSwgYW5kIHVzZSBp
dHMgd2lkdGggaW5zdGVhZC4KKyAgICBjbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0
ID0gZmluZERlZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLnJvb3QpOwor
ICAgIGZsb2F0IHRleHRXaWR0aCA9IGNsdXN0ZXJJbmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQt
PmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBwcm9jZXNzQ2x1c3RlckludGVybmFsKGNsdXN0
ZXJJbmZvLCBjb250YWluZXIsIHN1YnRyZWVSb290LCB3aW5kb3dJbmZvLCB0ZXh0V2lkdGgsIGNs
dXN0ZXJTaG91bGRCZUF1dG9zaXplZChjbHVzdGVySW5mbywgdGV4dFdpZHRoKSk7Cit9CisKK3Zv
aWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbXBvc2l0ZUNsdXN0ZXIoVmVjdG9yPFRleHRBdXRv
c2l6aW5nQ2x1c3RlckluZm8+JiBjbHVzdGVySW5mb3MsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2lu
ZG93SW5mbyYgd2luZG93SW5mbykKK3sKKyAgICBmbG9hdCBtYXhUZXh0V2lkdGggPSAwOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlckluZm9zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvID0gY2x1c3RlckluZm9z
W2ldOworICAgICAgICBjbHVzdGVySW5mby5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0ID0gZmluZERl
ZXBlc3RCbG9ja0NvbnRhaW5pbmdBbGxUZXh0KGNsdXN0ZXJJbmZvLnJvb3QpOworICAgICAgICBt
YXhUZXh0V2lkdGggPSBtYXg8ZmxvYXQ+KG1heFRleHRXaWR0aCwgY2x1c3RlckluZm8uYmxvY2tD
b250YWluaW5nQWxsVGV4dC0+Y29udGVudExvZ2ljYWxXaWR0aCgpKTsKICAgICB9CisKKyAgICBi
b29sIHNob3VsZEJlQXV0b3NpemVkID0gY29tcG9zaXRlQ2x1c3RlclNob3VsZEJlQXV0b3NpemVk
KGNsdXN0ZXJJbmZvcywgbWF4VGV4dFdpZHRoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNsdXN0ZXJJbmZvcy5zaXplKCk7ICsraSkKKyAgICAgICAgcHJvY2Vzc0NsdXN0ZXJJbnRlcm5h
bChjbHVzdGVySW5mb3NbaV0sIGNsdXN0ZXJJbmZvc1tpXS5yb290LCBjbHVzdGVySW5mb3NbaV0u
cm9vdCwgd2luZG93SW5mbywgbWF4VGV4dFdpZHRoLCBzaG91bGRCZUF1dG9zaXplZCk7CiB9CiAK
IHZvaWQgVGV4dEF1dG9zaXplcjo6cHJvY2Vzc0NvbnRhaW5lcihmbG9hdCBtdWx0aXBsaWVyLCBS
ZW5kZXJCbG9jayogY29udGFpbmVyLCBUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiBjbHVzdGVy
SW5mbywgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5k
b3dJbmZvJiB3aW5kb3dJbmZvKQpAQCAtNDI4LDYgKzQ0MSwxMiBAQCBib29sIFRleHRBdXRvc2l6
ZXI6OmNvbnRlbnRIZWlnaHRJc0NvbnN0cmFpbmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWlu
ZXIpCiAKIGJvb2wgVGV4dEF1dG9zaXplcjo6Y2x1c3RlclNob3VsZEJlQXV0b3NpemVkKFRleHRB
dXRvc2l6aW5nQ2x1c3RlckluZm8mIGNsdXN0ZXJJbmZvLCBmbG9hdCBibG9ja1dpZHRoKQogewor
ICAgIFZlY3RvcjxUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvPiBjbHVzdGVySW5mb3MoMSwgY2x1
c3RlckluZm8pOworICAgIHJldHVybiBjb21wb3NpdGVDbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQo
Y2x1c3RlckluZm9zLCBibG9ja1dpZHRoKTsKK30KKworYm9vbCBUZXh0QXV0b3NpemVyOjpjb21w
b3NpdGVDbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoVmVjdG9yPFRleHRBdXRvc2l6aW5nQ2x1c3Rl
ckluZm8+JiBjbHVzdGVySW5mb3MsIGZsb2F0IGJsb2NrV2lkdGgpCit7CiAgICAgLy8gRG9uJ3Qg
YXV0b3NpemUgY2x1c3RlcnMgdGhhdCBjb250YWluIGxlc3MgdGhhbiA0IGxpbmVzIG9mIHRleHQg
KGluCiAgICAgLy8gcHJhY3RpY2UgbGVzcyBsaW5lcyBhcmUgcmVxdWlyZWQsIHNpbmNlIG1lYXN1
cmVEZXNjZW5kYW50VGV4dFdpZHRoCiAgICAgLy8gYXNzdW1lcyB0aGF0IGNoYXJhY3RlcnMgYXJl
IDFlbSB3aWRlLCBidXQgbW9zdCBjaGFyYWN0ZXJzIGFyZSBuYXJyb3dlcgpAQCAtNDM4LDEyICs0
NTcsMTQgQEAgYm9vbCBUZXh0QXV0b3NpemVyOjpjbHVzdGVyU2hvdWxkQmVBdXRvc2l6ZWQoVGV4
dEF1dG9zaXppbmdDbHVzdGVySW5mbyYgY2x1c3RlckkKICAgICAvLyBpZiBhIGNsdXN0ZXIgY29u
dGFpbnMgdmVyeSBmZXcgbGluZXMgb2YgdGV4dCB0aGVuIGl0J3Mgb2sgdG8gaGF2ZSB0byB6b29t
CiAgICAgLy8gaW4gYW5kIHBhbiBmcm9tIHNpZGUgdG8gc2lkZSB0byByZWFkIGVhY2ggbGluZSwg
c2luY2UgaWYgdGhlcmUgYXJlIHZlcnkKICAgICAvLyBmZXcgbGluZXMgb2YgdGV4dCB5b3UnbGwg
b25seSBuZWVkIHRvIHBhbiBhY3Jvc3Mgb25jZSBvciB0d2ljZS4KKyAgICBmbG9hdCB0b3RhbFRl
eHRXaWR0aCA9IDA7CiAgICAgY29uc3QgZmxvYXQgbWluTGluZXNPZlRleHQgPSA0OwogICAgIGZs
b2F0IG1pblRleHRXaWR0aCA9IGJsb2NrV2lkdGggKiBtaW5MaW5lc09mVGV4dDsKLSAgICBmbG9h
dCB0ZXh0V2lkdGggPSAwOwotICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNsdXN0ZXJJ
bmZvLmJsb2NrQ29udGFpbmluZ0FsbFRleHQsIGNsdXN0ZXJJbmZvLCBtaW5UZXh0V2lkdGgsIHRl
eHRXaWR0aCk7Ci0gICAgaWYgKHRleHRXaWR0aCA+PSBtaW5UZXh0V2lkdGgpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2x1c3RlckluZm9zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNsdXN0ZXJJbmZv
c1tpXS5ibG9ja0NvbnRhaW5pbmdBbGxUZXh0LCBjbHVzdGVySW5mb3NbaV0sIG1pblRleHRXaWR0
aCwgdG90YWxUZXh0V2lkdGgpOworICAgICAgICBpZiAodG90YWxUZXh0V2lkdGggPj0gbWluVGV4
dFdpZHRoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRBdXRvc2l6
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0QXV0b3NpemVyLmgKaW5kZXggNTM3
MTU3ZTkxMGI2OGU1YjYyOTk5OGU5MmI0NzIwZjNjZWU4ZTM0Zi4uNjQ5NWEzMDJiMDg3ZTc3Yzc4
MDhlYWIyMTNmMzYyZWVjM2ZiYmE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRBdXRvc2l6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dEF1
dG9zaXplci5oCkBAIC02MSw3ICs2MSw5IEBAIHByaXZhdGU6CiAKICAgICBleHBsaWNpdCBUZXh0
QXV0b3NpemVyKERvY3VtZW50Kik7CiAKKyAgICB2b2lkIHByb2Nlc3NDbHVzdGVySW50ZXJuYWwo
VGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYsIFJlbmRlckJsb2NrKiBjb250YWluZXIsIFJlbmRl
ck9iamVjdCogc3VidHJlZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYsIGZs
b2F0IHRleHRXaWR0aCwgYm9vbCBzaG91bGRCZUF1dG9zaXplZCk7CiAgICAgdm9pZCBwcm9jZXNz
Q2x1c3RlcihUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiwgUmVuZGVyQmxvY2sqIGNvbnRhaW5l
ciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUm9vdCwgY29uc3QgVGV4dEF1dG9zaXppbmdXaW5kb3dJ
bmZvJik7CisgICAgdm9pZCBwcm9jZXNzQ29tcG9zaXRlQ2x1c3RlcihWZWN0b3I8VGV4dEF1dG9z
aXppbmdDbHVzdGVySW5mbz4mLCBjb25zdCBUZXh0QXV0b3NpemluZ1dpbmRvd0luZm8mKTsKICAg
ICB2b2lkIHByb2Nlc3NDb250YWluZXIoZmxvYXQgbXVsdGlwbGllciwgUmVuZGVyQmxvY2sqIGNv
bnRhaW5lciwgVGV4dEF1dG9zaXppbmdDbHVzdGVySW5mbyYsIFJlbmRlck9iamVjdCogc3VidHJl
ZVJvb3QsIGNvbnN0IFRleHRBdXRvc2l6aW5nV2luZG93SW5mbyYpOwogCiAgICAgdm9pZCBzZXRN
dWx0aXBsaWVyKFJlbmRlck9iamVjdCosIGZsb2F0KTsKQEAgLTc3LDYgKzc5LDcgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgYm9vbCBjb250YWluZXJJc1Jvd09mTGlua3MoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBjb250YWluZXIpOwogICAgIHN0YXRpYyBib29sIGNvbnRlbnRIZWlnaHRJc0NvbnN0cmFp
bmVkKGNvbnN0IFJlbmRlckJsb2NrKiBjb250YWluZXIpOwogICAgIHN0YXRpYyBib29sIGNsdXN0
ZXJTaG91bGRCZUF1dG9zaXplZChUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvJiwgZmxvYXQgYmxv
Y2tXaWR0aCk7CisgICAgc3RhdGljIGJvb2wgY29tcG9zaXRlQ2x1c3RlclNob3VsZEJlQXV0b3Np
emVkKFZlY3RvcjxUZXh0QXV0b3NpemluZ0NsdXN0ZXJJbmZvPiYsIGZsb2F0IGJsb2NrV2lkdGgp
OwogICAgIHN0YXRpYyB2b2lkIG1lYXN1cmVEZXNjZW5kYW50VGV4dFdpZHRoKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb250YWluZXIsIFRleHRBdXRvc2l6aW5nQ2x1c3RlckluZm8mLCBmbG9hdCBtaW5U
ZXh0V2lkdGgsIGZsb2F0JiB0ZXh0V2lkdGgpOwogCiAgICAgLy8gVXNlIHRvIHRyYXZlcnNlIHRo
ZSB0cmVlIG9mIGRlc2NlbmRhbnRzLCBleGNsdWRpbmcgZGVzY2VuZGFudHMgb2YgY29udGFpbmVy
cyAoYnV0IHJldHVybmluZyB0aGUgY29udGFpbmVycyB0aGVtc2VsdmVzKS4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3MzYw
Zjk1YTQyODA5ZTA2MGZjMTA5ZjY1MzA4ZWJmZjNmZTEzOGE3Li41YWZjMzE0ZDA0Njc4MWVmZmEx
MjYzN2M1ZmE3OTUxZTFjMmQ3YWNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDItMTIg
IEFudG9uIFZheXZvZCAgPGF2YXl2b2RAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtUZXh0IEF1
dG9zaXppbmddIFByb2Nlc3MgbmFycm93IGRlc2NlbmRhbnRzIHdpdGggdGhlIHNhbWUgbXVsdGlw
bGllciBmb3IgdGhlIGZvbnQgc2l6ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwOTU3MworCisgICAgICAgIFRlc3QgdG8gdmVyaWZ5IHRoYXQgYWxs
IG5hcnJvdyBkZXNjZW5kYW50cyBvZiBhIGNsdXN0ZXIgYXJlIGF1dG9zaXplZCB3aXRoIHRoZSBz
YW1lCisgICAgICAgIG11bHRpcGxpZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L3RleHQtYXV0b3NpemluZy9uYXJyb3ctZGVzY2VuZGFu
dHMtY29tYmluZWQtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0LWF1
dG9zaXppbmcvbmFycm93LWRlc2NlbmRhbnRzLWNvbWJpbmVkLmh0bWw6IEFkZGVkLgorCiAyMDEz
LTAyLTEyICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVt
ZW50IHNjcmlwdCBNSU1FIHJlc3RyaWN0aW9ucyBmb3IgWC1Db250ZW50LVR5cGUtT3B0aW9uczog
bm9zbmlmZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvbmFy
cm93LWRlc2NlbmRhbnRzLWNvbWJpbmVkLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3RleHQtYXV0b3NpemluZy9uYXJyb3ctZGVzY2VuZGFudHMtY29tYmluZWQtZXhwZWN0ZWQuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40OGZjMjRiNWRhODdlMjU0MDAwOWRiYTA5Mzc4ZDM0NmQyOGFmZGVmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0LWF1dG9zaXppbmcvbmFycm93
LWRlc2NlbmRhbnRzLWNvbWJpbmVkLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorCis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29u
dGVudD0id2lkdGg9ODAwIj4KKzxzdHlsZT4KK2h0bWwgeyBmb250LXNpemU6IDE2cHg7IH0KK2Jv
ZHkgeyB3aWR0aDogODAwcHg7IG1hcmdpbjogMDsgb3ZlcmZsb3cteTogaGlkZGVuOyB9Cis8L3N0
eWxlPgorCis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxLjI1cmVt
Ij4KKyAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzIwcHgiPgorICAgICAgICBUaGlzIHRleHQgc2hv
dWxkIGJlIGF1dG9zaXplZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSBhcyBpdCBpcyBjb21i
aW5lZCB3aXRoIGl0cyBuYXJyb3cgc2libGluZ3MgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIGlzIDQw
MHB4LgorICAgIDwvZGl2PgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiA0MDBweCI+CisgICAgICAg
IFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1zaXpl
IGFzIGl0IGlzIGNvbWJpbmVkIHdpdGggaXRzIG5hcnJvdyBzaWJsaW5ncyBhbmQgdGhlIG1heGlt
dW0gd2lkdGggaXMgNDAwcHguCisgICAgPC9kaXY+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDI0
MHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21w
dXRlZCBmb250LXNpemUgYXMgaXQgaXMgY29tYmluZWQgd2l0aCBpdHMgbmFycm93IHNpYmxpbmdz
IGFuZCB0aGUgbWF4aW11bSB3aWR0aCBpcyA0MDBweC4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3Np
emluZy9uYXJyb3ctZGVzY2VuZGFudHMtY29tYmluZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC1hdXRvc2l6aW5nL25hcnJvdy1kZXNjZW5kYW50cy1jb21iaW5lZC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVhYWMzNmI2YjY4MjA1NjE1YzkwNzI2NDk0MzQ2MWY1NGQ4NTg2MDkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQtYXV0b3NpemluZy9uYXJyb3ctZGVzY2VuZGFu
dHMtY29tYmluZWQuaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+CisKKzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD04MDAiPgor
PHN0eWxlPgoraHRtbCB7IGZvbnQtc2l6ZTogMTZweDsgfQorYm9keSB7IHdpZHRoOiA4MDBweDsg
bWFyZ2luOiAwOyBvdmVyZmxvdy15OiBoaWRkZW47IH0KKzwvc3R5bGU+CisKKzxzY3JpcHQ+Citp
ZiAod2luZG93LmludGVybmFscykgeworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0
VGV4dEF1dG9zaXppbmdFbmFibGVkKHRydWUpOworICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGlu
Z3Muc2V0VGV4dEF1dG9zaXppbmdXaW5kb3dTaXplT3ZlcnJpZGUoMzIwLCA0ODApOworfSBlbHNl
IGlmICh3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHsKKyAgICBjb25zb2xlLndhcm4o
IlRoaXMgdGVzdCBkZXBlbmRzIG9uIHRoZSBUZXh0IEF1dG9zaXppbmcgc2V0dGluZyBiZWluZyB0
cnVlLCBzbyBydW4gaXQgaW4gRHVtcFJlbmRlclRyZWUsIG9yIG1hbnVhbGx5IGVuYWJsZSBUZXh0
IEF1dG9zaXppbmcsIGFuZCBlaXRoZXIgdXNlIGEgbW9iaWxlIGRldmljZSB3aXRoIDMyMHB4IGRl
dmljZS13aWR0aCAobGlrZSBOZXh1cyBTIG9yIGlQaG9uZSksIG9yIGRlZmluZSBIQUNLX0ZPUkNF
X1RFWFRfQVVUT1NJWklOR19PTl9ERVNLVE9QLiIpOworfQorPC9zY3JpcHQ+CisKKzwvaGVhZD4K
Kzxib2R5PgorCis8ZGl2PgorICAgIDxkaXYgc3R5bGU9IndpZHRoOiAzMjBweCI+CisgICAgICAg
IFRoaXMgdGV4dCBzaG91bGQgYmUgYXV0b3NpemVkIHRvIDIwcHggY29tcHV0ZWQgZm9udC1zaXpl
IGFzIGl0IGlzIGNvbWJpbmVkIHdpdGggaXRzIG5hcnJvdyBzaWJsaW5ncyBhbmQgdGhlIG1heGlt
dW0gd2lkdGggaXMgNDAwcHguCisgICAgPC9kaXY+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDQw
MHB4Ij4KKyAgICAgICAgVGhpcyB0ZXh0IHNob3VsZCBiZSBhdXRvc2l6ZWQgdG8gMjBweCBjb21w
dXRlZCBmb250LXNpemUgYXMgaXQgaXMgY29tYmluZWQgd2l0aCBpdHMgbmFycm93IHNpYmxpbmdz
IGFuZCB0aGUgbWF4aW11bSB3aWR0aCBpcyA0MDBweC4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IHN0
eWxlPSJ3aWR0aDogMjQwcHgiPgorICAgICAgICBUaGlzIHRleHQgc2hvdWxkIGJlIGF1dG9zaXpl
ZCB0byAyMHB4IGNvbXB1dGVkIGZvbnQtc2l6ZSBhcyBpdCBpcyBjb21iaW5lZCB3aXRoIGl0cyBu
YXJyb3cgc2libGluZ3MgYW5kIHRoZSBtYXhpbXVtIHdpZHRoIGlzIDQwMHB4LgorICAgIDwvZGl2
PgorPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>