<?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>96579</bug_id>
          
          <creation_ts>2012-09-12 17:07:34 -0700</creation_ts>
          <short_desc>[CSS Shaders][Skia] Add FECustomFilterSkia.cpp to implement a faster way to run the custom filters</short_desc>
          <delta_ts>2013-04-08 18:03:01 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>85086</blocked>
    
    <blocked>96692</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Alexandru Chiculita">achicu</assigned_to>
          <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>718893</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-12 17:07:34 -0700</bug_when>
    <thetext>Skia can have textures attached to the GraphicsContext, so we can leverage that to avoid making copies from the CPU to the GPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719954</commentid>
    <comment_count>1</comment_count>
      <attachid>163967</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-13 14:32:11 -0700</bug_when>
    <thetext>Created attachment 163967
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720157</commentid>
    <comment_count>2</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-13 17:29:45 -0700</bug_when>
    <thetext>Dean, if you want you can review only the non-Skia part and I will remove the Skia file and open a different bug for it. I need those FECustomFilter changes for https://bugs.webkit.org/show_bug.cgi?id=96668 .

I&apos;ve just put it all in one single patch to make it easier to understand why all those changes are needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720817</commentid>
    <comment_count>3</comment_count>
      <attachid>163967</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-09-14 09:02:21 -0700</bug_when>
    <thetext>Comment on attachment 163967
Patch V1

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

I&apos;m happy with the non-Skia parts. As you mentioned, since I&apos;m not a Skia person either someone from there should r+ that part, or split it off.

&gt; Source/WebCore/ChangeLog:11
&gt; +        There is a comment in FECustomFilterSkia.cpp explaining how this works. After the refactory FECustomFilter takes

typo &quot;refactoring&quot;

&gt; Source/WebCore/ChangeLog:12
&gt; +        an input texture and outputs to a destionation texture. I&apos;ve used Skia to draw the input ImageBuffer to a 

typo &quot;destination&quot;

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:2
&gt; - * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
&gt; + * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.

I think you want to keep 2011 in there as well.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:181
&gt; +    bool needsInputTexture = programNeedsInputTexture();
&gt; +    if (needsInputTexture &amp;&amp; (filterDrawType == NEEDS_INPUT_TEXTURE) &amp;&amp; !ensureInputTexture())

You can move the programNeedsInputTexture() into the conditional since you never use needsInputTexture again.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:-174
&gt; -#if !PLATFORM(BLACKBERRY) // BlackBerry defines its own Texture class.
&gt; -    // Do not draw the filter if the input image cannot fit inside a single GPU texture.
&gt; -    if (m_inputTexture-&gt;tiles().numTilesX() != 1 || m_inputTexture-&gt;tiles().numTilesY() != 1)
&gt; -        return false;
&gt; -#endif

I&apos;m a little confused here. Where did this code move to? Does createTexture duplicate this?

&gt; Source/WebCore/platform/graphics/filters/skia/FECustomFilterSkia.cpp:16
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER âAS ISâ AND ANY

You have some copy and paste encoding issue here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720844</commentid>
    <comment_count>4</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-14 09:44:19 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 163967 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163967&amp;action=review
&gt; 
Thanks Dean!

&gt; I&apos;m happy with the non-Skia parts. As you mentioned, since I&apos;m not a Skia person either someone from there should r+ that part, or split it off.

I will try to find someone today.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        There is a comment in FECustomFilterSkia.cpp explaining how this works. After the refactory FECustomFilter takes
&gt; 
&gt; typo &quot;refactoring&quot;
I wish check webkit style had a spell checker builtin. :)

&gt; &gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:2
&gt; &gt; - * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
&gt; &gt; + * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
&gt; 
&gt; I think you want to keep 2011 in there as well.
Ok.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:181
&gt; &gt; +    bool needsInputTexture = programNeedsInputTexture();
&gt; &gt; +    if (needsInputTexture &amp;&amp; (filterDrawType == NEEDS_INPUT_TEXTURE) &amp;&amp; !ensureInputTexture())
&gt; 
&gt; You can move the programNeedsInputTexture() into the conditional since you never use needsInputTexture again.
Ok.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:-174
&gt; &gt; -#if !PLATFORM(BLACKBERRY) // BlackBerry defines its own Texture class.
&gt; &gt; -    // Do not draw the filter if the input image cannot fit inside a single GPU texture.
&gt; &gt; -    if (m_inputTexture-&gt;tiles().numTilesX() != 1 || m_inputTexture-&gt;tiles().numTilesY() != 1)
&gt; &gt; -        return false;
&gt; &gt; -#endif
&gt; 
&gt; I&apos;m a little confused here. Where did this code move to? Does createTexture duplicate this?
I&apos;ve changed the m_inputTexture to just use the texture directly, so this part of the code moved into FECustomFilter::resizeContextIfNeeded where I check for the width and height of the texture. This way Blackberry could also enable the FECustomFilter.

&gt; &gt; Source/WebCore/platform/graphics/filters/skia/FECustomFilterSkia.cpp:16
&gt; &gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER âAS ISâ AND ANY
&gt; 
&gt; You have some copy and paste encoding issue here.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720885</commentid>
    <comment_count>5</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-14 10:11:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 163967 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163967&amp;action=review
&gt; &gt; 
&gt; Thanks Dean!
&gt; 
&gt; &gt; I&apos;m happy with the non-Skia parts. As you mentioned, since I&apos;m not a Skia person either someone from there should r+ that part, or split it off.
&gt; 
&gt; I will try to find someone today.

I&apos;ve extracted all non-Skia related changes to https://bugs.webkit.org/show_bug.cgi?id=96801</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721090</commentid>
    <comment_count>6</comment_count>
      <attachid>164218</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-14 13:36:44 -0700</bug_when>
    <thetext>Created attachment 164218
Patch V2

Removed the FECustomFilter changes as those were integrated in a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721535</commentid>
    <comment_count>7</comment_count>
      <attachid>164218</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-09-15 21:35:20 -0700</bug_when>
    <thetext>Comment on attachment 164218
Patch V2

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

The changes look reasonable, but I am no familiar with the Gr* classes. Like Dean suggested, you should ask some Skia folks to give a final review.

&gt; Source/WebCore/platform/graphics/filters/skia/FECustomFilterSkia.cpp:103
&gt; +        GraphicsContext context(&amp;inputPlatformContextSkia);

I am a bit confused. This is platform dependent code, why do you use the layer GraphicsContext instead of SkPaint?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721536</commentid>
    <comment_count>8</comment_count>
      <attachid>164218</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-09-15 21:35:41 -0700</bug_when>
    <thetext>Comment on attachment 164218
Patch V2

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

The changes look reasonable, but I am no familiar with the Gr* classes. Like Dean suggested, you should ask some Skia folks to give a final review.

&gt; Source/WebCore/platform/graphics/filters/skia/FECustomFilterSkia.cpp:103
&gt; +        GraphicsContext context(&amp;inputPlatformContextSkia);

I am a bit confused. This is platform dependent code, why do you use the layer GraphicsContext instead of SkPaint?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721812</commentid>
    <comment_count>9</comment_count>
      <attachid>164218</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-09-17 05:00:59 -0700</bug_when>
    <thetext>Comment on attachment 164218
Patch V2

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

Thanks for taking a look Dirk. I think Stephen White would be the best person to review this patch.

&gt;&gt;&gt; Source/WebCore/platform/graphics/filters/skia/FECustomFilterSkia.cpp:103
&gt;&gt;&gt; +        GraphicsContext context(&amp;inputPlatformContextSkia);
&gt;&gt; 
&gt;&gt; I am a bit confused. This is platform dependent code, why do you use the layer GraphicsContext instead of SkPaint?
&gt; 
&gt; I am a bit confused. This is platform dependent code, why do you use the layer GraphicsContext instead of SkPaint?

