<?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>21427</bug_id>
          
          <creation_ts>2008-10-07 07:00:53 -0700</creation_ts>
          <short_desc>Implement NSAPI support for WebKit/Mac inside WebCore/plugins</short_desc>
          <delta_ts>2008-12-08 00:10:50 -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>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tor Arne Vestbø">vestbo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hausmann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>94354</commentid>
    <comment_count>0</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-10-07 07:00:53 -0700</bug_when>
    <thetext>First steps towards NSAPI support for QtWebKit/Mac. 

PluginPackageMac and PluginViewMac should have abstractions for any Qt specific stuff, just like PluginPackage/ViewWin.

No changelog for now, I&apos;ll add that once the patches are reviewed and ready to be put in. 

Does the general approach look OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94355</commentid>
    <comment_count>1</comment_count>
      <attachid>24143</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-10-07 07:02:46 -0700</bug_when>
    <thetext>Created attachment 24143
Moved implementation of _webkit_isCaseInsensitiveEqualToString to WebCore

Basis for patch 0003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94356</commentid>
    <comment_count>2</comment_count>
      <attachid>24144</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-10-07 07:03:11 -0700</bug_when>
    <thetext>Created attachment 24144
Move _web_encodingForResource from WebKit into WebCore

Basis for patch 0003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94357</commentid>
    <comment_count>3</comment_count>
      <attachid>24145</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-10-07 07:04:58 -0700</bug_when>
    <thetext>Created attachment 24145
Implement PluginPackageMac and PluginViewMac

Sorry, was referencing this one as 0003, but Bugzilla seems to remove the patch number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94591</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-10-08 12:24:49 -0700</bug_when>
    <thetext>On a more general note: What we&apos;re trying to achieve here is an implementation of NPAPI based on the existing PluginPackage/PluginView code that can be used across all ports that run on Mac OS X. It will take a while to become perfect, but we want to start in small steps. These patches are the basis to continue and implement more in smaller steps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98156</commentid>
    <comment_count>5</comment_count>
      <attachid>25016</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-11-10 08:13:01 -0800</bug_when>
    <thetext>Created attachment 25016
Rebased against ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98157</commentid>
    <comment_count>6</comment_count>
      <attachid>25017</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-11-10 08:13:23 -0800</bug_when>
    <thetext>Created attachment 25017
Move _web_encodingForResource from WebKit into WebCore and change return type

Rebased against ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98159</commentid>
    <comment_count>7</comment_count>
      <attachid>25019</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-11-10 08:13:39 -0800</bug_when>
    <thetext>Created attachment 25019
Implement PluginPackageMac and PluginViewMac, and enable NPAPI support for QtWebKit/Mac

Rebased against ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98452</commentid>
    <comment_count>8</comment_count>
      <attachid>25016</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-11-12 02:23:27 -0800</bug_when>
    <thetext>Comment on attachment 25016
Rebased against ToT

Looks good to me, but we should probably mention the reason behind this in the ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98453</commentid>
    <comment_count>9</comment_count>
      <attachid>25017</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-11-12 02:24:06 -0800</bug_when>
    <thetext>Comment on attachment 25017
Move _web_encodingForResource from WebKit into WebCore and change return type

Simple patch, looks good to me. We should also mention the reason here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98456</commentid>
    <comment_count>10</comment_count>
      <attachid>25019</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-11-12 02:38:14 -0800</bug_when>
    <thetext>Comment on attachment 25019
Implement PluginPackageMac and PluginViewMac, and enable NPAPI support for QtWebKit/Mac

&gt; From 97e0aaaa77ee021c33364169ad55a8c001573073 Mon Sep 17 00:00:00 2001
&gt; From: =?utf-8?q?Tor=20Arne=20Vestb=C3=B8?= &lt;tavestbo@trolltech.com&gt;
&gt; Date: Wed, 17 Sep 2008 16:56:24 +0200
&gt; Subject: [PATCH] =?utf-8?q?2008-11-10=20=20Tor=20Arne=20Vestb=C3=B8=20=20&lt;tavestbo@trolltech.com&gt;?=
&gt; MIME-Version: 1.0
&gt; Content-Type: text/plain; charset=utf-8
&gt; Content-Transfer-Encoding: 8bit
&gt; 
&gt;         Reviewed by NOBODY (OOPS!).
&gt; 
&gt;         Implement PluginPackageMac and PluginViewMac, and enable NPAPI support for QtWebKit/Mac

It seems the ChangeLog is missing here.

&gt; --- a/WebCore/plugins/PluginView.cpp
&gt; +++ b/WebCore/plugins/PluginView.cpp
&gt; @@ -138,8 +138,12 @@ void PluginView::frameRectsChanged() const
&gt;  
&gt;  void PluginView::handleEvent(Event* event)
&gt;  {
&gt; -    if (!m_plugin || m_isWindowed)
&gt; +    if (!m_plugin)
&gt;          return;
&gt; +#if !defined(XP_MACOSX)
&gt; +    if (m_isWindowed)
&gt; +        return;
&gt; +#endif

This #ifdef probably deserves a comment.

&gt; @@ -419,6 +423,12 @@ NPError PluginView::setValue(NPPVariable variable, void* value)
&gt;      case NPPVpluginTransparentBool:
&gt;          m_isTransparent = value;
&gt;          return NPERR_NO_ERROR;
&gt; +#if defined(XP_MACOSX)
&gt; +    case NPPVpluginDrawingModel:
&gt; +	return NPERR_NO_ERROR;
&gt; +    case NPPVpluginEventModel:
&gt; +	return NPERR_NO_ERROR;
&gt; +#endif

The indentation is off here.

&gt;          PlatformPluginWidget platformPluginWidget() const { return m_window; }
&gt; +        void setPlatformPluginWidget(PlatformPluginWidget widget) {
&gt; +            if (widget != m_window)
&gt; +                m_window = widget;
&gt; +        }

The assignment is probably faster enough to not require a check for inequality :)


&gt; +static int modifiersForEvent(UIEventWithKeyState *event)

Misplaced * :)


The rest looks good to me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98457</commentid>
    <comment_count>11</comment_count>
      <attachid>25019</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-11-12 02:38:49 -0800</bug_when>
    <thetext>Comment on attachment 25019
Implement PluginPackageMac and PluginViewMac, and enable NPAPI support for QtWebKit/Mac

Ooops, accidentially r+&apos;ed instead of r-. The comments need to be addressed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98460</commentid>
    <comment_count>12</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-11-12 02:52:53 -0800</bug_when>
    <thetext>First two patches landed in r38332 and r38333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98463</commentid>
    <comment_count>13</comment_count>
      <attachid>25095</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-11-12 04:38:10 -0800</bug_when>
    <thetext>Created attachment 25095
Updated patch

Fixed comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98467</commentid>
    <comment_count>14</comment_count>
      <attachid>25095</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-11-12 06:29:18 -0800</bug_when>
    <thetext>Comment on attachment 25095
Updated patch

&gt;  public:
&gt;          PlatformPluginWidget platformPluginWidget() const { return m_window; }
&gt; +        void setPlatformPluginWidget(PlatformPluginWidget widget) {
&gt; +                m_window = widget;
&gt; +        }

From the looks of it other code in WebCore puts simple inline setters in one line of code.

&gt; +    if (!dispatchNPEvent(record)) {
&gt; +        LOG(Events, &quot;PluginView::setFocus(): Get-focus event not accepted&quot;);
&gt; +    }
[...]
&gt; +    if (!m_isStarted) {
&gt; +        // TODO: Draw the &quot;missing plugin&quot; image
&gt; +        return;
&gt; +    }
[...]
&gt; +    if (!dispatchNPEvent(event)) {
&gt; +        LOG(Events, &quot;PluginView::paint(): Paint event not accepted&quot;);
&gt; +    }
[...]
&gt; +    if (!dispatchNPEvent(record)) {
&gt; +        LOG(Events, &quot;PluginView::handleKeyboardEvent(): Keyboard event type %d not accepted&quot;,
&gt; +                record.what);
&gt; +    } else {
&gt; +        event-&gt;setDefaultHandled();
&gt; +    }
[...]
&gt; +    if (!dispatchNPEvent(record)) {
&gt; +        LOG(Events, &quot;PluginView::nullEventTimerFired(): Null event not accepted&quot;);
&gt; +    }

All of these one line control clauses should not use braces.

I&apos;m really nitpicking here now :-), so r+ under the condition that you fix them before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101114</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-12-02 16:48:58 -0800</bug_when>
    <thetext>Have these patches all been landed?  If so, why is this bug still open?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101154</commentid>
    <comment_count>16</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2008-12-02 23:43:46 -0800</bug_when>
    <thetext>Ah, sorry Mark, yes they&apos;ve been landed in r38332, r38333, and r38371. Closing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24143</attachid>
            <date>2008-10-07 07:02:46 -0700</date>
            <delta_ts>2008-11-10 08:13:01 -0800</delta_ts>
            <desc>Moved implementation of _webkit_isCaseInsensitiveEqualToString to WebCore</desc>
            <filename>0001-Moved-the-implementation-of-_webkit_isCaseInsensitiv.patch</filename>
            <type>text/plain</type>
            <size>2977</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSBkMzI3MDRmMWNlYmJhMWJjNmUwNTlhOTBmZjBiZmQ1ZmVjYzg1MDA4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFR1ZSwgMTAgSnVuIDIwMDggMTQ6MzE6NTgg
KzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgX3dlYmtp
dF9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcgdG8KIFdlYkNvcmUncyBXZWJDb3JlTlNT
dHJpbmdFeHRyYXMgYXMgX3N0cmluZ0lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZy4KCi0t
LQogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr
CiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCAgfCAgICAxICsK
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSB8ICAgIDUgKysr
KysKIFdlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tICAgICAgICB8ICAgIDIg
Ky0KIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNl
LmV4cAppbmRleCA3NmYyMmM5Li5hMmU3ZTM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
YmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04NzAsNiArODcwLDcg
QEAgX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVudEUKIF9maWxlbmFtZUJ5Rml4aW5nSWxsZWdh
bENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcKIF9oYXNDYXNlSW5zZW5z
aXRpdmVTdWZmaXgKK19zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcKIF9zdWdn
ZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZQogX3drQWR2YW5jZURlZmF1bHRCdXR0b25QdWxzZUFu
aW1hdGlvbgogX3drQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgKaW5kZXggOTVkMjAzMS4uNzZlNzQ5MyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgKQEAgLTMy
LDYgKzMyLDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK0JPT0wgc3RyaW5nSXNDYXNlSW5z
ZW5zaXRpdmVFcXVhbFRvU3RyaW5nKE5TU3RyaW5nICpmaXJzdCwgTlNTdHJpbmcgKnNlY29uZCk7
CiBCT09MIGhhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeChOU1N0cmluZyAqc3RyaW5nLCBOU1N0cmlu
ZyAqc3VmZml4KTsKIEJPT0wgaGFzQ2FzZUluc2Vuc2l0aXZlU3Vic3RyaW5nKE5TU3RyaW5nICpz
dHJpbmcsIE5TU3RyaW5nICpzdWJzdHJpbmcpOwogTlNTdHJpbmcgKmZpbGVuYW1lQnlGaXhpbmdJ
bGxlZ2FsQ2hhcmFjdGVycyhOU1N0cmluZyAqc3RyaW5nKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbQppbmRleCBhMmIwYTI4Li45ZWRiNmIzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0KKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tCkBAIC0yOSw2
ICsyOSwxMSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdF
eHRyYXMuaCIKIAorQk9PTCBzdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcoTlNT
dHJpbmcgKmZpcnN0LCBOU1N0cmluZyAqc2Vjb25kKQoreworICAgIHJldHVybiBbZmlyc3QgY29t
cGFyZTpzZWNvbmQgb3B0aW9uczooTlNDYXNlSW5zZW5zaXRpdmVTZWFyY2h8TlNMaXRlcmFsU2Vh
cmNoKV0gPT0gTlNPcmRlcmVkU2FtZTsKK30KKwogQk9PTCBoYXNDYXNlSW5zZW5zaXRpdmVTdWZm
aXgoTlNTdHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnN1ZmZpeCkKIHsKICAgICByZXR1cm4gW3N0
cmluZyByYW5nZU9mU3RyaW5nOnN1ZmZpeCBvcHRpb25zOihOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJj
aCB8IE5TQmFja3dhcmRzU2VhcmNoIHwgTlNBbmNob3JlZFNlYXJjaCldLmxvY2F0aW9uICE9IE5T
Tm90Rm91bmQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRy
YXMubSBiL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tCmluZGV4IDE1NzA2
OWEuLmQ4ZWEzNjYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4
dHJhcy5tCisrKyBiL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tCkBAIC0x
OTEsNyArMTkxLDcgQEAgc3RhdGljIEJPT0wgY2FuVXNlRmFzdFJlbmRlcmVyKGNvbnN0IFVuaUNo
YXIgKmJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQogCiAtIChCT09MKV93ZWJraXRfaXNDYXNlSW5z
ZW5zaXRpdmVFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwogewotICByZXR1cm4gW3Nl
bGYgY29tcGFyZTpzdHJpbmcgb3B0aW9uczooTlNDYXNlSW5zZW5zaXRpdmVTZWFyY2h8TlNMaXRl
cmFsU2VhcmNoKV0gPT0gTlNPcmRlcmVkU2FtZTsKKyAgICByZXR1cm4gc3RyaW5nSXNDYXNlSW5z
ZW5zaXRpdmVFcXVhbFRvU3RyaW5nKHNlbGYsIHN0cmluZyk7CiB9CiAKIC0oQk9PTClfd2Via2l0
X2hhc0Nhc2VJbnNlbnNpdGl2ZVByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLS0gCjEuNi4wLnJj
MS4yNy5nOWI2YmYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24144</attachid>
            <date>2008-10-07 07:03:11 -0700</date>
            <delta_ts>2008-11-10 08:13:23 -0800</delta_ts>
            <desc>Move _web_encodingForResource from WebKit into WebCore</desc>
            <filename>0002-Move-_web_encodingForResource-from-WebKit-into-WebCo.patch</filename>
            <type>text/plain</type>
            <size>6206</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSBjY2Q3MjUzZWI2Y2M0ZWQ5NTY2ZjllNDkzMjk1ZjJkM2Y2ZGJhZTA4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFdlZCwgMTEgSnVuIDIwMDggMTU6MDg6NTAg
KzAyMDAKU3ViamVjdDogW1BBVENIXSBNb3ZlIF93ZWJfZW5jb2RpbmdGb3JSZXNvdXJjZSBmcm9t
IFdlYktpdCBpbnRvIFdlYkNvcmUgYW5kIGNoYW5nZSByZXR1cm4gdHlwZQoKLS0tCiBXZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5oICB8ICAgMTEgKysrKystCiBXZWJD
b3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0gfCAgIDUyICsrKysrKysr
KysrKysrKysrKysrKysrKysKIFdlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5t
ICAgICAgICB8ICAgNDggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwg
NjQgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGEyZTdlMzUu
LjJlNmI2YjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTg3MCw2ICs4NzAsNyBAQCBfX1pUVk43V2ViQ29yZTEy
Q2hyb21lQ2xpZW50RQogX2ZpbGVuYW1lQnlGaXhpbmdJbGxlZ2FsQ2hhcmFjdGVycwogX2hhc0Nh
c2VJbnNlbnNpdGl2ZVN1YnN0cmluZwogX2hhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeAorX3N0cmlu
Z0VuY29kaW5nRm9yUmVzb3VyY2UKIF9zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJp
bmcKIF9zdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZQogX3drQWR2YW5jZURlZmF1bHRCdXR0
b25QdWxzZUFuaW1hdGlvbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29y
ZU5TU3RyaW5nRXh0cmFzLmggYi9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdF
eHRyYXMuaAppbmRleCA3NmU3NDkzLi5mMDQwZjE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaApAQCAtMjYsNyArMjYsMTUgQEAKICAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDxvYmpjL29iamMuaD4KKwor
I2lmZGVmIF9fT0JKQ19fCisjaW5jbHVkZSA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CitAY2xh
c3MgTlNTdHJpbmc7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgTlNTdHJpbmcgTlNTdHJpbmc7Cisj
ZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTM2LDYgKzQ0LDcg
QEAgQk9PTCBzdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcoTlNTdHJpbmcgKmZp
cnN0LCBOU1N0cmluZyAqc2Vjb25kKTsKIEJPT0wgaGFzQ2FzZUluc2Vuc2l0aXZlU3VmZml4KE5T
U3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICpzdWZmaXgpOwogQk9PTCBoYXNDYXNlSW5zZW5zaXRp
dmVTdWJzdHJpbmcoTlNTdHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnN1YnN0cmluZyk7CiBOU1N0
cmluZyAqZmlsZW5hbWVCeUZpeGluZ0lsbGVnYWxDaGFyYWN0ZXJzKE5TU3RyaW5nICpzdHJpbmcp
OworQ0ZTdHJpbmdFbmNvZGluZyBzdHJpbmdFbmNvZGluZ0ZvclJlc291cmNlKEhhbmRsZSByZXNv
dXJjZSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tCmluZGV4IDllZGI2YjMuLmI3MDg3ZjEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbQorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0KQEAgLTY1LDMgKzY1
LDU1IEBAIE5TU3RyaW5nICpmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMoTlNTdHJp
bmcgKnN0cmluZykKICAgICAKICAgICByZXR1cm4gZmlsZW5hbWU7CiB9CisKK0NGU3RyaW5nRW5j
b2Rpbmcgc3RyaW5nRW5jb2RpbmdGb3JSZXNvdXJjZShIYW5kbGUgcmVzb3VyY2UpCit7CisgICAg
c2hvcnQgcmVzUmVmID0gSG9tZVJlc0ZpbGUocmVzb3VyY2UpOworICAgIGlmIChSZXNFcnJvcigp
ICE9IG5vRXJyKSB7CisgICAgICAgIHJldHVybiBOU01hY09TUm9tYW5TdHJpbmdFbmNvZGluZzsK
KyAgICB9CisgICAgCisgICAgLy8gR2V0IHRoZSBGU1JlZiBmb3IgdGhlIGN1cnJlbnQgcmVzb3Vy
Y2UgZmlsZQorICAgIEZTUmVmIGZyZWY7CisgICAgT1NTdGF0dXMgZXJyb3IgPSBGU0dldEZvcmtD
QkluZm8ocmVzUmVmLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAmZnJlZiwgTlVMTCk7CisgICAgaWYg
KGVycm9yICE9IG5vRXJyKSB7CisgICAgICAgIHJldHVybiBOU01hY09TUm9tYW5TdHJpbmdFbmNv
ZGluZzsKKyAgICB9CisgICAgCisgICAgQ0ZVUkxSZWYgVVJMID0gQ0ZVUkxDcmVhdGVGcm9tRlNS
ZWYoTlVMTCwgJmZyZWYpOworICAgIGlmIChVUkwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4g
TlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7CisgICAgfQorICAgIAorICAgIE5TU3RyaW5nICpw
YXRoID0gWyhOU1VSTCAqKVVSTCBwYXRoXTsKKyAgICBDRlJlbGVhc2UoVVJMKTsKKyAgICAKKyAg
ICAvLyBHZXQgdGhlIGxwcm9qIGRpcmVjdG9yeSBuYW1lCisgICAgcGF0aCA9IFtwYXRoIHN0cmlu
Z0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAgaWYgKCFzdHJpbmdJc0Nhc2VJbnNl
bnNpdGl2ZUVxdWFsVG9TdHJpbmcoW3BhdGggcGF0aEV4dGVuc2lvbl0sIEAibHByb2oiKSkgewor
ICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7CisgICAgfQorICAgIAor
ICAgIE5TU3RyaW5nICpkaXJlY3RvcnlOYW1lID0gW1twYXRoIHN0cmluZ0J5RGVsZXRpbmdQYXRo
RXh0ZW5zaW9uXSBsYXN0UGF0aENvbXBvbmVudF07CisgICAgQ0ZTdHJpbmdSZWYgbG9jYWxlID0g
Q0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJZGVudGlmaWVyRnJvbVN0cmluZyhOVUxMLCAo
Q0ZTdHJpbmdSZWYpZGlyZWN0b3J5TmFtZSk7CisgICAgaWYgKGxvY2FsZSA9PSBOVUxMKSB7Cisg
ICAgICAgIHJldHVybiBOU01hY09TUm9tYW5TdHJpbmdFbmNvZGluZzsKKyAgICB9CisgICAgICAg
ICAgICAKKyAgICBMYW5nQ29kZSBsYW5nOworICAgIFJlZ2lvbkNvZGUgcmVnaW9uOworICAgIGVy
cm9yID0gTG9jYWxlU3RyaW5nVG9MYW5nQW5kUmVnaW9uQ29kZXMoWyhOU1N0cmluZyAqKWxvY2Fs
ZSBVVEY4U3RyaW5nXSwgJmxhbmcsICZyZWdpb24pOworICAgIENGUmVsZWFzZShsb2NhbGUpOwor
ICAgIGlmIChlcnJvciAhPSBub0VycikgeworICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3Ry
aW5nRW5jb2Rpbmc7CisgICAgfQorICAgIAorICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKKyAg
ICBlcnJvciA9IFVwZ3JhZGVTY3JpcHRJbmZvVG9UZXh0RW5jb2Rpbmcoa1RleHRTY3JpcHREb250
Q2FyZSwgbGFuZywgcmVnaW9uLCBOVUxMLCAmZW5jb2RpbmcpOworICAgIGlmIChlcnJvciAhPSBu
b0VycikgeworICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7CisgICAg
fQorICAgIAorICAgIHJldHVybiBlbmNvZGluZzsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21h
Yy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm0gYi9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNT
dHJpbmdFeHRyYXMubQppbmRleCBkOGVhMzY2Li4yZTc1ZTllIDEwMDY0NAotLS0gYS9XZWJLaXQv
bWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQorKysgYi9XZWJLaXQvbWFjL01pc2MvV2Vi
S2l0TlNTdHJpbmdFeHRyYXMubQpAQCAtMTQwLDUzICsxNDAsNyBAQCBzdGF0aWMgQk9PTCBjYW5V
c2VGYXN0UmVuZGVyZXIoY29uc3QgVW5pQ2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCiAK
ICsgKE5TU3RyaW5nRW5jb2RpbmcpX3dlYl9lbmNvZGluZ0ZvclJlc291cmNlOihIYW5kbGUpcmVz
b3VyY2UKIHsKLSAgICBzaG9ydCByZXNSZWYgPSBIb21lUmVzRmlsZShyZXNvdXJjZSk7Ci0gICAg
aWYgKFJlc0Vycm9yKCkgIT0gbm9FcnIpIHsKLSAgICAgICAgcmV0dXJuIE5TTWFjT1NSb21hblN0
cmluZ0VuY29kaW5nOwotICAgIH0KLSAgICAKLSAgICAvLyBHZXQgdGhlIEZTUmVmIGZvciB0aGUg
Y3VycmVudCByZXNvdXJjZSBmaWxlCi0gICAgRlNSZWYgZnJlZjsKLSAgICBPU1N0YXR1cyBlcnJv
ciA9IEZTR2V0Rm9ya0NCSW5mbyhyZXNSZWYsIDAsIE5VTEwsIE5VTEwsIE5VTEwsICZmcmVmLCBO
VUxMKTsKLSAgICBpZiAoZXJyb3IgIT0gbm9FcnIpIHsKLSAgICAgICAgcmV0dXJuIE5TTWFjT1NS
b21hblN0cmluZ0VuY29kaW5nOwotICAgIH0KLSAgICAKLSAgICBDRlVSTFJlZiBVUkwgPSBDRlVS
TENyZWF0ZUZyb21GU1JlZihOVUxMLCAmZnJlZik7Ci0gICAgaWYgKFVSTCA9PSBOVUxMKSB7Ci0g
ICAgICAgIHJldHVybiBOU01hY09TUm9tYW5TdHJpbmdFbmNvZGluZzsKLSAgICB9Ci0gICAgCi0g
ICAgTlNTdHJpbmcgKnBhdGggPSBbKE5TVVJMICopVVJMIHBhdGhdOwotICAgIENGUmVsZWFzZShV
UkwpOwotICAgIAotICAgIC8vIEdldCB0aGUgbHByb2ogZGlyZWN0b3J5IG5hbWUKLSAgICBwYXRo
ID0gW3BhdGggc3RyaW5nQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XTsKLSAgICBpZiAoIVtb
cGF0aCBwYXRoRXh0ZW5zaW9uXSBfd2Via2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmlu
ZzpAImxwcm9qIl0pIHsKLSAgICAgICAgcmV0dXJuIE5TTWFjT1NSb21hblN0cmluZ0VuY29kaW5n
OwotICAgIH0KLSAgICAKLSAgICBOU1N0cmluZyAqZGlyZWN0b3J5TmFtZSA9IFtbcGF0aCBzdHJp
bmdCeURlbGV0aW5nUGF0aEV4dGVuc2lvbl0gbGFzdFBhdGhDb21wb25lbnRdOwotICAgIENGU3Ry
aW5nUmVmIGxvY2FsZSA9IENGTG9jYWxlQ3JlYXRlQ2Fub25pY2FsTG9jYWxlSWRlbnRpZmllckZy
b21TdHJpbmcoTlVMTCwgKENGU3RyaW5nUmVmKWRpcmVjdG9yeU5hbWUpOwotICAgIGlmIChsb2Nh
bGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7
Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgTGFuZ0NvZGUgbGFuZzsKLSAgICBSZWdpb25Db2Rl
IHJlZ2lvbjsKLSAgICBlcnJvciA9IExvY2FsZVN0cmluZ1RvTGFuZ0FuZFJlZ2lvbkNvZGVzKFso
TlNTdHJpbmcgKilsb2NhbGUgVVRGOFN0cmluZ10sICZsYW5nLCAmcmVnaW9uKTsKLSAgICBDRlJl
bGVhc2UobG9jYWxlKTsKLSAgICBpZiAoZXJyb3IgIT0gbm9FcnIpIHsKLSAgICAgICAgcmV0dXJu
IE5TTWFjT1NSb21hblN0cmluZ0VuY29kaW5nOwotICAgIH0KLSAgICAKLSAgICBUZXh0RW5jb2Rp
bmcgZW5jb2Rpbmc7Ci0gICAgZXJyb3IgPSBVcGdyYWRlU2NyaXB0SW5mb1RvVGV4dEVuY29kaW5n
KGtUZXh0U2NyaXB0RG9udENhcmUsIGxhbmcsIHJlZ2lvbiwgTlVMTCwgJmVuY29kaW5nKTsKLSAg
ICBpZiAoZXJyb3IgIT0gbm9FcnIpIHsKLSAgICAgICAgcmV0dXJuIE5TTWFjT1NSb21hblN0cmlu
Z0VuY29kaW5nOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gQ0ZTdHJpbmdDb252ZXJ0RW5jb2Rp
bmdUb05TU3RyaW5nRW5jb2RpbmcoZW5jb2RpbmcpOworICAgIHJldHVybiBDRlN0cmluZ0NvbnZl
cnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNvZGluZyhzdHJpbmdFbmNvZGluZ0ZvclJlc291cmNlKHJl
c291cmNlKSk7CiB9CiAKIC0gKEJPT0wpX3dlYmtpdF9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9T
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi0tIAoxLjYuMC5yYzEuMjcuZzliNmJmCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24145</attachid>
            <date>2008-10-07 07:04:58 -0700</date>
            <delta_ts>2008-11-10 08:13:39 -0800</delta_ts>
            <desc>Implement PluginPackageMac and PluginViewMac</desc>
            <filename>0003-Implement-PluginPackageMac-and-PluginViewMac-and-en.patch</filename>
            <type>text/plain</type>
            <size>42699</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSA4ZGU5OGM4NzJiNjVjMGE2Mjk0OTk3NjA1NzlmNDg1ZjUwZWViMzgwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFdlZCwgMTcgU2VwIDIwMDggMTY6NTY6MjQg
KzAyMDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1lbnQgUGx1Z2luUGFja2FnZU1hYyBhbmQgUGx1
Z2luVmlld01hYywgYW5kIGVuYWJsZSBOUEFQSSBzdXBwb3J0IGZvciBRdFdlYktpdC9NYWMKCi0t
LQogV2ViQ29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1OCArKy0K
IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCB8ICAgIDQgKy0KIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCAgICAgICAgICAgICB8ICAgMTQgKy0KIFdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmggICAgICAgICAgICAgICB8ICAgMjAgKy0KIFdlYkNvcmUv
cGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAgICB8ICAzNjMgKysrKysrKysrKysrKysr
CiBXZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMuY3BwICAgICAgfCAgNjkwICsrKysr
KysrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMTEyNCBpbnNlcnRpb25z
KCspLCAyNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsdWdpbnMv
bWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbHVn
aW5zL21hYy9QbHVnaW5WaWV3TWFjLmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDk3MTY4MTAuLjAxYzhmMzcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzIs
MTIgKzcyLDE0IEBAIHdpbjMyLWcrKyB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19B
TklNQVRJT049Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19BTklNQVRJT049MQogIWNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9TVkdfQVNfSU1BR0U9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19B
U19JTUFHRT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19VU0U9Lik6IERFRklORVMg
Kz0gRU5BQkxFX1NWR19VU0U9MQorCisjIEhUTUw1IG1lZGlhIHN1cHBvcnQKIGNvbnRhaW5zKFFU
X0NPTkZJRywgcGhvbm9uKTpERUZJTkVTICs9IEVOQUJMRV9WSURFTz0xCiBlbHNlOkRFRklORVMg
Kz0gRU5BQkxFX1ZJREVPPTAKIAotdW5peHx3aW4zMi0qOiFtYWM6IWVtYmVkZGVkOiF3aW5jZSog
eworIyBOZXNjYXBlIHBsdWdpbnMgc3VwcG9ydCAoTlBBUEkpCit1bml4fHdpbjMyLSo6IWVtYmVk
ZGVkOiF3aW5jZSogewogICAgIERFRklORVMgKz0gRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9
MQotICAgIHVuaXg6IERFRklORVMgKz0gWFBfVU5JWAogfSBlbHNlIHsKICAgICBERUZJTkVTICs9
IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTAKIH0KQEAgLTEwODYsNiArMTA4OCwxMiBAQCBT
T1VSQ0VTICs9IFwKICAgICB3aW4zMi0qOiBTT1VSQ0VTICs9IHBsYXRmb3JtL3dpbi9TeXN0ZW1U
aW1lV2luLmNwcAogICAgIGVsc2U6IFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvU3lzdGVtVGltZVF0
LmNwcAogCisgICAgbWFjIHsKKyAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICBwbGF0
Zm9ybS90ZXh0L2NmL1N0cmluZ0NGLmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS90ZXh0L2Nm
L1N0cmluZ0ltcGxDRi5jcHAKKyAgICB9CisKICAgICB3aW4zMi0qIHsKICAgICAgICAgTElCUyAr
PSAtbGdkaTMyCiAgICAgICAgIExJQlMgKz0gLWx1c2VyMzIKQEAgLTExMDgsMzEgKzExMTYsNDMg
QEAgU09VUkNFUyArPSBcCiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVH
SU5fQVBJPTEpIHsKIAotICAgICAgICBTT1VSQ0VTICs9IHBsdWdpbnMvbnBhcGkuY3BwCisgICAg
U09VUkNFUyArPSBwbHVnaW5zL25wYXBpLmNwcAogCi0gICAgICAgIHVuaXg6IW1hYyB7CisgICAg
dW5peCB7CisgICAgICAgIG1hYyB7CisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
ICAgICAgICBwbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcCBcCisgICAgICAgICAgICAg
ICAgcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5jcHAKKyAgICAgICAgICAgIE9CSkVDVElWRV9T
T1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBs
TWFjLm1tIFwKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0
cmFzLm1tCisgICAgICAgICAgICBJTkNMVURFUEFUSCArPSBwbGF0Zm9ybS9tYWMKKyAgICAgICAg
ICAgICMgTm90ZTogWFBfTUFDT1NYIGlzIGRlZmluZWQgaW4gbnBhcGkuaAorICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICAgICAgcGx1Z2lucy9x
dC9QbHVnaW5QYWNrYWdlUXQuY3BwIFwKICAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdp
blZpZXdRdC5jcHAKKyAgICAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAogICAgICAgICB9Cisg
ICAgfQogCi0gICAgICAgIHdpbjMyLSogewotICAgICAgICAgICAgSU5DTFVERVBBVEggKz0gJCRQ
V0QvcGx1Z2lucy93aW4KLQotICAgICAgICAgICAgU09VUkNFUyArPSBwYWdlL3dpbi9QYWdlV2lu
LmNwcCBcCi0gICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNl
V2luLmNwcCBcCi0gICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbi5jcHAgXAotICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dp
bi9QbHVnaW5WaWV3V2luLmNwcAotCi0gICAgICAgICAgICBMSUJTICs9IFwKLSAgICAgICAgICAg
ICAgICAtbGFkdmFwaTMyIFwKLSAgICAgICAgICAgICAgICAtbGdkaTMyIFwKLSAgICAgICAgICAg
ICAgICAtbHNoZWxsMzIgXAotICAgICAgICAgICAgICAgIC1sc2hsd2FwaSBcCi0gICAgICAgICAg
ICAgICAgLWx1c2VyMzIgXAotICAgICAgICAgICAgICAgIC1sdmVyc2lvbgotICAgICAgICB9Cisg
ICAgd2luMzItKiB7CisgICAgICAgIElOQ0xVREVQQVRIICs9ICQkUFdEL3BsdWdpbnMvd2luCisK
KyAgICAgICAgU09VUkNFUyArPSBwYWdlL3dpbi9QYWdlV2luLmNwcCBcCisgICAgICAgICAgICAg
ICAgICAgcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwKKyAgICAgICAgICAgICAg
ICAgICBwbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBcCisgICAgICAgICAgICAgICAg
ICAgcGx1Z2lucy93aW4vUGx1Z2luTWVzc2FnZVRocm90dGxlcldpbi5jcHAgXAorICAgICAgICAg
ICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCisKKyAgICAgICAgTElCUyAr
PSBcCisgICAgICAgICAgICAtbGFkdmFwaTMyIFwKKyAgICAgICAgICAgIC1sZ2RpMzIgXAorICAg
ICAgICAgICAgLWxzaGVsbDMyIFwKKyAgICAgICAgICAgIC1sc2hsd2FwaSBcCisgICAgICAgICAg
ICAtbHVzZXIzMiBcCisgICAgICAgICAgICAtbHZlcnNpb24KKyAgICB9CiAKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCmluZGV4IGYyNjI2ODQuLmNlYmQ4
NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKQEAgLTc0
LDcgKzc0LDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNpZiAhZGVmaW5lZChR
X1dTX1gxMSkgJiYgIWRlZmluZWQoUV9XU19XSU4pCisjaWYgIWRlZmluZWQoUV9XU19YMTEpICYm
ICFkZWZpbmVkKFFfV1NfV0lOKSAmJiAhZGVmaW5lZChRX1dTX01BQykKIAogYm9vbCBQbHVnaW5Q
YWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQog
dW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KQEAgLTgzLDYgKzgzLDcgQEAgaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVG
aWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdCB7IG5vdEkKIAog
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQogY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFn
ZW50U3RhdGljKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogdm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQg
UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CiB2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CkBAIC05Nyw2ICs5OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsdWdpblZpZXc6Omhh
bmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogTlBFcnJv
ciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiwgdWludDMyLCBj
b25zdCBjaGFyKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsgfQogTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSwgdm9pZCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KK05QRXJyb3Ig
UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUsIHZvaWQqKSB7IHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOyB9CiBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpIHt9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDJmZGRkNDguLjE2MGZiZjkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKQEAgLTE0MCw4ICsxNDAsMTIgQEAgdm9pZCBQbHVnaW5WaWV3OjpmcmFt
ZVJlY3RzQ2hhbmdlZCgpIGNvbnN0CiAKIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZl
bnQqIGV2ZW50KQogewotICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgIGlm
ICghbV9wbHVnaW4pCiAgICAgICAgIHJldHVybjsKKyNpZiAhZGVmaW5lZChYUF9NQUNPU1gpCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCiAKICAgICBpZiAo
ZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19j
YXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwpAQCAtNDIxLDYgKzQyNSwxMiBAQCBOUEVycm9yIFBs
dWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKICAg
ICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CiAgICAgICAgIG1faXNUcmFuc3BhcmVu
dCA9IHZhbHVlOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisjaWYgZGVmaW5lZChY
UF9NQUNPU1gpCisgICAgY2FzZSBOUFBWcGx1Z2luRHJhd2luZ01vZGVsOgorCXJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICBjYXNlIE5QUFZwbHVnaW5FdmVudE1vZGVsOgorCXJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwpAQCAtNTU2LDcgKzU2Niw3
IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBQbHVnaW5QYWNrYWdlKiBwCiAgICAgLCBtX2xhc3RNZXNzYWdlKDApCiAgICAg
LCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MoZmFsc2UpCiAjZW5kaWYKLSNpZiBQTEFURk9STShX
SU5fT1MpICYmIFBMQVRGT1JNKFFUKQorI2lmIChQTEFURk9STShXSU5fT1MpICYmIFBMQVRGT1JN
KFFUKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gpCiAgICAgLCBtX3dpbmRvdygwKQogI2VuZGlmCiAg
ICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCAz
NDA0YWJiLi4xZWExNDFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTI2MywxMSArMjYzLDE2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFBy
b2M7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTl9PUykgJiYgUExBVEZPUk0oUVQpCi0gICAg
ICAgIC8vIE9ubHkgdW5kZXIgUXQgb24gV2luZG93cywgdGhlIHBsdWdpbiB3aWRnZXQgKEhXTkQp
IGRvZXMgbm90IG1hdGNoIHRoZSBuYXRpdmUgd2lkZ2V0IChRV2lkZ2V0KS4KLSAgICAgICAgUGxh
dGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworI2lm
IChQTEFURk9STShRVCkgJiYgUExBVEZPUk0oV0lOX09TKSkgfHwgZGVmaW5lZChYUF9NQUNPU1gp
CisgICAgICAgIC8vIE9uIE1hYyBPU1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5v
dCBoYXZlIGl0cyBvd24gbmF0aXZlIHdpZGdldCwKKyAgICAgICAgLy8gYnV0IGlzIHVzaW5nIHRo
ZSBjb250YWluaW5nIHdpbmRvdyBhcyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9wYWlu
dGluZy4KKyAgICAgICAgUGxhdGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CiBwdWJsaWM6CiAg
ICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV93aW5kb3c7IH0KKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVBsdWdpbldpZGdl
dChQbGF0Zm9ybVBsdWdpbldpZGdldCB3aWRnZXQpIHsKKyAgICAgICAgICAgIGlmICh3aWRnZXQg
IT0gbV93aW5kb3cpCisgICAgICAgICAgICAgICAgbV93aW5kb3cgPSB3aWRnZXQ7CisgICAgICAg
IH0KICNlbHNlCiBwdWJsaWM6CiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQoKTsgfQpAQCAtMjc1
LDYgKzI4MCwxNSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKKyNpZiBkZWZpbmVkKFhQX01BQ09T
WCkKKyAgICAgICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7CisgICAgICAgIE93blB0cjxU
aW1lcjxQbHVnaW5WaWV3PiA+IG1fbnVsbEV2ZW50VGltZXI7CisKKyAgICAgICAgdm9pZCBzZXRO
UFdpbmRvd0lmTmVlZGVkKCk7CisgICAgICAgIHZvaWQgbnVsbEV2ZW50VGltZXJGaXJlZChUaW1l
cjxQbHVnaW5WaWV3PiopOworICAgICAgICBQb2ludCBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigp
IGNvbnN0OworI2VuZGlmCisKICAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8v
IFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCiAgICAgICAgIG11
dGFibGUgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcCBiL1dlYkNvcmUv
cGx1Z2lucy9tYWMvUGx1Z2luUGFja2FnZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZGMzNzgyZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9t
YWMvUGx1Z2luUGFja2FnZU1hYy5jcHAKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlLmgiCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIldlYkNvcmVOU1N0cmlu
Z0V4dHJhcy5oIgorCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4K
KworI2RlZmluZSBQbHVnaW5OYW1lT3JEZXNjcmlwdGlvblN0cmluZ051bWJlciAgICAgMTI2Cisj
ZGVmaW5lIE1JTUVEZXNjcmlwdGlvblN0cmluZ051bWJlciAgICAgICAgICAgICAxMjcKKyNkZWZp
bmUgTUlNRUxpc3RTdHJpbmdTdHJpbmdOdW1iZXIgICAgICAgICAgICAgIDEyOAorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFw
cGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHBy
b2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkg
dW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBw
bHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8vIFNl
dHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Ny
b2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWlu
LgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVu
U2Nyb2xsaW5nKTsKKyAgICB9CisKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gt
c2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVx
dWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2Vu
dAorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQp
OworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOwor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNz
YWdlcyk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVn
KTsKKyAgICB9CisKK30KKwordHlwZWRlZiB2b2lkICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVz
UHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKKworc3RhdGljIFdURjo6UmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gcmVhZFBMaXN0RmlsZShDRlN0cmluZ1JlZiBmaWxlTmFtZSwgYm9vbCBjcmVh
dGVGaWxlLCBDRkJ1bmRsZVJlZiBidW5kbGUpCit7CisgICAgaWYgKGNyZWF0ZUZpbGUpIHsKKyAg
ICAgICAgQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyIGZ1bmNQdHIg
PQorICAgICAgICAgICAgKEJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzRnVuY1B0
cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoYnVuZGxlLCBDRlNUUigiQlBfQ3Jl
YXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXMiKSk7CisgICAgICAgIGlmIChmdW5jUHRyKQor
ICAgICAgICAgICAgZnVuY1B0cigpOworICAgIH0KKworICAgIFdURjo6UmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gbWFwOworICAgIFdURjo6UmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPQorICAg
ICAgICBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBm
aWxlTmFtZSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKTsKKworICAgIENGRGF0YVJlZiBy
ZXNvdXJjZSA9IDA7CisgICAgU0ludDMyIGNvZGU7CisgICAgaWYgKCFDRlVSTENyZWF0ZURhdGFB
bmRQcm9wZXJ0aWVzRnJvbVJlc291cmNlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybC5nZXQoKSwg
JnJlc291cmNlLCAwLCAwLCAmY29kZSkpCisgICAgICAgIHJldHVybiBtYXA7CisKKyAgICBXVEY6
OlJldGFpblB0cjxDRlByb3BlcnR5TGlzdFJlZj4gcHJvcGVydHlMaXN0ID0KKyAgICAgICAgICAg
IENGUHJvcGVydHlMaXN0Q3JlYXRlRnJvbVhNTERhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVz
b3VyY2UsIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCk7CisKKyAgICBDRlJlbGVhc2UocmVz
b3VyY2UpOworCisgICAgaWYgKCFwcm9wZXJ0eUxpc3QpCisgICAgICAgIHJldHVybiBtYXA7CisK
KyAgICBpZiAoQ0ZHZXRUeXBlSUQocHJvcGVydHlMaXN0LmdldCgpKSAhPSBDRkRpY3Rpb25hcnlH
ZXRUeXBlSUQoKSkKKyAgICAgICAgcmV0dXJuIG1hcDsKKworICAgIG1hcCA9IHN0YXRpY19jYXN0
PENGRGljdGlvbmFyeVJlZj4oc3RhdGljX2Nhc3Q8Q0ZQcm9wZXJ0eUxpc3RSZWY+KHByb3BlcnR5
TGlzdC5nZXQoKSkpOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBWZWN0b3I8U3RyaW5n
PiBzdHJpbmdMaXN0RnJvbVJlc291cmNlSWQoU0ludDE2IGlkKQoreworICAgIFZlY3RvcjxTdHJp
bmc+IGxpc3Q7CisKKyAgICBIYW5kbGUgaGFuZGxlID0gR2V0MVJlc291cmNlKCdTVFIjJywgaWQp
OworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gbGlzdDsKKworICAgIENGU3RyaW5n
RW5jb2RpbmcgZW5jb2RpbmcgPSBzdHJpbmdFbmNvZGluZ0ZvclJlc291cmNlKGhhbmRsZSk7CisK
KyAgICB1bnNpZ25lZCBjaGFyKiBwID0gKHVuc2lnbmVkIGNoYXIqKSpoYW5kbGU7CisgICAgaWYg
KCFwKQorICAgICAgICByZXR1cm4gbGlzdDsKKworICAgIFNJbnQxNiBjb3VudCA9ICooU0ludDE2
KilwOworICAgIHAgKz0gc2l6ZW9mKFNJbnQxNik7CisKKyAgICBmb3IgKFNJbnQxNiBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBsZW5ndGggPSAqcDsKKyAg
ICAgICAgV1RGOjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0
aFBhc2NhbFN0cmluZygwLCBwLCBlbmNvZGluZyk7CisgICAgICAgIGxpc3QuYXBwZW5kKHN0ci5n
ZXQoKSk7CisgICAgICAgIHAgKz0gMSArIGxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gbGlz
dDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9h
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXVEY6OlJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IG1pbWVEaWN0OworCisgICAgV1RGOjpSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBtaW1l
VHlwZXNGaWxlTmFtZSA9IENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21v
ZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbk1JTUVUeXBlc0ZpbGVuYW1lIikpOworICAgIGlmIChtaW1l
VHlwZXNGaWxlTmFtZSAmJiBDRkdldFR5cGVJRChtaW1lVHlwZXNGaWxlTmFtZS5nZXQoKSkgPT0g
Q0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworCisgICAgICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5n
UmVmPiBmaWxlTmFtZSA9IChDRlN0cmluZ1JlZiltaW1lVHlwZXNGaWxlTmFtZS5nZXQoKTsKKyAg
ICAgICAgV1RGOjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvbWVEaXIgPSBob21lRGlyZWN0b3J5
UGF0aCgpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5n
UmVmPiBwYXRoID0gQ0ZTdHJpbmdDcmVhdGVXaXRoRm9ybWF0KDAsIDAsIENGU1RSKCIlQC9MaWJy
YXJ5L1ByZWZlcmVuY2VzLyVAIiksIGhvbWVEaXIuZ2V0KCksIGZpbGVOYW1lLmdldCgpKTsKKwor
ICAgICAgICBXVEY6OlJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBsaXN0ID0gcmVhZFBMaXN0
RmlsZShwYXRoLmdldCgpLCAvKmNyZWF0ZUZpbGUqLyBmYWxzZSwgbV9tb2R1bGUpOworICAgICAg
ICBpZiAocGxpc3QpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwbGlzdCBpc24ndCBsb2NhbGl6
ZWQsIGhhdmUgdGhlIHBsdWctaW4gcmVjcmVhdGUgaXQgaW4gdGhlIHByZWZlcnJlZCBsYW5ndWFn
ZS4KKyAgICAgICAgICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2NhbGl6YXRpb25O
YW1lID0KKyAgICAgICAgICAgICAgICAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cGxpc3QuZ2V0KCksIENGU1RSKCJXZWJQbHVnaW5Mb2NhbGl6YXRpb25OYW1lIikpOworICAgICAg
ICAgICAgQ0ZMb2NhbGVSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOworICAgICAg
ICAgICAgaWYgKGxvY2FsaXphdGlvbk5hbWUgIT0gQ0ZMb2NhbGVHZXRJZGVudGlmaWVyKGxvY2Fs
ZSkpCisgICAgICAgICAgICAgICAgcGxpc3QgPSByZWFkUExpc3RGaWxlKHBhdGguZ2V0KCksIC8q
Y3JlYXRlRmlsZSovIHRydWUsIG1fbW9kdWxlKTsKKworICAgICAgICAgICAgQ0ZSZWxlYXNlKGxv
Y2FsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBQbGlzdCBkb2Vzbid0IGV4
aXN0LCBhc2sgdGhlIHBsdWctaW4gdG8gY3JlYXRlIGl0LgorICAgICAgICAgICAgcGxpc3QgPSBy
ZWFkUExpc3RGaWxlKHBhdGguZ2V0KCksIC8qY3JlYXRlRmlsZSovIHRydWUsIG1fbW9kdWxlKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1pbWVEaWN0ID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShwbGlzdC5nZXQoKSwgQ0ZTVFIoIldlYlBsdWdpbk1JTUVUeXBlcyIpKTsK
KyAgICB9CisKKyAgICBpZiAoIW1pbWVEaWN0KQorICAgICAgICBtaW1lRGljdCA9IChDRkRpY3Rp
b25hcnlSZWYpQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KG1fbW9kdWxlLCBD
RlNUUigiV2ViUGx1Z2luTUlNRVR5cGVzIikpOworCisgICAgaWYgKG1pbWVEaWN0KSB7CisgICAg
ICAgIENGSW5kZXggcHJvcENvdW50ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQobWltZURpY3QuZ2V0
KCkpOworICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCosIDEyOD4ga2V5cyhwcm9wQ291bnQpOwor
ICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCosIDEyOD4gdmFsdWVzKHByb3BDb3VudCk7CisgICAg
ICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1ZXMobWltZURpY3QuZ2V0KCksIGtleXMuZGF0
YSgpLCB2YWx1ZXMuZGF0YSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wQ291
bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gKENGU3RyaW5nUmVmKWtl
eXNbaV07CisgICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICAg
ICAgICAgIFdURjo6UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZXh0ZW5zaW9uc0RpY3QgPSAo
Q0ZEaWN0aW9uYXJ5UmVmKXZhbHVlc1tpXTsKKworICAgICAgICAgICAgV1RGOlJldGFpblB0cjxD
Rk51bWJlclJlZj4gZW5hYmxlZCA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShl
eHRlbnNpb25zRGljdC5nZXQoKSwgQ0ZTVFIoIldlYlBsdWdpblR5cGVFbmFibGVkIikpOworICAg
ICAgICAgICAgaWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZFZhbHVl
ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJHZXRWYWx1ZShlbmFibGVkLmdldCgp
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZW5hYmxlZFZhbHVlKSAmJiBlbmFibGVkVmFsdWUgPT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IG1pbWVFeHRlbnNpb25zOworICAgICAgICAgICAgV1RGOjpSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gZXh0ZW5zaW9ucyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKGV4dGVuc2lvbnNEaWN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luRXh0ZW5zaW9ucyIp
KTsKKyAgICAgICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAgICAgICAgICAgICAgQ0ZJbmRl
eCBleHRlbnNpb25Db3VudCA9IENGQXJyYXlHZXRDb3VudChleHRlbnNpb25zLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBleHRlbnNpb25Db3VudDsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPShDRlN0cmluZ1JlZilD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGV4dGVuc2lvbnMuZ2V0KCksIGkpOworICAgICAgICAgICAg
ICAgICAgICBleHRlbnNpb24gPSBleHRlbnNpb24ubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWltZUV4dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLnNldChtaW1lVHlw
ZSwgbWltZUV4dGVuc2lvbnMpOworCisgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAo
Q0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZXh0ZW5zaW9uc0RpY3QuZ2V0KCksIENG
U1RSKCJXZWJQbHVnaW5UeXBlRGVzY3JpcHRpb24iKSk7CisgICAgICAgICAgICBtX21pbWVUb0Rl
c2NyaXB0aW9ucy5zZXQobWltZVR5cGUsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fbmFtZSA9IChDRlN0cmluZ1JlZilDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25h
cnlLZXkobV9tb2R1bGUsIENGU1RSKCJXZWJQbHVnaW5OYW1lIikpOworICAgICAgICBtX2Rlc2Ny
aXB0aW9uID0gKENGU3RyaW5nUmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtl
eShtX21vZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbkRlc2NyaXB0aW9uIikpOworCisgICAgfSBlbHNl
IHsKKyAgICAgICAgQ0ZCdW5kbGVSZWZOdW0gcmVzRmlsZSA9IENGQnVuZGxlT3BlbkJ1bmRsZVJl
c291cmNlTWFwKG1fbW9kdWxlKTsKKworICAgICAgICBVc2VSZXNGaWxlKHJlc0ZpbGUpOworCisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWVzID0gc3RyaW5nTGlzdEZyb21SZXNvdXJjZUlkKE1J
TUVMaXN0U3RyaW5nU3RyaW5nTnVtYmVyKTsKKworICAgICAgICBpZiAobWltZXMuc2l6ZSgpICUg
MiAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxTdHJp
bmc+IGRlc2NyaXB0aW9ucyA9IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChNSU1FRGVzY3JpcHRp
b25TdHJpbmdOdW1iZXIpOworICAgICAgICBpZiAoZGVzY3JpcHRpb25zLnNpemUoKSAhPSBtaW1l
cy5zaXplKCkgLyAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyAgaSA8IG1pbWVzLnNpemUoKTsgaSArPSAyKSB7CisgICAgICAgICAgICBT
dHJpbmcgbWltZSA9IG1pbWVzW2ldLmxvd2VyKCk7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRlbnNpb25zOworICAgICAgICAgICAgbWltZXNbaSArIDFdLmxvd2VyKCkuc3BsaXQoVUNo
YXIoJywnKSwgZXh0ZW5zaW9ucyk7CisKKyAgICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5z
ZXQobWltZSwgZXh0ZW5zaW9ucyk7CisKKyAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25z
LnNldChtaW1lLCBkZXNjcmlwdGlvbnNbaSAvIDJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IG5hbWVzID0gc3RyaW5nTGlzdEZyb21SZXNvdXJjZUlkKFBsdWdpbk5hbWVP
ckRlc2NyaXB0aW9uU3RyaW5nTnVtYmVyKTsKKyAgICAgICAgaWYgKG5hbWVzLnNpemUoKSA9PSAy
KSB7CisgICAgICAgICAgICBtX2Rlc2NyaXB0aW9uID0gbmFtZXNbMF07CisgICAgICAgICAgICBt
X25hbWUgPSBuYW1lc1sxXTsKKyAgICAgICAgfQorCisgICAgICAgIENGQnVuZGxlQ2xvc2VCdW5k
bGVSZXNvdXJjZU1hcChtX21vZHVsZSwgcmVzRmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgaWYgKG1faXNMb2Fk
ZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgV1RGOjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGgoQWRvcHRDRiwgbV9wYXRo
LmNyZWF0ZUNGU3RyaW5nKCkpOworICAgIFdURjo6UmV0YWluUHRyPENGVVJMUmVmPiB1cmwoQWRv
cHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
cGF0aC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkp
OworICAgIG1fbW9kdWxlID0gQ0ZCdW5kbGVDcmVhdGUoTlVMTCwgdXJsLmdldCgpKTsKKyAgICBp
ZiAoIW1fbW9kdWxlIHx8ICFDRkJ1bmRsZUxvYWRFeGVjdXRhYmxlKG1fbW9kdWxlKSkgeworICAg
ICAgICBMT0coUGx1Z2luLCAiJXMgbm90IGxvYWRlZCIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOwor
CisgICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAg
ICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7
CisKKyAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUNGQnVuZGxlR2V0
RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX0luaXRpYWxpemUiKSk7
CisgICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUNGQnVu
ZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX0dldEVudHJ5
UG9pbnRzIikpOworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpQ0ZC
dW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKG1fbW9kdWxlLCBDRlNUUigiTlBfU2h1dGRv
d24iKSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8
ICFtX05QUF9TaHV0ZG93bikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9w
bHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNz
LnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBucEVyciA9IE5QX0dldEVudHJ5
UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKKyAgICBMT0dfTlBFUlJPUihucEVycik7CisgICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9i
cm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0
VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOwor
ICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93
c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0
cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5Q
Tl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2gg
PSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9S
ZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRV
UkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJM
Tm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAg
IG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1
bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2
YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2Vu
YWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1
bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisK
KyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFy
aWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRp
ZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9i
cm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7
CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Cisg
ICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAg
bV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2
YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9
IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBO
X1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9S
ZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFz
TWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7
CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247Cisg
ICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyNpZiBkZWZp
bmVkKFhQX1VOSVgpCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywg
Jm1fcGx1Z2luRnVuY3MpOworI2Vsc2UKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJv
d3NlckZ1bmNzKTsKKyNlbmRpZgorICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7
CisKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisg
ICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVv
Zih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQorewor
ICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCitpbnQg
UGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVy
c2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Cit7CisgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAx
IGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRo
YW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uICE9
IGNvbXBhcmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFy
ZVZlcnNpb24gPyAxIDogLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvbWFj
L1BsdWdpblZpZXdNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRl
ODE0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdN
YWMuY3BwCkBAIC0wLDAgKzEsNjkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSA8
a2pzL0pTTG9jay5oPgorI2luY2x1ZGUgPGtqcy9KU1ZhbHVlLmg+CisjaW5jbHVkZSAid3RmL1Jl
dGFpblB0ci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0lu
RWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAicnVudGltZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgIlNj
cmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCit1c2luZyBKU0M6OkV4
ZWNTdGF0ZTsKK3VzaW5nIEpTQzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBKU0M6OkpTTG9jazsKK3Vz
aW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBKU0M6OkpTVmFsdWU7Cit1c2luZyBKU0M6OlVTdHJp
bmc7CisKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRV2lkZ2V0PgorI2luY2x1ZGUgPFFL
ZXlFdmVudD4KK1FUX0JFR0lOX05BTUVTUEFDRQorZXh0ZXJuIFFfR1VJX0VYUE9SVCBXaW5kb3dQ
dHIgcXRfbWFjX3dpbmRvd19mb3IoY29uc3QgUVdpZGdldCAqdyk7CitRVF9FTkRfTkFNRVNQQUNF
CisjZW5kaWYKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgaW50IG1vZGlmaWVyc0ZvckV2ZW50KFVJRXZl
bnRXaXRoS2V5U3RhdGUgKmV2ZW50KTsKKworc3RhdGljIGlubGluZSBXaW5kb3dSZWYgbmF0aXZl
V2luZG93Rm9yKFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAg
ICBpZiAod2lkZ2V0KQorICAgICAgICByZXR1cm4gcXRfbWFjX3dpbmRvd19mb3Iod2lkZ2V0KTsK
KyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIENHQ29udGV4dFJlZiBj
Z0hhbmRsZUZvcihQbGF0Zm9ybVdpZGdldCB3aWRnZXQpCit7CisjaWYgUExBVEZPUk0oUVQpCisg
ICAgaWYgKHdpZGdldCkKKyAgICAgICAgcmV0dXJuIChDR0NvbnRleHRSZWYpd2lkZ2V0LT5tYWND
R0hhbmRsZSgpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50
UG9pbnQgdG9wTGV2ZWxPZmZzZXRGb3IoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQoreworI2lmIFBM
QVRGT1JNKFFUKQorICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAgUGxhdGZvcm1XaWRnZXQgdG9w
TGV2ZWwgPSB3aWRnZXQtPndpbmRvdygpOworICAgICAgICByZXR1cm4gd2lkZ2V0LT5tYXBUbyh0
b3BMZXZlbCwgUVBvaW50KDAsIDApKSArIHRvcExldmVsLT5nZW9tZXRyeSgpLnRvcExlZnQoKSAt
IHRvcExldmVsLT5wb3MoKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gSW50UG9pbnQoKTsK
K30KKworLy8gLS0tLS0tLS0tLS0tLS0tIExpZmV0aW1lIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0t
LS0tLS0KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5T
dGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAgICAgIG1f
c3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQ
bGF0Zm9ybVBsdWdpbldpZGdldChtX3BhcmVudEZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+
cGxhdGZvcm1XaW5kb3coKSk7CisKKyAgICBtX25wQ2dDb250ZXh0LndpbmRvdyA9IDA7CisgICAg
bV9ucENnQ29udGV4dC5jb250ZXh0ID0gMDsKKyAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lk
KikmbV9ucENnQ29udGV4dDsKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5k
b3c7CisgICAgbV9ucFdpbmRvdy54ID0gMDsKKyAgICBtX25wV2luZG93LnkgPSAwOworICAgIG1f
bnBXaW5kb3cud2lkdGggPSAwOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gMDsKKyAgICBtX25w
V2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0g
MDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gMDsKKyAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IDA7CisKKyAgICBzZXRJc05QQVBJUGx1Z2luKHRydWUpOworCisgICAg
c2hvdygpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7
CisKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgbnVsbCB0aW1lciB0aHJvdHRsaW5nIGRlcGVuZGlu
ZyBvbiBwbHVnaW4gYWN0aXZhdGlvbgorICAgIG1fbnVsbEV2ZW50VGltZXIuc2V0KG5ldyBUaW1l
cjxQbHVnaW5WaWV3Pih0aGlzLCAmUGx1Z2luVmlldzo6bnVsbEV2ZW50VGltZXJGaXJlZCkpOwor
ICAgIG1fbnVsbEV2ZW50VGltZXItPnN0YXJ0UmVwZWF0aW5nKDAuMDIpOworfQorCitQbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJh
bUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50
KTsKKworICAgIG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3Mo
KS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVn
aW4tPnVubG9hZCgpOworCisgICAgbV93aW5kb3cgPSAwOworfQorCit2b2lkIFBsdWdpblZpZXc6
OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAg
IEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5l
bmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3Ig
aXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+
c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisK
KyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZh
bHNlOworCisgICAgSlNDOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3MoZmFsc2Up
OworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKyAgICBzZXRDYWxs
aW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygw
KTsKKworICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
OjpnZXRWYWx1ZVN0YXRpYyhOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7Cisg
ICAgTE9HKFBsdWdpbiwgIlBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKCVkKSIsIHZhcmlhYmxl
KTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZUb29sa2l0OgorICAg
ICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAwOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisKKyAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6CisgICAgICAgICooKHVp
bnQzMiAqKXZhbHVlKSA9IHRydWU7CisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0K
K30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCit7CisgICAgTE9HKFBsdWdpbiwgIlBsdWdpblZpZXc6OmdldFZhbHVlKCVk
KSIsIHZhcmlhYmxlKTsKKworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICBjYXNlIE5QTlZX
aW5kb3dOUE9iamVjdDogeworICAgICAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICBOUE9iamVjdCog
d2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+c2NyaXB0KCktPndpbmRvd1Njcmlw
dE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJl
IHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaW4KKyAgICAgICAgLy8gPGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICBpZiAod2luZG93
U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0
T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2
ID0gd2luZG93U2NyaXB0T2JqZWN0OworCisgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICB9CisKKyAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAg
aWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisK
KyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVu
dC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykpCisgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1
Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaW4KKyAg
ICAgICAgLy8gPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGlt
ZS5odG1sPgorICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgX05Q
Tl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICB2b2lkKiogdiA9
ICh2b2lkKiopdmFsdWU7CisgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9CisKKyAgICBjYXNlIE5QTlZzdXBwb3J0
c0NvcmVHcmFwaGljc0Jvb2w6CisgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBnZXRWYWx1ZVN0YXRpYyh2YXJpYWJsZSwgdmFsdWUpOworICAgIH0KKworfQordm9pZCBQ
bHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6
c2V0UGFyZW50KHBhcmVudCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7Cit9
CisKKy8vIC0tLS0tLS0tLS0tLS0tIEdlb21ldHJ5IGFuZCBwYWludGluZyAtLS0tLS0tLS0tLS0t
LS0tCisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgTE9HKFBsdWdpbiwgIlBsdWdp
blZpZXc6OnNob3coKSIpOworCisgICAgc2V0U2VsZlZpc2libGUodHJ1ZSk7CisKKyAgICBpZiAo
aXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZSh0cnVlKTsKKworICAgIFdpZGdldDo6c2hv
dygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIExPRyhQbHVnaW4sICJQ
bHVnaW5WaWV3OjpoaWRlKCkiKTsKKworICAgIHNldFNlbGZWaXNpYmxlKGZhbHNlKTsKKworICAg
IGlmIChpc1BhcmVudFZpc2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAg
ICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxlKGZhbHNlKTsKKworICAgIFdpZGdl
dDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkKK3sKKyAgICBMT0co
UGx1Z2luLCAiUGx1Z2luVmlldzo6c2V0Rm9jdXMoKSIpOworCisgICAgaWYgKHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCkpCisgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0Rm9jdXMoUXQ6
Ok90aGVyRm9jdXNSZWFzb24pOworICAgZWxzZQorICAgICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsK
KworICAgIC8vIFRPRE86IEFsc28gaGFuZGxlIGFuZCBwYXNzIG9uIGJsdXIgZXZlbnRzIChmb2N1
cyBsb3N0KQorCisgICAgRXZlbnRSZWNvcmQgcmVjb3JkOworICAgIHJlY29yZC53aGF0ID0gZ2V0
Rm9jdXNFdmVudDsKKyAgICByZWNvcmQubWVzc2FnZSA9IDA7CisgICAgcmVjb3JkLndoZW4gPSBU
aWNrQ291bnQoKTsKKyAgICByZWNvcmQud2hlcmUgPSBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigp
OworICAgIHJlY29yZC5tb2RpZmllcnMgPSBHZXRDdXJyZW50S2V5TW9kaWZpZXJzKCk7CisKKyAg
ICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKSB7CisgICAgICAgIExPRyhFdmVudHMsICJQ
bHVnaW5WaWV3OjpzZXRGb2N1cygpOiBHZXQtZm9jdXMgZXZlbnQgbm90IGFjY2VwdGVkIik7Cisg
ICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudFZpc2libGUoYm9vbCB2aXNpYmxl
KQoreworICAgIGlmIChpc1BhcmVudFZpc2libGUoKSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBXaWRnZXQ6OnNldFBhcmVudFZpc2libGUodmlzaWJsZSk7CisKKyAgICBpZiAo
aXNTZWxmVmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKQoreworICAgIHNldE5QV2luZG93
SWZOZWVkZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd0lmTmVlZGVkKCkK
K3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFwYXJlbnQoKSB8fCAhbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPnNldHdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVm
IG5ld0NvbnRleHRSZWYgPSBjZ0hhbmRsZUZvcihwbGF0Zm9ybVBsdWdpbldpZGdldCgpKTsKKyAg
ICBpZiAoIW5ld0NvbnRleHRSZWYpCisgICAgICAgIHJldHVybjsKKworICAgIFdpbmRvd1JlZiBu
ZXdXaW5kb3dSZWYgPSBuYXRpdmVXaW5kb3dGb3IocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7Cisg
ICAgaWYgKCFuZXdXaW5kb3dSZWYpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJl
bnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCBuZXdHZW9tZXRyeSA9IElu
dFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lUmVjdCgpLmxvY2F0aW9uKCkp
LCBmcmFtZVJlY3QoKS5zaXplKCkpOworCisgICAgLy8gVE9ETzogYWxzbyBjb21wYXJlIGNsaXAg
cmVjdHMKKyAgICBpZiAobmV3R2VvbWV0cnkgPT0gbV93aW5kb3dSZWN0CisgICAgICAgICYmIG5l
d1dpbmRvd1JlZiA9PSBtX25wQ2dDb250ZXh0LndpbmRvdworICAgICAgICAmJiBuZXdDb250ZXh0
UmVmID09IG1fbnBDZ0NvbnRleHQuY29udGV4dCkKKyAgICByZXR1cm47CisKKyAgICBtX25wV2lu
ZG93LndpbmRvdyA9ICh2b2lkKikmbV9ucENnQ29udGV4dDsKKyAgICBtX25wQ2dDb250ZXh0Lndp
bmRvdyA9IG5ld1dpbmRvd1JlZjsKKyAgICBtX25wQ2dDb250ZXh0LmNvbnRleHQgPSBuZXdDb250
ZXh0UmVmOworCisgICAgbV93aW5kb3dSZWN0ID0gbmV3R2VvbWV0cnk7CisgICAgbV9ucFdpbmRv
dy54ID0gbV93aW5kb3dSZWN0LngoKTsKKyAgICBtX25wV2luZG93LnkgPSBtX3dpbmRvd1JlY3Qu
eSgpOworICAgIG1fbnBXaW5kb3cud2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICBt
X25wV2luZG93LmhlaWdodCA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKworICAgIC8vIFRPRE86
IChhbHNvIGNsaXAgYWdhaW5zdCBzY3JvbGxiYXJzLCBldGMuKQorICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX3dpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fd2luZG93UmVjdC5oZWlnaHQoKTsKKworICAgIFBs
dWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIEpTQzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKHRy
dWUpOworICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwg
Jm1fbnBXaW5kb3cpOworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZp
ZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworfQorCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0
ZVBsdWdpbldpZGdldCgpIGNvbnN0Cit7CisgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLiBXZSB1
cGRhdGUgdGhlIHBsdWdpbiB3aWRnZXQKKyAgICAvLyBpbiBwYWludCgpLCBpZiB0aGUgTlBXaW5k
b3cgc3RydWN0IGhhcyBjaGFuZ2VkLgorfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1f
aXNTdGFydGVkKSB7CisgICAgICAgIC8vIFRPRE86IERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIg
aW1hZ2UKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE5QV2luZG93SWZOZWVkZWQo
KTsKKworICAgIEV2ZW50UmVjb3JkIGV2ZW50OworICAgIGV2ZW50LndoYXQgPSB1cGRhdGVFdnQ7
CisgICAgZXZlbnQubWVzc2FnZSA9IChsb25nIHVuc2lnbmVkIGludCltX25wQ2dDb250ZXh0Lndp
bmRvdzsKKyAgICBldmVudC53aGVuID0gVGlja0NvdW50KCk7CisgICAgZXZlbnQud2hlcmUuaCA9
IDA7CisgICAgZXZlbnQud2hlcmUudiA9IDA7CisgICAgZXZlbnQubW9kaWZpZXJzID0gR2V0Q3Vy
cmVudEtleU1vZGlmaWVycygpOworCisgICAgQ0dDb250ZXh0UmVmIGNnID0gbV9ucENnQ29udGV4
dC5jb250ZXh0OworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY2cpOworICAgIEludFBvaW50IG9m
ZnNldCA9IGZyYW1lUmVjdCgpLmxvY2F0aW9uKCk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KGNnLCBvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50
KGV2ZW50KSkgeworICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6cGFpbnQoKTogUGFp
bnQgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgfQorCisgICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjZyk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkgeworICAgICAg
ICAvLyBUT0RPOiBvcHRpbWl6ZQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT51cGRh
dGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgLy8gVE9ETzogb3B0aW1pemUKKyAgICBp
bnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJl
Z2lvbiByZWdpb24pCit7CisgICAgLy8gVE9ETzogb3B0aW1pemUKKyAgICBpbnZhbGlkYXRlKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnQgaGFuZGxpbmcgLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqIGV2ZW50KQoreworICAgIEV2ZW50UmVjb3JkIHJlY29yZDsKKworICAgIGlmIChldmVu
dC0+dHlwZSgpID09IG1vdXNlbW92ZUV2ZW50KQorICAgICAgICByZXR1cm47CisgICAgZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkKKyAgICAgICAgcmVjb3JkLndoYXQg
PSBhZGp1c3RDdXJzb3JFdmVudDsKKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNl
b3V0RXZlbnQpCisgICAgICAgIHJlY29yZC53aGF0ID0gYWRqdXN0Q3Vyc29yRXZlbnQ7CisgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkgeworICAgICAgICByZWNv
cmQud2hhdCA9IG1vdXNlRG93bjsKKyAgICAgICAgLy8gVGhlIHBsdWdpbiBuZWVkcyBmb2N1cyB0
byByZWNlaXZlIGtleWJvYXJkIGV2ZW50cworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFy
ZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5z
ZXRGb2N1c2VkRnJhbWUobV9wYXJlbnRGcmFtZSk7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmRv
Y3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgfSBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkKKyAgICAgICAgcmVjb3JkLndoYXQgPSBtb3VzZVVw
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb3JkLndoZXJlID0gZ2xvYmFs
TW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZpZXJzRm9y
RXZlbnQoZXZlbnQpOworCisgICAgaWYgKCFldmVudC0+YnV0dG9uRG93bigpKQorICAgICAgICBy
ZWNvcmQubW9kaWZpZXJzIHw9IGJ0blN0YXRlOworCisgICAgaWYgKGV2ZW50LT5idXR0b24oKSA9
PSAyKQorICAgICAgICByZWNvcmQubW9kaWZpZXJzIHw9IGNvbnRyb2xLZXk7CisKKyAgICBpZiAo
IWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKSB7CisgICAgICAgIGlmIChyZWNvcmQud2hhdCA9PSBh
ZGp1c3RDdXJzb3JFdmVudCkKKyAgICAgICAgICAgIHJldHVybjsgLy8gU2lnbmFscyB0aGF0IHRo
ZSBwbHVnaW4gd2FudHMgYSBub3JtYWwgY3Vyc29yCisKKyAgICAgICAgTE9HKEV2ZW50cywgIlBs
dWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoKTogTW91c2UgZXZlbnQgdHlwZSAlZCBhdCAlZCwl
ZCBub3QgYWNjZXB0ZWQiLAorICAgICAgICAgICAgICAgIHJlY29yZC53aGF0LCByZWNvcmQud2hl
cmUuaCwgcmVjb3JkLndoZXJlLnYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXli
b2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIExPRyhQbHVnaW4sICJQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KCkgLS0tLS0tLS0tLS0tLS0tLS0gIik7CisKKyAg
ICBMT0coUGx1Z2luLCAiUFY6OmhLRSgpOiBLRS5rZXlDb2RlOiAweCUwMlgsIEtFLmNoYXJDb2Rl
OiAlZCIsCisgICAgICAgICAgICBldmVudC0+a2V5Q29kZSgpLCBldmVudC0+Y2hhckNvZGUoKSk7
CisKKyAgICBFdmVudFJlY29yZCByZWNvcmQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBr
ZXlkb3duRXZlbnQpIHsKKyAgICAgICAgLy8gVGhpcyBldmVudCBpcyB0aGUgcmVzdWx0IG9mIGEg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlEb3duIHdoaWNoCisgICAgICAgIC8vIHdhcyBkaXNh
bWJpZ3VhdGVkIGludG8gYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24uIFNpbmNl
CisgICAgICAgIC8vIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSB0ZXh0IGhlcmUsIHdlIHJl
dHVybiwgYW5kIHdhaXQgZm9yIHRoZQorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIGV2ZW50IGJh
c2VkIG9uIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhci4KKyAgICAgICAgcmV0dXJuOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIC8v
IFdoaWNoIHdvdWxkIGJlIHRoaXMgb25lLiBUaGlzIGV2ZW50IHdhcyBkaXNhbWJpZ3VhdGVkIGZy
b20gdGhlIHNhbWUKKyAgICAgICAgLy8gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlEb3duLCBi
dXQgdG8gYSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIsCisgICAgICAgIC8vIHdoaWNoIHJl
dGFpbnMgdGhlIHRleHQgZnJvbSB0aGUgb3JpZ2luYWwgZXZlbnQuIFNvLCB3ZSBjYW4gc2FmZWx5
IHBhc3MKKyAgICAgICAgLy8gb24gdGhlIGV2ZW50IGFzIGEga2V5LWRvd24gZXZlbnQgdG8gdGhl
IHBsdWdpbi4KKyAgICAgICAgcmVjb3JkLndoYXQgPSBrZXlEb3duOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6S2V5VXAgZXZlbnRzIGFsd2F5cyBoYXZlIHRoZSB0ZXh0LCBzbyBub3RoaW5nCisg
ICAgICAgIC8vIGZhbmN5IGhlcmUuCisgICAgICAgIHJlY29yZC53aGF0ID0ga2V5VXA7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFBsYXRmb3JtS2V5
Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOworICAgIGludCBr
ZXlDb2RlID0gcGxhdGZvcm1FdmVudC0+bmF0aXZlVmlydHVhbEtleUNvZGUoKTsKKworICAgIGNv
bnN0IFN0cmluZyB0ZXh0ID0gcGxhdGZvcm1FdmVudC0+dGV4dCgpOworICAgIGlmICh0ZXh0Lmxl
bmd0aCgpIDwgMSkgeworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlRl
eHQoV1RGOjpBZG9wdENGLCB0ZXh0LmNyZWF0ZUNGU3RyaW5nKCkpOworCisgICAgTE9HKFBsdWdp
biwgIlBWOjpoS0UoKTogUEtFLnRleHQ6ICVzLCBQS0UudW5tb2RpZmllZFRleHQ6ICVzLCBQS0Uu
a2V5SWRlbnRpZmllcjogJXMiLAorICAgICAgICAgICAgdGV4dC5hc2NpaSgpLmRhdGEoKSwgcGxh
dGZvcm1FdmVudC0+dW5tb2RpZmllZFRleHQoKS5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAg
IHBsYXRmb3JtRXZlbnQtPmtleUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBj
aGFyIGNoYXJDb2Rlc1syXSA9IHsgMCwgMCB9OworICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5n
KGNmVGV4dC5nZXQoKSwgY2hhckNvZGVzLCAyLCBDRlN0cmluZ0dldFN5c3RlbUVuY29kaW5nKCkp
KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHJlc29sdmUgY2hhcmFjdGVyIGNvZGUg
dXNpbmcgc3lzdGVtIGVuY29kaW5nLiIpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRs
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlY29yZC53aGVyZSA9IGdsb2Jh
bE1vdXNlUG9zRm9yUGx1Z2luKCk7CisgICAgcmVjb3JkLm1vZGlmaWVycyA9IG1vZGlmaWVyc0Zv
ckV2ZW50KGV2ZW50KTsKKyAgICByZWNvcmQubWVzc2FnZSA9ICgoa2V5Q29kZSAmIDB4RkYpIDw8
IDgpIHwgKGNoYXJDb2Rlc1swXSAmIDB4RkYpOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50
KCk7CisKKyAgICBMT0coUGx1Z2luLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIs
IHJlY29yZC5tb2RpZmllcnMpOworCisgICAgTE9HKFBsdWdpbiwgIlBWOjpoS0UoKTogUEtFLnF0
RXZlbnQoKS0+bmF0aXZlVmlydHVhbEtleTogMHglMDJYLCBjaGFyQ29kZTogJWQiLAorICAgICAg
ICAgICAgICAga2V5Q29kZSwgaW50KHVjaGFyKGNoYXJDb2Rlc1swXSkpKTsKKworICAgIGlmICgh
ZGlzcGF0Y2hOUEV2ZW50KHJlY29yZCkpIHsKKyAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZp
ZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBub3QgYWNj
ZXB0ZWQiLAorICAgICAgICAgICAgICAgIHJlY29yZC53aGF0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6bnVsbEV2ZW50VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3PiopCit7CisgICAgRXZl
bnRSZWNvcmQgcmVjb3JkOworCisgICAgcmVjb3JkLndoYXQgPSBudWxsRXZlbnQ7CisgICAgcmVj
b3JkLm1lc3NhZ2UgPSAwOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50KCk7CisgICAgcmVj
b3JkLndoZXJlID0gZ2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZp
ZXJzID0gR2V0Q3VycmVudEtleU1vZGlmaWVycygpOworICAgIGlmICghQnV0dG9uKCkpCisgICAg
ICAgIHJlY29yZC5tb2RpZmllcnMgfD0gYnRuU3RhdGU7CisKKyAgICBpZiAoIWRpc3BhdGNoTlBF
dmVudChyZWNvcmQpKSB7CisgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpudWxsRXZl
bnRUaW1lckZpcmVkKCk6IE51bGwgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgfQorfQorCitz
dGF0aWMgaW50IG1vZGlmaWVyc0ZvckV2ZW50KFVJRXZlbnRXaXRoS2V5U3RhdGUgKmV2ZW50KQor
eworICAgIGludCBtb2RpZmllcnMgPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBjb250cm9sS2V5OworCisgICAgaWYgKGV2ZW50LT5hbHRLZXko
KSkKKyAgICAgICAgbW9kaWZpZXJzIHw9IG9wdGlvbktleTsKKworICAgIGlmIChldmVudC0+bWV0
YUtleSgpKQorICAgICAgICBtb2RpZmllcnMgfD0gY21kS2V5OworCisgICAgaWYgKGV2ZW50LT5z
aGlmdEtleSgpKQorICAgICAgICBtb2RpZmllcnMgfD0gc2hpZnRLZXk7CisKKyAgICAgcmV0dXJu
IG1vZGlmaWVyczsKK30KKworUG9pbnQgUGx1Z2luVmlldzo6Z2xvYmFsTW91c2VQb3NGb3JQbHVn
aW4oKSBjb25zdAoreworICAgIFBvaW50IHBvczsKKyAgICBHZXRHbG9iYWxNb3VzZSgmcG9zKTsK
KworICAgIEludFBvaW50IG9mZnNldCA9IHRvcExldmVsT2Zmc2V0Rm9yKHBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KCkpOworICAgIHBvcy5oIC09IG9mZnNldC54KCk7CisgICAgcG9zLnYgLT0gb2Zmc2V0
LnkoKTsKKworICAgIHBvcy5oID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KHBvcy5oICogSElHZXRTY2Fs
ZUZhY3RvcigpKTsKKyAgICBwb3MudiA9IHN0YXRpY19jYXN0PHNob3J0Pihwb3MudiAqIEhJR2V0
U2NhbGVGYWN0b3IoKSk7CisKKyAgICByZXR1cm4gcG9zOworfQorCitib29sIFBsdWdpblZpZXc6
OmRpc3BhdGNoTlBFdmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrcyhmYWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJv
b2wgYWNjZXB0ZWQgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwg
JmV2ZW50KTsKKworICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6
OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0tLS0tLS0KKwor
c3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFgxMTsg
VTsgTGludXggaTY4NjsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIu
MCI7CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1f
cGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2Vu
dCkpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFn
ZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5k
YXRhKCk7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7
CisgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6
aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlm
IChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZp
bGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAgIGlmICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisg
ICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5k
bGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoZmls
ZUhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAg
ICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7
CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisg
ICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMS42LjAucmMxLjI3Lmc5
YjZiZgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25016</attachid>
            <date>2008-11-10 08:13:01 -0800</date>
            <delta_ts>2008-11-12 02:23:27 -0800</delta_ts>
            <desc>Rebased against ToT</desc>
            <filename>0001-2008-11-10-Tor-Arne-Vestb-tavestbo-trolltech.co.patch</filename>
            <type>text/plain</type>
            <size>4631</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSA5NjYzOWQ1OWIwMGMyMWQ3ZmQyMTRmM2JjZjgzMTMzNDEyMDFiNTVmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFR1ZSwgMTAgSnVuIDIwMDggMTQ6MzE6NTgg
