<?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>76532</bug_id>
          
          <creation_ts>2012-01-18 05:24:37 -0800</creation_ts>
          <short_desc>Web Inspector: Implement screen resolution emulation backend</short_desc>
          <delta_ts>2012-01-19 08:40:16 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>75963</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>macpherson</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>537786</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-18 05:24:37 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537850</commentid>
    <comment_count>1</comment_count>
      <attachid>122925</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-18 07:20:16 -0800</bug_when>
    <thetext>Created attachment 122925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537869</commentid>
    <comment_count>2</comment_count>
      <attachid>122925</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-18 07:38:41 -0800</bug_when>
    <thetext>Comment on attachment 122925
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:304
&gt; +                &quot;name&quot;: &quot;setScreenSizeOverride&quot;,

&quot;hidden&quot;: true

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:238
&gt; +    m_instrumentingAgents-&gt;setInspectorCSSAgent(this);

Is this a part of this change? It seems like you ended up putting screen size logic into the page agent.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:575
&gt; +void InspectorPageAgent::setScreenSizeOverride(ErrorString* errorString, const int width, const int height)

When navigating, you need to call this method upon agent&apos;s ::restore. You will need to use width and height from the cookie in that case.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:584
&gt; +    if (height &lt; 0) {

Combine these all into a single check.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:611
&gt; +            m_originalFixedLayoutSize = adoptPtr(new IntSize(mainFrame()-&gt;view()-&gt;fixedLayoutSize()));

// Turning on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537894</commentid>
    <comment_count>3</comment_count>
      <attachid>122939</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-18 08:49:17 -0800</bug_when>
    <thetext>Created attachment 122939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537895</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-18 08:51:16 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 122925 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122925&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/Inspector.json:304
&gt; &gt; +                &quot;name&quot;: &quot;setScreenSizeOverride&quot;,
&gt; 
&gt; &quot;hidden&quot;: true

Done.

&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:238
&gt; &gt; +    m_instrumentingAgents-&gt;setInspectorCSSAgent(this);
&gt; 
&gt; Is this a part of this change? It seems like you ended up putting screen size logic into the page agent.

Right, we need to use the CSS agent even when it is disabled.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:575
&gt; &gt; +void InspectorPageAgent::setScreenSizeOverride(ErrorString* errorString, const int width, const int height)
&gt; 
&gt; When navigating, you need to call this method upon agent&apos;s ::restore. You will need to use width and height from the cookie in that case.

Done. I ended up fixing the enable() and disable() methods. Is that correct?

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:584
&gt; &gt; +    if (height &lt; 0) {
&gt; 
&gt; Combine these all into a single check.

Done.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:611
&gt; &gt; +            m_originalFixedLayoutSize = adoptPtr(new IntSize(mainFrame()-&gt;view()-&gt;fixedLayoutSize()));
&gt; 
&gt; // Turning on.

Commented the branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538604</commentid>
    <comment_count>5</comment_count>
      <attachid>122939</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-19 03:57:11 -0800</bug_when>
    <thetext>Comment on attachment 122939
Patch

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

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:787
&gt; +    m_state-&gt;setLong(PageAgentState::pageAgentScreenWidthOverride, width);

This method shares name convention with ::applyScreenWidthOverride, yet it does not mutate its arguments. Also, it is not clear what current vs non-current values mean.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:790
&gt; +    if (width == currentWidth &amp;&amp; height == currentHeight)

This logic really confuses me. What we want is to set the frame view size. We should get current one from cookie first, compare it with the requested one and either apply or quit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538665</commentid>
    <comment_count>6</comment_count>
      <attachid>123119</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-19 06:15:39 -0800</bug_when>
    <thetext>Created attachment 123119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538667</commentid>
    <comment_count>7</comment_count>
      <attachid>123119</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-19 06:32:01 -0800</bug_when>
    <thetext>Comment on attachment 123119
Patch

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

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:309
&gt; +    // When enabling the agent, override values are restored into the FrameView.

This code belongs to the ::restore

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:322
&gt; +    storeScreenSizeOverrides(0, 0);

You don&apos;t need to store anything upon disabling agent. InspectorState would not persist them anyways.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:613
&gt; +    if (width == currentWidth &amp;&amp; height == currentHeight)

Should you be comparing to the currently installed ones? (in mainFrame()-&gt;view()) ?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:617
&gt; +    bool shouldNotify = storeScreenSizeOverrides(width, height);

I would inline this.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:618
&gt; +    if (shouldNotify)

No need to check this - we passed the check above.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:814
&gt; +    if (!width &amp;&amp; !height) {

I would split this method into two methods: clearFrameViewFixedLayout and update...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538695</commentid>
    <comment_count>8</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-19 07:32:54 -0800</bug_when>
    <thetext>Updated patch to be attached shortly.

(In reply to comment #7)
&gt; (From update of attachment 123119 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123119&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:309
&gt; &gt; +    // When enabling the agent, override values are restored into the FrameView.
&gt; 
&gt; This code belongs to the ::restore

Shouldn&apos;t we revert the FrameView size overrides when the agent is disabled and restore them when the agent is enabled?

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:322
&gt; &gt; +    storeScreenSizeOverrides(0, 0);
&gt; 
&gt; You don&apos;t need to store anything upon disabling agent. InspectorState would not persist them anyways.

Does InspectorState not survive agent disablements? In the disabled case apply...Override calls will be cut off by the absence of the agent in the InstrumentingAgents store but the respective settings will be still there, correct? I agree that there is no point in resetting the overrides when disabling the agent, so that they will be restored on enabling it.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:613
&gt; &gt; +    if (width == currentWidth &amp;&amp; height == currentHeight)
&gt; 
&gt; Should you be comparing to the currently installed ones? (in mainFrame()-&gt;view()) ?

What if we didn&apos;t override anything but coincidentally user-specified width and height are the same as those found in mainFrame()-&gt;view()? We will bail out without storing the overrides in m_state, and the window.screen/device-width|height will not get overridden.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:617
&gt; &gt; +    bool shouldNotify = storeScreenSizeOverrides(width, height);
&gt; 
&gt; I would inline this.

Done.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:618
&gt; &gt; +    if (shouldNotify)
&gt; 
&gt; No need to check this - we passed the check above.

Done.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:814
&gt; &gt; +    if (!width &amp;&amp; !height) {
&gt; 
&gt; I would split this method into two methods: clearFrameViewFixedLayout and update...

Methods extracted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538718</commentid>
    <comment_count>9</comment_count>
      <attachid>123131</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-19 08:07:28 -0800</bug_when>
    <thetext>Created attachment 123131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538728</commentid>
    <comment_count>10</comment_count>
      <attachid>123131</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-01-19 08:26:28 -0800</bug_when>
    <thetext>Comment on attachment 123131
Patch

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

Few nits, otherwise lgtm.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:289
&gt; +    if (m_originalFixedLayoutSize) {

nuke this code?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:621
&gt; +    notifyScreenSizeChanged();

Inline this into update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538738</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-01-19 08:40:16 -0800</bug_when>
    <thetext>Committed r105415: &lt;http://trac.webkit.org/changeset/105415&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122925</attachid>
            <date>2012-01-18 07:20:16 -0800</date>
            <delta_ts>2012-01-18 08:49:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76532-20120118192014.patch</filename>
            <type>text/plain</type>
            <size>26061</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiY2I2ZWFjZDkyYWU4
MjJlZDA0M2RiNDgxODJiMjlhMDEyZDlkMS4uYWZjMDI3YTgyY2FkYjE1YjNjZmZmODFiOWNjZmFj
NWM2YzljM2VlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTAxLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHNjcmVlbiByZXNvbHV0aW9uIGVtdWxhdGlvbiBiYWNrZW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBlbXVsYXRpb24g
YWZmZWN0cyBbbWluLXxtYXgtXWRldmljZS0od2lkdGh8aGVpZ2h0KSBtZWRpYSBxdWVyeSwgd2lu
ZG93LnNjcmVlbi4od2lkdGh8aGVpZ2h0KSwKKyAgICAgICAgYW5kIHdpbmRvdy5pbm5lcihXaWR0
aHxIZWlnaHQpLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2Ny
ZWVuLXNpemUuaHRtbAorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9y
Q1NTQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnN0YXJ0U2Vs
ZWN0b3JQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3Rv
cFNlbGVjdG9yUHJvZmlsZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0Fn
ZW50Ojp3aWxsTWF0Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpkaWRNYXRjaFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6Ondp
bGxQcm9jZXNzUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlk
UHJvY2Vzc1J1bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBs
eVNjcmVlbldpZHRoT3ZlcnJpZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZUltcGwpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWln
aHRPdmVycmlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JlZW5TaXplT3Zl
cnJpZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVNjcmVl
bldpZHRoT3ZlcnJpZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojph
cHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBh
Z2VBZ2VudDo6bm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmlubmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVdpbmRvdzo6aW5uZXJXaWR0aCk6CisgICAgICAgICogcGFnZS9TY3JlZW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyZWVuOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVu
Ojp3aWR0aCk6CisKIDIwMTItMDEtMTggIEp1biBNdWthaSAgPG11a2FpQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVc2UgUmVuZGVyVGhlbWUgaW4gSFRNTFNlbGVjdEVsZW1lbnQgaW5zdGVhZCBv
ZiAjZGVmaW5lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZh
bHVhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcApp
bmRleCBiNjY4NmZkODhjMGFlNTMyOTUzYzJjZjdiYjE3Y2ZiOGZhNzM2MzQ1Li5jNGJlNDM2NWIx
NWRmMTViYjc1Njc0Yzk1MDFmYTY2ODdjMzM1YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwCkBAIC0zMzIsNyArMzMyLDkgQEAgc3RhdGljIGJvb2wgZGV2
aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEYKICAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9
IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAg
ICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFm
cmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0
aCkgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4oc2cuaGVpZ2h0KCkpLCBsZW5ndGgs
IG9wKTsKKyAgICAgICAgbG9uZyBoZWlnaHQgPSBzZy5oZWlnaHQoKTsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKGZyYW1lLCAmaGVp
Z2h0KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1l
bnQoKS0+aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkgJiYgY29tcGFy
ZVZhbHVlKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSwgbGVuZ3RoLCBvcCk7CiAgICAgfQogICAg
IC8vICh7LG1pbi0sbWF4LX1kZXZpY2UtaGVpZ2h0KQogICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZl
IGEgZGV2aWNlLCBhc3N1bWUgbm9uLXplcm8KQEAgLTM0NSw3ICszNDcsOSBAQCBzdGF0aWMgYm9v
bCBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBGcgogICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5w
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgp
OwogICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1
ZSwgIWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgc3R5bGUsIHJvb3RTdHlsZSwg
bGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0aCgpKSwgbGVu
Z3RoLCBvcCk7CisgICAgICAgIGxvbmcgd2lkdGggPSBzZy53aWR0aCgpOworICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZShmcmFtZSwgJndp
ZHRoKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1l
bnQoKS0+aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkgJiYgY29tcGFy
ZVZhbHVlKHN0YXRpY19jYXN0PGludD4od2lkdGgpLCBsZW5ndGgsIG9wKTsKICAgICB9CiAgICAg
Ly8gKHssbWluLSxtYXgtfWRldmljZS13aWR0aCkKICAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBh
IGRldmljZSwgYXNzdW1lIG5vbi16ZXJvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Lmpzb24KaW5kZXggMWI0MTU0NjVlNzA0ZGEzOTJiMDVjOGQ3YWUxNDMyZTI3NmY3YmNmOS4uYjEw
YzlhMjA1YzhhNGZmOTdiMDMzZjY2MTAzMjMxOGZmZGEzNWZiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAtMjk5LDYgKzI5OSwxNCBAQAogICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
JHJlZiI6ICJTZWFyY2hSZXN1bHQiIH0sICJkZXNjcmlwdGlvbiI6ICJMaXN0IG9mIHNlYXJjaCBy
ZXN1bHRzLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgImhpZGRlbiI6
IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5h
bWUiOiAic2V0U2NyZWVuU2l6ZU92ZXJyaWRlIiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiT3ZlcnJpZGVzIHRoZSB2YWx1ZXMgb2Ygd2luZG93LnNjcmVlbi53aWR0aCwgd2luZG93
LnNjcmVlbi5oZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQsIGFu
ZCBcImRldmljZS13aWR0aFwiL1wiZGV2aWNlLWhlaWdodFwiLXJlbGF0ZWQgQ1NTIG1lZGlhIHF1
ZXJ5IHJlc3VsdHMiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIndpZHRoIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlw
dGlvbiI6ICJPdmVycmlkaW5nIHdpZHRoIHZhbHVlIGluIHBpeGVscyAobWluaW11bSAwLCBtYXhp
bXVtIDEwMDAwMDAwKS4gMCBkaXNhYmxlcyB0aGUgb3ZlcnJpZGUuIiB9LAorICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiT3ZlcnJpZGluZyBoZWlnaHQgdmFsdWUgaW4gcGl4ZWxzIChtaW5pbXVtIDAsIG1heGlt
dW0gMTAwMDAwMDApLiAwIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAg
ICBdCiAgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVudHMiOiBbCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA1OTYw
MWI4OTc5MDIyMGJmNGU5M2EzOWQzOWYzYmQ1MDg0M2JiMGEyLi5lYmU5MGI1NzcxNGM1ZTg1Mjll
ZjU4YTdlMzljNWFmNDFiZjJjYzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTIzNSw2ICsyMzUsNyBAQCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0Fn
ZW50cywgSQogICAgICwgbV9sYXN0U3R5bGVJZCgxKQogewogICAgIG1fZG9tQWdlbnQtPnNldERP
TUxpc3RlbmVyKHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9y
Q1NTQWdlbnQodGhpcyk7CiB9CiAKIEluc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NTQWdl
bnQoKQpAQCAtNTI0LDcgKzUyNSw2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yCiB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzdGFydFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqKQogewog
ICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSA9IGFkb3B0UHRyKG5ldyBTZWxlY3RvclByb2Zp
bGUoKSk7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2VudCh0
aGlzKTsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQ
cm9maWxpbmcsIHRydWUpOwogfQogCkBAIC01MzgsNyArNTM4LDYgQEAgdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKEVycm9yU3RyaW5nKiwgUmVmUHRyPElu
c3BlY3Rvck8KICAgICBpZiAoIW1fc3RhdGUtPmdldEJvb2xlYW4oQ1NTQWdlbnRTdGF0ZTo6aXNT
ZWxlY3RvclByb2ZpbGluZykpCiAgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlLT5zZXRCb29s
ZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcsIGZhbHNlKTsKLSAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckNTU0FnZW50KDApOwogICAgIGlmIChtX2Zy
b250ZW5kICYmIHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IG1fY3VycmVudFNlbGVjdG9yUHJv
ZmlsZS0+dG9JbnNwZWN0b3JPYmplY3QoKTsKICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUu
Y2xlYXIoKTsKQEAgLTU0NiwyMiArNTQ1LDI2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0
b3BTZWxlY3RvclByb2ZpbGVySW1wbChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPCiAK
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxl
KiBydWxlKQogewotICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+c3RhcnRTZWxlY3Rvcihy
dWxlKTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJl
bnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3IocnVsZSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRpZE1hdGNoUnVsZShib29sIG1hdGNoZWQpCiB7Ci0gICAgbV9jdXJyZW50
U2VsZWN0b3JQcm9maWxlLT5jb21taXRTZWxlY3RvcihtYXRjaGVkKTsKKyAgICBpZiAobV9jdXJy
ZW50U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNv
bW1pdFNlbGVjdG9yKG1hdGNoZWQpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxs
UHJvY2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxlKQogewotICAgIG1fY3VycmVudFNl
bGVjdG9yUHJvZmlsZS0+c3RhcnRTZWxlY3RvcihydWxlKTsKKyAgICBpZiAobV9jdXJyZW50U2Vs
ZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2Vs
ZWN0b3IocnVsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxl
KCkKIHsKLSAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNvbW1pdFNlbGVjdG9yVGltZSgp
OworICAgIGlmIChtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUpCisgICAgICAgIG1fY3VycmVudFNl
bGVjdG9yUHJvZmlsZS0+Y29tbWl0U2VsZWN0b3JUaW1lKCk7CiB9CiAKIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVT
aGVldChFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBiMjNjOWU1YmIyMjNhMmVkNGM5
OWU4NTk1NjVlNTJkMzRiNDFiYWQzLi5jNTAxMDk2YTlhMmIwNzQ0NWY3YzUxNGI0N2RlZGQxYTQw
ODZmNDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNDg1LDYgKzQ4NSwxOCBAQCB2b2lkIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaQogICAgICAgICByZXNvdXJjZUFnZW50LT5hcHBseVVzZXJBZ2VudE92ZXJyaWRlKHVz
ZXJBZ2VudCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVl
bldpZHRoT3ZlcnJpZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIGxvbmcqIHdpZHRoKQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBw
YWdlQWdlbnQtPmFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZSh3aWR0aCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBsb25nKiBoZWlnaHQpCit7Cisg
ICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50
cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgICAgIHBhZ2VBZ2VudC0+YXBwbHlTY3JlZW5I
ZWlnaHRPdmVycmlkZShoZWlnaHQpOworfQorCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJl
Y3RSZXNwb25zZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVB
Z2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aAppbmRleCA3Mzk4OWE0NDAxNjc2YWZhZmRmNjg0YTRhNGVmMTMxNGVkMjA3NDFjLi45MmM0ZWM3
ZDZiMjBiNjg1MDc0NDg1MjRlODE5MTI1MmJlZjQwNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xMjgsNiArMTI4
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpZFByb2Nlc3NSdWxlKGNvbnN0IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlVc2Vy
QWdlbnRPdmVycmlkZShGcmFtZSosIFN0cmluZyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5U2Ny
ZWVuV2lkdGhPdmVycmlkZShGcmFtZSosIGxvbmcqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVNj
cmVlbkhlaWdodE92ZXJyaWRlKEZyYW1lKiwgbG9uZyopOwogICAgIHN0YXRpYyB2b2lkIHdpbGxT
ZW5kUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2Fk
ZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKTsKICAgICBzdGF0aWMgdm9pZCBjb250aW51ZUFmdGVyUGluZ0xvYWRlcihGcmFtZSos
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZvaWQgbWFya1Jlc291
cmNlQXNDYWNoZWQoUGFnZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC0yNzMsNiAr
Mjc1LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRQcm9jZXNzUnVsZUltcGwoY29u
c3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBh
cHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgU3RyaW5nKik7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlSW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgbG9uZyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5U2NyZWVuSGVpZ2h0T3Zl
cnJpZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBsb25nKik7CiAgICAgc3RhdGljIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVl
QWZ0ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9pZCBtYXJrUmVzb3VyY2VBc0NhY2hlZEltcGwo
SW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC03Nzks
NiArNzgzLDI0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlV
c2VyQWdlbnRPdmVycmlkZShGcmFtZSogZnJhbWUsIFN0cmluCiAjZW5kaWYKIH0KIAoraW5saW5l
IHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUo
RnJhbWUqIGZyYW1lLCBsb25nKiB3aWR0aCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAg
IEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50
aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZy
YW1lKGZyYW1lKSkKKyAgICAgICAgYXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlSW1wbChpbnN0cnVt
ZW50aW5nQWdlbnRzLCB3aWR0aCk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwg
bG9uZyogaGVpZ2h0KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5f
SUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGlu
c3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQor
ICAgICAgICBhcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRz
LCBoZWlnaHQpOworI2VuZGlmCit9CisKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6d2lsbFNlbmRSZXF1ZXN0KEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAKaW5kZXggNzEyZmE1MWZhODI3ZTcwNjZmZTAyMTFkZmE0MjhhMDNiYjI4ODVkMi4uOGY0
ZGIwM2ZkMjY4NTM5NDhmNDkyNDEyMDhiMTlmYTc3ZTQxN2EwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQ2LDExICs0NiwxMyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIK
QEAgLTc0LDYgKzc2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFBhZ2VBZ2Vu
dFN0YXRlIHsKIHN0YXRpYyBjb25zdCBjaGFyIHBhZ2VBZ2VudEVuYWJsZWRbXSA9ICJwYWdlQWdl
bnRFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIHBhZ2VBZ2VudFNjcmlwdHNUb0V2YWx1YXRl
T25Mb2FkW10gPSAicGFnZUFnZW50U2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQiOworc3RhdGljIGNv
bnN0IGNoYXIgcGFnZUFnZW50U2NyZWVuV2lkdGhPdmVycmlkZVtdID0gInBhZ2VBZ2VudFNjcmVl
bldpZHRoT3ZlcnJpZGUiOworc3RhdGljIGNvbnN0IGNoYXIgcGFnZUFnZW50U2NyZWVuSGVpZ2h0
T3ZlcnJpZGVbXSA9ICJwYWdlQWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSI7CiB9CiAKIHN0YXRp
YyBib29sIGRlY29kZVNoYXJlZEJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
LCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIFN0cmluZyogcmVzdWx0KQpAQCAtMjY3
LDYgKzI3MSw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAg
ICAgLCBtX2xhc3RTY3JpcHRJZGVudGlmaWVyKDApCisgICAgLCBtX29yaWdpbmFsVXNlRml4ZWRM
YXlvdXQoZmFsc2UpCiB7CiB9CiAKQEAgLTI4MCw2ICsyODUsMTEgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgIGRp
c2FibGUoJmVycm9yKTsKICAgICBtX2Zyb250ZW5kID0gMDsKKyAgICBpZiAobV9vcmlnaW5hbEZp
eGVkTGF5b3V0U2l6ZSkgeworICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5zZXRGaXhlZExh
eW91dFNpemUoKm1fb3JpZ2luYWxGaXhlZExheW91dFNpemUpOworICAgICAgICBtYWluRnJhbWUo
KS0+dmlldygpLT5zZXRVc2VGaXhlZExheW91dChtX29yaWdpbmFsVXNlRml4ZWRMYXlvdXQpOwor
ICAgIH0KKyAgICBub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCgpOwogfQogCiB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6cmVzdG9yZSgpCkBAIC01NjIsNiArNTcyLDU3IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uCiAgICAgcmVzdWx0cyA9IHNlYXJjaFJlc3VsdHM7CiB9CiAKK3ZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpzZXRTY3JlZW5TaXplT3ZlcnJpZGUoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7CisgICAgY29uc3Qgc3Rh
dGljIGxvbmcgbWF4RGltZW5zaW9uID0gMTAwMDAwMDA7CisKKyAgICBpZiAod2lkdGggPCAwKSB7
CisgICAgICAgICplcnJvclN0cmluZyA9ICJXaWR0aCBvdmVycmlkZSBjYW5ub3QgYmUgbmVnYXRp
dmUiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGhlaWdodCA8IDApIHsKKyAg
ICAgICAgKmVycm9yU3RyaW5nID0gIkhlaWdodCBvdmVycmlkZSBjYW5ub3QgYmUgbmVnYXRpdmUi
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHdpZHRoID4gbWF4RGltZW5zaW9u
KSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJTcGVjaWZpZWQgd2lkdGggb3ZlcnJpZGUgZXhj
ZWVkcyB0aGUgbWF4aW11bSB2YWx1ZSI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoaGVpZ2h0ID4gbWF4RGltZW5zaW9uKSB7CisgICAgICAgICplcnJvclN0cmluZyA9ICJTcGVj
aWZpZWQgaGVpZ2h0IG92ZXJyaWRlIGV4Y2VlZHMgdGhlIG1heGltdW0gdmFsdWUiOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlc2UgdHdvIGFsd2F5cyBmaXQgYW4gaW50Lgor
ICAgIGxvbmcgY3VycmVudFdpZHRoID0gbV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6
cGFnZUFnZW50U2NyZWVuV2lkdGhPdmVycmlkZSk7CisgICAgbG9uZyBjdXJyZW50SGVpZ2h0ID0g
bV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVpZ2h0T3Zl
cnJpZGUpOworCisgICAgaWYgKHdpZHRoID09IGN1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gY3Vy
cmVudEhlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZS0+c2V0TG9uZyhQYWdl
QWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuV2lkdGhPdmVycmlkZSwgd2lkdGgpOworICAgIG1f
c3RhdGUtPnNldExvbmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbkhlaWdodE92ZXJy
aWRlLCBoZWlnaHQpOworCisgICAgaWYgKCFjdXJyZW50V2lkdGggJiYgIWN1cnJlbnRIZWlnaHQp
IHsKKyAgICAgICAgaWYgKCFtX29yaWdpbmFsRml4ZWRMYXlvdXRTaXplKSB7CisgICAgICAgICAg
ICBtX29yaWdpbmFsRml4ZWRMYXlvdXRTaXplID0gYWRvcHRQdHIobmV3IEludFNpemUobWFpbkZy
YW1lKCktPnZpZXcoKS0+Zml4ZWRMYXlvdXRTaXplKCkpKTsKKyAgICAgICAgICAgIG1fb3JpZ2lu
YWxVc2VGaXhlZExheW91dCA9IG1haW5GcmFtZSgpLT52aWV3KCktPnVzZUZpeGVkTGF5b3V0KCk7
CisgICAgICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5zZXRGaXhlZExheW91dFNpemUoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5z
ZXRVc2VGaXhlZExheW91dCh0cnVlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXdpZHRo
ICYmICFoZWlnaHQpIHsKKyAgICAgICAgaWYgKG1fb3JpZ2luYWxGaXhlZExheW91dFNpemUpCisg
ICAgICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5zZXRGaXhlZExheW91dFNpemUoKm1fb3Jp
Z2luYWxGaXhlZExheW91dFNpemUpOworICAgICAgICBtX29yaWdpbmFsRml4ZWRMYXlvdXRTaXpl
LmNsZWFyKCk7CisgICAgICAgIG1haW5GcmFtZSgpLT52aWV3KCktPnNldFVzZUZpeGVkTGF5b3V0
KG1fb3JpZ2luYWxVc2VGaXhlZExheW91dCk7CisgICAgfQorCisgICAgbm90aWZ5U2NyZWVuU2l6
ZUNoYW5nZWQoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93
T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAg
ICAgaWYgKHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQpAQCAtNjc3LDYgKzczOCwy
MCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVyRGV0YWNoZWRGcm9tRnJhbWUoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgbV9sb2FkZXJUb0lkZW50aWZpZXIucmVtb3Zl
KGl0ZXJhdG9yKTsKIH0KIAordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5U2NyZWVuV2lk
dGhPdmVycmlkZShsb25nKiB3aWR0aCkKK3sKKyAgICBsb25nIHdpZHRoT3ZlcnJpZGUgPSBtX3N0
YXRlLT5nZXRMb25nKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5XaWR0aE92ZXJyaWRl
KTsKKyAgICBpZiAod2lkdGhPdmVycmlkZSkKKyAgICAgICAgKndpZHRoID0gd2lkdGhPdmVycmlk
ZTsKK30KKwordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJp
ZGUobG9uZyogaGVpZ2h0KQoreworICAgIGxvbmcgaGVpZ2h0T3ZlcnJpZGUgPSBtX3N0YXRlLT5n
ZXRMb25nKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSk7Cisg
ICAgaWYgKGhlaWdodE92ZXJyaWRlKQorICAgICAgICAqaGVpZ2h0ID0gaGVpZ2h0T3ZlcnJpZGU7
Cit9CisKIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKQEAgLTcyNyw2
ICs4MDIsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGYKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQoKQor
eworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1haW5GcmFtZSgpLT5kb2N1bWVudCgpOworICAg
IGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKGRv
Y3VtZW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuaAppbmRleCA3OWQyMmU1YmMxZTg2OTlkMzNhM2I3NzhmZjEzYjliNGE1ZGQ1MDcyLi40Yjlh
MDI4NzhlNWY5NThkZjkxYzc5NTFhNTlhYmIxNGE5YWQ2NzAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC05OSw2ICs5OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFz
ZTY0RW5jb2RlZCk7CiAgICAgdm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVy
eSwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBj
b25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKICAgICB2b2lk
IHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9v
bCogY29uc3QgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3QgaXNSZWdleCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiYpOworICAgIHZvaWQgc2V0U2NyZWVuU2l6ZU92ZXJyaWRlKEVycm9y
U3RyaW5nKiwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KTsKIAogICAgIC8vIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOwpAQCAtMTA3LDYgKzEwOCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKik7CiAgICAgdm9p
ZCBmcmFtZURldGFjaGVkKEZyYW1lKik7CiAgICAgdm9pZCBsb2FkZXJEZXRhY2hlZEZyb21GcmFt
ZShEb2N1bWVudExvYWRlciopOworICAgIHZvaWQgYXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKGxv
bmcqKTsKKyAgICB2b2lkIGFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUobG9uZyopOwogCiAgICAg
Ly8gSW5zcGVjdG9yIENvbnRyb2xsZXIgQVBJCiAgICAgdmlydHVhbCB2b2lkIHNldEZyb250ZW5k
KEluc3BlY3RvckZyb250ZW5kKik7CkBAIC0xMjQsNiArMTI3LDcgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0cnVtZW50aW5nQWdlbnRzKiwgUGFnZSos
IEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CisgICAgdm9pZCBub3Rp
ZnlTY3JlZW5TaXplQ2hhbmdlZCgpOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqKTsKQEAgLTEzNiw2ICsxNDAsOCBA
QCBwcml2YXRlOgogICAgIEhhc2hNYXA8RnJhbWUqLCBTdHJpbmc+IG1fZnJhbWVUb0lkZW50aWZp
ZXI7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEZyYW1lKj4gbV9pZGVudGlmaWVyVG9GcmFtZTsKICAg
ICBIYXNoTWFwPERvY3VtZW50TG9hZGVyKiwgU3RyaW5nPiBtX2xvYWRlclRvSWRlbnRpZmllcjsK
KyAgICBPd25QdHI8SW50U2l6ZT4gbV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZTsKKyAgICBib29s
IG1fb3JpZ2luYWxVc2VGaXhlZExheW91dDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCmluZGV4IDI5Y2NmYjFkZWNhODVjM2QwYWEyMDZmODZmNTBjNGJkYjgyZDg2OWMuLjQ0NTA5
NzA3OTk4N2RlNTk2ZGNhMWUzOTNiNTU5NjNjNzMxZGQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKQEAgLTExMjYsNyArMTEyNiw5IEBAIGludCBET01XaW5kb3c6OmlubmVySGVpZ2h0
KCkgY29uc3QKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZpZXctPnZpc2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRl
U2Nyb2xsYmFycyAqLyB0cnVlKS5oZWlnaHQoKSAvIG1fZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkp
OworICAgIGxvbmcgaGVpZ2h0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KC8qIGluY2x1ZGVT
Y3JvbGxiYXJzICovIHRydWUpLmhlaWdodCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShtX2ZyYW1lLCAmaGVpZ2h0KTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQgLyBtX2ZyYW1lLT5wYWdlWm9vbUZhY3RvcigpKTsK
IH0KIAogaW50IERPTVdpbmRvdzo6aW5uZXJXaWR0aCgpIGNvbnN0CkBAIC0xMTM4LDcgKzExNDAs
OSBAQCBpbnQgRE9NV2luZG93Ojppbm5lcldpZHRoKCkgY29uc3QKICAgICBpZiAoIXZpZXcpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KC8qIGluY2x1ZGVTY3JvbGxiYXJzICovIHRydWUpLndpZHRoKCkgLyBt
X2ZyYW1lLT5wYWdlWm9vbUZhY3RvcigpKTsKKyAgICBsb25nIHdpZHRoID0gdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KC8qIGluY2x1ZGVTY3JvbGxiYXJzICovIHRydWUpLndpZHRoKCk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUobV9mcmFt
ZSwgJndpZHRoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCAvIG1fZnJhbWUt
PnBhZ2Vab29tRmFjdG9yKCkpOwogfQogCiBpbnQgRE9NV2luZG93OjpzY3JlZW5YKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2NyZWVuLmNwcAppbmRleCBiMDIxZTVmMTc4YTRmZjU4OGMyYTkxMzgzN2VkNGQ2
NzFmMGIxMDY5Li5lMWUxZDExNzM4NmY2MjJlZTNjMTkzYjNlNTAyMmM4ODNhOGMyNWIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TY3JlZW4uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5o
IgogI2luY2x1ZGUgIldpZGdldC5oIgogCkBAIC02MSwxNCArNjIsMTggQEAgdW5zaWduZWQgU2Ny
ZWVuOjpoZWlnaHQoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzY3JlZW5SZWN0KG1fZnJhbWUt
PnZpZXcoKSkuaGVpZ2h0KCkpOworICAgIGxvbmcgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8bG9uZz4o
c2NyZWVuUmVjdChtX2ZyYW1lLT52aWV3KCkpLmhlaWdodCgpKTsKKyAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUobV9mcmFtZSwgJmhlaWdodCk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWlnaHQpOwogfQogCiB1bnNpZ25l
ZCBTY3JlZW46OndpZHRoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2NyZWVuUmVjdChtX2Zy
YW1lLT52aWV3KCkpLndpZHRoKCkpOworICAgIGxvbmcgd2lkdGggPSBzdGF0aWNfY2FzdDxsb25n
PihzY3JlZW5SZWN0KG1fZnJhbWUtPnZpZXcoKSkud2lkdGgoKSk7CisgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUobV9mcmFtZSwgJndpZHRoKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdpZHRoKTsKIH0KIAogdW5zaWduZWQg
U2NyZWVuOjpjb2xvckRlcHRoKCkgY29uc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhNDEzNmZiNGI3YTE2OWQzOTU5MDZk
ZWMxMGQwOGU2ZDI5ZjQ4Nzg0Li4yZDVlNWE1NDYzNjZiYmI5YWY4ZDdiYjZiZGMzNjkyNDFlYTgx
YTAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAKIDIwMTItMDEtMTggIEFsZXhhbmRlciBQYXZsb3Yg
IDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1l
bnQgc2NyZWVuIHJlc29sdXRpb24gZW11bGF0aW9uIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTMyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRl
LXNjcmVlbi1zaXplLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3N0
eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sOiBBZGRlZC4KKworMjAxMi0wMS0xOCAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtDaHJvbWl1
bV0gVW5yZXZpZXdlZCwgZml4IGNsYXNoaW5nIHN2Zy9jdXN0b20vbGlua2luZy1hLTAzLWItdmll
d0JveC5zdmcgZXhwZWN0YXRpb24uCiAKICAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQ6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ1YmVlOGEzMDRjODA2YTgyZTM5YzYzZWI3YzJkNTFkZjY5MjdjNGQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBACitUZXN0cyB0aGF0IHNjcmVlbiBkaW1lbnNpb24g
b3ZlcnJpZGVzIGFmZmVjdCBtZWRpYSBydWxlcywgYm9keSBkaW1lbnNpb25zLCBhbmQgd2luZG93
LnNjcmVlbi4KKworYm9keTogNDgweDk2MAord2luZG93LnNjcmVlbjogNDgweDk2MAorTWFpbiBz
dHlsZToKK1tleHBhbmRlZF0gCitlbGVtZW50LnN0eWxlICB7ICgpCisKKz09PT09PT09IE1hdGNo
ZWQgQ1NTIFJ1bGVzID09PT09PT09CitbZXhwYW5kZWRdIAorbWVkaWE9InNjcmVlbiIgKG92ZXJy
aWRlLXNjcmVlbi1zaXplLmh0bWwpCitAbWVkaWEgKG1heC1kZXZpY2UtaGVpZ2h0OiA5NjBweCkg
YW5kIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkgKG92ZXJyaWRlLXNjcmVlbi1zaXplLmh0bWw6
OSkKKyNtYWluICB7IChvdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sOjEwKQorYmFja2dyb3VuZDog
Z3JlZW47CisKK1tleHBhbmRlZF0gCitkaXYgIHsgKHVzZXIgYWdlbnQgc3R5bGVzaGVldCkKK2Rp
c3BsYXk6IGJsb2NrOworCisKK092ZXJyaWRlOiAxMDAwMDAwMXg5NjAgPT4gRVJST1IKK092ZXJy
aWRlOiAtMXg5NjAgPT4gRVJST1IKK092ZXJyaWRlOiA0ODB4MTAwMDAwMDEgPT4gRVJST1IKK092
ZXJyaWRlOiA0ODB4LTEgPT4gRVJST1IKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhMGNjNGUx
YjcxNzJhMjZlY2Q1NzY4M2NkZGQ1ODU1ZjA4OWY4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLmh0bWwKQEAgLTAs
MCArMSwxMDIgQEAKKzxodG1sPgorPGhlYWQ+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVk
aWE9InNjcmVlbiI+CitAbWVkaWEgKG1heC1kZXZpY2Utd2lkdGg6IDQ3OHB4KSBhbmQgKG1heC1k
ZXZpY2UtaGVpZ2h0OiA5NTlweCkgeworICAgICNtYWluIHsgYmFja2dyb3VuZDogcmVkOyB9Cit9
CisKK0BtZWRpYSAobWF4LWRldmljZS13aWR0aDogNDgwcHgpIGFuZCAobWF4LWRldmljZS1oZWln
aHQ6IDk2MHB4KSB7CisgICAgI21haW4geyBiYWNrZ3JvdW5kOiBncmVlbjsgfQorfQorCitAbWVk
aWEgKG1pbi1kZXZpY2Utd2lkdGg6IDQ4MXB4KSBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiA5NjFw
eCkgeworICAgICNtYWluIHsgYmFja2dyb3VuZDogeWVsbG93OyB9Cit9CisKK2JvZHkgeworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgYm90
dG9tOiAwOworICAgIGxlZnQ6IDA7CisgICAgbWFyZ2luOiAwOworfQorCis8L3N0eWxlPgorCis8
c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1l
bnRzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZHVtcFNpemVzKCkK
K3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9keS1zaXplIikudGV4dENvbnRlbnQg
PSAiYm9keTogIiArIGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggKyAieCIgKyBkb2N1bWVudC5i
b2R5Lm9mZnNldEhlaWdodDsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NyZWVuLXNp
emUiKS50ZXh0Q29udGVudCA9ICJ3aW5kb3cuc2NyZWVuOiAiICsgd2luZG93LnNjcmVlbi53aWR0
aCArICJ4IiArIHdpbmRvdy5zY3JlZW4uaGVpZ2h0OworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICB2YXIgZXhjZWVkZWREaW1lbnNpb24gPSAxMDAwMDAwMTsKKyAgICBhcHBseU92ZXJyaWRl
KDQ4MCwgOTYwLCBzdGVwMCk7CisKKyAgICBmdW5jdGlvbiBzdGVwMCgpCisgICAgeworICAgICAg
ICBJbnNwZWN0b3JUZXN0LnNlbGVjdE5vZGVBbmRXYWl0Rm9yU3R5bGVzKCJtYWluIiwgc3RlcDEp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXAxKCkKKyAgICB7CisgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCJNYWluIHN0eWxlOiIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmR1
bXBTZWxlY3RlZEVsZW1lbnRTdHlsZXModHJ1ZSwgZmFsc2UsIHRydWUpOworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJkdW1wU2l6ZXMoKSIsIHN0ZXAyKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBzdGVwMigpCisgICAgeworICAgICAgICBhcHBseU92ZXJyaWRlKGV4Y2Vl
ZGVkRGltZW5zaW9uLCA5NjAsIHN0ZXAzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwMygp
CisgICAgeworICAgICAgICBhcHBseU92ZXJyaWRlKC0xLCA5NjAsIHN0ZXA0KTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBzdGVwNCgpCisgICAgeworICAgICAgICBhcHBseU92ZXJyaWRlKDQ4MCwg
ZXhjZWVkZWREaW1lbnNpb24sIHN0ZXA1KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwNSgp
CisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgYXBw
bHlPdmVycmlkZSg0ODAsIC0xLCBjYWxsYmFjayk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXBw
bHlPdmVycmlkZSh3aWR0aCwgaGVpZ2h0LCB1c2VyQ2FsbGJhY2spCisgICAgeworICAgICAgICBm
dW5jdGlvbiBjYWxsYmFjayhlcnJvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9y
KQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJPdmVycmlkZTogIiAr
IHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIiA9PiBFUlJPUiIpOworICAgICAgICAgICAgdXNlckNh
bGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgUGFnZUFnZW50LnNldFNjcmVlblNpemVPdmVy
cmlkZSh3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjayk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPgorVGVzdHMgdGhhdCBzY3JlZW4g
ZGltZW5zaW9uIG92ZXJyaWRlcyBhZmZlY3QgbWVkaWEgcnVsZXMsIGJvZHkgZGltZW5zaW9ucywg
YW5kIHdpbmRvdy5zY3JlZW4uCis8L3A+CisKKzxkaXYgaWQ9Im1haW4iPjwvZGl2PgorPGRpdiBp
ZD0iYm9keS1zaXplIj48L2Rpdj4KKzxkaXYgaWQ9InNjcmVlbi1zaXplIj48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122939</attachid>
            <date>2012-01-18 08:49:17 -0800</date>
            <delta_ts>2012-01-19 06:15:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76532-20120118204914.patch</filename>
            <type>text/plain</type>
            <size>29841</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiY2I2ZWFjZDkyYWU4
MjJlZDA0M2RiNDgxODJiMjlhMDEyZDlkMS4uZTcxZTk4YmM1MmRlZDc1YzJmMmI3MDlmMThiZjQ4
YjUwYzUzYWQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAxLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHNjcmVlbiByZXNvbHV0aW9uIGVtdWxhdGlvbiBiYWNrZW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBlbXVsYXRpb24g
YWZmZWN0cyBbbWluLXxtYXgtXWRldmljZS0od2lkdGh8aGVpZ2h0KSBtZWRpYSBxdWVyeSwgd2lu
ZG93LnNjcmVlbi4od2lkdGh8aGVpZ2h0KSwKKyAgICAgICAgYW5kIHdpbmRvdy5pbm5lcihXaWR0
aHxIZWlnaHQpLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2Ny
ZWVuLXNpemUuaHRtbAorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9y
Q1NTQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnN0YXJ0U2Vs
ZWN0b3JQcm9maWxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3Rv
cFNlbGVjdG9yUHJvZmlsZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0Fn
ZW50Ojp3aWxsTWF0Y2hSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50
OjpkaWRNYXRjaFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6Ondp
bGxQcm9jZXNzUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGlk
UHJvY2Vzc1J1bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBs
eVNjcmVlbldpZHRoT3ZlcnJpZGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZUltcGwpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWln
aHRPdmVycmlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2NyZWVuU2l6ZU92ZXJyaWRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlTY3JlZW5IZWlnaHRP
dmVycmlkZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5RnJh
bWVWaWV3U2l6ZU92ZXJyaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6bm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6OmlubmVySGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdp
bmRvdzo6aW5uZXJXaWR0aCk6CisgICAgICAgICogcGFnZS9TY3JlZW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyZWVuOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuOjp3aWR0
aCk6CisKIDIwMTItMDEtMTggIEp1biBNdWthaSAgPG11a2FpQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVc2UgUmVuZGVyVGhlbWUgaW4gSFRNTFNlbGVjdEVsZW1lbnQgaW5zdGVhZCBvZiAjZGVm
aW5lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRleCBi
NjY4NmZkODhjMGFlNTMyOTUzYzJjZjdiYjE3Y2ZiOGZhNzM2MzQ1Li5jNGJlNDM2NWIxNWRmMTVi
Yjc1Njc0Yzk1MDFmYTY2ODdjMzM1YWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwCkBAIC0zMzIsNyArMzMyLDkgQEAgc3RhdGljIGJvb2wgZGV2aWNlX2hl
aWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEYKICAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZyYW1l
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAg
aW50IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+
ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkgJiYg
Y29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4oc2cuaGVpZ2h0KCkpLCBsZW5ndGgsIG9wKTsK
KyAgICAgICAgbG9uZyBoZWlnaHQgPSBzZy5oZWlnaHQoKTsKKyAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKGZyYW1lLCAmaGVpZ2h0KTsK
KyAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+
aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVl
KHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSwgbGVuZ3RoLCBvcCk7CiAgICAgfQogICAgIC8vICh7
LG1pbi0sbWF4LX1kZXZpY2UtaGVpZ2h0KQogICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZlIGEgZGV2
aWNlLCBhc3N1bWUgbm9uLXplcm8KQEAgLTM0NSw3ICszNDcsOSBAQCBzdGF0aWMgYm9vbCBkZXZp
Y2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBGcgogICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0g
ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogICAg
ICAgICBpbnQgbGVuZ3RoOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZy
YW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgc3R5bGUsIHJvb3RTdHlsZSwgbGVuZ3Ro
KSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0aCgpKSwgbGVuZ3RoLCBv
cCk7CisgICAgICAgIGxvbmcgd2lkdGggPSBzZy53aWR0aCgpOworICAgICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZShmcmFtZSwgJndpZHRoKTsK
KyAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+
aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVl
KHN0YXRpY19jYXN0PGludD4od2lkdGgpLCBsZW5ndGgsIG9wKTsKICAgICB9CiAgICAgLy8gKHss
bWluLSxtYXgtfWRldmljZS13aWR0aCkKICAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRldmlj
ZSwgYXNzdW1lIG5vbi16ZXJvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
aW5kZXggMWI0MTU0NjVlNzA0ZGEzOTJiMDVjOGQ3YWUxNDMyZTI3NmY3YmNmOS4uOTNkMWI5MDQy
YTdlZDVlY2E4YmVjNDA1Y2VhZTFmMDI4ZmUyODBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbgpAQCAtMjk5LDYgKzI5OSwxNSBAQAogICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6
ICJTZWFyY2hSZXN1bHQiIH0sICJkZXNjcmlwdGlvbiI6ICJMaXN0IG9mIHNlYXJjaCByZXN1bHRz
LiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAi
c2V0U2NyZWVuU2l6ZU92ZXJyaWRlIiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
T3ZlcnJpZGVzIHRoZSB2YWx1ZXMgb2Ygd2luZG93LnNjcmVlbi53aWR0aCwgd2luZG93LnNjcmVl
bi5oZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQsIGFuZCBcImRl
dmljZS13aWR0aFwiL1wiZGV2aWNlLWhlaWdodFwiLXJlbGF0ZWQgQ1NTIG1lZGlhIHF1ZXJ5IHJl
c3VsdHMiLAorICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIndpZHRoIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJPdmVycmlkaW5nIHdpZHRoIHZhbHVlIGluIHBpeGVscyAobWluaW11bSAwLCBtYXhpbXVtIDEw
MDAwMDAwKS4gMCBkaXNhYmxlcyB0aGUgb3ZlcnJpZGUuIiB9LAorICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
T3ZlcnJpZGluZyBoZWlnaHQgdmFsdWUgaW4gcGl4ZWxzIChtaW5pbXVtIDAsIG1heGltdW0gMTAw
MDAwMDApLiAwIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCiAgICAgICAgICAgICB9CiAgICAgICAgIF0s
CiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcAppbmRleCA1OTYwMWI4OTc5MDIyMGJmNGU5M2EzOWQzOWYzYmQ1MDg0
M2JiMGEyLi5lYmU5MGI1NzcxNGM1ZTg1MjllZjU4YTdlMzljNWFmNDFiZjJjYzdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTIzNSw2
ICsyMzUsNyBAQCBJbnNwZWN0b3JDU1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVu
dGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSQogICAgICwgbV9sYXN0U3R5bGVJZCgx
KQogewogICAgIG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKHRoaXMpOworICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ1NTQWdlbnQodGhpcyk7CiB9CiAKIEluc3BlY3Rv
ckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NTQWdlbnQoKQpAQCAtNTI0LDcgKzUyNSw2IEBAIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8SW5zcGVjdG9yCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdGFydFNlbGVjdG9y
UHJvZmlsZXIoRXJyb3JTdHJpbmcqKQogewogICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSA9
IGFkb3B0UHRyKG5ldyBTZWxlY3RvclByb2ZpbGUoKSk7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2VudCh0aGlzKTsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcsIHRydWUpOwogfQogCkBAIC01Mzgs
NyArNTM4LDYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvZmlsZXJJ
bXBsKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck8KICAgICBpZiAoIW1fc3RhdGUtPmdl
dEJvb2xlYW4oQ1NTQWdlbnRTdGF0ZTo6aXNTZWxlY3RvclByb2ZpbGluZykpCiAgICAgICAgIHJl
dHVybjsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQ
cm9maWxpbmcsIGZhbHNlKTsKLSAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3Rv
ckNTU0FnZW50KDApOwogICAgIGlmIChtX2Zyb250ZW5kICYmIHJlc3VsdCkKICAgICAgICAgKnJl
c3VsdCA9IG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+dG9JbnNwZWN0b3JPYmplY3QoKTsKICAg
ICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUuY2xlYXIoKTsKQEAgLTU0NiwyMiArNTQ1LDI2IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0b3BTZWxlY3RvclByb2ZpbGVySW1wbChFcnJvclN0
cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPCiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxN
YXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxlKQogewotICAgIG1fY3VycmVudFNlbGVj
dG9yUHJvZmlsZS0+c3RhcnRTZWxlY3RvcihydWxlKTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0
b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0
b3IocnVsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZE1hdGNoUnVsZShib29s
IG1hdGNoZWQpCiB7Ci0gICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5jb21taXRTZWxlY3Rv
cihtYXRjaGVkKTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBt
X2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNvbW1pdFNlbGVjdG9yKG1hdGNoZWQpOwogfQogCiB2
b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsUHJvY2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxl
KiBydWxlKQogewotICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+c3RhcnRTZWxlY3Rvcihy
dWxlKTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJl
bnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3IocnVsZSk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxlKCkKIHsKLSAgICBtX2N1cnJlbnRTZWxlY3RvclBy
b2ZpbGUtPmNvbW1pdFNlbGVjdG9yVGltZSgpOworICAgIGlmIChtX2N1cnJlbnRTZWxlY3RvclBy
b2ZpbGUpCisgICAgICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+Y29tbWl0U2VsZWN0b3JU
aW1lKCk7CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9y
Q1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNw
cAppbmRleCBiMjNjOWU1YmIyMjNhMmVkNGM5OWU4NTk1NjVlNTJkMzRiNDFiYWQzLi5jNTAxMDk2
YTlhMmIwNzQ0NWY3YzUxNGI0N2RlZGQxYTQwODZmNDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApAQCAtNDg1LDYg
KzQ4NSwxOCBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRP
dmVycmlkZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaQogICAgICAgICByZXNvdXJjZUFnZW50
LT5hcHBseVVzZXJBZ2VudE92ZXJyaWRlKHVzZXJBZ2VudCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGVJbXBsKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIGxvbmcqIHdpZHRoKQoreworICAgIGlmIChJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3Bl
Y3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdlQWdlbnQtPmFwcGx5U2NyZWVuV2lkdGhPdmVy
cmlkZSh3aWR0aCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNj
cmVlbkhlaWdodE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBsb25nKiBoZWlnaHQpCit7CisgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAg
ICAgIHBhZ2VBZ2VudC0+YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShoZWlnaHQpOworfQorCiB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAgICBpZiAoSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmlu
c3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAppbmRleCA3Mzk4OWE0NDAxNjc2YWZhZmRmNjg0
YTRhNGVmMTMxNGVkMjA3NDFjLi45MmM0ZWM3ZDZiMjBiNjg1MDc0NDg1MjRlODE5MTI1MmJlZjQw
NmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oCkBAIC0xMjgsNiArMTI4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGRpZFByb2Nlc3NSdWxlKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSosIFN0cmluZyop
OworICAgIHN0YXRpYyB2b2lkIGFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZShGcmFtZSosIGxvbmcq
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKEZyYW1lKiwgbG9u
ZyopOwogICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5kUmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICBzdGF0aWMgdm9pZCBjb250
aW51ZUFmdGVyUGluZ0xvYWRlcihGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9j
dW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNoZWQoUGFnZSosIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7CkBAIC0yNzMsNiArMjc1LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
dm9pZCBkaWRQcm9jZXNzUnVsZUltcGwoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgU3RyaW5nKik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlTY3JlZW5X
aWR0aE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgbG9uZyopOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMq
LCBsb25nKik7CiAgICAgc3RhdGljIHZvaWQgd2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
OwogICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50
aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9p
ZCBtYXJrUmVzb3VyY2VBc0NhY2hlZEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcik7CkBAIC03NzksNiArNzgzLDI0IEBAIGlubGluZSB2b2lkIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZShGcmFtZSogZnJhbWUs
IFN0cmluCiAjZW5kaWYKIH0KIAoraW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUoRnJhbWUqIGZyYW1lLCBsb25nKiB3aWR0aCkKK3sK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2
b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
ID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgYXBwbHlTY3Jl
ZW5XaWR0aE92ZXJyaWRlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCB3aWR0aCk7CisjZW5kaWYK
K30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhl
aWdodE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwgbG9uZyogaGVpZ2h0KQoreworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5fSUZfTk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAg
aWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50
aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAgICAgICBhcHBseVNjcmVlbkhlaWdodE92ZXJy
aWRlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBoZWlnaHQpOworI2VuZGlmCit9CisKIGlubGlu
ZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRSZXF1ZXN0KEZyYW1lKiBm
cmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0
UmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggNzEyZmE1MWZhODI3ZTcwNjZm
ZTAyMTFkZmE0MjhhMDNiYjI4ODVkMi4uNWYxMjllOTg0OTZkOWYxY2QxYWFjN2Y3ZjhkZDAyYjM3
NDYzNzViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKQEAgLTQ2LDExICs0NiwxMyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCiAj
aW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1
ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAgLTc0LDYgKzc2LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIFBhZ2VBZ2VudFN0YXRlIHsKIHN0YXRpYyBjb25zdCBjaGFyIHBh
Z2VBZ2VudEVuYWJsZWRbXSA9ICJwYWdlQWdlbnRFbmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFy
IHBhZ2VBZ2VudFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkW10gPSAicGFnZUFnZW50U2NyaXB0c1Rv
RXZhbHVhdGVPbkxvYWQiOworc3RhdGljIGNvbnN0IGNoYXIgcGFnZUFnZW50U2NyZWVuV2lkdGhP
dmVycmlkZVtdID0gInBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUiOworc3RhdGljIGNvbnN0
IGNoYXIgcGFnZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGVbXSA9ICJwYWdlQWdlbnRTY3JlZW5I
ZWlnaHRPdmVycmlkZSI7CiB9CiAKIHN0YXRpYyBib29sIGRlY29kZVNoYXJlZEJ1ZmZlcihQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05h
bWUsIFN0cmluZyogcmVzdWx0KQpAQCAtMjY3LDYgKzI3MSw3IEBAIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdB
Z2VudHMsCiAgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFn
ZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2xhc3RTY3JpcHRJZGVudGlmaWVyKDAp
CisgICAgLCBtX29yaWdpbmFsVXNlRml4ZWRMYXlvdXQoZmFsc2UpCiB7CiB9CiAKQEAgLTI4MCw2
ICsyODUsMTEgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgIGRpc2FibGUoJmVycm9yKTsKICAgICBtX2Zyb250ZW5k
ID0gMDsKKyAgICBpZiAobV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZSkgeworICAgICAgICBtYWlu
RnJhbWUoKS0+dmlldygpLT5zZXRGaXhlZExheW91dFNpemUoKm1fb3JpZ2luYWxGaXhlZExheW91
dFNpemUpOworICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5zZXRVc2VGaXhlZExheW91dCht
X29yaWdpbmFsVXNlRml4ZWRMYXlvdXQpOworICAgIH0KKyAgICBub3RpZnlTY3JlZW5TaXplQ2hh
bmdlZCgpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzdG9yZSgpCkBAIC0yOTQs
MTIgKzMwNCwyMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5n
KikKIHsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRF
bmFibGVkLCB0cnVlKTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclBh
Z2VBZ2VudCh0aGlzKTsKKworICAgIC8vIFdoZW4gZW5hYmxpbmcgdGhlIGFnZW50LCBjb29raWUg
dmFsdWVzIGFyZSByZXN0b3JlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgKDAsIDApIG9uZXMu
CisgICAgaW50IHdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihtX3N0YXRlLT5nZXRMb25nKFBhZ2VB
Z2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5XaWR0aE92ZXJyaWRlKSk7CisgICAgaW50IGhlaWdo
dCA9IHN0YXRpY19jYXN0PGludD4obV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFn
ZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGUpKTsKKyAgICBhcHBseUZyYW1lVmlld1NpemVPdmVy
cmlkZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcqKQogewogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oUGFnZUFn
ZW50U3RhdGU6OnBhZ2VBZ2VudEVuYWJsZWQsIGZhbHNlKTsKICAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMtPnNldEluc3BlY3RvclBhZ2VBZ2VudCgwKTsKKworICAgIC8vIFdoZW4gZGlzYWJsaW5n
IHRoZSBhZ2VudCwgY3VycmVudCB2YWx1ZSBvdmVycmlkZXMgYXJlIHJlc2V0IHRvICgwLCAwKS4K
KyAgICBpbnQgY3VycmVudFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihtX3N0YXRlLT5nZXRMb25n
KFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5XaWR0aE92ZXJyaWRlKSk7CisgICAgaW50
IGN1cnJlbnRIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdGUtPmdldExvbmcoUGFnZUFn
ZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbkhlaWdodE92ZXJyaWRlKSk7CisgICAgYXBwbHlGcmFt
ZVZpZXdTaXplT3ZlcnJpZGUoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCAwLCAwKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgU3RyaW5nKiBpZGVudGlmaWVyKQpAQCAt
NTYyLDYgKzU4MiwyNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogICAgIHJlc3VsdHMgPSBz
ZWFyY2hSZXN1bHRzOwogfQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2NyZWVuU2l6
ZU92ZXJyaWRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgaW50IHdpZHRoLCBjb25z
dCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IHN0YXRpYyBsb25nIG1heERpbWVuc2lvbiA9IDEw
MDAwMDAwOworCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8IHdpZHRoID4gbWF4
RGltZW5zaW9uIHx8IGhlaWdodCA+IG1heERpbWVuc2lvbikgeworICAgICAgICAqZXJyb3JTdHJp
bmcgPSBtYWtlU3RyaW5nKCJXaWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZl
LCBub3QgZ3JlYXRlciB0aGFuICIsIFN0cmluZzo6bnVtYmVyKG1heERpbWVuc2lvbikpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlc2UgdHdvIGFsd2F5cyBmaXQgYW4gaW50
LgorICAgIGludCBjdXJyZW50V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdGUtPmdldExv
bmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUpKTsKKyAgICBp
bnQgY3VycmVudEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9zdGF0ZS0+Z2V0TG9uZyhQYWdl
QWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGUpKTsKKworICAgIGlmICh3
aWR0aCA9PSBjdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IGN1cnJlbnRIZWlnaHQpCisgICAgICAg
IHJldHVybjsKKworICAgIGJvb2wgc2hvdWxkTm90aWZ5ID0gYXBwbHlGcmFtZVZpZXdTaXplT3Zl
cnJpZGUoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBp
ZiAoc2hvdWxkTm90aWZ5KQorICAgICAgICBub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCgpOworfQor
CiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZy
YW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBpZiAod29ybGQgIT0g
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCkBAIC02NzcsNiArNzE4LDIwIEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50Ojpsb2FkZXJEZXRhY2hlZEZyb21GcmFtZShEb2N1bWVudExvYWRlciogbG9h
ZGVyKQogICAgICAgICBtX2xvYWRlclRvSWRlbnRpZmllci5yZW1vdmUoaXRlcmF0b3IpOwogfQog
Cit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKGxvbmcq
IHdpZHRoKQoreworICAgIGxvbmcgd2lkdGhPdmVycmlkZSA9IG1fc3RhdGUtPmdldExvbmcoUGFn
ZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUpOworICAgIGlmICh3aWR0
aE92ZXJyaWRlKQorICAgICAgICAqd2lkdGggPSB3aWR0aE92ZXJyaWRlOworfQorCit2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShsb25nKiBoZWlnaHQp
Cit7CisgICAgbG9uZyBoZWlnaHRPdmVycmlkZSA9IG1fc3RhdGUtPmdldExvbmcoUGFnZUFnZW50
U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbkhlaWdodE92ZXJyaWRlKTsKKyAgICBpZiAoaGVpZ2h0T3Zl
cnJpZGUpCisgICAgICAgICpoZWlnaHQgPSBoZWlnaHRPdmVycmlkZTsKK30KKwogUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFt
ZShGcmFtZSogZnJhbWUpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWVPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtNzI3LDYgKzc4Miw0MyBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZv
ckZyYW1lVHJlZShGcmFtZSogZgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgSW5zcGVj
dG9yUGFnZUFnZW50OjphcHBseUZyYW1lVmlld1NpemVPdmVycmlkZShpbnQgY3VycmVudFdpZHRo
LCBpbnQgY3VycmVudEhlaWdodCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIG1fc3Rh
dGUtPnNldExvbmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUs
IHdpZHRoKTsKKyAgICBtX3N0YXRlLT5zZXRMb25nKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRT
Y3JlZW5IZWlnaHRPdmVycmlkZSwgaGVpZ2h0KTsKKworICAgIGlmICh3aWR0aCA9PSBjdXJyZW50
V2lkdGggJiYgaGVpZ2h0ID09IGN1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkgeworICAgICAgICAvLyBUdXJuaW5nIG9mZiB0
aGUgb3ZlcnJpZGVzLgorICAgICAgICBBU1NFUlQobV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZSk7
CisgICAgICAgIG1haW5GcmFtZSgpLT52aWV3KCktPnNldEZpeGVkTGF5b3V0U2l6ZSgqbV9vcmln
aW5hbEZpeGVkTGF5b3V0U2l6ZSk7CisgICAgICAgIG1fb3JpZ2luYWxGaXhlZExheW91dFNpemUu
Y2xlYXIoKTsKKyAgICAgICAgbWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0VXNlRml4ZWRMYXlvdXQo
bV9vcmlnaW5hbFVzZUZpeGVkTGF5b3V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWN1
cnJlbnRXaWR0aCAmJiAhY3VycmVudEhlaWdodCkgeworICAgICAgICAgICAgLy8gVHVybmluZyBv
biB0aGUgb3ZlcnJpZGVzLgorICAgICAgICAgICAgaWYgKCFtX29yaWdpbmFsRml4ZWRMYXlvdXRT
aXplKSB7CisgICAgICAgICAgICAgICAgbV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZSA9IGFkb3B0
UHRyKG5ldyBJbnRTaXplKG1haW5GcmFtZSgpLT52aWV3KCktPmZpeGVkTGF5b3V0U2l6ZSgpKSk7
CisgICAgICAgICAgICAgICAgbV9vcmlnaW5hbFVzZUZpeGVkTGF5b3V0ID0gbWFpbkZyYW1lKCkt
PnZpZXcoKS0+dXNlRml4ZWRMYXlvdXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIG1haW5GcmFtZSgpLT52aWV3KCktPnNldEZpeGVkTGF5b3V0U2l6ZShJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgbWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0VXNlRml4ZWRM
YXlvdXQodHJ1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50Ojpub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCgpCit7CisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gbWFpbkZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgZG9jdW1lbnQtPnN0eWxl
U2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOworICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoZG9jdW1lbnQpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDc5ZDIy
ZTViYzFlODY5OWQzM2EzYjc3OGZmMTNiOWI0YTVkZDUwNzIuLjYzMWI4NDIxZmU4NDg3ZWM5ZmRl
ZDc0NGQ1ZGVlZmZkYjZkMjQ0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmgKQEAgLTk5LDYgKzk5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0
UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKICAg
ICB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBj
b25zdCBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNS
ZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOwogICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjb25zdCBjYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBpc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
Jik7CisgICAgdm9pZCBzZXRTY3JlZW5TaXplT3ZlcnJpZGUoRXJyb3JTdHJpbmcqLCBjb25zdCBp
bnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uIEFQSQogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiwg
RE9NV3JhcHBlcldvcmxkKik7CkBAIC0xMDcsNiArMTA4LDggQEAgcHVibGljOgogICAgIHZvaWQg
ZnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqKTsKICAgICB2b2lkIGZyYW1lRGV0YWNoZWQo
RnJhbWUqKTsKICAgICB2b2lkIGxvYWRlckRldGFjaGVkRnJvbUZyYW1lKERvY3VtZW50TG9hZGVy
Kik7CisgICAgdm9pZCBhcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUobG9uZyopOworICAgIHZvaWQg
YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShsb25nKik7CiAKICAgICAvLyBJbnNwZWN0b3IgQ29u
dHJvbGxlciBBUEkKICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRl
bmQqKTsKQEAgLTEyNCw2ICsxMjcsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSW5zcGVj
dG9yUGFnZUFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBQYWdlKiwgSW5zcGVjdG9yU3RhdGUq
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKKyAgICBib29sIGFwcGx5RnJhbWVWaWV3U2l6ZU92
ZXJyaWRlKGludCwgaW50LCBpbnQsIGludCk7CisgICAgdm9pZCBub3RpZnlTY3JlZW5TaXplQ2hh
bmdlZCgpOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
RnJhbWUoRnJhbWUqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JGcmFtZVRyZWUoRnJhbWUqKTsKQEAgLTEzNiw2ICsxNDEsOCBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8RnJhbWUqLCBTdHJpbmc+IG1fZnJhbWVUb0lkZW50aWZpZXI7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIEZyYW1lKj4gbV9pZGVudGlmaWVyVG9GcmFtZTsKICAgICBIYXNoTWFwPERvY3Vt
ZW50TG9hZGVyKiwgU3RyaW5nPiBtX2xvYWRlclRvSWRlbnRpZmllcjsKKyAgICBPd25QdHI8SW50
U2l6ZT4gbV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZTsKKyAgICBib29sIG1fb3JpZ2luYWxVc2VG
aXhlZExheW91dDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDI5Y2Nm
YjFkZWNhODVjM2QwYWEyMDZmODZmNTBjNGJkYjgyZDg2OWMuLjQ0NTA5NzA3OTk4N2RlNTk2ZGNh
MWUzOTNiNTU5NjNjNzMxZGQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTEx
MjYsNyArMTEyNiw5IEBAIGludCBET01XaW5kb3c6OmlubmVySGVpZ2h0KCkgY29uc3QKICAgICBp
ZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHZpZXctPnZpc2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRlU2Nyb2xsYmFycyAqLyB0
cnVlKS5oZWlnaHQoKSAvIG1fZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCkpOworICAgIGxvbmcgaGVp
Z2h0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KC8qIGluY2x1ZGVTY3JvbGxiYXJzICovIHRy
dWUpLmhlaWdodCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5I
ZWlnaHRPdmVycmlkZShtX2ZyYW1lLCAmaGVpZ2h0KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihoZWlnaHQgLyBtX2ZyYW1lLT5wYWdlWm9vbUZhY3RvcigpKTsKIH0KIAogaW50IERPTVdp
bmRvdzo6aW5uZXJXaWR0aCgpIGNvbnN0CkBAIC0xMTM4LDcgKzExNDAsOSBAQCBpbnQgRE9NV2lu
ZG93Ojppbm5lcldpZHRoKCkgY29uc3QKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0
KC8qIGluY2x1ZGVTY3JvbGxiYXJzICovIHRydWUpLndpZHRoKCkgLyBtX2ZyYW1lLT5wYWdlWm9v
bUZhY3RvcigpKTsKKyAgICBsb25nIHdpZHRoID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KC8q
IGluY2x1ZGVTY3JvbGxiYXJzICovIHRydWUpLndpZHRoKCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUobV9mcmFtZSwgJndpZHRoKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCAvIG1fZnJhbWUtPnBhZ2Vab29tRmFjdG9y
KCkpOwogfQogCiBpbnQgRE9NV2luZG93OjpzY3JlZW5YKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVu
LmNwcAppbmRleCBiMDIxZTVmMTc4YTRmZjU4OGMyYTkxMzgzN2VkNGQ2NzFmMGIxMDY5Li5lMWUx
ZDExNzM4NmY2MjJlZTNjMTkzYjNlNTAyMmM4ODNhOGMyNWIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4u
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIldp
ZGdldC5oIgogCkBAIC02MSwxNCArNjIsMTggQEAgdW5zaWduZWQgU2NyZWVuOjpoZWlnaHQoKSBj
b25zdAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzY3JlZW5SZWN0KG1fZnJhbWUtPnZpZXcoKSkuaGVpZ2h0
KCkpOworICAgIGxvbmcgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8bG9uZz4oc2NyZWVuUmVjdChtX2Zy
YW1lLT52aWV3KCkpLmhlaWdodCgpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFw
cGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUobV9mcmFtZSwgJmhlaWdodCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihoZWlnaHQpOwogfQogCiB1bnNpZ25lZCBTY3JlZW46OndpZHRo
KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2NyZWVuUmVjdChtX2ZyYW1lLT52aWV3KCkpLndp
ZHRoKCkpOworICAgIGxvbmcgd2lkdGggPSBzdGF0aWNfY2FzdDxsb25nPihzY3JlZW5SZWN0KG1f
ZnJhbWUtPnZpZXcoKSkud2lkdGgoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjph
cHBseVNjcmVlbldpZHRoT3ZlcnJpZGUobV9mcmFtZSwgJndpZHRoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHdpZHRoKTsKIH0KIAogdW5zaWduZWQgU2NyZWVuOjpjb2xvckRl
cHRoKCkgY29uc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBhNDEzNmZiNGI3YTE2OWQzOTU5MDZkZWMxMGQwOGU2ZDI5ZjQ4
Nzg0Li4yZDVlNWE1NDYzNjZiYmI5YWY4ZDdiYjZiZGMzNjkyNDFlYTgxYTAxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsMTUgQEAKIDIwMTItMDEtMTggIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9t
aXVtLm9yZz4KIAorICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgc2NyZWVuIHJlc29s
dXRpb24gZW11bGF0aW9uIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2NTMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9vdmVycmlkZS1z
Y3JlZW4tc2l6ZS5odG1sOiBBZGRlZC4KKworMjAxMi0wMS0xOCAgQWxleGFuZGVyIFBhdmxvdiAg
PGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCwg
Zml4IGNsYXNoaW5nIHN2Zy9jdXN0b20vbGlua2luZy1hLTAzLWItdmlld0JveC5zdmcgZXhwZWN0
YXRpb24uCiAKICAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQ6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNj
cmVlbi1zaXplLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvb3Zl
cnJpZGUtc2NyZWVuLXNpemUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1YmM5Y2ZmNTRiNWEx
NmIzNWI0Y2NlNGU2Yjk3ZmU3NmY1ZDkzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDQxIEBACitUZXN0cyB0aGF0IHNjcmVlbiBkaW1lbnNpb24gb3ZlcnJpZGVzIGFmZmVj
dCBtZWRpYSBydWxlcywgYm9keSBkaW1lbnNpb25zLCBhbmQgd2luZG93LnNjcmVlbi4KKworYm9k
eTogNDgweDk2MAord2luZG93LnNjcmVlbjogNDgweDk2MAorYm9keTogOTYweDQ4MAord2luZG93
LnNjcmVlbjogOTYweDQ4MAorCis9PT0gU3R5bGVzID09PQorT3ZlcnJpZGU6IDQ4MHg5NjAKK01h
aW4gc3R5bGU6CitbZXhwYW5kZWRdIAorZWxlbWVudC5zdHlsZSAgeyAoKQorCis9PT09PT09PSBN
YXRjaGVkIENTUyBSdWxlcyA9PT09PT09PQorW2V4cGFuZGVkXSAKK21lZGlhPSJzY3JlZW4iIChv
dmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sKQorQG1lZGlhIChtYXgtZGV2aWNlLWhlaWdodDogOTYw
cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDogNDgwcHgpIChvdmVycmlkZS1zY3JlZW4tc2l6ZS5o
dG1sOjkpCisjbWFpbiAgeyAob3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbDoxMCkKK2JhY2tncm91
bmQ6IGdyZWVuOworCitbZXhwYW5kZWRdIAorZGl2ICB7ICh1c2VyIGFnZW50IHN0eWxlc2hlZXQp
CitkaXNwbGF5OiBibG9jazsKKworCitPdmVycmlkZTogOTYweDQ4MAorTWFpbiBzdHlsZToKK1tl
eHBhbmRlZF0gCitlbGVtZW50LnN0eWxlICB7ICgpCisKKz09PT09PT09IE1hdGNoZWQgQ1NTIFJ1
bGVzID09PT09PT09CitbZXhwYW5kZWRdIAorZGl2ICB7ICh1c2VyIGFnZW50IHN0eWxlc2hlZXQp
CitkaXNwbGF5OiBibG9jazsKKworCitPdmVycmlkZTogMTAwMDAwMDF4OTYwID0+IEVSUk9SCitP
dmVycmlkZTogLTF4OTYwID0+IEVSUk9SCitPdmVycmlkZTogNDgweDEwMDAwMDAxID0+IEVSUk9S
CitPdmVycmlkZTogNDgweC0xID0+IEVSUk9SCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWU1
ZGM3N2NkNzkwMTU2OGRhYjcxNTdhMjEzYTBlZWUxMTM0YjM2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sCkBA
IC0wLDAgKzEsMTYyIEBACis8aHRtbD4KKzxoZWFkPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3Mi
IG1lZGlhPSJzY3JlZW4iPgorQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiA0NzhweCkgYW5kICht
YXgtZGV2aWNlLWhlaWdodDogOTU5cHgpIHsKKyAgICAjbWFpbiB7IGJhY2tncm91bmQ6IHJlZDsg
fQorfQorCitAbWVkaWEgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSBhbmQgKG1heC1kZXZpY2Ut
aGVpZ2h0OiA5NjBweCkgeworICAgICNtYWluIHsgYmFja2dyb3VuZDogZ3JlZW47IH0KK30KKwor
QG1lZGlhIChtaW4tZGV2aWNlLXdpZHRoOiA0ODFweCkgYW5kIChtaW4tZGV2aWNlLWhlaWdodDog
OTYxcHgpIHsKKyAgICAjbWFpbiB7IGJhY2tncm91bmQ6IHllbGxvdzsgfQorfQorCitib2R5IHsK
KyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJpZ2h0OiAwOworICAg
IGJvdHRvbTogMDsKKyAgICBsZWZ0OiAwOworICAgIG1hcmdpbjogMDsKK30KKworPC9zdHlsZT4K
KworPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9l
bGVtZW50cy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGdldFNpemUo
KQoreworICAgIHJldHVybiB3aW5kb3cuc2NyZWVuLndpZHRoICsgIngiICsgd2luZG93LnNjcmVl
bi5oZWlnaHQ7Cit9CisKK2Z1bmN0aW9uIGR1bXBTaXplcyhjb3VudCkKK3sKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiYm9keS1zaXplIiArIGNvdW50KS50ZXh0Q29udGVudCA9ICJib2R5
OiAiICsgZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCArICJ4IiArIGRvY3VtZW50LmJvZHkub2Zm
c2V0SGVpZ2h0OworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JlZW4tc2l6ZSIgKyBj
b3VudCkudGV4dENvbnRlbnQgPSAid2luZG93LnNjcmVlbjogIiArIHdpbmRvdy5zY3JlZW4ud2lk
dGggKyAieCIgKyB3aW5kb3cuc2NyZWVuLmhlaWdodDsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7
CisgICAgdmFyIGV4Y2VlZGVkRGltZW5zaW9uID0gMTAwMDAwMDE7CisgICAgdmFyIG9yaWdpbmFs
U2l6ZTsKKworICAgIGZ1bmN0aW9uIHNhdmVTaXplQ2FsbGJhY2socmVzdWx0KQorICAgIHsKKyAg
ICAgICAgb3JpZ2luYWxTaXplID0gcmVzdWx0LnZhbHVlOworICAgICAgICBpZiAoIW9yaWdpbmFs
U2l6ZSB8fCBvcmlnaW5hbFNpemUuaW5kZXhPZigieCIpID09PSAtMSkKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkUmVzdWx0KCJJbnZhbGlkIG9yaWdpbmFsIHNjcmVlbiBzaXplOiAiICsg
b3JpZ2luYWxTaXplICsgIi4gRXhwZWN0IHJ1bnRpbWUgZmFpbHVyZXMgbGF0ZXIgb24uIik7Cisg
ICAgfQorCisgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgiZ2V0U2l6ZSgpIiwgc2F2
ZVNpemVDYWxsYmFjayk7CisKKyAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiIik7CisgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIj09PSBTdHlsZXMgPT09Iik7CisKKworICAgIG92ZXJy
aWRlQW5kRHVtcERhdGEoNDgwLCA5NjAsIDEsIHN0ZXAxKTsKKworICAgIGZ1bmN0aW9uIHN0ZXAx
KCkKKyAgICB7CisgICAgICAgIG92ZXJyaWRlQW5kRHVtcERhdGEoOTYwLCA0ODAsIDIsIHN0ZXAy
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwMigpCisgICAgeworICAgICAgICBhcHBseU92
ZXJyaWRlKGV4Y2VlZGVkRGltZW5zaW9uLCA5NjAsIHN0ZXAzKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzdGVwMygpCisgICAgeworICAgICAgICBhcHBseU92ZXJyaWRlKC0xLCA5NjAsIHN0ZXA0
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwNCgpCisgICAgeworICAgICAgICBhcHBseU92
ZXJyaWRlKDQ4MCwgZXhjZWVkZWREaW1lbnNpb24sIHN0ZXA1KTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzdGVwNSgpCisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjaygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgIH0K
KyAgICAgICAgYXBwbHlPdmVycmlkZSg0ODAsIC0xLCBzdGVwNik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc3RlcDYoKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY29tcGFyZVNpemVDYWxsYmFj
ayhyZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHNjcmVl
biBzaXplIHJlcG9ydGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBvbmUuCisgICAgICAg
ICAgICBpZiAocmVzdWx0LnZhbHVlICE9PSBvcmlnaW5hbFNpemUpCisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk9yaWdpbmFsIHNpemUgIiArIG9yaWdpbmFsU2l6ZSAr
ICIgbm90IHJlc3RvcmVkLCBmb3VuZDogIiArIHJlc3VsdC52YWx1ZSk7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gb3ZlcnJpZGVDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuZXZhbHVhdGVJblBhZ2UoImdldFNpemUoKSIsIGNvbXBhcmVTaXplQ2FsbGJhY2spOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRGlzYWJsZSBvdmVycmlkZXMuCisgICAgICAgIFBhZ2VBZ2Vu
dC5zZXRTY3JlZW5TaXplT3ZlcnJpZGUoMCwgMCwgb3ZlcnJpZGVDYWxsYmFjayk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gYXBwbHlPdmVycmlkZSh3aWR0aCwgaGVpZ2h0LCB1c2VyQ2FsbGJhY2sp
CisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJPdmVycmlkZTogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIiA9PiBFUlJPUiIpOwor
ICAgICAgICAgICAgdXNlckNhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgUGFnZUFnZW50
LnNldFNjcmVlblNpemVPdmVycmlkZSh3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjayk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gb3ZlcnJpZGVBbmREdW1wRGF0YSh3aWR0aCwgaGVpZ2h0LCBjb3VudCwg
Y2FsbGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlvbiBzZWxlY3RDYWxsYmFjaygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNYWluIHN0eWxlOiIp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5kdW1wU2VsZWN0ZWRFbGVtZW50U3R5bGVzKHRy
dWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBkdW1wU2l6ZXNDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb3VudCA9PT0gMSkKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbGVj
dE5vZGVBbmRXYWl0Rm9yU3R5bGVzKCJtYWluIiwgc2VsZWN0Q2FsbGJhY2spOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHNlbGVjdENhbGxiYWNrKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBhcHBseUNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgiZHVtcFNpemVzKCIgKyBjb3VudCArICIpIiwg
ZHVtcFNpemVzQ2FsbGJhY2spOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQoIk92ZXJyaWRlOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOworICAgICAgICBh
cHBseU92ZXJyaWRlKHdpZHRoLCBoZWlnaHQsIGFwcGx5Q2FsbGJhY2spOworICAgIH0KK30KKzwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD4KK1Rlc3Rz
IHRoYXQgc2NyZWVuIGRpbWVuc2lvbiBvdmVycmlkZXMgYWZmZWN0IG1lZGlhIHJ1bGVzLCBib2R5
IGRpbWVuc2lvbnMsIGFuZCB3aW5kb3cuc2NyZWVuLgorPC9wPgorCis8ZGl2IGlkPSJtYWluIj48
L2Rpdj4KKzxkaXYgaWQ9ImJvZHktc2l6ZTEiPjwvZGl2PgorPGRpdiBpZD0ic2NyZWVuLXNpemUx
Ij48L2Rpdj4KKzxkaXYgaWQ9ImJvZHktc2l6ZTIiPjwvZGl2PgorPGRpdiBpZD0ic2NyZWVuLXNp
emUyIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123119</attachid>
            <date>2012-01-19 06:15:39 -0800</date>
            <delta_ts>2012-01-19 08:07:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76532-20120119181537.patch</filename>
            <type>text/plain</type>
            <size>29818</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4Mzc2MzI5MGYwOTQw
ZGQ0MDhiNDgwYzdjMmM5NGFhMzA0MjMzNC4uZTJmMDAxNDU0MTc5NWU5NGQ4YjMyODFhZTNiZTM2
ZTBjNDVhYjM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAxLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHNjcmVlbiByZXNvbHV0aW9uIGVtdWxhdGlvbiBiYWNrZW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBlbXVsYXRpb24g
YWZmZWN0cyBbbWluLXxtYXgtXWRldmljZS0od2lkdGh8aGVpZ2h0KSBtZWRpYSBxdWVyaWVzLCB3
aW5kb3cuc2NyZWVuLih3aWR0aHxoZWlnaHQpLAorICAgICAgICBhbmQgd2luZG93LmlubmVyKFdp
ZHRofEhlaWdodCkuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL3N0eWxlcy9vdmVycmlkZS1z
Y3JlZW4tc2l6ZS5odG1sCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0
b3JDU1NBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRT
ZWxlY3RvclByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpz
dG9wU2VsZWN0b3JQcm9maWxlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OndpbGxNYXRjaFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmRpZE1hdGNoUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6
d2lsbFByb2Nlc3NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpk
aWRQcm9jZXNzUnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFw
cGx5U2NyZWVuV2lkdGhPdmVycmlkZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlSW1wbCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhl
aWdodE92ZXJyaWRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Y2xlYXJGcm9udGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JlZW5TaXplT3ZlcnJpZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVNjcmVlbkhlaWdo
dE92ZXJyaWRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c3RvcmVT
Y3JlZW5TaXplT3ZlcnJpZGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6dXBkYXRlRnJhbWVWaWV3Rml4ZWRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50Ojpub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6aW5uZXJIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV2luZG93Ojppbm5lcldpZHRoKToKKyAgICAgICAgKiBwYWdlL1NjcmVlbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW46OmhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JlZW46OndpZHRoKToKKwogMjAxMi0wMS0xOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBkcm9wIGV2ZW50IGlzbid0IGZpcmVkIGZvciBjb250ZW50RWRpdGFi
bGUgaW4gZWRpdCBkcmFnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHAKaW5kZXggYjY2ODZmZDg4YzBhZTUzMjk1M2MyY2Y3YmIxN2NmYjhmYTczNjM0NS4uYzRiZTQz
NjViMTVkZjE1YmI3NTY3NGM5NTAxZmE2Njg3YzMzNWFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcApAQCAtMzMyLDcgKzMzMiw5IEBAIHN0YXRpYyBib29s
IGRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBGCiAgICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgICAgIFJlbmRlclN0eWxlKiByb290U3R5
bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCk7
CiAgICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVl
LCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBzdHlsZSwgcm9vdFN0eWxlLCBs
ZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSwgbGVu
Z3RoLCBvcCk7CisgICAgICAgIGxvbmcgaGVpZ2h0ID0gc2cuaGVpZ2h0KCk7CisgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShmcmFtZSwg
JmhlaWdodCk7CisgICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRv
Y3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBzdHlsZSwgcm9vdFN0eWxlLCBsZW5ndGgpICYmIGNv
bXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCksIGxlbmd0aCwgb3ApOwogICAgIH0K
ICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNlLWhlaWdodCkKICAgICAvLyBhc3N1bWUgaWYgd2Ug
aGF2ZSBhIGRldmljZSwgYXNzdW1lIG5vbi16ZXJvCkBAIC0zNDUsNyArMzQ3LDkgQEAgc3RhdGlj
IGJvb2wgZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRnIKICAgICAgICAgRmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFt
ZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKICAgICAgICAgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5
bGUoKTsKICAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgo
dmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5
bGUsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4oc2cud2lkdGgoKSks
IGxlbmd0aCwgb3ApOworICAgICAgICBsb25nIHdpZHRoID0gc2cud2lkdGgoKTsKKyAgICAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUoZnJhbWUs
ICZ3aWR0aCk7CisgICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRv
Y3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBzdHlsZSwgcm9vdFN0eWxlLCBsZW5ndGgpICYmIGNv
bXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgbGVuZ3RoLCBvcCk7CiAgICAgfQog
ICAgIC8vICh7LG1pbi0sbWF4LX1kZXZpY2Utd2lkdGgpCiAgICAgLy8gYXNzdW1lIGlmIHdlIGhh
dmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVybwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCmluZGV4IDEyNmQ5ZWU1ZWNiMmEwYjZhYTZjZGMwMjlhYWViMzIxYWJlZmYyOGEu
LjhjMzllOWRjMTk0MGE3YjYzOTRmMDE2NzRiMjJjMzU5ZTg5MWJkYTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTMwOCw2ICszMDgsMTUgQEAKICAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJodG1sIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkhUTUwgY29udGVudCB0byBzZXQuIiAgfQogICAgICAgICAgICAgICAgIF0sCiAgICAg
ICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgIm5hbWUiOiAic2V0U2NyZWVuU2l6ZU92ZXJyaWRlIiwKKyAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3ZlcnJpZGVzIHRoZSB2YWx1ZXMgb2Ygd2luZG93
LnNjcmVlbi53aWR0aCwgd2luZG93LnNjcmVlbi5oZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3
aW5kb3cuaW5uZXJIZWlnaHQsIGFuZCBcImRldmljZS13aWR0aFwiL1wiZGV2aWNlLWhlaWdodFwi
LXJlbGF0ZWQgQ1NTIG1lZGlhIHF1ZXJ5IHJlc3VsdHMiLAorICAgICAgICAgICAgICAgICJwYXJh
bWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIndpZHRoIiwgInR5cGUi
OiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJPdmVycmlkaW5nIHdpZHRoIHZhbHVlIGluIHBp
eGVscyAobWluaW11bSAwLCBtYXhpbXVtIDEwMDAwMDAwKS4gMCBkaXNhYmxlcyB0aGUgb3ZlcnJp
ZGUuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiT3ZlcnJpZGluZyBoZWlnaHQgdmFsdWUgaW4gcGl4
ZWxzIChtaW5pbXVtIDAsIG1heGltdW0gMTAwMDAwMDApLiAwIGRpc2FibGVzIHRoZSBvdmVycmlk
ZS4iIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVl
CiAgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA1OTYwMWI4
OTc5MDIyMGJmNGU5M2EzOWQzOWYzYmQ1MDg0M2JiMGEyLi5lYmU5MGI1NzcxNGM1ZTg1MjllZjU4
YTdlMzljNWFmNDFiZjJjYzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTIzNSw2ICsyMzUsNyBAQCBJbnNwZWN0b3JDU1NBZ2VudDo6
SW5zcGVjdG9yQ1NTQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50
cywgSQogICAgICwgbV9sYXN0U3R5bGVJZCgxKQogewogICAgIG1fZG9tQWdlbnQtPnNldERPTUxp
c3RlbmVyKHRoaXMpOworICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ1NT
QWdlbnQodGhpcyk7CiB9CiAKIEluc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NTQWdlbnQo
KQpAQCAtNTI0LDcgKzUyNSw2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRl
ZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yCiB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpzdGFydFNlbGVjdG9yUHJvZmlsZXIoRXJyb3JTdHJpbmcqKQogewogICAg
IG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSA9IGFkb3B0UHRyKG5ldyBTZWxlY3RvclByb2ZpbGUo
KSk7Ci0gICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2VudCh0aGlz
KTsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9m
aWxpbmcsIHRydWUpOwogfQogCkBAIC01MzgsNyArNTM4LDYgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3Bl
Y3Rvck8KICAgICBpZiAoIW1fc3RhdGUtPmdldEJvb2xlYW4oQ1NTQWdlbnRTdGF0ZTo6aXNTZWxl
Y3RvclByb2ZpbGluZykpCiAgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcsIGZhbHNlKTsKLSAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvckNTU0FnZW50KDApOwogICAgIGlmIChtX2Zyb250
ZW5kICYmIHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IG1fY3VycmVudFNlbGVjdG9yUHJvZmls
ZS0+dG9JbnNwZWN0b3JPYmplY3QoKTsKICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUuY2xl
YXIoKTsKQEAgLTU0NiwyMiArNTQ1LDI2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0b3BT
ZWxlY3RvclByb2ZpbGVySW1wbChFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPCiAKIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBy
dWxlKQogewotICAgIG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZS0+c3RhcnRTZWxlY3RvcihydWxl
KTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRT
ZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3IocnVsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmRpZE1hdGNoUnVsZShib29sIG1hdGNoZWQpCiB7Ci0gICAgbV9jdXJyZW50U2Vs
ZWN0b3JQcm9maWxlLT5jb21taXRTZWxlY3RvcihtYXRjaGVkKTsKKyAgICBpZiAobV9jdXJyZW50
U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNvbW1p
dFNlbGVjdG9yKG1hdGNoZWQpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsUHJv
Y2Vzc1J1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxlKQogewotICAgIG1fY3VycmVudFNlbGVj
dG9yUHJvZmlsZS0+c3RhcnRTZWxlY3RvcihydWxlKTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0
b3JQcm9maWxlKQorICAgICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0
b3IocnVsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFByb2Nlc3NSdWxlKCkK
IHsKLSAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNvbW1pdFNlbGVjdG9yVGltZSgpOwor
ICAgIGlmIChtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUpCisgICAgICAgIG1fY3VycmVudFNlbGVj
dG9yUHJvZmlsZS0+Y29tbWl0U2VsZWN0b3JUaW1lKCk7CiB9CiAKIEluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVl
dChFbGVtZW50KiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAppbmRleCBiMjNjOWU1YmIyMjNhMmVkNGM5OWU4
NTk1NjVlNTJkMzRiNDFiYWQzLi5jNTAxMDk2YTlhMmIwNzQ0NWY3YzUxNGI0N2RlZGQxYTQwODZm
NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmNwcApAQCAtNDg1LDYgKzQ4NSwxOCBAQCB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6YXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50
cyogaQogICAgICAgICByZXNvdXJjZUFnZW50LT5hcHBseVVzZXJBZ2VudE92ZXJyaWRlKHVzZXJB
Z2VudCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldp
ZHRoT3ZlcnJpZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IGxvbmcqIHdpZHRoKQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9
IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdl
QWdlbnQtPmFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZSh3aWR0aCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlSW1wbChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBsb25nKiBoZWlnaHQpCit7CisgICAg
aWYgKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+
aW5zcGVjdG9yUGFnZUFnZW50KCkpCisgICAgICAgIHBhZ2VBZ2VudC0+YXBwbHlTY3JlZW5IZWln
aHRPdmVycmlkZShoZWlnaHQpOworfQorCiB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
d2lsbFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdl
bnRzLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkKIHsKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2Vu
dCA9IGluc3RydW1lbnRpbmdBZ2VudHMtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApp
bmRleCA3Mzk4OWE0NDAxNjc2YWZhZmRmNjg0YTRhNGVmMTMxNGVkMjA3NDFjLi45MmM0ZWM3ZDZi
MjBiNjg1MDc0NDg1MjRlODE5MTI1MmJlZjQwNmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCkBAIC0xMjgsNiArMTI4LDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRpZFByb2Nlc3NSdWxlKGNvbnN0IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlVc2VyQWdl
bnRPdmVycmlkZShGcmFtZSosIFN0cmluZyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5U2NyZWVu
V2lkdGhPdmVycmlkZShGcmFtZSosIGxvbmcqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVNjcmVl
bkhlaWdodE92ZXJyaWRlKEZyYW1lKiwgbG9uZyopOwogICAgIHN0YXRpYyB2b2lkIHdpbGxTZW5k
UmVxdWVzdChGcmFtZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlKTsKICAgICBzdGF0aWMgdm9pZCBjb250aW51ZUFmdGVyUGluZ0xvYWRlcihGcmFtZSosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNl
QXNDYWNoZWQoUGFnZSosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC0yNzMsNiArMjc1
LDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRQcm9jZXNzUnVsZUltcGwoY29uc3Qg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7CiAKICAgICBzdGF0aWMgdm9pZCBhcHBs
eVVzZXJBZ2VudE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgU3RyaW5nKik7Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5n
QWdlbnRzKiwgbG9uZyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJp
ZGVJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCBsb25nKik7CiAgICAgc3RhdGljIHZvaWQgd2ls
bFNlbmRSZXF1ZXN0SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlQWZ0
ZXJQaW5nTG9hZGVySW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKICAgICBzdGF0aWMgdm9pZCBtYXJrUmVzb3VyY2VBc0NhY2hlZEltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CkBAIC03NzksNiAr
NzgzLDI0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlVc2Vy
QWdlbnRPdmVycmlkZShGcmFtZSogZnJhbWUsIFN0cmluCiAjZW5kaWYKIH0KIAoraW5saW5lIHZv
aWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUoRnJh
bWUqIGZyYW1lLCBsb25nKiB3aWR0aCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZB
U1RfUkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5n
QWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1l
KGZyYW1lKSkKKyAgICAgICAgYXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlSW1wbChpbnN0cnVtZW50
aW5nQWdlbnRzLCB3aWR0aCk7CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKEZyYW1lKiBmcmFtZSwgbG9u
ZyogaGVpZ2h0KQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgRkFTVF9SRVRVUk5fSUZf
Tk9fRlJPTlRFTkRTKHZvaWQoKSk7CisgICAgaWYgKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3Ry
dW1lbnRpbmdBZ2VudHMgPSBpbnN0cnVtZW50aW5nQWdlbnRzRm9yRnJhbWUoZnJhbWUpKQorICAg
ICAgICBhcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlSW1wbChpbnN0cnVtZW50aW5nQWdlbnRzLCBo
ZWlnaHQpOworI2VuZGlmCit9CisKIGlubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbFNlbmRSZXF1ZXN0KEZyYW1lKiBmcmFtZSwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAKaW5kZXggZTY4Y2Y4ZjY2OWJjZjFiYzE1YjAyMWYzODdlOWRlOTkzZDliNDFkNy4uOGI5Y2M1
YTY4YmY0YWRjOWFiMDQxNjYyNGM2Y2I3ZTVlM2EzZDk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTQ3LDExICs0NywxMyBAQAog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSWRlbnRpZmllcnNGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKQEAg
LTc1LDYgKzc3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFBhZ2VBZ2VudFN0
YXRlIHsKIHN0YXRpYyBjb25zdCBjaGFyIHBhZ2VBZ2VudEVuYWJsZWRbXSA9ICJwYWdlQWdlbnRF
bmFibGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIHBhZ2VBZ2VudFNjcmlwdHNUb0V2YWx1YXRlT25M
b2FkW10gPSAicGFnZUFnZW50U2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQiOworc3RhdGljIGNvbnN0
IGNoYXIgcGFnZUFnZW50U2NyZWVuV2lkdGhPdmVycmlkZVtdID0gInBhZ2VBZ2VudFNjcmVlbldp
ZHRoT3ZlcnJpZGUiOworc3RhdGljIGNvbnN0IGNoYXIgcGFnZUFnZW50U2NyZWVuSGVpZ2h0T3Zl
cnJpZGVbXSA9ICJwYWdlQWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSI7CiB9CiAKIHN0YXRpYyBi
b29sIGRlY29kZVNoYXJlZEJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBj
b25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIFN0cmluZyogcmVzdWx0KQpAQCAtMjY4LDYg
KzI3Miw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsCiAgICAgLCBtX2luamVjdGVkU2NyaXB0
TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAg
LCBtX2xhc3RTY3JpcHRJZGVudGlmaWVyKDApCisgICAgLCBtX29yaWdpbmFsVXNlRml4ZWRMYXlv
dXQoZmFsc2UpCiB7CiB9CiAKQEAgLTI4MSw2ICsyODYsMTEgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmNsZWFyRnJvbnRlbmQoKQogICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgIGRpc2Fi
bGUoJmVycm9yKTsKICAgICBtX2Zyb250ZW5kID0gMDsKKyAgICBpZiAobV9vcmlnaW5hbEZpeGVk
TGF5b3V0U2l6ZSkgeworICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5zZXRGaXhlZExheW91
dFNpemUoKm1fb3JpZ2luYWxGaXhlZExheW91dFNpemUpOworICAgICAgICBtYWluRnJhbWUoKS0+
dmlldygpLT5zZXRVc2VGaXhlZExheW91dChtX29yaWdpbmFsVXNlRml4ZWRMYXlvdXQpOworICAg
IH0KKyAgICBub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCgpOwogfQogCiB2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6cmVzdG9yZSgpCkBAIC0yOTUsMTIgKzMwNSwyMSBAQCB2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nKikKIHsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRFbmFibGVkLCB0cnVlKTsKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclBhZ2VBZ2VudCh0aGlzKTsKKworICAgIC8vIFdoZW4g
ZW5hYmxpbmcgdGhlIGFnZW50LCBvdmVycmlkZSB2YWx1ZXMgYXJlIHJlc3RvcmVkIGludG8gdGhl
IEZyYW1lVmlldy4KKyAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdGUtPmdl
dExvbmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUpKTsKKyAg
ICBpbnQgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihtX3N0YXRlLT5nZXRMb25nKFBhZ2VBZ2Vu
dFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSkpOworICAgIHVwZGF0ZUZyYW1l
Vmlld0ZpeGVkTGF5b3V0KHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyopCiB7CiAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihQ
YWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50RW5hYmxlZCwgZmFsc2UpOwogICAgIG1faW5zdHJ1bWVu
dGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yUGFnZUFnZW50KDApOworCisgICAgLy8gV2hlbiBkaXNh
YmxpbmcgdGhlIGFnZW50LCByZXNldCB0aGUgb3ZlcnJpZGUgdmFsdWVzLgorICAgIHVwZGF0ZUZy
YW1lVmlld0ZpeGVkTGF5b3V0KDAsIDApOworICAgIHN0b3JlU2NyZWVuU2l6ZU92ZXJyaWRlcygw
LCAwKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVP
bkxvYWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgU3RyaW5nKiBpZGVudGlm
aWVyKQpAQCAtNTc4LDYgKzU5NywyOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RG9j
dW1lbnRDb250ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaQogICAgIGVk
aXRvci5wYXRjaERvY3VtZW50KGh0bWwpOwogfQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
c2V0U2NyZWVuU2l6ZU92ZXJyaWRlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgaW50
IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KQoreworICAgIGNvbnN0IHN0YXRpYyBsb25nIG1heERp
bWVuc2lvbiA9IDEwMDAwMDAwOworCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwIHx8
IHdpZHRoID4gbWF4RGltZW5zaW9uIHx8IGhlaWdodCA+IG1heERpbWVuc2lvbikgeworICAgICAg
ICAqZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJXaWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyBtdXN0
IGJlIHBvc2l0aXZlLCBub3QgZ3JlYXRlciB0aGFuICIsIFN0cmluZzo6bnVtYmVyKG1heERpbWVu
c2lvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlc2UgdHdvIGFsd2F5
cyBmaXQgYW4gaW50LgorICAgIGludCBjdXJyZW50V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
c3RhdGUtPmdldExvbmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJp
ZGUpKTsKKyAgICBpbnQgY3VycmVudEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9zdGF0ZS0+
Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGUpKTsK
KworICAgIGlmICh3aWR0aCA9PSBjdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IGN1cnJlbnRIZWln
aHQpCisgICAgICAgIHJldHVybjsKKworICAgIHVwZGF0ZUZyYW1lVmlld0ZpeGVkTGF5b3V0KHdp
ZHRoLCBoZWlnaHQpOworICAgIGJvb2wgc2hvdWxkTm90aWZ5ID0gc3RvcmVTY3JlZW5TaXplT3Zl
cnJpZGVzKHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChzaG91bGROb3RpZnkpCisgICAgICAgIG5v
dGlmeVNjcmVlblNpemVDaGFuZ2VkKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpk
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQq
IHdvcmxkKQogewogICAgIGlmICh3b3JsZCAhPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKQEAg
LTY5Myw2ICs3MzQsMjAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlckRldGFjaGVk
RnJvbUZyYW1lKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fbG9hZGVyVG9JZGVu
dGlmaWVyLnJlbW92ZShpdGVyYXRvcik7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojph
cHBseVNjcmVlbldpZHRoT3ZlcnJpZGUobG9uZyogd2lkdGgpCit7CisgICAgbG9uZyB3aWR0aE92
ZXJyaWRlID0gbV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVu
V2lkdGhPdmVycmlkZSk7CisgICAgaWYgKHdpZHRoT3ZlcnJpZGUpCisgICAgICAgICp3aWR0aCA9
IHdpZHRoT3ZlcnJpZGU7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseVNjcmVl
bkhlaWdodE92ZXJyaWRlKGxvbmcqIGhlaWdodCkKK3sKKyAgICBsb25nIGhlaWdodE92ZXJyaWRl
ID0gbV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVpZ2h0
T3ZlcnJpZGUpOworICAgIGlmIChoZWlnaHRPdmVycmlkZSkKKyAgICAgICAgKmhlaWdodCA9IGhl
aWdodE92ZXJyaWRlOworfQorCiBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CkBAIC03NDMsNiArNzk4LDQ1IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnN0b3JlU2NyZWVuU2l6
ZU92ZXJyaWRlcyhpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaW50IG9sZFdpZHRoID0g
c3RhdGljX2Nhc3Q8aW50PihtX3N0YXRlLT5nZXRMb25nKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdl
bnRTY3JlZW5XaWR0aE92ZXJyaWRlKSk7CisgICAgaW50IG9sZEhlaWdodCA9IHN0YXRpY19jYXN0
PGludD4obV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVp
Z2h0T3ZlcnJpZGUpKTsKKworICAgIG1fc3RhdGUtPnNldExvbmcoUGFnZUFnZW50U3RhdGU6OnBh
Z2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUsIHdpZHRoKTsKKyAgICBtX3N0YXRlLT5zZXRMb25n
KFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSwgaGVpZ2h0KTsK
KworICAgIHJldHVybiBvbGRXaWR0aCAhPSB3aWR0aCB8fCBvbGRIZWlnaHQgIT0gaGVpZ2h0Owor
fQorCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6dXBkYXRlRnJhbWVWaWV3Rml4ZWRMYXlvdXQo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkgewor
ICAgICAgICBpZiAobV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZSkgeworICAgICAgICAgICAgLy8g
VHVybmluZyBvZmYgZXhpc3Rpbmcgb3ZlcnJpZGVzIChuby1vcCBvdGhlcndpc2UpIC0gcmV2ZXJ0
IHRoZSBhZmZlY3RlZCBGcmFtZVZpZXcgdG8gdGhlIHJlbWVtYmVyZWQgZml4ZWQgbGF5b3V0IHNl
dHRpbmdzLgorICAgICAgICAgICAgbWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0Rml4ZWRMYXlvdXRT
aXplKCptX29yaWdpbmFsRml4ZWRMYXlvdXRTaXplKTsKKyAgICAgICAgICAgIG1fb3JpZ2luYWxG
aXhlZExheW91dFNpemUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1haW5GcmFtZSgpLT52aWV3KCkt
PnNldFVzZUZpeGVkTGF5b3V0KG1fb3JpZ2luYWxVc2VGaXhlZExheW91dCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fb3JpZ2luYWxGaXhlZExheW91dFNpemUpIHsK
KyAgICAgICAgICAgIC8vIFR1cm5pbmcgb24gdGhlIG92ZXJyaWRlcyAobm9uZSBjdXJyZW50bHkg
ZXhpc3QpIC0gcmVtZW1iZXIgZXhpc3RpbmcgZml4ZWQgbGF5b3V0IGZvciB0aGUgYWZmZWN0ZWQg
RnJhbWVWaWV3LgorICAgICAgICAgICAgbV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZSA9IGFkb3B0
UHRyKG5ldyBJbnRTaXplKG1haW5GcmFtZSgpLT52aWV3KCktPmZpeGVkTGF5b3V0U2l6ZSgpKSk7
CisgICAgICAgICAgICBtX29yaWdpbmFsVXNlRml4ZWRMYXlvdXQgPSBtYWluRnJhbWUoKS0+dmll
dygpLT51c2VGaXhlZExheW91dCgpOworICAgICAgICB9CisKKyAgICAgICAgbWFpbkZyYW1lKCkt
PnZpZXcoKS0+c2V0Rml4ZWRMYXlvdXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAg
ICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5zZXRVc2VGaXhlZExheW91dCh0cnVlKTsKKyAgICB9
Cit9CisKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCgp
Cit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbWFpbkZyYW1lKCktPmRvY3VtZW50KCk7Cisg
ICAgZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkp
OworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQo
ZG9jdW1lbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5oCmluZGV4IGE2N2E4MDcwNjEwOTBhMTk1MWVjYjIwYTZkNTczOWRkZjQyNzdiNjQuLjYy
ZmRiY2RmNzlmZTlhNzZhMDg0MjZhZWVmZDU5OWMyNTU1NWJjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29u
c3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBv
cHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKICAgICB2b2lkIHNlYXJj
aEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY29u
c3QgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogY29uc3QgaXNSZWdleCwgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiYpOwogICAgIHZvaWQgc2V0RG9jdW1lbnRDb250ZW50KEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGh0bWwpOworICAgIHZvaWQgc2V0
U2NyZWVuU2l6ZU92ZXJyaWRlKEVycm9yU3RyaW5nKiwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBp
bnQgaGVpZ2h0KTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKICAgICB2
b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCop
OwpAQCAtMTA4LDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKERv
Y3VtZW50TG9hZGVyKik7CiAgICAgdm9pZCBmcmFtZURldGFjaGVkKEZyYW1lKik7CiAgICAgdm9p
ZCBsb2FkZXJEZXRhY2hlZEZyb21GcmFtZShEb2N1bWVudExvYWRlciopOworICAgIHZvaWQgYXBw
bHlTY3JlZW5XaWR0aE92ZXJyaWRlKGxvbmcqKTsKKyAgICB2b2lkIGFwcGx5U2NyZWVuSGVpZ2h0
T3ZlcnJpZGUobG9uZyopOwogCiAgICAgLy8gSW5zcGVjdG9yIENvbnRyb2xsZXIgQVBJCiAgICAg
dmlydHVhbCB2b2lkIHNldEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7CkBAIC0xMjUsNiAr
MTI4LDkgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudChJbnN0
cnVtZW50aW5nQWdlbnRzKiwgUGFnZSosIEluc3BlY3RvclN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKik7CisgICAgYm9vbCBzdG9yZVNjcmVlblNpemVPdmVycmlkZXMoaW50LCBpbnQpOwor
ICAgIHZvaWQgdXBkYXRlRnJhbWVWaWV3Rml4ZWRMYXlvdXQoaW50LCBpbnQpOworICAgIHZvaWQg
bm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQoKTsKIAogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CkBAIC0xMzcsNiArMTQz
LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPEZyYW1lKiwgU3RyaW5nPiBtX2ZyYW1lVG9JZGVu
dGlmaWVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBGcmFtZSo+IG1faWRlbnRpZmllclRvRnJhbWU7
CiAgICAgSGFzaE1hcDxEb2N1bWVudExvYWRlciosIFN0cmluZz4gbV9sb2FkZXJUb0lkZW50aWZp
ZXI7CisgICAgT3duUHRyPEludFNpemU+IG1fb3JpZ2luYWxGaXhlZExheW91dFNpemU7CisgICAg
Ym9vbCBtX29yaWdpbmFsVXNlRml4ZWRMYXlvdXQ7CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAppbmRleCBhY2IyMmFmMDFjZDdiYzU5ZTRiOTE5YmRmYzNjZTExNDRjMmUyNTljLi4x
YWI5ODdiOWNiNmE0MWFhMzVlM2JkYmQwMmU5MzIzMjg5NTIxZjE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCkBAIC0xMTM0LDcgKzExMzQsOSBAQCBpbnQgRE9NV2luZG93Ojppbm5lckhl
aWdodCgpIGNvbnN0CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoLyogaW5j
bHVkZVNjcm9sbGJhcnMgKi8gdHJ1ZSkuaGVpZ2h0KCkgLyBtX2ZyYW1lLT5wYWdlWm9vbUZhY3Rv
cigpKTsKKyAgICBsb25nIGhlaWdodCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgvKiBpbmNs
dWRlU2Nyb2xsYmFycyAqLyB0cnVlKS5oZWlnaHQoKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUobV9mcmFtZSwgJmhlaWdodCk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0IC8gbV9mcmFtZS0+cGFnZVpvb21GYWN0b3Io
KSk7CiB9CiAKIGludCBET01XaW5kb3c6OmlubmVyV2lkdGgoKSBjb25zdApAQCAtMTE0Niw3ICsx
MTQ4LDkgQEAgaW50IERPTVdpbmRvdzo6aW5uZXJXaWR0aCgpIGNvbnN0CiAgICAgaWYgKCF2aWV3
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZpZXct
PnZpc2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRlU2Nyb2xsYmFycyAqLyB0cnVlKS53aWR0aCgp
IC8gbV9mcmFtZS0+cGFnZVpvb21GYWN0b3IoKSk7CisgICAgbG9uZyB3aWR0aCA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRlU2Nyb2xsYmFycyAqLyB0cnVlKS53aWR0aCgpOwor
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKG1f
ZnJhbWUsICZ3aWR0aCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2lkdGggLyBtX2Zy
YW1lLT5wYWdlWm9vbUZhY3RvcigpKTsKIH0KIAogaW50IERPTVdpbmRvdzo6c2NyZWVuWCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAKaW5kZXggYjAyMWU1ZjE3OGE0ZmY1ODhjMmE5MTM4Mzdl
ZDRkNjcxZjBiMTA2OS4uZTFlMWQxMTczODZmNjIyZWUzYzE5M2IzZTUwMjJjODgzYThjMjViMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3Jl
ZW4uaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKIApAQCAtNjEsMTQgKzYyLDE4IEBAIHVuc2lnbmVk
IFNjcmVlbjo6aGVpZ2h0KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2NyZWVuUmVjdChtX2Zy
YW1lLT52aWV3KCkpLmhlaWdodCgpKTsKKyAgICBsb25nIGhlaWdodCA9IHN0YXRpY19jYXN0PGxv
bmc+KHNjcmVlblJlY3QobV9mcmFtZS0+dmlldygpKS5oZWlnaHQoKSk7CisgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlKG1fZnJhbWUsICZoZWln
aHQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVpZ2h0KTsKIH0KIAogdW5z
aWduZWQgU2NyZWVuOjp3aWR0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNjcmVlblJlY3Qo
bV9mcmFtZS0+dmlldygpKS53aWR0aCgpKTsKKyAgICBsb25nIHdpZHRoID0gc3RhdGljX2Nhc3Q8
bG9uZz4oc2NyZWVuUmVjdChtX2ZyYW1lLT52aWV3KCkpLndpZHRoKCkpOworICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRlKG1fZnJhbWUsICZ3aWR0
aCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih3aWR0aCk7CiB9CiAKIHVuc2ln
bmVkIFNjcmVlbjo6Y29sb3JEZXB0aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjEyY2VlNGVmMTAwNjQ2Njdk
MGY1ZjU5ZTRkNWVjYjkxMDkxMGJiZC4uYjYyNTc4ODIzZWMxYzk0ZTE2ODNlNTEyNjg5MTczYTBm
ODlkZjA4MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTE4ICBBbGV4YW5kZXIgUGF2
bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogSW1w
bGVtZW50IHNjcmVlbiByZXNvbHV0aW9uIGVtdWxhdGlvbiBiYWNrZW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9vdmVy
cmlkZS1zY3JlZW4tc2l6ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbDogQWRkZWQuCisKIDIwMTItMDEtMTkg
IENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIFVu
cmV2aWV3ZWQgZ2FyZGVuaW5nLiBVbnNraXAgbm93IHBhc3NpbmcgdGVzdHMuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNp
emUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyZGZmNDU0YTU4NDNmYWJjMzU3NDkxZTZmOGUw
YWM1ZWUwNjkxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM5IEBACitU
ZXN0cyB0aGF0IHNjcmVlbiBkaW1lbnNpb24gb3ZlcnJpZGVzIGFmZmVjdCBtZWRpYSBydWxlcywg
Ym9keSBkaW1lbnNpb25zLCBhbmQgd2luZG93LnNjcmVlbi4KKworT3ZlcnJpZGU6IDQ4MHg5NjAK
K1NjcmVlbiBmcm9tIHBhZ2U6IDQ4MHg5NjAKK0JvZHkgZnJvbSBwYWdlOiA0ODB4OTYwCitNYWlu
IHN0eWxlOgorW2V4cGFuZGVkXSAKK2VsZW1lbnQuc3R5bGUgIHsgKCkKKworPT09PT09PT0gTWF0
Y2hlZCBDU1MgUnVsZXMgPT09PT09PT0KK1tleHBhbmRlZF0gCittZWRpYT0ic2NyZWVuIiAob3Zl
cnJpZGUtc2NyZWVuLXNpemUuaHRtbCkKK0BtZWRpYSAobWF4LWRldmljZS1oZWlnaHQ6IDk2MHB4
KSBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSAob3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRt
bDo5KQorI21haW4gIHsgKG92ZXJyaWRlLXNjcmVlbi1zaXplLmh0bWw6MTApCitiYWNrZ3JvdW5k
OiBncmVlbjsKKworW2V4cGFuZGVkXSAKK2RpdiAgeyAodXNlciBhZ2VudCBzdHlsZXNoZWV0KQor
ZGlzcGxheTogYmxvY2s7CisKKworT3ZlcnJpZGU6IDk2MHg0ODAKK1NjcmVlbiBmcm9tIHBhZ2U6
IDk2MHg0ODAKK0JvZHkgZnJvbSBwYWdlOiA5NjB4NDgwCitNYWluIHN0eWxlOgorW2V4cGFuZGVk
XSAKK2VsZW1lbnQuc3R5bGUgIHsgKCkKKworPT09PT09PT0gTWF0Y2hlZCBDU1MgUnVsZXMgPT09
PT09PT0KK1tleHBhbmRlZF0gCitkaXYgIHsgKHVzZXIgYWdlbnQgc3R5bGVzaGVldCkKK2Rpc3Bs
YXk6IGJsb2NrOworCisKK092ZXJyaWRlOiAxMDAwMDAwMXg5NjAgPT4gRVJST1IKK092ZXJyaWRl
OiAtMXg5NjAgPT4gRVJST1IKK092ZXJyaWRlOiA0ODB4MTAwMDAwMDEgPT4gRVJST1IKK092ZXJy
aWRlOiA0ODB4LTEgPT4gRVJST1IKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3N0eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3N0eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiYmRlNmYwMDU1
ZWVmNzM5NGE2Y2EwM2MxZjIzZGJhYTg4YzkzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLmh0bWwKQEAgLTAsMCAr
MSwxNTkgQEAKKzxodG1sPgorPGhlYWQ+CisKKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9
InNjcmVlbiI+CitAbWVkaWEgKG1heC1kZXZpY2Utd2lkdGg6IDQ3OHB4KSBhbmQgKG1heC1kZXZp
Y2UtaGVpZ2h0OiA5NTlweCkgeworICAgICNtYWluIHsgYmFja2dyb3VuZDogcmVkOyB9Cit9CisK
K0BtZWRpYSAobWF4LWRldmljZS13aWR0aDogNDgwcHgpIGFuZCAobWF4LWRldmljZS1oZWlnaHQ6
IDk2MHB4KSB7CisgICAgI21haW4geyBiYWNrZ3JvdW5kOiBncmVlbjsgfQorfQorCitAbWVkaWEg
KG1pbi1kZXZpY2Utd2lkdGg6IDQ4MXB4KSBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0OiA5NjFweCkg
eworICAgICNtYWluIHsgYmFja2dyb3VuZDogeWVsbG93OyB9Cit9CisKK2JvZHkgeworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9t
OiAwOworICAgIGxlZnQ6IDA7CisgICAgbWFyZ2luOiAwOworfQorCis8L3N0eWxlPgorCis8c2Ny
aXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRz
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZ2V0U2l6ZXMoKQorewor
ICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7CisgICAgICAgIHNjcmVlbjogd2luZG93LnNjcmVl
bi53aWR0aCArICJ4IiArIHdpbmRvdy5zY3JlZW4uaGVpZ2h0LAorICAgICAgICBib2R5OiBkb2N1
bWVudC5ib2R5Lm9mZnNldFdpZHRoICsgIngiICsgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQK
KyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdmFyIGV4Y2VlZGVkRGltZW5z
aW9uID0gMTAwMDAwMDE7CisgICAgdmFyIG9yaWdpbmFsU2NyZWVuU2l6ZTsKKworICAgIGZ1bmN0
aW9uIHNhdmVTaXplQ2FsbGJhY2soanNvblJlc3VsdCkKKyAgICB7CisgICAgICAgIHZhciB2YWx1
ZSA9IEpTT04ucGFyc2UoanNvblJlc3VsdC52YWx1ZSk7CisgICAgICAgIG9yaWdpbmFsU2NyZWVu
U2l6ZSA9IHZhbHVlLnNjcmVlbjsKKyAgICAgICAgaWYgKCFvcmlnaW5hbFNjcmVlblNpemUgfHwg
b3JpZ2luYWxTY3JlZW5TaXplLmluZGV4T2YoIngiKSA9PT0gLTEpCisgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiSW52YWxpZCBvcmlnaW5hbCBzY3JlZW4gc2l6ZTogIiArIG9y
aWdpbmFsU2NyZWVuU2l6ZSArICIuIEV4cGVjdCBydW50aW1lIGZhaWx1cmVzIGxhdGVyIG9uLiIp
OworCisgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZUFuZFdhaXRGb3JTdHlsZXMoIm1h
aW4iLCBzdGVwMCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgi
Z2V0U2l6ZXMoKSIsIHNhdmVTaXplQ2FsbGJhY2spOworCisKKyAgICBmdW5jdGlvbiBzdGVwMCgp
CisgICAgeworICAgICAgICBvdmVycmlkZUFuZER1bXBEYXRhKDQ4MCwgOTYwLCBzdGVwMSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc3RlcDEoKQorICAgIHsKKyAgICAgICAgb3ZlcnJpZGVBbmRE
dW1wRGF0YSg5NjAsIDQ4MCwgc3RlcDIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXAyKCkK
KyAgICB7CisgICAgICAgIGFwcGx5T3ZlcnJpZGUoZXhjZWVkZWREaW1lbnNpb24sIDk2MCwgc3Rl
cDMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXAzKCkKKyAgICB7CisgICAgICAgIGFwcGx5
T3ZlcnJpZGUoLTEsIDk2MCwgc3RlcDQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXA0KCkK
KyAgICB7CisgICAgICAgIGFwcGx5T3ZlcnJpZGUoNDgwLCBleGNlZWRlZERpbWVuc2lvbiwgc3Rl
cDUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXA1KCkKKyAgICB7CisgICAgICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgfQorICAgICAgICBhcHBseU92ZXJyaWRlKDQ4MCwgLTEsIHN0
ZXA2KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwNigpCisgICAgeworICAgICAgICBmdW5j
dGlvbiBjb21wYXJlU2l6ZUNhbGxiYWNrKGpzb25SZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHRoYXQgdGhlIHNjcmVlbiBzaXplIHJlcG9ydGVkIGlzIHRoZSBzYW1lIGFz
IHRoZSBvcmlnaW5hbCBvbmUuCisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShq
c29uUmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuc2NyZWVuICE9PSBvcmln
aW5hbFNjcmVlblNpemUpCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQo
Ik9yaWdpbmFsIHNpemUgIiArIG9yaWdpbmFsU2NyZWVuU2l6ZSArICIgbm90IHJlc3RvcmVkLCBm
b3VuZDogIiArIHJlc3VsdC5zY3JlZW4pOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG92ZXJyaWRlQ2FsbGJh
Y2soKQorICAgICAgICB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdl
KCJnZXRTaXplcygpIiwgY29tcGFyZVNpemVDYWxsYmFjayk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBEaXNhYmxlIG92ZXJyaWRlcy4KKyAgICAgICAgUGFnZUFnZW50LnNldFNjcmVlblNpemVP
dmVycmlkZSgwLCAwLCBvdmVycmlkZUNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBh
cHBseU92ZXJyaWRlKHdpZHRoLCBoZWlnaHQsIHVzZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJy
b3IpCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk92ZXJyaWRlOiAi
ICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiID0+IEVSUk9SIik7CisgICAgICAgICAgICB1c2Vy
Q2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgICAgICBQYWdlQWdlbnQuc2V0U2NyZWVuU2l6ZU92
ZXJyaWRlKHdpZHRoLCBoZWlnaHQsIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBv
dmVycmlkZUFuZER1bXBEYXRhKHdpZHRoLCBoZWlnaHQsIGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgZnVuY3Rpb24gc2VsZWN0Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiTWFpbiBzdHlsZToiKTsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuZHVtcFNlbGVjdGVkRWxlbWVudFN0eWxlcyh0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0U2l6
ZXNDYWxsYmFjayhqc29uUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gSlNPTi5wYXJzZShqc29uUmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KCJTY3JlZW4gZnJvbSBwYWdlOiAiICsgcmVzdWx0LnNjcmVlbik7CisgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiQm9keSBmcm9tIHBhZ2U6ICIgKyByZXN1
bHQuYm9keSk7CisgICAgICAgICAgICBzZWxlY3RDYWxsYmFjaygpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gYXBwbHlDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoImdldFNpemVzKCkiLCBnZXRTaXplc0NhbGxiYWNr
KTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJPdmVycmlk
ZTogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0KTsKKyAgICAgICAgYXBwbHlPdmVycmlkZSh3aWR0
aCwgaGVpZ2h0LCBhcHBseUNhbGxiYWNrKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+CitUZXN0cyB0aGF0IHNjcmVlbiBkaW1l
bnNpb24gb3ZlcnJpZGVzIGFmZmVjdCBtZWRpYSBydWxlcywgYm9keSBkaW1lbnNpb25zLCBhbmQg
d2luZG93LnNjcmVlbi4KKzwvcD4KKworPGRpdiBpZD0ibWFpbiI+PC9kaXY+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123131</attachid>
            <date>2012-01-19 08:07:28 -0800</date>
            <delta_ts>2012-01-19 08:26:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76532-20120119200725.patch</filename>
            <type>text/plain</type>
            <size>31339</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1Mzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4Mzc2MzI5MGYwOTQw
ZGQ0MDhiNDgwYzdjMmM5NGFhMzA0MjMzNC4uOGM5NWEzYWM2Y2U3MTA4ZjM0YzgwZDI3MWUyMDll
ZjRkMmU4ZTY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAxLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IHNjcmVlbiByZXNvbHV0aW9uIGVtdWxhdGlvbiBiYWNrZW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjUzMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBlbXVsYXRpb24g
YWZmZWN0cyBbbWluLXxtYXgtXWRldmljZS0od2lkdGh8aGVpZ2h0KSBtZWRpYSBxdWVyaWVzLCB3
aW5kb3cuc2NyZWVuLih3aWR0aHxoZWlnaHQpLAorICAgICAgICBhbmQgd2luZG93LmlubmVyKFdp
ZHRofEhlaWdodCkuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL3N0eWxlcy9vdmVycmlkZS1z
Y3JlZW4tc2l6ZS5odG1sCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0
b3JDU1NBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRT
ZWxlY3RvclByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpz
dG9wU2VsZWN0b3JQcm9maWxlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
QWdlbnQ6OndpbGxNYXRjaFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdl
bnQ6OmRpZE1hdGNoUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6
d2lsbFByb2Nlc3NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50Ojpk
aWRQcm9jZXNzUnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFw
cGx5U2NyZWVuV2lkdGhPdmVycmlkZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdodE92ZXJyaWRlSW1wbCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhl
aWdodE92ZXJyaWRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6SW5zcGVjdG9yUGFnZUFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Y2xlYXJGcm9udGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2NyZWVuU2l6ZU92ZXJyaWRlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlTY3JlZW5XaWR0aE92ZXJyaWRl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlTY3JlZW5IZWln
aHRPdmVycmlkZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnVwZGF0
ZUZyYW1lVmlld0ZpeGVkTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VB
Z2VudDo6Y2xlYXJGcmFtZVZpZXdGaXhlZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNldEZyYW1lVmlld0ZpeGVkTGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6bm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdp
bmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OmlubmVySGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6aW5uZXJXaWR0aCk6CisgICAgICAgICogcGFnZS9T
Y3JlZW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuOjpoZWlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyZWVuOjp3aWR0aCk6CisKIDIwMTItMDEtMTkgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgZHJvcCBldmVudCBpc24ndCBmaXJlZCBmb3IgY29u
dGVudEVkaXRhYmxlIGluIGVkaXQgZHJhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlF
dmFsdWF0b3IuY3BwCmluZGV4IGI2Njg2ZmQ4OGMwYWU1MzI5NTNjMmNmN2JiMTdjZmI4ZmE3MzYz
NDUuLmM0YmU0MzY1YjE1ZGYxNWJiNzU2NzRjOTUwMWZhNjY4N2MzMzVhZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKQEAgLTMzMiw3ICszMzIsOSBAQCBz
dGF0aWMgYm9vbCBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IFJlbmRlclN0eWxlKiBzdHlsZSwgRgogICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0
KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgICAgICBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5k
ZXJTdHlsZSgpOwogICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxl
bmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgc3R5bGUsIHJv
b3RTdHlsZSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihzZy5oZWln
aHQoKSksIGxlbmd0aCwgb3ApOworICAgICAgICBsb25nIGhlaWdodCA9IHNnLmhlaWdodCgpOwor
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJp
ZGUoZnJhbWUsICZoZWlnaHQpOworICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwg
IWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgc3R5bGUsIHJvb3RTdHlsZSwgbGVu
Z3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpLCBsZW5ndGgsIG9w
KTsKICAgICB9CiAgICAgLy8gKHssbWluLSxtYXgtfWRldmljZS1oZWlnaHQpCiAgICAgLy8gYXNz
dW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVybwpAQCAtMzQ1LDcgKzM0Nyw5
IEBAIHN0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyCiAgICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVl
blJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAgICAgICAgIFJlbmRl
clN0eWxlKiByb290U3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkt
PnJlbmRlclN0eWxlKCk7CiAgICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIHJldHVybiBjb21w
dXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBzdHls
ZSwgcm9vdFN0eWxlLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHNn
LndpZHRoKCkpLCBsZW5ndGgsIG9wKTsKKyAgICAgICAgbG9uZyB3aWR0aCA9IHNnLndpZHRoKCk7
CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0aE92ZXJy
aWRlKGZyYW1lLCAmd2lkdGgpOworICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwg
IWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgc3R5bGUsIHJvb3RTdHlsZSwgbGVu
Z3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIGxlbmd0aCwgb3Ap
OwogICAgIH0KICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNlLXdpZHRoKQogICAgIC8vIGFzc3Vt
ZSBpZiB3ZSBoYXZlIGEgZGV2aWNlLCBhc3N1bWUgbm9uLXplcm8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCAxMjZkOWVlNWVjYjJhMGI2YWE2Y2RjMDI5YWFlYjMy
MWFiZWZmMjhhLi44YzM5ZTlkYzE5NDBhN2I2Mzk0ZjAxNjc0YjIyYzM1OWU4OTFiZGE4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0zMDgsNiArMzA4LDE1IEBA
CiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaHRtbCIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJIVE1MIGNvbnRlbnQgdG8gc2V0LiIgIH0KICAgICAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInNldFNjcmVlblNpemVPdmVycmlk
ZSIsCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk92ZXJyaWRlcyB0aGUgdmFsdWVz
IG9mIHdpbmRvdy5zY3JlZW4ud2lkdGgsIHdpbmRvdy5zY3JlZW4uaGVpZ2h0LCB3aW5kb3cuaW5u
ZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0LCBhbmQgXCJkZXZpY2Utd2lkdGhcIi9cImRldmlj
ZS1oZWlnaHRcIi1yZWxhdGVkIENTUyBtZWRpYSBxdWVyeSByZXN1bHRzIiwKKyAgICAgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ3aWR0
aCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiT3ZlcnJpZGluZyB3aWR0aCB2
YWx1ZSBpbiBwaXhlbHMgKG1pbmltdW0gMCwgbWF4aW11bSAxMDAwMDAwMCkuIDAgZGlzYWJsZXMg
dGhlIG92ZXJyaWRlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJoZWlnaHQi
LCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk92ZXJyaWRpbmcgaGVpZ2h0IHZh
bHVlIGluIHBpeGVscyAobWluaW11bSAwLCBtYXhpbXVtIDEwMDAwMDAwKS4gMCBkaXNhYmxlcyB0
aGUgb3ZlcnJpZGUuIiB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAiaGlk
ZGVuIjogdHJ1ZQogICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiZXZlbnRzIjog
WwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5k
ZXggNTk2MDFiODk3OTAyMjBiZjRlOTNhMzlkMzlmM2JkNTA4NDNiYjBhMi4uZWJlOTBiNTc3MTRj
NWU4NTI5ZWY1OGE3ZTM5YzVhZjQxYmYyY2M3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0yMzUsNiArMjM1LDcgQEAgSW5zcGVjdG9y
Q1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1l
bnRpbmdBZ2VudHMsIEkKICAgICAsIG1fbGFzdFN0eWxlSWQoMSkKIHsKICAgICBtX2RvbUFnZW50
LT5zZXRET01MaXN0ZW5lcih0aGlzKTsKKyAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldElu
c3BlY3RvckNTU0FnZW50KHRoaXMpOwogfQogCiBJbnNwZWN0b3JDU1NBZ2VudDo6fkluc3BlY3Rv
ckNTU0FnZW50KCkKQEAgLTUyNCw3ICs1MjUsNiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpn
ZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvcgog
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5n
KikKIHsKICAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUgPSBhZG9wdFB0cihuZXcgU2VsZWN0
b3JQcm9maWxlKCkpOwotICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy0+c2V0SW5zcGVjdG9yQ1NT
QWdlbnQodGhpcyk7CiAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjppc1Nl
bGVjdG9yUHJvZmlsaW5nLCB0cnVlKTsKIH0KIApAQCAtNTM4LDcgKzUzOCw2IEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnN0b3BTZWxlY3RvclByb2ZpbGVySW1wbChFcnJvclN0cmluZyosIFJl
ZlB0cjxJbnNwZWN0b3JPCiAgICAgaWYgKCFtX3N0YXRlLT5nZXRCb29sZWFuKENTU0FnZW50U3Rh
dGU6OmlzU2VsZWN0b3JQcm9maWxpbmcpKQogICAgICAgICByZXR1cm47CiAgICAgbV9zdGF0ZS0+
c2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjppc1NlbGVjdG9yUHJvZmlsaW5nLCBmYWxzZSk7Ci0g
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0b3JDU1NBZ2VudCgwKTsKICAgICBp
ZiAobV9mcm9udGVuZCAmJiByZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBtX2N1cnJlbnRTZWxl
Y3RvclByb2ZpbGUtPnRvSW5zcGVjdG9yT2JqZWN0KCk7CiAgICAgbV9jdXJyZW50U2VsZWN0b3JQ
cm9maWxlLmNsZWFyKCk7CkBAIC01NDYsMjIgKzU0NSwyNiBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVj
dG9yTwogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsTWF0Y2hSdWxlKGNvbnN0IENTU1N0
eWxlUnVsZSogcnVsZSkKIHsKLSAgICBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2Vs
ZWN0b3IocnVsZSk7CisgICAgaWYgKG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSkKKyAgICAgICAg
bV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5zdGFydFNlbGVjdG9yKHJ1bGUpOwogfQogCiB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpkaWRNYXRjaFJ1bGUoYm9vbCBtYXRjaGVkKQogewotICAgIG1f
Y3VycmVudFNlbGVjdG9yUHJvZmlsZS0+Y29tbWl0U2VsZWN0b3IobWF0Y2hlZCk7CisgICAgaWYg
KG1fY3VycmVudFNlbGVjdG9yUHJvZmlsZSkKKyAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9m
aWxlLT5jb21taXRTZWxlY3RvcihtYXRjaGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6d2lsbFByb2Nlc3NSdWxlKGNvbnN0IENTU1N0eWxlUnVsZSogcnVsZSkKIHsKLSAgICBtX2N1
cnJlbnRTZWxlY3RvclByb2ZpbGUtPnN0YXJ0U2VsZWN0b3IocnVsZSk7CisgICAgaWYgKG1fY3Vy
cmVudFNlbGVjdG9yUHJvZmlsZSkKKyAgICAgICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5z
dGFydFNlbGVjdG9yKHJ1bGUpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRQcm9j
ZXNzUnVsZSgpCiB7Ci0gICAgbV9jdXJyZW50U2VsZWN0b3JQcm9maWxlLT5jb21taXRTZWxlY3Rv
clRpbWUoKTsKKyAgICBpZiAobV9jdXJyZW50U2VsZWN0b3JQcm9maWxlKQorICAgICAgICBtX2N1
cnJlbnRTZWxlY3RvclByb2ZpbGUtPmNvbW1pdFNlbGVjdG9yVGltZSgpOwogfQogCiBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3Rv
clN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggYjIzYzllNWJiMjIz
YTJlZDRjOTllODU5NTY1ZTUyZDM0YjQxYmFkMy4uYzUwMTA5NmE5YTJiMDc0NDVmN2M1MTRiNDdk
ZWRkMWE0MDg2ZjQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTQ4NSw2ICs0ODUsMTggQEAgdm9pZCBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5VXNlckFnZW50T3ZlcnJpZGVJbXBsKEluc3RydW1l
bnRpbmdBZ2VudHMqIGkKICAgICAgICAgcmVzb3VyY2VBZ2VudC0+YXBwbHlVc2VyQWdlbnRPdmVy
cmlkZSh1c2VyQWdlbnQpOwogfQogCit2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBw
bHlTY3JlZW5XaWR0aE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBsb25nKiB3aWR0aCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JQYWdlQWdlbnQoKSkKKyAg
ICAgICAgcGFnZUFnZW50LT5hcHBseVNjcmVlbldpZHRoT3ZlcnJpZGUod2lkdGgpOworfQorCit2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZUlt
cGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgbG9uZyogaGVpZ2h0
KQoreworICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCA9IGluc3RydW1lbnRp
bmdBZ2VudHMtPmluc3BlY3RvclBhZ2VBZ2VudCgpKQorICAgICAgICBwYWdlQWdlbnQtPmFwcGx5
U2NyZWVuSGVpZ2h0T3ZlcnJpZGUoaGVpZ2h0KTsKK30KKwogdm9pZCBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxTZW5kUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1
bWVudGluZ0FnZW50cywgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciog
bG9hZGVyLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBpbnN0cnVtZW50aW5nQWdlbnRzLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmgKaW5kZXggNzM5ODlhNDQwMTY3NmFmYWZkZjY4NGE0YTRlZjEzMTRlZDIwNzQxYy4u
OTJjNGVjN2Q2YjIwYjY4NTA3NDQ4NTI0ZTgxOTEyNTJiZWY0MDZhMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaApAQCAtMTI4
LDYgKzEyOCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkaWRQcm9jZXNzUnVsZShjb25z
dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUmKTsKIAogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VXNlckFnZW50T3ZlcnJpZGUoRnJhbWUqLCBTdHJpbmcqKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVNjcmVlbldpZHRoT3ZlcnJpZGUoRnJhbWUqLCBsb25nKik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShGcmFtZSosIGxvbmcqKTsKICAgICBzdGF0aWMgdm9p
ZCB3aWxsU2VuZFJlcXVlc3QoRnJhbWUqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSk7CiAgICAgc3RhdGljIHZvaWQgY29udGludWVBZnRlclBpbmdMb2FkZXIo
RnJhbWUqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHN0YXRpYyB2b2lkIG1h
cmtSZXNvdXJjZUFzQ2FjaGVkKFBhZ2UqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpAQCAt
MjczLDYgKzI3NSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlkUHJvY2Vzc1J1bGVJ
bXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwogCiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlVc2VyQWdlbnRPdmVycmlkZUltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFN0
cmluZyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZUltcGwoSW5z
dHJ1bWVudGluZ0FnZW50cyosIGxvbmcqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVNjcmVlbkhl
aWdodE92ZXJyaWRlSW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgbG9uZyopOwogICAgIHN0YXRp
YyB2b2lkIHdpbGxTZW5kUmVxdWVzdEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICBzdGF0aWMgdm9pZCBj
b250aW51ZUFmdGVyUGluZ0xvYWRlckltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgc3RhdGljIHZvaWQgbWFya1Jlc291cmNlQXNDYWNo
ZWRJbXBsKEluc3RydW1lbnRpbmdBZ2VudHMqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpA
QCAtNzc5LDYgKzc4MywyNCBAQCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmFwcGx5VXNlckFnZW50T3ZlcnJpZGUoRnJhbWUqIGZyYW1lLCBTdHJpbgogI2VuZGlmCiB9CiAK
K2lubGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0aE92
ZXJyaWRlKEZyYW1lKiBmcmFtZSwgbG9uZyogd2lkdGgpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKyAgICBGQVNUX1JFVFVSTl9JRl9OT19GUk9OVEVORFModm9pZCgpKTsKKyAgICBpZiAoSW5z
dHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cyA9IGluc3RydW1lbnRpbmdBZ2Vu
dHNGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGFwcGx5U2NyZWVuV2lkdGhPdmVycmlkZUltcGwo
aW5zdHJ1bWVudGluZ0FnZW50cywgd2lkdGgpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZShGcmFtZSog
ZnJhbWUsIGxvbmcqIGhlaWdodCkKK3sKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgIEZBU1Rf
UkVUVVJOX0lGX05PX0ZST05URU5EUyh2b2lkKCkpOworICAgIGlmIChJbnN0cnVtZW50aW5nQWdl
bnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGluZ0FnZW50c0ZvckZyYW1lKGZy
YW1lKSkKKyAgICAgICAgYXBwbHlTY3JlZW5IZWlnaHRPdmVycmlkZUltcGwoaW5zdHJ1bWVudGlu
Z0FnZW50cywgaGVpZ2h0KTsKKyNlbmRpZgorfQorCiBpbmxpbmUgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OndpbGxTZW5kUmVxdWVzdChGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCmluZGV4IGU2OGNmOGY2NjliY2YxYmMxNWIwMjFmMzg3ZTlkZTk5M2Q5YjQx
ZDcuLjRiYjc4MDg5MjI0YjQ3ZDMwYmExZmM1MTI0M2Q2OGZjYjhlNDMxZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00NywxMSAr
NDcsMTMgQEAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIklkZW50aWZpZXJzRmFjdG9yeS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdl
bnRzLmgiCkBAIC03NSw2ICs3Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBQ
YWdlQWdlbnRTdGF0ZSB7CiBzdGF0aWMgY29uc3QgY2hhciBwYWdlQWdlbnRFbmFibGVkW10gPSAi
cGFnZUFnZW50RW5hYmxlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBwYWdlQWdlbnRTY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZFtdID0gInBhZ2VBZ2VudFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIjsKK3N0
YXRpYyBjb25zdCBjaGFyIHBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGVbXSA9ICJwYWdlQWdl
bnRTY3JlZW5XaWR0aE92ZXJyaWRlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHBhZ2VBZ2VudFNjcmVl
bkhlaWdodE92ZXJyaWRlW10gPSAicGFnZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGUiOwogfQog
CiBzdGF0aWMgYm9vbCBkZWNvZGVTaGFyZWRCdWZmZXIoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBTdHJpbmcqIHJlc3VsdCkK
QEAgLTI2OCw2ICsyNzIsNyBAQCBJbnNwZWN0b3JQYWdlQWdlbnQ6Okluc3BlY3RvclBhZ2VBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLAogICAgICwgbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgICwgbV9mcm9udGVu
ZCgwKQogICAgICwgbV9sYXN0U2NyaXB0SWRlbnRpZmllcigwKQorICAgICwgbV9vcmlnaW5hbFVz
ZUZpeGVkTGF5b3V0KGZhbHNlKQogewogfQogCkBAIC0yODEsNiArMjg2LDExIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpjbGVhckZyb250ZW5kKCkKICAgICBFcnJvclN0cmluZyBlcnJvcjsK
ICAgICBkaXNhYmxlKCZlcnJvcik7CiAgICAgbV9mcm9udGVuZCA9IDA7CisgICAgaWYgKG1fb3Jp
Z2luYWxGaXhlZExheW91dFNpemUpIHsKKyAgICAgICAgbWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0
Rml4ZWRMYXlvdXRTaXplKCptX29yaWdpbmFsRml4ZWRMYXlvdXRTaXplKTsKKyAgICAgICAgbWFp
bkZyYW1lKCktPnZpZXcoKS0+c2V0VXNlRml4ZWRMYXlvdXQobV9vcmlnaW5hbFVzZUZpeGVkTGF5
b3V0KTsKKyAgICB9CisgICAgbm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OnJlc3RvcmUoKQpAQCAtMjg4LDYgKzI5OCwxMSBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6cmVzdG9yZSgpCiAgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4o
UGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudEVuYWJsZWQpKSB7CiAgICAgICAgIEVycm9yU3RyaW5n
IGVycm9yOwogICAgICAgICBlbmFibGUoJmVycm9yKTsKKworICAgICAgICAvLyBXaGVuIHJlc3Rv
cmluZyB0aGUgYWdlbnQsIG92ZXJyaWRlIHZhbHVlcyBhcmUgcmVzdG9yZWQgaW50byB0aGUgRnJh
bWVWaWV3LgorICAgICAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RhdGUtPmdl
dExvbmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VBZ2VudFNjcmVlbldpZHRoT3ZlcnJpZGUpKTsKKyAg
ICAgICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4obV9zdGF0ZS0+Z2V0TG9uZyhQYWdl
QWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGUpKTsKKyAgICAgICAgdXBk
YXRlRnJhbWVWaWV3Rml4ZWRMYXlvdXQod2lkdGgsIGhlaWdodCk7CiAgICAgfQogfQogCkBAIC0z
MDEsNiArMzE2LDExIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3Ry
aW5nKikKIHsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdl
bnRFbmFibGVkLCBmYWxzZSk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLT5zZXRJbnNwZWN0
b3JQYWdlQWdlbnQoMCk7CisKKyAgICAvLyBXaGVuIGRpc2FibGluZyB0aGUgYWdlbnQsIHJlc2V0
IHRoZSBvdmVycmlkZSB2YWx1ZXMuCisgICAgbV9zdGF0ZS0+c2V0TG9uZyhQYWdlQWdlbnRTdGF0
ZTo6cGFnZUFnZW50U2NyZWVuV2lkdGhPdmVycmlkZSwgMCk7CisgICAgbV9zdGF0ZS0+c2V0TG9u
ZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuSGVpZ2h0T3ZlcnJpZGUsIDApOworICAg
IHVwZGF0ZUZyYW1lVmlld0ZpeGVkTGF5b3V0KDAsIDApOwogfQogCiB2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgc291cmNlLCBTdHJpbmcqIGlkZW50aWZpZXIpCkBAIC01NzgsNiArNTk4LDI5IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXREb2N1bWVudENvbnRlbnQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpCiAgICAgZWRpdG9yLnBhdGNoRG9jdW1lbnQoaHRtbCk7CiB9
CiAKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JlZW5TaXplT3ZlcnJpZGUoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBpbnQgd2lkdGgsIGNvbnN0IGludCBoZWlnaHQpCit7
CisgICAgY29uc3Qgc3RhdGljIGxvbmcgbWF4RGltZW5zaW9uID0gMTAwMDAwMDA7CisKKyAgICBp
ZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgd2lkdGggPiBtYXhEaW1lbnNpb24gfHwgaGVp
Z2h0ID4gbWF4RGltZW5zaW9uKSB7CisgICAgICAgICplcnJvclN0cmluZyA9IG1ha2VTdHJpbmco
IldpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUsIG5vdCBncmVhdGVyIHRo
YW4gIiwgU3RyaW5nOjpudW1iZXIobWF4RGltZW5zaW9uKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBUaGVzZSB0d28gYWx3YXlzIGZpdCBhbiBpbnQuCisgICAgaW50IGN1cnJl
bnRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4obV9zdGF0ZS0+Z2V0TG9uZyhQYWdlQWdlbnRTdGF0
ZTo6cGFnZUFnZW50U2NyZWVuV2lkdGhPdmVycmlkZSkpOworICAgIGludCBjdXJyZW50SGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihtX3N0YXRlLT5nZXRMb25nKFBhZ2VBZ2VudFN0YXRlOjpwYWdl
QWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSkpOworCisgICAgaWYgKHdpZHRoID09IGN1cnJlbnRX
aWR0aCAmJiBoZWlnaHQgPT0gY3VycmVudEhlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zdGF0ZS0+c2V0TG9uZyhQYWdlQWdlbnRTdGF0ZTo6cGFnZUFnZW50U2NyZWVuV2lkdGhPdmVy
cmlkZSwgd2lkdGgpOworICAgIG1fc3RhdGUtPnNldExvbmcoUGFnZUFnZW50U3RhdGU6OnBhZ2VB
Z2VudFNjcmVlbkhlaWdodE92ZXJyaWRlLCBoZWlnaHQpOworCisgICAgdXBkYXRlRnJhbWVWaWV3
Rml4ZWRMYXlvdXQod2lkdGgsIGhlaWdodCk7CisgICAgbm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQo
KTsKK30KKwogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgaWYgKHdv
cmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQpAQCAtNjkzLDYgKzczNiwyMCBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVyRGV0YWNoZWRGcm9tRnJhbWUoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlcikKICAgICAgICAgbV9sb2FkZXJUb0lkZW50aWZpZXIucmVtb3ZlKGl0ZXJhdG9y
KTsKIH0KIAordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5U2NyZWVuV2lkdGhPdmVycmlk
ZShsb25nKiB3aWR0aCkKK3sKKyAgICBsb25nIHdpZHRoT3ZlcnJpZGUgPSBtX3N0YXRlLT5nZXRM
b25nKFBhZ2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5XaWR0aE92ZXJyaWRlKTsKKyAgICBp
ZiAod2lkdGhPdmVycmlkZSkKKyAgICAgICAgKndpZHRoID0gd2lkdGhPdmVycmlkZTsKK30KKwor
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUobG9uZyog
aGVpZ2h0KQoreworICAgIGxvbmcgaGVpZ2h0T3ZlcnJpZGUgPSBtX3N0YXRlLT5nZXRMb25nKFBh
Z2VBZ2VudFN0YXRlOjpwYWdlQWdlbnRTY3JlZW5IZWlnaHRPdmVycmlkZSk7CisgICAgaWYgKGhl
aWdodE92ZXJyaWRlKQorICAgICAgICAqaGVpZ2h0ID0gaGVpZ2h0T3ZlcnJpZGU7Cit9CisKIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGZy
YW1lT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKQEAgLTc0Myw2ICs4MDAsNDMg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRP
YmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6dXBkYXRlRnJhbWVWaWV3Rml4ZWRMYXlvdXQoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkKKyAgICAgICAgY2xl
YXJGcmFtZVZpZXdGaXhlZExheW91dCgpOworICAgIGVsc2UKKyAgICAgICAgc2V0RnJhbWVWaWV3
Rml4ZWRMYXlvdXQod2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpjbGVhckZyYW1lVmlld0ZpeGVkTGF5b3V0KCkKK3sKKyAgICBpZiAobV9vcmlnaW5hbEZpeGVk
TGF5b3V0U2l6ZSkgeworICAgICAgICAvLyBUdXJuaW5nIG9mZiBleGlzdGluZyBvdmVycmlkZXMg
KG5vLW9wIG90aGVyd2lzZSkgLSByZXZlcnQgdGhlIGFmZmVjdGVkIEZyYW1lVmlldyB0byB0aGUg
cmVtZW1iZXJlZCBmaXhlZCBsYXlvdXQgc2V0dGluZ3MuCisgICAgICAgIG1haW5GcmFtZSgpLT52
aWV3KCktPnNldEZpeGVkTGF5b3V0U2l6ZSgqbV9vcmlnaW5hbEZpeGVkTGF5b3V0U2l6ZSk7Cisg
ICAgICAgIG1fb3JpZ2luYWxGaXhlZExheW91dFNpemUuY2xlYXIoKTsKKyAgICAgICAgbWFpbkZy
YW1lKCktPnZpZXcoKS0+c2V0VXNlRml4ZWRMYXlvdXQobV9vcmlnaW5hbFVzZUZpeGVkTGF5b3V0
KTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGcmFtZVZpZXdGaXhl
ZExheW91dChpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKCFtX29yaWdpbmFsRml4
ZWRMYXlvdXRTaXplKSB7CisgICAgICAgIC8vIFR1cm5pbmcgb24gdGhlIG92ZXJyaWRlcyAobm9u
ZSBjdXJyZW50bHkgZXhpc3QpIC0gcmVtZW1iZXIgZXhpc3RpbmcgZml4ZWQgbGF5b3V0IGZvciB0
aGUgYWZmZWN0ZWQgRnJhbWVWaWV3LgorICAgICAgICBtX29yaWdpbmFsRml4ZWRMYXlvdXRTaXpl
ID0gYWRvcHRQdHIobmV3IEludFNpemUobWFpbkZyYW1lKCktPnZpZXcoKS0+Zml4ZWRMYXlvdXRT
aXplKCkpKTsKKyAgICAgICAgbV9vcmlnaW5hbFVzZUZpeGVkTGF5b3V0ID0gbWFpbkZyYW1lKCkt
PnZpZXcoKS0+dXNlRml4ZWRMYXlvdXQoKTsKKyAgICB9CisKKyAgICBtYWluRnJhbWUoKS0+dmll
dygpLT5zZXRGaXhlZExheW91dFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgbWFp
bkZyYW1lKCktPnZpZXcoKS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50Ojpub3RpZnlTY3JlZW5TaXplQ2hhbmdlZCgpCit7CisgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gbWFpbkZyYW1lKCktPmRvY3VtZW50KCk7CisgICAgZG9jdW1lbnQtPnN0
eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOworICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6bWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoZG9jdW1lbnQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IGE2
N2E4MDcwNjEwOTBhMTk1MWVjYjIwYTZkNTczOWRkZjQyNzdiNjQuLjBmOTNjNjY2ZDk1ZGZhNzg1
ODE1ZTVjNGI1ODg1Y2M5MzMzMTEyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogY29uc3Qg
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mKTsKICAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVy
cm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY29uc3QgY2FzZVNlbnNpdGl2
ZSwgY29uc3QgYm9vbCogY29uc3QgaXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYpOwog
ICAgIHZvaWQgc2V0RG9jdW1lbnRDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBjb25zdCBTdHJpbmcmIGh0bWwpOworICAgIHZvaWQgc2V0U2NyZWVuU2l6ZU92ZXJy
aWRlKEVycm9yU3RyaW5nKiwgY29uc3QgaW50IHdpZHRoLCBjb25zdCBpbnQgaGVpZ2h0KTsKIAog
ICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKICAgICB2b2lkIGRpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOwpAQCAtMTA4LDYgKzEw
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKik7
CiAgICAgdm9pZCBmcmFtZURldGFjaGVkKEZyYW1lKik7CiAgICAgdm9pZCBsb2FkZXJEZXRhY2hl
ZEZyb21GcmFtZShEb2N1bWVudExvYWRlciopOworICAgIHZvaWQgYXBwbHlTY3JlZW5XaWR0aE92
ZXJyaWRlKGxvbmcqKTsKKyAgICB2b2lkIGFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUobG9uZyop
OwogCiAgICAgLy8gSW5zcGVjdG9yIENvbnRyb2xsZXIgQVBJCiAgICAgdmlydHVhbCB2b2lkIHNl
dEZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kKik7CkBAIC0xMjUsNiArMTI4LDEwIEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50
cyosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOworICAg
IHZvaWQgdXBkYXRlRnJhbWVWaWV3Rml4ZWRMYXlvdXQoaW50LCBpbnQpOworICAgIHZvaWQgc2V0
RnJhbWVWaWV3Rml4ZWRMYXlvdXQoaW50LCBpbnQpOworICAgIHZvaWQgY2xlYXJGcmFtZVZpZXdG
aXhlZExheW91dCgpOworICAgIHZvaWQgbm90aWZ5U2NyZWVuU2l6ZUNoYW5nZWQoKTsKIAogICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7
CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVl
KEZyYW1lKik7CkBAIC0xMzcsNiArMTQ0LDggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPEZyYW1l
KiwgU3RyaW5nPiBtX2ZyYW1lVG9JZGVudGlmaWVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBGcmFt
ZSo+IG1faWRlbnRpZmllclRvRnJhbWU7CiAgICAgSGFzaE1hcDxEb2N1bWVudExvYWRlciosIFN0
cmluZz4gbV9sb2FkZXJUb0lkZW50aWZpZXI7CisgICAgT3duUHRyPEludFNpemU+IG1fb3JpZ2lu
YWxGaXhlZExheW91dFNpemU7CisgICAgYm9vbCBtX29yaWdpbmFsVXNlRml4ZWRMYXlvdXQ7CiB9
OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBhY2IyMmFmMDFjZDdiYzU5ZTRi
OTE5YmRmYzNjZTExNDRjMmUyNTljLi4xYWI5ODdiOWNiNmE0MWFhMzVlM2JkYmQwMmU5MzIzMjg5
NTIxZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC0xMTM0LDcgKzExMzQsOSBA
QCBpbnQgRE9NV2luZG93Ojppbm5lckhlaWdodCgpIGNvbnN0CiAgICAgaWYgKCF2aWV3KQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2aWV3LT52
aXNpYmxlQ29udGVudFJlY3QoLyogaW5jbHVkZVNjcm9sbGJhcnMgKi8gdHJ1ZSkuaGVpZ2h0KCkg
LyBtX2ZyYW1lLT5wYWdlWm9vbUZhY3RvcigpKTsKKyAgICBsb25nIGhlaWdodCA9IHZpZXctPnZp
c2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRlU2Nyb2xsYmFycyAqLyB0cnVlKS5oZWlnaHQoKTsK
KyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFwcGx5U2NyZWVuSGVpZ2h0T3ZlcnJpZGUo
bV9mcmFtZSwgJmhlaWdodCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0IC8g
bV9mcmFtZS0+cGFnZVpvb21GYWN0b3IoKSk7CiB9CiAKIGludCBET01XaW5kb3c6OmlubmVyV2lk
dGgoKSBjb25zdApAQCAtMTE0Niw3ICsxMTQ4LDkgQEAgaW50IERPTVdpbmRvdzo6aW5uZXJXaWR0
aCgpIGNvbnN0CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHZpZXctPnZpc2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRlU2Ny
b2xsYmFycyAqLyB0cnVlKS53aWR0aCgpIC8gbV9mcmFtZS0+cGFnZVpvb21GYWN0b3IoKSk7Cisg
ICAgbG9uZyB3aWR0aCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgvKiBpbmNsdWRlU2Nyb2xs
YmFycyAqLyB0cnVlKS53aWR0aCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBw
bHlTY3JlZW5XaWR0aE92ZXJyaWRlKG1fZnJhbWUsICZ3aWR0aCk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4od2lkdGggLyBtX2ZyYW1lLT5wYWdlWm9vbUZhY3RvcigpKTsKIH0KIAogaW50
IERPTVdpbmRvdzo6c2NyZWVuWCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NjcmVlbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NjcmVlbi5jcHAKaW5kZXggYjAy
MWU1ZjE3OGE0ZmY1ODhjMmE5MTM4MzdlZDRkNjcxZjBiMTA2OS4uZTFlMWQxMTczODZmNjIyZWUz
YzE5M2IzZTUwMjJjODgzYThjMjViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
Y3JlZW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcApAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKIApAQCAt
NjEsMTQgKzYyLDE4IEBAIHVuc2lnbmVkIFNjcmVlbjo6aGVpZ2h0KCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc2NyZWVuUmVjdChtX2ZyYW1lLT52aWV3KCkpLmhlaWdodCgpKTsKKyAgICBsb25n
IGhlaWdodCA9IHN0YXRpY19jYXN0PGxvbmc+KHNjcmVlblJlY3QobV9mcmFtZS0+dmlldygpKS5o
ZWlnaHQoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjphcHBseVNjcmVlbkhlaWdo
dE92ZXJyaWRlKG1fZnJhbWUsICZoZWlnaHQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaGVpZ2h0KTsKIH0KIAogdW5zaWduZWQgU2NyZWVuOjp3aWR0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNjcmVlblJlY3QobV9mcmFtZS0+dmlldygpKS53aWR0aCgpKTsKKyAgICBs
b25nIHdpZHRoID0gc3RhdGljX2Nhc3Q8bG9uZz4oc2NyZWVuUmVjdChtX2ZyYW1lLT52aWV3KCkp
LndpZHRoKCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YXBwbHlTY3JlZW5XaWR0
aE92ZXJyaWRlKG1fZnJhbWUsICZ3aWR0aCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPih3aWR0aCk7CiB9CiAKIHVuc2lnbmVkIFNjcmVlbjo6Y29sb3JEZXB0aCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMjEyY2VlNGVmMTAwNjQ2NjdkMGY1ZjU5ZTRkNWVjYjkxMDkxMGJiZC4uYjYyNTc4ODIz
ZWMxYzk0ZTE2ODNlNTEyNjg5MTczYTBmODlkZjA4MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDEyLTAxLTE4ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogSW1wbGVtZW50IHNjcmVlbiByZXNvbHV0aW9uIGVtdWxhdGlv
biBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NjUzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaW5zcGVjdG9yL3N0eWxlcy9vdmVycmlkZS1zY3JlZW4tc2l6ZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRt
bDogQWRkZWQuCisKIDIwMTItMDEtMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0
Lm9yZz4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBVbnNraXAgbm93IHBh
c3NpbmcgdGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292
ZXJyaWRlLXNjcmVlbi1zaXplLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMvb3ZlcnJpZGUtc2NyZWVuLXNpemUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZTI3
ZGNhNzE3NzA0OTZkZGExN2FkNmM5OTdjZmM0OTUwMjA1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVlbi1zaXplLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDQ2IEBACitUZXN0cyB0aGF0IHNjcmVlbiBkaW1lbnNpb24gb3ZlcnJp
ZGVzIGFmZmVjdCBtZWRpYSBydWxlcywgYm9keSBkaW1lbnNpb25zLCBhbmQgd2luZG93LnNjcmVl
bi4KKworT3ZlcnJpZGU6IDQ4MHg5NjAKK1NjcmVlbiBmcm9tIHBhZ2U6IDQ4MHg5NjAKK0JvZHkg
ZnJvbSBwYWdlOiA0ODB4OTYwCitNYWluIHN0eWxlOgorW2V4cGFuZGVkXSAKK2VsZW1lbnQuc3R5
bGUgIHsgKCkKKworPT09PT09PT0gTWF0Y2hlZCBDU1MgUnVsZXMgPT09PT09PT0KK1tleHBhbmRl
ZF0gCittZWRpYT0ic2NyZWVuIiAob3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbCkKK0BtZWRpYSAo
bWF4LWRldmljZS1oZWlnaHQ6IDk2MHB4KSBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSAo
b3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbDo5KQorI21haW4gIHsgKG92ZXJyaWRlLXNjcmVlbi1z
aXplLmh0bWw6MTApCitiYWNrZ3JvdW5kOiBncmVlbjsKKworW2V4cGFuZGVkXSAKK2RpdiAgeyAo
dXNlciBhZ2VudCBzdHlsZXNoZWV0KQorZGlzcGxheTogYmxvY2s7CisKKworT3ZlcnJpZGU6IDk2
MHg0ODAKK1NjcmVlbiBmcm9tIHBhZ2U6IDk2MHg0ODAKK0JvZHkgZnJvbSBwYWdlOiA5NjB4NDgw
CitNYWluIHN0eWxlOgorW2V4cGFuZGVkXSAKK2VsZW1lbnQuc3R5bGUgIHsgKCkKKworPT09PT09
PT0gTWF0Y2hlZCBDU1MgUnVsZXMgPT09PT09PT0KK1tleHBhbmRlZF0gCitkaXYgIHsgKHVzZXIg
YWdlbnQgc3R5bGVzaGVldCkKK2Rpc3BsYXk6IGJsb2NrOworCisKK092ZXJyaWRlOiAxMDAwMDAw
MXg5NjAgPT4gRVJST1IKK092ZXJyaWRlOiAtMXg5NjAgPT4gRVJST1IKK092ZXJyaWRlOiA0ODB4
MTAwMDAwMDEgPT4gRVJST1IKK092ZXJyaWRlOiA0ODB4LTEgPT4gRVJST1IKK0N1cnJlbnQgZGlt
ZW5zaW9uczoKK1NjcmVlbiBmcm9tIHBhZ2U6IDk2MHg0ODAKK0JvZHkgZnJvbSBwYWdlOiA5NjB4
NDgwCitEaXNhYmxlIFBhZ2VBZ2VudDoKK1NjcmVlbiBzaXplIHNhbWUgYXMgb3JpZ2luYWwgLSBP
SworRW5hYmxlIFBhZ2VBZ2VudDoKK1NjcmVlbiBzaXplIHNhbWUgYXMgb3JpZ2luYWwgLSBPSwor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVl
bi1zaXplLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL292ZXJyaWRlLXNjcmVl
bi1zaXplLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI0ODAwZmIxZDdmYjQzNDFiNTBlZTI0N2UyMDFiZjJh
MWZkMGJlOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMv
b3ZlcnJpZGUtc2NyZWVuLXNpemUuaHRtbApAQCAtMCwwICsxLDIwMCBAQAorPGh0bWw+Cis8aGVh
ZD4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KK0BtZWRpYSAobWF4
LWRldmljZS13aWR0aDogNDc4cHgpIGFuZCAobWF4LWRldmljZS1oZWlnaHQ6IDk1OXB4KSB7Cisg
ICAgI21haW4geyBiYWNrZ3JvdW5kOiByZWQ7IH0KK30KKworQG1lZGlhIChtYXgtZGV2aWNlLXdp
ZHRoOiA0ODBweCkgYW5kIChtYXgtZGV2aWNlLWhlaWdodDogOTYwcHgpIHsKKyAgICAjbWFpbiB7
IGJhY2tncm91bmQ6IGdyZWVuOyB9Cit9CisKK0BtZWRpYSAobWluLWRldmljZS13aWR0aDogNDgx
cHgpIGFuZCAobWluLWRldmljZS1oZWlnaHQ6IDk2MXB4KSB7CisgICAgI21haW4geyBiYWNrZ3Jv
dW5kOiB5ZWxsb3c7IH0KK30KKworYm9keSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHRvcDogMDsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAg
ICBtYXJnaW46IDA7Cit9CisKKzwvc3R5bGU+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rl
c3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitmdW5jdGlvbiBnZXRTaXplcygpCit7CisgICAgcmV0dXJuIEpTT04uc3RyaW5n
aWZ5KHsKKyAgICAgICAgc2NyZWVuOiB3aW5kb3cuc2NyZWVuLndpZHRoICsgIngiICsgd2luZG93
LnNjcmVlbi5oZWlnaHQsCisgICAgICAgIGJvZHk6IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgg
KyAieCIgKyBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodAorICAgIH0pOworfQorCitmdW5jdGlv
biB0ZXN0KCkKK3sKKyAgICB2YXIgZXhjZWVkZWREaW1lbnNpb24gPSAxMDAwMDAwMTsKKyAgICB2
YXIgb3JpZ2luYWxTY3JlZW5TaXplOworCisgICAgZnVuY3Rpb24gc2F2ZVNpemVDYWxsYmFjayhq
c29uUmVzdWx0KQorICAgIHsKKyAgICAgICAgdmFyIHZhbHVlID0gSlNPTi5wYXJzZShqc29uUmVz
dWx0LnZhbHVlKTsKKyAgICAgICAgb3JpZ2luYWxTY3JlZW5TaXplID0gdmFsdWUuc2NyZWVuOwor
ICAgICAgICBpZiAoIW9yaWdpbmFsU2NyZWVuU2l6ZSB8fCBvcmlnaW5hbFNjcmVlblNpemUuaW5k
ZXhPZigieCIpID09PSAtMSkKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJJ
bnZhbGlkIG9yaWdpbmFsIHNjcmVlbiBzaXplOiAiICsgb3JpZ2luYWxTY3JlZW5TaXplICsgIi4g
RXhwZWN0IHJ1bnRpbWUgZmFpbHVyZXMgbGF0ZXIgb24uIik7CisKKyAgICAgICAgSW5zcGVjdG9y
VGVzdC5zZWxlY3ROb2RlQW5kV2FpdEZvclN0eWxlcygibWFpbiIsIHN0ZXAwKTsKKyAgICB9CisK
KyAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJnZXRTaXplcygpIiwgc2F2ZVNpemVD
YWxsYmFjayk7CisKKworICAgIGZ1bmN0aW9uIHN0ZXAwKCkKKyAgICB7CisgICAgICAgIG92ZXJy
aWRlQW5kRHVtcERhdGEoNDgwLCA5NjAsIHN0ZXAxKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBz
dGVwMSgpCisgICAgeworICAgICAgICBmdW5jdGlvbiBjb21wYXJlU2l6ZUNhbGxiYWNrKGpzb25S
ZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHNjcmVlbiBz
aXplIHJlcG9ydGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBvbmUuCisgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShqc29uUmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQuc2NyZWVuICE9PSBvcmlnaW5hbFNjcmVlblNpemUpCisgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk9yaWdpbmFsIHNpemUgIiArIG9yaWdpbmFsU2Ny
ZWVuU2l6ZSArICIgbm90IHJlc3RvcmVkLCBmb3VuZDogIiArIHJlc3VsdC5zY3JlZW4pOworICAg
ICAgICAgICAgc3RlcDIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG92ZXJyaWRl
Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRl
SW5QYWdlKCJnZXRTaXplcygpIiwgY29tcGFyZVNpemVDYWxsYmFjayk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBEaXNhYmxlIG92ZXJyaWRlcy4KKyAgICAgICAgUGFnZUFnZW50LnNldFNjcmVl
blNpemVPdmVycmlkZSgwLCAwLCBvdmVycmlkZUNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzdGVwMigpCisgICAgeworICAgICAgICBvdmVycmlkZUFuZER1bXBEYXRhKDk2MCwgNDgw
LCBzdGVwMyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RlcDMoKQorICAgIHsKKyAgICAgICAg
YXBwbHlPdmVycmlkZShleGNlZWRlZERpbWVuc2lvbiwgOTYwLCBzdGVwNCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc3RlcDQoKQorICAgIHsKKyAgICAgICAgYXBwbHlPdmVycmlkZSgtMSwgOTYw
LCBzdGVwNSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RlcDUoKQorICAgIHsKKyAgICAgICAg
YXBwbHlPdmVycmlkZSg0ODAsIGV4Y2VlZGVkRGltZW5zaW9uLCBzdGVwNik7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc3RlcDYoKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soKQor
ICAgICAgICB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiQ3VycmVudCBk
aW1lbnNpb25zOiIpOworICAgICAgICAgICAgZ2V0QW5kRHVtcFNpemVzKHN0ZXA3KTsKKyAgICAg
ICAgfQorICAgICAgICBhcHBseU92ZXJyaWRlKDQ4MCwgLTEsIGNhbGxiYWNrKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBzdGVwNygpCisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhq
c29uUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBKU09OLnBhcnNl
KGpzb25SZXN1bHQudmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlLnNjcmVlbiAhPT0gb3Jp
Z2luYWxTY3JlZW5TaXplKQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCJTY3JlZW4gc2l6ZSBub3QgcmVzdG9yZWQsIGFjdHVhbDogIiArIHZhbHVlLnNjcmVlbiArICIs
IGV4cGVjdGVkOiAiICsgb3JpZ2luYWxTY3JlZW5TaXplKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyZWVuIHNpemUgc2FtZSBh
cyBvcmlnaW5hbCAtIE9LIik7CisgICAgICAgICAgICBzdGVwOCgpOworICAgICAgICB9CisKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkRpc2FibGUgUGFnZUFnZW50OiIpOworICAg
ICAgICBQYWdlQWdlbnQuZGlzYWJsZSgpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRl
SW5QYWdlKCJnZXRTaXplcygpIiwgY2FsbGJhY2spOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0
ZXA4KCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGpzb25SZXN1bHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IEpTT04ucGFyc2UoanNvblJlc3VsdC52YWx1
ZSk7CisgICAgICAgICAgICBpZiAodmFsdWUuc2NyZWVuICE9PSBvcmlnaW5hbFNjcmVlblNpemUp
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmVlbiBzaXplIG5v
dCByZXN0b3JlZCwgYWN0dWFsOiAiICsgdmFsdWUuc2NyZWVuICsgIiwgZXhwZWN0ZWQ6ICIgKyBv
cmlnaW5hbFNjcmVlblNpemUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JlZW4gc2l6ZSBzYW1lIGFzIG9yaWdpbmFsIC0gT0si
KTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgIH0K
KworICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiRW5hYmxlIFBhZ2VBZ2VudDoiKTsK
KyAgICAgICAgUGFnZUFnZW50LmVuYWJsZSgpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1
YXRlSW5QYWdlKCJnZXRTaXplcygpIiwgY2FsbGJhY2spOworCisgICAgfQorCisgICAgZnVuY3Rp
b24gYXBwbHlPdmVycmlkZSh3aWR0aCwgaGVpZ2h0LCB1c2VyQ2FsbGJhY2spCisgICAgeworICAg
ICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGVycm9yKQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJPdmVycmlk
ZTogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIiA9PiBFUlJPUiIpOworICAgICAgICAgICAg
dXNlckNhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgUGFnZUFnZW50LnNldFNjcmVlblNp
emVPdmVycmlkZSh3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjayk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gb3ZlcnJpZGVBbmREdW1wRGF0YSh3aWR0aCwgaGVpZ2h0LCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIGZ1bmN0aW9uIHNlbGVjdENhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk1haW4gc3R5bGU6Iik7CisgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmR1bXBTZWxlY3RlZEVsZW1lbnRTdHlsZXModHJ1ZSwgZmFsc2UsIHRydWUpOwor
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGFw
cGx5Q2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBnZXRBbmREdW1wU2l6ZXMoc2Vs
ZWN0Q2FsbGJhY2spOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIk92ZXJyaWRlOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOworICAgICAgICBhcHBseU92
ZXJyaWRlKHdpZHRoLCBoZWlnaHQsIGFwcGx5Q2FsbGJhY2spOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGdldEFuZER1bXBTaXplcyhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGdl
dFNpemVzQ2FsbGJhY2soanNvblJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IEpTT04ucGFyc2UoanNvblJlc3VsdC52YWx1ZSk7CisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiU2NyZWVuIGZyb20gcGFnZTogIiArIHJlc3VsdC5zY3JlZW4pOwor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkJvZHkgZnJvbSBwYWdlOiAiICsg
cmVzdWx0LmJvZHkpOworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoImdldFNpemVzKCkiLCBnZXRTaXplc0Nh
bGxiYWNrKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgorPHA+CitUZXN0cyB0aGF0IHNjcmVlbiBkaW1lbnNpb24gb3ZlcnJpZGVzIGFm
ZmVjdCBtZWRpYSBydWxlcywgYm9keSBkaW1lbnNpb25zLCBhbmQgd2luZG93LnNjcmVlbi4KKzwv
cD4KKworPGRpdiBpZD0ibWFpbiI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="124104"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>