I&apos;m drawing a platform independent type &quot;Image&quot;, so I don&apos;t want to duplicate the code that&apos;s already written for that. Is there a better way to extract a SkBitmap out of the Image object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871325</commentid>
    <comment_count>10</comment_count>
      <attachid>164218</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-04-08 18:02:43 -0700</bug_when>
    <thetext>Comment on attachment 164218
Patch V2

Skia-specific, so removing review flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871326</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-04-08 18:03:01 -0700</bug_when>
    <thetext>Skia-specific, so closing the bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163967</attachid>
            <date>2012-09-13 14:32:11 -0700</date>
            <delta_ts>2012-09-14 13:36:44 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug96579_1.patch</filename>
            <type>text/plain</type>
            <size>25050</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwN2FmOGZkLi5kMzRjYjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTItMDktMTMgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFtDU1MgU2hhZGVyc11bU2tpYV0gQWRkIEZFQ3VzdG9tRmlsdGVyU2tpYS5jcHAg
dG8gaW1wbGVtZW50IGEgZmFzdGVyIHdheSB0byBydW4gdGhlIGN1c3RvbSBmaWx0ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjU3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkndmUgcmVmYWN0b3Jl
ZCB0aGUgRkVDdXN0b21GaWx0ZXIgdG8gYWxsb3cgRkVDdXN0b21GaWx0ZXJTa2lhLmNwcCB0byB1
c2UgdGhlIHJlbmRlcmluZyBwYXJ0CisgICAgICAgIGZyb20gb3V0c2lkZS4KKworICAgICAgICBU
aGVyZSBpcyBhIGNvbW1lbnQgaW4gRkVDdXN0b21GaWx0ZXJTa2lhLmNwcCBleHBsYWluaW5nIGhv
dyB0aGlzIHdvcmtzLiBBZnRlciB0aGUgcmVmYWN0b3J5IEZFQ3VzdG9tRmlsdGVyIHRha2VzCisg
ICAgICAgIGFuIGlucHV0IHRleHR1cmUgYW5kIG91dHB1dHMgdG8gYSBkZXN0aW9uYXRpb24gdGV4
dHVyZS4gSSd2ZSB1c2VkIFNraWEgdG8gZHJhdyB0aGUgaW5wdXQgSW1hZ2VCdWZmZXIgdG8gYSAK
KyAgICAgICAgdGVtcG9yYXJ5IHNjcmF0Y2ggdGV4dHVyZSB0aGF0IGlzIHRoZW4gZmVkIGludG8g
dGhlIEZFQ3VzdG9tRmlsdGVyLiBUaGUgcmVzdWx0aW5nIHRleHR1cmUgaXMgdGhlbiB3cmFwcGVk
IGludG8gYQorICAgICAgICBTa0JpdG1hcCBhbmQgZHJhd24gYmFjayB0byB0aGUgcmVzdWx0aW5n
IEltYWdlQnVmZmVyLiBJZiBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dHMgaW52b2x2ZWQgaW4gdGhl
IHByb2Nlc3MKKyAgICAgICAgYXJlIGFjY2VsZXJhdGVkLCB0aGVuIHRoZXJlIHNob3VsZCBiZSBu
byBtb3JlIHVwbG9hZHMvZG93bmxvYWRzIHRvIGFuZCBmcm9tIHRoZSBHUFUuCisKKyAgICAgICAg
SSd2ZSBhZGRlZCBhbm90aGVyIGJ1ZyB0byBjaGVjayBmb3IgYSBwb3RlbnRpYWwgb3B0aW1pemF0
aW9uIGluIHJldXNpbmcgU2tpYSdzIHRleHR1cmVzIGRpcmVjdGx5LiAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NjkyCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLCB0aGUgZXhpc3RpbmcgY3VzdG9tIGZpbHRlcnMgdGVzdHMgc2hvdWxkIGFscmVhZHkg
Y292ZXIgdGhpcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cHJlcGFyZUNvbnRleHRJZk5l
ZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6RkVDdXN0b21GaWx0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmRlbGV0ZVJlbmRlckJ1ZmZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmRyYXdGaWx0ZXJNZXNoKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnByZXBh
cmVGb3JEcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpwcm9ncmFt
TmVlZHNJbnB1dFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmFw
cGx5U2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjppbml0aWFsaXpl
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6ZW5zdXJlSW5wdXRU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjp1cGxvYWRJbnB1dFRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmVuc3VyZUZyYW1lQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250ZXh0SWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVy
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5o
OgorICAgICAgICAoRkVDdXN0b21GaWx0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc2tpYS9GRUN1c3RvbUZpbHRlclNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlT
a2lhKToKKwogMjAxMi0wOS0xMiAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMjI1MDEpOiByZXBsYWNlZCBlbGVtZW50cyB3
aXRoIHBlcmNlbnQgd2lkdGggYXJlIHdyb25nbHkgc2l6ZSB3aGVuIGluc2VydGVkIGluc2lkZSBh
biBhdXRvLXRhYmxlIGxheW91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGRjYWVhNTYuLjU5ZGQ5NjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ5OTgsNiArNDk5OCw3IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29tcG9uZW50
VHJhbnNmZXJTa2lhLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9za2lhL0ZFQ3VzdG9tRmlsdGVyU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUdhdXNzaWFuQmx1clNraWEuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVNb3JwaG9sb2d5U2tpYS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5nU2tp
YS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKaW5kZXgg
NTgyODQ2ZS4uZGE5NzgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRl
eHQuY3BwCkBAIC03OCw2ICs3OCw4IEBAIHZvaWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6
cHJlcGFyZUNvbnRleHRJZk5lZWRlZChIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgYXR0cmlidXRlcy5wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXIgPSB0cnVlOwogICAgIGF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFs
cGhhID0gZmFsc2U7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CisgICAg
YXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVSA9IHRydWU7CiAgICAgbV9jb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKTsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUN1c3RvbUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAppbmRleCBmZDEyNTA2Li44YmMzMjg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9t
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ3VzdG9tRmlsdGVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDYgKzgz
LDcgQEAgRkVDdXN0b21GaWx0ZXI6OkZFQ3VzdG9tRmlsdGVyKEZpbHRlciogZmlsdGVyLCBDdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b20KICAgICAsIG1fZ2xvYmFsQ29udGV4dChjdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KQogICAgICwgbV92YWxpZGF0ZWRQcm9ncmFtKHZhbGlkYXRl
ZFByb2dyYW0pCiAgICAgLCBtX2NvbXBpbGVkUHJvZ3JhbSgwKSAvLyBEb24ndCBjb21waWxlIHRo
ZSBwcm9ncmFtIHVubGVzcyB3ZSBuZWVkIHRvIHBhaW50LgorICAgICwgbV9pbnB1dFRleHR1cmUo
MCkKICAgICAsIG1fZnJhbWVCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhCdWZmZXIoMCkKICAgICAs
IG1fZGVzdFRleHR1cmUoMCkKQEAgLTExMiw2ICsxMTMsMTAgQEAgdm9pZCBGRUN1c3RvbUZpbHRl
cjo6ZGVsZXRlUmVuZGVyQnVmZmVycygpCiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2lu
cHV0VGV4dHVyZSkgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9pbnB1dFRl
eHR1cmUpOworICAgICAgICBtX2lucHV0VGV4dHVyZSA9IDA7CisgICAgfQogICAgIGlmIChtX2Zy
YW1lQnVmZmVyKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byB1bmJpbmQgYW55IGZyYW1lYnVm
ZmVyIGZyb20gdGhlIGNvbnRleHQgZmlyc3QsIG90aGVyd2lzZQogICAgICAgICAvLyBzb21lIHBs
YXRmb3JtcyBtaWdodCByZWZ1c2UgdG8gYmluZCB0aGUgc2FtZSBidWZmZXIgaWQgYWdhaW4uCkBA
IC0xNDgsNDYgKzE1Myw2NiBAQCB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpjbGVhclNoYWRlclJlc3Vs
dCgpCiAgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRJbWFnZShkc3RQaXhlbEFycmF5LCBlZmZlY3RE
cmF3aW5nUmVjdCk7CiB9CiAKK3ZvaWQgRkVDdXN0b21GaWx0ZXI6OmRyYXdGaWx0ZXJNZXNoKFBs
YXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQoreworICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZUJ1ZmZlcik7Cisg
ICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29u
dGV4dFNpemUuaGVpZ2h0KCkpOworICAgIAorICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpOworICAgIAor
ICAgIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhpbnB1dFRleHR1cmUpOworICAgIG1fY29udGV4dC0+
ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIG1fbWVzaC0+aW5kaWNl
c0NvdW50KCksIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCk7CisgICAgdW5i
aW5kVmVydGV4QXR0cmlidXRlcygpOworfQorCitib29sIEZFQ3VzdG9tRmlsdGVyOjpwcmVwYXJl
Rm9yRHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSBmaWx0ZXJEcmF3VHlwZSkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dCAmJiAhaW5pdGlhbGl6ZUNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBJZiB0
aGUgc2hhZGVyIGhhZCBjb21waWxlciBlcnJvcnMgd2UgY2Fubm90IGRyYXcgYW55dGhpbmcuCisg
ICAgaWYgKCFtX2NvbXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgLy8gT25seSBhbGxvY2F0ZSBhIHRleHR1cmUgaWYgdGhlIHBy
b2dyYW0gbmVlZHMgb25lIGFuZCB0aGUgY2FsbGVyIGRvZXNuJ3QgYWxsb2NhdGUgb25lIGJ5IGl0
c2VsZi4KKyAgICBib29sIG5lZWRzSW5wdXRUZXh0dXJlID0gcHJvZ3JhbU5lZWRzSW5wdXRUZXh0
dXJlKCk7CisgICAgaWYgKG5lZWRzSW5wdXRUZXh0dXJlICYmIChmaWx0ZXJEcmF3VHlwZSA9PSBO
RUVEU19JTlBVVF9URVhUVVJFKSAmJiAhZW5zdXJlSW5wdXRUZXh0dXJlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWVuc3VyZUZyYW1lQnVmZmVyKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGRUN1c3RvbUZpbHRl
cjo6cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jb21w
aWxlZFByb2dyYW0uZ2V0KCkpOworICAgIHJldHVybiBtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxl
ckxvY2F0aW9uKCkgIT0gLTE7Cit9CisKIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hhZGVy
KCkKIHsKICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIXByZXBhcmVGb3JEcmF3aW5nKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAg
ICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdl
RGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBzcmNQaXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0RHJhd2lu
Z1JlY3QpOwotICAgIAogICAgIEludFNpemUgbmV3Q29udGV4dFNpemUoZWZmZWN0RHJhd2luZ1Jl
Y3Quc2l6ZSgpKTsKLSAgICBib29sIGhhZENvbnRleHQgPSBtX2NvbnRleHQ7Ci0gICAgaWYgKCFt
X2NvbnRleHQgJiYgIWluaXRpYWxpemVDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAotICAgIGlmICghaGFk
Q29udGV4dCB8fCBtX2NvbnRleHRTaXplICE9IG5ld0NvbnRleHRTaXplKQotICAgICAgICByZXNp
emVDb250ZXh0KG5ld0NvbnRleHRTaXplKTsKLQotI2lmICFQTEFURk9STShCTEFDS0JFUlJZKSAv
LyBCbGFja0JlcnJ5IGRlZmluZXMgaXRzIG93biBUZXh0dXJlIGNsYXNzLgotICAgIC8vIERvIG5v
dCBkcmF3IHRoZSBmaWx0ZXIgaWYgdGhlIGlucHV0IGltYWdlIGNhbm5vdCBmaXQgaW5zaWRlIGEg
c2luZ2xlIEdQVSB0ZXh0dXJlLgotICAgIGlmIChtX2lucHV0VGV4dHVyZS0+dGlsZXMoKS5udW1U
aWxlc1goKSAhPSAxIHx8IG1faW5wdXRUZXh0dXJlLT50aWxlcygpLm51bVRpbGVzWSgpICE9IDEp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAgIAotICAgIC8vIFRoZSBzaGFkZXIg
aGFkIGNvbXBpbGVyIGVycm9ycy4gV2UgY2Fubm90IGRyYXcgYW55dGhpbmcuCi0gICAgaWYgKCFt
X2NvbXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorICAgIGlmICghcmVzaXplQ29udGV4
dElmTmVlZGVkKG5ld0NvbnRleHRTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2ZyYW1lQnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG5ld0NvbnRl
eHRTaXplLndpZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpKTsKLSAgICAKLSAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhcihHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9CVUZGRVJfQklUKTsKLSAgICAKLSAgICBiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoc3JjUGl4ZWxB
cnJheS5nZXQoKSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3ND
b250ZXh0M0Q6OlRSSUFOR0xFUywgbV9tZXNoLT5pbmRpY2VzQ291bnQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKLSAgICAKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisgICAgYm9vbCBuZWVkc0lucHV0VGV4dHVyZSA9IHByb2dyYW1OZWVkc0lucHV0VGV4
dHVyZSgpOworICAgIGlmIChuZWVkc0lucHV0VGV4dHVyZSkgeworICAgICAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBpbi0+YXNVbm11bHRpcGxpZWRJbWFnZShl
ZmZlY3REcmF3aW5nUmVjdCk7CisgICAgICAgIHVwbG9hZElucHV0VGV4dHVyZShzcmNQaXhlbEFy
cmF5LmdldCgpKTsKKyAgICB9CisgICAgZHJhd0ZpbHRlck1lc2gobmVlZHNJbnB1dFRleHR1cmUg
PyBtX2lucHV0VGV4dHVyZSA6IDApOwogCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4o
bmV3Q29udGV4dFNpemUud2lkdGgoKSAqIG5ld0NvbnRleHRTaXplLmhlaWdodCgpICogNCkgPT0g
ZHN0UGl4ZWxBcnJheS0+bGVuZ3RoKCkpOwogICAgIG1fY29udGV4dC0+cmVhZFBpeGVscygwLCAw
LCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBkc3RQ
aXhlbEFycmF5LT5kYXRhKCkpOwpAQCAtMjEwLDQxICsyMzUsNzMgQEAgYm9vbCBGRUN1c3RvbUZp
bHRlcjo6aW5pdGlhbGl6ZUNvbnRleHQoKQogICAgIG1fbWVzaCA9IEN1c3RvbUZpbHRlck1lc2g6
OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIG1fbWVzaENvbHVtbnMsIG1fbWVzaFJvd3MsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QoMCwgMCwgMSwgMSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVzaFR5cGUpOworCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQo
Y29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCitib29sIEZFQ3VzdG9tRmlsdGVyOjplbnN1
cmVJbnB1dFRleHR1cmUoKQoreworICAgIGlmICghbV9pbnB1dFRleHR1cmUpCisgICAgICAgIG1f
aW5wdXRUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgcmV0dXJuIG1f
aW5wdXRUZXh0dXJlOworfQorCit2b2lkIEZFQ3VzdG9tRmlsdGVyOjp1cGxvYWRJbnB1dFRleHR1
cmUoVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXkpCit7CisgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9pbnB1dFRleHR1cmUp
OworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fY29udGV4dFNpemUud2lkdGgoKSwgbV9j
b250ZXh0U2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBzcmNQaXhlbEFycmF5LT5kYXRhKCkpOworfQorCiti
b29sIEZFQ3VzdG9tRmlsdGVyOjplbnN1cmVGcmFtZUJ1ZmZlcigpCiB7Ci0jaWYgIVBMQVRGT1JN
KEJMQUNLQkVSUlkpIC8vIEJsYWNrQmVycnkgZGVmaW5lcyBpdHMgb3duIFRleHR1cmUgY2xhc3MK
LSAgICBtX2lucHV0VGV4dHVyZSA9IFRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIFRl
eHR1cmU6OlJHQkE4LCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWln
aHQoKSk7Ci0jZWxzZQotICAgIG1faW5wdXRUZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRlKHRydWUp
OwotI2VuZGlmCi0gICAgCiAgICAgaWYgKCFtX2ZyYW1lQnVmZmVyKQogICAgICAgICBtX2ZyYW1l
QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgIGlmICghbV9kZXB0
aEJ1ZmZlcikKICAgICAgICAgbV9kZXB0aEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVy
YnVmZmVyKCk7Ci0gICAgaWYgKCFtX2Rlc3RUZXh0dXJlKSB7CisgICAgaWYgKCFtX2Rlc3RUZXh0
dXJlKQogICAgICAgICBtX2Rlc3RUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7
Ci0gICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fZGVzdFRleHR1cmUpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
OwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIH0KLSAgICAK
LSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX2Rlc3RUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsK
KyAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlciAmJiBtX2RlcHRoQnVmZmVyICYmIG1fZGVzdFRleHR1
cmU7Cit9CiAKK2Jvb2wgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHRJZk5lZWRlZChjb25z
dCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKK3sKKyAgICBpZiAobmV3Q29udGV4dFNpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY29udGV4dFNpemUgPT0g
bmV3Q29udGV4dFNpemUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaW50IG1heFRleHR1
cmVTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVEVYVFVSRV9TSVpFLCAmbWF4VGV4dHVyZVNpemUpOworICAgIGlmIChuZXdDb250ZXh0
U2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1cmVTaXplIHx8IG5ld0NvbnRleHRTaXplLndpZHRoKCkg
PiBtYXhUZXh0dXJlU2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHJl
c2l6ZUNvbnRleHQobmV3Q29udGV4dFNpemUpOworfQorCitib29sIEZFQ3VzdG9tRmlsdGVyOjpy
ZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQorewogICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
cmFtZUJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV9kZXN0VGV4dHVyZSk7CisgICAgLy8gV2UgYXJlIGdvaW5nIHRvIGNs
ZWFyIHRoZSBvdXRwdXQgYnVmZmVyIGFueXdheSwgc28gd2UgY2FuIHNhZmVseSBpbml0aWFsaXpl
IHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlIHdpdGggZ2FyYmFnZSBkYXRhLgorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIC8vIEZJWE1FOiBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERp
cmVjdCBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ2hyb21pdW0uCisgICAgbV9jb250ZXh0LT50ZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgbmV3Q29udGV4dFNpemUud2lkdGgoKSwgbmV3Q29udGV4dFNpemUuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgMCk7CisjZWxzZQorICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG5ld0Nv
bnRleHRTaXplLndpZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworI2Vu
ZGlmCiAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fZGVzdFRleHR1cmUsIDApOwotICAgIAorIAog
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVDE2LCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5o
ZWlnaHQoKSk7CiAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hN
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKwor
ICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExF
VEUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKICAgICAKICAgICBtX2Nv
bnRleHRTaXplID0gbmV3Q29udGV4dFNpemU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
RkVDdXN0b21GaWx0ZXI6OmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9u
LCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0zMjIsMjQgKzM3OSwyNCBAQCB2
b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKQogICAgIH0KIH0KIAot
dm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKFVpbnQ4Q2xhbXBlZEFy
cmF5KiBzcmNQaXhlbEFycmF5KQordm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRC
dWZmZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQogewogICAgIEFTU0VSVChtX2Nv
bXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKTsKIAogICAgIG1fY29udGV4dC0+dXNlUHJv
Z3JhbShtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKICAgICAKLSAgICBpZiAobV9jb21w
aWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKSB7CisgICAgaWYgKHByb2dyYW1O
ZWVkc0lucHV0VGV4dHVyZSgpKSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBiZSBiaW5kaW5nIHRo
ZSBET00gZWxlbWVudCB0ZXh0dXJlIHNhbXBsZXIgb25seSBpZiB0aGUgYXV0aG9yIGlzIHVzaW5n
IHRoZSBDU1MgbWl4IGZ1bmN0aW9uLgogICAgICAgICBBU1NFUlQobV92YWxpZGF0ZWRQcm9ncmFt
LT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVN
RU5UX1RFWFRVUkUpOworICAgICAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJM
b2NhdGlvbigpICE9IC0xKTsKIAogICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKICAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWko
bV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKLSNpZiAhUExBVEZPUk0o
QkxBQ0tCRVJSWSkKLSAgICAgICAgbV9pbnB1dFRleHR1cmUtPmxvYWQoc3JjUGl4ZWxBcnJheS0+
ZGF0YSgpKTsKLSAgICAgICAgbV9pbnB1dFRleHR1cmUtPmJpbmRUaWxlKDApOwotI2Vsc2UKLSAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbmRpZgorICAgICAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpbnB1dFRleHR1cmUpOworICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOwogICAgIH0KICAgICAKICAgICBpZiAobV9jb21waWxlZFByb2dyYW0t
PnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0xKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKaW5k
ZXggOTZiYjkxOC4uZTc1MzgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaApAQCAtNzcsMjYgKzc3LDQ1
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhcHBseVNoYWRlcigpOwogICAgIHZvaWQgY2xlYXJTaGFk
ZXJSZXN1bHQoKTsKICAgICBib29sIGluaXRpYWxpemVDb250ZXh0KCk7CisgICAgCisgICAgZW51
bSBDdXN0b21GaWx0ZXJEcmF3VHlwZSB7CisgICAgICAgIE5FRURTX0lOUFVUX1RFWFRVUkUsCisg
ICAgICAgIE5PX0lOUFVUX1RFWFRVUkUKKyAgICB9OworICAgIGJvb2wgcHJlcGFyZUZvckRyYXdp
bmcoQ3VzdG9tRmlsdGVyRHJhd1R5cGUgPSBORUVEU19JTlBVVF9URVhUVVJFKTsKKworICAgIHZv
aWQgZHJhd0ZpbHRlck1lc2goUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpOworICAgIGJv
b2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3Q7CisgICAgYm9vbCBlbnN1cmVJbnB1
dFRleHR1cmUoKTsKKyAgICB2b2lkIHVwbG9hZElucHV0VGV4dHVyZShVaW50OENsYW1wZWRBcnJh
eSogc3JjUGl4ZWxBcnJheSk7CisgICAgYm9vbCByZXNpemVDb250ZXh0SWZOZWVkZWQoY29uc3Qg
SW50U2l6ZSYpOworICAgIGJvb2wgcmVzaXplQ29udGV4dChjb25zdCBJbnRTaXplJik7CisKKyAg
ICBib29sIGVuc3VyZUZyYW1lQnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJCdWZmZXJz
KCk7Ci0gICAgdm9pZCByZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXpl
KTsKKwogICAgIHZvaWQgYmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24s
IHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgdm9pZCB1bmJpbmRWZXJ0ZXhB
dHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uKTsKICAgICB2b2lkIGJpbmRQcm9ncmFtTnVt
YmVyUGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJOdW1iZXJQYXJh
bWV0ZXIqKTsKICAgICB2b2lkIGJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVyKGludCB1bmlm
b3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciopOwogICAgIHZvaWQg
YmluZFByb2dyYW1QYXJhbWV0ZXJzKCk7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMo
VWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXkpOworICAgIHZvaWQgYmluZFByb2dyYW1B
bmRCdWZmZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKTsKICAgICB2b2lkIHVuYmlu
ZFZlcnRleEF0dHJpYnV0ZXMoKTsKKworI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUFwcGx5U2tpYSgpOworI2VuZGlmCiAgICAgCiAgICAgLy8gTm8gbmVlZCB0byBrZWVw
IGEgcmVmZXJlbmNlIGhlcmUuIEl0IGlzIG93bmVkIGJ5IHRoZSBSZW5kZXJWaWV3LgogICAgIEN1
c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIG1fZ2xvYmFsQ29udGV4dDsKICAgICAKICAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8VGV4dHVyZT4gbV9p
bnB1dFRleHR1cmU7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IG1f
dmFsaWRhdGVkUHJvZ3JhbTsKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFt
PiBtX2NvbXBpbGVkUHJvZ3JhbTsKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTWVzaD4gbV9tZXNo
OwogICAgIEludFNpemUgbV9jb250ZXh0U2l6ZTsKIAorICAgIFBsYXRmb3JtM0RPYmplY3QgbV9p
bnB1dFRleHR1cmU7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZyYW1lQnVmZmVyOwogICAgIFBs
YXRmb3JtM0RPYmplY3QgbV9kZXB0aEJ1ZmZlcjsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVz
dFRleHR1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NraWEvRkVDdXN0b21GaWx0ZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUN1c3RvbUZpbHRlclNraWEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhN2FiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDdXN0b21GaWx0
ZXJTa2lhLmNwcApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBV
U0UoM0RfR1JBUEhJQ1MpICYmIFVTRShTS0lBKQorI2luY2x1ZGUgIkZFQ3VzdG9tRmlsdGVyLmgi
CisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIk5h
dGl2ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiU2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUg
IlNrR3JQaXhlbFJlZi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVDdXN0b21G
aWx0ZXI6OnBsYXRmb3JtQXBwbHlTa2lhKCkKK3sKKyAgICAvLyBGRUN1c3RvbUZpbHRlciB0YWtl
cyBhbiBpbnB1dCB0ZXh0dXJlIGFuZCBvdXRwdXRzIHRoZSByZXN1bHQgdG8gYW5vdGhlciBkZXN0
aW5hdGlvbiB0ZXh0dXJlLgorICAgIC8vIFNraWEgY2FuIGFsc28gdXNlIHRoZSBHUFUgdG8gYWNj
ZWxlcmF0ZSB0aGUgR3JhcGhpY3NDb250ZXh0LCBzbyB0aGlzIG1ldGhvZCBpcyB0cnlpbmcgdG8K
KyAgICAvLyB0YWtlIGFkdmFudGFnZSBvZiB0aGF0IHVzaW5nIHRoZSBmb2xsb3dpbmcgbWVjaGFu
aXNtOgorICAgIC8vIDEuIEFsbG9jYXRlIGEgcmVuZGVyIGJ1ZmZlciB0ZXh0dXJlIHVzaW5nIFNr
aWEuIFRoaXMgd2lsbCBzZXJ2ZSBhcyB0aGUgaW5wdXQgdGV4dHVyZSBmb3IgRkVDdXN0b21GaWx0
ZXIuCisgICAgLy8gMi4gUmVuZGVyIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIGZpbHRlciBp
bnRvIHRoZSB0ZXh0dXJlIGNyZWF0ZWQgYXQgIzEuIFRoaXMgc3RlcCBuZWVkcyB0byBmbGlwIHRo
ZSBpbWFnZSB2ZXJ0aWNhbGx5CisgICAgLy8gICAgYW5kIGNyb3AgaXQgdG8gdGhlIHN1YnJlZ2lv
biB0aGF0IHRoZSBmaWx0ZXJzIGFwcGxpZXMgb24uCisgICAgLy8gMy4gUnVuIEZFQ3VzdG9tRmls
dGVyOjpkcmF3RmlsdGVyTWVzaCB1c2luZyB0aGUgdGV4dHVyZSBjcmVhdGVkIGF0ICMxLgorICAg
IC8vIDQuIFRoZSByZXN1bHQgc2hvdWxkIGJlIGluIG1fZGVzdFRleHR1cmUsIHNvIHdlIHdyYXAg
dGhhdCBpbnRvIGEgU2tCaXRtYXAuCisgICAgLy8gNS4gVGFrZSB0aGUgcmVzdWx0aW5nIFNrQml0
bWFwIGFuZCByZW5kZXIgaXQgaW50byB0aGUgcmVzdWx0J3MgR3JhcGhpY3NDb250ZXh0LiBBbHNv
IGF0IHRoaXMgc3RlcCB3ZSBmbGlwIHRoZSBpbWFnZSBhZ2Fpbi4KKworICAgIC8vIEZJWE1FOiBP
cHRpbWl6ZSB0aGlzIHRvIHJldXNlIHRoZSBvcmlnaW5hbCB0ZXh0dXJlICh3aGVuIHRoZXJlIGlz
IG9uZSkgYW5kIG91dHB1dCBkaXJlY3RseSB0byB0aGUgaW1hZ2UgYnVmZmVyJ3MgcmVuZGVyIGJ1
ZmZlci4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2
OTIKKworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gV2Ugd2lsbCB1c2UgU2tpYSB0byBjcmVhdGUgYSBzY3JhdGNoIGJ1ZmZlciBmb3IgdXMs
IHNvIHRoaXMgbWV0aG9kIHdpbGwgbm90IHVzZSB0aGUgbV9pbnB1dFRleHR1cmUuCisgICAgaWYg
KCFwcmVwYXJlRm9yRHJhd2luZyhOT19JTlBVVF9URVhUVVJFKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIHNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSBpbi0+YXNJbWFnZUJ1ZmZlcigpLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwor
CisgICAgSW50UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50U2l6ZSBuZXdDb250ZXh0U2l6ZShkcmF3
aW5nUmVnaW9uLnNpemUoKSk7CisgICAgaWYgKCFyZXNpemVDb250ZXh0SWZOZWVkZWQobmV3Q29u
dGV4dFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IHNoYXJlZENvbnRleHQgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7
CisgICAgaWYgKCFzaGFyZWRDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBzaGFyZWRDb250ZXh0LT5nckNvbnRleHQoKTsKKyAg
ICBpZiAoIWdyQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JBdXRvU2Ny
YXRjaFRleHR1cmUgaW5wdXRUZXh0dXJlOworCisgICAgLy8gV2Ugb25seSBhbGxvY2F0ZSB0aGUg
aW5wdXQgdGV4dHVyZSBpZiB3ZSBhY3R1YWxseSBuZWVkIG9uZS4KKyAgICBpZiAocHJvZ3JhbU5l
ZWRzSW5wdXRUZXh0dXJlKCkpIHsKKyAgICAgICAgR3JUZXh0dXJlRGVzYyBkZXNjOworICAgICAg
ICBkZXNjLmZGbGFncyA9IGtSZW5kZXJUYXJnZXRfR3JUZXh0dXJlRmxhZ0JpdCB8IGtOb1N0ZW5j
aWxfR3JUZXh0dXJlRmxhZ0JpdDsKKyAgICAgICAgZGVzYy5mU2FtcGxlQ250ID0gMDsKKyAgICAg
ICAgZGVzYy5mV2lkdGggPSBuZXdDb250ZXh0U2l6ZS53aWR0aCgpOworICAgICAgICBkZXNjLmZI
ZWlnaHQgPSBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgZGVzYy5mQ29uZmlnID0g
a1NraWE4ODg4X0dyUGl4ZWxDb25maWc7CisgICAgICAgIGlmICghaW5wdXRUZXh0dXJlLnNldChn
ckNvbnRleHQsIGRlc2MsIEdyQ29udGV4dDo6a0V4YWN0X1NjcmF0Y2hUZXhNYXRjaCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU2tBdXRvVFVucmVmPFNrR3B1RGV2aWNl
PiBkZXZpY2U7CisgICAgICAgIFNrQXV0b1RVbnJlZjxTa0NhbnZhcz4gY2FudmFzOworICAgICAg
ICBkZXZpY2UucmVzZXQobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwgaW5wdXRUZXh0dXJlLnRl
eHR1cmUoKSkpOworICAgICAgICBjYW52YXMucmVzZXQobmV3IFNrQ2FudmFzKGRldmljZS5nZXQo
KSkpOworCisgICAgICAgIFBsYXRmb3JtQ29udGV4dFNraWEgaW5wdXRQbGF0Zm9ybUNvbnRleHRT
a2lhKGNhbnZhcy5nZXQoKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZpbnB1
dFBsYXRmb3JtQ29udGV4dFNraWEpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBuZXdD
b250ZXh0U2l6ZS5oZWlnaHQoKSAvIDIuMCk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRT
aXplKDEsIC0xKSk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1uZXdDb250ZXh0U2l6
ZS5oZWlnaHQoKSAvIDIuMCk7CisgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCksIENvbXBvc2l0
ZUNvcHkpOworICAgICAgICBjYW52YXMtPmZsdXNoKCk7CisgICAgICAgIHNoYXJlZENvbnRleHQt
PmZsdXNoKCk7CisgICAgfQorCisgICAgLy8gTm93IHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJl
IGluIG91ciBtX2lucHV0VGV4dHVyZSBhbmQgd2UgY2FuIGRyYXcgdGhlIGZpbHRlciBtZXNoIHdp
dGggaXQuCisgICAgZHJhd0ZpbHRlck1lc2goaW5wdXRUZXh0dXJlLnRleHR1cmUoKSA/IGlucHV0
VGV4dHVyZS50ZXh0dXJlKCktPmdldFRleHR1cmVIYW5kbGUoKSA6IDApOworICAgIG1fY29udGV4
dC0+Zmx1c2goKTsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIGlucHV0IHRleHR1cmUuIFdlIGRv
bid0IG5lZWQgaXQgYW55bW9yZS4KKyAgICBpbnB1dFRleHR1cmUucmVzZXQoKTsKKworICAgIC8v
IFRoZSByZXN1bHQgaXMgaW4gbV9kZXN0VGV4dHVyZSBhbmQgbmVlZHMgdG8gYmUgY29waWVkIGJh
Y2sgdG8gdGhlIFNraWEncyByZXN1bHRJbWFnZS4KKyAgICBHclBsYXRmb3JtVGV4dHVyZURlc2Mg
cGxhdGZvcm1UZXh0dXJlRGVzY3JpcHRpb247CisgICAgcGxhdGZvcm1UZXh0dXJlRGVzY3JpcHRp
b24uZldpZHRoID0gbmV3Q29udGV4dFNpemUud2lkdGgoKTsKKyAgICBwbGF0Zm9ybVRleHR1cmVE
ZXNjcmlwdGlvbi5mSGVpZ2h0ID0gbmV3Q29udGV4dFNpemUuaGVpZ2h0KCk7CisgICAgcGxhdGZv
cm1UZXh0dXJlRGVzY3JpcHRpb24uZkNvbmZpZyA9IGtTa2lhODg4OF9HclBpeGVsQ29uZmlnOwor
ICAgIHBsYXRmb3JtVGV4dHVyZURlc2NyaXB0aW9uLmZUZXh0dXJlSGFuZGxlID0gbV9kZXN0VGV4
dHVyZTsKKyAgICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiBvdXRwdXRUZXh0dXJlU2tpYShnckNv
bnRleHQtPmNyZWF0ZVBsYXRmb3JtVGV4dHVyZShwbGF0Zm9ybVRleHR1cmVEZXNjcmlwdGlvbikp
OworCisgICAgU2tCaXRtYXAgb3V0cHV0OworICAgIG91dHB1dC5zZXRDb25maWcoU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnLCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6
ZS5oZWlnaHQoKSk7CisgICAgb3V0cHV0LnNldFBpeGVsUmVmKG5ldyBTa0dyUGl4ZWxSZWYob3V0
cHV0VGV4dHVyZVNraWEuZ2V0KCkpKS0+dW5yZWYoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCog
ZHN0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgUmVmUHRyPEltYWdlPiBv
dXRwdXRCaXRtYXAgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKG91dHB1dCwg
dHJ1ZSk7CisgICAgZHN0Q29udGV4dC0+dHJhbnNsYXRlKDAsIG5ld0NvbnRleHRTaXplLmhlaWdo
dCgpIC8gMi4wKTsKKyAgICBkc3RDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAg
ICBkc3RDb250ZXh0LT50cmFuc2xhdGUoMCwgLW5ld0NvbnRleHRTaXplLmhlaWdodCgpIC8gMi4w
KTsKKyAgICBkc3RDb250ZXh0LT5kcmF3SW1hZ2Uob3V0cHV0Qml0bWFwLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCksIENvbXBvc2l0ZUNvcHkpOwor
ICAgIGRzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Zmx1c2goKTsKKyAg
ICBzaGFyZWRDb250ZXh0LT5mbHVzaCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNF
KDNEX0dSQVBISUNTKSAmJiBVU0UoU0tJQSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164218</attachid>
            <date>2012-09-14 13:36:44 -0700</date>
            <delta_ts>2013-04-08 18:02:42 -0700</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug96579_2.patch</filename>
            <type>text/plain</type>
            <size>9822</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZTg4ZjhjLi41MzZhNDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMDktMTQgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFtDU1MgU2hhZGVyc11bU2tpYV0gQWRkIEZFQ3VzdG9tRmlsdGVyU2tpYS5jcHAg