KzAyMDAKU3ViamVjdDogW1BBVENIXSA9P3V0Zi04P3E/MjAwOC0xMS0xMD0yMD0yMFRvcj0yMEFy
bmU9MjBWZXN0Yj1DMz1COD0yMD0yMDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPj89Ck1JTUUtVmVy
c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOApDb250ZW50
LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgoKICAgICAgICBNb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgX3dlYmtpdF9pc0Nhc2VJ
bnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcgdG8KICAgICAgICBXZWJDb3JlJ3MgV2ViQ29yZU5TU3Ry
aW5nRXh0cmFzIGFzIF9zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcuCi0tLQog
V2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysr
KysrKysrKysKIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDEgKwogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmggIHwg
ICAgMSArCiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0gfCAg
ICA1ICsrKysrCiBXZWJLaXQvbWFjL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDEwICsrKysrKysrKysKIFdlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5t
ICAgICAgICB8ICAgIDIgKy0KIDYgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMSBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDM2Y2Q1ZDAuLjY0NjNkYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMTEtMTAg
IFRvciBBcm5lIFZlc3Riw7ggIDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBfd2Via2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZyB0bworICAgICAg
ICBXZWJDb3JlJ3MgV2ViQ29yZU5TU3RyaW5nRXh0cmFzIGFzIF9zdHJpbmdJc0Nhc2VJbnNlbnNp
dGl2ZUVxdWFsVG9TdHJpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoc3RyaW5nSXNDYXNl
SW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nKToKKwogMjAwOC0xMS0xMCAgVG9tIENvb2tzZXkgIDx0
aG9tYXMuY29va3NleUB0cm9sbHRlY2guY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBB
cm5lIFZlc3Riw7guCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAgYi9XZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggNzdkMGRhZS4uNDdiMmIyMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cApA
QCAtODg3LDYgKzg4Nyw3IEBAIF9fWlRWTjdXZWJDb3JlMTdGaWxlQ2hvb3NlckNsaWVudEUKIF9m
aWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENoYXJhY3RlcnMKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWJz
dHJpbmcKIF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgKK19zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2
ZUVxdWFsVG9TdHJpbmcKIF9zdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZQogX3drQWR2YW5j
ZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbgogX3drQ0dDb250ZXh0R2V0U2hvdWxkU21vb3Ro
Rm9udHMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4
dHJhcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgKaW5k
ZXggOTVkMjAzMS4uNzZlNzQ5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
Q29yZU5TU3RyaW5nRXh0cmFzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5T
U3RyaW5nRXh0cmFzLmgKQEAgLTMyLDYgKzMyLDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAK
K0JPT0wgc3RyaW5nSXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nKE5TU3RyaW5nICpmaXJz
dCwgTlNTdHJpbmcgKnNlY29uZCk7CiBCT09MIGhhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeChOU1N0
cmluZyAqc3RyaW5nLCBOU1N0cmluZyAqc3VmZml4KTsKIEJPT0wgaGFzQ2FzZUluc2Vuc2l0aXZl
U3Vic3RyaW5nKE5TU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICpzdWJzdHJpbmcpOwogTlNTdHJp
bmcgKmZpbGVuYW1lQnlGaXhpbmdJbGxlZ2FsQ2hhcmFjdGVycyhOU1N0cmluZyAqc3RyaW5nKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5t
bSBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbQppbmRleCBh
MmIwYTI4Li45ZWRiNmIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3Jl
TlNTdHJpbmdFeHRyYXMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3Ry
aW5nRXh0cmFzLm1tCkBAIC0yOSw2ICsyOSwxMSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCIKIAorQk9PTCBzdHJpbmdJc0Nhc2VJbnNlbnNp
dGl2ZUVxdWFsVG9TdHJpbmcoTlNTdHJpbmcgKmZpcnN0LCBOU1N0cmluZyAqc2Vjb25kKQorewor
ICAgIHJldHVybiBbZmlyc3QgY29tcGFyZTpzZWNvbmQgb3B0aW9uczooTlNDYXNlSW5zZW5zaXRp
dmVTZWFyY2h8TlNMaXRlcmFsU2VhcmNoKV0gPT0gTlNPcmRlcmVkU2FtZTsKK30KKwogQk9PTCBo
YXNDYXNlSW5zZW5zaXRpdmVTdWZmaXgoTlNTdHJpbmcgKnN0cmluZywgTlNTdHJpbmcgKnN1ZmZp
eCkKIHsKICAgICByZXR1cm4gW3N0cmluZyByYW5nZU9mU3RyaW5nOnN1ZmZpeCBvcHRpb25zOihO
U0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaCB8IE5TQmFja3dhcmRzU2VhcmNoIHwgTlNBbmNob3JlZFNl
YXJjaCldLmxvY2F0aW9uICE9IE5TTm90Rm91bmQ7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0No
YW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGRkMzJlMzYuLjljMGNkYjAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTEtMTAgIFRvciBBcm5lIFZlc3Riw7ggIDx0YXZlc3Ri
b0B0cm9sbHRlY2guY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfd2Via2l0X2lzQ2FzZUluc2Vu
c2l0aXZlRXF1YWxUb1N0cmluZyB0bworICAgICAgICBXZWJDb3JlJ3MgV2ViQ29yZU5TU3RyaW5n
RXh0cmFzIGFzIF9zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcuCisKKyAgICAg
ICAgKiBNaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm06CisgICAgICAgICgtW05TU3RyaW5nIF93
ZWJraXRfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nOl0pOgorCiAyMDA4LTExLTA5ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2hu
IFN1bGxpdmFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0
cmFzLm0gYi9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQppbmRleCAxNTcw
NjlhLi5kOGVhMzY2IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdF
eHRyYXMubQorKysgYi9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubQpAQCAt
MTkxLDcgKzE5MSw3IEBAIHN0YXRpYyBCT09MIGNhblVzZUZhc3RSZW5kZXJlcihjb25zdCBVbmlD
aGFyICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKIAogLSAoQk9PTClfd2Via2l0X2lzQ2FzZUlu
c2Vuc2l0aXZlRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSAgcmV0dXJuIFtz
ZWxmIGNvbXBhcmU6c3RyaW5nIG9wdGlvbnM6KE5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNofE5TTGl0
ZXJhbFNlYXJjaCldID09IE5TT3JkZXJlZFNhbWU7CisgICAgcmV0dXJuIHN0cmluZ0lzQ2FzZUlu
c2Vuc2l0aXZlRXF1YWxUb1N0cmluZyhzZWxmLCBzdHJpbmcpOwogfQogCiAtKEJPT0wpX3dlYmtp
dF9oYXNDYXNlSW5zZW5zaXRpdmVQcmVmaXg6KE5TU3RyaW5nICopcHJlZml4Ci0tIAoxLjYuMC5y
YzEuMjcuZzliNmJmCgo=
</data>
<flag name="review"
          id="11485"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25017</attachid>
            <date>2008-11-10 08:13:23 -0800</date>
            <delta_ts>2008-11-12 02:24:06 -0800</delta_ts>
            <desc>Move _web_encodingForResource from WebKit into WebCore and change return type</desc>
            <filename>0002-2008-11-10-Tor-Arne-Vestb-tavestbo-trolltech.co.patch</filename>
            <type>text/plain</type>
            <size>7894</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSA0OTNhOTQ5OTQ5ODFhNDhjNmRiNjgzOWMxODA5NDliYjQwNGE1YTJjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFdlZCwgMTEgSnVuIDIwMDggMTU6MDg6NTAg
KzAyMDAKU3ViamVjdDogW1BBVENIXSA9P3V0Zi04P3E/MjAwOC0xMS0xMD0yMD0yMFRvcj0yMEFy
bmU9MjBWZXN0Yj1DMz1COD0yMD0yMDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPj89Ck1JTUUtVmVy
c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOApDb250ZW50
LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgoKICAgICAgICBNb3ZlIF93ZWJfZW5jb2RpbmdGb3JSZXNvdXJjZSBmcm9tIFdlYktpdCBp
bnRvIFdlYkNvcmUgYW5kIGNoYW5nZSByZXR1cm4gdHlwZQotLS0KIFdlYkNvcmUvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrKysKIFdlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmggIHwgICAxMSArKysrKy0KIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYkNvcmVOU1N0cmluZ0V4dHJhcy5tbSB8ICAgNTIgKysrKysrKysrKysrKysr
KysrKysrKysrKwogV2ViS2l0L21hYy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOSArKysrCiBXZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubSAgICAg
ICAgfCAgIDQ4ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDg0IGlu
c2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ2M2RhNC4uOWJlNGIwNyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwx
NyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIE1v
dmUgX3dlYl9lbmNvZGluZ0ZvclJlc291cmNlIGZyb20gV2ViS2l0IGludG8gV2ViQ29yZSBhbmQg
Y2hhbmdlIHJldHVybiB0eXBlCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoc3RyaW5nRW5jb2Rp
bmdGb3JSZXNvdXJjZSk6CisKKzIwMDgtMTEtMTAgIFRvciBBcm5lIFZlc3Riw7ggIDx0YXZlc3Ri
b0B0cm9sbHRlY2guY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CiAgICAgICAgIE1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBfd2Via2l0X2lzQ2FzZUluc2Vu
c2l0aXZlRXF1YWxUb1N0cmluZyB0bwogICAgICAgICBXZWJDb3JlJ3MgV2ViQ29yZU5TU3RyaW5n
RXh0cmFzIGFzIF9zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcuCiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4
cAppbmRleCA0N2IyYjIxLi4xMTlkMDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC04ODcsNiArODg3LDcgQEAg
X19aVFZON1dlYkNvcmUxN0ZpbGVDaG9vc2VyQ2xpZW50RQogX2ZpbGVuYW1lQnlGaXhpbmdJbGxl
Z2FsQ2hhcmFjdGVycwogX2hhc0Nhc2VJbnNlbnNpdGl2ZVN1YnN0cmluZwogX2hhc0Nhc2VJbnNl
bnNpdGl2ZVN1ZmZpeAorX3N0cmluZ0VuY29kaW5nRm9yUmVzb3VyY2UKIF9zdHJpbmdJc0Nhc2VJ
bnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcKIF9zdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZQog
X3drQWR2YW5jZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaAppbmRleCA3NmU3NDkzLi5mMDQwZjE2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaApAQCAtMjYsNyAr
MjYsMTUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKyNp
bmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNs
dWRlIDxvYmpjL29iamMuaD4KKworI2lmZGVmIF9fT0JKQ19fCisjaW5jbHVkZSA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CitAY2xhc3MgTlNTdHJpbmc7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3Qg
TlNTdHJpbmcgTlNTdHJpbmc7CisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4g
IkMiIHsKQEAgLTM2LDYgKzQ0LDcgQEAgQk9PTCBzdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFs
VG9TdHJpbmcoTlNTdHJpbmcgKmZpcnN0LCBOU1N0cmluZyAqc2Vjb25kKTsKIEJPT0wgaGFzQ2Fz
ZUluc2Vuc2l0aXZlU3VmZml4KE5TU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICpzdWZmaXgpOwog
Qk9PTCBoYXNDYXNlSW5zZW5zaXRpdmVTdWJzdHJpbmcoTlNTdHJpbmcgKnN0cmluZywgTlNTdHJp
bmcgKnN1YnN0cmluZyk7CiBOU1N0cmluZyAqZmlsZW5hbWVCeUZpeGluZ0lsbGVnYWxDaGFyYWN0
ZXJzKE5TU3RyaW5nICpzdHJpbmcpOworQ0ZTdHJpbmdFbmNvZGluZyBzdHJpbmdFbmNvZGluZ0Zv
clJlc291cmNlKEhhbmRsZSByZXNvdXJjZSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tIGIv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLm1tCmluZGV4IDllZGI2
YjMuLmI3MDg3ZjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVOU1N0
cmluZ0V4dHJhcy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdF
eHRyYXMubW0KQEAgLTY1LDMgKzY1LDU1IEBAIE5TU3RyaW5nICpmaWxlbmFtZUJ5Rml4aW5nSWxs
ZWdhbENoYXJhY3RlcnMoTlNTdHJpbmcgKnN0cmluZykKICAgICAKICAgICByZXR1cm4gZmlsZW5h
bWU7CiB9CisKK0NGU3RyaW5nRW5jb2Rpbmcgc3RyaW5nRW5jb2RpbmdGb3JSZXNvdXJjZShIYW5k
bGUgcmVzb3VyY2UpCit7CisgICAgc2hvcnQgcmVzUmVmID0gSG9tZVJlc0ZpbGUocmVzb3VyY2Up
OworICAgIGlmIChSZXNFcnJvcigpICE9IG5vRXJyKSB7CisgICAgICAgIHJldHVybiBOU01hY09T
Um9tYW5TdHJpbmdFbmNvZGluZzsKKyAgICB9CisgICAgCisgICAgLy8gR2V0IHRoZSBGU1JlZiBm
b3IgdGhlIGN1cnJlbnQgcmVzb3VyY2UgZmlsZQorICAgIEZTUmVmIGZyZWY7CisgICAgT1NTdGF0
dXMgZXJyb3IgPSBGU0dldEZvcmtDQkluZm8ocmVzUmVmLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAm
ZnJlZiwgTlVMTCk7CisgICAgaWYgKGVycm9yICE9IG5vRXJyKSB7CisgICAgICAgIHJldHVybiBO
U01hY09TUm9tYW5TdHJpbmdFbmNvZGluZzsKKyAgICB9CisgICAgCisgICAgQ0ZVUkxSZWYgVVJM
ID0gQ0ZVUkxDcmVhdGVGcm9tRlNSZWYoTlVMTCwgJmZyZWYpOworICAgIGlmIChVUkwgPT0gTlVM
TCkgeworICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7CisgICAgfQor
ICAgIAorICAgIE5TU3RyaW5nICpwYXRoID0gWyhOU1VSTCAqKVVSTCBwYXRoXTsKKyAgICBDRlJl
bGVhc2UoVVJMKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxwcm9qIGRpcmVjdG9yeSBuYW1lCisg
ICAgcGF0aCA9IFtwYXRoIHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF07CisgICAg
aWYgKCFzdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcoW3BhdGggcGF0aEV4dGVu
c2lvbl0sIEAibHByb2oiKSkgeworICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5j
b2Rpbmc7CisgICAgfQorICAgIAorICAgIE5TU3RyaW5nICpkaXJlY3RvcnlOYW1lID0gW1twYXRo
IHN0cmluZ0J5RGVsZXRpbmdQYXRoRXh0ZW5zaW9uXSBsYXN0UGF0aENvbXBvbmVudF07CisgICAg
Q0ZTdHJpbmdSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJZGVudGlm
aWVyRnJvbVN0cmluZyhOVUxMLCAoQ0ZTdHJpbmdSZWYpZGlyZWN0b3J5TmFtZSk7CisgICAgaWYg
KGxvY2FsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOU01hY09TUm9tYW5TdHJpbmdFbmNv
ZGluZzsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBMYW5nQ29kZSBsYW5nOworICAgIFJlZ2lv
bkNvZGUgcmVnaW9uOworICAgIGVycm9yID0gTG9jYWxlU3RyaW5nVG9MYW5nQW5kUmVnaW9uQ29k
ZXMoWyhOU1N0cmluZyAqKWxvY2FsZSBVVEY4U3RyaW5nXSwgJmxhbmcsICZyZWdpb24pOworICAg
IENGUmVsZWFzZShsb2NhbGUpOworICAgIGlmIChlcnJvciAhPSBub0VycikgeworICAgICAgICBy
ZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7CisgICAgfQorICAgIAorICAgIFRleHRF
bmNvZGluZyBlbmNvZGluZzsKKyAgICBlcnJvciA9IFVwZ3JhZGVTY3JpcHRJbmZvVG9UZXh0RW5j
b2Rpbmcoa1RleHRTY3JpcHREb250Q2FyZSwgbGFuZywgcmVnaW9uLCBOVUxMLCAmZW5jb2Rpbmcp
OworICAgIGlmIChlcnJvciAhPSBub0VycikgeworICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFu
U3RyaW5nRW5jb2Rpbmc7CisgICAgfQorICAgIAorICAgIHJldHVybiBlbmNvZGluZzsKK30KKwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCA5YzBjZGIwLi5hOTg3NDQxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDE1IEBACiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgTW92ZSBfd2ViX2VuY29kaW5nRm9y
UmVzb3VyY2UgZnJvbSBXZWJLaXQgaW50byBXZWJDb3JlIGFuZCBjaGFuZ2UgcmV0dXJuIHR5cGUK
KworICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubToKKyAgICAgICAgKCtbTlNT
dHJpbmcgX3dlYl9lbmNvZGluZ0ZvclJlc291cmNlOl0pOgorCisyMDA4LTExLTEwICBUb3IgQXJu
ZSBWZXN0YsO4ICA8dGF2ZXN0Ym9AdHJvbGx0ZWNoLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBNb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
X3dlYmtpdF9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcgdG8KICAgICAgICAgV2ViQ29y
ZSdzIFdlYkNvcmVOU1N0cmluZ0V4dHJhcyBhcyBfc3RyaW5nSXNDYXNlSW5zZW5zaXRpdmVFcXVh
bFRvU3RyaW5nLgogCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdF
eHRyYXMubSBiL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tCmluZGV4IGQ4
ZWEzNjYuLjJlNzVlOWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmlu
Z0V4dHJhcy5tCisrKyBiL1dlYktpdC9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tCkBA
IC0xNDAsNTMgKzE0MCw3IEBAIHN0YXRpYyBCT09MIGNhblVzZUZhc3RSZW5kZXJlcihjb25zdCBV
bmlDaGFyICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKIAogKyAoTlNTdHJpbmdFbmNvZGluZylf
d2ViX2VuY29kaW5nRm9yUmVzb3VyY2U6KEhhbmRsZSlyZXNvdXJjZQogewotICAgIHNob3J0IHJl
c1JlZiA9IEhvbWVSZXNGaWxlKHJlc291cmNlKTsKLSAgICBpZiAoUmVzRXJyb3IoKSAhPSBub0Vy
cikgewotICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7Ci0gICAgfQot
ICAgIAotICAgIC8vIEdldCB0aGUgRlNSZWYgZm9yIHRoZSBjdXJyZW50IHJlc291cmNlIGZpbGUK
LSAgICBGU1JlZiBmcmVmOwotICAgIE9TU3RhdHVzIGVycm9yID0gRlNHZXRGb3JrQ0JJbmZvKHJl
c1JlZiwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgJmZyZWYsIE5VTEwpOwotICAgIGlmIChlcnJvciAh
PSBub0VycikgewotICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7Ci0g
ICAgfQotICAgIAotICAgIENGVVJMUmVmIFVSTCA9IENGVVJMQ3JlYXRlRnJvbUZTUmVmKE5VTEws
ICZmcmVmKTsKLSAgICBpZiAoVVJMID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5TTWFjT1NS
b21hblN0cmluZ0VuY29kaW5nOwotICAgIH0KLSAgICAKLSAgICBOU1N0cmluZyAqcGF0aCA9IFso
TlNVUkwgKilVUkwgcGF0aF07Ci0gICAgQ0ZSZWxlYXNlKFVSTCk7Ci0gICAgCi0gICAgLy8gR2V0
IHRoZSBscHJvaiBkaXJlY3RvcnkgbmFtZQotICAgIHBhdGggPSBbcGF0aCBzdHJpbmdCeURlbGV0
aW5nTGFzdFBhdGhDb21wb25lbnRdOwotICAgIGlmICghW1twYXRoIHBhdGhFeHRlbnNpb25dIF93
ZWJraXRfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nOkAibHByb2oiXSkgewotICAgICAg
ICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7Ci0gICAgfQotICAgIAotICAgIE5T
U3RyaW5nICpkaXJlY3RvcnlOYW1lID0gW1twYXRoIHN0cmluZ0J5RGVsZXRpbmdQYXRoRXh0ZW5z
aW9uXSBsYXN0UGF0aENvbXBvbmVudF07Ci0gICAgQ0ZTdHJpbmdSZWYgbG9jYWxlID0gQ0ZMb2Nh
bGVDcmVhdGVDYW5vbmljYWxMb2NhbGVJZGVudGlmaWVyRnJvbVN0cmluZyhOVUxMLCAoQ0ZTdHJp
bmdSZWYpZGlyZWN0b3J5TmFtZSk7Ci0gICAgaWYgKGxvY2FsZSA9PSBOVUxMKSB7Ci0gICAgICAg
IHJldHVybiBOU01hY09TUm9tYW5TdHJpbmdFbmNvZGluZzsKLSAgICB9Ci0gICAgICAgICAgICAK
LSAgICBMYW5nQ29kZSBsYW5nOwotICAgIFJlZ2lvbkNvZGUgcmVnaW9uOwotICAgIGVycm9yID0g
TG9jYWxlU3RyaW5nVG9MYW5nQW5kUmVnaW9uQ29kZXMoWyhOU1N0cmluZyAqKWxvY2FsZSBVVEY4
U3RyaW5nXSwgJmxhbmcsICZyZWdpb24pOwotICAgIENGUmVsZWFzZShsb2NhbGUpOwotICAgIGlm
IChlcnJvciAhPSBub0VycikgewotICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5j
b2Rpbmc7Ci0gICAgfQotICAgIAotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKLSAgICBlcnJv
ciA9IFVwZ3JhZGVTY3JpcHRJbmZvVG9UZXh0RW5jb2Rpbmcoa1RleHRTY3JpcHREb250Q2FyZSwg
bGFuZywgcmVnaW9uLCBOVUxMLCAmZW5jb2RpbmcpOwotICAgIGlmIChlcnJvciAhPSBub0Vycikg
ewotICAgICAgICByZXR1cm4gTlNNYWNPU1JvbWFuU3RyaW5nRW5jb2Rpbmc7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBDRlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNvZGluZyhl
bmNvZGluZyk7CisgICAgcmV0dXJuIENGU3RyaW5nQ29udmVydEVuY29kaW5nVG9OU1N0cmluZ0Vu
Y29kaW5nKHN0cmluZ0VuY29kaW5nRm9yUmVzb3VyY2UocmVzb3VyY2UpKTsKIH0KIAogLSAoQk9P
TClfd2Via2l0X2lzQ2FzZUluc2Vuc2l0aXZlRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilzdHJp
bmcKLS0gCjEuNi4wLnJjMS4yNy5nOWI2YmYKCg==
</data>
<flag name="review"
          id="11486"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25019</attachid>
            <date>2008-11-10 08:13:39 -0800</date>
            <delta_ts>2008-11-12 04:38:10 -0800</delta_ts>
            <desc>Implement PluginPackageMac and PluginViewMac, and enable NPAPI support for QtWebKit/Mac</desc>
            <filename>0003-2008-11-10-Tor-Arne-Vestb-tavestbo-trolltech.co.patch</filename>
            <type>text/plain</type>
            <size>42932</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSA5N2UwYWFhYTc3ZWUwMjFjMzMzNjQxNjlhZDU1YThjMDAxNTczMDczIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFdlZCwgMTcgU2VwIDIwMDggMTY6NTY6MjQg