dG8gaW1wbGVtZW50IGEgZmFzdGVyIHdheSB0byBydW4gdGhlIGN1c3RvbSBmaWx0ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjU3OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGlzIGEgY29t
bWVudCBpbiBGRUN1c3RvbUZpbHRlclNraWEuY3BwIGV4cGxhaW5pbmcgaG93IHRoaXMgd29ya3Mu
IEZFQ3VzdG9tRmlsdGVyIHRha2VzCisgICAgICAgIGFuIGlucHV0IHRleHR1cmUgYW5kIG91dHB1
dHMgdG8gYSBkZXN0aW5hdGlvbiB0ZXh0dXJlLiBJJ3ZlIHVzZWQgU2tpYSB0byBkcmF3IHRoZSBp
bnB1dCBJbWFnZUJ1ZmZlciB0byBhCisgICAgICAgIHRlbXBvcmFyeSBzY3JhdGNoIHRleHR1cmUg
dGhhdCBpcyB0aGVuIGZlZCBpbnRvIHRoZSBGRUN1c3RvbUZpbHRlci4gVGhlIHJlc3VsdGluZyB0
ZXh0dXJlIGlzIHRoZW4gd3JhcHBlZCBpbnRvIGEKKyAgICAgICAgU2tCaXRtYXAgYW5kIGRyYXdu
IGJhY2sgdG8gdGhlIHJlc3VsdGluZyBJbWFnZUJ1ZmZlci4gSWYgYWxsIHRoZSBHcmFwaGljc0Nv
bnRleHRzIGludm9sdmVkIGluIHRoZSBwcm9jZXNzCisgICAgICAgIGFyZSBhY2NlbGVyYXRlZCwg
dGhlbiB0aGVyZSBzaG91bGQgYmUgbm8gbW9yZSB1cGxvYWRzL2Rvd25sb2FkcyB0byBhbmQgZnJv
bSB0aGUgR1BVLgorCisgICAgICAgIEkndmUgYWRkZWQgYW5vdGhlciBidWcgdG8gY2hlY2sgZm9y
IGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBpbiByZXVzaW5nIFNraWEncyB0ZXh0dXJlcyBkaXJl
Y3RseS4gCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NjY5MgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBqdXN0IG9wdGltaXppbmcgdGhl
IHBlcmZvcm1hbmNlIGFuZCBleGlzdGluZyB0ZXN0cyBzaG91bGQgY292ZXIgaXQuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUN1c3RvbUZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tp
YS9GRUN1c3RvbUZpbHRlclNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnBsYXRmb3JtQXBwbHlTa2lhKToKKwogMjAx
Mi0wOS0xNCAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5
XSBVc2UgU3RyaW5nQnVpbGRlciBtb3JlIGluIEJsYWNrQmVycnkgUlNTIGNsYXNzZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA0MDg1MzExLi45OGY4NzhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MDAz
LDYgKzUwMDMsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tp
YS9GRUJsZW5kU2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc2tpYS9GRUNvbG9yTWF0cml4U2tpYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUN1c3RvbUZpbHRlclNraWEu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVHYXVz
c2lhbkJsdXJTa2lhLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9za2lhL0ZFTW9ycGhvbG9neVNraWEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NraWEvRkVMaWdodGluZ1NraWEuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaApp
bmRleCBlNGEyZTQxLi40ZDc5NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCkBAIC0xMDgsNiArMTA4
LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsKICAgICB2
b2lkIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSk7
CiAgICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisKKyNpZiBVU0UoU0tJQSkKKyAg
ICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseVNraWEoKTsKKyNlbmRpZgogICAgIAogICAgIC8v
IE5vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSBoZXJlLiBJdCBpcyBvd25lZCBieSB0aGUgUmVu
ZGVyVmlldy4KICAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBtX2dsb2JhbENvbnRleHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nr
aWEvRkVDdXN0b21GaWx0ZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc2tpYS9GRUN1c3RvbUZpbHRlclNraWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNhN2FiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDdXN0b21GaWx0ZXJTa2lhLmNw
cApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JB
UEhJQ1MpICYmIFVTRShTS0lBKQorI2luY2x1ZGUgIkZFQ3VzdG9tRmlsdGVyLmgiCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
U2tpYS5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
U2tDYW52YXMuaCIKKyNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUgIlNrR3JQaXhl
bFJlZi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRkVDdXN0b21GaWx0ZXI6OnBs
YXRmb3JtQXBwbHlTa2lhKCkKK3sKKyAgICAvLyBGRUN1c3RvbUZpbHRlciB0YWtlcyBhbiBpbnB1
dCB0ZXh0dXJlIGFuZCBvdXRwdXRzIHRoZSByZXN1bHQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbiB0
ZXh0dXJlLgorICAgIC8vIFNraWEgY2FuIGFsc28gdXNlIHRoZSBHUFUgdG8gYWNjZWxlcmF0ZSB0
aGUgR3JhcGhpY3NDb250ZXh0LCBzbyB0aGlzIG1ldGhvZCBpcyB0cnlpbmcgdG8KKyAgICAvLyB0
YWtlIGFkdmFudGFnZSBvZiB0aGF0IHVzaW5nIHRoZSBmb2xsb3dpbmcgbWVjaGFuaXNtOgorICAg
IC8vIDEuIEFsbG9jYXRlIGEgcmVuZGVyIGJ1ZmZlciB0ZXh0dXJlIHVzaW5nIFNraWEuIFRoaXMg
d2lsbCBzZXJ2ZSBhcyB0aGUgaW5wdXQgdGV4dHVyZSBmb3IgRkVDdXN0b21GaWx0ZXIuCisgICAg
Ly8gMi4gUmVuZGVyIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIGZpbHRlciBpbnRvIHRoZSB0
ZXh0dXJlIGNyZWF0ZWQgYXQgIzEuIFRoaXMgc3RlcCBuZWVkcyB0byBmbGlwIHRoZSBpbWFnZSB2
ZXJ0aWNhbGx5CisgICAgLy8gICAgYW5kIGNyb3AgaXQgdG8gdGhlIHN1YnJlZ2lvbiB0aGF0IHRo
ZSBmaWx0ZXJzIGFwcGxpZXMgb24uCisgICAgLy8gMy4gUnVuIEZFQ3VzdG9tRmlsdGVyOjpkcmF3
RmlsdGVyTWVzaCB1c2luZyB0aGUgdGV4dHVyZSBjcmVhdGVkIGF0ICMxLgorICAgIC8vIDQuIFRo
ZSByZXN1bHQgc2hvdWxkIGJlIGluIG1fZGVzdFRleHR1cmUsIHNvIHdlIHdyYXAgdGhhdCBpbnRv
IGEgU2tCaXRtYXAuCisgICAgLy8gNS4gVGFrZSB0aGUgcmVzdWx0aW5nIFNrQml0bWFwIGFuZCBy
ZW5kZXIgaXQgaW50byB0aGUgcmVzdWx0J3MgR3JhcGhpY3NDb250ZXh0LiBBbHNvIGF0IHRoaXMg
c3RlcCB3ZSBmbGlwIHRoZSBpbWFnZSBhZ2Fpbi4KKworICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSB0
aGlzIHRvIHJldXNlIHRoZSBvcmlnaW5hbCB0ZXh0dXJlICh3aGVuIHRoZXJlIGlzIG9uZSkgYW5k
IG91dHB1dCBkaXJlY3RseSB0byB0aGUgaW1hZ2UgYnVmZmVyJ3MgcmVuZGVyIGJ1ZmZlci4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2OTIKKworICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ug
d2lsbCB1c2UgU2tpYSB0byBjcmVhdGUgYSBzY3JhdGNoIGJ1ZmZlciBmb3IgdXMsIHNvIHRoaXMg
bWV0aG9kIHdpbGwgbm90IHVzZSB0aGUgbV9pbnB1dFRleHR1cmUuCisgICAgaWYgKCFwcmVwYXJl
Rm9yRHJhd2luZyhOT19JTlBVVF9URVhUVVJFKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIHNldElzQWxwaGFJbWFn
ZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBpbi0+YXNJ
bWFnZUJ1ZmZlcigpLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworCisgICAgSW50
UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CisgICAgSW50U2l6ZSBuZXdDb250ZXh0U2l6ZShkcmF3aW5nUmVnaW9u
LnNpemUoKSk7CisgICAgaWYgKCFyZXNpemVDb250ZXh0SWZOZWVkZWQobmV3Q29udGV4dFNpemUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IHNoYXJlZENvbnRleHQgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7CisgICAgaWYg
KCFzaGFyZWRDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgR3JDb250
ZXh0KiBnckNvbnRleHQgPSBzaGFyZWRDb250ZXh0LT5nckNvbnRleHQoKTsKKyAgICBpZiAoIWdy
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JBdXRvU2NyYXRjaFRleHR1
cmUgaW5wdXRUZXh0dXJlOworCisgICAgLy8gV2Ugb25seSBhbGxvY2F0ZSB0aGUgaW5wdXQgdGV4
dHVyZSBpZiB3ZSBhY3R1YWxseSBuZWVkIG9uZS4KKyAgICBpZiAocHJvZ3JhbU5lZWRzSW5wdXRU
ZXh0dXJlKCkpIHsKKyAgICAgICAgR3JUZXh0dXJlRGVzYyBkZXNjOworICAgICAgICBkZXNjLmZG
bGFncyA9IGtSZW5kZXJUYXJnZXRfR3JUZXh0dXJlRmxhZ0JpdCB8IGtOb1N0ZW5jaWxfR3JUZXh0
dXJlRmxhZ0JpdDsKKyAgICAgICAgZGVzYy5mU2FtcGxlQ250ID0gMDsKKyAgICAgICAgZGVzYy5m
V2lkdGggPSBuZXdDb250ZXh0U2l6ZS53aWR0aCgpOworICAgICAgICBkZXNjLmZIZWlnaHQgPSBu
ZXdDb250ZXh0U2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgZGVzYy5mQ29uZmlnID0ga1NraWE4ODg4
X0dyUGl4ZWxDb25maWc7CisgICAgICAgIGlmICghaW5wdXRUZXh0dXJlLnNldChnckNvbnRleHQs
IGRlc2MsIEdyQ29udGV4dDo6a0V4YWN0X1NjcmF0Y2hUZXhNYXRjaCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU2tBdXRvVFVucmVmPFNrR3B1RGV2aWNlPiBkZXZpY2U7
CisgICAgICAgIFNrQXV0b1RVbnJlZjxTa0NhbnZhcz4gY2FudmFzOworICAgICAgICBkZXZpY2Uu
cmVzZXQobmV3IFNrR3B1RGV2aWNlKGdyQ29udGV4dCwgaW5wdXRUZXh0dXJlLnRleHR1cmUoKSkp
OworICAgICAgICBjYW52YXMucmVzZXQobmV3IFNrQ2FudmFzKGRldmljZS5nZXQoKSkpOworCisg
ICAgICAgIFBsYXRmb3JtQ29udGV4dFNraWEgaW5wdXRQbGF0Zm9ybUNvbnRleHRTa2lhKGNhbnZh
cy5nZXQoKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZpbnB1dFBsYXRmb3Jt
Q29udGV4dFNraWEpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBuZXdDb250ZXh0U2l6
ZS5oZWlnaHQoKSAvIDIuMCk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0x
KSk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1uZXdDb250ZXh0U2l6ZS5oZWlnaHQo
KSAvIDIuMCk7CisgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCksIENvbXBvc2l0ZUNvcHkpOwor
ICAgICAgICBjYW52YXMtPmZsdXNoKCk7CisgICAgICAgIHNoYXJlZENvbnRleHQtPmZsdXNoKCk7
CisgICAgfQorCisgICAgLy8gTm93IHRoZSBzb3VyY2UgaW1hZ2Ugc2hvdWxkIGJlIGluIG91ciBt
X2lucHV0VGV4dHVyZSBhbmQgd2UgY2FuIGRyYXcgdGhlIGZpbHRlciBtZXNoIHdpdGggaXQuCisg
ICAgZHJhd0ZpbHRlck1lc2goaW5wdXRUZXh0dXJlLnRleHR1cmUoKSA/IGlucHV0VGV4dHVyZS50
ZXh0dXJlKCktPmdldFRleHR1cmVIYW5kbGUoKSA6IDApOworICAgIG1fY29udGV4dC0+Zmx1c2go
KTsKKworICAgIC8vIEdldCByaWQgb2YgdGhlIGlucHV0IHRleHR1cmUuIFdlIGRvbid0IG5lZWQg
aXQgYW55bW9yZS4KKyAgICBpbnB1dFRleHR1cmUucmVzZXQoKTsKKworICAgIC8vIFRoZSByZXN1
bHQgaXMgaW4gbV9kZXN0VGV4dHVyZSBhbmQgbmVlZHMgdG8gYmUgY29waWVkIGJhY2sgdG8gdGhl
IFNraWEncyByZXN1bHRJbWFnZS4KKyAgICBHclBsYXRmb3JtVGV4dHVyZURlc2MgcGxhdGZvcm1U
ZXh0dXJlRGVzY3JpcHRpb247CisgICAgcGxhdGZvcm1UZXh0dXJlRGVzY3JpcHRpb24uZldpZHRo
ID0gbmV3Q29udGV4dFNpemUud2lkdGgoKTsKKyAgICBwbGF0Zm9ybVRleHR1cmVEZXNjcmlwdGlv
bi5mSGVpZ2h0ID0gbmV3Q29udGV4dFNpemUuaGVpZ2h0KCk7CisgICAgcGxhdGZvcm1UZXh0dXJl
RGVzY3JpcHRpb24uZkNvbmZpZyA9IGtTa2lhODg4OF9HclBpeGVsQ29uZmlnOworICAgIHBsYXRm
b3JtVGV4dHVyZURlc2NyaXB0aW9uLmZUZXh0dXJlSGFuZGxlID0gbV9kZXN0VGV4dHVyZTsKKyAg
ICBTa0F1dG9UVW5yZWY8R3JUZXh0dXJlPiBvdXRwdXRUZXh0dXJlU2tpYShnckNvbnRleHQtPmNy
ZWF0ZVBsYXRmb3JtVGV4dHVyZShwbGF0Zm9ybVRleHR1cmVEZXNjcmlwdGlvbikpOworCisgICAg
U2tCaXRtYXAgb3V0cHV0OworICAgIG91dHB1dC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4
ODhfQ29uZmlnLCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQo
KSk7CisgICAgb3V0cHV0LnNldFBpeGVsUmVmKG5ldyBTa0dyUGl4ZWxSZWYob3V0cHV0VGV4dHVy
ZVNraWEuZ2V0KCkpKS0+dW5yZWYoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogZHN0Q29udGV4
dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisgICAgUmVmUHRyPEltYWdlPiBvdXRwdXRCaXRt
YXAgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKG91dHB1dCwgdHJ1ZSk7Cisg
ICAgZHN0Q29udGV4dC0+dHJhbnNsYXRlKDAsIG5ld0NvbnRleHRTaXplLmhlaWdodCgpIC8gMi4w
KTsKKyAgICBkc3RDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBkc3RDb250
ZXh0LT50cmFuc2xhdGUoMCwgLW5ld0NvbnRleHRTaXplLmhlaWdodCgpIC8gMi4wKTsKKyAgICBk
c3RDb250ZXh0LT5kcmF3SW1hZ2Uob3V0cHV0Qml0bWFwLmdldCgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCksIENvbXBvc2l0ZUNvcHkpOworICAgIGRzdENv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Zmx1c2goKTsKKyAgICBzaGFyZWRD
b250ZXh0LT5mbHVzaCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBI
SUNTKSAmJiBVU0UoU0tJQSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>