KzAyMDAKU3ViamVjdDogW1BBVENIXSA9P3V0Zi04P3E/MjAwOC0xMS0xMD0yMD0yMFRvcj0yMEFy
bmU9MjBWZXN0Yj1DMz1COD0yMD0yMDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPj89Ck1JTUUtVmVy
c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOApDb250ZW50
LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgoKICAgICAgICBJbXBsZW1lbnQgUGx1Z2luUGFja2FnZU1hYyBhbmQgUGx1Z2luVmlld01h
YywgYW5kIGVuYWJsZSBOUEFQSSBzdXBwb3J0IGZvciBRdFdlYktpdC9NYWMKLS0tCiBXZWJDb3Jl
L1dlYkNvcmUucHJvICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDU4ICsrLQogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIHwgICAgOCArLQogV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuY3BwICAgICAgICAgICAgIHwgICAxMiArLQogV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaCAgICAgICAgICAgICAgIHwgICAyMCArLQogV2ViQ29yZS9wbHVnaW5zL21h
Yy9QbHVnaW5QYWNrYWdlTWFjLmNwcCAgIHwgIDM2NyArKysrKysrKysrKysrKysKIFdlYkNvcmUv
cGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5jcHAgICAgICB8ICA2OTMgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMTM0IGluc2VydGlvbnMoKyksIDI0IGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2lu
UGFja2FnZU1hYy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsdWdpbnMvbWFjL1Bs
dWdpblZpZXdNYWMuY3BwCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KaW5kZXggMDE4NjgwYi4uNzcxMmUwYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MiwxMiArNzIsMTQg
QEAgd2luMzItZysrIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0FOSU1BVElPTj0u
KTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0FOSU1BVElPTj0xCiAhY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1NWR19BU19JTUFHRT0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0FTX0lNQUdFPTEK
ICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX1VTRT0uKTogREVGSU5FUyArPSBFTkFCTEVf
U1ZHX1VTRT0xCisKKyMgSFRNTDUgbWVkaWEgc3VwcG9ydAogY29udGFpbnMoUVRfQ09ORklHLCBw
aG9ub24pOkRFRklORVMgKz0gRU5BQkxFX1ZJREVPPTEKIGVsc2U6REVGSU5FUyArPSBFTkFCTEVf
VklERU89MAogCi11bml4fHdpbjMyLSo6IW1hYzohZW1iZWRkZWQ6IXdpbmNlKjohc3ltYmlhbiB7
CisjIE5lc2NhcGUgcGx1Z2lucyBzdXBwb3J0IChOUEFQSSkKK3VuaXh8d2luMzItKjohZW1iZWRk
ZWQ6IXdpbmNlKjohc3ltYmlhbiB7CiAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExV
R0lOX0FQST0xCi0gICAgdW5peDogREVGSU5FUyArPSBYUF9VTklYCiB9IGVsc2UgewogICAgIERF
RklORVMgKz0gRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MAogfQpAQCAtMTEwMyw2ICsxMTA1
LDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIHdpbjMyLSo6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2lu
L1N5c3RlbVRpbWVXaW4uY3BwCiAgICAgZWxzZTogU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9TeXN0
ZW1UaW1lUXQuY3BwCiAKKyAgICBtYWMgeworICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
ICAgIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nQ0YuY3BwIFwKKyAgICAgICAgICAgIHBsYXRmb3Jt
L3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAorICAgIH0KKwogICAgIHdpbjMyLSogewogICAgICAg
ICBMSUJTICs9IC1sZ2RpMzIKICAgICAgICAgTElCUyArPSAtbHVzZXIzMgpAQCAtMTEyNSwzMSAr
MTEzMyw0MyBAQCBTT1VSQ0VTICs9IFwKIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFND
QVBFX1BMVUdJTl9BUEk9MSkgewogCi0gICAgICAgIFNPVVJDRVMgKz0gcGx1Z2lucy9ucGFwaS5j
cHAKKyAgICBTT1VSQ0VTICs9IHBsdWdpbnMvbnBhcGkuY3BwCiAKLSAgICAgICAgdW5peDohbWFj
IHsKKyAgICB1bml4IHsKKyAgICAgICAgbWFjIHsKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAor
ICAgICAgICAgICAgICAgIHBsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwIFwKKyAgICAg
ICAgICAgICAgICBwbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFjLmNwcAorICAgICAgICAgICAgT0JK
RUNUSVZFX1NPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL3RleHQvbWFjL1N0
cmluZ0ltcGxNYWMubW0gXAorICAgICAgICAgICAgICAgIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNT
dHJpbmdFeHRyYXMubW0KKyAgICAgICAgICAgIElOQ0xVREVQQVRIICs9IHBsYXRmb3JtL21hYwor
ICAgICAgICAgICAgIyBOb3RlOiBYUF9NQUNPU1ggaXMgZGVmaW5lZCBpbiBucGFwaS5oCisgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgICAgICBw
bHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAgXAogICAgICAgICAgICAgICAgIHBsdWdpbnMv
cXQvUGx1Z2luVmlld1F0LmNwcAorICAgICAgICAgICAgREVGSU5FUyArPSBYUF9VTklYCiAgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgd2luMzItKiB7Ci0gICAgICAgICAgICBJTkNMVURFUEFU
SCArPSAkJFBXRC9wbHVnaW5zL3dpbgotCi0gICAgICAgICAgICBTT1VSQ0VTICs9IHBhZ2Uvd2lu
L1BhZ2VXaW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2lu
RGF0YWJhc2VXaW4uY3BwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1
Z2luUGFja2FnZVdpbi5jcHAgXAotICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9Q
bHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCi0gICAgICAgICAgICAgICAgICAgICAgIHBs
dWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCi0KLSAgICAgICAgICAgIExJQlMgKz0gXAotICAg
ICAgICAgICAgICAgIC1sYWR2YXBpMzIgXAotICAgICAgICAgICAgICAgIC1sZ2RpMzIgXAotICAg
ICAgICAgICAgICAgIC1sc2hlbGwzMiBcCi0gICAgICAgICAgICAgICAgLWxzaGx3YXBpIFwKLSAg
ICAgICAgICAgICAgICAtbHVzZXIzMiBcCi0gICAgICAgICAgICAgICAgLWx2ZXJzaW9uCi0gICAg
ICAgIH0KKyAgICB3aW4zMi0qIHsKKyAgICAgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGx1Z2lu
cy93aW4KKworICAgICAgICBTT1VSQ0VTICs9IHBhZ2Uvd2luL1BhZ2VXaW4uY3BwIFwKKyAgICAg
ICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAorICAgICAg
ICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwIFwKKyAgICAgICAg
ICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCisg
ICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKKworICAgICAg
ICBMSUJTICs9IFwKKyAgICAgICAgICAgIC1sYWR2YXBpMzIgXAorICAgICAgICAgICAgLWxnZGkz
MiBcCisgICAgICAgICAgICAtbHNoZWxsMzIgXAorICAgICAgICAgICAgLWxzaGx3YXBpIFwKKyAg
ICAgICAgICAgIC1sdXNlcjMyIFwKKyAgICAgICAgICAgIC1sdmVyc2lvbgorICAgIH0KIAogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKaW5kZXggNjk1MGVi
Ny4uNjk2M2RiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cApAQCAtNzQsNyArNzQsNyBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI2lmICFk
ZWZpbmVkKFFfV1NfWDExKSAmJiAhZGVmaW5lZChRX1dTX1dJTikKKyNpZiAoIWRlZmluZWQoUV9X
U19YMTEpICYmICFkZWZpbmVkKFFfV1NfV0lOKSAmJiAhZGVmaW5lZChRX1dTX01BQzMyKSkgfHwg
ZGVmaW5lZChRX09TX1dJTkNFKQogCiBib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiB1bnNpZ25lZCBQbHVnaW5QYWNrYWdl
OjpoYXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQpAQCAtODMsNiAr
ODMsOSBAQCBpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRm
b3JtTW9kdWxlVmVyc2lvbiYpIGNvbnN0IHsgbm90SQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5Q
V2luZG93UmVjdChjb25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBjb25zdCBj
aGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitjb25zdCBjaGFyKiBQbHVnaW5W
aWV3Ojp1c2VyQWdlbnRTdGF0aWMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cisj
ZW5kaWYKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJl
Y3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Z2lvbihOUFJlZ2lvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkBAIC05OCw2ICsxMDEsOSBAQCB2
b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxl
UG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYsIHVpbnQzMiwgY29uc3QgY2hhciopIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KIE5QRXJyb3IgUGx1Z2lu
Vmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUsIHZvaWQqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOyB9CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lk
KikgeyByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgfQorI2VuZGlmCiBQbHVnaW5WaWV3Ojp+
UGx1Z2luVmlldygpIHt9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblZpZXcuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDU1YmQz
YWUuLjZiNGI0N2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAor
KysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTEzOCw4ICsxMzgsMTIgQEAg
dm9pZCBQbHVnaW5WaWV3OjpmcmFtZVJlY3RzQ2hhbmdlZCgpIGNvbnN0CiAKIHZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIGlmICghbV9wbHVnaW4gfHwg
bV9pc1dpbmRvd2VkKQorICAgIGlmICghbV9wbHVnaW4pCiAgICAgICAgIHJldHVybjsKKyNpZiAh
ZGVmaW5lZChYUF9NQUNPU1gpCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJu
OworI2VuZGlmCiAKICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAgICBoYW5k
bGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwpAQCAtNDE5LDYg
KzQyMywxMiBAQCBOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CiAg
ICAgICAgIG1faXNUcmFuc3BhcmVudCA9IHZhbHVlOwogICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgY2FzZSBOUFBWcGx1Z2luRHJhd2lu
Z01vZGVsOgorCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICBjYXNlIE5QUFZwbHVnaW5FdmVu
dE1vZGVsOgorCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggMzQwNGFiYi4uMWVhMTQxZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCkBAIC0yNjMsMTEgKzI2MywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShX
SU5fT1MpICYmIFBMQVRGT1JNKFFUKQotICAgICAgICAvLyBPbmx5IHVuZGVyIFF0IG9uIFdpbmRv
d3MsIHRoZSBwbHVnaW4gd2lkZ2V0IChIV05EKSBkb2VzIG5vdCBtYXRjaCB0aGUgbmF0aXZlIHdp
ZGdldCAoUVdpZGdldCkuCi0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OyAv
LyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMKKyNpZiAoUExBVEZPUk0oUVQpICYmIFBMQVRGT1JNKFdJ
Tl9PUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBR
dC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQs
CisgICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJl
ZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCisgICAgICAgIFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0IG1fd2luZG93OwogcHVibGljOgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBw
bGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9CisgICAgICAg
IHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lkZ2V0
KSB7CisgICAgICAgICAgICBpZiAod2lkZ2V0ICE9IG1fd2luZG93KQorICAgICAgICAgICAgICAg
IG1fd2luZG93ID0gd2lkZ2V0OworICAgICAgICB9CiAjZWxzZQogcHVibGljOgogICAgICAgICBQ
bGF0Zm9ybVBsdWdpbldpZGdldCBwbGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJu
IHBsYXRmb3JtV2lkZ2V0KCk7IH0KQEAgLTI3NSw2ICsyODAsMTUgQEAgcHVibGljOgogCiBwcml2
YXRlOgogCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCisgICAgICAgIE5QX0NHQ29udGV4dCBtX25w
Q2dDb250ZXh0OworICAgICAgICBPd25QdHI8VGltZXI8UGx1Z2luVmlldz4gPiBtX251bGxFdmVu
dFRpbWVyOworCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dJZk5lZWRlZCgpOworICAgICAgICB2
b2lkIG51bGxFdmVudFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlldz4qKTsKKyAgICAgICAgUG9p
bnQgZ2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKSBjb25zdDsKKyNlbmRpZgorCiAgICAgICAgIG11
dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEg
d2luZG93ZWQgcGx1Zy1pbgogICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93aW5kb3dSZWN0OyAv
LyBPdXIgd2luZG93IHJlY3QuCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1
Z2luUGFja2FnZU1hYy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTg4OTYKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwCkBAIC0w
LDAgKzEsMzY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fTFA2
NF9fCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5o
IgorCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKworI2RlZmlu
ZSBQbHVnaW5OYW1lT3JEZXNjcmlwdGlvblN0cmluZ051bWJlciAgICAgMTI2CisjZGVmaW5lIE1J
TUVEZXNjcmlwdGlvblN0cmluZ051bWJlciAgICAgICAgICAgICAxMjcKKyNkZWZpbmUgTUlNRUxp
c3RTdHJpbmdTdHJpbmdOdW1iZXIgICAgICAgICAgICAgIDEyOAorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVU
eXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHByb2Nlc3MgY2Fu
bm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkgdW5sb2FkIGEK
KyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBwbHVnaW4sIG9y
IHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAgIG1fcXVpcmtzLmFk
ZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8vIFNldHRpbmcgdGhl
IHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIHJl
cGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWluLgorICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5n
KTsKKyAgICB9CisKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZl
LWZsYXNoIikgeworICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2lu
ZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAg
ICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7Cisg
ICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAgICB9
CisKK30KKwordHlwZWRlZiB2b2lkICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5j
ZXNGdW5jUHRyKSh2b2lkKTsKKworc3RhdGljIFdURjo6UmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcmVhZFBMaXN0RmlsZShDRlN0cmluZ1JlZiBmaWxlTmFtZSwgYm9vbCBjcmVhdGVGaWxlLCBD
RkJ1bmRsZVJlZiBidW5kbGUpCit7CisgICAgaWYgKGNyZWF0ZUZpbGUpIHsKKyAgICAgICAgQlBf
Q3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyIGZ1bmNQdHIgPQorICAgICAg
ICAgICAgKEJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzRnVuY1B0cilDRkJ1bmRs
ZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoYnVuZGxlLCBDRlNUUigiQlBfQ3JlYXRlUGx1Z2lu
TUlNRVR5cGVzUHJlZmVyZW5jZXMiKSk7CisgICAgICAgIGlmIChmdW5jUHRyKQorICAgICAgICAg
ICAgZnVuY1B0cigpOworICAgIH0KKworICAgIFdURjo6UmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gbWFwOworICAgIFdURjo6UmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPQorICAgICAgICBDRlVS
TENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWxlTmFtZSwg
a0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKTsKKworICAgIENGRGF0YVJlZiByZXNvdXJjZSA9
IDA7CisgICAgU0ludDMyIGNvZGU7CisgICAgaWYgKCFDRlVSTENyZWF0ZURhdGFBbmRQcm9wZXJ0
aWVzRnJvbVJlc291cmNlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHVybC5nZXQoKSwgJnJlc291cmNl
LCAwLCAwLCAmY29kZSkpCisgICAgICAgIHJldHVybiBtYXA7CisKKyAgICBXVEY6OlJldGFpblB0
cjxDRlByb3BlcnR5TGlzdFJlZj4gcHJvcGVydHlMaXN0ID0KKyAgICAgICAgICAgIENGUHJvcGVy
dHlMaXN0Q3JlYXRlRnJvbVhNTERhdGEoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcmVzb3VyY2UsIGtD
RlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCk7CisKKyAgICBDRlJlbGVhc2UocmVzb3VyY2UpOwor
CisgICAgaWYgKCFwcm9wZXJ0eUxpc3QpCisgICAgICAgIHJldHVybiBtYXA7CisKKyAgICBpZiAo
Q0ZHZXRUeXBlSUQocHJvcGVydHlMaXN0LmdldCgpKSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQo
KSkKKyAgICAgICAgcmV0dXJuIG1hcDsKKworICAgIG1hcCA9IHN0YXRpY19jYXN0PENGRGljdGlv
bmFyeVJlZj4oc3RhdGljX2Nhc3Q8Q0ZQcm9wZXJ0eUxpc3RSZWY+KHByb3BlcnR5TGlzdC5nZXQo
KSkpOworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBWZWN0b3I8U3RyaW5nPiBzdHJpbmdM
aXN0RnJvbVJlc291cmNlSWQoU0ludDE2IGlkKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7
CisKKyAgICBIYW5kbGUgaGFuZGxlID0gR2V0MVJlc291cmNlKCdTVFIjJywgaWQpOworICAgIGlm
ICghaGFuZGxlKQorICAgICAgICByZXR1cm4gbGlzdDsKKworICAgIENGU3RyaW5nRW5jb2Rpbmcg
ZW5jb2RpbmcgPSBzdHJpbmdFbmNvZGluZ0ZvclJlc291cmNlKGhhbmRsZSk7CisKKyAgICB1bnNp
Z25lZCBjaGFyKiBwID0gKHVuc2lnbmVkIGNoYXIqKSpoYW5kbGU7CisgICAgaWYgKCFwKQorICAg
ICAgICByZXR1cm4gbGlzdDsKKworICAgIFNJbnQxNiBjb3VudCA9ICooU0ludDE2KilwOworICAg
IHAgKz0gc2l6ZW9mKFNJbnQxNik7CisKKyAgICBmb3IgKFNJbnQxNiBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBsZW5ndGggPSAqcDsKKyAgICAgICAgV1RG
OjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aFBhc2NhbFN0
cmluZygwLCBwLCBlbmNvZGluZyk7CisgICAgICAgIGxpc3QuYXBwZW5kKHN0ci5nZXQoKSk7Cisg
ICAgICAgIHAgKz0gMSArIGxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gbGlzdDsKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXVEY6OlJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IG1pbWVEaWN0OworCisgICAgV1RGOjpSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBtaW1lVHlwZXNGaWxl
TmFtZSA9IENGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21vZHVsZSwgQ0ZT
VFIoIldlYlBsdWdpbk1JTUVUeXBlc0ZpbGVuYW1lIikpOworICAgIGlmIChtaW1lVHlwZXNGaWxl
TmFtZSAmJiBDRkdldFR5cGVJRChtaW1lVHlwZXNGaWxlTmFtZS5nZXQoKSkgPT0gQ0ZTdHJpbmdH
ZXRUeXBlSUQoKSkgeworCisgICAgICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxl
TmFtZSA9IChDRlN0cmluZ1JlZiltaW1lVHlwZXNGaWxlTmFtZS5nZXQoKTsKKyAgICAgICAgV1RG
OjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvbWVEaXIgPSBob21lRGlyZWN0b3J5UGF0aCgpLmNy
ZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRo
ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoRm9ybWF0KDAsIDAsIENGU1RSKCIlQC9MaWJyYXJ5L1ByZWZl
cmVuY2VzLyVAIiksIGhvbWVEaXIuZ2V0KCksIGZpbGVOYW1lLmdldCgpKTsKKworICAgICAgICBX
VEY6OlJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBsaXN0ID0gcmVhZFBMaXN0RmlsZShwYXRo
LmdldCgpLCAvKmNyZWF0ZUZpbGUqLyBmYWxzZSwgbV9tb2R1bGUpOworICAgICAgICBpZiAocGxp
c3QpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwbGlzdCBpc24ndCBsb2NhbGl6ZWQsIGhhdmUg
dGhlIHBsdWctaW4gcmVjcmVhdGUgaXQgaW4gdGhlIHByZWZlcnJlZCBsYW5ndWFnZS4KKyAgICAg
ICAgICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBsb2NhbGl6YXRpb25OYW1lID0KKyAg
ICAgICAgICAgICAgICAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocGxpc3QuZ2V0
KCksIENGU1RSKCJXZWJQbHVnaW5Mb2NhbGl6YXRpb25OYW1lIikpOworICAgICAgICAgICAgQ0ZM
b2NhbGVSZWYgbG9jYWxlID0gQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOworICAgICAgICAgICAgaWYg
KGxvY2FsaXphdGlvbk5hbWUgIT0gQ0ZMb2NhbGVHZXRJZGVudGlmaWVyKGxvY2FsZSkpCisgICAg
ICAgICAgICAgICAgcGxpc3QgPSByZWFkUExpc3RGaWxlKHBhdGguZ2V0KCksIC8qY3JlYXRlRmls
ZSovIHRydWUsIG1fbW9kdWxlKTsKKworICAgICAgICAgICAgQ0ZSZWxlYXNlKGxvY2FsZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBQbGlzdCBkb2Vzbid0IGV4aXN0LCBhc2sg
dGhlIHBsdWctaW4gdG8gY3JlYXRlIGl0LgorICAgICAgICAgICAgcGxpc3QgPSByZWFkUExpc3RG
aWxlKHBhdGguZ2V0KCksIC8qY3JlYXRlRmlsZSovIHRydWUsIG1fbW9kdWxlKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1pbWVEaWN0ID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShwbGlzdC5nZXQoKSwgQ0ZTVFIoIldlYlBsdWdpbk1JTUVUeXBlcyIpKTsKKyAgICB9CisK
KyAgICBpZiAoIW1pbWVEaWN0KQorICAgICAgICBtaW1lRGljdCA9IChDRkRpY3Rpb25hcnlSZWYp
Q0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9uYXJ5S2V5KG1fbW9kdWxlLCBDRlNUUigiV2Vi
UGx1Z2luTUlNRVR5cGVzIikpOworCisgICAgaWYgKG1pbWVEaWN0KSB7CisgICAgICAgIENGSW5k
ZXggcHJvcENvdW50ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQobWltZURpY3QuZ2V0KCkpOworICAg
ICAgICBWZWN0b3I8Y29uc3Qgdm9pZCosIDEyOD4ga2V5cyhwcm9wQ291bnQpOworICAgICAgICBW
ZWN0b3I8Y29uc3Qgdm9pZCosIDEyOD4gdmFsdWVzKHByb3BDb3VudCk7CisgICAgICAgIENGRGlj
dGlvbmFyeUdldEtleXNBbmRWYWx1ZXMobWltZURpY3QuZ2V0KCksIGtleXMuZGF0YSgpLCB2YWx1
ZXMuZGF0YSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wQ291bnQ7ICsraSkg
eworICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gKENGU3RyaW5nUmVmKWtleXNbaV07Cisg
ICAgICAgICAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICAgICAgICAgIFdU
Rjo6UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZXh0ZW5zaW9uc0RpY3QgPSAoQ0ZEaWN0aW9u
YXJ5UmVmKXZhbHVlc1tpXTsKKworICAgICAgICAgICAgV1RGOlJldGFpblB0cjxDRk51bWJlclJl
Zj4gZW5hYmxlZCA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShleHRlbnNpb25z
RGljdC5nZXQoKSwgQ0ZTVFIoIldlYlBsdWdpblR5cGVFbmFibGVkIikpOworICAgICAgICAgICAg
aWYgKGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZFZhbHVlID0gMDsKKyAg
ICAgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJHZXRWYWx1ZShlbmFibGVkLmdldCgpLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmZW5hYmxlZFZhbHVlKSAmJiBlbmFibGVkVmFsdWUgPT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IG1pbWVFeHRlbnNpb25zOworICAgICAgICAgICAgV1RGOjpSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gZXh0ZW5zaW9ucyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGV4
dGVuc2lvbnNEaWN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luRXh0ZW5zaW9ucyIpKTsKKyAgICAg
ICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAgICAgICAgICAgICAgQ0ZJbmRleCBleHRlbnNp
b25Db3VudCA9IENGQXJyYXlHZXRDb3VudChleHRlbnNpb25zLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBleHRlbnNpb25Db3VudDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFN0cmluZyBleHRlbnNpb24gPShDRlN0cmluZ1JlZilDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGV4dGVuc2lvbnMuZ2V0KCksIGkpOworICAgICAgICAgICAgICAgICAgICBl
eHRlbnNpb24gPSBleHRlbnNpb24ubG93ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbWltZUV4
dGVuc2lvbnMuYXBwZW5kKGV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLnNldChtaW1lVHlwZSwgbWltZUV4
dGVuc2lvbnMpOworCisgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSAoQ0ZTdHJpbmdS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZXh0ZW5zaW9uc0RpY3QuZ2V0KCksIENGU1RSKCJXZWJQ
bHVnaW5UeXBlRGVzY3JpcHRpb24iKSk7CisgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9u
cy5zZXQobWltZVR5cGUsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fbmFt
ZSA9IChDRlN0cmluZ1JlZilDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXkobV9t
b2R1bGUsIENGU1RSKCJXZWJQbHVnaW5OYW1lIikpOworICAgICAgICBtX2Rlc2NyaXB0aW9uID0g
KENGU3RyaW5nUmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJbmZvRGljdGlvbmFyeUtleShtX21vZHVs
ZSwgQ0ZTVFIoIldlYlBsdWdpbkRlc2NyaXB0aW9uIikpOworCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaW50IHJlc0ZpbGUgPSBDRkJ1bmRsZU9wZW5CdW5kbGVSZXNvdXJjZU1hcChtX21vZHVsZSk7
CisKKyAgICAgICAgVXNlUmVzRmlsZShyZXNGaWxlKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBtaW1lcyA9IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChNSU1FTGlzdFN0cmluZ1N0cmluZ051
bWJlcik7CisKKyAgICAgICAgaWYgKG1pbWVzLnNpemUoKSAlIDIgIT0gMCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBkZXNjcmlwdGlvbnMgPSBz
dHJpbmdMaXN0RnJvbVJlc291cmNlSWQoTUlNRURlc2NyaXB0aW9uU3RyaW5nTnVtYmVyKTsKKyAg
ICAgICAgaWYgKGRlc2NyaXB0aW9ucy5zaXplKCkgIT0gbWltZXMuc2l6ZSgpIC8gMikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgIGkgPCBt
aW1lcy5zaXplKCk7IGkgKz0gMikgeworICAgICAgICAgICAgU3RyaW5nIG1pbWUgPSBtaW1lc1tp
XS5sb3dlcigpOworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9uczsKKyAgICAg
ICAgICAgIG1pbWVzW2kgKyAxXS5sb3dlcigpLnNwbGl0KFVDaGFyKCcsJyksIGV4dGVuc2lvbnMp
OworCisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuc2V0KG1pbWUsIGV4dGVuc2lvbnMp
OworCisgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5zZXQobWltZSwgZGVzY3JpcHRp
b25zW2kgLyAyXSk7CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lcyA9
IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChQbHVnaW5OYW1lT3JEZXNjcmlwdGlvblN0cmluZ051
bWJlcik7CisgICAgICAgIGlmIChuYW1lcy5zaXplKCkgPT0gMikgeworICAgICAgICAgICAgbV9k
ZXNjcmlwdGlvbiA9IG5hbWVzWzBdOworICAgICAgICAgICAgbV9uYW1lID0gbmFtZXNbMV07Cisg
ICAgICAgIH0KKworICAgICAgICBDRkJ1bmRsZUNsb3NlQnVuZGxlUmVzb3VyY2VNYXAobV9tb2R1
bGUsIHJlc0ZpbGUpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdp
blBhY2thZ2U6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9h
ZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFdURjo6UmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBwYXRoKEFkb3B0Q0YsIG1fcGF0aC5jcmVhdGVDRlN0cmluZygpKTsK
KyAgICBXVEY6OlJldGFpblB0cjxDRlVSTFJlZj4gdXJsKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0
aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKKyAgICBtX21vZHVsZSA9IENG
QnVuZGxlQ3JlYXRlKE5VTEwsIHVybC5nZXQoKSk7CisgICAgaWYgKCFtX21vZHVsZSB8fCAhQ0ZC
dW5kbGVMb2FkRXhlY3V0YWJsZShtX21vZHVsZSkpIHsKKyAgICAgICAgTE9HKFBsdWdpbiwgIiVz
IG5vdCBsb2FkZWQiLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0dldEVudHJ5UG9p
bnRzRnVuY1B0ciBOUF9HZXRFbnRyeVBvaW50cyA9IDA7CisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQ
dHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgTlBfSW5pdGlhbGl6
ZSA9IChOUF9Jbml0aWFsaXplRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5h
bWUobV9tb2R1bGUsIENGU1RSKCJOUF9Jbml0aWFsaXplIikpOworICAgIE5QX0dldEVudHJ5UG9p
bnRzID0gKE5QX0dldEVudHJ5UG9pbnRzRnVuY1B0cilDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRl
ckZvck5hbWUobV9tb2R1bGUsIENGU1RSKCJOUF9HZXRFbnRyeVBvaW50cyIpKTsKKyAgICBtX05Q
UF9TaHV0ZG93biA9IChOUFBfU2h1dGRvd25Qcm9jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2lu
dGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX1NodXRkb3duIikpOworCisgICAgaWYgKCFO
UF9Jbml0aWFsaXplIHx8ICFOUF9HZXRFbnRyeVBvaW50cyB8fCAhbV9OUFBfU2h1dGRvd24pCisg
ICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpOworCisgICAgbnBFcnIgPSBOUF9HZXRFbnRyeVBvaW50cygmbV9wbHVnaW5GdW5j
cyk7CisgICAgTE9HX05QRVJST1IobnBFcnIpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBz
aXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBf
VkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5u
ZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBO
X1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0
cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJv
d3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVt
YWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9N
ZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAg
IG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJv
d3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2
YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9
IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9u
ID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcg
PSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9H
ZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQ
ZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVz
aFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVk
c3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05Q
Tl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmlu
ZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9t
aWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNz
LmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJl
dGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVh
c2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tl
ID0gX05QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5f
SW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVh
dGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5Owor
ICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAg
bV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNz
LnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVu
dW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIG5w
RXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyNl
bHNlCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcyk7CisjZW5kaWYK
KyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisK
KyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1bmxv
YWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFBs
dWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAoreworICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9
IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmll
ZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnBy
ZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9m
KFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFj
a2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2Ny
aXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBh
cmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9u
KSBjb25zdAoreworICAgIC8vIHJldHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24g
aXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gdGhlIHBhc3Nl
ZCB2ZXJzaW9uCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lvbikKKyAg
ICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6IC0xOwor
ICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAh
X19MUDY0X18KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5j
cHAgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTljZGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMuY3BwCkBAIC0wLDAgKzEsNjkzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fTFA2NF9fCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgInd0Zi9SZXRhaW5Q
dHIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUg
InJ1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKwordXNpbmcgSlNDOjpFeGVjU3Rh
dGU7Cit1c2luZyBKU0M6OkludGVycHJldGVyOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1c2luZyBK
U0M6OkpTT2JqZWN0OwordXNpbmcgSlNDOjpKU1ZhbHVlOwordXNpbmcgSlNDOjpVU3RyaW5nOwor
CisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UVdpZGdldD4KKyNpbmNsdWRlIDxRS2V5RXZl
bnQ+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2V4dGVybiBRX0dVSV9FWFBPUlQgT1NXaW5kb3dSZWYg
cXRfbWFjX3dpbmRvd19mb3IoY29uc3QgUVdpZGdldCAqdyk7CitRVF9FTkRfTkFNRVNQQUNFCisj
ZW5kaWYKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGljIGlu
dCBtb2RpZmllcnNGb3JFdmVudChVSUV2ZW50V2l0aEtleVN0YXRlICpldmVudCk7CisKK3N0YXRp
YyBpbmxpbmUgV2luZG93UmVmIG5hdGl2ZVdpbmRvd0ZvcihQbGF0Zm9ybVdpZGdldCB3aWRnZXQp
Cit7CisjaWYgUExBVEZPUk0oUVQpCisgICAgaWYgKHdpZGdldCkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdpbmRvd1JlZj4ocXRfbWFjX3dpbmRvd19mb3Iod2lkZ2V0KSk7CisjZW5kaWYK
KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBDR0NvbnRleHRSZWYgY2dIYW5kbGVG
b3IoUGxhdGZvcm1XaWRnZXQgd2lkZ2V0KQoreworI2lmIFBMQVRGT1JNKFFUKQorICAgIGlmICh3
aWRnZXQpCisgICAgICAgIHJldHVybiAoQ0dDb250ZXh0UmVmKXdpZGdldC0+bWFjQ0dIYW5kbGUo
KTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IHRv
cExldmVsT2Zmc2V0Rm9yKFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKK3sKKyNpZiBQTEFURk9STShR
VCkKKyAgICBpZiAod2lkZ2V0KSB7CisgICAgICAgIFBsYXRmb3JtV2lkZ2V0IHRvcExldmVsID0g
d2lkZ2V0LT53aW5kb3coKTsKKyAgICAgICAgcmV0dXJuIHdpZGdldC0+bWFwVG8odG9wTGV2ZWws
IFFQb2ludCgwLCAwKSkgKyB0b3BMZXZlbC0+Z2VvbWV0cnkoKS50b3BMZWZ0KCkgLSB0b3BMZXZl
bC0+cG9zKCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9CisKKy8v
IC0tLS0tLS0tLS0tLS0tLSBMaWZldGltZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tCisK
K3ZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQor
ICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYg
KCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2Fu
Tm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGx1
Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0YXR1cyA9
IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5O
b3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0UGxhdGZvcm1Q
bHVnaW5XaWRnZXQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3Jt
V2luZG93KCkpOworCisgICAgbV9ucENnQ29udGV4dC53aW5kb3cgPSAwOworICAgIG1fbnBDZ0Nv
bnRleHQuY29udGV4dCA9IDA7CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopJm1fbnBD
Z0NvbnRleHQ7CisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAg
IG1fbnBXaW5kb3cueCA9IDA7CisgICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICBtX25wV2luZG93
LndpZHRoID0gMDsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IDA7CisgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5i
b3R0b20gPSAwOworCisgICAgc2V0SXNOUEFQSVBsdWdpbih0cnVlKTsKKworICAgIHNob3coKTsK
KworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworCisgICAg
Ly8gVE9ETzogSW1wbGVtZW50IG51bGwgdGltZXIgdGhyb3R0bGluZyBkZXBlbmRpbmcgb24gcGx1
Z2luIGFjdGl2YXRpb24KKyAgICBtX251bGxFdmVudFRpbWVyLnNldChuZXcgVGltZXI8UGx1Z2lu
Vmlldz4odGhpcywgJlBsdWdpblZpZXc6Om51bGxFdmVudFRpbWVyRmlyZWQpKTsKKyAgICBtX251
bGxFdmVudFRpbWVyLT5zdGFydFJlcGVhdGluZygwLjAyKTsKK30KKworUGx1Z2luVmlldzo6flBs
dWdpblZpZXcoKQoreworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVl
c3RzKTsKKworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7
CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAg
ICBtX3BhcmVudEZyYW1lLT5zY3JpcHQoKS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4o
dGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxv
YWQoKTsKKworICAgIG1fd2luZG93ID0gMDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkK
K3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0
PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0
PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3Ry
ZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsK
KyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNT
RVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKwor
ICAgIEpTQzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKworICAg
IC8vIERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KHRoaXMpOworICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CisgICAgUGx1Z2luVmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAg
ICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVTdGF0aWMoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQ
bHVnaW4sICJQbHVnaW5WaWV3OjpnZXRWYWx1ZVN0YXRpYyglZCkiLCB2YXJpYWJsZSk7CisKKyAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgKigo
dWludDMyICopdmFsdWUpID0gMDsKKyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCisg
ICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJsZWRCb29sOgorICAgICAgICAqKCh1aW50MzIgKil2
YWx1ZSkgPSB0cnVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05Q
RXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKQoreworICAgIExPRyhQbHVnaW4sICJQbHVnaW5WaWV3OjpnZXRWYWx1ZSglZCkiLCB2YXJp
YWJsZSk7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WV2luZG93TlBP
YmplY3Q6IHsKKyAgICAgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1Nj
cmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9iamVj
dCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5l
ZCwgYXMgZGVzY3JpYmVkIGluCisgICAgICAgIC8vIDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9i
amVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7
CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRv
d1NjcmlwdE9iamVjdDsKKworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfQor
CisgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lz
SmF2YVNjcmlwdFBhdXNlZCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OworCisgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAg
IGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAg
ICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1l
bnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1
ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGluCisgICAgICAgIC8v
IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4K
KyAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoq
KXZhbHVlOworICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfQorCisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3Jh
cGhpY3NCb29sOgorICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZ2V0
VmFsdWVTdGF0aWModmFyaWFibGUsIHZhbHVlKTsKKyAgICB9CisKK30KK3ZvaWQgUGx1Z2luVmll
dzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVu
dChwYXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgaW5pdCgpOworfQorCisvLyAt
LS0tLS0tLS0tLS0tLSBHZW9tZXRyeSBhbmQgcGFpbnRpbmcgLS0tLS0tLS0tLS0tLS0tLQorCit2
b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAgIExPRyhQbHVnaW4sICJQbHVnaW5WaWV3Ojpz
aG93KCkiKTsKKworICAgIHNldFNlbGZWaXNpYmxlKHRydWUpOworCisgICAgaWYgKGlzUGFyZW50
VmlzaWJsZSgpICYmIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1
Z2luV2lkZ2V0KCktPnNldFZpc2libGUodHJ1ZSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBMT0coUGx1Z2luLCAiUGx1Z2luVmll
dzo6aGlkZSgpIik7CisKKyAgICBzZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQ
YXJlbnRWaXNpYmxlKCkgJiYgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZv
cm1QbHVnaW5XaWRnZXQoKS0+c2V0VmlzaWJsZShmYWxzZSk7CisKKyAgICBXaWRnZXQ6OmhpZGUo
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpCit7CisgICAgTE9HKFBsdWdpbiwg
IlBsdWdpblZpZXc6OnNldEZvY3VzKCkiKTsKKworICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdl
dCgpKQorICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldEZvY3VzKFF0OjpPdGhlckZv
Y3VzUmVhc29uKTsKKyAgIGVsc2UKKyAgICAgICBXaWRnZXQ6OnNldEZvY3VzKCk7CisKKyAgICAv
LyBUT0RPOiBBbHNvIGhhbmRsZSBhbmQgcGFzcyBvbiBibHVyIGV2ZW50cyAoZm9jdXMgbG9zdCkK
KworICAgIEV2ZW50UmVjb3JkIHJlY29yZDsKKyAgICByZWNvcmQud2hhdCA9IGdldEZvY3VzRXZl
bnQ7CisgICAgcmVjb3JkLm1lc3NhZ2UgPSAwOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50
KCk7CisgICAgcmVjb3JkLndoZXJlID0gZ2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICBy
ZWNvcmQubW9kaWZpZXJzID0gR2V0Q3VycmVudEtleU1vZGlmaWVycygpOworCisgICAgaWYgKCFk
aXNwYXRjaE5QRXZlbnQocmVjb3JkKSkgeworICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmll
dzo6c2V0Rm9jdXMoKTogR2V0LWZvY3VzIGV2ZW50IG5vdCBhY2NlcHRlZCIpOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAg
ICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2lkZ2V0OjpzZXRQYXJlbnRWaXNpYmxlKHZpc2libGUpOworCisgICAgaWYgKGlzU2VsZlZp
c2libGUoKSAmJiBwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdp
bldpZGdldCgpLT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNl
dE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikKK3sKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAg
aWYgKCFtX2lzU3RhcnRlZCB8fCAhcGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5zZXR3aW5kb3cpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBuZXdDb250
ZXh0UmVmID0gY2dIYW5kbGVGb3IocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgaWYgKCFu
ZXdDb250ZXh0UmVmKQorICAgICAgICByZXR1cm47CisKKyAgICBXaW5kb3dSZWYgbmV3V2luZG93
UmVmID0gbmF0aXZlV2luZG93Rm9yKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIGlmICgh
bmV3V2luZG93UmVmKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4ocGFyZW50KCkpOworICAgIEludFJlY3QgbmV3R2VvbWV0cnkgPSBJbnRSZWN0KGZy
YW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVS
ZWN0KCkuc2l6ZSgpKTsKKworICAgIC8vIFRPRE86IGFsc28gY29tcGFyZSBjbGlwIHJlY3RzCisg
ICAgaWYgKG5ld0dlb21ldHJ5ID09IG1fd2luZG93UmVjdAorICAgICAgICAmJiBuZXdXaW5kb3dS
ZWYgPT0gbV9ucENnQ29udGV4dC53aW5kb3cKKyAgICAgICAgJiYgbmV3Q29udGV4dFJlZiA9PSBt
X25wQ2dDb250ZXh0LmNvbnRleHQpCisgICAgcmV0dXJuOworCisgICAgbV9ucFdpbmRvdy53aW5k
b3cgPSAodm9pZCopJm1fbnBDZ0NvbnRleHQ7CisgICAgbV9ucENnQ29udGV4dC53aW5kb3cgPSBu
ZXdXaW5kb3dSZWY7CisgICAgbV9ucENnQ29udGV4dC5jb250ZXh0ID0gbmV3Q29udGV4dFJlZjsK
KworICAgIG1fd2luZG93UmVjdCA9IG5ld0dlb21ldHJ5OworICAgIG1fbnBXaW5kb3cueCA9IG1f
d2luZG93UmVjdC54KCk7CisgICAgbV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAg
ICBtX25wV2luZG93LndpZHRoID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRv
dy5oZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBUT0RPOiAoYWxzbyBj
bGlwIGFnYWluc3Qgc2Nyb2xsYmFycywgZXRjLikKKyAgICBtX25wV2luZG93LmNsaXBSZWN0Lmxl
ZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93
LmNsaXBSZWN0LnJpZ2h0ID0gbV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5ib3R0b20gPSBtX3dpbmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICBQbHVnaW5WaWV3
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2lu
ZG93KTsKKyAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRD
dXJyZW50UGx1Z2luVmlldygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5X
aWRnZXQoKSBjb25zdAoreworICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gV2UgdXBkYXRlIHRo
ZSBwbHVnaW4gd2lkZ2V0CisgICAgLy8gaW4gcGFpbnQoKSwgaWYgdGhlIE5QV2luZG93IHN0cnVj
dCBoYXMgY2hhbmdlZC4KK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRl
ZCkgeworICAgICAgICAvLyBUT0RPOiBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisKKyAg
ICBFdmVudFJlY29yZCBldmVudDsKKyAgICBldmVudC53aGF0ID0gdXBkYXRlRXZ0OworICAgIGV2
ZW50Lm1lc3NhZ2UgPSAobG9uZyB1bnNpZ25lZCBpbnQpbV9ucENnQ29udGV4dC53aW5kb3c7Cisg
ICAgZXZlbnQud2hlbiA9IFRpY2tDb3VudCgpOworICAgIGV2ZW50LndoZXJlLmggPSAwOworICAg
IGV2ZW50LndoZXJlLnYgPSAwOworICAgIGV2ZW50Lm1vZGlmaWVycyA9IEdldEN1cnJlbnRLZXlN
b2RpZmllcnMoKTsKKworICAgIENHQ29udGV4dFJlZiBjZyA9IG1fbnBDZ0NvbnRleHQuY29udGV4
dDsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNnKTsKKyAgICBJbnRQb2ludCBvZmZzZXQgPSBm
cmFtZVJlY3QoKS5sb2NhdGlvbigpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZywgb2Zm
c2V0LngoKSwgb2Zmc2V0LnkoKSk7CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChldmVudCkp
IHsKKyAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OnBhaW50KCk6IFBhaW50IGV2ZW50
IG5vdCBhY2NlcHRlZCIpOworICAgIH0KKworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2cp
OworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgLy8gVE9E
Tzogb3B0aW1pemUKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+dXBkYXRlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Y3QoTlBSZWN0KiByZWN0KQoreworICAgIC8vIFRPRE86IG9wdGltaXplCisgICAgaW52YWxpZGF0
ZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVn
aW9uKQoreworICAgIC8vIFRPRE86IG9wdGltaXplCisgICAgaW52YWxpZGF0ZSgpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tIEV2ZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBl
dmVudCkKK3sKKyAgICBFdmVudFJlY29yZCByZWNvcmQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkKKyAg
ICAgICAgcmVjb3JkLndoYXQgPSBhZGp1c3RDdXJzb3JFdmVudDsKKyAgICBlbHNlIGlmIChldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KQorICAgICAgICByZWNvcmQu
d2hhdCA9IGFkanVzdEN1cnNvckV2ZW50OworICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB7CisgICAgICAgIHJlY29yZC53aGF0ID0gbW91
c2VEb3duOworICAgICAgICAvLyBUaGUgcGx1Z2luIG5lZWRzIGZvY3VzIHRvIHJlY2VpdmUga2V5
Ym9hcmQgZXZlbnRzCisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFn
ZSgpKQorICAgICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFt
ZShtX3BhcmVudEZyYW1lKTsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0
Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCkKKyAgICAgICAgcmVjb3JkLndoYXQgPSBtb3VzZVVw
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb3JkLndoZXJlID0gZ2xvYmFs
TW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZpZXJzRm9y
RXZlbnQoZXZlbnQpOworCisgICAgaWYgKCFldmVudC0+YnV0dG9uRG93bigpKQorICAgICAgICBy
ZWNvcmQubW9kaWZpZXJzIHw9IGJ0blN0YXRlOworCisgICAgaWYgKGV2ZW50LT5idXR0b24oKSA9
PSAyKQorICAgICAgICByZWNvcmQubW9kaWZpZXJzIHw9IGNvbnRyb2xLZXk7CisKKyAgICBpZiAo
IWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKSB7CisgICAgICAgIGlmIChyZWNvcmQud2hhdCA9PSBh
ZGp1c3RDdXJzb3JFdmVudCkKKyAgICAgICAgICAgIHJldHVybjsgLy8gU2lnbmFscyB0aGF0IHRo
ZSBwbHVnaW4gd2FudHMgYSBub3JtYWwgY3Vyc29yCisKKyAgICAgICAgTE9HKEV2ZW50cywgIlBs
dWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoKTogTW91c2UgZXZlbnQgdHlwZSAlZCBhdCAlZCwl
ZCBub3QgYWNjZXB0ZWQiLAorICAgICAgICAgICAgICAgIHJlY29yZC53aGF0LCByZWNvcmQud2hl
cmUuaCwgcmVjb3JkLndoZXJlLnYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXli
b2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIExPRyhQbHVnaW4sICJQbHVn
aW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KCkgLS0tLS0tLS0tLS0tLS0tLS0gIik7CisKKyAg
ICBMT0coUGx1Z2luLCAiUFY6OmhLRSgpOiBLRS5rZXlDb2RlOiAweCUwMlgsIEtFLmNoYXJDb2Rl
OiAlZCIsCisgICAgICAgICAgICBldmVudC0+a2V5Q29kZSgpLCBldmVudC0+Y2hhckNvZGUoKSk7
CisKKyAgICBFdmVudFJlY29yZCByZWNvcmQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIC8vIFRoaXMgZXZlbnQgaXMgdGhl
IHJlc3VsdCBvZiBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93biB3aGljaAorICAgICAg
ICAvLyB3YXMgZGlzYW1iaWd1YXRlZCBpbnRvIGEgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdL
ZXlEb3duLiBTaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgdGV4
dCBoZXJlLCB3ZSByZXR1cm4sIGFuZCB3YWl0IGZvciB0aGUKKyAgICAgICAgLy8gY29ycmVzcG9u
ZGluZyBldmVudCBiYXNlZCBvbiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIuCisgICAgICAg
IHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eXByZXNzRXZlbnQpIHsKKyAgICAgICAgLy8gV2hpY2ggd291bGQgYmUgdGhpcyBvbmUuIFRoaXMg
ZXZlbnQgd2FzIGRpc2FtYmlndWF0ZWQgZnJvbSB0aGUgc2FtZQorICAgICAgICAvLyBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ6OktleURvd24sIGJ1dCB0byBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6
Q2hhciwKKyAgICAgICAgLy8gd2hpY2ggcmV0YWlucyB0aGUgdGV4dCBmcm9tIHRoZSBvcmlnaW5h
bCBldmVudC4gU28sIHdlIGNhbiBzYWZlbHkgcGFzcworICAgICAgICAvLyBvbiB0aGUgZXZlbnQg
YXMgYSBrZXktZG93biBldmVudCB0byB0aGUgcGx1Z2luLgorICAgICAgICByZWNvcmQud2hhdCA9
IGtleURvd247CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50KSB7CisgICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5VXAgZXZl
bnRzIGFsd2F5cyBoYXZlIHRoZSB0ZXh0LCBzbyBub3RoaW5nCisgICAgICAgIC8vIGZhbmN5IGhl
cmUuCisgICAgICAgIHJlY29yZC53aGF0ID0ga2V5VXA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZv
cm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOworICAgIGludCBrZXlDb2RlID0gcGxhdGZvcm1F
dmVudC0+bmF0aXZlVmlydHVhbEtleUNvZGUoKTsKKworICAgIGNvbnN0IFN0cmluZyB0ZXh0ID0g
cGxhdGZvcm1FdmVudC0+dGV4dCgpOworICAgIGlmICh0ZXh0Lmxlbmd0aCgpIDwgMSkgeworICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlRleHQoV1RGOjpBZG9wdENGLCB0
ZXh0LmNyZWF0ZUNGU3RyaW5nKCkpOworCisgICAgTE9HKFBsdWdpbiwgIlBWOjpoS0UoKTogUEtF
LnRleHQ6ICVzLCBQS0UudW5tb2RpZmllZFRleHQ6ICVzLCBQS0Uua2V5SWRlbnRpZmllcjogJXMi
LAorICAgICAgICAgICAgdGV4dC5hc2NpaSgpLmRhdGEoKSwgcGxhdGZvcm1FdmVudC0+dW5tb2Rp
ZmllZFRleHQoKS5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAgIHBsYXRmb3JtRXZlbnQtPmtl
eUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBjaGFyIGNoYXJDb2Rlc1syXSA9
IHsgMCwgMCB9OworICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKGNmVGV4dC5nZXQoKSwgY2hh
ckNvZGVzLCAyLCBDRlN0cmluZ0dldFN5c3RlbUVuY29kaW5nKCkpKSB7CisgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHJlc29sdmUgY2hhcmFjdGVyIGNvZGUgdXNpbmcgc3lzdGVtIGVuY29k
aW5nLiIpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHJlY29yZC53aGVyZSA9IGdsb2JhbE1vdXNlUG9zRm9yUGx1Z2lu
KCk7CisgICAgcmVjb3JkLm1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAg
ICByZWNvcmQubWVzc2FnZSA9ICgoa2V5Q29kZSAmIDB4RkYpIDw8IDgpIHwgKGNoYXJDb2Rlc1sw
XSAmIDB4RkYpOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50KCk7CisKKyAgICBMT0coUGx1
Z2luLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5tb2RpZmllcnMp
OworCisgICAgTE9HKFBsdWdpbiwgIlBWOjpoS0UoKTogUEtFLnF0RXZlbnQoKS0+bmF0aXZlVmly
dHVhbEtleTogMHglMDJYLCBjaGFyQ29kZTogJWQiLAorICAgICAgICAgICAgICAga2V5Q29kZSwg
aW50KHVjaGFyKGNoYXJDb2Rlc1swXSkpKTsKKworICAgIGlmICghZGlzcGF0Y2hOUEV2ZW50KHJl
Y29yZCkpIHsKKyAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQiLAorICAgICAgICAg
ICAgICAgIHJlY29yZC53aGF0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6bnVsbEV2ZW50VGlt
ZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3PiopCit7CisgICAgRXZlbnRSZWNvcmQgcmVjb3JkOwor
CisgICAgcmVjb3JkLndoYXQgPSBudWxsRXZlbnQ7CisgICAgcmVjb3JkLm1lc3NhZ2UgPSAwOwor
ICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50KCk7CisgICAgcmVjb3JkLndoZXJlID0gZ2xvYmFs
TW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZpZXJzID0gR2V0Q3VycmVudEtl
eU1vZGlmaWVycygpOworICAgIGlmICghQnV0dG9uKCkpCisgICAgICAgIHJlY29yZC5tb2RpZmll
cnMgfD0gYnRuU3RhdGU7CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKSB7Cisg
ICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpudWxsRXZlbnRUaW1lckZpcmVkKCk6IE51
bGwgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgfQorfQorCitzdGF0aWMgaW50IG1vZGlmaWVy
c0ZvckV2ZW50KFVJRXZlbnRXaXRoS2V5U3RhdGUgKmV2ZW50KQoreworICAgIGludCBtb2RpZmll
cnMgPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBjb250cm9sS2V5OworCisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAgbW9kaWZp
ZXJzIHw9IG9wdGlvbktleTsKKworICAgIGlmIChldmVudC0+bWV0YUtleSgpKQorICAgICAgICBt
b2RpZmllcnMgfD0gY21kS2V5OworCisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAg
ICBtb2RpZmllcnMgfD0gc2hpZnRLZXk7CisKKyAgICAgcmV0dXJuIG1vZGlmaWVyczsKK30KKwor
UG9pbnQgUGx1Z2luVmlldzo6Z2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKSBjb25zdAoreworICAg
IFBvaW50IHBvczsKKyAgICBHZXRHbG9iYWxNb3VzZSgmcG9zKTsKKworICAgIEludFBvaW50IG9m
ZnNldCA9IHRvcExldmVsT2Zmc2V0Rm9yKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIHBv
cy5oIC09IG9mZnNldC54KCk7CisgICAgcG9zLnYgLT0gb2Zmc2V0LnkoKTsKKworICAgIHBvcy5o
ID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KHBvcy5oICogSElHZXRTY2FsZUZhY3RvcigpKTsKKyAgICBw
b3MudiA9IHN0YXRpY19jYXN0PHNob3J0Pihwb3MudiAqIEhJR2V0U2NhbGVGYWN0b3IoKSk7CisK
KyAgICByZXR1cm4gcG9zOworfQorCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudChO
UEV2ZW50JiBldmVudCkKK3sKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxzZSk7
CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQgPSBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKworICAgIHNl
dENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5W
aWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGNvbnN0IGNoYXIq
IE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4t
VVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK2NvbnN0IGNoYXIq
IFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5j
b250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVy
biBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAg
ICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91
cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK2NvbnN0
IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJuIE1vemls
bGFVc2VyQWdlbnQ7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxl
KFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYpCit7Cisg
ICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5zdGFydHNX
aXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4
KTsKKworICAgIGlmICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoZmlsZUhhbmRsZSA9PSAwKQorICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0g
ZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmls
ZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIV9fTFA2NF9fCi0tIAoxLjYuMC5yYzEu
MjcuZzliNmJmCgo=
</data>
<flag name="review"
          id="11488"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25095</attachid>
            <date>2008-11-12 04:38:10 -0800</date>
            <delta_ts>2008-11-12 06:29:18 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>0001-2008-11-12-Tor-Arne-Vestb-tavestbo-trolltech.co.patch</filename>
            <type>text/plain</type>
            <size>45845</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSAxYjhiNzk4MTAxODAxNmFlNzFhNjRlNDQxMWQwNjlmYWM5NGRlZTc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CkRhdGU6IFdlZCwgMTcgU2VwIDIwMDggMTY6NTY6MjQg
KzAyMDAKU3ViamVjdDogW1BBVENIXSA9P3V0Zi04P3E/MjAwOC0xMS0xMj0yMD0yMFRvcj0yMEFy
bmU9MjBWZXN0Yj1DMz1COD0yMD0yMDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPj89Ck1JTUUtVmVy
c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOApDb250ZW50
LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgogICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNt
YW5uLgoKICAgICAgICBJbml0YWwgaW1wbGVtZW50YXRpb24gb2YgUGx1Z2luUGFja2FnZSBhbmQg
UGx1Z2luVmlldyBmb3IgTWFjIE5QQVBJIHN1cHBvcnQgaW4gV2ViQ29yZQoKICAgICAgICBDdXJy
ZW50bHkgb25seSB1c2VkIGJ5IFF0V2ViS2l0LiBTZWUgYWxzbzoKCiAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDI3Ci0tLQogV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2MCArKysKIFdlYkNvcmUvV2ViQ29yZS5w
cm8gICAgICAgICAgICAgICAgICAgICAgICB8ICAgNTggKystCiBXZWJDb3JlL3BsYXRmb3JtL3F0
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgfCAgICA4ICstCiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAgICAgICAgICAgICAgfCAgIDEwICsKIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmggICAgICAgICAgICAgICB8ICAgMTkgKy0KIFdlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luUGFj
a2FnZU1hYy5jcHAgICB8ICAzNjMgKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsdWdpbnMvbWFj
L1BsdWdpblZpZXdNYWMuY3BwICAgICAgfCAgNjk1ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysKIDcgZmlsZXMgY2hhbmdlZCwgMTE5MCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblBhY2thZ2VNYWMu
Y3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5WaWV3TWFj
LmNwcAoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggYmIyNTI4Yy4uNTcxYWRmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MyBAQAorMjAwOC0xMS0xMiAgVG9yIEFy
bmUgVmVzdGLDuCAgPHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gSGF1c21hbm4uCisKKyAgICAgICAgSW5pdGFsIGltcGxlbWVudGF0aW9uIG9mIFBs
dWdpblBhY2thZ2UgYW5kIFBsdWdpblZpZXcgZm9yIE1hYyBOUEFQSSBzdXBwb3J0IGluIFdlYkNv
cmUKKworICAgICAgICBDdXJyZW50bHkgb25seSB1c2VkIGJ5IFF0V2ViS2l0LiBTZWUgYWxzbzoK
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjcK
KworICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFy
eUxpbmtTdHVicy5jcHA6CisgICAgICAgIChQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMpOgor
ICAgICAgICAoUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMpOgorICAgICAgICAqIHBsdWdpbnMv
UGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdp
blZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0KToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgor
ICAgICAgICAoV2ViQ29yZTo6cmVhZFBMaXN0RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpzdHJp
bmdMaXN0RnJvbVJlc291cmNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6
ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpj
b21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAqIHBsdWdpbnMvbWFjL1BsdWdpblZpZXdNYWMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZVdpbmRvd0Zvcik6CisgICAgICAg
IChXZWJDb3JlOjpjZ0hhbmRsZUZvcik6CisgICAgICAgIChXZWJDb3JlOjp0b3BMZXZlbE9mZnNl
dEZvcik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6On5QbHVnaW5WaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0
aWMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRQYXJlbnRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRO
UFdpbmRvd0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVBs
dWdpbldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmZvcmNlUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Omhh
bmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5
Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpudWxsRXZlbnRUaW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Om1vZGlmaWVyc0ZvckV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6Omdsb2JhbE1vdXNlUG9zRm9yUGx1Z2luKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmRpc3BhdGNoTlBFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
dXNlckFnZW50U3RhdGljKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBv
c3RSZWFkRmlsZSk6CisKIDIwMDgtMTEtMTAgIFRvciBBcm5lIFZlc3Riw7ggIDx0YXZlc3Rib0B0
cm9sbHRlY2guY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
NDU3ZjAwZC4uYzczYmU1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9X
ZWJDb3JlL1dlYkNvcmUucHJvCkBAIC03MiwxMiArNzIsMTQgQEAgd2luMzItZysrIHsKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0FOSU1BVElPTj0uKTogREVGSU5FUyArPSBFTkFCTEVf
U1ZHX0FOSU1BVElPTj0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19BU19JTUFHRT0u
KTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0FTX0lNQUdFPTEKICFjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfU1ZHX1VTRT0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX1VTRT0xCisKKyMgSFRNTDUg
bWVkaWEgc3VwcG9ydAogY29udGFpbnMoUVRfQ09ORklHLCBwaG9ub24pOkRFRklORVMgKz0gRU5B
QkxFX1ZJREVPPTEKIGVsc2U6REVGSU5FUyArPSBFTkFCTEVfVklERU89MAogCi11bml4fHdpbjMy
LSo6IW1hYzohZW1iZWRkZWQ6IXdpbmNlKjohc3ltYmlhbiB7CisjIE5lc2NhcGUgcGx1Z2lucyBz
dXBwb3J0IChOUEFQSSkKK3VuaXh8d2luMzItKjohZW1iZWRkZWQ6IXdpbmNlKjohc3ltYmlhbiB7
CiAgICAgREVGSU5FUyArPSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xCi0gICAgdW5peDog
REVGSU5FUyArPSBYUF9VTklYCiB9IGVsc2UgewogICAgIERFRklORVMgKz0gRU5BQkxFX05FVFND
QVBFX1BMVUdJTl9BUEk9MAogfQpAQCAtMTEwMyw2ICsxMTA1LDEyIEBAIFNPVVJDRVMgKz0gXAog
ICAgIHdpbjMyLSo6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVXaW4uY3BwCiAg
ICAgZWxzZTogU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9TeXN0ZW1UaW1lUXQuY3BwCiAKKyAgICBt
YWMgeworICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgIHBsYXRmb3JtL3RleHQvY2Yv
U3RyaW5nQ0YuY3BwIFwKKyAgICAgICAgICAgIHBsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENG
LmNwcAorICAgIH0KKwogICAgIHdpbjMyLSogewogICAgICAgICBMSUJTICs9IC1sZ2RpMzIKICAg
ICAgICAgTElCUyArPSAtbHVzZXIzMgpAQCAtMTEyNSwzMSArMTEzMyw0MyBAQCBTT1VSQ0VTICs9
IFwKIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MSkgewog
Ci0gICAgICAgIFNPVVJDRVMgKz0gcGx1Z2lucy9ucGFwaS5jcHAKKyAgICBTT1VSQ0VTICs9IHBs
dWdpbnMvbnBhcGkuY3BwCiAKLSAgICAgICAgdW5peDohbWFjIHsKKyAgICB1bml4IHsKKyAgICAg
ICAgbWFjIHsKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgIHBsdWdp
bnMvbWFjL1BsdWdpblBhY2thZ2VNYWMuY3BwIFwKKyAgICAgICAgICAgICAgICBwbHVnaW5zL21h
Yy9QbHVnaW5WaWV3TWFjLmNwcAorICAgICAgICAgICAgT0JKRUNUSVZFX1NPVVJDRVMgKz0gXAor
ICAgICAgICAgICAgICAgIHBsYXRmb3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0gXAorICAg
ICAgICAgICAgICAgIHBsYXRmb3JtL21hYy9XZWJDb3JlTlNTdHJpbmdFeHRyYXMubW0KKyAgICAg
ICAgICAgIElOQ0xVREVQQVRIICs9IHBsYXRmb3JtL21hYworICAgICAgICAgICAgIyBOb3RlOiBY
UF9NQUNPU1ggaXMgZGVmaW5lZCBpbiBucGFwaS5oCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAgICAgICBwbHVnaW5zL3F0L1BsdWdpblBhY2th
Z2VRdC5jcHAgXAogICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcAor
ICAgICAgICAgICAgREVGSU5FUyArPSBYUF9VTklYCiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAg
ICAgd2luMzItKiB7Ci0gICAgICAgICAgICBJTkNMVURFUEFUSCArPSAkJFBXRC9wbHVnaW5zL3dp
bgotCi0gICAgICAgICAgICBTT1VSQ0VTICs9IHBhZ2Uvd2luL1BhZ2VXaW4uY3BwIFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAgXAot
ICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dpbi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVy
V2luLmNwcCBcCi0gICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvd2luL1BsdWdpblZpZXdX
aW4uY3BwCi0KLSAgICAgICAgICAgIExJQlMgKz0gXAotICAgICAgICAgICAgICAgIC1sYWR2YXBp
MzIgXAotICAgICAgICAgICAgICAgIC1sZ2RpMzIgXAotICAgICAgICAgICAgICAgIC1sc2hlbGwz
MiBcCi0gICAgICAgICAgICAgICAgLWxzaGx3YXBpIFwKLSAgICAgICAgICAgICAgICAtbHVzZXIz
MiBcCi0gICAgICAgICAgICAgICAgLWx2ZXJzaW9uCi0gICAgICAgIH0KKyAgICB3aW4zMi0qIHsK
KyAgICAgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGx1Z2lucy93aW4KKworICAgICAgICBTT1VS
Q0VTICs9IHBhZ2Uvd2luL1BhZ2VXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgXAorICAgICAgICAgICAgICAgICAgIHBsdWdpbnMv
d2luL1BsdWdpblBhY2thZ2VXaW4uY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbHVnaW5zL3dp
bi9QbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2luLmNwcCBcCisgICAgICAgICAgICAgICAgICAgcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKKworICAgICAgICBMSUJTICs9IFwKKyAgICAgICAg
ICAgIC1sYWR2YXBpMzIgXAorICAgICAgICAgICAgLWxnZGkzMiBcCisgICAgICAgICAgICAtbHNo
ZWxsMzIgXAorICAgICAgICAgICAgLWxzaGx3YXBpIFwKKyAgICAgICAgICAgIC1sdXNlcjMyIFwK
KyAgICAgICAgICAgIC1sdmVyc2lvbgorICAgIH0KIAogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKaW5kZXggNjk1MGViNy4uNjk2M2RiYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtNzQsNyArNzQsNyBAQAog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI2lmICFkZWZpbmVkKFFfV1NfWDExKSAmJiAh
ZGVmaW5lZChRX1dTX1dJTikKKyNpZiAoIWRlZmluZWQoUV9XU19YMTEpICYmICFkZWZpbmVkKFFf
V1NfV0lOKSAmJiAhZGVmaW5lZChRX1dTX01BQzMyKSkgfHwgZGVmaW5lZChRX09TX1dJTkNFKQog
CiBib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIGZhbHNlOyB9CiB1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQpAQCAtODMsNiArODMsOSBAQCBpbnQgUGx1Z2luUGFj
a2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYpIGNv
bnN0IHsgbm90SQogCiB2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRS
ZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBjb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2Vy
QWdlbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCitjb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnRTdGF0aWMo
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CisjZW5kaWYKIHZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9CkBAIC05OCw2ICsxMDEsOSBAQCB2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9p
ZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3Rvcjxj
aGFyPiYsIHVpbnQzMiwgY29uc3QgY2hhciopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7IH0KIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFy
aWFibGUsIHZvaWQqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOyB9CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCitOUEVycm9yIFBsdWdpblZp
ZXc6OmdldFZhbHVlU3RhdGljKE5QTlZhcmlhYmxlLCB2b2lkKikgeyByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsgfQorI2VuZGlmCiBQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpIHt9CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDU1YmQzYWUuLjhkYWI2YjQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKQEAgLTQxOSw2ICs0MTksMTIgQEAgTlBFcnJvciBQbHVnaW5WaWV3Ojpz
ZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCiAgICAgY2FzZSBOUFBW
cGx1Z2luVHJhbnNwYXJlbnRCb29sOgogICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsK
ICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQor
ICAgIGNhc2UgTlBQVnBsdWdpbkRyYXdpbmdNb2RlbDoKKyAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOworICAgIGNhc2UgTlBQVnBsdWdpbkV2ZW50TW9kZWw6CisgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CiAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwpAQCAtNTQwLDcgKzU0
NiwxMSBAQCBQbHVnaW5WaWV3OjpQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZSogcAogICAgICwgbV9wb3BQb3B1cHNTdGF0ZVRp
bWVyKHRoaXMsICZQbHVnaW5WaWV3Ojpwb3BQb3B1cHNTdGF0ZVRpbWVyRmlyZWQpCiAgICAgLCBt
X3BhcmFtTmFtZXMoMCkKICAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKKyNpZiBkZWZpbmVkKFhQX01B
Q09TWCkKKyAgICAsIG1faXNXaW5kb3dlZChmYWxzZSkKKyNlbHNlCiAgICAgLCBtX2lzV2luZG93
ZWQodHJ1ZSkKKyNlbmRpZgogICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQogICAgICwgbV9o
YXZlSW5pdGlhbGl6ZWQoZmFsc2UpCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBkZWZpbmVkKFFfV1Nf
WDExKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaCBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggMzQwNGFiYi4uMjU4MmI2YiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCkBAIC0yNjMsMTEgKzI2MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShX
SU5fT1MpICYmIFBMQVRGT1JNKFFUKQotICAgICAgICAvLyBPbmx5IHVuZGVyIFF0IG9uIFdpbmRv
d3MsIHRoZSBwbHVnaW4gd2lkZ2V0IChIV05EKSBkb2VzIG5vdCBtYXRjaCB0aGUgbmF0aXZlIHdp
ZGdldCAoUVdpZGdldCkuCi0gICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IG1fd2luZG93OyAv
LyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMKKyNpZiAoUExBVEZPUk0oUVQpICYmIFBMQVRGT1JNKFdJ
Tl9PUykpIHx8IGRlZmluZWQoWFBfTUFDT1NYKQorICAgICAgICAvLyBPbiBNYWMgT1NYIGFuZCBR
dC9XaW5kb3dzIHRoZSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBpdHMgb3duIG5hdGl2ZSB3aWRnZXQs
CisgICAgICAgIC8vIGJ1dCBpcyB1c2luZyB0aGUgY29udGFpbmluZyB3aW5kb3cgYXMgaXRzIHJl
ZmVyZW5jZSBmb3IgcG9zaXRpb25pbmcvcGFpbnRpbmcuCisgICAgICAgIFBsYXRmb3JtUGx1Z2lu
V2lkZ2V0IG1fd2luZG93OwogcHVibGljOgogICAgICAgICBQbGF0Zm9ybVBsdWdpbldpZGdldCBw
bGF0Zm9ybVBsdWdpbldpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93OyB9CisgICAgICAg
IHZvaWQgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQoUGxhdGZvcm1QbHVnaW5XaWRnZXQgd2lkZ2V0
KSB7CisgICAgICAgICAgICAgICAgbV93aW5kb3cgPSB3aWRnZXQ7CisgICAgICAgIH0KICNlbHNl
CiBwdWJsaWM6CiAgICAgICAgIFBsYXRmb3JtUGx1Z2luV2lkZ2V0IHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCkgY29uc3QgeyByZXR1cm4gcGxhdGZvcm1XaWRnZXQoKTsgfQpAQCAtMjc1LDYgKzI3OSwx
NSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkKKyAgICAg
ICAgTlBfQ0dDb250ZXh0IG1fbnBDZ0NvbnRleHQ7CisgICAgICAgIE93blB0cjxUaW1lcjxQbHVn
aW5WaWV3PiA+IG1fbnVsbEV2ZW50VGltZXI7CisKKyAgICAgICAgdm9pZCBzZXROUFdpbmRvd0lm
TmVlZGVkKCk7CisgICAgICAgIHZvaWQgbnVsbEV2ZW50VGltZXJGaXJlZChUaW1lcjxQbHVnaW5W
aWV3PiopOworICAgICAgICBQb2ludCBnbG9iYWxNb3VzZVBvc0ZvclBsdWdpbigpIGNvbnN0Owor
I2VuZGlmCisKICAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlw
IHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCiAgICAgICAgIG11dGFibGUgSW50
UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL21hYy9QbHVnaW5QYWNrYWdlTWFjLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9t
YWMvUGx1Z2luUGFja2FnZU1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjMxNjMwNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2lu
UGFja2FnZU1hYy5jcHAKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgX19MUDY0X18KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiV2Vi
Q29yZU5TU3RyaW5nRXh0cmFzLmgiCisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91
bmRhdGlvbi5oPgorCisjZGVmaW5lIFBsdWdpbk5hbWVPckRlc2NyaXB0aW9uU3RyaW5nTnVtYmVy
ICAgICAxMjYKKyNkZWZpbmUgTUlNRURlc2NyaXB0aW9uU3RyaW5nTnVtYmVyICAgICAgICAgICAg
IDEyNworI2RlZmluZSBNSU1FTGlzdFN0cmluZ1N0cmluZ051bWJlciAgICAgICAgICAgICAgMTI4
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVR
dWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2Ug
YSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5v
dCByZWxpYWJseSB1bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2Fk
IHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0K
KyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAg
ICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1
c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBK
YXZhIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9a
ZXJvUmVjdFdoZW5TY3JvbGxpbmcpOworICAgIH0KKworICAgIGlmIChtaW1lVHlwZSA9PSAiYXBw
bGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIC8vIFRoZSBmbGFzaCBwbHVn
aW4gb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxs
YSB1c2VyIGFnZW50CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1dhbnRzTW96aWxs
YVVzZXJBZ2VudCk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52
YWxpZGF0ZSk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2Vy
UGx1c09uZU1lc3NhZ2VzKTsKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRmxhc2hV
UkxOb3RpZnlCdWcpOworICAgIH0KKworfQorCit0eXBlZGVmIHZvaWQgKCpCUF9DcmVhdGVQbHVn
aW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOworCitzdGF0aWMgV1RGOjpSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZWFkUExpc3RGaWxlKENGU3RyaW5nUmVmIGZpbGVOYW1l
LCBib29sIGNyZWF0ZUZpbGUsIENGQnVuZGxlUmVmIGJ1bmRsZSkKK3sKKyAgICBpZiAoY3JlYXRl
RmlsZSkgeworICAgICAgICBCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQ
dHIgZnVuY1B0ciA9CisgICAgICAgICAgICAoQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVy
ZW5jZXNGdW5jUHRyKUNGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShidW5kbGUsIENG
U1RSKCJCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcyIpKTsKKyAgICAgICAgaWYg
KGZ1bmNQdHIpCisgICAgICAgICAgICBmdW5jUHRyKCk7CisgICAgfQorCisgICAgV1RGOjpSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtYXA7CisgICAgV1RGOjpSZXRhaW5QdHI8Q0ZVUkxSZWY+
IHVybCA9CisgICAgICAgIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGZpbGVOYW1lLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpOworCisgICAg
Q0ZEYXRhUmVmIHJlc291cmNlID0gMDsKKyAgICBTSW50MzIgY29kZTsKKyAgICBpZiAoIUNGVVJM
Q3JlYXRlRGF0YUFuZFByb3BlcnRpZXNGcm9tUmVzb3VyY2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
dXJsLmdldCgpLCAmcmVzb3VyY2UsIDAsIDAsICZjb2RlKSkKKyAgICAgICAgcmV0dXJuIG1hcDsK
KworICAgIFdURjo6UmV0YWluUHRyPENGUHJvcGVydHlMaXN0UmVmPiBwcm9wZXJ0eUxpc3QgPQor
ICAgICAgICAgICAgQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVGcm9tWE1MRGF0YShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCByZXNvdXJjZSwga0NGUHJvcGVydHlMaXN0SW1tdXRhYmxlLCAwKTsKKworICAgIENG
UmVsZWFzZShyZXNvdXJjZSk7CisKKyAgICBpZiAoIXByb3BlcnR5TGlzdCkKKyAgICAgICAgcmV0
dXJuIG1hcDsKKworICAgIGlmIChDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3QuZ2V0KCkpICE9IENG
RGljdGlvbmFyeUdldFR5cGVJRCgpKQorICAgICAgICByZXR1cm4gbWFwOworCisgICAgbWFwID0g
c3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihzdGF0aWNfY2FzdDxDRlByb3BlcnR5TGlzdFJl
Zj4ocHJvcGVydHlMaXN0LmdldCgpKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChTSW50MTYgaWQpCit7CisgICAg
VmVjdG9yPFN0cmluZz4gbGlzdDsKKworICAgIEhhbmRsZSBoYW5kbGUgPSBHZXQxUmVzb3VyY2Uo
J1NUUiMnLCBpZCk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBsaXN0OworCisg
ICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IHN0cmluZ0VuY29kaW5nRm9yUmVzb3VyY2Uo
aGFuZGxlKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIHAgPSAodW5zaWduZWQgY2hhciopKmhhbmRs
ZTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiBsaXN0OworCisgICAgU0ludDE2IGNvdW50
ID0gKihTSW50MTYqKXA7CisgICAgcCArPSBzaXplb2YoU0ludDE2KTsKKworICAgIGZvciAoU0lu
dDE2IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGxlbmd0
aCA9ICpwOworICAgICAgICBXVEY6OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RyID0gQ0ZTdHJp
bmdDcmVhdGVXaXRoUGFzY2FsU3RyaW5nKDAsIHAsIGVuY29kaW5nKTsKKyAgICAgICAgbGlzdC5h
cHBlbmQoc3RyLmdldCgpKTsKKyAgICAgICAgcCArPSAxICsgbGVuZ3RoOworICAgIH0KKworICAg
IHJldHVybiBsaXN0OworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7Cisg
ICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdURjo6UmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gbWltZURpY3Q7CisKKyAgICBXVEY6OlJldGFpblB0cjxDRlR5
cGVSZWY+IG1pbWVUeXBlc0ZpbGVOYW1lID0gQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9EaWN0aW9u
YXJ5S2V5KG1fbW9kdWxlLCBDRlNUUigiV2ViUGx1Z2luTUlNRVR5cGVzRmlsZW5hbWUiKSk7Cisg
ICAgaWYgKG1pbWVUeXBlc0ZpbGVOYW1lICYmIENGR2V0VHlwZUlEKG1pbWVUeXBlc0ZpbGVOYW1l
LmdldCgpKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7CisKKyAgICAgICAgV1RGOjpSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGZpbGVOYW1lID0gKENGU3RyaW5nUmVmKW1pbWVUeXBlc0ZpbGVOYW1l
LmdldCgpOworICAgICAgICBXVEY6OlJldGFpblB0cjxDRlN0cmluZ1JlZj4gaG9tZURpciA9IGhv
bWVEaXJlY3RvcnlQYXRoKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICAgICAgV1RGOjpSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHBhdGggPSBDRlN0cmluZ0NyZWF0ZVdpdGhGb3JtYXQoMCwgMCwgQ0ZT
VFIoIiVAL0xpYnJhcnkvUHJlZmVyZW5jZXMvJUAiKSwgaG9tZURpci5nZXQoKSwgZmlsZU5hbWUu
Z2V0KCkpOworCisgICAgICAgIFdURjo6UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGxpc3Qg
PSByZWFkUExpc3RGaWxlKHBhdGguZ2V0KCksIC8qY3JlYXRlRmlsZSovIGZhbHNlLCBtX21vZHVs
ZSk7CisgICAgICAgIGlmIChwbGlzdCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHBsaXN0IGlz
bid0IGxvY2FsaXplZCwgaGF2ZSB0aGUgcGx1Zy1pbiByZWNyZWF0ZSBpdCBpbiB0aGUgcHJlZmVy
cmVkIGxhbmd1YWdlLgorICAgICAgICAgICAgV1RGOjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxv
Y2FsaXphdGlvbk5hbWUgPQorICAgICAgICAgICAgICAgIChDRlN0cmluZ1JlZilDRkRpY3Rpb25h
cnlHZXRWYWx1ZShwbGlzdC5nZXQoKSwgQ0ZTVFIoIldlYlBsdWdpbkxvY2FsaXphdGlvbk5hbWUi
KSk7CisgICAgICAgICAgICBDRkxvY2FsZVJlZiBsb2NhbGUgPSBDRkxvY2FsZUNvcHlDdXJyZW50
KCk7CisgICAgICAgICAgICBpZiAobG9jYWxpemF0aW9uTmFtZSAhPSBDRkxvY2FsZUdldElkZW50
aWZpZXIobG9jYWxlKSkKKyAgICAgICAgICAgICAgICBwbGlzdCA9IHJlYWRQTGlzdEZpbGUocGF0
aC5nZXQoKSwgLypjcmVhdGVGaWxlKi8gdHJ1ZSwgbV9tb2R1bGUpOworCisgICAgICAgICAgICBD
RlJlbGVhc2UobG9jYWxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFBsaXN0
IGRvZXNuJ3QgZXhpc3QsIGFzayB0aGUgcGx1Zy1pbiB0byBjcmVhdGUgaXQuCisgICAgICAgICAg
ICBwbGlzdCA9IHJlYWRQTGlzdEZpbGUocGF0aC5nZXQoKSwgLypjcmVhdGVGaWxlKi8gdHJ1ZSwg
bV9tb2R1bGUpOworICAgICAgICB9CisKKyAgICAgICAgbWltZURpY3QgPSAoQ0ZEaWN0aW9uYXJ5
UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHBsaXN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luTUlN
RVR5cGVzIikpOworICAgIH0KKworICAgIGlmICghbWltZURpY3QpCisgICAgICAgIG1pbWVEaWN0
ID0gKENGRGljdGlvbmFyeVJlZilDRkJ1bmRsZUdldFZhbHVlRm9ySW5mb0RpY3Rpb25hcnlLZXko
bV9tb2R1bGUsIENGU1RSKCJXZWJQbHVnaW5NSU1FVHlwZXMiKSk7CisKKyAgICBpZiAobWltZURp
Y3QpIHsKKyAgICAgICAgQ0ZJbmRleCBwcm9wQ291bnQgPSBDRkRpY3Rpb25hcnlHZXRDb3VudCht
aW1lRGljdC5nZXQoKSk7CisgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiBrZXlzKHBy
b3BDb3VudCk7CisgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiB2YWx1ZXMocHJvcENv
dW50KTsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhtaW1lRGljdC5nZXQo
KSwga2V5cy5kYXRhKCksIHZhbHVlcy5kYXRhKCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHByb3BDb3VudDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSAoQ0ZT
dHJpbmdSZWYpa2V5c1tpXTsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gbWltZVR5cGUubG93ZXIo
KTsKKworICAgICAgICAgICAgV1RGOjpSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBleHRlbnNp
b25zRGljdCA9IChDRkRpY3Rpb25hcnlSZWYpdmFsdWVzW2ldOworCisgICAgICAgICAgICBXVEY6
UmV0YWluUHRyPENGTnVtYmVyUmVmPiBlbmFibGVkID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKGV4dGVuc2lvbnNEaWN0LmdldCgpLCBDRlNUUigiV2ViUGx1Z2luVHlwZUVuYWJs
ZWQiKSk7CisgICAgICAgICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgICAgIGludCBl
bmFibGVkVmFsdWUgPSAwOworICAgICAgICAgICAgICAgIGlmIChDRk51bWJlckdldFZhbHVlKGVu
YWJsZWQuZ2V0KCksIGtDRk51bWJlckludFR5cGUsICZlbmFibGVkVmFsdWUpICYmIGVuYWJsZWRW
YWx1ZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbWltZUV4dGVuc2lvbnM7CisgICAgICAgICAg
ICBXVEY6OlJldGFpblB0cjxDRkFycmF5UmVmPiBleHRlbnNpb25zID0gKENGQXJyYXlSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZXh0ZW5zaW9uc0RpY3QuZ2V0KCksIENGU1RSKCJXZWJQbHVnaW5F
eHRlbnNpb25zIikpOworICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnMpIHsKKyAgICAgICAgICAg
ICAgICBDRkluZGV4IGV4dGVuc2lvbkNvdW50ID0gQ0ZBcnJheUdldENvdW50KGV4dGVuc2lvbnMu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGV4dGVuc2lv
bkNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9KENG
U3RyaW5nUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZXh0ZW5zaW9ucy5nZXQoKSwgaSk7Cisg
ICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbi5sb3dlcigpOworICAgICAg
ICAgICAgICAgICAgICBtaW1lRXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9uKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMu
c2V0KG1pbWVUeXBlLCBtaW1lRXh0ZW5zaW9ucyk7CisKKyAgICAgICAgICAgIFN0cmluZyBkZXNj
cmlwdGlvbiA9IChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShleHRlbnNpb25zRGlj
dC5nZXQoKSwgQ0ZTVFIoIldlYlBsdWdpblR5cGVEZXNjcmlwdGlvbiIpKTsKKyAgICAgICAgICAg
IG1fbWltZVRvRGVzY3JpcHRpb25zLnNldChtaW1lVHlwZSwgZGVzY3JpcHRpb24pOworICAgICAg
ICB9CisKKyAgICAgICAgbV9uYW1lID0gKENGU3RyaW5nUmVmKUNGQnVuZGxlR2V0VmFsdWVGb3JJ
bmZvRGljdGlvbmFyeUtleShtX21vZHVsZSwgQ0ZTVFIoIldlYlBsdWdpbk5hbWUiKSk7CisgICAg
ICAgIG1fZGVzY3JpcHRpb24gPSAoQ0ZTdHJpbmdSZWYpQ0ZCdW5kbGVHZXRWYWx1ZUZvckluZm9E
aWN0aW9uYXJ5S2V5KG1fbW9kdWxlLCBDRlNUUigiV2ViUGx1Z2luRGVzY3JpcHRpb24iKSk7CisK
KyAgICB9IGVsc2UgeworICAgICAgICBpbnQgcmVzRmlsZSA9IENGQnVuZGxlT3BlbkJ1bmRsZVJl
c291cmNlTWFwKG1fbW9kdWxlKTsKKworICAgICAgICBVc2VSZXNGaWxlKHJlc0ZpbGUpOworCisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IG1pbWVzID0gc3RyaW5nTGlzdEZyb21SZXNvdXJjZUlkKE1J
TUVMaXN0U3RyaW5nU3RyaW5nTnVtYmVyKTsKKworICAgICAgICBpZiAobWltZXMuc2l6ZSgpICUg
MiAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxTdHJp
bmc+IGRlc2NyaXB0aW9ucyA9IHN0cmluZ0xpc3RGcm9tUmVzb3VyY2VJZChNSU1FRGVzY3JpcHRp
b25TdHJpbmdOdW1iZXIpOworICAgICAgICBpZiAoZGVzY3JpcHRpb25zLnNpemUoKSAhPSBtaW1l
cy5zaXplKCkgLyAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyAgaSA8IG1pbWVzLnNpemUoKTsgaSArPSAyKSB7CisgICAgICAgICAgICBT
dHJpbmcgbWltZSA9IG1pbWVzW2ldLmxvd2VyKCk7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBleHRlbnNpb25zOworICAgICAgICAgICAgbWltZXNbaSArIDFdLmxvd2VyKCkuc3BsaXQoVUNo
YXIoJywnKSwgZXh0ZW5zaW9ucyk7CisKKyAgICAgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5z
ZXQobWltZSwgZXh0ZW5zaW9ucyk7CisKKyAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25z
LnNldChtaW1lLCBkZXNjcmlwdGlvbnNbaSAvIDJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IG5hbWVzID0gc3RyaW5nTGlzdEZyb21SZXNvdXJjZUlkKFBsdWdpbk5hbWVP
ckRlc2NyaXB0aW9uU3RyaW5nTnVtYmVyKTsKKyAgICAgICAgaWYgKG5hbWVzLnNpemUoKSA9PSAy
KSB7CisgICAgICAgICAgICBtX2Rlc2NyaXB0aW9uID0gbmFtZXNbMF07CisgICAgICAgICAgICBt
X25hbWUgPSBuYW1lc1sxXTsKKyAgICAgICAgfQorCisgICAgICAgIENGQnVuZGxlQ2xvc2VCdW5k
bGVSZXNvdXJjZU1hcChtX21vZHVsZSwgcmVzRmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgaWYgKG1faXNMb2Fk
ZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgV1RGOjpSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGgoQWRvcHRDRiwgbV9wYXRo
LmNyZWF0ZUNGU3RyaW5nKCkpOworICAgIFdURjo6UmV0YWluUHRyPENGVVJMUmVmPiB1cmwoQWRv
cHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
cGF0aC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkp
OworICAgIG1fbW9kdWxlID0gQ0ZCdW5kbGVDcmVhdGUoTlVMTCwgdXJsLmdldCgpKTsKKyAgICBp
ZiAoIW1fbW9kdWxlIHx8ICFDRkJ1bmRsZUxvYWRFeGVjdXRhYmxlKG1fbW9kdWxlKSkgeworICAg
ICAgICBMT0coUGx1Z2luLCAiJXMgbm90IGxvYWRlZCIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOwor
CisgICAgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyIE5QX0dldEVudHJ5UG9pbnRzID0gMDsKKyAg
ICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7
CisKKyAgICBOUF9Jbml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKUNGQnVuZGxlR2V0
RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX0luaXRpYWxpemUiKSk7
CisgICAgTlBfR2V0RW50cnlQb2ludHMgPSAoTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKUNGQnVu
ZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShtX21vZHVsZSwgQ0ZTVFIoIk5QX0dldEVudHJ5
UG9pbnRzIikpOworICAgIG1fTlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpQ0ZC
dW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKG1fbW9kdWxlLCBDRlNUUigiTlBfU2h1dGRv
d24iKSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIU5QX0dldEVudHJ5UG9pbnRzIHx8
ICFtX05QUF9TaHV0ZG93bikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9w
bHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNz
LnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBucEVyciA9IE5QX0dldEVudHJ5
UG9pbnRzKCZtX3BsdWdpbkZ1bmNzKTsKKyAgICBMT0dfTlBFUlJPUihucEVycik7CisgICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9i
cm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0
VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOwor
ICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93
c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0
cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5Q
Tl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2gg
PSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9S
ZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRV
UkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJM
Tm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAg
IG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1
bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2
YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2Vu
YWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1
bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisK
KyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFy
aWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRp
ZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9i
cm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7
CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7Cisg
ICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAg
bV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2
YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9
IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBO
X1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9S
ZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFz
TWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7
CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247Cisg
ICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVy
ciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBF
UlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOwor
ICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBj
b25zdAoreworICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmlt
cGwoKS0+aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1
cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hD
b2RlcyksIDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wg
UGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZSYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlw
dGlvbjsKK30KKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQ
bGF0Zm9ybU1vZHVsZVZlcnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAoreworICAgIC8vIHJl
dHVybiAtMSwgMCwgb3IgMSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBlcXVhbCB0
bywgb3IgZ3JlYXRlciB0aGFuCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCisgICAgaWYgKG1f
bW9kdWxlVmVyc2lvbiAhPSBjb21wYXJlVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxl
VmVyc2lvbiA+IGNvbXBhcmVWZXJzaW9uID8gMSA6IC0xOworICAgIHJldHVybiAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhX19MUDY0X18KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luVmlld01hYy5jcHAgYi9XZWJDb3JlL3BsdWdpbnMv
bWFjL1BsdWdpblZpZXdNYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhmNWUzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpblZp
ZXdNYWMuY3BwCkBAIC0wLDAgKzEsNjk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIF9fTFA2NF9fCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgInd0Zi9SZXRhaW5QdHIuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5o
IgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNsdWRl
ICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKwordXNpbmcgSlNDOjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6OkludGVy
cHJldGVyOwordXNpbmcgSlNDOjpKU0xvY2s7Cit1c2luZyBKU0M6OkpTT2JqZWN0OwordXNpbmcg
SlNDOjpKU1ZhbHVlOwordXNpbmcgSlNDOjpVU3RyaW5nOworCisjaWYgUExBVEZPUk0oUVQpCisj
aW5jbHVkZSA8UVdpZGdldD4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CitRVF9CRUdJTl9OQU1FU1BB
Q0UKK2V4dGVybiBRX0dVSV9FWFBPUlQgT1NXaW5kb3dSZWYgcXRfbWFjX3dpbmRvd19mb3IoY29u
c3QgUVdpZGdldCAqdyk7CitRVF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKwordXNpbmcgc3RkOjpt
aW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGljIGludCBtb2RpZmllcnNGb3JFdmVudChV
SUV2ZW50V2l0aEtleVN0YXRlICpldmVudCk7CisKK3N0YXRpYyBpbmxpbmUgV2luZG93UmVmIG5h
dGl2ZVdpbmRvd0ZvcihQbGF0Zm9ybVdpZGdldCB3aWRnZXQpCit7CisjaWYgUExBVEZPUk0oUVQp
CisgICAgaWYgKHdpZGdldCkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRvd1JlZj4o
cXRfbWFjX3dpbmRvd19mb3Iod2lkZ2V0KSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwor
c3RhdGljIGlubGluZSBDR0NvbnRleHRSZWYgY2dIYW5kbGVGb3IoUGxhdGZvcm1XaWRnZXQgd2lk
Z2V0KQoreworI2lmIFBMQVRGT1JNKFFUKQorICAgIGlmICh3aWRnZXQpCisgICAgICAgIHJldHVy
biAoQ0dDb250ZXh0UmVmKXdpZGdldC0+bWFjQ0dIYW5kbGUoKTsKKyNlbmRpZgorICAgIHJldHVy
biAwOworfQorCitzdGF0aWMgaW5saW5lIEludFBvaW50IHRvcExldmVsT2Zmc2V0Rm9yKFBsYXRm
b3JtV2lkZ2V0IHdpZGdldCkKK3sKKyNpZiBQTEFURk9STShRVCkKKyAgICBpZiAod2lkZ2V0KSB7
CisgICAgICAgIFBsYXRmb3JtV2lkZ2V0IHRvcExldmVsID0gd2lkZ2V0LT53aW5kb3coKTsKKyAg
ICAgICAgcmV0dXJuIHdpZGdldC0+bWFwVG8odG9wTGV2ZWwsIFFQb2ludCgwLCAwKSkgKyB0b3BM
ZXZlbC0+Z2VvbWV0cnkoKS50b3BMZWZ0KCkgLSB0b3BMZXZlbC0+cG9zKCk7CisgICAgfQorI2Vu
ZGlmCisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLSBMaWZl
dGltZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgUGx1Z2luVmlldzo6aW5p
dCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAg
bV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAg
ICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsKKyAgICAg
ICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExv
YWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsK
KyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc2V0UGxhdGZvcm1QbHVnaW5XaWRnZXQobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkpOworCisgICAgbV9u
cENnQ29udGV4dC53aW5kb3cgPSAwOworICAgIG1fbnBDZ0NvbnRleHQuY29udGV4dCA9IDA7Cisg
ICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopJm1fbnBDZ0NvbnRleHQ7CisgICAgbV9ucFdp
bmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgIG1fbnBXaW5kb3cueCA9IDA7Cisg
ICAgbV9ucFdpbmRvdy55ID0gMDsKKyAgICBtX25wV2luZG93LndpZHRoID0gMDsKKyAgICBtX25w
V2luZG93LmhlaWdodCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAg
ICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5y
aWdodCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSAwOworCisgICAgc2V0
SXNOUEFQSVBsdWdpbih0cnVlKTsKKworICAgIHNob3coKTsKKworICAgIG1fc3RhdHVzID0gUGx1
Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworCisgICAgLy8gVE9ETzogSW1wbGVtZW50IG51
bGwgdGltZXIgdGhyb3R0bGluZyBkZXBlbmRpbmcgb24gcGx1Z2luIGFjdGl2YXRpb24KKyAgICBt
X251bGxFdmVudFRpbWVyLnNldChuZXcgVGltZXI8UGx1Z2luVmlldz4odGhpcywgJlBsdWdpblZp
ZXc6Om51bGxFdmVudFRpbWVyRmlyZWQpKTsKKyAgICBtX251bGxFdmVudFRpbWVyLT5zdGFydFJl
cGVhdGluZygwLjAyKTsKK30KKworUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQoreworICAgIHN0
b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJp
bmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5
KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5zY3Jp
cHQoKS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9w
bHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5s
b2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKKworICAgIG1fd2luZG93
ID0gMDsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFy
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+
ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+
ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0
cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0
cmVhbSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5
KCkpOworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEpTQzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzKGZhbHNlKTsKKworICAgIC8vIERlc3Ryb3kgdGhlIHBsdWdp
bgorICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHNldENh
bGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3ko
bV9pbnN0YW5jZSwgMCk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgUGx1Z2lu
Vmlldzo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9
IDA7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVTdGF0aWMoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVnaW4sICJQbHVnaW5WaWV3Ojpn
ZXRWYWx1ZVN0YXRpYyglZCkiLCB2YXJpYWJsZSk7CisKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7
CisgICAgY2FzZSBOUE5WVG9vbGtpdDoKKyAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMDsK
KyAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCisgICAgY2FzZSBOUE5WamF2YXNjcmlw
dEVuYWJsZWRCb29sOgorICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0
VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIExPRyhQbHVn
aW4sICJQbHVnaW5WaWV3OjpnZXRWYWx1ZSglZCkiLCB2YXJpYWJsZSk7CisKKyAgICBzd2l0Y2gg
KHZhcmlhYmxlKSB7CisgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgaWYg
KG1faXNKYXZhU2NyaXB0UGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50
RnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgIC8vIFJl
dHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGluCisg
ICAgICAgIC8vIDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRp
bWUuaHRtbD4KKyAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9O
UE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYg
PSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKworICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfQorCisgICAgY2FzZSBOUE5WUGx1Z2lu
RWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgIE5QT2JqZWN0
KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgcGx1Z2luU2NyaXB0
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXRO
UE9iamVjdCgpOworCisgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBy
ZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGluCisgICAgICAgIC8vIDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgaWYgKHBsdWdpblNj
cmlwdE9iamVjdCkKKyAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9i
amVjdCk7CisKKyAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAqdiA9
IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisg
ICAgfQorCisgICAgY2FzZSBOUE5Wc3VwcG9ydHNDb3JlR3JhcGhpY3NCb29sOgorICAgICAgICAq
KCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZ2V0VmFsdWVTdGF0aWModmFyaWFibGUs
IHZhbHVlKTsKKyAgICB9CisKK30KK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZp
ZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYg
KHBhcmVudCkKKyAgICAgICAgaW5pdCgpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLSBHZW9tZXRy
eSBhbmQgcGFpbnRpbmcgLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIFBsdWdpblZpZXc6OnNob3co
KQoreworICAgIExPRyhQbHVnaW4sICJQbHVnaW5WaWV3OjpzaG93KCkiKTsKKworICAgIHNldFNl
bGZWaXNpYmxlKHRydWUpOworCisgICAgaWYgKGlzUGFyZW50VmlzaWJsZSgpICYmIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCkpCisgICAgICAgIHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCktPnNldFZpc2li
bGUodHJ1ZSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpo
aWRlKCkKK3sKKyAgICBMT0coUGx1Z2luLCAiUGx1Z2luVmlldzo6aGlkZSgpIik7CisKKyAgICBz
ZXRTZWxmVmlzaWJsZShmYWxzZSk7CisKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxlKCkgJiYgcGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSkKKyAgICAgICAgcGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+c2V0
VmlzaWJsZShmYWxzZSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3OjpzZXRGb2N1cygpCit7CisgICAgTE9HKFBsdWdpbiwgIlBsdWdpblZpZXc6OnNldEZvY3Vz
KCkiKTsKKworICAgIGlmIChwbGF0Zm9ybVBsdWdpbldpZGdldCgpKQorICAgICAgIHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCktPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVhc29uKTsKKyAgIGVsc2UK
KyAgICAgICBXaWRnZXQ6OnNldEZvY3VzKCk7CisKKyAgICAvLyBUT0RPOiBBbHNvIGhhbmRsZSBh
bmQgcGFzcyBvbiBibHVyIGV2ZW50cyAoZm9jdXMgbG9zdCkKKworICAgIEV2ZW50UmVjb3JkIHJl
Y29yZDsKKyAgICByZWNvcmQud2hhdCA9IGdldEZvY3VzRXZlbnQ7CisgICAgcmVjb3JkLm1lc3Nh
Z2UgPSAwOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50KCk7CisgICAgcmVjb3JkLndoZXJl
ID0gZ2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZpZXJzID0gR2V0
Q3VycmVudEtleU1vZGlmaWVycygpOworCisgICAgaWYgKCFkaXNwYXRjaE5QRXZlbnQocmVjb3Jk
KSkgeworICAgICAgICBMT0coRXZlbnRzLCAiUGx1Z2luVmlldzo6c2V0Rm9jdXMoKTogR2V0LWZv
Y3VzIGV2ZW50IG5vdCBhY2NlcHRlZCIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpz
ZXRQYXJlbnRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAoaXNQYXJlbnRWaXNpYmxl
KCkgPT0gdmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2lkZ2V0OjpzZXRQYXJlbnRW
aXNpYmxlKHZpc2libGUpOworCisgICAgaWYgKGlzU2VsZlZpc2libGUoKSAmJiBwbGF0Zm9ybVBs
dWdpbldpZGdldCgpKQorICAgICAgICBwbGF0Zm9ybVBsdWdpbldpZGdldCgpLT5zZXRWaXNpYmxl
KHZpc2libGUpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJ
bnRSZWN0JikKK3sKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAh
cGFyZW50KCkgfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpCisgICAgICAg
IHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBuZXdDb250ZXh0UmVmID0gY2dIYW5kbGVGb3Io
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSk7CisgICAgaWYgKCFuZXdDb250ZXh0UmVmKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXaW5kb3dSZWYgbmV3V2luZG93UmVmID0gbmF0aXZlV2luZG93Rm9y
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOworICAgIGlmICghbmV3V2luZG93UmVmKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOwor
ICAgIEludFJlY3QgbmV3R2VvbWV0cnkgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dp
bmRvdyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKSwgZnJhbWVSZWN0KCkuc2l6ZSgpKTsKKworICAg
IC8vIFRPRE86IGFsc28gY29tcGFyZSBjbGlwIHJlY3RzCisgICAgaWYgKG5ld0dlb21ldHJ5ID09
IG1fd2luZG93UmVjdAorICAgICAgICAmJiBuZXdXaW5kb3dSZWYgPT0gbV9ucENnQ29udGV4dC53
aW5kb3cKKyAgICAgICAgJiYgbmV3Q29udGV4dFJlZiA9PSBtX25wQ2dDb250ZXh0LmNvbnRleHQp
CisgICAgcmV0dXJuOworCisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopJm1fbnBDZ0Nv
bnRleHQ7CisgICAgbV9ucENnQ29udGV4dC53aW5kb3cgPSBuZXdXaW5kb3dSZWY7CisgICAgbV9u
cENnQ29udGV4dC5jb250ZXh0ID0gbmV3Q29udGV4dFJlZjsKKworICAgIG1fd2luZG93UmVjdCA9
IG5ld0dlb21ldHJ5OworICAgIG1fbnBXaW5kb3cueCA9IG1fd2luZG93UmVjdC54KCk7CisgICAg
bV9ucFdpbmRvdy55ID0gbV93aW5kb3dSZWN0LnkoKTsKKyAgICBtX25wV2luZG93LndpZHRoID0g
bV93aW5kb3dSZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX3dpbmRvd1Jl
Y3QuaGVpZ2h0KCk7CisKKyAgICAvLyBUT0RPOiAoYWxzbyBjbGlwIGFnYWluc3Qgc2Nyb2xsYmFy
cywgZXRjLikKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV93
aW5kb3dSZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX3dp
bmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrcyhmYWxz
ZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKSBjb25zdAoreworICAg
IC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4gV2UgdXBkYXRlIHRoZSBwbHVnaW4gd2lkZ2V0CisgICAg
Ly8gaW4gcGFpbnQoKSwgaWYgdGhlIE5QV2luZG93IHN0cnVjdCBoYXMgY2hhbmdlZC4KK30KKwor
dm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICAvLyBUT0RP
OiBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXROUFdpbmRvd0lmTmVlZGVkKCk7CisKKyAgICBFdmVudFJlY29yZCBldmVudDsK
KyAgICBldmVudC53aGF0ID0gdXBkYXRlRXZ0OworICAgIGV2ZW50Lm1lc3NhZ2UgPSAobG9uZyB1
bnNpZ25lZCBpbnQpbV9ucENnQ29udGV4dC53aW5kb3c7CisgICAgZXZlbnQud2hlbiA9IFRpY2tD
b3VudCgpOworICAgIGV2ZW50LndoZXJlLmggPSAwOworICAgIGV2ZW50LndoZXJlLnYgPSAwOwor
ICAgIGV2ZW50Lm1vZGlmaWVycyA9IEdldEN1cnJlbnRLZXlNb2RpZmllcnMoKTsKKworICAgIENH
Q29udGV4dFJlZiBjZyA9IG1fbnBDZ0NvbnRleHQuY29udGV4dDsKKyAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNnKTsKKyAgICBJbnRQb2ludCBvZmZzZXQgPSBmcmFtZVJlY3QoKS5sb2NhdGlvbigp
OworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjZywgb2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7
CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChldmVudCkpIHsKKyAgICAgICAgTE9HKEV2ZW50
cywgIlBsdWdpblZpZXc6OnBhaW50KCk6IFBhaW50IGV2ZW50IG5vdCBhY2NlcHRlZCIpOworICAg
IH0KKworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY2cpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBsYXRm
b3JtUGx1Z2luV2lkZ2V0KCkpIHsKKyAgICAgICAgLy8gVE9ETzogb3B0aW1pemUKKyAgICAgICAg
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKS0+dXBkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQorewor
ICAgIC8vIFRPRE86IG9wdGltaXplCisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQoreworICAgIC8vIFRPRE86
IG9wdGltaXplCisgICAgaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNl
UmVkcmF3KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tIEV2ZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgUGx1Z2lu
Vmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBFdmVudFJl
Y29yZCByZWNvcmQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQpIHsKKyAgICAgICAgLy8gTW91c2UgbW92ZW1lbnQgaXMgaGFuZGxlZCBieSBu
dWxsIHRpbWVyIGV2ZW50cworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgeworICAgICAgICByZWNvcmQu
d2hhdCA9IGFkanVzdEN1cnNvckV2ZW50OworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCkgeworICAgICAgICByZWNvcmQud2hhdCA9IGFk
anVzdEN1cnNvckV2ZW50OworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgcmVjb3JkLndoYXQgPSBtb3VzZURvd247
CisgICAgICAgIC8vIFRoZSBwbHVnaW4gbmVlZHMgZm9jdXMgdG8gcmVjZWl2ZSBrZXlib2FyZCBl
dmVudHMKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fcGFy
ZW50RnJhbWUpOworICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2Vk
Tm9kZShtX2VsZW1lbnQpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkubW91c2V1cEV2ZW50KSB7CisgICAgICAgIHJlY29yZC53aGF0ID0gbW91c2VVcDsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVjb3JkLndoZXJlID0g
Z2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZpZXJzID0gbW9kaWZp
ZXJzRm9yRXZlbnQoZXZlbnQpOworCisgICAgaWYgKCFldmVudC0+YnV0dG9uRG93bigpKQorICAg
ICAgICByZWNvcmQubW9kaWZpZXJzIHw9IGJ0blN0YXRlOworCisgICAgaWYgKGV2ZW50LT5idXR0
b24oKSA9PSAyKQorICAgICAgICByZWNvcmQubW9kaWZpZXJzIHw9IGNvbnRyb2xLZXk7CisKKyAg
ICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQpKSB7CisgICAgICAgIGlmIChyZWNvcmQud2hh
dCA9PSBhZGp1c3RDdXJzb3JFdmVudCkKKyAgICAgICAgICAgIHJldHVybjsgLy8gU2lnbmFscyB0
aGF0IHRoZSBwbHVnaW4gd2FudHMgYSBub3JtYWwgY3Vyc29yCisKKyAgICAgICAgTE9HKEV2ZW50
cywgIlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoKTogTW91c2UgZXZlbnQgdHlwZSAlZCBh
dCAlZCwlZCBub3QgYWNjZXB0ZWQiLAorICAgICAgICAgICAgICAgIHJlY29yZC53aGF0LCByZWNv
cmQud2hlcmUuaCwgcmVjb3JkLndoZXJlLnYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIExPRyhQbHVnaW4s
ICJQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KCkgLS0tLS0tLS0tLS0tLS0tLS0gIik7
CisKKyAgICBMT0coUGx1Z2luLCAiUFY6OmhLRSgpOiBLRS5rZXlDb2RlOiAweCUwMlgsIEtFLmNo
YXJDb2RlOiAlZCIsCisgICAgICAgICAgICBldmVudC0+a2V5Q29kZSgpLCBldmVudC0+Y2hhckNv
ZGUoKSk7CisKKyAgICBFdmVudFJlY29yZCByZWNvcmQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUo
KSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50KSB7CisgICAgICAgIC8vIFRoaXMgZXZlbnQg
aXMgdGhlIHJlc3VsdCBvZiBhIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5RG93biB3aGljaAor
ICAgICAgICAvLyB3YXMgZGlzYW1iaWd1YXRlZCBpbnRvIGEgUGxhdGZvcm1LZXlib2FyZEV2ZW50
OjpSYXdLZXlEb3duLiBTaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0
aGUgdGV4dCBoZXJlLCB3ZSByZXR1cm4sIGFuZCB3YWl0IGZvciB0aGUKKyAgICAgICAgLy8gY29y
cmVzcG9uZGluZyBldmVudCBiYXNlZCBvbiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIuCisg
ICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgLy8gV2hpY2ggd291bGQgYmUgdGhpcyBvbmUu
IFRoaXMgZXZlbnQgd2FzIGRpc2FtYmlndWF0ZWQgZnJvbSB0aGUgc2FtZQorICAgICAgICAvLyBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OktleURvd24sIGJ1dCB0byBhIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6Q2hhciwKKyAgICAgICAgLy8gd2hpY2ggcmV0YWlucyB0aGUgdGV4dCBmcm9tIHRoZSBv
cmlnaW5hbCBldmVudC4gU28sIHdlIGNhbiBzYWZlbHkgcGFzcworICAgICAgICAvLyBvbiB0aGUg
ZXZlbnQgYXMgYSBrZXktZG93biBldmVudCB0byB0aGUgcGx1Z2luLgorICAgICAgICByZWNvcmQu
d2hhdCA9IGtleURvd247CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5rZXl1cEV2ZW50KSB7CisgICAgICAgIC8vIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5
VXAgZXZlbnRzIGFsd2F5cyBoYXZlIHRoZSB0ZXh0LCBzbyBub3RoaW5nCisgICAgICAgIC8vIGZh
bmN5IGhlcmUuCisgICAgICAgIHJlY29yZC53aGF0ID0ga2V5VXA7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCog
cGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpOworICAgIGludCBrZXlDb2RlID0gcGxh
dGZvcm1FdmVudC0+bmF0aXZlVmlydHVhbEtleUNvZGUoKTsKKworICAgIGNvbnN0IFN0cmluZyB0
ZXh0ID0gcGxhdGZvcm1FdmVudC0+dGV4dCgpOworICAgIGlmICh0ZXh0Lmxlbmd0aCgpIDwgMSkg
eworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFdURjo6UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZlRleHQoV1RGOjpBZG9w
dENGLCB0ZXh0LmNyZWF0ZUNGU3RyaW5nKCkpOworCisgICAgTE9HKFBsdWdpbiwgIlBWOjpoS0Uo
KTogUEtFLnRleHQ6ICVzLCBQS0UudW5tb2RpZmllZFRleHQ6ICVzLCBQS0Uua2V5SWRlbnRpZmll
cjogJXMiLAorICAgICAgICAgICAgdGV4dC5hc2NpaSgpLmRhdGEoKSwgcGxhdGZvcm1FdmVudC0+
dW5tb2RpZmllZFRleHQoKS5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAgIHBsYXRmb3JtRXZl
bnQtPmtleUlkZW50aWZpZXIoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBjaGFyIGNoYXJDb2Rl
c1syXSA9IHsgMCwgMCB9OworICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKGNmVGV4dC5nZXQo
KSwgY2hhckNvZGVzLCAyLCBDRlN0cmluZ0dldFN5c3RlbUVuY29kaW5nKCkpKSB7CisgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IHJlc29sdmUgY2hhcmFjdGVyIGNvZGUgdXNpbmcgc3lzdGVt
IGVuY29kaW5nLiIpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHJlY29yZC53aGVyZSA9IGdsb2JhbE1vdXNlUG9zRm9y
UGx1Z2luKCk7CisgICAgcmVjb3JkLm1vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50
KTsKKyAgICByZWNvcmQubWVzc2FnZSA9ICgoa2V5Q29kZSAmIDB4RkYpIDw8IDgpIHwgKGNoYXJD
b2Rlc1swXSAmIDB4RkYpOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50KCk7CisKKyAgICBM
T0coUGx1Z2luLCAiUFY6OmhLRSgpOiByZWNvcmQubW9kaWZpZXJzOiAlZCIsIHJlY29yZC5tb2Rp
ZmllcnMpOworCisgICAgTE9HKFBsdWdpbiwgIlBWOjpoS0UoKTogUEtFLnF0RXZlbnQoKS0+bmF0
aXZlVmlydHVhbEtleTogMHglMDJYLCBjaGFyQ29kZTogJWQiLAorICAgICAgICAgICAgICAga2V5
Q29kZSwgaW50KHVjaGFyKGNoYXJDb2Rlc1swXSkpKTsKKworICAgIGlmICghZGlzcGF0Y2hOUEV2
ZW50KHJlY29yZCkpIHsKKyAgICAgICAgTE9HKEV2ZW50cywgIlBsdWdpblZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoKTogS2V5Ym9hcmQgZXZlbnQgdHlwZSAlZCBub3QgYWNjZXB0ZWQiLAorICAg
ICAgICAgICAgICAgIHJlY29yZC53aGF0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6bnVsbEV2
ZW50VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3PiopCit7CisgICAgRXZlbnRSZWNvcmQgcmVj
b3JkOworCisgICAgcmVjb3JkLndoYXQgPSBudWxsRXZlbnQ7CisgICAgcmVjb3JkLm1lc3NhZ2Ug
PSAwOworICAgIHJlY29yZC53aGVuID0gVGlja0NvdW50KCk7CisgICAgcmVjb3JkLndoZXJlID0g
Z2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKTsKKyAgICByZWNvcmQubW9kaWZpZXJzID0gR2V0Q3Vy
cmVudEtleU1vZGlmaWVycygpOworICAgIGlmICghQnV0dG9uKCkpCisgICAgICAgIHJlY29yZC5t
b2RpZmllcnMgfD0gYnRuU3RhdGU7CisKKyAgICBpZiAoIWRpc3BhdGNoTlBFdmVudChyZWNvcmQp
KSB7CisgICAgICAgIExPRyhFdmVudHMsICJQbHVnaW5WaWV3OjpudWxsRXZlbnRUaW1lckZpcmVk
KCk6IE51bGwgZXZlbnQgbm90IGFjY2VwdGVkIik7CisgICAgfQorfQorCitzdGF0aWMgaW50IG1v
ZGlmaWVyc0ZvckV2ZW50KFVJRXZlbnRXaXRoS2V5U3RhdGUqIGV2ZW50KQoreworICAgIGludCBt
b2RpZmllcnMgPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG1vZGlm
aWVycyB8PSBjb250cm9sS2V5OworCisgICAgaWYgKGV2ZW50LT5hbHRLZXkoKSkKKyAgICAgICAg
bW9kaWZpZXJzIHw9IG9wdGlvbktleTsKKworICAgIGlmIChldmVudC0+bWV0YUtleSgpKQorICAg
ICAgICBtb2RpZmllcnMgfD0gY21kS2V5OworCisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQor
ICAgICAgICBtb2RpZmllcnMgfD0gc2hpZnRLZXk7CisKKyAgICAgcmV0dXJuIG1vZGlmaWVyczsK
K30KKworUG9pbnQgUGx1Z2luVmlldzo6Z2xvYmFsTW91c2VQb3NGb3JQbHVnaW4oKSBjb25zdAor
eworICAgIFBvaW50IHBvczsKKyAgICBHZXRHbG9iYWxNb3VzZSgmcG9zKTsKKworICAgIEludFBv
aW50IG9mZnNldCA9IHRvcExldmVsT2Zmc2V0Rm9yKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCkpOwor
ICAgIHBvcy5oIC09IG9mZnNldC54KCk7CisgICAgcG9zLnYgLT0gb2Zmc2V0LnkoKTsKKworICAg
IHBvcy5oID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KHBvcy5oICogSElHZXRTY2FsZUZhY3RvcigpKTsK
KyAgICBwb3MudiA9IHN0YXRpY19jYXN0PHNob3J0Pihwb3MudiAqIEhJR2V0U2NhbGVGYWN0b3Io
KSk7CisKKyAgICByZXR1cm4gcG9zOworfQorCitib29sIFBsdWdpblZpZXc6OmRpc3BhdGNoTlBF
dmVudChOUEV2ZW50JiBldmVudCkKK3sKKyAgICBQbHVnaW5WaWV3OjpzZXRDdXJyZW50UGx1Z2lu
Vmlldyh0aGlzKTsKKyAgICBKU0M6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nrcyhm
YWxzZSk7CisgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKworICAgIGJvb2wgYWNjZXB0ZWQg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJmV2ZW50KTsKKwor
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIFBsdWdpblZpZXc6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworICAgIHJldHVybiBhY2NlcHRlZDsKK30KKworLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLSBNaXNjZWxsYW5lb3VzICAtLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGljIGNvbnN0
IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4
NjsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK2NvbnN0
IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcGx1Z2luLT5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAg
IHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisK
K2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudFN0YXRpYygpCit7CisgICAgcmV0dXJu
IE1vemlsbGFVc2VyQWdlbnQ7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJl
YWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYp
Cit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5z
dGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0
cmluZyg4KTsKKworICAgIGlmICghZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3Blbigo
ZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7CisKKyAgICBpZiAoZmlsZUhhbmRsZSA9PSAw
KQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICBpbnQgYnl0ZXNS
ZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICBmY2xv
c2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gIV9fTFA2NF9fCi0tIAoxLjYu
MC5yYzEuMjcuZzliNmJmCgo=
</data>
<flag name="review"
          id="11549"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>